", T("soundInfoAll")
]
});
};
})();
addons/topbarLevel/feedbackIcon/04_popupDone/popup.ls
(function(){
return function(){
var close, div, popup;
close = function(){
return popup.close();
};
div = Div().css({
width: "18em",
margin: "1em 0 0.5em"
}).append(Div().css({
paddingBottom: "0.5em"
}).html(T("thanksForReporting")), inc("../00_shared/button/button")(T("ok"), close));
return popup = inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: false
});
};
})();
addons/topbarLevel/feedbackIcon/_t.ls
(function(){
return {
sendFeedback: {
de: "Möchtest du uns ein Problem melden?",
en: "Would you like to report a problem?",
fr: "Tu veux nous signaler un problème ?",
es: "¿Quieres reportar algún problema?",
pt: "Gostaria de reportar um problema?"
},
send: {
de: "Senden",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
},
hasMistake: {
de: "hat einen Fehler",
en: "contains a mistake",
fr: "a une erreur",
es: "tiene un error",
pt: "há um erro"
},
noSound: {
de: "hat keinen Ton",
en: "is without sound",
fr: "n'a pas de son",
es: "no hay sonido",
pt: "não há som"
},
tooEasy: {
de: "ist zu leicht",
en: "is too easy",
fr: "est trop facile",
es: "es demasiado fácil",
pt: "é muito fácil"
},
tooHard: {
de: "ist zu schwer",
en: "is too difficult",
fr: "est trop difficile",
es: "es demasiado difícil",
pt: "é muito difícil"
},
theExercise: {
de: "Die Aufgabe ...",
en: "The exercise ...",
fr: "L'exercice…",
es: "El ejercicio...",
pt: "O exercício..."
},
soundInfoBrowser: {
de: "Bitte überprüfe, ob die Lautstärke auf deinem Gerät hochgedreht ist.",
en: "Please check whether the volume on your device is turned up.",
fr: "N'oublie pas de vérifier que le son de ton appareil est activé.",
es: "Por favor, verifica que el sonido de tu dispositivo esté activado.",
pt: "Por favor, verifique se o volume do seu dispositivo está ativado."
},
soundInfoAndroid: {
de: "Bitte überprüfe, ob die Lautstärke für Medien auf deinem Gerät hochgedreht ist.",
en: "Please check whether the volume for media on your device is turned up.",
fr: "N'oublie pas de vérifier que le son pour les média est activé sur ton appareil.",
es: "Por favor, verifica en tu dispositivo que el volumen de medios esté activado.",
pt: "Por favor, verifique se o volume de mídia em seu dispositivo está ativado."
},
soundInfoIOS: {
de: "Auf iPhones und iPads muss der Stummschalter ausgeschaltet sein, damit du bei ANTON Ton hören kannst. Dieser ist entweder an der Seite deines Gerätes oder im Kontrollzentrum (dort, wo du auch die Helligkeit einstellst).",
en: "On iPhones and iPads, the mute button must be disabled in order to be able to hear sounds in ANTON. This button is located either on the side of your device or is marked as a crossed-out sound symbol in the control center (where you set the brightness).",
fr: "Sur les iPhones et les iPads, le mode silencieux doit être désactivé pour entendre le son sur ANTON. Ça se fait soit grâce un bouton latéral, soit dans les réglages (où tu définis aussi la luminosité).",
es: "Tanto en iPhones como en iPads es necesario desactivar el modo silencioso para poder escuchar el sonido de ANTON. Esto lo logras usando el botón lateral de tu dispositivo o en el centro de control (en donde también ajustas el brillo de tu pantalla).",
pt: "Tanto em iPhones como em iPads, é necessário desativar o botão mudo para que você possa ouvir o som do ANTON. Este botão você encontra ou na lateral do seu dispositivo ou no centro de controle (no mesmo lugar onde você ajusta o brilho do seu aparelho)."
},
soundInfoAll: {
de: "Hörst du immer noch keinen Ton? Dann probiere es bitte einmal mit Kopfhörern.
Falls es immer noch nicht klappt, klicke bitte erneut auf den Smiley und dann auf hat einen Fehler und beschreibe uns dein Problem möglichst genau.",
en_gb: "Still no sound? Then please try it using headphones.
If it still doesn't work, please click on the smiley again and then on contains a mistake and describe the problem in as much detail as possible.",
en: "Still no sound? Then please try it using headphones.
If it still doesn't work, please click on the smiley again and then on contains a mistake and describe the problem as detailed as possible.",
fr: "Toujours pas de son ? Tu peux essayer avec un casque ou des écouteurs.
Si ça ne marche toujours pas, alors appuie encore sur le smiley et sur a une erreur, puis décris le problème avec autant de détails que possible.",
es: "¿Aún no funciona el sonido? Favor de intentarlo con audífonos.
Si aún no funciona, por favor, presiona nuevamente la carita feliz y después, en vez de presionar no tiene sonido, presiona tiene un error. Descríbenos tu problema lo más detalladamente posible.",
pt: "Ainda sem som? Por favor, experimente usar fones de ouvido.
Dieser ist entweder an der Seite deines Gerätes oder im Kontrollzentrum (dort, wo du auch die Helligkeit einstellst).",
en_gb: "Your device is currently muted. Please unmute your device to hear sound in the ANTON app.
A switch will either be on the side of your device or in the control centre (where you also adjust brightness).",
en: "Your device is currently muted. Please unmute your device to hear sound in the ANTON app.
A switch will either be on the side of your device or in the control center (where you also adjust brightness).",
fr: "Ton appareil est en mode silencieux. Merci de désactiver ce mode pour avoir le son dans l'appli ANTON.
Tu peux le faire soit grâce à un bouton sur le côté de ton appareil, soit dans le centre de contrôle (où tu veux aussi régler la luminosité).",
es: "En tu dispositivo está activado el modo silencio. Necesitas desactivar el modo silencio para escuchar el sonido en ANTON.
Esto lo logras usando el botón lateral de tu dispositivo o en el centro de control (en donde también ajustas el brillo de tu pantalla).",
pt: "Seu aparelho está em modo silencioso. Por favor, desative o modo silencioso para ouvir os sons no aplicativo ANTON.
(Das Geburtsjahr dient nur zur Altersüberprüfung und wird von uns nicht gespeichert.)",
en: "To use this feature, you must be at least $1 years old or ask your parents for help.
(The year of birth is only used for age verification purposes and will not be saved by us.)",
fr: "Pour utiliser cette fonction, tu dois avoir au moins $1 ans ou demander à tes parents de t'aider.
(L'année de naissance est utilisée uniquement pour la vérification de l'âge. Nous ne conserverons pas cette donnée.)",
es: "Para utilizar esta función debes tener por lo menos $1 años de edad o pedirle ayuda a tus padres.
(El año de nacimiento sirve únicamente para verificar la edad y no se guardará en nuestra base de datos.)",
pt: "Para utilizar esta função, você deve ter pelo menos $1 anos de idade ou pedir ajuda aos seus pais.
(O ano de nascimento será utilizado unicamente para certificar a idade e não será salvo em nosso banco de dados.)"
},
minAgeText2WithoutParents: {
de: "Für diese Funktion musst du mindestens $1 Jahre alt sein.
(Das Geburtsjahr dient nur zur Altersüberprüfung und wird von uns nicht gespeichert.)",
en: "To use this feature, you must be at least $1 years old.
(The year of birth is only used for age verification purposes and will not be saved by us.)",
fr: "Pour utiliser cette fonction, tu dois avoir au moins $1 ans.
(L'année de naissance est utilisée uniquement pour la vérification de l'âge. Nous ne conserverons pas cette donnée.)",
es: "Para utilizar esta función debes tener por lo menos $1 años de edad.
(El año de nacimiento sirve únicamente para verificar la edad y no se guardará en nuestra base de datos)",
pt: "Para utilizar esta função, você deve ter pelo menos $1 anos de idade.
Firefox - https://www.mozilla.org/es/firefox/ Chrome - https://www.google.com/chrome/"
},
errorMessage: {
de: "Beim ANTON-Start ist ein Fehler aufgetreten. Wir kümmern uns darum.",
en: "An error has occurred while loading ANTON. We are working on it.",
fr: "Une erreur s'est produite pendant le chargement d'ANTON. On s'en occupe !",
es: "Ocurrió un error al iniciar ANTON. Lo estamos resolviendo.",
pt: "Um erro ocorreu ao iniciar ANTON. Nós cuidaremos disso."
},
offlineMessage: {
de: "ANTON muss neue Daten laden, es konnte allerdings keine Internetverbindung hergestellt werden. Bitte stelle sicher, dass du online bist.",
en_gb: "ANTON needs to load new data, however no internet connection could be found. Please make sure that you are connected to the internet.",
en: "ANTON needs to load new data, however no internet connection could be established. Please verify that you are online.",
fr: "ANTON doit charger de nouvelles données, mais aucune connexion Internet n'a pu être établie. Merci de vérifier que tu es en ligne.",
es: "ANTON necesita cargar datos nuevos. Pero no se ha podido establecer ninguna conexión a internet. Por favor, verifica tu conexión.",
pt: "O ANTON precisa baixar novos dados. Entretanto, não foi possível estabelecer uma conexão com a internet. Por favor, confira se você está online."
},
error: {
de: "Ups, hier ist etwas schiefgelaufen.",
en: "Oops, something went wrong.",
fr: "Oups… on dirait que quelque chose ne fonctionne pas.",
es: "¡Ups! Algo salió mal.",
pt: "Ops, algo deu errado aqui."
},
exitApp: {
de: "Möchtest du die App wirklich schließen?",
en: "Are you sure you want to close the app?",
fr: "Veux-tu vraiment fermer l'appli ?",
es: "¿Realmente quieres cerrar la aplicación?",
pt: "Tem certeza que deseja fechar o aplicativo?"
},
closeButton: {
de: "Schließen",
en: "Close",
fr: "Fermer",
es: "Cerrar",
pt: "Fechar"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
}
};
})();
lib/init/androidBack/androidBack.ls
(function(){
return function(){
if (window.onAndroidBack != null) {
return;
}
window.onAndroidBack = function(){
var elements, i$, len$, e, results$ = [];
if (app.currentPopup) {
app.currentPopup.close();
return;
}
elements = body.findAll(".androidBack");
if (elements.length > 0) {
for (i$ = 0, len$ = elements.length; i$ < len$; ++i$) {
e = elements[i$];
results$.push(e.triggerCustomEvent({
event: "androidBack"
}));
}
return results$;
} else if (body.findFirst(".androidBackCloseApp")) {
return inc("exitApp/exit")();
}
};
return document.addEventListener("backbutton", window.onAndroidBack, false);
};
})();
lib/init/androidBack/exitApp/exit.ls
(function(){
return function(){
return inc("/lib/gui/confirmPopup/popup")({
label: T("exitApp"),
yesLabel: T("closeButton"),
noLabel: T("cancelButton"),
done: function(confirmed){
var ref$;
if (confirmed) {
return (ref$ = navigator.app) != null ? typeof ref$.exitApp == 'function' ? ref$.exitApp() : void 8 : void 8;
}
}
});
};
})();
lib/init/backupLocalStorage/init.ls
(function(){
return function(done){
var oldStore, k, v, saveStoreToDisk, saveStoreToDiskDebounced, saveAndQuit, readLocalStorageFile, parseLocalStorageData, writeLocalStorageData, own$ = {}.hasOwnProperty;
if (Store.version === 2) {
done();
return;
}
oldStore = window.Store;
window.Store = function(key, value){
var result;
if (deepEq$(key, false, '===')) {
helpers.postEvent(Store('deviceLogId'), {
event: 'deviceDebugLocalStorageFalseCall',
value: value
});
return null;
}
result = oldStore.apply(oldStore, arguments);
if (value != null && engine.isMobileApp) {
saveStoreToDiskDebounced();
}
return result;
};
for (k in oldStore) if (own$.call(oldStore, k)) {
v = oldStore[k];
window.Store[k] = v;
}
window.Store.remove = function(key){
var result;
result = oldStore.remove(key);
if (engine.isMobileApp) {
saveStoreToDiskDebounced();
}
return result;
};
saveStoreToDisk = function(cb){
localStorage.isSaved = true;
return app.fileSystem.writeFile("localStorageSave/localStorage.json", JSON.stringify(localStorage), 0, function(err, res){
return typeof cb == 'function' ? cb() : void 8;
});
};
saveStoreToDiskDebounced = _.debounce(saveStoreToDisk, 500);
saveAndQuit = function(){
return saveStoreToDisk(done);
};
readLocalStorageFile = function(){
return app.fileSystem.readFile("localStorageSave/localStorage.json", function(err, res){
if (err) {
return saveAndQuit();
} else {
return parseLocalStorageData(res.data);
}
});
};
parseLocalStorageData = function(data){
var e;
try {
data = JSON.parse(data);
} catch (e$) {
e = e$;
return saveAndQuit();
}
return writeLocalStorageData(data);
};
writeLocalStorageData = function(data){
var currData, key, value;
currData = JSON.parse(JSON.stringify(localStorage));
for (key in data) {
value = data[key];
localStorage[key] = value;
}
helpers.postEvent(Store('deviceLogId'), {
event: 'deviceDebugRecoverLocalStorage',
recoveredData: data,
currentData: currData
});
return done();
};
if (!Store('isSaved') && engine.isMobileApp) {
return readLocalStorageFile();
} else {
return done();
}
};
})();
function deepEq$(x, y, type){
var toString = {}.toString, hasOwnProperty = {}.hasOwnProperty,
has = function (obj, key) { return hasOwnProperty.call(obj, key); };
var first = true;
return eq(x, y, []);
function eq(a, b, stack) {
var className, length, size, result, alength, blength, r, key, ref, sizeB;
if (a == null || b == null) { return a === b; }
if (a.__placeholder__ || b.__placeholder__) { return true; }
if (a === b) { return a !== 0 || 1 / a == 1 / b; }
className = toString.call(a);
if (toString.call(b) != className) { return false; }
switch (className) {
case '[object String]': return a == String(b);
case '[object Number]':
return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
case '[object Date]':
case '[object Boolean]':
return +a == +b;
case '[object RegExp]':
return a.source == b.source &&
a.global == b.global &&
a.multiline == b.multiline &&
a.ignoreCase == b.ignoreCase;
}
if (typeof a != 'object' || typeof b != 'object') { return false; }
length = stack.length;
while (length--) { if (stack[length] == a) { return true; } }
stack.push(a);
size = 0;
result = true;
if (className == '[object Array]') {
alength = a.length;
blength = b.length;
if (first) {
switch (type) {
case '===': result = alength === blength; break;
case '<==': result = alength <= blength; break;
case '<<=': result = alength < blength; break;
}
size = alength;
first = false;
} else {
result = alength === blength;
size = alength;
}
if (result) {
while (size--) {
if (!(result = size in a == size in b && eq(a[size], b[size], stack))){ break; }
}
}
} else {
if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) {
return false;
}
for (key in a) {
if (has(a, key)) {
size++;
if (!(result = has(b, key) && eq(a[key], b[key], stack))) { break; }
}
}
if (result) {
sizeB = 0;
for (key in b) {
if (has(b, key)) { ++sizeB; }
}
if (first) {
if (type === '<<=') {
result = size < sizeB;
} else if (type === '<==') {
result = size <= sizeB
} else {
result = size === sizeB;
}
} else {
first = false;
result = size === sizeB;
}
}
}
stack.pop();
return result;
}
}
lib/init/blockOldBrowsers/block.ls
(function(){
return function(){
var agent, name, detectedBrowser, block, s;
agent = navigator.userAgent;
name = navigator.appName;
detectedBrowser = {
safari: inc("detectOldSafari/detect")(agent),
chrome: inc("detectOldChrome/detect")(agent),
firefox: inc("detectOldFirefox/detect")(agent)
};
block = _.values(detectedBrowser).indexOf(true) > -1;
if (block) {
if (engine.isMobileApp) {
helpers.postEvent("INT-blockedBrowser", {
event: "blockedBrowserMobileAppNoBlock",
userAgent: agent,
url: location.href,
detectedBrowser: _.pickBy(detectedBrowser, function(v, k){
return v === true;
})
});
return false;
}
s = T("oldBrowser");
if (engine.isDebug) {
s += "
ANTON wird neu gestartet.",
en: "Oops, an error occurred. We are taking care of it.
ANTON will be restarted.",
fr: "Oups… une erreur s'est produite. On s'en occupe !
ANTON va être redémarré.",
es: "¡Ups! Surgió un problema. Lo estamos resolviendo. ANTON se reiniciará.",
pt: "Ops! Surgiu um problema aqui. Nós cuidaremos disso.
Zur Motivation sind die Übungen in kleinen Puzzle-Figuren angeordnet, deren Teile nach und nach freigeschaltet werden.
Die Übungen sind eine abwechslungsreiche Zusammenstellung aus den sortierten Vorschulübungen.",
en_gb: "The mixed exercises are structured so that a child can work through them independently.
To encourage motivation, the exercises are grouped into small puzzles, whose pieces are revealed a bit at a time.
The exercises are a diverse assortment of the ordered Reception exercises.",
en: "The mixed exercises are structured so that a child can work through them independently.
To encourage motivation, the exercises are grouped into small puzzles, whose pieces are revealed a bit at a time.
The exercises are a diverse assortment of the ordered preschool exercises.",
fr: "Les activités mélangées sont organisées pour qu'un enfant apprenne en toute autonomie.
Pour motiver l'apprentissage, les activités sont regroupées en petits puzzles dont les pièces se dévoilent une à une.
Les activités accessibles en format puzzle sont les mêmes que celles accessibles par thèmes.",
es: "Los ejercicios combinados están diseñados para que los niños y niñas aprendan de forma autónoma.
Para motivar el aprendizaje, los ejercicios están organizados en rompecabezas cuyas piezas se van revelando una por una.
Los rompecabezas combinan los ejercicios que también encuentras clasificados por tema.",
pt: "Os exercícios mistos são elaborados de forma que a criança possa resolvê-los de forma autônoma.
Para motivar o aprendizado, os exercícios estão organizados como figuras de quebra-cabeças, cujas peças são desbloqueadas gradativamente.
Os quebra-cabeças oferecem uma combinação variada dos exercícios de Educação Infantil, que também se encontram classificados por áreas."
},
explanationHint: {
de: "Was ist das?",
en: "What is this?",
fr: "Qu'est-ce que c'est ?",
es: "¿Qué es esto?",
pt: "O que é isto?"
},
puzzleHeader: {
de: "Vorschule: gemischte Übungen zum Selbstlernen empfohlen",
en_gb: "Reception: mixed exercises recommended for independent learning",
en: "Preschool: mixed exercises recommended for independent learning",
fr: "Maternelle : activités mélangées recommandées pour l'apprentissage en autonomie",
es: "Preescolar: ejercicios mixtos para el aprendizaje autónomo",
pt: "Educação Infantil: exercícios mistos recomendado para o aprendizado autônomo"
},
normalPlansHeader: {
de: "Vorschule: sortierte Übungen",
en_gb: "Reception: exercises sorted by topic",
en: "Preschool: exercises sorted by topic",
fr: "Maternelle : activités par thèmes",
es: "Preescolar: ejercicios por tema",
pt: "Educação Infantil: exercícios organizados por áreas"
}
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/calcShapePlanItems/calc.ls
(function(){
return function(items){
var labels, items2, i$, len$, i;
labels = {
beginner: T("simple"),
intermediate: T("intermediate"),
advanced: T("advanced")
};
items2 = _.filter(items, function(i){
return _.includes(i.plan.project, "shape");
});
items2 = _.orderBy(items2, "plan.sortIndex");
for (i$ = 0, len$ = items2.length; i$ < len$; ++i$) {
i = items2[i$];
i.label = i.plan.title + " (" + labels[i.plan.preschoolDifficulty] + ")";
}
return items2;
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/calcSortedPlanItems/calc.ls
(function(){
return function(items){
var items2, i$, len$, i;
items2 = _.filter(items, function(i){
return !_.includes(i.plan.project, "shapes");
});
if (!items2) {
return;
}
items2 = _.orderBy(items2, "plan.sortIndex");
for (i$ = 0, len$ = items2.length; i$ < len$; ++i$) {
i = items2[i$];
i.label = i.plan.title;
}
return _.concat({
rowType: "line"
}, {
rowType: "label",
label: T("normalPlansHeader")
}, items2);
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/div.ls
(function(){
return function(){
var tap, div;
tap = function(){
return inc("tooltipInfo/tooltip")(div);
};
return Div({
display: "flex",
justifyContent: "flex-end",
margin: "-0.2em 0.2em -0.4em 0"
}).html(div = Div({
fontSize: "0.85em",
color: Color.blue[500],
padding: "0.4em"
}).html(T("explanationHint")).tap(tap));
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/tooltipInfo/background/background.ls
(function(){
return function(){
var div;
return div = Div({
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
background: "rgba(0,0,0,0.1)"
}).tap({
up: function(){
return div.remove();
},
animation: "none"
}).appendTo(body.findFirst(".mainMenu")).fadeIn().onWindowResize(function(){
return div.remove();
});
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/tooltipInfo/corner/corner.ls
(function(){
return function(parentDiv){
var o, top, left;
o = parentDiv.offset();
top = o.bottom;
left = o.left + o.width / 2 - 8;
return Div({
position: "absolute",
top: top + "px",
left: left + "px",
width: "16px",
height: "16px",
background: "white",
transform: "rotate(45deg)"
});
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/tooltipInfo/divText/div.ls
(function(){
return function(parentDiv){
var updatePosition, div;
updatePosition = function(){
return inc("updatePosition/update")(div, parentDiv);
};
div = Div({
position: "absolute",
width: "18em",
maxWidth: "80vw",
background: "white",
padding: "0.5em",
lineHeight: "1.5em",
fontSize: "0.9em",
whiteSpace: "normal"
}).html(T("divText")).onDomAppend(updatePosition);
updatePosition();
return div;
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/tooltipInfo/divText/updatePosition/update.ls
(function(){
return function(div, parentDiv){
var o, o2, d;
o = parentDiv.offset();
div.css({
top: o.bottom + 5 + "px",
left: o.left + "px"
});
o2 = div.offset();
d = (body.offsetWidth - 20) - o2.right;
if (d < 0) {
return div.css({
left: o.left + d + "px"
});
}
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/divInfo/tooltipInfo/tooltip.ls
(function(){
return function(parentDiv){
return inc("background/background")().html(inc("corner/corner")(parentDiv), inc("divText/div")(parentDiv));
};
})();
pages/content/plan/_topbar/menu/items/pimpPreschool/pimp.ls
(function(){
return function(items){
var folderItem, hasPuzzlePlans;
folderItem = _.find(items, {
subject: "preschool"
});
if (!folderItem) {
return;
}
hasPuzzlePlans = _.find(folderItem.items, function(item){
return _.includes(item.plan.project, "shapes");
});
if (!hasPuzzlePlans) {
return;
}
return folderItem.items = _.concat({
rowType: "div",
div: inc("divInfo/div")()
}, {
rowType: "label",
label: T("puzzleHeader")
}, inc("calcShapePlanItems/calc")(folderItem.items), inc("calcSortedPlanItems/calc")(folderItem.items));
};
})();
pages/content/plan/_topbar/menu/menu.ls
(function(){
return function(type){
var open, onClose, onOpen;
open = function(){
return inc("/lib/gui/drawerMenu/menu")({
items: inc("items/items")(),
context: "plan",
width: "15.5em",
onClose: onClose,
onOpen: onOpen,
header: inc("headerWithSearch/header")
});
};
onClose = function(){
var ref$;
return (ref$ = body.findFirst(".searchInput")) != null ? ref$.stop() : void 8;
};
onOpen = function(){
var that, resultDiv, menuSearch;
if (that = app.currentPage.params.searchQuery) {
resultDiv = body.findFirst(".menuSearchResult");
resultDiv.spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(resultDiv);
menuSearch = body.findFirst(".menuSearch");
if (menuSearch != null) {
menuSearch.showSearch();
}
return menuSearch != null ? menuSearch.search(that) : void 8;
}
};
if (inc("/data/user/isPreschoolFocusMode/is")()) {
return inc("/lib/gui/parentalGatePreschool/parentalGate")(open);
} else {
return open();
}
};
})();
pages/content/plan/_topbar/params/params.ls
(function(){
return function(page){
var params, ref$, ref1$;
if (deviceLog['var']("enableLearnBetaTab")) {
return inc("paramsLearnTabBeta")(page);
}
params = {
download: true,
title: engine.isBotMode
? T("lessons") + ((ref$ = page.planDescription) != null ? ref$.displayName : void 8)
: (ref1$ = page.planDescription) != null ? ref1$.displayName : void 8
};
if (engine.isBotMode) {
return params;
}
if (page.params.context === "searchDeep") {
params.back = true;
} else if (page.params.context === "searchResult" && page.params.searchQuery) {
params.back = function(){
return inc("../menu/menu")("search");
};
params.backLabel = T("backToSearch");
} else {
params.menu = function(){
return inc("../menu/menu")("plan");
};
params.menuLabel = T("changeSubject");
}
return params;
};
})();
pages/content/plan/_topbar/params/paramsLearnTabBeta.ls
(function(){
return function(page){
var params, ref$, ref1$, lastPagePath;
params = {
download: true,
title: engine.isBotMode
? T("lessons") + ((ref$ = page.planDescription) != null ? ref$.displayName : void 8)
: (ref1$ = page.planDescription) != null ? ref1$.displayName : void 8
};
if (engine.isBotMode) {
return params;
}
params.back = true;
lastPagePath = app.pageHistory[app.pageHistory.length - 2].path;
if (_.endsWith(lastPagePath, "learn/page")) {
params.backLabel = SvgIcon({
svg: path("/lib/svg/shape/home.svg"),
color: Color.grey[650],
size: "0.9em"
}).css({
padding: "0.6em 0 0.4em"
});
} else if (_.endsWith(lastPagePath, "subjects/page")) {
params.backLabel = "Übungen nach Schulfach";
} else if (_.endsWith(lastPagePath, "grades/page")) {
params.backLabel = "Übungen nach Klassenstufe";
}
return params;
};
})();
pages/content/plan/_topbar/searchDeepBackBar/bar.ls
(function(){
return function(page){
if (page.context === "searchDeep") {
return inc("/../app01-search/lib/topSearchDeepBackBar/bar")();
}
};
})();
pages/content/plan/_topbar/searchScopeInfo/searchScopeInfo.ls
(function(){
return function(){
var click;
click = function(){
var page, p, oldTopHeight, newTopHeight, i$, ref$, len$, el;
page = app.currentPage;
p = page.params;
p.context = "plan";
delete p.searchQuery;
oldTopHeight = page.topbar.height();
page.topbar.update();
newTopHeight = page.topbar.height();
for (i$ = 0, len$ = (ref$ = page.findAll(".update")).length; i$ < len$; ++i$) {
el = ref$[i$];
el.update();
}
return page.pageScrollWrapper.scrollTop -= oldTopHeight - newTopHeight;
};
return Div().css({
flex: "0 0 auto",
padding: "0.5em 0",
textAlign: "center",
width: "100%",
marginBottom: "-1px",
borderBottom: "1px solid " + Color.grey[300],
borderTop: "1px solid " + Color.grey[300],
fontSize: "0.9em"
}).append(T("searchResultsFor", app.currentPage.params.searchQuery), Div().css({
display: "inline-flex",
position: "absolute",
right: 0,
marginTop: "-0.5em",
height: "100%"
}).append(SvgIcon({
svg: path("/lib/svg/icon/close-small.svg"),
color: Color.grey[550]
}).css({
margin: "0.5em 1em"
})).tap(click));
};
})();
pages/content/plan/_topbar/topbar.ls
(function(){
return function(page){
var div;
div = inc("/addons/topbar2/topbar")(inc("params/params")(page)).append(page.params.context === "searchResult" && page.params.searchQuery ? inc("searchScopeInfo/searchScopeInfo")() : void 8).prepend(inc("searchDeepBackBar/bar")(page));
div.update = function(){
return div.replaceWith(inc(THISFILE)(page));
};
return div;
};
})();
pages/content/plan/_urlDescription/_t.ls
(function(){
return {
learn: {
de: "Lernen",
en: "Learning",
fr: "Apprendre",
es: "Aprende",
pt: "Aprender"
},
learnWithOnlineLessonsFor: {
de: "Lerne mit online Übungen: für $1",
en: "Learn with online exercises: for $1",
fr: "Apprends avec des exercices en ligne : $1",
es: "Aprende con ejercicios en línea: $1",
pt: "Aprenda com exercícios on line: para $1"
},
lessons2: {
de: "Übungen - $1",
en: "Lessons - $1",
fr: "Exercices - $1",
es: "Ejercicios - $1",
pt: "Exercícios - $1"
}
};
})();
pages/content/plan/_urlDescription/calcBreadcrumbs/calc.ls
(function(){
return function(page){
var p, s;
p = page.planDescription;
if (page.plan && p) {
s = p.subjectName;
return [
{
name: T("learn"),
pageUrl: "",
pageAnchor: T("learn")
}, {
name: s,
pageUrl: "",
pageAnchor: s.toLowerCase()
}, {
name: p.displayName.replace(s + " ", "") || s,
pageUrl: p.pageUrl
}
];
}
};
})();
pages/content/plan/_urlDescription/calcMetaDescription/calc.ls
(function(){
return function(page){
var m, ref$, topicTitles;
if (!page.plan) {
m = T("learnWithOnlineLessonsFor", (ref$ = page.planDescription) != null ? ref$.displayName : void 8);
return m;
}
topicTitles = _.map(page.plan.topics, "title");
m = topicTitles.join(" | ");
if (m.length > 300) {
m = m.substring(0, 300);
m = m.substring(0, m.lastIndexOf("|"));
}
return m;
};
})();
pages/content/plan/_urlDescription/description.ls
(function(){
return function(page){
var p;
p = page.planDescription;
return {
pageUrl: p != null ? p.pageUrl : void 8,
title: T("lessons2", p != null ? p.displayName : void 8),
metaDescription: inc("calcMetaDescription/calc")(page),
breadcrumbs: inc("calcBreadcrumbs/calc")(page),
pageReady: page.plan != null
};
};
})();
pages/content/plan/calcLastViewedBlockPath/calc.ls
(function(){
return function(page){
var e, lastViewBlockPath;
e = typeof log != 'undefined' && log !== null ? log.findLast({
event: "setCurrentBlock",
plan: page.params.planPath
}) : void 8;
return lastViewBlockPath = e != null ? e.block : void 8;
};
})();
pages/content/plan/calcNavCategory/calc.ls
(function(){
return function(){
if (deviceLog['var']("enableLearnBetaTab")) {
return "learnBeta";
} else {
return "content";
}
};
})();
pages/content/plan/fixPlanPath/fix.ls
(function(){
return function(page){
var allowedPlans;
if (page.params.context === "idePreview") {
return;
}
allowedPlans = _.map(inc("/data/content/calcPlanDescriptions/calc")(), "planPath");
if (!in$(page.params.planPath, allowedPlans)) {
return page.params.planPath = inc("/data/content/calcCurrentPlan/calc")();
}
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/content/plan/loadPlan/load.ls
(function(){
return function(page, onDone){
var load, onLoaded, onError;
load = function(){
return inc("/lib/util/loadPlan/load")({
path: page.params.planPath,
onLoaded: onLoaded,
onError: onError,
fileApi: deviceLog['var']("loadDevelopContent") ? "filesCalcDevelop" : "files"
});
};
onLoaded = function(plan){
return onDone(plan);
};
onError = function(error){
var technicalError;
technicalError = error.error !== "offline";
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, technicalError);
};
return load();
};
})();
pages/content/plan/page.ls
(function(){
return function(page){
inc("fixPlanPath/fix")(page);
if (_.includes(page.params.planPath, "c-preschool-shapes")) {
return inc("/../app01-preschool/pages/plan/page")(page);
}
page.context = page.params.context;
page.planDescription = inc("/data/content/calcPlanDescription/calc")(page.params.planPath);
return {
navCategory: inc("calcNavCategory/calc")(),
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var loadPlan, create;
loadPlan = function(){
return inc("loadPlan/load")(page, create);
};
create = function(plan){
page.plan = plan;
page.lastViewedBlockPath = inc("calcLastViewedBlockPath/calc")(page);
page.updateUrlDescription();
page.html(inc("topics/topics")(page));
inc("scrollToPosition/scroll")(page);
return page.scopeRender({
enabled: true,
debug: false,
maxDurations: "50 20 10",
nearScopeSize: 0.5
});
};
if (page.params.history === -1) {
return loadPlan();
} else {
page.append(page.spinner = inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/waitFrames/wait")(4, loadPlan);
}
}
};
};
})();
pages/content/plan/scrollToPosition/scroll.ls
(function(){
return function(page){
var ref$, lastElement;
if (page.params.history < 0) {
return requestAnimationFrame(function(){
return page.pageScrollWrapper.scrollTop = app.pageScrollPositions[app.currentPagePath] || 0;
});
} else if ((ref$ = page.params.context) === "searchResult" || ref$ === "searchDeep") {
return inc("scrollToSearchResult/scroll")(page);
} else {
lastElement = page.findFirst(".lastViewed");
if (lastElement) {
return page.scrollElementIntoView(lastElement, {
center: true,
instant: true
});
}
}
};
})();
pages/content/plan/scrollToPosition/scrollToSearchResult/highlightBlockRow/highlight.ls
(function(){
return function(blockRow){
return blockRow.keyframeAnimate({
duration: 2000,
keyframes: {
"40%": {
backgroundColor: Color.blue[50]
},
"100%": {
backgroundColor: ""
}
}
});
};
})();
pages/content/plan/scrollToPosition/scrollToSearchResult/scroll.ls
(function(){
return function(page){
var p, topicRow, scrollRow;
p = page.params;
if (p.blockPath) {
topicRow = _.find(page.findAll(".topicRow"), function(r){
return r.topicPath === p.topicPath;
});
scrollRow = _.find(topicRow != null ? topicRow.findAll(".blockRow") : void 8, function(r){
return r.blockPath === p.blockPath;
});
} else if (p.topicPath) {
scrollRow = _.find(page.findAll(".topicRow"), function(r){
return r.topicPath === p.topicPath;
});
scrollRow = scrollRow != null ? scrollRow.firstChild : void 8;
}
if (scrollRow) {
inc("highlightBlockRow/highlight")(scrollRow);
return page.scrollElementIntoView(scrollRow, {
top: true,
instant: true,
padding: 100
});
}
};
})();
pages/content/plan/topics/topic/blockRows/blockRow/blockRow.ls
(function(){
var cache;
cache = {};
return function(block){
var page, cachedRow, row;
page = app.currentPage;
cachedRow = cache[block.path];
if (cachedRow && !cachedRow.isVisible() && cachedRow.guiLanguage === engine.guiLanguage) {
cachedRow.update();
return cachedRow;
} else {
row = inc("/pages/content/_shared/blockRow/blockRow")({
block: block,
context: page.context === "idePreview"
? "idePreview"
: page.context === "searchDeep" ? "searchDeep" : "plan"
}).onDomAppend(function(){
return this.currentParent = this.parent();
}).onDomRemove(function(){
var ref$;
if (this.currentParent === this.parent()) {
this.remove();
return ref$ = this.currentParent, delete this.currentParent, ref$;
}
});
row.guiLanguage = engine.guiLanguage;
cache[block.path] = row;
return row;
}
};
})();
pages/content/plan/topics/topic/blockRows/blockRows.ls
(function(){
return function(topic, plan){
var block;
return Div().append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = topic.blocks).length; i$ < len$; ++i$) {
block = ref$[i$];
results$.push(inc("blockRow/blockRow")(block));
}
return results$;
}()));
};
})();
pages/content/plan/topics/topic/title/newTag/tag.ls
(function(){
return function(topic){
var ref$;
return (ref$ = inc("/lib/gui/newTag/newTag")(topic.isNewUntil)) != null ? ref$.css({
marginLeft: "0.5em"
}) : void 8;
};
})();
pages/content/plan/topics/topic/title/searchTag/tag.ls
(function(){
return function(topic){
var tags, q, matchedTag, label;
tags = topic.tags;
if (q = app.currentPage.params.searchQuery) {
matchedTag = _.find(tags, function(tag){
return _.includes(tag.toLowerCase(), q.toLowerCase());
});
if (matchedTag) {
label = inc("/lib/util/tagSearchInString/tagSearchInString")(matchedTag, q, "");
return Div().css({
fontWeight: "normal",
display: "inline-flex",
padding: "0.4em",
color: Color.grey[600],
fontSize: "0.8em"
}).html("(" + label + ")");
}
}
};
})();
pages/content/plan/topics/topic/title/title.ls
(function(){
return function(topic){
var searchQuery, update, div1, div;
searchQuery = app.currentPage.params.searchQuery;
update = function(){
if (app.currentPage.params.searchQuery !== searchQuery) {
return div.replaceWith(inc(THISFILE)(topic));
}
};
div1 = inc("/lib/seo/element/h2/h2")().css({
color: topic.error ? Color.red[500] : void 8
}).append(inc("title/title")(topic), inc("searchTag/tag")(topic), inc("newTag/tag")(topic));
div = inc("/lib/gui/sectionTitle/sectionTitle")(div1).addClass("update");
div.update = update;
return div;
};
})();
pages/content/plan/topics/topic/title/title/title.ls
(function(){
return function(topic){
var q, title;
if (engine.isBotMode) {
return T("topic", topic.title);
} else if (q = app.currentPage.params.searchQuery) {
if (_.includes(topic.title.toLowerCase(), q.toLowerCase())) {
return title = inc("/lib/util/tagSearchInString/tagSearchInString")(topic.title, q, "");
} else {
return topic.title;
}
} else {
return topic.title;
}
};
})();
pages/content/plan/topics/topic/topic.ls
(function(){
return function(page, topic, index){
var update, div;
update = function(){
var i$, ref$, len$, el, results$ = [];
for (i$ = 0, len$ = (ref$ = div.findAll(".update")).length; i$ < len$; ++i$) {
el = ref$[i$];
results$.push(typeof el.update == 'function' ? el.update() : void 8);
}
return results$;
};
div = Div().addClass("topicRow").attr({
id: _.replaceAll(topic.title, " ", "-").toLowerCase()
}).append(inc("title/title")(topic), inc("blockRows/blockRows")(topic, page.plan).css({
borderTop: "1px solid " + Color.grey[300]
}));
div.update = update;
div.topicPath = topic.path;
return div;
};
})();
pages/content/plan/topics/topics.ls
(function(){
return function(page){
var index, topic;
return Div({
margin: "0 auto",
width: "35em",
maxWidth: "95%",
paddingBottom: "2em"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.plan.topics).length; i$ < len$; ++i$) {
index = i$;
topic = ref$[i$];
results$.push(inc("topic/topic")(page, topic, index));
}
return results$;
}()), engine.isDebug ? inc("unlinkedBlocks/unlinkedBlocks")(page) : void 8);
};
})();
pages/content/plan/topics/unlinkedBlocks/blockRows/blockRow/blockRow.ls
(function(){
var cache;
cache = {};
return function(block){
var cachedRow;
cachedRow = cache[block.path];
if (cachedRow && !cachedRow.isVisible()) {
cachedRow.update();
return cachedRow;
} else {
return cache[block.path] = inc("/pages/content/_shared/blockRow/blockRow")({
context: "idePreview",
block: block
}).onDomAppend(function(){
return this.currentParent = this.parent();
}).onDomRemove(function(){
var ref$;
if (this.currentParent === this.parent()) {
this.remove();
return ref$ = this.currentParent, delete this.currentParent, ref$;
}
});
}
};
})();
pages/content/plan/topics/unlinkedBlocks/blockRows/blockRows.ls
(function(){
return function(topic, plan){
var block;
return Div().append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = topic.blocks).length; i$ < len$; ++i$) {
block = ref$[i$];
results$.push(inc("blockRow/blockRow")(block));
}
return results$;
}()));
};
})();
pages/content/plan/topics/unlinkedBlocks/unlinkedBlocks.ls
(function(){
return function(page){
var unlinkedBlocks, topic, ref$, update, div, title;
unlinkedBlocks = page.plan.unlinkedBlocks;
if (unlinkedBlocks == null || unlinkedBlocks.length === 0) {
return;
}
topic = {
blocks: page.plan.unlinkedBlocks,
title: "Unlinked Blocks",
puid: ((ref$ = page.planDescription) != null ? ref$.project : void 8) + "/XXXXXX"
};
update = function(){
var i$, ref$, len$, el, results$ = [];
for (i$ = 0, len$ = (ref$ = div.findAll(".update")).length; i$ < len$; ++i$) {
el = ref$[i$];
results$.push(typeof el.update == 'function' ? el.update() : void 8);
}
return results$;
};
div = Div().addClass("topicRow").attr({
id: _.replaceAll(topic.title, " ", "-").toLowerCase()
}).append(title = inc("../topic/title/title")(topic), inc("blockRows/blockRows")(topic, page.plan).css({
borderTop: "1px solid " + Color.grey[300]
}));
title.findFirst("h2").prepend(SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
margin: "0 0.2em -0.2em 0"
}));
div.update = update;
div.topicPath = topic.path;
return div;
};
})();
pages/content/start.ls
(function(){
return function(o){
var planPath;
planPath = inc("/data/content/calcCurrentPlan/calc")();
return startPage({
path: path("/pages/content/plan/page"),
animation: (o != null ? o.animation : void 8) || "fadeIn",
history: o != null ? o.history : void 8,
params: {
planPath: planPath
}
});
};
})();
pages/games/00_shared/_t.ls
(function(){
return {
games: {
de: "Spiele",
en: "Games",
fr: "Jeux",
es: "juegos",
pt: "Jogos"
},
gamesLocked: {
de: "Die Spiele sind noch $1 gesperrt für $2.",
en: "The games will be locked for the next $1 for $2.",
fr: "Les jeux sont désactivés pendant encore $1 pour le groupe $2.",
es: "Los juegos siguen desactivados por $1 para el grupo $2.",
pt: "Os jogos estão desativados por $1 para o grupo $2."
},
reallyCloseGame: {
de: "Möchtest du das Spiel wirklich beenden?",
en: "Do you really want to quit the game?",
fr: "Tu veux vraiment quitter le jeu ?",
es: "¿Quieres salir del juego realmente?",
pt: "Você quer mesmo sair do jogo?"
},
close: {
de: "Beenden",
en: "Quit",
fr: "Quitter",
es: "Salir",
pt: "Sair"
},
bestScore: {
de: "Dein bestes Ergebnis: $1",
en: "Your high score: $1",
fr: "Ton meilleur score : $1",
es: "Tu récord: $1",
pt: "Seu recorde: $1"
},
yourScore: {
de: "Dein Ergebnis: $1",
en: "Your score: $1",
fr: "Ton score : $1",
es: "Puntuación: $1",
pt: "Pontuação: $1"
},
notImproved: {
de: "Du hast dich leider nicht verbessert.",
en: "You didn't manage to beat your high score.",
fr: "Tu n'as pas réussi à battre ton meilleur score.",
es: "No lograste superar tu récord.",
pt: "Você ainda não bateu seu recorde."
},
topPositionReached: {
de: "Super, du hast Platz $1 erreicht!",
en_gb: "Great, you reached $1 place!",
en: "Great, you reached rank $1!",
fr: "Bravo, tu as atteint la place n° $1 !",
es: "¡Felicidades! Quedaste en el puesto número: $1",
pt: "Parabéns! Você alcançou a posição número: $1!"
},
positionReached: {
de: "Du hast Platz $1 erreicht.",
en_gb: "You reached $1 place.",
en: "You reached rank $1.",
fr: "Tu as atteint la place n° $1.",
es: "Quedaste en el puesto número: $1.",
pt: "Você alcançou a posição número: $1."
},
yourResult: {
de: "Dein Ergebnis",
en: "Your score",
fr: "Ton score",
es: "Puntuación",
pt: "Sua pontuação"
},
school: {
de: "Schule",
en: "School",
fr: "École",
es: "Escuela",
pt: "Escola"
},
myGroups: {
de: "Meine Gruppen",
en: "My groups",
fr: "Mes groupes",
es: "Mis grupos",
pt: "Meus grupos"
},
everybody: {
de: "Alle",
en: "All",
fr: "Tous",
es: "Todos",
pt: "Todos"
},
sevenDays: {
de: "7 Tage",
en: "7 days",
fr: "7 jours",
es: "7 días",
pt: "7 dias"
},
today: {
de: "Heute",
en: "Today",
fr: "Aujourd'hui",
es: "Hoy",
pt: "Hoje"
},
highscore: {
de: "Bestenliste",
en: "High scores",
fr: "Meilleurs scores",
es: "Récords",
pt: "Recordes"
},
lastResult: {
de: "Dein letztes Ergebnis: $1",
en: "Your last score: $1",
fr: "Ton dernier score : $1",
es: "Tu última puntuación: $1",
pt: "Sua última pontuação: $1"
},
noScoreYet: {
de: "Du hast noch kein Ergebnis.",
en: "You don't have a score yet.",
fr: "Tu n'as pas encore de score.",
es: "Aún no tienes ningún récord.",
pt: "Você ainda não tem pontuação."
},
noHighscoreData: {
de: "Keine Highscores für den ausgewählten Zeitraum vorhanden.",
en_gb: "No high scores available for the selected period.",
en: "No high scores available for the selected period.",
fr: "Aucun score n'a été trouvé pour la période sélectionnée.",
es: "No hay puntuaciones para el periodo seleccionado.",
pt: "Nenhuma pontuação disponível para o período selecionado."
},
noHighscoreOffline: {
de: "Du bist gerade offline, wir können dir daher keine Bestenliste anzeigen.",
en: "You can't see the high scores as you are currently offline.",
fr: "Tu ne peux pas voir les meilleurs scores parce que tu n'es pas en ligne.",
es: "No te podemos mostrar los récords porque estás desconectado.",
pt: "Não podemos te mostrar seus recordes, pois você está desconectado."
},
noHighscoreError: {
de: "Es ist ein Fehler aufgetreten, wir können dir daher keine Bestenliste anzeigen. Wir kümmern uns darum!",
en: "An error occurred, so you can't see the high scores. We are taking care of it!",
fr: "Une erreur s'est produite et tu ne peux pas voir les meilleurs scores. On s'occupe de ça très vite !",
es: "Ocurrió un error y no te podemos mostrar los récords. Lo estamos resolviendo.",
pt: "Ocorreu um erro e não foi possível te mostrar seus recordes. Nós cuidaremos disso!"
},
hint: {
de: "Tipp: ",
en: "Hint: ",
fr: "À noter : ",
es: "Nota: ",
pt: "Dica: "
},
gamesUrl: {
de: "spiele",
en: "games",
fr: "jeux",
es: "juegos",
pt: "jogos"
}
};
})();
pages/games/00_shared/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("gamesUrl"),
title: T("games"),
metaDescription: ""
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/astroBang/_t.ls
(function(){
return {
manualDesktop: {
de: "Fliege mit den Pfeiltasten, schieße mit der Leertaste. Versuche alle Asteroiden zu zerstören. Aber pass auf, dass du nicht in sie hineinfliegst.",
en_gb: "Use the arrow keys to steer and fly. Use the space bar to shoot. Try to destroy all the asteroids. Be careful not to crash into any of them!",
en: "Use the arrow keys to steer and fly and the space bar to shoot. Try to destroy all the asteroids. Be careful not to crash into any of them!",
fr: "Utilise les flèches du clavier pour diriger et voler, et la barre espace pour tirer. Essaie de détruire tous les astéroïdes. Fais attention : ils ne doivent pas te toucher !",
es: "Usa las flechas para volar y disparar con la barra espaciadora. Intenta destruir todos los asteroides sin estrellarte con ellos.",
pt: "Use as setas para voar e a barra de espaço para atirar. Tente destruir todos os asteróides, mas tome cuidado para não colidir com eles."
},
manual: {
de: "Drehe dein Raumschiff mit den blauen Tasten. Mit der orangenen beschleunigst du. Schieße mit der pinken Taste. Versuche alle Asteroiden zu zerstören. Aber pass auf, dass du nicht in sie hineinfliegst.",
en: "Turn with the blue keys. Accelerate with the orange key. Shoot with the pink key. Try to destroy all the asteroids. Be careful not to crash into any of them!",
fr: "Tourne avec les touches bleues. Accélère avec la touche orange. Tire avec la touche rose. Essaie de détruire tous les astéroïdes. Fais attention : ils ne doivent pas te toucher !",
es: "Gira con las teclas azules, acelera con la tecla naranja y dispara con la tecla rosa para destruir los asteroides. ¡Ten cuidado! No te estrelles con ellos.",
pt: "Gire a espaçonave com as teclas azuis, acelere com a tecla laranja e dispare com a tecla rosa para destruir os asteróides. Mas tenha cuidado para não colidir com nenhum deles."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/astroBang/astroBang.ls
(function(){
return function(){
return {
id: "astroBang",
project: "app01-game-asteroids",
title: "Astro Bang",
category: "space",
grade: 4,
price: 1,
icon: "solocode_game-astro-bang-cover-2",
iconPosition: "0% 0%",
numberOfTries: 3,
highscoreAscending: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/avatarSuperstar/_t.ls
(function(){
return {
myAvatars: {
de: "Meine Avatare",
en: "My Avatars",
fr: "Mes avatars",
es: "Mis avatares",
pt: "Meus avatares"
},
newAvatars: {
de: "Neue Avatare",
en: "New Avatars",
fr: "Nouveaux avatars",
es: "Nuevos avatares",
pt: "Novos avatares"
},
popularAvatars: {
de: "Beliebte Avatare",
en: "Popular Avatars",
fr: "Avatars populaires",
es: "Avatares populares",
pt: "Avatares populares"
},
antonFavorites: {
de: "ANTON-Lieblings-Avatare",
en_gb: "ANTON Favourite Avatars",
en: "ANTON Favorite Avatars",
fr: "Les avatars favoris sur ANTON",
es: "Los avatares favoritos de ANTON",
pt: "Os avatares preferidos de ANTON"
},
manual: {
de: "Schieße ein Foto von deinem Avatar und veröffentliche es in der Galerie. Vielleicht wirst du ja der nächste Avatar-Superstar!",
en: "Take a picture of your avatar and publish it in the gallery. You might become the next avatar superstar!",
fr: "Prends une photo de ton avatar et publie-la dans la galerie. Tu pourrais devenir la prochaine superstar des avatars !",
es: "Toma una foto de tu avatar y publícala en la galería. ¡Podrías convertirte en el siguiente “Avatar superstar”!",
pt: "Tire uma foto do seu avatar e publique na galeria. Você pode se tornar o próximo avatar superstar!"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/avatarSuperstar/avatarSuperstar.ls
(function(){
return function(){
return {
id: "avatarSuperstar",
project: "app01-avatar-superstar",
title: "Avatar Superstar",
category: "creative",
grade: 2,
icon: "solocode_game-avatar-superstar-cover-4",
highscoreDisabled: true,
difficulties: [
{
title: T("myAvatars"),
icon: path("/lib/svg/shape/avatar.svg"),
page: path("/../app01-avatar-superstar/pages/gallery/page")
}, {
title: T("newAvatars"),
icon: path("/lib/svg/shape/badge.svg"),
page: path("/../app01-avatar-superstar/pages/latest/page")
}, {
title: T("popularAvatars"),
icon: path("/lib/svg/shape/heart.svg"),
page: path("/../app01-avatar-superstar/pages/best/page")
}, {
title: T("antonFavorites"),
debugOnly: true,
icon: path("/lib/svg/shape/anton-app.svg"),
page: path("/../app01-avatar-superstar/pages/favourites/page")
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/basketball/_t.ls
(function(){
return {
manualDesktop: "Klicke mit der Maus oder drücke eine Taste, um die Wurfrichtung zu bestimmen. Lasse dann los, wenn die Stärke den gewünschten Wert erreicht hat, um zu werfen. Wirf möglichst viele Körbe innerhalb einer Minute.",
manual: "Tippe auf den Bildschirm, um die Wurfrichtung zu bestimmen. Lasse dann los, wenn die Stärke den gewünschten Wert erreicht hat, um zu werfen. Wirf möglichst viele Körbe innerhalb einer Minute.",
title: "ANTON Sports: Basketball"
};
})();
pages/games/00_shared/gameDescriptions/descriptions/basketball/basketball.ls
(function(){
return function(){
return {
id: "basketball",
project: "app01-game-basketball",
title: T("title"),
category: "skill",
grade: 2,
price: 1,
iconPosition: "50% 10%",
numberOfTries: 3,
highscoreDisabled: false,
highscoreAscending: false,
disabled: false,
debugOnly: true,
newBadge: true,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/batCave/_t.ls
(function(){
return {
manualDesktop: {
de: "Lass eine Taste gedrückt, um nach oben zu fliegen. Lass los, um nach unten zu fliegen. Weiche den Hindernissen aus und versuche so weit wie möglich zu kommen.",
en: "Hold any key to fly upwards. Release the key to fall. Try to fly for as long as possible without hitting any obstacles.",
fr: "Appuie sur n'importe quelle touche pour monter. Lâche la touche pour descendre. Essaie de voler aussi longtemps que possible sans heurter les obstacles.",
es: "Deja una tecla presionada para volar hacia arriba. Suelta la tecla para caer. Esquiva los obstáculos e intenta llegar lo más lejos posible.",
pt: "Mantenha uma tecla pressionada para voar para cima. Libere a tecla para voar para baixo. Desvie dos obstáculos e tente voar o mais longe possivel."
},
manual: {
de: "Berühre den Bildschirm, um nach oben zu fliegen. Lass los, um nach unten zu fliegen. Weiche den Hindernissen aus und versuche so weit wie möglich zu kommen.",
en: "Tap the screen to fly upwards. Release to fall. Try to fly for as long as possible without hitting any obstacles.",
fr: "Appuie sur l'écran pour monter. Lâche pour descendre. Essaie de voler aussi longtemps que possible sans heurter les obstacles.",
es: "Presiona la pantalla para volar hacia arriba. Suelta la pantalla para caer. Esquiva los obstáculos e intenta llegar lo más lejos posible.",
pt: "Pressione a tela para voar para cima. Solte para voar para baixo. Desvie dos obstáculos e tente voar o mais longe possível. "
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/batCave/batCave.ls
(function(){
return function(){
return {
id: "batCave",
project: "app01-game-helicopter",
title: "Bat Cave",
category: "skill",
grade: 3,
price: 1,
icon: "solocode_solocode-game-bat-cave-2",
iconPosition: "50% 47%",
numberOfTries: 3,
highscoreAscending: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/blockPuzzle/_t.ls
(function(){
return {
manual: {
de: "Fülle mit den Blöcken die vorgezeichnete Fläche aus.",
en: "Try to fit the blocks perfectly into the square.",
fr: "Essaie de faire tenir tous les blocs dans le carré.",
es: "Logra que encajen todas las piezas en el cuadrado.",
pt: "Tente encaixar todas as peças dentro do quadrado."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/blockPuzzle/blockPuzzle.ls
(function(){
return function(){
return {
id: "blockPuzzle",
project: "app01-game-block-puzzle",
title: "Block Puzzle",
category: "puzzle",
grade: 4,
price: 1,
icon: "solocode_game-block-puzzle-cover-3",
iconPosition: "50% 55%",
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
newBadge: false,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/broadJump/_t.ls
(function(){
return {
manualDesktop: {
de: "Klicke mit der Maus oder drücke schnell eine Taste, um Anlauf zu nehmen. Innerhalb der Sprungzone springst du durch Klicken ab. Je später du abspringst, desto weiter wirst du fliegen.",
en_gb: "Click repeatedly with the mouse or any key to start the run-up. To jump, click with the mouse or any key when inside the jump zone. The later you jump, the farther you will go.",
en: "Click repeatedly with the mouse or any key to start the run-up. To jump, click with the mouse or any key inside the jump zone. The later you jump, the farther you will go.",
fr: "Appuie plein de fois sur la souris ou sur n'importe quelle touche du clavier pour courir. Pour sauter, appuie une fois sur la souris ou sur n'importe quelle touche quand tu es dans la zone de saut. Plus tu attends pour sauter, plus loin tu iras.",
es: "Presion el ratón o cualquier tecla lo más rápido que puedas para tomar impulso. Haz clic en la zona de salto para saltar. Entre más tarde brinques, más lejos llegarás.",
pt: "Clique com o mouse ou pressione rapidamente uma tecla para pegar impulso. Para saltar, clique dentro da zona de salto. Quanto mais tarde saltar, mais longe conseguirá chegar."
},
manual: {
de: "Tippe auf den Bildschirm, um Anlauf zu nehmen. Innerhalb der Sprungzone springst du ab, indem du einmal tippst. Je später du abspringst, desto weiter wirst du fliegen.",
en_gb: "Tap the screen repeatedly to start the run-up. To jump, tap the screen when inside the jump zone. The later you jump, the farther you will go.",
en: "Tap the screen repeatedly to start the run-up. To jump, tap the screen inside the jump zone. The later you jump, the farther you will go.",
fr: "Appuie sur l'écran plein de fois pour courir. Pour sauter, appuie une fois sur l'écran quand tu es dans la zone de saut. Plus tu attends pour sauter, plus loin tu iras.",
es: "Toca la pantalla repetidas veces para tomar impulso. En la zona de salto toca la pantalla una sola vez para saltar. Entre más tarde brinques, más lejos llegarás.",
pt: "Toque repetidamente na tela para pegar impulso. Para saltar, toque na tela dentro da zona de salto. Quanto mais tarde saltar, mais longe você conseguirá chegar. "
},
title: {
de: "ANTON Sports: Weitsprung",
en: "ANTON Sports: Long Jump",
fr: "ANTON Sports : Saut en longueur",
es: "ANTON Sports: Salto de longitud",
pt: "ANTON Sports: Salto em distância"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/broadJump/broadJump.ls
(function(){
return function(){
return {
id: "broadJump",
project: "app01-game-broad-jump",
title: T("title"),
category: "skill",
grade: 2,
price: 1,
icon: twitch({
de: "solocode_game-anton-sports-broad-jump-cover",
en: "solocode_game-anton-sports-weitsprung-cover-en-2",
fr: "solocode_game-anton-sports-long-jump-fr",
es: "solocode_game-anton-sports-long-jump-es",
pt: "solocode_game-anton-sports-long-jump-pt-2"
}),
iconPosition: "50% 10%",
numberOfTries: 3,
highscoreDisabled: false,
highscoreType: "float",
disabled: false,
debugOnly: false,
newBadge: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/cityJumper/_t.ls
(function(){
return {
manualDesktop: {
de: "Springe mit der Leertaste oder der Maustaste über die Häuser. Sammle Sterne und versuche so weit wie möglich zu kommen.",
en: "Use the space bar or click with the mouse to jump from house to house. Collect the stars and try to go as far as possible.",
fr: "Utilise la barre d'espace ou clique avec la souris pour sauter de toit en toit. Collecte les étoiles et essaie d'aller le plus loin possible.",
es: "Usa el ratón o la barra espaciadora para brincar de un edificio a otro. Recolecta las estrellas e intenta llegar lo más lejos posible. ",
pt: "Salte sobre as casas usando o botão do mouse ou a barra de espaço. Colete estrelas e tente chegar o mais longe possível. "
},
manual: {
de: "Tippe auf den Bildschirm, um von Haus zu Haus zu springen. Sammle Sterne und versuche so weit wie möglich zu kommen.",
en: "Tap the screen to jump from house to house. Collect the stars and try to go as far as possible.",
fr: "Appuie sur l'écran pour sauter de toit en toit. Collecte les étoiles et essaie d'aller le plus loin possible.",
es: "Presiona la pantalla para brincar de un edificio a otro. Recolecta las estrellas e intenta llegar lo más lejos posible. ",
pt: " Pressione a tela para saltar sobre as casas. Colete as estrelas e tente chegar o mais longe possível."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/cityJumper/cityJumper.ls
(function(){
return function(){
return {
id: "cityJumper",
project: "game-side-scroller",
title: "City Jumper",
category: "skill",
grade: 2,
price: 1,
icon: "solocode_game-city-jumper-cover-2",
iconPosition: "50% 15%",
numberOfTries: 3,
highscoreDisabled: false,
disabled: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/crazyCobras/_t.ls
(function(){
return {
manualDesktop: {
de: "Lenke mit den Pfeiltasten. Versuche dein Gebiet so groß wie möglich auszuweiten, aber pass auf, dass dir niemand über den Schwanz fährt (auch du selbst nicht). Erschließe neue Gebiete, indem du erst aus deinem eigenen herausfährst und dann wieder zu ihm zurückkehrst.",
en: "Use the arrow keys to guide your cobra. Try to make your territory as large as possible but be careful that nobody crosses your tail. Also beware of crossing your own tail! To expand your territory, guide your cobra out from your existing territory and back in again.",
fr: "Utilise les flèches du clavier pour guider ton cobra. Essaie d'étendre ton territoire au maximum mais fais attention que personne ne croise ta queue. Fais aussi attention à ne pas croiser ta propre queue ! Pour étendre ton territoire, guide ton cobra en dehors de ton territoire et fais-le rentrer à nouveau.",
es: "Dirige la cobra con las flechas del teclado y expande tu territorio lo más que puedas. Cuida que las demás cobras no te muerdan la cola y ¡ten cuidado de no mordértela tú! Para expandir tu territorio debes salir de él y volver.",
pt: "Use as setas do teclado para guiar a cobra. Tente expandir o seu território o máximo possível. Tome cuidado para não deixar ninguém passar sobre sua cauda, nem mesmo você! Para aumentar seu território, você deverá sair dele e depois voltar para ele."
},
manual: {
de: "Lenke, indem du in die gewünschte Richtung wischst. Versuche dein Gebiet so groß wie möglich auszuweiten, aber pass auf, dass dir niemand über den Schwanz fährt (auch du selbst nicht). Erschließe neue Gebiete, indem du erst aus deinem eigenen herausfährst und dann wieder zu ihm zurückkehrst.",
en: "Swipe the screen to guide your cobra. Try to make your territory as large as possible but be careful that nobody crosses your tail. Also beware of crossing your own tail! To expand your territory, guide your cobra out from your existing territory and back in again.",
fr: "Fais glisser ton doigt sur l'écran pour guider ton cobra. Essaie d'étendre ton territoire au maximum mais fais attention que personne ne croise ta queue. Fais aussi attention à ne pas croiser ta propre queue ! Pour étendre ton territoire, guide ton cobra en dehors de ton territoire et fais-le rentrer à nouveau.",
es: "Dirige la cobra deslizando el dedo sobre la pantalla y expande tu territorio lo más que puedas. Cuida que las demás cobras no te muerdan la cola y ¡ten cuidado de no mordértela tú mismo! Para expandir tu territorio debes salir de él y volver.",
pt: "Guie a cobra deslizando o dedo sobre a tela. Tente expandir seu território o máximo possível. Tome cuidado para não deixar ninguém passar sobre sua cauda, nem mesmo você! Para aumentar seu território, você deverá sair dele e depois voltar para ele. "
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/crazyCobras/crazyCobras.ls
(function(){
return function(){
return {
id: "crazyCobras",
project: "app01-game-snake",
title: "Crazy Cobras",
category: "skill",
grade: 4,
price: 1,
icon: "solocode_game-crazy-cobras-new",
iconPosition: "0% 0%",
numberOfTries: 3,
highscoreAscending: false,
highscoreType: "percentage",
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/dragonHunter/_t.ls
(function(){
return {
manualDesktop: {
de: "Decke alle Felder auf, ohne dabei auf einen Drachen zu stoßen.Die Zahlen auf den Feldern geben an, wie viele Drachen sich in der Umgebung befinden.Markiere Drachen, indem du lange auf ein Feld klickst.",
en: "Uncover all the boxes without coming across a dragon.The numbers inside the boxes tell you how many dragons are in the adjacent boxes.You can mark a box that you think contains a dragon by long clicking on that box. ",
fr: "Découvre toutes les cases sans tomber sur un dragon.Le nombre inscrit sur une case t'indique combien de dragons sont dans les cases avoisinantes.Si tu penses qu'une case contient un dragon, tu peux la marquer en cliquant longtemps dessus. ",
es: "Descubre las celdas sin toparte con los dragones. Los números dentro de las celdas revelan cuántos dragones hay en las celdas adyacentes. Para marcar las celdas en las que creas que hay un dragón, mantén la celda presionada. ",
pt: "Descubra todos os campos sem se deparar com um dragão. Os números nos campos revelam quantos dragões se encontram por perto. Você pode marcar um campo onde desconfie que há um dragão, clicando neste campo. "
},
manual: {
de: "Decke alle Felder auf, ohne dabei auf einen Drachen zu stoßen.Die Zahlen auf den Feldern geben an, wie viele Drachen sich in der Umgebung befinden.Markiere Drachen, indem du lange auf ein Feld tippst.",
en: "Uncover all the boxes without coming across a dragon.The numbers inside the boxes tell you how many dragons are in the adjacent boxes.You can mark a box that you think contains a dragon by tapping and holding on that box. ",
fr: "Découvre toutes les cases sans tomber sur un dragon.Le nombre inscrit sur une case t'indique combien de dragons sont dans les cases avoisinantes.Si tu penses qu'une case contient un dragon, tu peux la marquer en cliquant longtemps dessus. ",
es: "Descubre las celdas sin toparte con los dragones. Los números dentro de las celdas revelan cuántos dragones hay en las celdas adyacentes. Para marcar las celdas en las que creas que hay un dragón, mantén la celda presionada. ",
pt: "Descubra todos os campos sem se deparar com um dragão. Os números nos campos revelam quantos dragões se encontram por perto. Você pode marcar um campo onde desconfie que há um dragão, mantendo esse campo pressionado. "
},
tip1Desktop: {
de: "Du kannst ein Feld markieren, indem du lange darauf klickst.",
en_gb: "You can mark a box that you think contains a dragon by long-clicking on that box.",
en: "You can mark a box that you think contains a dragon by long clicking on that box.",
fr: "Tu peux marquer une case en cliquant longtemps dessus si tu penses qu'elle contient un dragon.",
es: "Puedes marcar las celdas, en las que creas que hay un dragón, manteniendo la celda presionada.",
pt: "Você pode marcar um campo em que desconfie que há um dragão mantendo esse campo pressionado."
},
tip2: {
de: "Die Zahlen auf den Feldern geben an, wie viele Drachen sich in der Umgebung befinden.",
en: "The numbers inside the boxes tell you how many dragons are in the adjacent boxes.",
fr: "Le nombre inscrit sur une case t'indique combien de dragons sont dans les cases avoisinantes.",
es: "Los números dentro de las celdas revelan cuántos dragones hay en las celdas adyacentes.",
pt: "Os números nos campos revelam quantos dragões se encontram por perto."
},
tip3Desktop: {
de: "Markierte Felder kannst du nicht aus Versehen anklicken.",
en: "If you've marked a box, you can't click on it by accident.",
fr: "Si tu as marqué une case, tu ne peux pas cliquer dessus par accident.",
es: "Las celdas marcadas no se abren accidentalmente.",
pt: "Os campos marcados não poderão ser clicados sem querer."
},
tip4Desktop: {
de: "Klicke lange auf ein Feld, um eine Markierung aufzuheben.",
en_gb: "Long-click on a box to unmark it.",
en: "Long click on a box to unmark it.",
fr: "Clique longtemps sur une case pour retirer la marque.",
es: "Mantén la celda presionada para eliminar la marca.",
pt: "Mantenha o campo pressionado para eliminar a marcação. "
},
tip5: {
de: "Das hervorgehobene Feld zeigt dir einen sicheren Startpunkt.",
en: "The highlighted box shows you a safe starting point.",
fr: "La case plus claire te montre où commencer en toute sécurité.",
es: "La celda resaltada en claro te muestra un punto de partida seguro.",
pt: "O campo em destaque te mostra um ponto de partida seguro."
},
tip1: {
de: "Du kannst ein Feld markieren, indem du lange darauf tippst.",
en: "You can mark a box that you think contains a dragon by tapping and holding on that box.",
fr: "Tu peux marquer une case en appuyant longtemps dessus si tu penses qu'elle contient un dragon.",
es: "Puedes marcar las celdas presionándolas con el dedo hasta que aparezca la marca, si crees que contienen un dragón.",
pt: "Você pode marcar um campo mantendo-o pressionado, caso acredite que há um dragão ali."
},
tip3: {
de: "Markierte Felder kannst du nicht aus Versehen antippen.",
en: "If you've marked a box, you can't tap on it by accident.",
fr: "Si tu as marqué une case, tu ne peux pas appuyer dessus par accident.",
es: "Marcar las celdas evita que las abras accidentalmente.",
pt: "Quando você marca um campo, você evita abrí-lo por acidente."
},
tip4: {
de: "Tippe lange auf ein Feld, um eine Markierung aufzuheben.",
en: "Tap and hold on a box to unmark it.",
fr: "Appuie longtemps sur une case pour retirer la marque.",
es: "Mantén la celda presionada para eliminar la marca.",
pt: "Mantenha o campo pressionado para remover a marcação."
},
easyFixed: {
de: "Einfach-Fixed",
en: "Fixed easy",
fr: "Fixed facil",
es: "Fixed fácil",
pt: "Fixed fácil"
},
mediumFixed: {
de: "Mittel-Fixed",
en: "Fixed medium",
fr: "Fixed intermédiaire",
es: "Fixed Medio",
pt: "Fixed médio"
},
hardFixed: {
de: "Schwierig-Fixed",
en: "Fixed hard",
fr: "Fixed avancé",
es: "Fixed difícil",
pt: "Fixed difícil"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/dragonHunter/dragonHunter.ls
(function(){
return function(){
var tips;
return {
id: "dragonHunter",
project: "app01-game-dragon-hunter",
title: "Dragon Hunter",
price: 1,
category: "puzzle",
grade: 4,
icon: "solocode_game-dragon-hunter-cover-1_crop-48-51-300-300",
iconPosition: "50% 40%",
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}, {
value: 3,
title: T("easyFixed")
}, {
value: 4,
title: T("mediumFixed")
}, {
value: 5,
title: T("hardFixed")
}
],
newBadge: true,
debugOnly: true,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual"),
tips: inc("/lib/util/isDesktop/isDesktop")()
? tips = [T("tip1Desktop"), T("tip2"), T("tip3Desktop"), T("tip4Desktop"), T("tip5")]
: tips = [T("tip1"), T("tip2"), T("tip3"), T("tip4"), T("tip5")]
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/echoMaster/_t.ls
(function(){
return {
easyViolin: {
de: "Geige (Einfach)",
en: "Violin (Easy)",
fr: "Violon (Facile)",
es: "Violín (Fácil)",
pt: "Violino (Fácil)"
},
mediumGuitar: {
de: "Gitarre (Mittel)",
en: "Guitar (Medium)",
fr: "Guitare (Moyen)",
es: "Guitarra (Medio)",
pt: "Violão (Médio)"
},
hardPiano: {
de: "Klavier (Schwierig)",
en: "Piano (Hard)",
fr: "Piano (Difficile)",
es: "Piano (Difícil)",
pt: "Piano (Difícil)"
},
veryHardChimes: {
de: "Glockenspiel (Sehr schwer)",
en_gb: "Glockenspiel (Very Hard)",
en: "Chimes (Very Hard)",
fr: "Carillon (Très difficile)",
es: "Campanillas (Muy difícil)",
pt: "Carrilhão (Muito difícil)"
},
manual: {
de: "Die bunten Felder leuchten abwechselnd und geben dabei einen Ton ab. Merke dir diese Reihenfolge und wiederhole danach die vorgespielte Melodie. ",
en: "Pay attention as the buttons light up and play a melody. When the music stops, try to repeat the melody by clicking on the buttons in the correct order.",
fr: "Fais attention aux boutons qui s'allument et jouent une mélodie. Quand la musique s'arrête, essaie de reproduire la mélodie en cliquant sur les boutons dans le bon ordre.",
es: "Observa como se iluminan las zonas de colores al sonar la melodía. Memoriza la secuencia e intenta reproducir la melodía.",
pt: "Observe como as zonas coloridas se iluminam e tocam um som. Memorize a sequência e tente reproduzir a melodia."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/echoMaster/echoMaster.ls
(function(){
return function(){
return {
id: "echoMaster",
project: "app01-anton-sings",
title: "Echo Master",
category: "brain",
grade: 4,
price: 1,
icon: "solocode_game-echo-machine-cover",
iconPosition: "50% 50%",
numberOfTries: 3,
pagePath: path("/../app01-anton-sings/pages/game/page"),
difficulties: [
{
value: 3,
title: T("easyViolin")
}, {
value: 4,
title: T("mediumGuitar")
}, {
value: 5,
title: T("hardPiano")
}, {
value: 6,
title: T("veryHardChimes")
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hauntedHouse/_t.ls
(function(){
return {
manual: {
de: "Erforsche mit der kleinen Hexe das Spukhaus und sammel alle 13 Truhen.\nDrehe eine Karte, indem du darauf tippst und platziere sie, indem du ein leeres Feld auswählst.\nBahne dir so einen Weg zu der Schatztruhe. Aber Vorsicht! Wenn du einem Geist den Weg zu dir öffnest, wird er dich verfluchen.",
en: "Explore the haunted house with the little witch and collect all 13 chests.\nRotate each card by tapping it and place it by selecting an empty spot.\nThe goal is to create an open path to the treasure. Beware of ghosts! They’ll haunt you and make you lose health.",
fr: "Explore la maison hantée avec la petite sorcière et collecte les 13 coffres.\nAppuie sur une carte pour la faire tourner et place-la en appuyant sur la case de ton choix.\nFais-toi un chemin vers le trésor. Attention aux fantômes… ils vont te hanter !",
es: "Explora la casa encantada y recolecta los 13 baúles. Para girar tu carta presionla brevemente, luego colócala en el tablero presionando la casilla deseada. ¡Ten mucho cuidado con los fantasmas!",
pt: " Explore a casa mal-assombrada com a bruxinha e colete os 13 baús, construindo seu caminho até eles. Para girar uma carta, clique nela e depois selecione o campo no tabuleiro onde deseja colocá-la. \nCuidado com os fantasmas! Eles podem te assombrar e roubar sua energia."
},
manualDesktop: {
de: "Erforsche mit der kleinen Hexe das Spukhaus und sammel alle 13 Truhen.\nDrehe eine Karte, indem du darauf klickst und platziere sie, indem du ein leeres Feld auswählst.\nBahne dir so einen Weg zu der Schatztruhe. Aber Vorsicht! Wenn du einem Geist den Weg zu dir öffnest, wird er dich verfluchen.",
en: "Explore the haunted house with the little witch and collect all 13 chests.\nRotate each card by clicking on it and place it by selecting an empty spot.\nThe goal is to create an open path to the treasure. Beware of ghosts! They’ll haunt you and make you lose health.",
fr: "Explore la maison hantée avec la petite sorcière et collecte les 13 coffres.\nClique sur une carte pour la faire tourner et place-la en cliquant sur la case de ton choix.\nFais-toi un chemin vers le trésor. Attention aux fantômes… ils vont te hanter !",
es: "Explora la casa encantada y encuentra los 13 baúles con ayuda de la pequeña bruja. Para girar la carta, en la parte inferior, presiónala brevemente con el cursor. Para colocarla posteriormente en el tablero, presiona la casilla deseada y ¡Ten mucho cuidado con los fantasmas!",
pt: "Explore a casa mal-assombrada com a bruxinha e colete todos os 13 baús, construindo seu caminho até eles. Para girar uma carta, clique nela e selecione depois o campo no tabuleiro onde deseja colocá-la. Cuidado com os fantasmas! Eles podem te assombrar e roubar sua energia."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hauntedHouse/hauntedHouse.ls
(function(){
return function(){
return {
id: "hauntedHouse",
project: "app01-game-haunted-house",
title: "Haunted House",
category: "puzzle",
grade: 2,
price: 1,
icon: "solocode_game-haunted-house-cover",
iconPosition: "50% 45%",
numberOfTries: 3,
highscoreAscending: false,
newBadge: false,
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThings/_t.ls
(function(){
return {
manual: {
de: "Finde alle versteckten Eier. Wenn du nicht weiter kommst, tippe auf die Lupe, um einen Tipp zu bekommen.",
en: "Find all the hidden eggs. Tap on the magnifying glass for help.",
fr: "Trouve tous les œufs cachés. Appuie sur la loupe si tu as besoin d’aide.",
es: "Encuentra todos los huevos escondidos. Presiona la lupa para obtener una pista.",
pt: "Encontre todos os ovos escondidos. Se precisar de ajuda, toque na lupa para obter dicas."
},
manualDesktop: {
de: "Finde alle versteckten Eier. Wenn du nicht weiter kommst, klicke auf die Lupe, um einen Tipp zu bekommen.",
en: "Find all the hidden eggs. Click on the magnifying glass for help.",
fr: "Trouve tous les œufs cachés. Clique sur la loupe si tu as besoin d’aide.",
es: "Encuentra todos los huevos escondidos. Si no logras avanzar, presiona la lupa y obtendrás una pista.",
pt: "Encontre todos os ovos escondidos. Se precisar de ajuda, clique na lupa para obter dicas."
},
title: {
de: "Hidden",
en: "Hidden",
fr: "Hidden",
es: "Hidden",
pt: "Hidden"
},
sceneMeadow: {
de: "Auf der Wiese",
en: "Meadow",
fr: "Dans le jardin",
es: "En la pradera",
pt: "No gramado"
},
sceneJungle: {
de: "Im Dschungel",
en: "Jungle",
fr: "Dans la jungle",
es: "En la selva",
pt: "Na selva"
},
sceneUnderwater: {
de: "Unter Wasser",
en: "Underwater",
fr: "Sous l’eau",
es: "Bajo el agua",
pt: "Debaixo d´água"
},
sceneHome: {
de: "Zuhause",
en: "Home",
fr: "Dans la maison",
es: "En casa",
pt: "Em casa"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThings/hiddenThings.ls
(function(){
return function(){
var date;
date = inc("/lib/util/formatDate2/format")();
return {
id: "hiddenThings",
project: "app01-game-hidden-things",
title: T("title"),
category: "puzzle",
grade: 2,
price: 1,
icon: "solocode_game-hidden-cover-03",
iconPosition: "50% 10%",
numberOfTries: 3,
highscoreDisabled: false,
highscoreAscending: true,
highscoreType: "time",
debugOnly: false,
newBadge: true,
difficulties: [
{
value: 0,
scenePath: "scene01-meadow/eggs",
title: T("sceneMeadow")
}, {
value: 1,
scenePath: "scene02-jungle/eggs",
title: T("sceneJungle")
}, {
value: 2,
scenePath: "scene03-underwater/eggs",
title: T("sceneUnderwater")
}, {
value: 3,
scenePath: "scene04-home/eggs",
title: T("sceneHome")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThingsChristmas/_t.ls
(function(){
return {
manual: {
de: "Finde alle versteckten Weihnachtsbaumkugeln. Wenn du nicht weiter kommst, tippe auf die Lupe, um einen Tipp zu bekommen.",
en_gb: "Find all the hidden baubles. Tap on the magnifying glass for help.",
en: "Find all the hidden ornaments. Tap on the magnifying glass for help.",
fr: "Trouve toutes les boules de Noël cachées. Appuie sur la loupe si tu as besoin d’aide.",
es: "Encuentra todas las esferas de Navidad escondidas. Presiona la lupa para obtener una pista.",
pt: "Encontre todas as bolas de árvore de Natal escondidas. Se precisar de ajuda, toque na lupa para obter dicas."
},
manualDesktop: {
de: "Finde alle versteckten Weihnachtsbaumkugeln. Wenn du nicht weiter kommst, klicke auf die Lupe, um einen Tipp zu bekommen.",
en_gb: "Find all the hidden baubles. Click on the magnifying glass for help.",
en: "Find all the hidden ornaments. Click on the magnifying glass for help.",
fr: "Trouve toutes les boules de Noël cachées. Clique sur la loupe si tu as besoin d’aide.",
es: "Encuentra todas las esferas de Navidad escondidas. Si no logras avanzar, presiona la lupa y obtendrás una pista.",
pt: "Encontre todas as bolas de árvore de Natal escondidas. Se precisar de ajuda, clique na lupa para obter dicas."
},
title: {
de: "Hidden",
en: "Hidden",
fr: "Hidden",
es: "Hidden",
pt: "Hidden"
},
sceneLake: {
de: "See",
en: "Lake",
fr: "Lac",
es: "Lago",
pt: "Lago"
},
sceneDesert: {
de: "Wüste",
en: "Desert",
fr: "Désert",
es: "Desierto",
pt: "Deserto"
},
sceneBakery: {
de: "Bäckerei",
en: "Bakery",
fr: "Boulangerie",
es: "Panadería",
pt: "Padaria"
},
sceneGlobe: {
de: "Schneekugel",
en: "Snow Globe",
fr: "Boule à neige",
es: "Globo de nieve",
pt: "Globo de neve"
},
sceneHome: {
de: "Zuhause",
en: "Home",
fr: "Dans la maison",
es: "En casa",
pt: "Em casa"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThingsChristmas/hiddenThingsChristmas.ls
(function(){
return function(){
var date;
date = inc("/lib/util/formatDate2/format")();
return {
id: "hiddenThingsChristmas",
project: "app01-game-hidden-things-christmas",
title: T("title"),
category: "puzzle",
grade: 2,
price: 1,
icon: "solocode_game-hidden-cover-christmas",
iconPosition: "50% 10%",
numberOfTries: 3,
highscoreDisabled: false,
highscoreAscending: true,
highscoreType: "time",
debugOnly: true,
newBadge: true,
difficulties: [
{
value: 0,
scenePath: "scene01-lake/baubles",
title: T("sceneLake")
}, {
value: 1,
scenePath: "scene02-desert/baubles",
title: T("sceneDesert")
}, {
value: 2,
scenePath: "scene03-bakery/baubles",
title: T("sceneBakery")
}, {
value: 3,
scenePath: "scene04-globe/baubles",
title: T("sceneGlobe")
}, {
value: 4,
scenePath: "scene05-home-christmas/baubles",
title: T("sceneHome")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThingsHalloween/_t.ls
(function(){
return {
manual: {
de: "Finde alle versteckten Kürbisse. Wenn du nicht weiter kommst, tippe auf die Lupe, um einen Tipp zu bekommen.",
en: "Find all the hidden pumpkins. Tap on the magnifying glass for help.",
fr: "Trouve toutes les citrouilles cachées. Appuie sur la loupe si tu as besoin d’aide.",
es: "Encuentra todas las calabazas escondidas. Presiona la lupa para obtener una pista.",
pt: "Encontre todas as abóboras escondidas. Se precisar de ajuda, toque na lupa para obter dicas."
},
manualDesktop: {
de: "Finde alle versteckten Kürbisse. Wenn du nicht weiter kommst, klicke auf die Lupe, um einen Tipp zu bekommen.",
en: "Find all the hidden pumpkins. Click on the magnifying glass for help.",
fr: "Trouve toutes les citrouilles cachées. Clique sur la loupe si tu as besoin d’aide.",
es: "Encuentra todas las calabazas escondidas. Si no logras avanzar, presiona la lupa y obtendrás una pista.",
pt: "Encontre todas as abóboras escondidas. Se precisar de ajuda, clique na lupa para obter dicas."
},
title: {
de: "Hidden",
en: "Hidden",
fr: "Hidden",
es: "Hidden",
pt: "Hidden"
},
sceneMeadow: {
de: "Auf der Wiese",
en: "Meadow",
fr: "Dans l’herbe",
es: "En el campo",
pt: "No gramado"
},
sceneMansion: {
de: "In der alten Villa",
en: "Old Mansion",
fr: "Dans le vieux manoir",
es: "En la vieja mansión",
pt: "Na velha mansão"
},
sceneSpace: {
de: "Im Weltall",
en: "Space",
fr: "Dans l'espace",
es: "En el espacio",
pt: "No espaço"
},
sceneHome: {
de: "Zuhause",
en: "Home",
fr: "Dans la maison",
es: "En casa",
pt: "Em casa"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/hiddenThingsHalloween/hiddenThingsHalloween.ls
(function(){
return function(){
var date;
date = inc("/lib/util/formatDate2/format")();
return {
id: "hiddenThingsHalloween",
project: "app01-game-hidden-things-halloween",
title: T("title"),
category: "puzzle",
grade: 2,
price: 1,
icon: "solocode_game-hidden-cover-04",
iconPosition: "50% 10%",
numberOfTries: 3,
highscoreDisabled: false,
highscoreAscending: true,
highscoreType: "time",
debugOnly: true,
newBadge: true,
difficulties: [
{
value: 0,
scenePath: "scene01-meadow-halloween/pumpkin",
title: T("sceneMeadow")
}, {
value: 1,
scenePath: "scene02-mansion-halloween/pumpkin",
title: T("sceneMansion")
}, {
value: 2,
scenePath: "scene03-space-halloween/pumpkin",
title: T("sceneSpace")
}, {
value: 3,
scenePath: "scene04-home-halloween/pumpkin",
title: T("sceneHome")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/marbleMaze/_t.ls
(function(){
return {
manualDesktop: {
de: "Löse das Labyrinth und erreiche so schnell wie möglich das Ziel. Steuere, indem du deine Maus in die gewünschte Richtung ziehst, und weiche den Löchern aus.",
en: "Find your way to the end of the maze. Drag your mouse to direct the ball. Make sure you avoid the holes.",
fr: "Trouve ton chemin pour sortir du labyrinthe. Fais bouger ta souris pour diriger la balle. Attention à éviter les trous !",
es: "Encuentra la salida del laberinto lo más rápido que puedas. Dirige la pelota usando el ratón ¡Cuidado con los agujeros!",
pt: "Encontre a saída do labirinto o mais rápido possível. Use o mouse para guiar a bola, mas tome cuidado para não cair nos buracos!"
},
manual: {
de: "Löse das Labyrinth und erreiche so schnell wie möglich das Ziel. Steuere, indem du dein Gerät neigst, und weiche den Löchern aus. Wird der Neigungssensor deines Gerätes nicht unterstützt, kannst du mit deinem Finger auf dem Bildschirm wischen, um zu steuern.",
en: "Find your way to the end of the maze. Tilt your device to direct the ball. Make sure you avoid the holes. If the tilt sensor on your device is not supported, you can swipe the screen to direct the ball.",
fr: "Trouve ton chemin pour sortir du labyrinthe. Incline ton appareil pour diriger la balle. Attention à éviter les trous ! Si le capteur d'inclinaison de ton appareil n'est pas pris en charge, tu peux faire glisser ton doigt sur l'écran pour te diriger.",
es: "Encuentra la salida del laberinto lo más rápido que puedas. Inclina tu dispositivo para \ndirigir la pelota. ¡Cuidado con los agujeros! En caso de que el sensor de inclinación no sea \ncompatible con tu dispositivo, puedes dirigir la pelota arrastrando el dedo sobre la \npantalla.",
pt: "Encontre a saída do labirinto o mais rápido possível. Incline o seu dispositivo para guiar a bola, mas tome cuidado para não cair nos buracos! Caso o sensor de inclinação não seja compatível com seu dispositivo, você também pode guiar a bola deslizando o dedo sobre a tela."
},
impossible: {
de: "Unmöglich",
en: "Impossible",
fr: "Impossible",
es: "Imposible",
pt: "Impossível"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/marbleMaze/marbleMaze.ls
(function(){
return function(){
return {
id: "marbleMaze",
project: "game-maze",
title: "Marble Maze",
category: "skill",
grade: 3,
price: 1,
icon: "solocode_game-marble-maze-cover-3",
iconPosition: "50% 50%",
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
debugOnly: false,
newBadge: false,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}, {
value: 10,
title: T("impossible"),
debugOnly: true
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/numberPuzzle/_t.ls
(function(){
return {
manual: {
de: "Schiebe die Zahlen in die richtige Reihenfolge. Es geht oben links mit der 1 los. Eine ausführliche Spielanleitung findest du in der Erklärung.",
en: "Move the numbers into the correct order. Begin in the top left with the number 1. You can find detailed instructions in the explanation.",
fr: "Remets les nombres dans le bon ordre en commençant par le nombre 1 en haut à gauche. Tu peux apprendre comment le faire dans les explications.",
es: "Recorre los números para acomodarlos en orden sucesivo. Empieza con el 1 en la esquina superior izquierda. Si aún tienes dudas, consulta el manual de juego.\"",
pt: "Mova os números trazendo-os para a ordem correta. Inicie pelo numero 1 no canto superior esquerdo. Uma explicação mais detalhada você encontra no manual do jogo."
},
explanation: {
de: "Erklärung",
en: "Explanation",
fr: "Explications",
es: "Manual de juego",
pt: "Manual do jogo"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/numberPuzzle/numberPuzzle.ls
(function(){
return function(){
return {
id: "numberPuzzle",
project: "app01-game-number-puzzle",
title: "Number Puzzle",
category: "puzzle",
grade: 4,
price: 1,
icon: "solocode_game-number-puzzle-cover-2",
iconPosition: "50% 57%",
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
difficulties: [
{
value: 1,
title: T("explanation"),
page: path("/../app01-game-number-puzzle/pages/tutorial/page"),
highscoreDisabled: true
}, {
value: 0,
title: "3x3"
}, {
value: 1,
title: "4x4"
}, {
value: 2,
title: "5x5"
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pearlParty/_t.ls
(function(){
return {
manualDesktop: {
de: "Ziele und schieße mit der Maus. Immer wenn du drei oder mehr gleichfarbige Bälle verbindest, bekommst du Punkte. Versuche zu verhindern, dass die Bälle das Ende des Pfades erreichen.",
en_gb: "Use the mouse to aim and shoot. Points are gained by connecting three or more balls of the same colour. Try to avoid the balls reaching the end of the path.",
en: "Use the mouse to aim and shoot. Points are gained by connecting three or more balls of the same color. Try to avoid the balls reaching the end of the path.",
fr: "Utilise la souris pour viser et tirer. Tu gagnes des points en collectant 3 perles de la même couleur ou plus. Essaie de ne pas laisser les perles arriver à la fin de chemin.",
es: "Apunta y dispara con el ratón. Logra unir tres o más pelotas del mismo color para ganar puntos. Evita que las pelotas lleguen al final del camino.",
pt: "Use o mouse para mirar e atirar. Sempre que você conectar três ou mais bolas da mesma cor, você ganha pontos. Tente evitar que as bolas cheguem ao fim do caminho."
},
manualMobile: {
de: "Ziele und schieße, indem du mit dem Finger über den Bildschirm wischst. Immer wenn du drei oder mehr gleichfarbige Bälle verbindest, bekommst du Punkte. Versuche zu verhindern, dass die Bälle das Ende des Pfades erreichen.",
en_gb: "Swipe the screen to aim and shoot. Points are gained by connecting three or more balls of the same colour. Try to avoid the balls reaching the end of the path.",
en: "Swipe the screen to aim and shoot. Points are gained by connecting three or more balls of the same color. Try to avoid the balls reaching the end of the path.",
fr: "Fais glisser ton doigt sur l'écran pour viser et tirer. Tu gagnes des points en collectant 3 perles de la même couleur ou plus. Essaie de ne pas laisser les perles arriver à la fin de chemin.",
es: "Apunta y dispara deslizando el dedo sobre la pantalla. Logra unir tres o más pelotas del mismo color para ganar puntos. Evita que las pelotas lleguen al final del camino.",
pt: "Deslize o dedo sobre a tela para mirar e atirar. Sempre que você conectar três ou mais bolas da mesma cor, você ganha pontos. Tente evitar que as bolas cheguem ao fim do caminho."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pearlParty/pearlParty.ls
(function(){
return function(){
return {
id: "pearlParty",
project: "app01-game-colorballs",
title: "Pearl Party",
category: "puzzle",
grade: 3,
price: 1,
icon: "solocode_game-pearl-party-cover-final",
iconPosition: "0% 0%",
numberOfTries: 3,
highscoreAscending: false,
plusOnly: true,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manualMobile")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pixelPaint/_t.ls
(function(){
return {
myPictures: {
de: "Meine Bilder",
en: "My Pictures",
fr: "Mes dessins",
es: "Mis imágenes",
pt: "Minhas imagens"
},
newPictures: {
de: "Neue Bilder",
en: "New Pictures",
fr: "Nouveaux dessins",
es: "Imágenes nuevas",
pt: "Imagens novas"
},
popularPictures: {
de: "Beliebte Bilder",
en: "Popular Pictures",
fr: "Dessins populaires",
es: "Imágenes populares",
pt: "Imagens populares"
},
groupPictures: {
de: "Gruppen-Bilder",
en: "Group Pictures",
fr: "Dessins du groupe",
pt: "Imagens do grupo",
es: "Imágenes de grupo"
},
antonFavourites: {
de: "ANTON-Lieblingsbilder",
en_gb: "ANTON Favourite Pictures",
en: "ANTON Favorite Pictures",
fr: "Les dessins favoris sur ANTON",
es: "Las Imágenes favoritas de ANTON",
pt: "Imagens favoritas de ANTON"
},
manualDesktop: {
de: "Fülle jedes Pixel mit einer Form. Eine Form kann zwei Farben haben und gedreht oder gespiegelt werden.
Man übermalt oder löscht die Pixel einfach mit der Maus und im Experten-Modus kann man zudem beliebige Pixel auswählen, um dann alle zusammen zu drehen, zu spiegeln, zu färben, etc.",
en_gb: "Fill each pixel with a design. A design can have two colours and be both rotated and reflected.
You can paint over or delete your pixels by simply clicking on them with the mouse. In expert mode it is possible to select multiple pixels to colour, rotate or reflect all at the same time.",
en: "Fill each pixel with a design. A design can have two colors and be both rotated and reflected.
You can paint over or delete your pixels by simply clicking on them with the mouse. In expert mode it is possible to select multiple pixels to color, rotate or reflect all at the same time.",
fr: "Remplis chaque pixel avec une forme. Une forme peut avoir 2 couleurs. Tu peux la faire tourner ou l'inverser.
Tu peux facilement remplacer un pixel ou l'effacer en cliquant dessus avec ta souris. En mode expert il est possible de choisir plusieurs pixels pour les colorier, les faire tourner ou les inverser tous en même temps.",
es: "Selecciona una de las formas disponibles para rellenar cada pixel. Puedes elegir dos colores distintos para cada forma, también las puedes rotar e invertir.
Para remplazar o borrar los pixeles simplemente presiónalos con el cursor. En modo experto, puedes elegir varios pixeles para rotarlos, invertirlos o colorearlos al mismo tiempo.",
pt: "Preencha cada pixel com uma forma. Uma forma pode ter duas cores e pode ser girada ou espelhada.
Você pode pintar ou apagar os pixels simplesmente clicando com o mouse. No modo avançado, você poderá selecionar vários pixels para girá-los, invertê-los ou colori-los ao mesmo tempo."
},
manual: {
de: "Fülle jedes Pixel mit einer Form. Eine Form kann zwei Farben haben und gedreht oder gespiegelt werden.
Man übermalt oder löscht die Pixel einfach mit dem Finger und im Experten-Modus kann man zudem beliebige Pixel auswählen, um dann alle zusammen zu drehen, zu spiegeln, zu färben, etc.",
en_gb: "Fill each pixel with a design. A design can have two colours and be both rotated and reflected.
You can paint over or delete your pixels by simply tapping them with your finger. In expert mode it is possible to select multiple pixels to colour, rotate or reflect all at the same time.",
en: "Fill each pixel with a design. A design can have two colors and be both rotated and reflected.
You can paint over or delete your pixels by simply tapping them with your finger. In expert mode it is possible to select multiple pixels to color, rotate or reflect all at the same time.",
fr: "Remplis chaque pixel avec une forme. Une forme peut avoir 2 couleurs. Tu peux la faire tourner ou l'inverser.
Tu peux facilement remplacer un pixel ou l'effacer en appuyant dessus avec ton doigt. En mode expert il est possible de choisir plusieurs pixels pour les colorier, les faire tourner ou les inverser tous en même temps.",
es: "Selecciona una de las formas disponibles para rellenar cada pixel. Puedes elegir dos colores distintos para cada forma, también las puedes rotar e invertir.
Para reemplazar o borrar los pixeles simplemente presiónalos con el dedo. En modo experto, puedes elegir varios pixeles para rotarlos, invertirlos o colorearlos al mismo tiempo.",
pt: " Preencha cada pixel com uma forma. Uma forma pode ter duas cores e pode ser girada ou espelhada.
Você pode pintar ou apagar os pixels simplesmente deslizando o dedo sobre a tela. No modo avançado, você poderá selecionar vários pixels para girá-los, invertê-los ou colori-los ao mesmo tempo."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pixelPaint/pixelPaint.ls
(function(){
return function(){
var groupDescriptions, difficulties;
groupDescriptions = inc("/data/group/calcGroupDescriptions/calc")();
difficulties = [
{
title: T("myPictures"),
icon: path("/lib/svg/shape/avatar.svg"),
page: path("/../app01-pixel-paint/pages/gallery/page")
}, groupDescriptions.length > 0 ? {
title: T("groupPictures"),
icon: path("/lib/svg/shape/group.svg"),
page: path("/../app01-pixel-paint/pages/group/page")
} : void 8, {
title: T("newPictures"),
icon: path("/lib/svg/shape/badge.svg"),
page: path("/../app01-pixel-paint/pages/latest/page")
}, {
title: T("popularPictures"),
icon: path("/lib/svg/shape/heart.svg"),
page: path("/../app01-pixel-paint/pages/best/page")
}, {
title: T("antonFavourites"),
icon: path("/lib/svg/shape/anton-app.svg"),
page: path("/../app01-pixel-paint/pages/favourites/page")
}
];
difficulties = _.compact(difficulties);
return {
id: "pixelPaint",
project: "app01-pixel-paint",
title: "Pixel Paint",
category: "creative",
grade: 4,
icon: "solocode_game-pixel-paint-cover-2",
highscoreDisabled: true,
debugOnly: false,
difficulties: difficulties,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pixelPuzzle/_t.ls
(function(){
return {
manual: {
de: " Schaffst du es, das Pixel Puzzle zu lösen?\n \n Die Zahlen geben an, welche Blöcke sich in der jeweiligen Zeile oder Spalte befinden: \n\n „1 3“ vor einer Zeile bedeutet z.B. dass sich in dieser Zeile ein Block aus einem Kästchen und dann ein Block aus 3 Kästchen befindet. Dazwischen muss mindestens ein leeres Kästchen sein.\n \n Tippe oder klicke einmal, um ein Kästchen zu füllen, zweimal für eine Hilfs-Markierung.",
en: "Can you solve the Pixel Puzzle?\nThe numbers indicate the number and size of the blocks for each row and column.\nFor example, if a row begins with the numbers “1 3”, this means that the row contains one block made up of one square and one block made up of 3 squares. There must be at least one empty square between these blocks.\n\nTap or click on a square once to fill it in and twice to give the square a temporary marking.",
fr: "Pourras-tu trouver la solution du Pixel Puzzle ?\nLes nombres indiquent le nombre et la taille des blocs de chaque ligne et colonne.\nPar exemple, si une ligne commencent avec “1 3”, ça signifie que la ligne contient un bloc composé d'1 carré et un bloc composé de 3 carrés. Il doit y avoir minimum un carré vide entre ces blocs.\nAppuie ou clique une fois sur un carré pour le remplir et deux fois pour marquer un carré temporairement.",
es: "¿Puedes resolver el rompecabezas de pixeles? \nLos números indican la cantidad y la amplitud de los bloques que hay en cada fila y en cada columna. \n\nPor ejemplo, si encuentras los números “1 3” al inicio de una fila, quiere decir que la fila \ncontiene un bloque de una celda y un bloque de tres celdas. Entre los bloques debe haber, por \nlo menos, una celda vacía. \n\nPresiona la celda una sola vez, con el dedo o con el cursor, para rellenarla. Presiónala dos veces para marcarla temporalmente.",
pt: "Você consegue resolver o quebra-cabeça do pixel? \nOs números indicam o número e o tamanho dos blocos em cada linha e em cada coluna. \nPor exemplo, se uma linha começa com os números “1 3”, isso significa que a linha contém um bloco composto por um quadrado e um bloco composto por 3 quadrados. Entre os blocoas deve haver pelo menos um quadrado vazio. \nToque ou clique em um quadrado uma vez para preenchê-lo e duas vezes para dar ao quadrado uma marcação temporária."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/pixelPuzzle/pixelPuzzle.ls
(function(){
return function(){
return {
id: "pixelPuzzle",
project: "app01-game-pixelPuzzle",
title: "Pixel Puzzle",
category: "puzzle",
grade: 4,
price: 1,
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
debugOnly: true,
newBadge: true,
difficulties: [
{
value: 0,
title: "4x4"
}, {
value: 1,
title: "5x5"
}, {
value: 2,
title: "6x6"
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/princessJourney/_t.ls
(function(){
return {
manual: "reiten - münzen sammeln - tippen - springen - nicht gegen schafe rennen :-)",
manualDesktop: "reiten - münzen sammeln - taste - springen - nicht gegen schafe rennen :-)"
};
})();
pages/games/00_shared/gameDescriptions/descriptions/princessJourney/princessJourney.ls
(function(){
return function(){
return {
id: "princessJourney",
project: "app01-game-princess-journey",
title: "A princess' journey",
category: "skill",
grade: 2,
price: 1,
numberOfTries: 3,
highscoreAscending: false,
debugOnly: true,
newBadge: true,
manual: T("manual"),
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
]
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/snowballBattle/_t.ls
(function(){
return {
manualDesktop: {
de: "Ziele mit der Maus und klicke, um einen Schneeball zu werfen.Hast du keine Schneebälle mehr, klicke unten links, um neue zu formen.",
en: "Use the mouse to aim and click to throw a snowball.If you run out of snowballs, click the bottom left of the screen to make some new ones.",
fr: "Utilise la souris pour viser et clique pour lancer une boule de neige.Si tu n'as plus de boules, clique en bas à gauche de ton écran pour en faire de nouvelles.",
es: "Apunta con el cursor y presiona el ratón para lanzar una bola de nieve.Si se te terminan las bolas de nieve, haz clic en la parte inferior izquierda para hacer más.",
pt: "Deslize o mouse para mirar e clique para atirar uma bola de neve. Se suas bolas de neve acabam, clique no canto inferior esquerdo para fazer mais bolas."
},
manual: {
de: "Tippe auf den Bildschirm, um einen Schneeball zu werfen.Hast du keine Schneebälle mehr, tippe unten links, um neue zu formen.",
en: "Tap the screen to throw snowballs.If you run out of snowballs, tap the bottom left of the screen to make some new ones.",
fr: "Appuie sur l'écran pour viser et lancer une boule de neige.Si tu n'as plus de boules, appuie en bas à gauche de ton écran pour en faire de nouvelles.",
es: "Presiona la pantalla para lanzar una bola de nieve.Si se te terminan las bolas de nieve, presiona la parte inferior izquierda de la pantalla para hacer más.",
pt: "Toque na tela para atirar uma bola de neve. Se suas bolas de neve acabarem, toque no canto inferior esquerdo para fazer mais bolas."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/snowballBattle/snowballBattle.ls
(function(){
return function(){
return {
id: "snowballBattle",
project: "game-snowball-battle",
title: "Snowball Fight",
category: "skill",
grade: 2,
price: 1,
icon: "solocode_game-snowball-battle-cover-new",
iconPosition: "50% 5%",
numberOfTries: 3,
highscoreAscending: false,
highscoreDisabled: false,
disabled: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/spaceBlox/_t.ls
(function(){
return {
manualDesktop: {
de: "Benutze die Maus oder die Pfeiltasten, um das Raumschiff zu steuern.\nLass den Ball nicht runterfallen und probiere alle Blöcke oben zu treffen.",
en: "Direct the spaceship with the mouse or the arrow keys.\nTry to hit all the blocks without letting the ball fall down.",
fr: "Dirige le vaisseau avec la souris ou les flèches du clavier.\nEssaie de détruire tous les blocs sans laisser tomber la balle.",
es: "Mueve la nave espacial con el ratón o las flechas de tu teclado. Destruye los bloques en la \nparte de arriba sin que se te caiga la pelota.",
pt: "Use o mouse ou as setas do teclado para pilotar a nave. \nDestrua os blocos na parte de cima, mas não deixe a bola cair."
},
manual: {
de: "Bewege den Finger auf dem Bildschirm, um das Raumschiff zu steuern.\nLass den Ball nicht runterfallen und probiere alle Blöcke oben zu treffen.",
en: "Use your finger to direct the spaceship.\nTry to hit all the blocks without letting the ball fall down.",
fr: "Dirige le vaisseau avec ton doigt.\nEssaie de détruire tous les blocs sans laisser tomber la balle.",
es: "Dirige la nave espacial arrastrando el dedo sobre la pantalla. Destruye los bloques en la \nparte de arriba sin que se te caiga la pelota.",
pt: "Pilote a nave deslizando o dedo sobre a tela. \nDestrua os blocos na parte de cima, mas não deixe a bola cair."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/spaceBlox/spaceBlox.ls
(function(){
return function(){
return {
id: "spaceBlox",
project: "app01-game-space-blox",
title: "Space Blox",
category: "skill",
grade: 3,
price: 1,
icon: "solocode_game-space-blox-cover-3",
iconPosition: "50% 40%",
numberOfTries: 3,
highscoreAscending: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/stroobTest/_t.ls
(function(){
return {
manualDesktop: {
de: "Klicke auf den Button, auf dem die Farbe des Wortes geschrieben steht. \nAber Vorsicht: Verwechsle die Farbe nicht mit dem Text des Wortes.",
en_gb: "Click on the button that says the colour of the word shown.\nBe careful not to mix up what the word says with the colour of the word.",
en: "Click on the button that says the color of the word shown.\nBe careful not to mix up what the word says with the color of the word.",
fr: "Clique sur le bouton qui correspond à la couleur des lettres du mot.\nAttention à ne pas mélanger le mot avec la couleur de ses lettres.",
es: "Haz clic sobre el botón en el que está escrito el color de la palabra, pero ¡ten cuidado! \nNo confundas el color de las letras con el significado de la palabra.",
pt: "Clique no botão em que está escrita a cor da palavra. Mas tenha cuidado para não confundir a cor das letras com o significado da palavra."
},
manual: {
de: "Tippe auf den Button, auf dem die Farbe des Wortes geschrieben steht. \nAber Vorsicht: Verwechsle die Farbe nicht mit dem Text des Wortes.",
en_gb: "Tap on the button that says the colour of the word shown.\nBe careful not to mix up what the word says with the colour of the word.",
en: "Tap on the button that says the color of the word shown.\nBe careful not to mix up what the word says with the color of the word.",
fr: "Appuie sur le bouton qui correspond à la couleur du mot.\nAttention à ne pas mélanger le mot avec la couleur du mot.",
es: "Presiona el botón en el que está escrito el color de la palabra, pero ¡ten cuidado! \nNo confundas el color de las letras con el significado de la palabra.",
pt: "Toque no botão onde está escrita a cor da palavra. Mas tenha cuidado: Não confunda a cor das letras com o significado da palavra."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/stroobTest/stroobTest.ls
(function(){
return function(){
return {
id: "stroobTest",
project: "app01-game-stroob-test",
title: "Stroop Test",
category: "brain",
grade: 3,
price: 1,
icon: "solocode_app-game-stroop-cover-9",
iconPosition: "50% 50%",
numberOfTries: 3,
pagePath: path("/../app01-game-stroob-test/pages/game/page"),
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superAnton/_t.ls
(function(){
return {
myLevels: {
de: "Meine Levels",
en: "My levels",
fr: "Mes niveaux",
es: "Mis niveles",
pt: "Meus níveis"
},
newLevels: {
de: "Neue Levels",
en: "New levels",
fr: "Nouveaux niveaux",
es: "Nuevos niveles",
pt: "Novos níveis"
},
popularLevels: {
de: "Beliebte Levels",
en: "Popular levels",
fr: "Niveaux populaires",
es: "Niveles populares",
pt: "Níveis populares"
},
favouriteLevels: {
de: "ANTON-Lieblings-Levels",
en_gb: "ANTON Favourite levels",
en: "ANTON Favorite levels",
fr: "Les niveaux préférés sur ANTON",
es: "Los niveles favoritos de ANTON",
pt: "Níveis favoritos de ANTON"
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superAnton/superAnton.ls
(function(){
return function(){
return {
id: "superAnton",
project: "app01-game-super-anton",
title: "Super Anton",
category: "arcade",
grade: 2,
icon: "solocode_game-super-anton-cover-2",
highscoreDisabled: true,
debugOnly: true,
newBadge: true,
difficulties: [
{
title: T("myLevels"),
icon: path("/lib/svg/shape/avatar.svg"),
page: path("/../app01-game-super-anton/pages/myLevels/page")
}, {
title: T("newLevels"),
icon: path("/lib/svg/shape/badge.svg"),
page: path("/../app01-game-super-anton/pages/newLevels/page")
}, {
title: T("popularLevels"),
icon: path("/lib/svg/shape/heart.svg"),
page: path("/../app01-game-super-anton/pages/popularLevels/page")
}, {
title: T("favouriteLevels"),
icon: path("/lib/svg/shape/anton-app.svg"),
page: path("/../app01-game-super-anton/pages/favouriteLevels/page")
}
]
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superBubble/_t.ls
(function(){
return {
manualDektop: {
de: "Bewege das Raumschiff mit der Maus. Bring die Blasen mit deinem Laser zum Zerplatzen und sammle alle Früchte auf. Aber Vorsicht: Wenn du mit einer Blase zusammenstößt, verlierst du ein Leben.",
en_gb: "Use the mouse to direct the spaceship. Burst the bubbles with your laser and collect the fruit that falls out of them. Be careful: if you crash into a bubble you will lose a life.",
en: "Use the mouse to direct the spaceship. Burst the bubbles with your laser and collect the fruits that fall out of them. Be careful: if you crash into a bubble you will lose a life.",
fr: "Utilise la souris pour diriger le vaisseau. Fais éclater les bulles avec ton laser et collecte les fruits qui en tombent. Fais attention : si tu t'écrases contre une bulle tu perds une vie.",
es: "Mueve la nave con el mouse. Revienta las burbujas con tu láser y recolecta las frutas. ¡Ten cuidado! si chocas con una de las burbujas, perderás una vida.",
pt: "Use o mouse para mover a nave. Use seu laser para estourar as bolhas e coletar todas as frutas. Mas tenha cuidado: se você colidir com uma bolha, perderá uma vida."
},
manual: {
de: "Bewege das Raumschiff mit deinem Finger. Bring die Blasen mit deinem Laser zum Zerplatzen und sammle alle Früchte auf. Aber Vorsicht: Wenn du mit einer Blase zusammenstößt, verlierst du ein Leben.",
en_gb: "Use your finger to direct the spaceship. Burst the bubbles with your laser and collect the fruit that falls out of them. Be careful: if you crash into a bubble you will lose a life.",
en: "Use your finger to direct the spaceship. Burst the bubbles with your laser and collect the fruits that fall out of them. Be careful: if you crash into a bubble you will lose a life.",
fr: "Utilise ton doigt pour diriger le vaisseau. Fais éclater les bulles avec ton laser et collecte les fruits qui en tombent. Fais attention : si tu t'écrases contre une bulle tu perds une vie.",
es: "Dirige la nave con el dedo. Revienta las burbujas con tu láser y recolecta las frutas. ¡Ten cuidado! Si chocas con una de las burbujas, perderás una vida.",
pt: "Deslize o dedo sobre a tela para mover a nave. Use seu laser para estourar as bolhas e coletar todas as frutas. Mas tenha cuidado: se você colidir com uma bolha, perderá uma vida."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superBubble/superBubble.ls
(function(){
return function(){
return {
id: "superBubble",
project: "app01-game-star-trip",
title: "Super Bubble",
category: "skill",
grade: 2,
price: 1,
icon: "solocode_game-super-bubble",
iconPosition: "50% 20%",
numberOfTries: 3,
highscoreAscending: false,
debugOnly: false,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDektop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superRacer/_t.ls
(function(){
return {
manualDesktop: {
de: "Klicke auf eine Spur oder benutze die Pfeiltasten, um die Spur zu wechseln.\nVersuche keinen Unfall zu verursachen und so schnell wie möglich im Ziel zu sein. \nSammle Münzen für einen Geschwindigkeitsschub.",
en_gb: "Use the mouse or the arrow keys to switch between lanes.\nTry to reach the finish line as quickly as possible without crashing.\nCollect the coins to boost your speed.",
en: "Use the mouse or the arrow keys to switch between lanes.\nTry not to crash and reach the finish line as quickly as possible.\nCollect the coins to boost your speed.",
fr: "Utilise la souris ou les flèches du clavier pour changer de voie.\nEssaie de ne pas avoir d'accident et d'atteindre la ligne d'arrivée aussi vite que possible.\nCollecte les pièces pour aller plus vite.",
es: "Usa el ratón o las flechas de tu teclado para cambiar de carril. Llega lo más rápido que \npuedas a la meta sin ocasionar accidentes.",
pt: "Use o mouse ou as setas do teclado para mudar de pista. Tente chegar à linha de chegada o mais rápido possível sem causar um acidente. \nColete moedas para aumentar a velocidade."
},
manual: {
de: "Tippe auf eine Spur, um auf sie zu wechseln.\nVersuche keinen Unfall zu verursachen und so schnell wie möglich im Ziel zu sein. \nSammle Münzen für einen Geschwindigkeitsschub.",
en_gb: "Tap the screen to switch between lanes.\nTry to reach the finish line as quickly as possible without crashing.\nCollect the coins to boost your speed.",
en: "Tap the screen to switch between lanes.\nTry not to crash and reach the finish line as quickly as possible.\nCollect the coins to boost your speed.",
fr: "Appuie sur l'écran pour changer de voie.\nEssaie de ne pas avoir d'accident et d'atteindre la ligne d'arrivée aussi vite que possible.\nCollecte les pièces pour aller plus vite.",
es: "Presiona la pantalla para cambiar de carril. Llega lo más rápido que \npuedas a la meta sin ocasionar accidentes.",
pt: "Toque na tela para mudar de pista. \nTente chegar à linha de chegada o mais rápido possível sem causar um acidente. \nColete moedas para aumentar a velocidade."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/superRacer/superRacer.ls
(function(){
return function(){
return {
id: "superRacer",
project: "game-super-racer",
title: "Super Racer",
category: "skill",
grade: 2,
price: 1,
icon: "solocode_game-super-racer-cover-2",
iconPosition: "50% 40%",
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/swarm/_t.ls
(function(){
return {
manual: "Hilf deinem Schwarm, alle Nester zu bevölkern. Jede Sekunde generiert ein Nest eine neue Einheit. Befehlige deinen Einheiten, das Nest zu verlassen und ein anderes anzugreifen, indem du eine Linie von deinem Nest zu einem anderen ziehst. Du kannst auch mehrere eigene Nester auswählen."
};
})();
pages/games/00_shared/gameDescriptions/descriptions/swarm/swarm.ls
(function(){
return function(){
return {
id: "swarm",
project: "app01-game-swarm",
title: "Swarm",
category: "strategy",
grade: 4,
price: 1,
numberOfTries: 3,
highscoreAscending: true,
highscoreType: "time",
debugOnly: true,
newBadge: true,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/towerBuilder/_t.ls
(function(){
return {
manualDesktop: {
de: "Klicke auf den Bildschirm, um die Blöcke übereinander zu stapeln.",
en: "Click on the screen to stack the blocks on top of each other.",
fr: "Clique sur l'écran pour empiler les blocs les uns sur les autres.",
es: "Haz clic sobre la pantalla para apilar los bloques.",
pt: "Clique na tela para empilhar os blocos."
},
manual: {
de: "Tippe auf den Bildschirm, um die Blöcke übereinander zu stapeln.",
en: "Tap the screen to stack the blocks on top of each other.",
fr: "Appuie sur l'écran pour empiler les blocs les uns sur les autres.",
es: "Presiona la pantalla para apilar los bloques.",
pt: "Toque na tela para empilhar os blocos."
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/towerBuilder/towerBuilder.ls
(function(){
return function(){
return {
id: "towerBuilder",
project: "app01-game-tower-builder",
title: "Tower Builder",
category: "skill",
grade: 4,
price: 1,
icon: "solocode_game-tower-builder-4",
numberOfTries: 3,
highscoreAscending: false,
highscoreDisabled: false,
disabled: false,
debugOnly: false,
newBadge: false,
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/descriptions/treasureHook/_t.ls
(function(){
return {
manualDesktop: {
de: "Hilf dem Piraten die wertvollen Schätze aus dem Meer zu bergen, bevor die Sonne untergeht. \nBeweise ein gutes Auge und Geschick und klicke mit der Maus oder drücke eine Taste, um den Haken auszuwerfen.\nSammle so in kurzer Zeit möglichst viele Gegenstände ein.",
en: "Use the mouse or any key to throw the hook.\nThrow the hook at the right moment to get the best treasure. ",
fr: "Aide le pirate à récupérer les trésors de la mer avant le coucher du soleil.\nUtilise la souris ou n'importe quelle touche du clavier pour lancer ton ancre au bon moment.\nCollecte le plus vite possible autant d'objets que tu peux. ",
es: "Haz clic con el ratón o presiona cualquier tecla para lanzar el gancho al mar. Lanza el gancho \nen el momento preciso para atrapar los objetos. Ayúdale al pirata a rescatar tantos \ntesoros como sea posible antes de que caiga el sol. ",
pt: "Ajude o pirata a recuperar os tesouros preciosos do mar antes do pôr do sol. \nUse o mouse ou qualquer tecla do teclado para lançar sua âncora no momento certo. \nColete o máximo de itens que puder o mais rápido possível. "
},
manual: {
de: "Hilf dem Piraten die wertvollen Schätze aus dem Meer zu bergen, bevor die Sonne untergeht. \nBeweise ein gutes Auge und Geschick und tippe auf den Bildschirm, um den Haken auszuwerfen.\nSammle so in kurzer Zeit möglichst viele Gegenstände ein.",
en: "Tap the screen to throw the hook.\nThrow the hook at the right moment to get the best treasure.\nIn each level you are given an extra 30 seconds.",
fr: "Aide le pirate à récupérer les trésors de la mer avant le coucher du soleil.\nAppuie sur l'écran pour lancer ton ancre au bon moment.\nCollecte le plus vite possible autant d'objets que tu peux. ",
es: "Toca la pantalla para lanzar el gancho al mar. Lanza el gancho \nen el momento preciso para atrapar los objetos. Ayuda al pirata a rescatar tantos \ntesoros como sea posible antes de que caiga el sol. ",
pt: "Ajude o pirata a recuperar os tesouros preciosos do mar antes do pôr do sol. \nToque na tela para lançar sua âncora no momento certo. \nColete o máximo de itens que puder o mais rápido possível. "
}
};
})();
pages/games/00_shared/gameDescriptions/descriptions/treasureHook/treasureHook.ls
(function(){
return function(){
return {
id: "treasureHook",
project: "app01-game-treasure-hook",
title: "Treasure Hook",
category: "skill",
grade: 2,
price: 1,
icon: "solocode_game-treasure-hook-cover",
numberOfTries: 3,
highscoreAscending: false,
plusOnly: true,
difficulties: [
{
value: 0,
title: T("easy")
}, {
value: 1,
title: T("medium")
}, {
value: 2,
title: T("hard")
}
],
manual: inc("/lib/util/isDesktop/isDesktop")()
? T("manualDesktop")
: T("manual")
};
};
})();
pages/games/00_shared/gameDescriptions/gameDescriptions.ls
(function(){
return function(){
var descriptions;
descriptions = [inc("descriptions/superBubble/superBubble")(), inc("descriptions/marbleMaze/marbleMaze")(), inc("descriptions/towerBuilder/towerBuilder")(), inc("descriptions/astroBang/astroBang")(), inc("descriptions/cityJumper/cityJumper")(), inc("descriptions/batCave/batCave")(), inc("descriptions/snowballBattle/snowballBattle")(), inc("descriptions/spaceBlox/spaceBlox")(), inc("descriptions/superRacer/superRacer")(), inc("descriptions/pixelPaint/pixelPaint")(), inc("descriptions/numberPuzzle/numberPuzzle")(), inc("descriptions/blockPuzzle/blockPuzzle")(), inc("descriptions/broadJump/broadJump")(), inc("descriptions/treasureHook/treasureHook")(), inc("descriptions/dragonHunter/dragonHunter")(), inc("descriptions/stroobTest/stroobTest")(), inc("descriptions/echoMaster/echoMaster")(), inc("descriptions/crazyCobras/crazyCobras")(), inc("descriptions/pearlParty/pearlParty")(), inc("descriptions/avatarSuperstar/avatarSuperstar")(), inc("descriptions/pixelPuzzle/pixelPuzzle")(), inc("descriptions/swarm/swarm")(), inc("descriptions/hauntedHouse/hauntedHouse")(), inc("descriptions/princessJourney/princessJourney")(), inc("descriptions/superAnton/superAnton")(), inc("descriptions/basketball/basketball")(), inc("descriptions/hiddenThings/hiddenThings")(), inc("descriptions/hiddenThingsHalloween/hiddenThingsHalloween")(), inc("descriptions/hiddenThingsChristmas/hiddenThingsChristmas")()];
return _.sortBy(descriptions, [
function(d){
return !!d.debugOnly;
}, function(d){
return !d.newBadge;
}, "title"
]);
};
})();
pages/games/00_shared/lockedGamesInfo/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/lock.svg"),
color: Color.grey[800]
}).css({
width: "0.9em",
height: "0.9em",
display: "inline-block",
marginRight: "0.2em",
verticalAlign: "-0.1em"
});
};
})();
pages/games/00_shared/lockedGamesInfo/info.ls
(function(){
return function(){
var currentPage, update, div;
currentPage = app.currentPage;
update = function(){
var lockedDetails;
lockedDetails = inc("/data/group/calcLockedFeature/calc")({
eventName: "lockGames"
});
if (lockedDetails.seconds < 1) {
div.empty();
} else {
div.empty().append(Div({
width: "35em",
maxWidth: "90%",
padding: "0.5em",
margin: "1em auto",
hyphens: "auto",
lineHeight: "1.5em",
backgroundColor: Color.red[100]
}).secureHtml(inc("icon/icon")(), inc("text/text")(lockedDetails)));
}
return setTimeout(function(){
if (currentPage === app.currentPage || div.isVisible()) {
return requestAnimationFrame(update);
}
}, 1000);
};
div = Div();
if (window.log != null) {
update();
}
return div;
};
})();
pages/games/00_shared/lockedGamesInfo/text/text.ls
(function(){
return function(d){
var groupName;
groupName = d.groupDescription.name;
return T("gamesLocked", d.label, groupName);
};
})();
pages/games/00_shared/pixiGame/basePage/basePage.ls
(function(){
return function(o){
var topbar;
if (o.page.params.gameDescription != null) {
o.gameDescription = o.page.params.gameDescription;
}
topbar = inc("topbar/topbar")({
gameDescription: o.gameDescription,
close: function(){
var ref$, ref1$;
if ((ref$ = o.page.pixiApp) != null) {
if ((ref1$ = ref$.sceneManager) != null) {
ref1$.pause();
}
}
return inc("closeConfirmationPopup/popup")(o.page.pixiApp);
},
showHelp: function(){
var ref$, ref1$;
if (o.gameDescription != null) {
if ((ref$ = o.page.pixiApp) != null) {
if ((ref1$ = ref$.sceneManager) != null) {
ref1$.pause();
}
}
return inc("/pages/games/02_gameDetails/help/buttonHelp/manualPopup/popup")({
gameId: o.gameDescription.id,
title: o.gameDescription.title,
manual: o.gameDescription.manual,
onClose: function(){
var ref$, ref1$;
return (ref$ = o.page.pixiApp) != null ? (ref1$ = ref$.sceneManager) != null ? ref1$.resume() : void 8 : void 8;
}
});
}
}
});
return {
top: function(){
return topbar;
},
urlDescription: function(){
return inc("../../_urlDescription/description")();
},
finish: function(){
var ref$;
inc("/lib/util/orientation/unlock")();
return (ref$ = o.page.pixiApp) != null ? ref$.cleanup() : void 8;
},
start: function(){
var wrapper;
inc("/lib/util/orientation/lock")();
o.page.append(wrapper = Div({
width: "100%",
height: "var(--centerHeight)"
}));
return inc("/lib/util/waitFrames/wait")(3, function(){
var offset, obj, ref$;
offset = wrapper.offset();
obj = {
gameDescription: o.gameDescription,
backgroundColor: (ref$ = o.backgroundColor) != null ? ref$ : 0xffffff,
displayFPS: o.displayFPS,
width: offset.width,
height: offset.height,
sounds: typeof o.sounds == 'function' ? o.sounds() : void 8,
setup: function(pixiApp){
var cb;
cb = function(textures){
pixiApp.textures = textures;
o.onLoaded(pixiApp);
return pixiApp.onLoaded();
};
if (o.svgs == null) {
cb();
return;
}
return inc("../pixi/svgTextureLoader/load")({
svgs: o.svgs(pixiApp.width, pixiApp.height),
renderer: pixiApp.renderer,
callback: cb
});
},
topBar: topbar
};
o.page.pixiApp = inc("../pixi/BaseGame/create")(obj);
o.page.pixiApp.sendDebugGameEvent("gameStarted");
return wrapper.append(o.page.pixiApp.view.css({
display: "block",
width: "100%",
height: "100%"
}));
});
}
};
};
})();
pages/games/00_shared/pixiGame/basePage/closeConfirmationPopup/popup.ls
(function(){
return function(pixiApp){
var div, popup;
div = Div({
width: "20em",
margin: "1em 0"
}).append(Div().html(T("reallyCloseGame")).css({
margin: "0 0.5em 0.5em 0.5em"
}), Button({
label: T("no"),
type: "secondary",
action: function(){
return popup.close();
}
}).css({
textAlign: "center",
width: "5.5em",
margin: "0.5em"
}), Button({
label: T("close"),
action: function(){
if (pixiApp != null) {
pixiApp.sendDebugGameEvent("gameClosed", {
type: "topBar"
});
}
popup.close();
return startPage({
path: path("../../../../04_gameEnd/page"),
replace: true,
animation: "fadeIn",
params: app.currentPage.params
});
}
}).css({
textAlign: "center",
width: "5.5em",
margin: "0.5em"
}));
return popup = inc("/lib/gui/popup/popup")({
html: div,
onClose: function(){
var ref$;
return pixiApp != null ? (ref$ = pixiApp.sceneManager) != null ? ref$.resume() : void 8 : void 8;
}
});
};
})();
pages/games/00_shared/pixiGame/basePage/topbar/topbar.ls
(function(){
return function(o){
var topBar;
topBar = inc("/addons/topbarGame/topbar")({
close: o.close
});
if (o.showHelp != null) {
topBar.showHelp = o.showHelp;
}
return topBar;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/create.ls
(function(){
return function(o){
var ref$, isCleaned, needsCoinRemoval, startedAt, pixiAppConfig, pixiApp, ref1$, ref2$, displayFPS, gameContainer, fpsView, cleanTextures, showRetry, update, onIntitalized, setup;
inc("../Helper/add")();
if (((ref$ = o.gameDescription) != null ? ref$.id : void 8) == null) {
debug("You need to specify a game description containing an id for the highscore events to work properly");
}
isCleaned = false;
needsCoinRemoval = true;
startedAt = new Date();
pixiAppConfig = {
backgroundColor: o.backgroundColor,
resolution: window.devicePixelRatio || 1,
roundPixels: false,
transparent: true
};
inc("forceCanvasForSpecificDevices/force")(pixiAppConfig);
pixiApp = new PIXI.Application(o.width, o.height, pixiAppConfig);
pixiApp.heapInfo = inc("/lib/util/heapInfo/info")("pixi_app_" + o.gameDescription.project);
pixiApp.numberOfTries = o.gameDescription.numberOfTries;
pixiApp.difficulty = (ref1$ = (ref2$ = o.gameDescription.difficulty) != null ? ref2$.value : void 8) != null ? ref1$ : 2;
pixiApp.soundPlayer = inc("soundPlayer/create")(o.sounds);
pixiApp.gameDescription = o.gameDescription;
pixiApp.removeCoin = function(){
var ref$, ref1$;
if (!needsCoinRemoval) {
return;
}
inc("/data/user/coin/remove/remove")((ref$ = (ref1$ = o.gameDescription) != null ? ref1$.price : void 8) != null ? ref$ : 1);
return needsCoinRemoval = false;
};
pixiApp.closeGame = function(type){
pixiApp.sendDebugGameEvent("gameClosed", {
type: type
});
startPage({
path: path("../../../../04_gameEnd/page"),
replace: true,
animation: "fadeIn",
params: app.currentPage.params
});
};
pixiApp.topBar = o.topBar;
pixiApp.topBar.stopGameSound = function(){
var ref$;
if ((ref$ = pixiApp.soundPlayer) != null) {
ref$.setSoundsEnabled(false);
}
};
pixiApp.topBar.resumeGameSound = function(){
var ref$, ref1$;
if ((ref$ = pixiApp.soundPlayer) != null) {
ref$.setSoundsEnabled(true);
}
if ((ref1$ = pixiApp.sceneManager.currentScene) != null) {
ref1$.resumeSound();
}
};
pixiApp.width = o.width;
pixiApp.height = o.height;
displayFPS = (ref1$ = o.displayFPS) != null ? ref1$ : false;
gameContainer = new PIXI.Container();
pixiApp.stage.addChild(gameContainer);
pixiApp.sceneManager = inc("../sceneManager/create")(gameContainer);
if (displayFPS) {
fpsView = inc("fpsLabel/create")(o.width, 20, pixiApp.ticker);
fpsView.x = o.width / 2;
fpsView.y = fpsView.height / 2;
pixiApp.stage.addChild(fpsView);
}
pixiApp.cleanup = function(){
var ref$, ref1$;
isCleaned = true;
pixiApp.ticker.remove(update);
if ((ref$ = pixiApp.soundPlayer) != null) {
ref$.stopAll();
}
if ((ref1$ = pixiApp.soundPlayer) != null) {
ref1$.sounds = null;
}
pixiApp.sceneManager.cleanup();
PIXI.actionManager.actions = [];
pixiApp.stop();
cleanTextures();
pixiApp.topBar.remove();
pixiApp.destroy();
};
cleanTextures = function(){
var k, ref$, texture, results$ = [];
for (k in ref$ = PIXI.utils.TextureCache) {
texture = ref$[k];
results$.push(texture.destroy(true));
}
return results$;
};
pixiApp.view.css({
width: o.width + "px",
height: o.height + "px",
opacity: 0
});
pixiApp.highscore = {
score: function(score, additionalData){
inc("highscore/score")({
score: score,
gameId: o.gameDescription.id,
additionalData: additionalData
});
},
show: function(showLastUserScore){
var title, ref$, ref1$;
if (isCleaned) {
return;
}
title = o.gameDescription.title;
if (((ref$ = o.gameDescription.difficulty) != null ? ref$.label : void 8) != null) {
title += " (" + o.gameDescription.difficulty.label + ")";
}
inc("highscore/show")({
ascending: o.gameDescription.highscoreAscending,
gameId: o.gameDescription.id,
highscoreType: o.gameDescription.highscoreType,
popupTitle: title,
difficulty: (ref1$ = pixiApp.difficulty) != null ? ref1$ : 2,
showLastUserScore: showLastUserScore,
onClose: showRetry
});
}
};
pixiApp.sendDebugGameEvent = function(type, eventData){
var gpuParam, ref$, ref1$, ref2$, ref3$, ref4$;
eventData == null && (eventData = {});
gpuParam = (ref$ = pixiApp.renderer) != null ? (ref1$ = ref$.gl) != null ? (ref2$ = ref1$.getExtension("WEBGL_debug_renderer_info")) != null ? ref2$.UNMASKED_RENDERER_WEBGL : void 8 : void 8 : void 8;
if (gpuParam) {
eventData._gpu = (ref3$ = pixiApp.renderer) != null ? (ref4$ = ref3$.gl) != null ? ref4$.getParameter(gpuParam) : void 8 : void 8;
}
if (type === "gameClosed") {
eventData.duration = _.round((new Date() - startedAt) / 1000, 1);
}
return inc("debugGameEvent/send")(o.gameDescription.id, type, eventData);
};
showRetry = function(){
var ref$;
if (isCleaned) {
return;
}
if (pixiApp.numberOfTries > 0) {
if (pixiApp.sceneManager.paused) {
pixiApp.sceneManager.resume();
}
if ((ref$ = pixiApp.sceneManager.currentScene) != null) {
if (typeof ref$.onRetrySelected == 'function') {
ref$.onRetrySelected();
}
}
} else {
pixiApp.closeGame("noTriesLeft");
}
};
update = function(delta){
var deltaSeconds;
deltaSeconds = pixiApp.ticker.elapsedMS / 1000;
if (deltaSeconds > 0.25) {
return;
}
if (displayFPS) {
fpsView.update(deltaSeconds);
}
pixiApp.sceneManager.update(deltaSeconds);
};
onIntitalized = function(){
var ref$;
pixiApp.view.css({
opacity: 1
});
if ((ref$ = pixiApp.renderer) != null) {
ref$.off('postrender', onIntitalized);
}
};
pixiApp.onLoaded = function(){
var ref$;
if ((ref$ = pixiApp.renderer) != null) {
ref$.on('postrender', onIntitalized);
}
};
setup = function(){
o.setup(pixiApp);
pixiApp.ticker.add(update);
};
requestAnimationFrame(setup);
return pixiApp;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/debugGameEvent/send.ls
(function(){
return function(gameName, type, eventData){
var e, key, value;
e = {
event: "debugGame",
game: gameName || "unknown",
eventType: type || "unknown",
isDebug: engine.isDebug
};
if (eventData != null) {
for (key in eventData) {
value = eventData[key];
e[key] = value;
}
}
return typeof log != 'undefined' && log !== null ? log.log(e) : void 8;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/forceCanvasForSpecificDevices/force.ls
(function(){
return function(config){
var testRenderer, gpuParam, ref$, ref1$, gpu, ref2$, gpuList;
return;
testRenderer = inc("/lib/gui/pixiRenderer/pixiRenderer")({
width: 1,
height: 1
});
gpuParam = testRenderer != null ? (ref$ = testRenderer.gl) != null ? (ref1$ = ref$.getExtension("WEBGL_debug_renderer_info")) != null ? ref1$.UNMASKED_RENDERER_WEBGL : void 8 : void 8 : void 8;
if (gpuParam) {
gpu = testRenderer != null ? (ref2$ = testRenderer.gl) != null ? ref2$.getParameter(gpuParam) : void 8 : void 8;
}
if (testRenderer != null) {
testRenderer.destroy();
}
if (gpu == null) {
return;
}
gpuList = ["Mali-G71", "Mali-G72"];
if (_.indexOf(gpuList, gpu) >= 0) {
return config.forceCanvas = true;
}
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/fpsLabel/create.ls
(function(){
return function(width, height, ticker){
var fpsContainer, background, style, label, minFPS, maxFPS, resetCounter, deltaMax, resetMinMax;
fpsContainer = new PIXI.Container();
background = inc("../../sprite/create")({
texture: PIXI.Texture.WHITE,
tint: 0,
anchorY: 0.5,
anchorX: 0.5
});
background.alpha = 0.5;
background.width = width;
background.height = height;
fpsContainer.addChild(background);
style = new PIXI.TextStyle({
fontFamily: 'Source Sans Pro Solocode',
fontSize: 15,
fill: '#ffffff',
strokeThickness: 0,
dropShadow: false
});
label = new PIXI.Text('FPS: 0.0', style);
label.anchor.x = 0;
label.anchor.y = 0.5;
label.x = -width / 2 + 10;
label.y = 0;
fpsContainer.addChild(label);
fpsContainer.x = 0;
fpsContainer.y = 0;
minFPS = 999;
maxFPS = 0;
resetCounter = 5;
deltaMax = 0;
resetMinMax = function(){
minFPS = ticker.FPS;
maxFPS = ticker.FPS;
return deltaMax = 0;
};
fpsContainer.update = function(delta){
var fps;
resetCounter -= delta;
if (resetCounter <= 0) {
resetMinMax();
resetCounter = 5;
}
fps = ticker.FPS;
if (fps < minFPS) {
minFPS = fps;
}
if (fps > maxFPS) {
maxFPS = fps;
}
if (deltaMax < delta) {
deltaMax = delta;
}
return label.text = "FPS: " + fps.toFixed(1) + " MIN: " + minFPS.toFixed(1) + " MAX: " + maxFPS.toFixed(1) + " DT: " + deltaMax;
};
return fpsContainer;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/eventName/calc.ls
(function(){
return function(gameId){
var upperCased;
upperCased = gameId.charAt(0).toUpperCase() + gameId.substr(1);
return "finishGame" + upperCased;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/formattedScore/calc.ls
(function(){
return function(score, highscoreType){
return inc(highscoreType + "/format")(score);
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/formattedScore/float/format.ls
(function(){
return function(score){
return score + "";
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/formattedScore/percentage/format.ls
(function(){
return function(score){
return score.toFixed(1) + "%";
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/formattedScore/points/format.ls
(function(){
return function(score){
return parseInt(score) + "";
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/formattedScore/time/format.ls
(function(){
return function(score){
var t, endingZero, leadingZero, string;
t = Math.round(score * 100);
endingZero = t % 100 === 0
? ".00"
: t % 10 === 0 ? "0" : "";
leadingZero = t < 1000 ? "0" : "";
string = leadingZero + t / 100 + endingZero;
return string.replace(".", ":");
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/lastUserScore/calc.ls
(function(){
return function(o){
var eventName, e;
eventName = inc("../eventName/calc")(o.gameId);
e = log.findLast({
event: eventName,
difficulty: o.difficulty
});
if (!e && o.difficulty === 2) {
e = _.findLast(log.list({
event: eventName
}), function(event){
return event.difficulty == null;
});
}
return o.lastUserScore = e != null ? e.score : void 8;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/calc/periodAndUsersFilter/calc.ls
(function(){
return function(o){
var e;
e = log.findLast({
event: "setHighscoreFilter"
});
if (!(e != null && e.period)) {
e = undefined;
}
o.period = (e != null ? e.period : void 8) || "week";
o.users = (e != null ? e.users : void 8) || "all";
if (o.period === "all") {
return o.period = "week";
}
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/load/load.ls
(function(){
return function(o, onCompleted){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/games/highscores5/get"),
params: {
gameId: o.gameId,
difficulty: o.difficulty,
logId: log.id(),
ascending: o.ascending,
firstBlockLength: 20,
userBlockLength: 21,
lastBlockLength: 10,
latestUserScore: o.showLastUserScore ? o.lastUserScore : void 8,
period: o.period,
users: o.users
},
queryInfo: {
gameId: o.gameId,
difficulty: o.difficulty,
period: o.period,
users: o.users
},
onCompleted: function(result){
o.highscores = result.highscores;
o.bestUserScore = result.bestUserScore;
return onCompleted();
},
onError: function(error){
debug(error);
return inc("../popupError/popup")(o, "error");
},
onOffline: function(){
return inc("../popupError/popup")(o, "offline");
}
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/avatar/avatar.ls
(function(){
return function(){
var userDescription;
userDescription = inc("/data/user/calcUserDescription/calc")();
return inc("/lib/gui/avatar/avatar")(userDescription.avatar, "half").css({
display: "inline-block",
width: "7em",
height: "7em",
borderRadius: "999px",
filter: 'drop-shadow(0 0 0.5em rgba(0, 0, 0, 0.2))'
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/button/button.ls
(function(){
return function(){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
}).css({
marginBottom: "1em"
}).tap(function(){
return app.currentPopup.close();
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/popup.ls
(function(){
return function(o, type){
var ref$, html, popup;
if ((ref$ = o.spinner) != null) {
ref$.remove();
}
html = Div().append(inc("title/title")(), inc("avatar/avatar")(), inc("text/text")(type), inc("result/result")(o), inc("button/button")());
return popup = inc("/lib/gui/popup/popup")({
html: html,
onClose: o.onClose
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/result/result.ls
(function(){
return function(o){
var score;
if (o.lastUserScore != null) {
score = inc("../../calc/formattedScore/calc")(o.lastUserScore, o.highscoreType);
}
return Div({
fontSize: "1.2em",
margin: "0.3em 0 1.5em"
}).html(score != null
? o.showLastUserScore
? T("yourScore", score)
: T("lastResult", score)
: T("noScoreYet"));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/text/text.ls
(function(){
return function(type){
return Div({
margin: "0.3em 0.5em 0.8em",
lineHeight: "1.5em"
}).html(type === "offline"
? T("noHighscoreOffline")
: T("noHighscoreError"));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupError/title/title.ls
(function(){
return function(){
return Div().html(T("yourResult")).css({
fontSize: "1.3em",
marginBottom: "1em",
marginTop: "1em"
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/avatar/avatar.ls
(function(){
return function(){
var userDescription;
userDescription = inc("/data/user/calcUserDescription/calc")();
return inc("/lib/gui/avatar/avatar")(userDescription.avatar, "half").css({
display: "inline-block",
width: "7em",
height: "7em",
borderRadius: "999px",
filter: 'drop-shadow(0 0 0.5em rgba(0, 0, 0, 0.2))'
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/bestScore/bestScore.ls
(function(){
return function(o){
var score;
score = inc("../../calc/formattedScore/calc")(o.bestUserScore.score, o.highscoreType);
return Div().html(T("bestScore", score)).css({
marginBottom: "1em"
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/button/button.ls
(function(){
return function(click){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
}).css({
marginBottom: "1em"
}).tap(click);
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/lastScore/lastScore.ls
(function(){
return function(o){
var score;
score = inc("../../calc/formattedScore/calc")(o.lastUserScore, o.highscoreType);
return Div().html(T("yourScore", score)).css({
fontSize: "1.3em",
marginBottom: "0.35em"
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/medal/medal.ls
(function(){
return function(position){
return SvgIcon({
svg: (function(){
switch (position) {
case 1:
return path('/lib/svg/illustration/medal-gold.svg');
case 2:
return path('/lib/svg/illustration/medal-silver.svg');
case 3:
return path('/lib/svg/illustration/medal-bronce.svg');
}
}()),
width: "5em",
height: "5em"
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/popup.ls
(function(){
return function(o){
var bestUserScore, lastScoreIsHighscore, close, html, popup;
bestUserScore = o.bestUserScore;
lastScoreIsHighscore = bestUserScore.score === o.lastUserScore;
close = function(){
return inc('../popupHighscores/popup')(o);
};
html = Div().append(inc("title/title")(), lastScoreIsHighscore && bestUserScore.position < 3
? inc("medal/medal")(bestUserScore.position)
: inc("avatar/avatar")(), inc("text/text")(lastScoreIsHighscore, bestUserScore), inc("lastScore/lastScore")(o), !lastScoreIsHighscore ? inc("bestScore/bestScore")(o) : void 8, inc("button/button")(close));
return popup = inc("/lib/gui/popup/popup")({
html: html,
onClose: close
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/text/text.ls
(function(){
return function(lastScoreIsHighscore, bestUserScore){
var label;
label = engine.guiLanguage === "en_gb"
? inc("/lib/util/calcOrdinalEn/calc")(bestUserScore.position)
: bestUserScore.position;
return Div({
marginTop: "0.3em",
marginBottom: "0.5em"
}).html(!lastScoreIsHighscore
? T("notImproved")
: bestUserScore.position <= 3
? T("topPositionReached", label)
: T("positionReached", label));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupGameResult/title/title.ls
(function(){
return function(){
return Div().html(T("yourResult")).css({
fontSize: "1.3em",
marginBottom: "1em",
marginTop: "1em"
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/button/button.ls
(function(){
return function(o){
var click;
click = function(){
var ref$;
return (ref$ = app.currentPopup) != null ? ref$.close() : void 8;
};
return Div({
flex: "0 0 auto",
borderTop: "1px solid " + Color.grey[300],
background: Color.white,
marginTop: "-2px"
}).html(Button({
label: T("closeButton")
}).css({
flex: "0 0 2em",
margin: "0.5em 0 1em"
}).tap(click));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/calcCurrentPeriodIndex/calc.ls
(function(){
return function(o, options){
var index;
index = _.findIndex(options.period, function(p){
return p.period === o.period;
});
if (index === -1) {
index = 1;
}
return index;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/calcCurrentUsersIndex/calc.ls
(function(){
return function(o, options){
var index;
index = _.findIndex(options.users, function(p){
return p.users === o.users;
});
if (index === -1) {
index = 0;
}
return index;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/click/click.ls
(function(){
return function(o){
var click;
return click = function(item){
var that;
if ((that = item.period) != null) {
o.period = that;
}
if ((that = item.users) != null) {
o.users = that;
}
log.log({
event: "setHighscoreFilter",
period: o.period,
users: o.users
});
o.showLastUserScore = false;
o.animationOnShow = false;
return inc("../../../show")(o);
};
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/dropdown/dropdown.ls
(function(){
return function(o, items, index){
var div;
div = Div({
display: "inline-flex",
margin: "0 0.2em",
padding: "0.5em"
}).append(Div().html(items[index].label).css({
flex: "1 1 auto"
}), SvgIcon({
svg: path("/lib/svg/icon/arrow-down-mini.svg"),
color: Color.grey[400]
}).css({
flex: "0 0 1em"
}));
div.tap(function(){
return OverlayMenu({
referenceDiv: div,
items: items,
direction: "down left",
adjustXY: "-8 -12"
});
});
return div;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/header.ls
(function(){
return function(o){
var click, options, currentPeriodIndex, currentUsersIndex;
click = inc("click/click")(o);
options = inc("options/options")(click);
currentPeriodIndex = inc("calcCurrentPeriodIndex/calc")(o, options);
currentUsersIndex = inc("calcCurrentUsersIndex/calc")(o, options);
return Div({
width: "100%",
marginTop: "1em",
borderBottom: "1px solid " + Color.grey[300]
}).html(inc("title/title")(o), Div({
paddingBottom: "0.4em"
}).html(inc("dropdown/dropdown")(o, options.period, currentPeriodIndex), inc("dropdown/dropdown")(o, options.users, currentUsersIndex)));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/options/options.ls
(function(){
return function(click){
return {
period: [
{
period: "day",
label: T("today"),
click: click
}, {
period: "week",
label: T("sevenDays"),
click: click
}
],
users: [
{
label: T("school"),
users: "schools",
click: click
}, {
label: T("myGroups"),
users: "groups",
click: click
}, {
label: T("everybody"),
users: "all",
click: click
}
]
};
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/header/title/title.ls
(function(){
return function(o){
return Div({
fontSize: "1.3em"
}).html(o.popupTitle || T("highscore"));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/popup.ls
(function(){
return function(o){
var div, popup;
div = Div({
display: "flex",
flexDirection: "column",
alignItems: "stretch"
}).append(inc("header/header")(o), inc("rows/rows")(o), inc("button/button")(o));
return popup = inc("/lib/gui/popup/popup")({
html: div,
onClose: o.onClose,
animationOnShow: o.animationOnShow,
animationDisableBackground: true
}).css({
opacity: 0
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowNoData/row.ls
(function(){
return function(){
return Div({
marginTop: "0.8em",
paddingBottom: "0.8em",
borderBottom: "1px solid " + Color.grey[300]
}).html(T("noHighscoreData"));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowSeparator/row.ls
(function(){
return function(){
return Div({
display: "flex",
borderBottom: "1px solid " + Color.grey[300],
padding: "0.2em 0 0.3em 0.5em",
color: Color.grey[600],
minHeight: "3em"
}).html("...");
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowUser/avatar/avatar.ls
(function(){
return function(score){
return Div({
flex: "0 0 auto",
width: "2em",
height: "2em"
}).onScopeRender(function(){
var avatar;
this.append(avatar = inc("/lib/gui/avatar/avatar")(score.avatar, "portrait").css({
width: "2em",
height: "2em"
}));
if (avatar.zoom) {
return this.parent().tap(avatar.zoom);
}
});
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowUser/name/name.ls
(function(){
return function(score){
return Div({
flex: "1 1 auto",
overflow: "hidden",
textOverflow: "ellipsis",
textAlign: "left",
paddingLeft: "0.4em",
whiteSpace: "nowrap"
}).text(score.name);
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowUser/position/position.ls
(function(){
return function(score, o){
var pos;
pos = score.position;
return Div({
flex: "0 0 auto",
textAlign: "center",
marginRight: "0.2em",
marginLeft: "0.4em",
minWidth: o.positionWidth
}).html(score.position < 4
? SvgIcon({
svg: pos === 1
? path("/lib/svg/illustration/medal-gold.svg")
: pos === 2
? path("/lib/svg/illustration/medal-silver.svg")
: path("/lib/svg/illustration/medal-bronce.svg"),
size: "1.5em"
}).css({
margin: "0.5em -0.35em -0.35em"
})
: score.position + ".");
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowUser/row.ls
(function(){
return function(score, o){
return Div().cssClass({
display: "flex",
borderBottom: "1px solid " + Color.grey[300],
padding: "0.2em 0 0.3em",
minHeight: "3em",
background: score.isUserScore ? Color.grey[200] : void 8
}).addClass(score.isUserScore ? "currentUser" : void 8).append(inc("position/position")(score, o), inc("avatar/avatar")(score), inc("name/name")(score), inc("score/score")(score, o));
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rowUser/score/score.ls
(function(){
return function(score, o){
score = inc("../../../../calc/formattedScore/calc")(score.score, o.highscoreType);
return Div({
flex: "0 0 auto",
width: "3em",
marginRight: "0.3em"
}).html(score);
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/popupHighscores/rows/rows.ls
(function(){
return function(o){
var highscores, tableData, maxPosition, ref$, scrollDiv, d;
highscores = o.highscores;
tableData = highscores.firstBlock || [];
if (highscores.userBlock) {
tableData = _.concat(tableData, {
isSeparator: true
}, highscores.userBlock);
}
if (highscores.lastBlock) {
tableData = _.concat(tableData, {
isSeparator: true
}, highscores.lastBlock);
}
maxPosition = Math.max((ref$ = _.last(tableData)) != null ? ref$.position : void 8, 100);
o.positionWidth = ("" + maxPosition).length * 0.7 + "em";
scrollDiv = ScrollDiv().css({
flex: "0 1 auto"
}).append(tableData.length === 0
? inc("rowNoData/row")()
: (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = tableData).length; i$ < len$; ++i$) {
d = ref$[i$];
if (d.isSeparator) {
results$.push(inc("rowSeparator/row")());
} else {
results$.push(inc("rowUser/row")(d, o));
}
}
return results$;
}()));
requestAnimationFrame(function(){
scrollDiv.scrollElementIntoView(scrollDiv.findFirst(".currentUser"), {
instant: true,
center: true
});
return requestAnimationFrame(function(){
var params, ref$;
params = {
enabled: true,
debug: false,
maxDurations: "500 20 10",
nearScopeSize: 1000
};
if (scrollDiv.setScopeRender != null) {
scrollDiv.setScopeRender(params);
} else {
scrollDiv.scopeRender = params;
}
return (ref$ = app.currentPopup) != null ? ref$.css({
opacity: 1
}) : void 8;
});
});
return scrollDiv;
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/score.ls
(function(){
return function(o){
var e, key, ref$, value;
e = {
event: inc("calc/eventName/calc")(o.gameId),
score: o.score,
isDebug: engine.isDebug
};
if (o.additionalData != null) {
for (key in ref$ = o.additionalData) {
value = ref$[key];
e[key] = value;
}
}
return log.log(e);
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/highscore/show.ls
(function(){
return function(o){
var ref$, isCancelled, load, create;
o.highscoreType = (ref$ = o.highscoreType) != null ? ref$ : "points";
inc("calc/lastUserScore/calc")(o);
inc("calc/periodAndUsersFilter/calc")(o);
isCancelled = false;
load = function(){
return inc("load/load")(o, create);
};
create = function(){
var ref$;
if ((ref$ = o.spinner) != null) {
ref$.remove();
}
if (isCancelled) {
return;
}
if (o.showLastUserScore) {
return inc("popupGameResult/popup")(o);
} else {
return inc("popupHighscores/popup")(o);
}
};
o.spinner = inc("/lib/gui/spinnerOverlay/overlay")(function(){
isCancelled = true;
return typeof o.onClose == 'function' ? o.onClose() : void 8;
}).css({
pointerEvents: "none"
});
setTimeout(function(){
return o.spinner.css({
pointerEvents: "inherit"
});
}, 1000);
return load();
};
})();
pages/games/00_shared/pixiGame/pixi/BaseGame/soundPlayer/create.ls
(function(){
return function(sounds){
var soundPlayer, ref$, key, sound, s;
soundPlayer = {
soundsEnabled: !((ref$ = log.findLast('setGameSoundDisabled')) != null && ref$.value)
};
soundPlayer.sounds = {};
for (key in sounds) {
sound = sounds[key];
s = inc("/lib/util/sound/sound")({
base64: inc(sound.filename),
volume: sound.volume || 1,
isLoop: sound.isLoop
});
soundPlayer.sounds[key] = s;
}
soundPlayer.play = function(name, looping){
var ref$;
if (!soundPlayer.soundsEnabled) {
return;
}
looping = looping || false;
if ((ref$ = soundPlayer.sounds[name]) != null) {
ref$.play();
}
};
soundPlayer.stop = function(name){
var ref$;
if ((ref$ = soundPlayer.sounds[name]) != null) {
ref$.stop();
}
};
soundPlayer.stopAll = function(){
var key, ref$, sound;
for (key in ref$ = soundPlayer.sounds) {
sound = ref$[key];
if (typeof sound.stop == 'function') {
sound.stop();
}
}
};
soundPlayer.setSoundsEnabled = function(enabled){
soundPlayer.soundsEnabled = enabled;
if (!enabled) {
soundPlayer.stopAll();
}
};
return soundPlayer;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/add.ls
(function(){
return function(){
return PIXI.Helper.Color = {
fromRgbaString: inc("functions/fromRgbaString"),
fromRGB: inc("functions/fromRGB"),
fromHSB: inc("functions/fromHSB"),
darkerColor: inc("functions/darkerColor"),
lighterColor: inc("functions/lighterColor"),
toHexString: inc("functions/toHexString"),
fromHexString: inc("functions/fromHexString"),
getRed: inc("functions/getRed"),
getGreen: inc("functions/getGreen"),
getBlue: inc("functions/getBlue"),
Components: inc("functions/components")(),
getComponents: inc("functions/getComponents")
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/adjustedColor.ls
(function(){
return function(color, ratio){
var r, g, b;
r = inc("getRed")(color) * ratio;
g = inc("getGreen")(color) * ratio;
b = inc("getBlue")(color) * ratio;
return inc("fromRGB")(r, g, b);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/components.ls
(function(){
return function(){
var components;
return components = {
RED: 16,
GREEN: 8,
BLUE: 0
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/darkerColor.ls
(function(){
return function(color, ratio){
var adjustment;
adjustment = 1 - ratio;
return inc("adjustedColor")(color, adjustment);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/fromHSB.ls
(function(){
return function(h, s, b){
var i, f, p, q, t, r, g;
i = Math.floor(h * 6);
f = h * 6 - i;
p = b * (1 - s);
q = b * (1 - f * s);
t = b * (1 - (1 - f) * s);
switch (i % 6) {
case 0:
r = b;
g = t;
b = p;
break;
case 1:
r = q;
g = b;
b = p;
break;
case 2:
r = p;
g = b;
b = t;
break;
case 3:
r = p;
g = q;
b = b;
break;
case 4:
r = t;
g = p;
b = b;
break;
case 5:
r = b;
g = p;
b = q;
}
return inc("fromRGB")(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/fromHexString.ls
(function(){
return function(string){
return parseInt(string, 16);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/fromRGB.ls
(function(){
return function(r, g, b){
r = Math.max(0, Math.min(255, r));
g = Math.max(0, Math.min(255, g));
b = Math.max(0, Math.min(255, b));
return r << 16 | g << 8 | b;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/fromRgbaString.ls
(function(){
return function(string){
var a, r, g, b;
a = string.split(/\,|\(|\)/);
r = a[1];
g = a[2];
b = a[3];
return inc("fromRGB")(r, g, b);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/getBlue.ls
(function(){
return function(color){
return inc("getComponent")(color, inc("components")().BLUE);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/getComponent.ls
(function(){
return function(color, component){
return color >> component & 0xff;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/getComponents.ls
(function(){
return function(color){
var comps, c;
comps = inc("components")();
c = {};
c[comps.RED] = inc("getRed")();
c[comps.GREEN] = inc("getGreen")();
c[comps.BLUE] = inc("getBlue")();
return c;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/getGreen.ls
(function(){
return function(color){
return inc("getComponent")(color, inc("components")().GREEN);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/getRed.ls
(function(){
return function(color){
return inc("getComponent")(color, inc("components")().RED);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/lighterColor.ls
(function(){
return function(color, ratio){
var adjustment;
adjustment = 1 + ratio;
return inc("adjustedColor")(color, adjustment);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Color/functions/toHexString.ls
(function(){
return function(color){
var c;
c = color.toString(16);
while (c.length < 6) {
c = "0" + c;
}
return c;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Convenience/add.ls
(function(){
return function(){
return PIXI.Helper.Convenience = {
removeDeadSpritesFromArray: inc("functions/removeDeadSpritesFromArray"),
isInSceneBounds: inc("functions/isInSceneBounds")
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Convenience/functions/isInSceneBounds.ls
(function(){
return function(sprite, scene){
var gx, gy, anchor, ref$;
gx = sprite.getGlobalPosition().x;
gy = sprite.getGlobalPosition().y;
anchor = (ref$ = sprite.anchor) != null
? ref$
: (ref$ = sprite.pivot) != null
? ref$
: {
x: 0,
y: 0
};
return gx - sprite.width * sprite.anchor.x >= 0 && gx + sprite.width * (1 - sprite.anchor.x) < scene.sceneWidth && gy + sprite.height * (1 - sprite.anchor.y >= 0) && gy - sprite.height * sprite.anchor.y <= scene.sceneHeight;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Convenience/functions/removeDeadSpritesFromArray.ls
(function(){
return function(array){
var i;
i = 0;
while (i < array.length) {
if (!array[i].alive) {
array[i].parent.removeChild(array[i]);
array.splice(i, 1);
} else {
i++;
}
}
return array;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Circle/containsPoint.ls
(function(){
return function(circle, point){
var dist;
dist = inc("../Point/distance")(circle.position, point);
return dist < circle.radius;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Circle/intersectsCircle.ls
(function(){
return function(circle1, circle2){
var dist;
dist = inc("../Point/distance")(circle1.position, circle2.position);
return dist < circle1.radius + circle2.radius;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Line/betweenPoints.ls
(function(){
return function(p1, p2){
var line;
return line = {
start: p1,
end: p2
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Line/intersectionWithLine.ls
(function(){
return function(line1, line2, allowEndpoints){
var l1Vec, l2Vec, l2l1Vec, determinant, s, t, intersects, intersection;
allowEndpoints = !!alloallowEndpoints;
l1Vec = inc("../Vector/betweenPoints")(line1.start, line1.end);
l2Vec = inc("../Vector/betweenPoints")(line2.start, line2.end);
l2l1Vec = inc("../Vector/betweenPoints")(line2.start, line1.start);
determinant = -l2Vec.x * l1Vec.y + l1Vec.x * l2Vec.y;
s = (function(it){
return it - l1Vec.y * l2l1Vec.x + l1Vec.x * l2l1Vec.y;
}) / determinant;
t = (l2Vec.x * l2l1Vec.y - l2Vec.y * l2l1Vec.x) / determinant;
if (allowIntersectionAtEndPoints) {
intersects = s >= 0 && s <= 1 && t >= 0 && t <= 1;
} else {
intersects = s > 0 && s < 1 && t > 0 && t < 1;
}
intersection = undefined;
if (intersects) {
intersection = inc("../Vector/add")(l1.startPoint, inc("../Vector/multiply")(l1Vec, t));
}
return intersection;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Line/intersectsWithCircle.ls
(function(){
return function(line, circle){
var orth, o1, orthLine, cross, result, distance;
orth = inc("../Vector/orthogonal")(inc("../Vector/betweenPoints")(line.start, line.end));
o1 = inc("../Vector/add")(circle.position, inc("../Vector/multiply")(orth, 100000));
o1 = inc("../Vector/add")(circle.position, inc("../Vector/multiply")(orth, -100000));
orthLine = inc("betweenPoints")(o1, o2);
cross = inc("intersectionWithLine")(line, orthLine);
result = false;
if (cross != null) {
distance = inc("../Point/distance")(circle.position, cross);
result = distance < circle.radius;
}
return result;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Line/length.ls
(function(){
return function(line){
return inc("../Point/distance")(line.end, line.start);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Point/distance.ls
(function(){
return function(p1, p2){
var v;
v = inc("../Vector/substract")(p2, p1);
return inc("../Vector/length");
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Rect/containsPoint.ls
(function(){
return function(rect, point){
return point.x > rect.x && point.y > rect.y && point.x < rect.x + rect.width && point.y < rect.y + rect.height;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Rect/intersectsRect.ls
(function(){
return function(rect1, rect2){
return rect1.x + rect1.width > rect2.x && rect1.x < rect2.x + rect2.width && rect1.y < rect2.y + rect2.height && rect2.y < rect1.y + rect1.height;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/add.ls
(function(){
return function(vec1, vec2){
var vec;
return vec = {
x: vec1.x + vec2.x,
y: vec1.y + vec2.y
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/betweenPoints.ls
(function(){
return function(p1, p2){
return inc("substract")(p2, p1);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/fromRadians.ls
(function(){
return function(rad){
var vec;
return vec = {
x: Math.sin(rad),
y: Math.cos(rad)
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/length.ls
(function(){
return function(vec){
return Math.sqrt(vec.x * vec.x + vec.y * vec.y);
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/multiply.ls
(function(){
return function(vec, a){
var v;
return v = {
x: vec.x * a,
y: vec.y * a
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/norm.ls
(function(){
return function(vec){
var l, result;
l = inc("length")(vec);
result = vec;
if (l > 0) {
result = inc("multiply")(vec, 1 / l);
}
return result;
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/orthogonal.ls
(function(){
return function(vec){
var v;
return v = {
x: -vec.y,
y: vec.x
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/radiansBetweenVectors.ls
(function(){
return function(vec1, vec2){
var length1, length2;
length1 = inc("length")(vec1);
length2 = inc("length")(vec2);
return Math.acos((vec1.x * vec2.x + vec1.y * vec2.y) / (length1 * length2));
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/Vector/substract.ls
(function(){
return function(vec1, vec2){
var vec;
return vec = {
x: vec1.x - vec2.x,
y: vec1.y - vec2.y
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/Math/add.ls
(function(){
return function(){
return PIXI.Helper.Math = {
Vector: {
length: inc("Vector/length"),
multiply: inc("Vector/multiply"),
norm: inc("Vector/norm"),
orthogonal: inc("Vector/orthogonal"),
add: inc("Vector/add"),
substract: inc("Vector/substract"),
betweenPoints: inc("Vector/betweenPoints"),
radiansBetweenVectors: inc("Vector/radiansBetweenVectors"),
fromRadians: inc("Vector/fromRadians")
},
Line: {
betweenPoints: inc("Line/betweenPoints"),
length: inc("Line/length"),
intersectionWithLine: inc("Line/intersectionWithLine"),
intersectsWithCircle: inc("Line/intersectsWithCircle")
},
Point: {
distance: inc("Point/distance")
},
Circle: {
containsPoint: inc("Circle/containsPoint"),
intersectsCircle: inc("Circle/intersectsCircle")
},
Rect: {
containsPoint: inc("Rect/containsPoint"),
intersectsRect: inc("Rect/intersectsRect")
}
};
};
})();
pages/games/00_shared/pixiGame/pixi/Helper/add.ls
(function(){
return function(){
PIXI.Helper == null && (PIXI.Helper = {});
inc("Color/add")();
inc("Math/add")();
return inc("Convenience/add")();
};
})();
pages/games/00_shared/pixiGame/pixi/animatedSprite/create.ls
(function(){
return function(o){
var sprite, ax, ref$, ay, adjustAnimationTime;
sprite = new PIXI.extras.AnimatedSprite(o.textures.textures[o.animation].frames);
sprite.width = o.textures.size.width / window.devicePixelRatio;
sprite.height = o.textures.size.height / window.devicePixelRatio;
ax = (ref$ = o.anchorX) != null ? ref$ : 0.5;
ay = (ref$ = o.anchorY) != null ? ref$ : 0.5;
sprite.anchor.set(ax, ay);
sprite.x = (ref$ = o.x) != null ? ref$ : 0;
sprite.y = (ref$ = o.y) != null ? ref$ : 0;
sprite.dx = (ref$ = o.dx) != null ? ref$ : 0;
sprite.dy = (ref$ = o.dy) != null ? ref$ : 0;
if (o.tint != null) {
sprite.tint = o.tint;
}
sprite.initialScale = {
x: sprite.scale.x,
y: sprite.scale.y
};
sprite.animationTimeScale = 1;
sprite.allTextures = o.textures.textures;
sprite.currentAnimation = o.animation;
adjustAnimationTime = function(){
var maxFrame, maxTime, fps;
maxFrame = sprite.allTextures[sprite.currentAnimation].maxFrames;
maxTime = sprite.allTextures[sprite.currentAnimation].time;
fps = maxFrame / maxTime;
return sprite.animationSpeed = fps * sprite.animationTimeScale / 50;
};
sprite.setAnimation = function(animation){
sprite.currentAnimation = animation;
sprite.textures = sprite.allTextures[animation].frames;
adjustAnimationTime();
return sprite.play();
};
sprite.setAnimationTimeScale = function(timeScale){
sprite.animationTimeScale = timeScale;
return adjustAnimationTime();
};
adjustAnimationTime();
sprite.play();
return sprite;
};
})();
pages/games/00_shared/pixiGame/pixi/button/create.ls
(function(){
return function(o){
var button, ax, ay, backgroundVisible, needsSize, makeState, style, text, ref$;
button = new PIXI.Container();
button.texture = o.texture;
ax = 0.5;
if (o.anchorX != null) {
ax = o.anchorX;
}
ay = 0.5;
if (o.anchorY != null) {
ay = o.anchorY;
}
button.pivot.set(ax, ay);
button.alive = true;
button.dx = 0;
button.dy = 0;
if (o.x != null) {
button.x = o.x;
}
if (o.y != null) {
button.y = o.y;
}
backgroundVisible = o.tint != null || o.texture != null;
if (o.texture == null) {
o.texture = PIXI.Texture.WHITE;
needsSize = true;
}
button.background = inc("../sprite/create")(o);
button.background.anchor.set(0.5);
button.background.x = 0;
button.background.y = 0;
if (!backgroundVisible) {
button.background.visible = false;
}
button.addChild(button.background);
makeState = function(highlighted){
if (highlighted) {
if (o.highlightedTexture != null) {
button.texture = o.highlightedTexture;
} else {
button.alpha = 0.5;
}
} else {
if (o.highlightedTexture != null) {
button.texture = o.texture;
} else {
button.alpha = 1;
}
}
};
if (o.text != null) {
if (o.textStyle != null) {
style = o.textStyle;
} else {
style = new PIXI.TextStyle({
fontFamily: 'Source Sans Pro Solocode',
fontSize: 30,
fill: '#ffffff'
});
}
text = new PIXI.Text(o.text, style);
text.anchor.set(0.5);
button.addChild(text);
if (!!needsSize) {
button.background.width = text.width + 20 + ((ref$ = o.padding) != null ? ref$ : 0);
button.background.height = text.height + ((ref$ = o.padding) != null ? ref$ : 0);
}
}
button.interactive = true;
button.on('pointerdown', function(){
makeState(true);
});
button.on('pointerup', function(){
makeState(false);
o.onClick(button);
});
button.on('pointerupoutside', function(){
makeState(false);
});
return button;
};
})();
pages/games/00_shared/pixiGame/pixi/createAtlas/create.ls
(function(){
return function(o, callback){
var svgs, total, loaded, textures, resolution, load, onTextureUpdate, done;
svgs = inc(o.projectFolder + "/images/*.svg", {
returnAsObject: true
});
total = _.keys(svgs).length;
loaded = 0;
textures = {};
resolution = o.renderer.resolution;
load = function(){
var path, ref$, svg, div, width, height, src, texture, p, filename, name, results$ = [];
for (path in ref$ = svgs) {
svg = ref$[path];
div = Div();
div.innerHTML = svg;
svg = div.firstChild;
width = Math.max(1, +svg.attr("width") * resolution * o.scale);
height = Math.max(1, +svg.attr("height") * resolution * o.scale);
svg.attr({
width: width,
height: height
});
svg = svg.outerHTML;
src = 'data:image/svg+xml;base64,' + window.btoa(svg);
texture = PIXI.Texture.fromImage(src);
p = path.split("/");
filename = p[p.length - 1];
name = filename.replace(".svg", "");
textures[name] = texture;
if (texture.baseTexture.hasLoaded) {
results$.push(onTextureUpdate());
} else {
results$.push(texture.on("update", onTextureUpdate));
}
}
return results$;
};
onTextureUpdate = function(texture){
if (texture != null) {
texture.off("update", onTextureUpdate);
}
loaded = loaded + 1;
if (loaded === total) {
return done();
}
};
done = function(){
var atlas;
atlas = new PIXI.spine.core.TextureAtlas();
atlas.addTextureHash(textures, true);
o.atlas = atlas;
return callback();
};
return load();
};
})();
pages/games/00_shared/pixiGame/pixi/draggableSprite/draggableSprite.ls
(function(){
return function(o){
var sprite, touchStart, origin, onTouchDown, onTouchMove, onTouchUp;
sprite = inc("/pages/games/00_shared/pixiGame/pixi/sprite/create")(o);
onTouchDown = function(event){
origin = {
x: sprite.position.x,
y: sprite.position.y
};
touchStart = {
x: event.data.global.x,
y: event.data.global.y
};
sprite.parent.setChildIndex(this, this.parent.children.length - 1);
return typeof o.onDragStart == 'function' ? o.onDragStart(sprite) : void 8;
};
onTouchMove = function(event){
if (touchStart != null) {
sprite.x = origin.x + (event.data.global.x - touchStart.x) / sprite.parent.scale.x;
sprite.y = origin.y + (event.data.global.y - touchStart.y) / sprite.parent.scale.y;
return typeof o.onDragMove == 'function' ? o.onDragMove(sprite) : void 8;
}
};
onTouchUp = function(event){
if (touchStart == null) {
return;
}
touchStart = undefined;
origin = undefined;
return typeof o.onDragEnd == 'function' ? o.onDragEnd(sprite) : void 8;
};
sprite.on('pointerdown', onTouchDown);
sprite.on('pointermove', onTouchMove);
sprite.on('pointerup', onTouchUp);
sprite.on('pointerupoutside', onTouchUp);
sprite.interactive = true;
return sprite;
};
})();
pages/games/00_shared/pixiGame/pixi/hintLabel/create.ls
(function(){
return function(pixiApp, color){
var fontSize, hint;
fontSize = Math.min(pixiApp.width, pixiApp.height) * 0.04;
hint = new PIXI.Text("", new PIXI.TextStyle({
fontFamily: "Source Sans Pro Solocode",
stroke: color,
fill: color,
fontSize: fontSize,
wordWrap: true,
wordWrapWidth: pixiApp.width * 0.9,
align: "center"
}));
hint.anchor.set(0.5, 1);
hint.x = pixiApp.width / 2;
hint.y = pixiApp.height - fontSize;
hint.changeHint = function(){
return hint.text = T("hint") + _.sample(pixiApp.gameDescription.tips);
};
return hint;
};
})();
pages/games/00_shared/pixiGame/pixi/keyboard/addListener.ls
(function(){
return function(o){
var keyboard, keys;
keyboard = {};
keys = {};
keyboard.onKeyDown = function(event){
var ref$;
if ((ref$ = keys[event.keyCode]) != null ? ref$ : true) {
if (typeof o.onKeyDown == 'function') {
o.onKeyDown(event.keyCode);
}
keys[event.keyCode] = false;
}
event.preventDefault();
};
keyboard.onKeyUp = function(event){
if (!keys[event.keyCode]) {
o.onKeyUp(event.keyCode);
keys[event.keyCode] = true;
}
event.preventDefault();
};
window.addEventListener("keydown", keyboard.onKeyDown, false);
window.addEventListener("keyup", keyboard.onKeyUp, false);
keyboard.cleanup = function(){
window.removeEventListener("keydown", keyboard.onKeyDown);
window.removeEventListener("keyup", keyboard.onKeyUp);
};
return keyboard;
};
})();
pages/games/00_shared/pixiGame/pixi/onScreenControl/control.ls
(function(){
return function(tint, radius){
var control, startX, startY, outerCircle, innerCircle;
tint == null && (tint = 0xffffff);
radius == null && (radius = 50);
control = new PIXI.Container();
startX = 0;
startY = 0;
control.dx = 0;
control.dy = 0;
control.angle = 0;
outerCircle = new PIXI.Graphics();
outerCircle.lineStyle(4, tint, 0.5);
outerCircle.drawCircle(0, 0, radius);
control.addChild(outerCircle);
innerCircle = new PIXI.Graphics();
innerCircle.beginFill(tint, 1);
innerCircle.drawCircle(0, 0, radius / 3);
innerCircle.endFill(tint, 1);
control.addChild(innerCircle);
control.start = function(x, y){
startX = x;
startY = y;
control.x = x;
control.y = y;
return control.alpha = 1;
};
control.update = function(x, y){
var v, l, d;
if (control.alpha === 0) {
return;
}
v = {
x: x - startX,
y: y - startY
};
l = Math.sqrt(Math.pow(v.x, 2) + Math.pow(v.y, 2));
if (l === 0) {
control.dx = 0;
control.dy = 0;
} else {
d = Math.min(1, l / radius);
v.x /= l;
v.y /= l;
control.dx = v.x * d;
control.dy = v.y * d;
}
control.angle = -Math.atan2(control.dx, control.dy) + Math.PI / 2;
innerCircle.x = control.dx * radius;
return innerCircle.y = control.dy * radius;
};
control.end = function(){
control.alpha = 0;
control.dx = 0;
control.dy = 0;
return innerCircle.position.set(0);
};
control.alpha = 0;
return control;
};
})();
pages/games/00_shared/pixiGame/pixi/physicsEngine/physicsEngine.ls
(function(){
return function(o){
var physicsEngine, velocityIterations, ref$, positionIterations, ref1$, ref2$, contactListener;
physicsEngine = {
scaleFactor: o.scaleFactor || 1
};
velocityIterations = (ref$ = o.velocityIterations) != null ? ref$ : 1;
positionIterations = (ref$ = o.positionIterations) != null ? ref$ : 1;
physicsEngine.world = new box2d.b2World(new box2d.b2Vec2((ref$ = (ref1$ = o.gravity) != null ? ref1$.x : void 8) != null ? ref$ : 0, (ref$ = (ref2$ = o.gravity) != null ? ref2$.y : void 8) != null ? ref$ : 0), true);
physicsEngine.addSprite = function(sprite, bodyOptions, fixDef){
var ref$, bodyDef;
bodyOptions = bodyOptions || {};
if (bodyOptions.position == null) {
if (sprite.anchor != null) {
bodyOptions.position = [(sprite.x + sprite.width * (0.5 - ((ref$ = sprite.anchor.x) != null ? ref$ : 0.5))) / o.scaleFactor, (sprite.y + sprite.height * (0.5 - ((ref$ = sprite.anchor.y) != null ? ref$ : 0.5))) / o.scaleFactor];
} else {
bodyOptions.position = [sprite.x / o.scaleFactor, sprite.y / o.scaleFactor];
}
bodyOptions.position[0] = +bodyOptions.position[0].toFixed(10);
bodyOptions.position[1] = +bodyOptions.position[1].toFixed(10);
console.log('body pos', sprite.x, sprite.y, sprite.width, sprite.height);
console.log('body pos', bodyOptions.position);
}
bodyDef = new box2d.b2BodyDef();
if (bodyOptions['static']) {
bodyDef.type = box2d.b2BodyType.b2_staticBody;
} else {
bodyDef.type = box2d.b2BodyType.b2_dynamicBody;
}
bodyDef.position.x = bodyOptions.position[0];
bodyDef.position.y = bodyOptions.position[1];
sprite.body = physicsEngine.world.CreateBody(bodyDef);
if (fixDef.shape != null) {
sprite.body.CreateFixture(fixDef);
} else {
sprite.body.CreateFixture(fixDef, 0);
}
sprite.body.sprite = sprite;
};
physicsEngine.removeSprite = function(sprite){
return physicsEngine.world.DestroyBody(sprite.body);
};
physicsEngine.update = function(dt){
var body, sprite, pos;
physicsEngine.world.Step(dt, velocityIterations, positionIterations);
body = physicsEngine.world.GetBodyList();
while (body) {
if (sprite = body.sprite) {
pos = body.GetWorldCenter();
if (sprite.anchor != null) {
sprite.x = pos.x * o.scaleFactor - sprite.width * (0.5 - sprite.anchor.x);
sprite.y = pos.y * o.scaleFactor - sprite.height * (0.5 - sprite.anchor.y);
} else {
sprite.x = pos.x * o.scaleFactor;
sprite.y = pos.y * o.scaleFactor;
}
sprite.rotation = body.GetAngle();
}
body = body.GetNext();
}
};
contactListener = new box2d.b2ContactListener();
contactListener.BeginContact = function(contact){
var s1, s2;
s1 = contact.GetFixtureA().GetBody().sprite;
s2 = contact.GetFixtureB().GetBody().sprite;
return physicsEngine.onBeginContact(s1, s2);
};
contactListener.EndContact = function(contact){
var s1, s2;
s1 = contact.GetFixtureA().GetBody().sprite;
s2 = contact.GetFixtureB().GetBody().sprite;
return physicsEngine.onEndContact(s1, s2);
};
physicsEngine.world.SetContactListener(contactListener);
physicsEngine.onBeginContact = function(s1, s2){};
physicsEngine.onEndContact = function(s1, s2){};
physicsEngine.cleanup = function(){
var ref$;
physicsEngine.world.SetContactListener(undefined);
delete physicsEngine.world;
delete contactListener.BeginContact;
delete contactListener.EndContact;
contactListener = undefined;
delete physicsEngine.onBeginContact;
return ref$ = physicsEngine.onEndContact, delete physicsEngine.onEndContact, ref$;
};
return physicsEngine;
};
})();
pages/games/00_shared/pixiGame/pixi/scene/create.ls
(function(){
return function(o){
var scene, pointerdown, pointermove, pointerup, keyboard, bg;
scene = new PIXI.Container();
scene.sceneWidth = o.width;
scene.sceneHeight = o.height;
scene.paused = false;
scene.isRunning = false;
scene.start = function(){};
scene.update = function(delta){};
scene.onTouchDown = function(x, y){};
scene.onTouchMove = function(x, y, isDrag){};
scene.onTouchUp = function(x, y){};
scene.onKeyDown = function(keyCode){};
scene.onKeyUp = function(keyCode){};
scene.onCleanUp = function(){};
scene.resumeSound = function(){};
scene.onRetrySelected = function(){};
scene.onPause = function(){};
scene.onResume = function(){};
pointerdown = function(event){
if (!scene.paused && scene.isRunning) {
scene.onTouchDown(event.data.global.x, event.data.global.y);
}
};
pointermove = function(event){
var isDrag;
if (!scene.paused && scene.isRunning) {
isDrag = event.data.identifier !== "MOUSE" || event.data.buttons > 0;
scene.onTouchMove(event.data.global.x, event.data.global.y, isDrag);
}
};
pointerup = function(event){
if (!scene.paused && scene.isRunning) {
scene.onTouchUp(event.data.global.x, event.data.global.y);
}
};
scene.cleanup = function(){
scene.onCleanUp();
keyboard.cleanup();
keyboard = undefined;
bg.off('pointerdown', pointerdown);
bg.off('pointermove', pointermove);
bg.off('pointerup', pointerup);
pointerup = undefined;
pointerdown = undefined;
pointermove = undefined;
scene.destroy({
children: true,
texture: false,
baseTexture: false
});
return "baseSceneCleanupDone";
};
keyboard = inc("../keyboard/addListener")({
onKeyUp: function(keyCode){
if (scene.isRunning) {
scene.onKeyUp(keyCode);
}
},
onKeyDown: function(keyCode){
if (scene.isRunning) {
scene.onKeyDown(keyCode);
}
}
});
bg = inc("../sprite/create")({
texture: PIXI.Texture.WHITE,
tint: o.backgroundColor,
anchorX: 0,
anchorY: 0
});
bg.interactive = true;
bg.on('pointerdown', pointerdown);
bg.on('pointermove', pointermove);
bg.on('pointerup', pointerup);
bg.width = scene.sceneWidth;
bg.height = scene.sceneHeight;
scene.addChild(bg);
scene.backgroundSprite = bg;
return scene;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/create.ls
(function(){
return function(stage){
var DEFAULT_TRANSITION_DURATION, sceneManager;
DEFAULT_TRANSITION_DURATION = 0.3;
sceneManager = {};
sceneManager.Transitions = inc("transitions/transitions")();
sceneManager.paused = false;
sceneManager.stack = [];
sceneManager.currentScene = null;
sceneManager.stage = stage;
sceneManager.transition = undefined;
sceneManager.cleanScene = function(scene){
sceneManager.stage.removeChild(scene);
if (scene.cleanup() !== "baseSceneCleanupDone") {
debug("did you overwrite scene.cleanup()? use onCleanUp() instead!");
}
};
sceneManager.cleanup = function(){
sceneManager.cleanStack();
};
sceneManager.cleanStack = function(){
var i$, ref$, len$, scene;
for (i$ = 0, len$ = (ref$ = sceneManager.stack).length; i$ < len$; ++i$) {
scene = ref$[i$];
sceneManager.cleanScene(scene);
}
sceneManager.stack = [];
sceneManager.currentScene = null;
};
sceneManager.showScene = function(scene){
sceneManager.stage.addChild(scene);
};
sceneManager.setScene = function(scene){
sceneManager.cleanStack();
sceneManager.currentScene = scene;
sceneManager.stack = [sceneManager.currentScene];
sceneManager.showScene(scene);
sceneManager.currentScene.isRunning = true;
sceneManager.currentScene.start();
};
sceneManager.pushScene = function(scene, transition, duration){
if (deepEq$(transition, undefined, '===')) {
transition = sceneManager.Transitions.NONE;
duration = 0;
}
if (transition !== sceneManager.Transitions.NONE) {
if (deepEq$(duration, undefined, '===')) {
duration = DEFAULT_TRANSITION_DURATION;
}
}
scene.paused = true;
sceneManager.currentScene.paused = true;
sceneManager.currentScene.isRunning = false;
sceneManager.showScene(scene);
sceneManager.transition = transition({
newScene: scene,
oldScene: sceneManager.currentScene,
duration: duration,
transitionCompleted: function(){
sceneManager.transition = undefined;
sceneManager.stage.removeChild(sceneManager.currentScene);
sceneManager.currentScene = scene;
sceneManager.stack.push(scene);
sceneManager.currentScene.paused = false;
sceneManager.currentScene.isRunning = true;
return sceneManager.currentScene.start();
}
});
};
sceneManager.replaceScene = function(scene, transition, duration){
if (deepEq$(transition, undefined, '===')) {
transition = sceneManager.Transitions.NONE;
duration = 0;
}
if (transition !== sceneManager.Transitions.NONE) {
if (deepEq$(duration, undefined, '===')) {
duration = DEFAULT_TRANSITION_DURATION;
}
}
scene.paused = true;
sceneManager.currentScene.paused = true;
sceneManager.currentScene.isRunning = false;
sceneManager.showScene(scene);
sceneManager.transition = transition({
newScene: scene,
oldScene: sceneManager.currentScene,
duration: duration,
transitionCompleted: function(){
var ref$, ref1$;
sceneManager.transition = undefined;
if ((ref$ = PIXI.actionManager) != null) {
ref$.actions = [];
}
sceneManager.cleanScene(sceneManager.currentScene);
sceneManager.currentScene = scene;
(ref1$ = sceneManager.stack)[ref1$.length - 1] = scene;
sceneManager.currentScene.paused = false;
sceneManager.currentScene.isRunning = true;
return sceneManager.currentScene.start();
}
});
};
sceneManager.popScene = function(transition, duration){
var oldScene;
if (sceneManager.stack.length < 2) {
debug("can't pop scene, stacksize is only " + sceneManager.stack.length);
return;
}
if (deepEq$(transition, undefined, '===')) {
transition = sceneManager.Transitions.NONE;
duration = 0;
}
if (transition !== sceneManager.Transitions.NONE) {
if (deepEq$(duration, undefined, '===')) {
duration = DEFAULT_TRANSITION_DURATION;
}
}
oldScene = sceneManager.stack.pop();
sceneManager.currentScene = sceneManager.stack[sceneManager.stack.length - 1];
sceneManager.stage.addChild(sceneManager.currentScene);
sceneManager.stage.swapChildren(oldScene, sceneManager.currentScene);
oldScene.paused = true;
oldScene.isRunning = false;
sceneManager.currentScene.paused = true;
sceneManager.transition = transition({
newScene: sceneManager.currentScene,
oldScene: oldScene,
duration: duration,
transitionCompleted: function(){
sceneManager.transition = undefined;
sceneManager.cleanScene(oldScene);
sceneManager.currentScene.paused = false;
sceneManager.currentScene.isRunning = true;
return sceneManager.currentScene.start();
}
});
};
sceneManager.pause = function(){
var ref$, ref1$;
sceneManager.paused = true;
if ((ref$ = sceneManager.currentScene) != null) {
ref$.isRunning = false;
}
if ((ref1$ = sceneManager.currentScene) != null) {
ref1$.onPause();
}
};
sceneManager.resume = function(){
var ref$, ref1$;
sceneManager.paused = false;
if ((ref$ = sceneManager.currentScene) != null) {
ref$.isRunning = true;
}
if ((ref1$ = sceneManager.currentScene) != null) {
ref1$.onResume();
}
};
sceneManager.update = function(delta){
var ref$, ref1$;
if (sceneManager.paused) {
return;
}
if (sceneManager.transition != null) {
sceneManager.transition.update(delta);
return;
}
if (!((ref$ = sceneManager.currentScene) != null && ref$.paused)) {
if ((ref1$ = sceneManager.currentScene) != null) {
ref1$.update(delta);
}
}
};
return sceneManager;
};
})();
function deepEq$(x, y, type){
var toString = {}.toString, hasOwnProperty = {}.hasOwnProperty,
has = function (obj, key) { return hasOwnProperty.call(obj, key); };
var first = true;
return eq(x, y, []);
function eq(a, b, stack) {
var className, length, size, result, alength, blength, r, key, ref, sizeB;
if (a == null || b == null) { return a === b; }
if (a.__placeholder__ || b.__placeholder__) { return true; }
if (a === b) { return a !== 0 || 1 / a == 1 / b; }
className = toString.call(a);
if (toString.call(b) != className) { return false; }
switch (className) {
case '[object String]': return a == String(b);
case '[object Number]':
return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
case '[object Date]':
case '[object Boolean]':
return +a == +b;
case '[object RegExp]':
return a.source == b.source &&
a.global == b.global &&
a.multiline == b.multiline &&
a.ignoreCase == b.ignoreCase;
}
if (typeof a != 'object' || typeof b != 'object') { return false; }
length = stack.length;
while (length--) { if (stack[length] == a) { return true; } }
stack.push(a);
size = 0;
result = true;
if (className == '[object Array]') {
alength = a.length;
blength = b.length;
if (first) {
switch (type) {
case '===': result = alength === blength; break;
case '<==': result = alength <= blength; break;
case '<<=': result = alength < blength; break;
}
size = alength;
first = false;
} else {
result = alength === blength;
size = alength;
}
if (result) {
while (size--) {
if (!(result = size in a == size in b && eq(a[size], b[size], stack))){ break; }
}
}
} else {
if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) {
return false;
}
for (key in a) {
if (has(a, key)) {
size++;
if (!(result = has(b, key) && eq(a[key], b[key], stack))) { break; }
}
}
if (result) {
sizeB = 0;
for (key in b) {
if (has(b, key)) { ++sizeB; }
}
if (first) {
if (type === '<<=') {
result = size < sizeB;
} else if (type === '<==') {
result = size <= sizeB
} else {
result = size === sizeB;
}
} else {
first = false;
result = size === sizeB;
}
}
}
stack.pop();
return result;
}
}
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/alphaZoomIn.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.newScene.sceneWidth;
h = o.newScene.sceneHeight;
transition.updateState = function(percentage){
o.newScene.alpha = percentage;
o.newScene.scale.set(1.5 - 0.5 * percentage);
o.newScene.x = (w - o.newScene.sceneWidth * o.newScene.scale.x) / 2;
o.newScene.y = (h - o.newScene.sceneHeight * o.newScene.scale.y) / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/alphaZoomOut.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.oldScene.sceneWidth;
h = o.oldScene.sceneHeight;
transition.updateState = function(percentage){
o.oldScene.alpha = 1 - percentage;
o.oldScene.scale.set(1.5 - 0.5 * (1 - percentage));
o.oldScene.x = (w - o.oldScene.sceneWidth * o.oldScene.scale.x) / 2;
o.oldScene.y = (h - o.oldScene.sceneHeight * o.oldScene.scale.y) / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/baseTransiton.ls
(function(){
return function(o){
var resetScene, prepareScene, transition;
resetScene = function(scene){
scene.rotation = 0;
scene.scale.set(1);
scene.alpha = 1;
scene.pivot.set(0);
scene.x = 0;
scene.y = 0;
scene.removeChild(scene.mask);
scene.mask = null;
};
prepareScene = function(scene){
var mask;
mask = new PIXI.Graphics();
mask.beginFill(0);
mask.drawRect(0, 0, scene.sceneWidth, scene.sceneHeight);
mask.endFill();
scene.addChild(mask);
scene.mask = mask;
};
transition = {};
transition.time = 0;
transition.duration = o.duration;
transition.updateState = function(percentComplete){};
transition.update = function(delta){
var percentComplete;
transition.time += delta;
if (transition.duration === 0) {
percentComplete = 1;
} else {
percentComplete = Math.min(1, transition.time / transition.duration);
}
transition.updateState(percentComplete);
if (percentComplete === 1) {
resetScene(o.newScene);
resetScene(o.oldScene);
o.transitionCompleted();
}
};
transition.prepare = function(){
prepareScene(o.newScene);
prepareScene(o.oldScene);
transition.updateState(0);
};
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fadeIn.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.alpha = percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fadeOut.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.alpha = 1 - percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fadeOutIn.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.alpha = 1 - Math.min(1, 2 * percentage);
o.newScene.alpha = Math.max(0, 2 * (percentage - 0.5));
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fromBottom.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.y = o.newScene.sceneHeight * (1 - percentage);
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fromLeft.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.x = -o.newScene.sceneWidth * (1 - percentage);
o.oldScene.x = o.oldScene.sceneWidth * percentage / 4;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fromRight.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.x = o.newScene.sceneWidth * (1 - percentage);
o.oldScene.x = -o.oldScene.sceneWidth * percentage / 4;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/fromTop.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.y = -o.newScene.sceneHeight * (1 - percentage);
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/popShrinkGrow.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.newScene.sceneWidth;
h = o.newScene.sceneHeight;
transition.updateState = function(percentage){
o.oldScene.scale.set(1 - percentage);
o.newScene.scale.set(percentage);
o.oldScene.y = (h - o.oldScene.sceneHeight * o.oldScene.scale.y) / 2;
o.newScene.y = (h - o.newScene.sceneHeight * o.newScene.scale.y) / 2;
o.newScene.x = (w - o.newScene.sceneWidth * o.newScene.scale.x) / 2 - (1 - percentage) * w / 4;
o.oldScene.x = (w - o.oldScene.sceneWidth * o.oldScene.scale.x) / 2 + w / 4 + (1 - percentage) * w / 4;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/pushShrinkGrow.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.newScene.sceneWidth;
h = o.newScene.sceneHeight;
transition.updateState = function(percentage){
o.oldScene.scale.set(1 - percentage);
o.newScene.scale.set(percentage);
o.oldScene.y = (h - o.oldScene.sceneHeight * o.oldScene.scale.y) / 2;
o.newScene.y = (h - o.newScene.sceneHeight * o.newScene.scale.y) / 2;
o.oldScene.x = (w - o.oldScene.sceneWidth * o.oldScene.scale.x) / 2 - percentage * w / 4;
o.newScene.x = (w - o.newScene.sceneWidth * o.newScene.scale.x) / 2 + w / 4 - percentage * w / 4;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/rotateZoomIn.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.newScene.sceneWidth;
h = o.newScene.sceneHeight;
o.newScene.pivot.set(w / 2, h / 2);
transition.updateState = function(percentage){
o.newScene.scale.set(percentage);
o.newScene.rotation = -percentage * 4 * Math.PI;
o.newScene.x = w / 2;
o.newScene.y = h / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/rotateZoomOut.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.oldScene.sceneWidth;
h = o.oldScene.sceneHeight;
o.oldScene.pivot.set(w / 2, h / 2);
transition.updateState = function(percentage){
o.oldScene.scale.set(1 - percentage);
o.oldScene.rotation = percentage * 4 * Math.PI;
o.oldScene.x = w / 2;
o.oldScene.y = h / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideFromBottom.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.y = o.newScene.sceneHeight * (1 - percentage);
o.oldScene.y = -o.oldScene.sceneHeight * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideFromLeft.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.x = -o.newScene.sceneWidth * (1 - percentage);
o.oldScene.x = o.oldScene.sceneWidth * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideFromRight.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.x = o.newScene.sceneWidth * (1 - percentage);
o.oldScene.x = -o.oldScene.sceneWidth * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideFromTop.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.newScene.y = -o.newScene.sceneHeight * (1 - percentage);
o.oldScene.y = o.oldScene.sceneHeight * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideToBottom.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.y = o.oldScene.sceneHeight * percentage;
o.newScene.y = -o.newScene.sceneHeight * (1 - percentage);
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideToLeft.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.x = -o.oldScene.sceneWidth * percentage;
o.newScene.x = o.newScene.sceneWidth - o.newScene.sceneWidth * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideToRight.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.x = o.oldScene.sceneWidth * percentage;
o.newScene.x = -o.newScene.sceneWidth + o.newScene.sceneWidth * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/slideToTop.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.y = -o.oldScene.sceneHeight * percentage;
o.newScene.y = o.oldScene.sceneHeight * (1 - percentage);
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/toBottom.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.y = o.oldScene.sceneHeight * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/toLeft.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.x = -o.oldScene.sceneWidth * percentage;
o.newScene.x = o.newScene.sceneWidth / 3 - o.newScene.sceneWidth * percentage / 3;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/toRight.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.x = o.oldScene.sceneWidth * percentage;
o.newScene.x = -o.newScene.sceneWidth / 3 + o.newScene.sceneWidth * percentage / 3;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/toTop.ls
(function(){
return function(o){
var transition;
transition = inc("baseTransiton")(o);
transition.updateState = function(percentage){
o.oldScene.y = -o.oldScene.sceneHeight * percentage;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/transitions.ls
(function(){
return function(){
var Transitions;
return Transitions = {
NONE: inc("baseTransiton"),
PUSH: {
FROM_RIGHT: inc("fromRight"),
FROM_LEFT: inc("fromLeft"),
FROM_TOP: inc("fromTop"),
FROM_BOTTOM: inc("fromBottom"),
FADE_IN: inc("fadeIn"),
FADE_OUT_IN: inc("fadeOutIn"),
ZOOM_IN: inc("zoomIn"),
ALPHA_ZOOM_IN: inc("alphaZoomIn"),
SHRINK_GROW_PUSH: inc("pushShrinkGrow"),
ROTATE_ZOOM_IN: inc("rotateZoomIn"),
SLIDE_FROM_LEFT: inc("slideFromLeft"),
SLIDE_FROM_RIGHT: inc("slideFromRight"),
SLIDE_FROM_TOP: inc("slideFromTop"),
SLIDE_FROM_BOTTOM: inc("slideFromBottom")
},
POP: {
TO_RIGHT: inc("toRight"),
TO_LEFT: inc("toLeft"),
TO_TOP: inc("toTop"),
TO_BOTTOM: inc("toBottom"),
FADE_OUT: inc("fadeOut"),
FADE_OUT_IN: inc("fadeOutIn"),
ZOOM_OUT: inc("zoomOut"),
ALPHA_ZOOM_OUT: inc("alphaZoomOut"),
SHRINK_GROW_POP: inc("popShrinkGrow"),
ROTATE_ZOOM_OUT: inc("rotateZoomOut"),
SLIDE_TO_LEFT: inc("slideToLeft"),
SLIDE_TO_RIGHT: inc("slideToRight"),
SLIDE_TO_BOTTOM: inc("slideToBottom"),
SLIDE_TO_TOP: inc("slideToTop")
}
};
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/zoomIn.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.newScene.sceneWidth;
h = o.newScene.sceneHeight;
transition.updateState = function(percentage){
o.newScene.scale.set(percentage);
o.newScene.x = (w - o.newScene.sceneWidth * o.newScene.scale.x) / 2;
o.newScene.y = (h - o.newScene.sceneHeight * o.newScene.scale.y) / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/sceneManager/transitions/zoomOut.ls
(function(){
return function(o){
var transition, w, h;
transition = inc("baseTransiton")(o);
w = o.oldScene.sceneWidth;
h = o.oldScene.sceneHeight;
transition.updateState = function(percentage){
o.oldScene.scale.set(1 - percentage);
o.oldScene.x = (w - o.oldScene.sceneWidth * o.oldScene.scale.x) / 2;
o.oldScene.y = (h - o.oldScene.sceneHeight * o.oldScene.scale.y) / 2;
};
transition.prepare();
return transition;
};
})();
pages/games/00_shared/pixiGame/pixi/spineSprite/create.ls
(function(){
var cache;
cache = {};
return function(o){
var calculateScale;
calculateScale = function(){
var json, width, height;
json = JSON.parse(inc(o.projectFolder + "/skeleton.json"));
width = json.skeleton.width;
height = json.skeleton.height;
return Math.min(o.width / width, o.height / height);
};
o.scale = calculateScale();
return inc("../createAtlas/create")(o, function(){
var spine;
spine = inc("/lib/gui/pixiSpineCanvas/createSpine/create")(o);
if (o.skin) {
spine.skeleton.setSkinByName(o.skin);
}
spine.state.clearTracks();
spine.skeleton.setToSetupPose();
spine.autoUpdate = true;
spine.update(0);
spine.alive = true;
spine.dx = 0;
spine.dy = 0;
return o.onDone(spine);
});
};
})();
pages/games/00_shared/pixiGame/pixi/spineTextureConverter/convert.ls
(function(){
return function(o){
var fps, texture, calculateSize, size, textures, i$, ref$, len$, anim, animEnd, numFrames, frameLength, animTextures, j$, to$, frame, text, obj;
fps = o.fps || 10;
texture = function(renderer, spine, size){
var resolution, brt, rt;
resolution = window.devicePixelRatio;
brt = new PIXI.BaseRenderTexture(size.width, size.height, PIXI.SCALE_MODES.LINEAR, resolution);
rt = new PIXI.RenderTexture(brt);
spine.x = size.width / 2;
spine.y = size.height;
renderer.render(spine, rt);
return rt;
};
calculateSize = function(){
var width, height, i$, ref$, len$, anim, animEnd, numFrames, frameLength, j$, to$, frame, size;
width = 0;
height = 0;
for (i$ = 0, len$ = (ref$ = o.animations).length; i$ < len$; ++i$) {
anim = ref$[i$];
o.spine.state.setAnimation(0, anim, false);
animEnd = o.spine.state.tracks[0].animationEnd;
numFrames = Math.floor(animEnd / (1 / fps));
frameLength = animEnd / numFrames;
for (j$ = 0, to$ = numFrames - 1; j$ <= to$; ++j$) {
frame = j$;
o.spine.state.tracks[0].time = frame * frameLength;
width = Math.max(width, o.spine.width);
height = Math.max(height, o.spine.height);
}
}
return size = {
width: width,
height: height
};
};
size = calculateSize();
textures = {};
for (i$ = 0, len$ = (ref$ = o.animations).length; i$ < len$; ++i$) {
anim = ref$[i$];
o.spine.state.setAnimation(0, anim, false);
animEnd = o.spine.state.tracks[0].animationEnd;
numFrames = Math.floor(animEnd / (1 / fps));
frameLength = animEnd / numFrames;
animTextures = [];
for (j$ = 0, to$ = numFrames - 1; j$ <= to$; ++j$) {
frame = j$;
o.spine.state.tracks[0].time = frame * frameLength;
text = texture(o.renderer, o.spine, size);
animTextures.push(text);
}
textures[anim] = {
time: animEnd,
maxFrames: numFrames,
frames: animTextures
};
}
obj = {
textures: textures,
size: size
};
return o.callback(obj);
};
})();
pages/games/00_shared/pixiGame/pixi/sprite/create.ls
(function(){
return function(o){
var sprite, ax, ref$, ay;
sprite = PIXI.Sprite.from(o.texture);
sprite.width = o.texture.width / window.devicePixelRatio;
sprite.height = o.texture.height / window.devicePixelRatio;
ax = (ref$ = o.anchorX) != null ? ref$ : 0.5;
ay = (ref$ = o.anchorY) != null ? ref$ : 0.5;
sprite.anchor.set(ax, ay);
sprite.x = (ref$ = o.x) != null ? ref$ : 0;
sprite.y = (ref$ = o.y) != null ? ref$ : 0;
sprite.dx = (ref$ = o.dx) != null ? ref$ : 0;
sprite.dy = (ref$ = o.dy) != null ? ref$ : 0;
if (o.tint != null) {
sprite.tint = o.tint;
}
sprite.alive = true;
sprite.initialScale = {
x: sprite.scale.x,
y: sprite.scale.y
};
return sprite;
};
})();
pages/games/00_shared/pixiGame/pixi/spriteCache/cache.ls
(function(){
return function(o){
var caches, k, v;
caches = {};
for (k in o) {
v = o[k];
caches[k] = v.strategy === "failing"
? inc("cacheFailing/cache")(v)
: v.strategy === "aggressive" ? inc("cacheAgressive/cache")(v) : void 8;
}
caches.get = function(key, construct){
if (caches[key]) {
return caches[key].get(construct);
} else {
return debug("no cache found '" + key + "'");
}
};
return caches;
};
})();
pages/games/00_shared/pixiGame/pixi/spriteCache/cacheAgressive/cache.ls
(function(){
return function(o){
var cache, maxCacheSize, currentIndex;
cache = [];
maxCacheSize = o.maxSize;
currentIndex = 0;
return {
get: function(construct){
var c;
c = cache[currentIndex];
if (!c) {
c = construct();
cache[currentIndex] = c;
}
currentIndex = (currentIndex + 1) % maxCacheSize;
return c;
}
};
};
})();
pages/games/00_shared/pixiGame/pixi/spriteCache/cacheFailing/cache.ls
(function(){
return function(o){
var cache, maxCacheSize, currentIndex;
cache = [];
maxCacheSize = o.maxSize;
currentIndex = 0;
return {
get: function(construct){
var c;
c = cache[currentIndex];
if (!c) {
c = construct();
cache[currentIndex] = c;
} else if (c.alive) {
return undefined;
}
currentIndex = (currentIndex + 1) % maxCacheSize;
return c;
}
};
};
})();
pages/games/00_shared/pixiGame/pixi/svgTextureLoader/load.ls
(function(){
return function(o){
var svgs, key, ref$, data, total, loaded, textures, resolution, load, onTextureUpdate, done;
svgs = {};
for (key in ref$ = o.svgs) {
data = ref$[key];
svgs[key] = {
svg: inc(data.svg),
width: data.width,
height: data.height
};
}
total = _.keys(svgs).length;
loaded = 0;
textures = {};
resolution = o.renderer.resolution;
load = function(){
var key, ref$, svgData, div, svg, scale, src, texture, results$ = [];
for (key in ref$ = svgs) {
svgData = ref$[key];
div = Div();
div.innerHTML = svgData.svg;
svg = div.firstChild;
scale = Math.min(svgData.width / +svg.attr("width"), svgData.height / +svg.attr("height"));
svg.attr({
width: Math.max(1, +svg.attr("width") * resolution * scale),
height: Math.max(1, +svg.attr("height") * resolution * scale)
});
svg = svg.outerHTML;
src = "data:image/svg+xml;base64," + window.btoa(svg);
texture = PIXI.Texture.fromImage(src);
textures[key] = texture;
if (texture.baseTexture.hasLoaded) {
results$.push(onTextureUpdate());
} else {
results$.push(texture.on("update", onTextureUpdate));
}
}
return results$;
};
onTextureUpdate = function(texture){
if (texture != null) {
texture.off("update", onTextureUpdate);
}
loaded = loaded + 1;
if (loaded === total) {
return done();
}
};
done = function(){
return o.callback(textures);
};
return load();
};
})();
pages/games/00_shared/topbarAntonPlus/_t.ls
(function(){
return {
continueToAntonPlus: {
de: "Weiter zu ANTON-Plus",
en: "Continue to ANTON Plus",
fr: "Découvrir ANTON-Plus",
es: "Descubrir ANTON-Plus",
pt: "Descobrir ANTON-Plus"
},
antonPlusPromoText: {
de: "Wir entwickeln gerne für euch neue spannende Spiele, nur kostet uns das auch jedes Mal Geld.
In ANTON möchten wir aber keine nervige Werbung anzeigen.
Bitte seid also fair und unterstützt uns mit ANTON-Plus.
",
en: "We love to develop exciting new games for you, but this also costs us money.
We don't want to show any annoying ads in the ANTON app.
So please be fair and support us by choosing ANTON Plus.
",
fr: "Nous adorons développer de nouveaux jeux pour toi, mais ça a un coût.
Au lieu de te montrer des publicités dans notre appli, nous te proposons de nous soutenir en choisissant ANTON-Plus.
",
es: "Nos encanta desarrollar juegos nuevos para ti, pero cada juego tiene un costo.
En lugar de mostrar molestos anuncios en nuestra aplicación, te proponemos que nos apoyes eligiendo ANTON-Plus.
",
pt: "Nós adoramos desenvolver novos jogos divertidos para você, mas isso também tem um custo para nós.
Ao invés de mostrarmos anúncios chatos aqui no ANTON,
propomos à você que nos apoie escolhendo ANTON-Plus.
" + T("noContentTeacherHint") : void 8);
};
})();
pages/group/group/_shared/contentDiv/onNewLogEvents/on.ls
(function(){
return function(page){
var eventNames, i$, len$, name;
eventNames = ["pinGroupBlock", "pinGroupLearnList", "setGroupMessage"];
for (i$ = 0, len$ = eventNames.length; i$ < len$; ++i$) {
name = eventNames[i$];
page.addClass("onNewLogEvents_" + name);
}
page.addClass("onNewLogEvents_deleteEvent");
return page.onNewLogEvents = function(events){
var groupCode;
groupCode = page.groupDescription.groupCode;
events = _.filter(events, function(e){
return e.logId === groupCode && (in$(e.event, eventNames) || (e.event === "deleteEvent" && in$(e.target.event, eventNames)));
});
if (events.length > 0) {
return startPage({
history: 0
});
}
};
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/group/group/_shared/contentDiv/weeks/week/rows/rows.ls
(function(){
return function(page, week){
var r;
return Div(week.invisible ? {
opacity: 0.4
} : void 8).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = week.rows).length; i$ < len$; ++i$) {
r = ref$[i$];
if (r.type === "block") {
results$.push(inc("/pages/content/_shared/blockRow/blockRow")({
context: page.context,
block: r.block,
weekStartAt: week.weekStartAt,
unselectedLevels: r.unselectedLevels
}));
} else if (r.type === "learnList") {
results$.push(inc("/../app01-learn-list/pages/_shared/learnListRow/row")({
learnListDescription: r.learnListDescription,
weekStartAt: week.weekStartAt,
context: page.context,
groupCode: page.groupDescription.groupCode
}));
}
}
return results$;
}()));
};
})();
pages/group/group/_shared/contentDiv/weeks/week/title/title.ls
(function(){
var currentYear;
currentYear = new Date().getFullYear() + "";
return function(week){
var label, year;
label = week.label.extra || week.label.startLabel;
year = week.weekStartAt.substr(0, 4);
if (year !== currentYear && week.label.extra == null) {
label += " " + year;
}
return inc("/lib/gui/sectionTitle/sectionTitle")(label).css(week.invisible ? {
opacity: 0.4
} : void 8).prepend(week.invisible ? SvgIcon({
svg: path("/lib/svg/icon/hide.svg"),
color: Color.grey[600]
}).css({
marginRight: "0.4em",
verticalAlign: "-0.2em"
}) : void 8);
};
})();
pages/group/group/_shared/contentDiv/weeks/week/week.ls
(function(){
return function(page, week){
return Div().append(inc("title/title")(week), inc("rows/rows")(page, week));
};
})();
pages/group/group/_shared/contentDiv/weeks/weeks.ls
(function(){
return function(page){
var i$, ref$, len$, week, results$ = [];
for (i$ = 0, len$ = (ref$ = page.weeks).length; i$ < len$; ++i$) {
week = ref$[i$];
results$.push(inc("week/week")(page, week));
}
return results$;
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/calcWeeks/calc.ls
(function(){
return function(page, groupContent, groupCode){
var weeks, i$, ref$, len$, row, weekStartAt, weekLabel, res$, week, index;
weeks = {};
for (i$ = 0, len$ = (ref$ = groupContent.rows).length; i$ < len$; ++i$) {
row = ref$[i$];
weekStartAt = row.weekStartAt;
weekLabel = inc("/lib/util/calcWeekLabel/calc")(weekStartAt);
weeks[weekStartAt] == null && (weeks[weekStartAt] = {
weekStartAt: weekStartAt,
label: weekLabel,
rows: []
});
weeks[weekStartAt].rows.push(row);
}
weeks = inc("filterWeeks/filter")(page, weeks, groupCode);
res$ = [];
for (i$ in weeks) {
week = weeks[i$];
res$.push(week);
}
weeks = res$;
for (i$ = 0, len$ = weeks.length; i$ < len$; ++i$) {
index = i$;
week = weeks[i$];
week.index = index;
}
return weeks;
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/calcWeeks/filterWeeks/filter.ls
(function(){
return function(page, weeks, groupCode){
var pinsHidden, thisWeek, showWeek, weekStartAt, data;
pinsHidden = inc("/data/group/calcPinsHidden/calc")(groupCode);
if (!pinsHidden) {
return weeks;
}
thisWeek = inc("/lib/util/calcWeekStartAt/calc")();
showWeek = function(weekStartAt){
return weekStartAt === thisWeek || (weekStartAt > thisWeek && !pinsHidden.future) || (weekStartAt < thisWeek && !pinsHidden.past);
};
for (weekStartAt in weeks) {
data = weeks[weekStartAt];
if (!showWeek(weekStartAt)) {
if (page.context === "groupPupil") {
delete weeks[weekStartAt];
} else {
data.invisible = true;
}
}
}
return weeks;
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/load.ls
(function(){
return function(p){
var page, groupCode, loadGroupContent, calcWeeks, loadLevelsReport, finish;
page = p.page;
groupCode = page.groupDescription.groupCode;
loadGroupContent = function(){
return inc("/lib/util/loadGroupContent/load")({
groupCode: groupCode,
filterPublicId: p.filterPublicId,
onLoaded: calcWeeks
});
};
calcWeeks = function(groupContent){
page.weeks = inc("calcWeeks/calc")(page, groupContent, groupCode);
if (p.skipLevelReport) {
return finish();
} else {
return loadLevelsReport(groupContent);
}
};
loadLevelsReport = function(groupContent){
if (app.currentPage !== page) {
return;
}
return inc("loadLevelsReport/load")({
groupContent: groupContent,
onOffline: p.onOffline,
onError: function(error){
debug(error);
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, true);
},
onLoaded: function(levelsReport){
page.levelsReport = levelsReport;
return finish();
}
});
};
finish = function(){
if (page === app.currentPage) {
return p.onLoaded(page.weeks, page.levelsReport);
}
};
return loadGroupContent();
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/loadLevelsReport/calcLevelPuids/calc.ls
(function(){
return function(groupContent){
var blockRows, blockLevelPuids, r, puids, learnListRows, learnListPuids, levelPuids;
blockRows = _.filter(groupContent.rows, {
type: "block"
});
blockLevelPuids = _.flatten((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = blockRows).length; i$ < len$; ++i$) {
r = ref$[i$];
results$.push(puids = _.map(r.block.levels, "puid"));
}
return results$;
}()));
learnListRows = _.filter(groupContent.rows, {
type: "learnList"
});
learnListPuids = _.flatten((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = learnListRows).length; i$ < len$; ++i$) {
r = ref$[i$];
results$.push(puids = inc("calcLearnListPuids/calc")(r.learnListDescription));
}
return results$;
}()));
levelPuids = _.concat(blockLevelPuids, learnListPuids);
return _.uniq(levelPuids);
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/loadLevelsReport/calcLevelPuids/calcLearnListPuids/calc.ls
(function(){
return function(learnListDescription){
var ld, puids, res$, i$, ref$, len$, level, lresult$, j$, ref1$, len1$, sublevel;
ld = inc("/../app01-learn-list/data/calcLearnListDescription/calc")(learnListDescription);
res$ = [];
for (i$ = 0, len$ = (ref$ = ld.levels).length; i$ < len$; ++i$) {
level = ref$[i$];
lresult$ = [];
for (j$ = 0, len1$ = (ref1$ = ld.sublevels).length; j$ < len1$; ++j$) {
sublevel = ref1$[j$];
lresult$.push("/learnList/" + ld.listCode + ("/" + level.trainer) + ("/sublevel-" + sublevel.id));
}
res$.push(lresult$);
}
puids = res$;
return puids = _.flatten(puids);
};
})();
pages/group/group/_shared/loadWeeksAndLevelsReport/loadLevelsReport/load.ls
(function(){
return function(p){
var levelPuids;
levelPuids = inc("calcLevelPuids/calc")(p.groupContent);
return inc("/data/group/getLevelsReport/get")({
levelPuids: levelPuids,
onLoaded: p.onLoaded,
onOffline: p.onOffline,
onError: p.onError
});
};
})();
pages/group/group/_t.ls
(function(){
return {
errorMaxMembersReached: {
de: "Diese Gruppe hat die maximale Anzahl von 100 Mitgliedern bereits erreicht.",
en_gb: "This group has already reached the maximum of 100 members.",
en: "This group has already reached the maximum number of 100 members.",
fr: "Ce groupe a déjà atteint le nombre maximum de 100 membres.",
es: "Este grupo ya ha alcanzado el número máximo de 100 miembros.",
pt: "Este grupo já atingiu o número máximo de 100 membros."
}
};
})();
pages/group/group/_topbar/_t.ls
(function(){
return {
groups: {
de: "Gruppen",
en: "Groups",
fr: "Groupes",
es: "Grupos",
pt: "Grupos"
},
createFamilyGroup: {
de: "Familiengruppe erstellen",
en: "Create a family group",
fr: "Créer un groupe familial",
es: "Crear un grupo familiar",
pt: "Criar um grupo familiar"
},
createNewGroup: {
de: "Neue Gruppe erstellen",
en: "Create a new group",
fr: "Créer un nouveau groupe",
es: "Crear un grupo nuevo",
pt: "Criar um novo grupo"
},
joinGroupWithCode: {
de: "Gruppe beitreten mit Code",
en: "Join group with code",
fr: "Rejoindre un groupe",
es: "Unirse a un grupo con clave",
pt: "Entrar num grupo com código"
},
active: {
de: "Aktiv:",
en: "Active:",
fr: "Actif :",
es: "Activo:",
pt: "Ativo:"
},
finished: {
de: "Beendet:",
en: "Finished:",
fr: "Terminé :",
es: "Terminado:",
pt: "Finalizado:"
},
createCodesForPupilsMembers: {
de: "Klicke auf +Neu, um für jede/n Schüler/in einen Schüler-Code vorzubereiten.",
en_gb: "Select +New to create a code for each pupil.",
en: "Select +New to create a code for each student.",
fr: "Appuie sur +Nouveau pour créer un code pour chaque élève.",
es: "Presiona +Nuevo para generar una clave para cada estudiante.",
pt: "Clique em +Novo para gerar um código para cada aluno(a)."
},
createCodesForPupilsSettings: {
de: "Gehe in den Reiter Mitglieder und klicke dort auf +Neu, um für jede/n Schüler/in einen Schüler-Code vorzubereiten.",
en_gb: "Go to the Members tab and select +New to create a code for each pupil.",
en: "Go to the Members tab and select +New to create a code for each student.",
fr: "Va à l'onglet Membres et appuie sur +Nouveau pour créer un code pour chaque élève.",
es: "Abre la pestaña de Miembros y selecciona +Nuevo para crear una clave para cada estudiante.",
pt: "Abra a aba Membros e selecione +Novo para gerar um código para cada aluno(a)."
},
printAndDistributeCodes: {
de: "Drucke die Schüler-Codes aus und teile jedem/r Schüler/in ausschließlich den für sie/ihn angelegten Code mit.",
en_gb: "Print out the codes and give each pupil their personal code.",
en: "Print out the codes and give each student their individualized code.",
fr: "Imprime les codes des élèves pour donner à chaque élève son code individuel.",
es: "Imprime las claves y repártele a cada estudiante la clave individual que le corresponde.",
pt: "Imprima os códigos de cada aluno(a) e distribua para cada um(a) seu código correspondente."
},
twoDifferentCases: {
de: "Es werden zwei Fälle unterschieden:",
en: "One of two cases will apply:",
fr: "Deux situations sont possibles :",
es: "Existen dos casos posibles:",
pt: "Existem dois casos possíveis:"
},
studentNotGroupMember: {
de: "Schüler/in möchte ein neues ANTON-Nutzerkonto erstellen:",
en_gb: "The pupil would like to create a new ANTON account:",
en: "The student would like to create a new ANTON account:",
fr: "L'élève veut créer un nouveau compte ANTON :",
es: "El o la estudiante desea crear una nueva cuenta en ANTON:",
pt: "O(a) aluno(a) deseja criar uma nova conta em ANTON:"
},
studentNotGroupMember1: {
de: "Der Schüler-Code kann auf der Startseite von ANTON als Anmelde-Code verwendet werden.",
en_gb: "The pupil’s code can be used as a login code on the ANTON home page.",
en: "The student's code can be used as a login code on the ANTON home page.",
fr: "L'élève peut utiliser son code pour se connecter à partir de la page d'accueil ANTON.",
es: "La clave proporcionada puede usarse como clave de acceso en la página de inicio de ANTON.",
pt: "O código-alunos pode ser utilizado como login na página inicial de ANTON"
},
studentNotGroupMember2: {
de: "Das erstellte Nutzerkonto ist automatisch Teil der Gruppe.",
en_gb: "The created account will be automatically added to the group.",
en: "The created account will be automatically added to the group.",
fr: "Le compte créé sera automatiquement ajouté à ce groupe.",
es: "La cuenta creada será automáticamente parte del grupo.",
pt: "A conta criada será automaticamente adicionada ao grupo."
},
alreadyAntonUser: {
de: "Schüler/in möchte mit einem bestehenden ANTON-Nutzerkonto der Gruppe beitreten:",
en_gb: "The pupil would like to join the group with an existing ANTON account:",
en: "The student would like to join the group with an existing ANTON account:",
fr: "L'élève veut rejoindre le groupe avec un compte ANTON existant :",
es: "El o la estudiante quiere unirse al grupo con una cuenta de ANTON existente:",
pt: "O(a) aluno(a) deseja entrar no grupo com uma conta ANTON já existente:"
},
alreadyAntonUser1: {
de: "Der/die Schüler/in meldet sich mit dem bereits bestehenden ANTON-Nutzerkonto normal bei ANTON an.",
en_gb: "The pupil should log into ANTON as normal with their existing ANTON account.",
en: "The student should log into ANTON as normal with their existing ANTON account.",
fr: "L'élève doit se connecter normalement à son compte ANTON existant.",
es: "El o la estudiante debe iniciar sesión en ANTON con su cuenta existente de forma regular.",
pt: "Cada aluno(a) efetua login normalmente com sua conta ANTON já existente."
},
alreadyAntonUser2: {
de: "Der/die Schüler/in klickt im Reiter Gruppen auf Gruppe beitreten mit Code> und gibt dort den Schüler-Code ein.",
en_gb: "The pupil should select Join Group with Code in the Groups tab and enter their code there.",
en: "The student should select Join Group with Code in the Groups tab and enter their code there.",
fr: "L'élève doit aller dans Groupes, appuyer sur Rejoindre un groupe dans le menu et entrer son code d'élève.",
es: "El o la estudiante debe seleccionar Unirse a un grupo con clave en la pestaña de Grupos e ingresar la clave proporcionada.",
pt: "O(a) aluno(a) deve selecionar Grupos, em seguida entrar num grupo com código e digitar seu código-alunos."
},
alreadyAntonUser3: {
de: "Jetzt ist das bestehende ANTON-Nutzerkonto Teil der Gruppe.",
en: "Now the existing ANTON account is part of the group.",
fr: "Le compte ANTON existant fait ainsi partie du groupe.",
es: "A partir de eso momento la cuenta será integrada al grupo.",
pt: "A conta de usuário ANTON agora faz parte do grupo."
},
alreadyAntonUser4: {
de: "Der Schüler-Code ist nun ein weiterer Anmelde-Code, der auch zur Anmeldung bei ANTON benutzt werden kann.",
en_gb: "The pupil’s code is now also a login code that can also be used to log into ANTON.",
en: "The student's code is now also a login code that can also be used to log into ANTON.",
fr: "Le code d'élève est maintenant un code de connexion supplémentaire qui peut aussi être utilisé pour se connecter à ANTON.",
es: "La clave proporcionada se puede utilizar a partir de entonces para iniciar sesión en ANTON.",
pt: "O código-alunos é agora mais um código de login, que também poderá ser usado para fazer login no ANTON."
},
content: {
de: "Inhalte",
en: "Content",
fr: "Contenu",
es: "Contenidos",
pt: "Conteúdos"
},
members: {
de: "Mitglieder",
en: "Members",
fr: "Membres",
es: "Miembros",
pt: "Membros"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
switchGroup: {
de: "Gruppe wechseln",
en: "Switch group",
fr: "Changer de groupe",
es: "Cambiar de grupo",
pt: "Trocar de grupo"
},
chat: {
de: "Chat",
en: "Chat",
fr: "Chat",
es: "Chat",
pt: "Chat"
}
};
})();
pages/group/group/_topbar/menu/header/closeIcon/icon.ls
(function(){
return function(p){
var that;
return SvgIcon({
svg: path("/lib/svg/icon/close-small.svg"),
color: Color.grey[700]
}).css({
position: "absolute",
right: "0.5em"
}).tap({
up: (that = body.findFirst(".mainMenu")) ? function(){
return that.o.close({
move: true
});
} : void 8,
tapZone: "2em",
animation: "none"
});
};
})();
pages/group/group/_topbar/menu/header/header.ls
(function(){
return function(o){
return Div({
height: "7.5em",
marginTop: "-5em",
display: "flex",
backgroundColor: Color.grey[150],
justifyContent: "flex-start",
alignItems: "flex-end",
padding: "0 0 0.7em 0.8em",
borderBottom: "1px solid " + Color.grey[250]
}).html(inc("icon/icon")(), inc("title/title")(), inc("closeIcon/icon")());
};
})();
pages/group/group/_topbar/menu/header/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/group.svg"),
color: Color.grey[700]
}).addClass("safeAreaMarginLeft");
};
})();
pages/group/group/_topbar/menu/header/title/title.ls
(function(){
return function(){
return Div({
marginLeft: "0.5em",
color: Color.grey[800],
marginBottom: "-0.1em"
}).html(T("groups"));
};
})();
pages/group/group/_topbar/menu/items/calcGroupDescriptions/calc.ls
(function(){
return function(){
var groupDescriptions;
return groupDescriptions = _.orderBy(inc("/data/group/calcGroupDescriptions/calc")(), "lastViewedAt", "desc");
};
})();
pages/group/group/_topbar/menu/items/itemCreateFamilyGroup/calcHasFamilyGroup/calc.ls
(function(){
return function(groupDescriptions){
var i$, len$, g;
for (i$ = 0, len$ = groupDescriptions.length; i$ < len$; ++i$) {
g = groupDescriptions[i$];
if (g.type === "family") {
return true;
}
}
};
})();
pages/group/group/_topbar/menu/items/itemCreateFamilyGroup/item.ls
(function(){
return function(groupDescriptions){
if (inc("calcHasFamilyGroup/calc")(groupDescriptions)) {
return;
}
return {
label: T("createFamilyGroup"),
selected: false,
icon: path("/lib/svg/shape/plus.svg"),
click: function(o){
o.close();
return startPage({
path: path("/pages/group/group/other/familyGroupCreate/page"),
animation: "slideUp"
});
}
};
};
})();
pages/group/group/_topbar/menu/items/itemCreateGroup/item.ls
(function(){
return function(o){
return {
label: T("createNewGroup"),
selected: false,
icon: path("/lib/svg/shape/plus.svg"),
click: function(o){
o.close();
return startPage({
path: path("/pages/group/group/other/createGroup/01_name/page"),
animation: "slideUp"
});
}
};
};
})();
pages/group/group/_topbar/menu/items/itemGroup/item.ls
(function(){
return function(gd){
var currentGroupCode, item, ref$;
currentGroupCode = inc("/data/group/calcCurrentGroupCode/calc")();
return item = {
label: gd.name,
selected: gd.groupCode === currentGroupCode && _.includes(app.currentPagePath, "group"),
icon: gd.type === "family"
? path("/lib/svg/shape/home.svg")
: path("/lib/svg/shape/group.svg"),
subicon: gd != null && ((ref$ = gd.userRoles) != null && ref$.admin) ? path("/lib/svg/shape/gear.svg") : void 8,
click: function(o){
o.close();
inc("/data/group/setCurrentGroup/set")(gd.groupCode);
return inc("/pages/group/group/start")({
history: 0
});
}
};
};
})();
pages/group/group/_topbar/menu/items/itemJoinGroup/item.ls
(function(){
return function(o){
return {
label: T("joinGroupWithCode"),
selected: false,
icon: path("/lib/svg/shape/plus.svg"),
click: function(o){
o.close();
return startPage({
path: path("/pages/group/group/other/joinGroupWithCode/01_code/page"),
animation: "slideUp"
});
}
};
};
})();
pages/group/group/_topbar/menu/items/items.ls
(function(){
return function(o){
var gds, items;
gds = inc("calcGroupDescriptions/calc")();
gds = _.orderBy(gds, "name");
return items = _.concat(inc("/data/user/isTeacher/get")() ? inc("itemCreateGroup/item")() : void 8, inc("itemJoinGroup/item")(), inc("itemCreateFamilyGroup/item")(gds), {
rowType: "line"
}, _.find(gds, {
isActive: false
})
? inc("itemsActiveAndEnded/items")(gds)
: inc("itemsActiveOnly/items")(gds));
};
})();
pages/group/group/_topbar/menu/items/itemsActiveAndEnded/items.ls
(function(){
return function(groupDescriptions){
var items, d;
return items = _.concat({
rowType: "label",
label: T("active")
}, (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = _.filter(groupDescriptions, {
isActive: true
})).length; i$ < len$; ++i$) {
d = ref$[i$];
results$.push(inc("../itemGroup/item")(d));
}
return results$;
}()), {
rowType: "label",
label: T("finished")
}, (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = _.filter(groupDescriptions, {
isActive: false
})).length; i$ < len$; ++i$) {
d = ref$[i$];
results$.push(inc("../itemGroup/item")(d));
}
return results$;
}()));
};
})();
pages/group/group/_topbar/menu/items/itemsActiveOnly/items.ls
(function(){
return function(groupDescriptions){
var i$, len$, d, results$ = [];
for (i$ = 0, len$ = groupDescriptions.length; i$ < len$; ++i$) {
d = groupDescriptions[i$];
results$.push(inc("../itemGroup/item")(d));
}
return results$;
};
})();
pages/group/group/_topbar/menu/menu.ls
(function(){
return function(page){
return inc("/lib/gui/drawerMenu/menu")({
items: inc("items/items")(page),
context: "group",
width: "14.5em",
header: inc("header/header")
});
};
})();
pages/group/group/_topbar/rememberLastPage/remember.ls
(function(){
return function(page){
return inc("/lib/util/cache/set/set")("lastGroupPage", app.currentPagePath);
};
})();
pages/group/group/_topbar/rightInfoIcon/icon.ls
(function(){
return function(page){
if (page.groupDescription.userRoles.admin && page.groupDescription.type !== "family" && !_.includes(app.currentPagePath, "content")) {
return {
icon: path("/lib/svg/shape/help.svg"),
click: function(){
return inc("popupInfo/popup")(page);
}
};
}
};
})();
pages/group/group/_topbar/rightInfoIcon/popupInfo/item/item.ls
(function(){
return function(i, indent, text){
var fontSize, indentScale;
fontSize = body.width() < 500 ? "0.9em" : "1em";
indentScale = body.width() < 500 ? 0.8 : 1.8;
return Div({
display: "flex",
alignItems: "stretch",
padding: "0.3em",
lineHeight: "1.4em",
textAlign: "left",
userSelect: "text",
fontSize: fontSize
}).append(i != null ? Div({
flex: "0 0 auto",
marginRight: indent === 0 ? "1.2em" : "0.8em",
marginLeft: indent * indentScale + "em"
}).html(i) : void 8, Div({
flex: "1 1 auto",
lineHeight: "1.5em"
}).html(text));
};
})();
pages/group/group/_topbar/rightInfoIcon/popupInfo/popup.ls
(function(){
return function(page){
var startedAt, p, type, onClose, item, div;
startedAt = new Date();
p = app.currentPagePath;
type = _.includes(p, "members")
? "members"
: _.includes(p, "settings") ? "settings" : void 8;
onClose = function(){
return log.log({
event: "debugShowPopupGroupInfo",
type: type,
duration: _.round((new Date() - startedAt) / 1000)
});
};
item = inc("item/item");
div = ScrollDiv().css({
paddingRight: "0.5em",
margin: "0.5em 0 0.5em 0.8em"
}).append(item("•", 0, type === "members"
? T("createCodesForPupilsMembers")
: T("createCodesForPupilsSettings")), item("•", 0, T("printAndDistributeCodes")), item("•", 0, T("twoDifferentCases")), item("a)", 1, T("studentNotGroupMember")), item(" •", 2, T("studentNotGroupMember1")), item(" •", 2, T("studentNotGroupMember2")), item("b)", 1, T("alreadyAntonUser")), item(" •", 2, T("alreadyAntonUser1")), item(" •", 2, T("alreadyAntonUser2")), item(" •", 2, T("alreadyAntonUser3")), item(" •", 2, T("alreadyAntonUser4")));
return inc("/lib/gui/popup/popup")({
html: div,
onClose: onClose
});
};
})();
pages/group/group/_topbar/tabMenuItems/calcShowChatTab/show.ls
(function(){
return function(page){
var groupCode, schoolCode, ref$, schoolDescription, hasChat, chatChannels, chatHasUnreadMessages, groupLog, groupChatSettings, ref1$, showChatTab, ref2$, ref3$, ref4$;
groupCode = page.groupDescription.groupCode;
schoolCode = (ref$ = page.groupDescription.school) != null ? ref$.schoolCode : void 8;
if (schoolCode) {
schoolDescription = inc("/data/school/calcSchoolDescription/calc")(schoolCode);
hasChat = schoolDescription != null ? schoolDescription.hasChat : void 8;
if (hasChat) {
chatChannels = inc("/pages/group/_shared/calcChatChannels/calc")(page);
chatHasUnreadMessages = _.find(chatChannels, "hasUnreadMessages");
if (!chatChannels.length) {
groupLog = window.groupLogs[groupCode];
groupChatSettings = (ref1$ = groupLog.findLast({
event: "setGroupChatSettings"
})) != null ? ref1$.settings : void 8;
showChatTab = page.groupDescription.userRoles.admin && ((groupChatSettings != null ? (ref2$ = groupChatSettings.group) != null ? ref2$.enabled : void 8 : void 8) || (groupChatSettings != null ? (ref3$ = groupChatSettings['private']) != null ? ref3$.enabled : void 8 : void 8) || (groupChatSettings != null ? (ref4$ = groupChatSettings.subgroup) != null ? ref4$.enabled : void 8 : void 8));
}
}
}
return {
chatChannels: chatChannels,
hasUnreadMessages: chatHasUnreadMessages,
show: showChatTab || (chatChannels != null ? chatChannels.length : void 8)
};
};
})();
pages/group/group/_topbar/tabMenuItems/tabMenuItems.ls
(function(){
return function(page){
var isAdmin, chatTab, items;
isAdmin = page.groupDescription.userRoles.admin;
chatTab = inc("calcShowChatTab/show")(page);
items = [
{
label: T("content"),
selected: _.includes(app.currentPagePath, "content"),
click: function(){
return startPage({
path: path("/pages/group/group/content/page"),
replace: true
});
}
}, {
label: T("members"),
selected: _.includes(app.currentPagePath, "members"),
click: function(){
return startPage({
path: path("/pages/group/group/members/page"),
replace: true
});
}
}, chatTab.show ? {
label: T("chat"),
selected: _.includes(app.currentPagePath, "chat"),
badge: chatTab.hasUnreadMessages,
click: function(){
var ref$;
if (((ref$ = chatTab.chatChannels) != null ? ref$.length : void 8) === 1 && !isAdmin) {
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
params: {
channelDescription: chatTab.chatChannels[0],
isOnlyChannel: true
}
});
} else {
return startPage({
path: path("/pages/group/group/chatChannels/page"),
replace: true
});
}
}
} : void 8, isAdmin ? {
label: T("settings"),
selected: _.includes(app.currentPagePath, "settings"),
click: function(){
return startPage({
path: path("/pages/group/group/settings/page"),
replace: true
});
}
} : void 8
];
items = _.compact(items);
return items;
};
})();
pages/group/group/_topbar/title/title.ls
(function(){
return function(page){
var gd, name, isPlusFamily;
gd = page.groupDescription;
name = gd.name;
if (gd.type !== "family") {
return name;
}
isPlusFamily = gd.isPlusFamilyUntil != null;
return [
name, SvgIcon({
svg: path("/lib/svg/shape/home.svg"),
color: Color.grey[600],
size: "0.9em"
}).css({
marginLeft: "0.2em",
verticalAlign: "-0.1em"
}).append(isPlusFamily ? SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
size: "0.7em"
}).css({
position: "absolute",
top: "-0.45em",
right: "-0.4em"
}) : void 8)
];
};
})();
pages/group/group/_topbar/topbar.ls
(function(){
return function(page, onSearch, searchPlaceholder, actions){
inc("rememberLastPage/remember")(page);
return inc("/addons/topbar2/topbar")({
menuLabel: T("switchGroup"),
menu: function(){
return inc("menu/menu")(page);
},
title: inc("title/title")(page),
tabMenuItems: function(){
return inc("tabMenuItems/tabMenuItems")(page);
},
right: inc("rightInfoIcon/icon")(page),
download: _.includes(app.currentPagePath, "content"),
onSearch: onSearch,
searchPlaceholder: searchPlaceholder,
actions: actions
});
};
})();
pages/group/group/calcLastGroupPage/calc.ls
(function(){
return function(groupDescription){
var lastGroupPage, chatChannels, ref$;
lastGroupPage = inc("/lib/util/cache/get/get")("lastGroupPage");
chatChannels = inc("../../_shared/calcChatChannels/calc")(null, groupDescription);
if (_.includes(lastGroupPage, "chat") && chatChannels.length === 0) {
return;
}
if (_.includes(lastGroupPage, "settings") && (groupDescription != null ? (ref$ = groupDescription.userRoles) != null ? ref$.admin : void 8 : void 8) !== true) {
return;
}
return lastGroupPage;
};
})();
pages/group/group/calcStartPageParams/calc.ls
(function(){
return function(groupCode, gd, params){
var lastGroupPage, pagePath, that, o, ref$;
lastGroupPage = inc("../calcLastGroupPage/calc")(gd);
pagePath = groupCode == null
? path("../../noGroupFound/page")
: (that = lastGroupPage)
? that
: path("../content/page");
return o = {
path: pagePath,
history: (ref$ = params != null ? params.history : void 8) != null ? ref$ : 1,
animation: (ref$ = params != null ? params.animation : void 8) != null ? ref$ : "fadeIn"
};
};
})();
pages/group/group/chatChannels/_newChatChannelPage/_shared/calcChannels/calc.ls
(function(){
return function(page){
var settings, ref$, ref1$, channels, i$, ref2$, len$, subgroup, member;
settings = ((ref$ = window.groupLogs[page.groupCode]) != null ? (ref1$ = ref$.findLast({
event: "setGroupChatSettings"
})) != null ? ref1$.settings : void 8 : void 8) || {};
settings.group = settings.group || {};
settings.subgroup = settings.subgroup || {};
settings['private'] = settings['private'] || {};
channels = [];
if (settings.group.enabled) {
channels.push({
channel: "all"
});
}
if (settings.subgroup.enabled) {
for (i$ = 0, len$ = (ref2$ = page.subgroupDescriptions).length; i$ < len$; ++i$) {
subgroup = ref2$[i$];
channels.push({
channel: subgroup.id
});
}
}
if (settings['private'].enabled) {
for (i$ = 0, len$ = (ref2$ = page.memberDescriptions.pupil).length; i$ < len$; ++i$) {
member = ref2$[i$];
channels.push({
channel: member.publicId
});
}
}
return channels;
};
})();
pages/group/group/chatChannels/_newChatChannelPage/_t.ls
(function(){
return {
newChannel: {
de: "Neuer Chat",
en: "New chat",
fr: "Nouveau chat",
es: "Nuevo chat",
pt: "Novo chat"
},
noChannelsFoundWith: {
de: "Keine Chats mit \"$1\" gefunden.",
en: "No chats found with \"$1\".",
fr: "Aucun chat trouvé avec \"$1\".",
es: "No se encontraron chats con \"$1\".",
pt: "Não foram encontrados chats com \"$1\"."
},
noChannelsFound: {
de: "Keine Chats verfügbar, bitte aktiviere den Chat in den Gruppen-Einstellungen",
en: "No chats available, please activate the chat in the group settings first.",
fr: "Aucun chat n'est disponible. Tu dois commencer par activer le chat dans les paramètres du groupe.",
es: "Los chats no están disponibles. Por favor, activa el chat en los ajustes de grupo.",
pt: "Não há chats disponíveis. Por favor, ative o chat nas configurações do grupo."
},
all: {
de: "Alle",
en: "All",
fr: "Tous",
es: "Todos",
pt: "Todos"
},
teacher: {
de: "Lehrkräfte",
en: "Teachers",
fr: "Professeur·s",
es: "Docentes",
pt: "Professores"
},
allChannel: {
de: "Alle ($1)",
en: "All ($1)",
fr: "Tous ($1)",
es: "Todos ($1)",
pt: "Todos ($1)"
}
};
})();
pages/group/group/chatChannels/_newChatChannelPage/_topbar/title/title.ls
(function(){
return function(page){
return Div({
flex: "0 1 auto",
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap"
}).text(T("newChannel") + " (" + page.groupDescription.name + ")");
};
})();
pages/group/group/chatChannels/_newChatChannelPage/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: true,
title: inc("title/title")(page),
onSearch: function(searchQuery){
return page.onSearch(searchQuery);
}
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/filter/filter.ls
(function(){
return function(page, onDone){
var channels, filter, ref$;
channels = page.channelDescriptions;
filter = (ref$ = page.params.search) != null ? ref$.toLowerCase() : void 8;
if (filter) {
channels = _.filter(channels, function(channel){
var channelName;
channelName = inc("/pages/group/_shared/calcChatChannelName/calc")(page, channel);
return _.includes(channelName.toLowerCase(), filter);
});
}
page.filteredChannelDescriptions = channels;
return onDone();
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/list.ls
(function(){
var lastListPosition;
lastListPosition = null;
return function(page){
var data;
data = page.filteredChannelDescriptions;
page.list = ListDiv({
data: data,
row: inc("row/row")(page),
nearScopeSize: 0.5,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 0.5
},
listPosition: page.params.history <= 0 ? lastListPosition : void 8
}).css({
height: "var(--centerHeight)"
});
return page.list;
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/_shared/arrow/arrow.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/_shared/rowCenter/center.ls
(function(){
return function(page, channelDescription){
var channelName;
channelName = inc("/pages/group/_shared/calcChatChannelName/calc")(page, channelDescription);
channelName = inc("/lib/util/tagSearchInString/tagSearchInString")(channelName, page.params.search, "");
return Div({
display: "flex",
flexDirection: "column",
flex: "1 1 auto",
textAlign: "left",
margin: "0.8em 0",
alignItems: "stretch"
}).html(Div().secureHtml(channelName));
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/all/icon/icon.ls
(function(){
return function(page, member){
return SvgIcon({
svg: path("/lib/svg/shape/group.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/all/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
replace: true,
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(page, channelDescription), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/arrow/arrow")()).tap(openChat);
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/pupil/avatar/avatar.ls
(function(){
return function(page, data){
var member;
member = _.find(page.memberDescriptions.pupil, {
publicId: data.channel
});
return Div({
display: "flex",
width: "4em",
marginRight: "0.5em",
flexDirection: "column"
}).onScopeRender(function(){
return this.append(inc("/lib/gui/avatar/avatar")(member.avatar, "head", false).css({
width: "2em",
height: "2em"
}));
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/pupil/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
replace: true,
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("avatar/avatar")(page, channelDescription), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/arrow/arrow")()).tap(openChat);
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/row.ls
(function(){
return function(page){
return function(data){
var isAllChannel, isAdmin, isSubgroup;
isAllChannel = data.channel === "all";
isAdmin = page.groupDescription.userRoles.admin;
isSubgroup = _.startsWith(data.channel, "SUBGROUP-");
return Div().html(Div({
width: "35em",
maxWidth: "95%",
margin: "0 auto"
}).html(isAllChannel
? inc("all/row")(page, data)
: isSubgroup
? inc("subgroup/row")(page, data)
: isAdmin
? inc("pupil/row")(page, data)
: inc("teachers/row")(page, data)));
};
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/subgroup/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/subgroup.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/subgroup/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
replace: true,
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/arrow/arrow")()).tap(openChat);
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/teachers/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/user-teacher.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/list/row/teachers/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, openChat, channelName, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
replace: true,
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
channelName = T("teacher");
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(), inc("../_shared/rowCenter/center")(page, channelDescription, channelName), inc("../_shared/arrow/arrow")()).tap(openChat);
};
})();
pages/group/group/chatChannels/_newChatChannelPage/load/load.ls
(function(){
return function(page, onDone){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: page.groupCode,
onError: function(error){
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, true);
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onLoaded: function(result){
page.memberDescriptions = result;
page.subgroupDescriptions = inc("/data/group/calcSubgroups/calc")(page.groupCode);
return onDone();
}
});
};
})();
pages/group/group/chatChannels/_newChatChannelPage/noChannelsFound/noChannelsFound.ls
(function(){
return function(page){
return Div({
width: "35em",
maxWidth: "90%",
margin: "1em auto"
}).html(page.params.search
? T("noChannelsFoundWith", page.params.search)
: T("noChannelsFound"));
};
})();
pages/group/group/chatChannels/_newChatChannelPage/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.groupCode = page.groupDescription.groupCode;
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var load, s, ref$;
load = function(){
return inc("load/load")(page, page.filter);
};
page.onSearch = function(searchQuery){
page.params.search = searchQuery;
return page.filter();
};
page.filter = function(){
page.subgroupDescriptions = inc("/data/group/calcSubgroups/calc")(page.groupCode);
page.channelDescriptions = inc("_shared/calcChannels/calc")(page);
return inc("filter/filter")(page, page.create);
};
page.create = function(d){
return page.html(page.filteredChannelDescriptions.length
? inc("list/list")(page)
: inc("noChannelsFound/noChannelsFound")(page));
};
page.html(inc("/lib/gui/spinner/spinner")()).tap({
down: function(){
var ref$;
return (ref$ = page.input) != null ? ref$.stop() : void 8;
},
animation: "none"
}).css({
cursor: "default"
});
if (s = page.params.search) {
page.topbar.setSearchValue(s);
if ((ref$ = app.lastInput) != null) {
ref$.stop();
}
}
return load();
}
};
};
})();
pages/group/group/chatChannels/_t.ls
(function(){
return {
noChannelsFoundWith: {
de: "Keine Chats mit \"$1\" gefunden.",
en: "No chats found with \"$1\".",
fr: "Aucun chat trouvé avec \"$1\".",
es: "No se encontraron chats con \"$1\".",
pt: "Não foram encontrados chats com \"$1."
},
noChannelsFound: {
de: "Du hast noch keine Chats. Wähle „+ Neu“, um einen neuen Chat zu beginnen.",
en: "You have no chats yet. Choose \"+ New\" to start a new chat.",
fr: "Tu n'as pas encore de chats. Choisis \"+ Nouveau\" pour commencer un chat.",
es: "Aún no tienes ningún chat. Elige \"+ Nuevo\" para comenzar un chat.",
pt: "Você ainda não tem nenhum chat. Selecione \"+ Novo\" para iniciar um chat."
},
pupilPl: {
de: "Schüler/innen",
en_gb: "Pupils",
en: "Students",
fr: "Élèves",
es: "Estudiantes",
pt: "Alunos"
},
teacherPl: {
de: "Lehrkräfte",
en: "Teachers",
fr: "Professeur·es",
es: "Docentes",
pt: "Professores"
},
familyPl: {
de: "Familienmitglieder",
en: "Family members",
fr: "Membres de la famille",
es: "Miembros de la familia",
pt: "Membros da família"
},
subgroupPl: {
de: "Subgruppen",
en: "Subgroups",
fr: "Sous-groupe",
es: "Subgrupos",
pt: "Subgrupos"
},
'new': {
de: "Neu",
en: "New",
fr: "Nouveau",
es: "Nuevo",
pt: "Novo"
},
familyAdmin: {
de: "Familien-Admin",
en: "Family admin",
fr: "Admin de la famille",
es: "Administrador/a de la familia",
pt: "Administrador(a) da família"
},
lastViewed: {
de: "zuletzt gesehen",
en: "last viewed",
fr: "Vu en dernier",
es: "Visto por última vez",
pt: "Visto por último"
},
all: {
de: "Alle",
en: "All",
fr: "Tous",
es: "Todos",
pt: "Todos"
},
teacher: {
de: "Lehrkräfte",
en: "Teachers",
fr: "Professeur·es",
es: "Docentes",
pt: "Professores"
},
allChannel: {
de: "Alle ($1)",
en: "All ($1)",
fr: "Tous ($1)",
es: "Todos ($1)",
pt: "Todos ($1)"
}
};
})();
pages/group/group/chatChannels/_topbar/actions/_t.ls
(function(){
return {
'new': {
de: "Neu",
en: "New",
fr: "Nouveau",
es: "Nuevo",
pt: "Novo"
}
};
})();
pages/group/group/chatChannels/_topbar/actions/actions.ls
(function(){
return function(page){
var actions;
if (!page.groupDescription.userRoles.admin) {
return;
}
return actions = [inc("new/new")(page)];
};
})();
pages/group/group/chatChannels/_topbar/actions/new/new.ls
(function(){
return function(page){
return {
label: T("new"),
icon: path("/lib/svg/shape/plus.svg"),
click: function(){
return startPage({
path: path("/pages/group/group/chatChannels/_newChatChannelPage/page"),
animation: "slideUp",
params: {
groupCode: page.groupCode
}
});
}
};
};
})();
pages/group/group/chatChannels/_topbar/onSearch/onSearch.ls
(function(){
return function(page){
var isAdmin;
isAdmin = page.groupDescription.userRoles.admin;
if (!isAdmin) {
return;
}
return function(searchQuery){
return page.onSearch(searchQuery);
};
};
})();
pages/group/group/chatChannels/_topbar/topbar.ls
(function(){
return function(page){
var onSearch, actions;
if (page.isOnlyChannel) {
return inc("../../_topbar/topbar")(page);
} else {
onSearch = inc("onSearch/onSearch")(page);
actions = inc("actions/actions")(page);
return inc("../../_topbar/topbar")(page, onSearch, null, actions);
}
};
})();
pages/group/group/chatChannels/filter/filter.ls
(function(){
return function(page, onDone){
var channels, isAdmin, filter, ref$;
channels = page.channelDescriptions;
isAdmin = page.groupDescription.userRoles.admin;
if (isAdmin) {
channels = _.filter(channels, "lastMessageAt");
}
filter = (ref$ = page.params.search) != null ? ref$.toLowerCase() : void 8;
if (filter) {
channels = _.filter(channels, function(channel){
var channelName;
channelName = inc("/pages/group/_shared/calcChatChannelName/calc")(page, channel);
return _.includes(channelName.toLowerCase(), filter) || _.includes(channel.lastMessageText.toLowerCase(), filter);
});
}
channels = _.sortBy(channels, "lastMessageAt").reverse();
page.filteredChannelDescriptions = channels;
return onDone();
};
})();
pages/group/group/chatChannels/list/list.ls
(function(){
var lastListPosition;
lastListPosition = null;
return function(page){
var data;
data = page.filteredChannelDescriptions;
page.list = ListDiv({
data: data,
row: inc("row/row")(page),
nearScopeSize: 0.5,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 0.5
},
listPosition: page.params.history <= 0 ? lastListPosition : void 8
}).css({
height: "var(--centerHeight)"
}).onElementClass("onPageFinish", function(){
return lastListPosition = page.list.getListPosition();
}).addClass('onNewLogEvents_groupChatDetails');
page.list.onNewLogEvents = function(e){
var d;
d = e[0];
if (d.logId !== log.id()) {
return;
}
if (d.groupCode !== page.groupCode) {
return;
}
lastListPosition = page.list.getListPosition();
return page.filter();
};
return page.list;
};
})();
pages/group/group/chatChannels/list/row/_shared/arrow/arrow.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
});
};
})();
pages/group/group/chatChannels/list/row/_shared/lastViewed/lastViewed.ls
(function(){
return function(isLastViewed){
if (!isLastViewed) {
return;
}
return Div({
position: "absolute",
top: 0,
right: 0,
padding: "0.3em 0.2em 0",
fontSize: "0.7em",
color: Color.grey[500]
}).html(T("lastViewed"));
};
})();
pages/group/group/chatChannels/list/row/_shared/rowCenter/center.ls
(function(){
return function(page, channelDescription){
var lastMessageMember, d, lastMessageDateFormatted, channelName, lastMessageString;
if (channelDescription.lastMessageBy) {
lastMessageMember = _.find(page.memberDescriptions.pupil, {
publicId: channelDescription.lastMessageBy
}) || _.find(page.memberDescriptions.teacher, {
publicId: channelDescription.lastMessageBy
});
}
if (channelDescription.lastMessageAt) {
d = inc("/lib/util/formatDate2/format")(channelDescription.lastMessageAt);
lastMessageDateFormatted = d.formats.fullShort;
}
channelName = inc("/pages/group/_shared/calcChatChannelName/calc")(page, channelDescription);
channelName = inc("/lib/util/tagSearchInString/tagSearchInString")(channelName, page.params.search, "");
lastMessageString = lastMessageDateFormatted + ": " + channelDescription.lastMessageText;
lastMessageString = inc("/lib/util/tagSearchInString/tagSearchInString")(lastMessageString, page.params.search, "");
return Div({
display: "flex",
flexDirection: "column",
flex: "1 1 auto",
textAlign: "left",
margin: "0.8em 0",
alignItems: "stretch"
}).html(Div().secureHtml(channelName), lastMessageDateFormatted ? Div({
fontSize: "0.8em",
color: Color.grey[500],
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap"
}).html(inc("/lib/gui/avatar/avatar")(lastMessageMember).css({
width: "1.2em",
height: "1.2em",
verticalAlign: "-0.15em"
}), lastMessageString) : void 8);
};
})();
pages/group/group/chatChannels/list/row/_shared/unread/unread.ls
(function(){
return function(page, data){
if (!data.hasUnreadMessages) {
return;
}
return SvgIcon({
svg: path("/lib/svg/shape/record.svg"),
color: Color.blue[500]
}).css({
flex: "0 0 auto"
});
};
})();
pages/group/group/chatChannels/list/row/all/icon/icon.ls
(function(){
return function(page, member){
return SvgIcon({
svg: path("/lib/svg/shape/group.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/list/row/all/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, isLastViewed, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
isLastViewed = groupCode + channel === inc("/lib/util/cache/get/get")("groupChatLast");
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(page, channelDescription), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/unread/unread")(page, channelDescription), inc("../_shared/arrow/arrow")(), inc("../_shared/lastViewed/lastViewed")(isLastViewed)).tap(openChat);
};
})();
pages/group/group/chatChannels/list/row/pupil/avatar/avatar.ls
(function(){
return function(page, data){
var member;
member = _.find(page.memberDescriptions.pupil, {
publicId: data.channel
});
return Div({
display: "flex",
width: "4em",
marginRight: "0.5em",
flexDirection: "column"
}).onScopeRender(function(){
return this.append(inc("/lib/gui/avatar/avatar")(member.avatar, "head", false).css({
width: "2em",
height: "2em"
}));
});
};
})();
pages/group/group/chatChannels/list/row/pupil/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, isLastViewed, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
isLastViewed = groupCode + channel === inc("/lib/util/cache/get/get")("groupChatLast");
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("avatar/avatar")(page, channelDescription), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/unread/unread")(page, channelDescription), inc("../_shared/arrow/arrow")(), inc("../_shared/lastViewed/lastViewed")(isLastViewed)).tap(openChat);
};
})();
pages/group/group/chatChannels/list/row/row.ls
(function(){
return function(page){
return function(data){
var isAllChannel, isAdmin, isSubgroup;
isAllChannel = data.channel === "all";
isAdmin = page.groupDescription.userRoles.admin;
isSubgroup = _.startsWith(data.channel, "SUBGROUP-");
return Div().html(Div({
width: "35em",
maxWidth: "95%",
margin: "0 auto"
}).html(isAllChannel
? inc("all/row")(page, data)
: isSubgroup
? inc("subgroup/row")(page, data)
: isAdmin
? inc("pupil/row")(page, data)
: inc("teachers/row")(page, data)));
};
};
})();
pages/group/group/chatChannels/list/row/subgroup/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/subgroup.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/list/row/subgroup/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, isLastViewed, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
isLastViewed = groupCode + channel === inc("/lib/util/cache/get/get")("groupChatLast");
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/unread/unread")(page, channelDescription), inc("../_shared/arrow/arrow")(), inc("../_shared/lastViewed/lastViewed")(isLastViewed)).tap(openChat);
};
})();
pages/group/group/chatChannels/list/row/teachers/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/user-teacher.svg"),
width: "2em",
height: "2em"
}).css({
margin: "0 1.1em"
});
};
})();
pages/group/group/chatChannels/list/row/teachers/row.ls
(function(){
return function(page, channelDescription){
var groupCode, channel, isLastViewed, openChat, b;
groupCode = page.groupCode;
channel = channelDescription.channel;
isLastViewed = groupCode + channel === inc("/lib/util/cache/get/get")("groupChatLast");
openChat = function(){
inc("/lib/util/cache/set/set")("groupChatLast", groupCode + channel);
return startPage({
path: path("/pages/group/chat/page"),
animation: "slideUp",
params: {
groupCode: groupCode,
channelDescription: channelDescription
}
});
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
background: "white",
marginTop: "-2px",
minHeight: "4.2em"
}).append(inc("icon/icon")(), inc("../_shared/rowCenter/center")(page, channelDescription), inc("../_shared/unread/unread")(page, channelDescription), inc("../_shared/arrow/arrow")(), inc("../_shared/lastViewed/lastViewed")(isLastViewed)).tap(openChat);
};
})();
pages/group/group/chatChannels/load/load.ls
(function(){
return function(page, onDone){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: page.groupCode,
onError: function(error){
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, true);
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onLoaded: function(result){
page.memberDescriptions = result;
page.subgroupDescriptions = inc("/data/group/calcSubgroups/calc")(page.groupCode);
return onDone();
}
});
};
})();
pages/group/group/chatChannels/noChannelsFound/noChannelsFound.ls
(function(){
return function(page){
return Div({
width: "35em",
maxWidth: "90%",
margin: "1em auto"
}).html(page.params.search
? T("noChannelsFoundWith", page.params.search)
: T("noChannelsFound"));
};
})();
pages/group/group/chatChannels/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.groupCode = page.groupDescription.groupCode;
return {
navCategory: "groups",
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var load, s, ref$;
load = function(){
return inc("load/load")(page, page.filter);
};
page.onSearch = function(searchQuery){
if (!page.memberDescriptions) {
return;
}
page.params.search = searchQuery;
return page.filter();
};
page.filter = function(){
page.channelDescriptions = inc("/pages/group/_shared/calcChatChannels/calc")(page);
return inc("filter/filter")(page, page.create);
};
page.create = function(d){
return page.html(page.filteredChannelDescriptions.length
? inc("list/list")(page)
: inc("noChannelsFound/noChannelsFound")(page));
};
page.html(inc("/lib/gui/spinner/spinner")()).tap({
down: function(){
var ref$;
return (ref$ = page.input) != null ? ref$.stop() : void 8;
},
animation: "none"
}).css({
cursor: "default"
});
if (s = page.params.search) {
page.topbar.setSearchValue(s);
if ((ref$ = app.lastInput) != null) {
ref$.stop();
}
}
return load();
}
};
};
})();
pages/group/group/content/page.ls
(function(){
return function(page){
var ref$;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.lastViewedBlockPath = inc("../../_shared/calcLastViewedBlockPath/calc")(page);
page.context = (ref$ = page.groupDescription) != null && ref$.userRoles.admin ? "groupAll" : "groupPupil";
return {
navCategory: "groups",
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var loadWeeksAndLevelsReport, create;
loadWeeksAndLevelsReport = function(){
return inc("../_shared/loadWeeksAndLevelsReport/load")({
page: page,
skipLevelReport: page.context === "groupPupil",
onLoaded: create,
onOffline: create,
filterPublicId: page.context === "groupPupil" ? inc("/data/user/calcUserDescription/calc")().publicId : void 8
});
};
create = function(){
return inc("../_shared/contentDiv/div")(page);
};
page.html(inc("/lib/gui/spinner/spinner")());
return loadWeeksAndLevelsReport();
}
};
};
})();
pages/group/group/contentBlock/page.ls
(function(){
return function(page){
return inc("/pages/content/block/page")(page);
};
})();
pages/group/group/members/_t.ls
(function(){
return {
noMembersFoundWith: {
de: "Keine Mitglieder mit \"$1\" gefunden.",
en: "No member with \"$1\" found.",
fr: "Aucun membre trouvé avec \"$1\".",
es: "No se encontraron miembros con \"$1\".",
pt: "Não foram encontrados membros com \"$1\"."
},
noMembersFound: {
de: "Keine Mitglieder gefunden.",
en: "No members found.",
fr: "Aucun membre trouvé.",
es: "No se encontraron miembros.",
pt: "Não foram encontrados membros."
},
pupilPl: {
de: "Schüler/innen",
en_gb: "Pupils",
en: "Students",
fr: "Élèves",
es: "Estudiantes",
pt: "Alunos"
},
teacherPl: {
de: "Lehrkräfte",
en: "Teachers",
fr: "Professeur·es",
es: "Docentes",
pt: "Professores"
},
familyPl: {
de: "Familienmitglieder",
en: "Family members",
fr: "Membres de la famille",
es: "Miembros de la familia",
pt: "Membros da família"
},
prepared: {
de: "vorbereitet",
en: "prepared",
fr: "Prêt·e",
es: "Listo",
pt: "preparado"
},
'new': {
de: "Neu",
en: "New",
fr: "Nouveau",
es: "Nuevo",
pt: "Novo"
},
familyAdmin: {
de: "Familien-Admin",
en: "Family admin",
fr: "Admin de la famille",
es: "Administrador/a de la familia ",
pt: "Administrador(a) da família"
},
lastViewed: {
de: "zuletzt gesehen",
en: "last viewed",
fr: "Vu en dernier",
es: "Visto por última vez",
pt: "visto por último"
},
searchPlaceHolderSV: {
de: "Name, Klasse oder Referenz",
en_gb: "Name, year or reference",
en: "Name, grade or reference",
fr: "Nom, classe ou référence",
es: "Nombre, grado o referencia",
pt: "Nome, série ou referência"
},
searchPlaceHolder: {
de: "Suche nach Namen",
en: "Search by name",
fr: "Rechercher un nom",
es: "Buscar por nombre",
pt: "Buscar por nome"
},
roleSearchStringPupil: {
de: "schüler/innen schueler",
en: "students",
en_gb: "pupils",
fr: "élèves eleves",
es: "estudiantes",
pt: "alunos(as)"
},
roleSearchStringTeacher: {
de: "lehrerin lehrkraft",
en: "teachers",
fr: "professeurs professeures",
es: "docentes",
pt: "professores"
},
sortedBy: {
de: "Sortiert nach: ",
en: "Sorted by: ",
fr: "Trier par : ",
es: "Clasificado por: ",
pt: "Ordenado por: "
},
nameLabel: {
de: "Name",
en: "Name",
fr: "Nom",
es: "Nombre",
pt: "Nome"
},
dirNameAscLabel: {
de: "Schulverzeichnis-Eintrag",
en: "School directory entry",
fr: "Entrée du répertoire scolaire",
es: "Entrada en el directorio",
pt: "Entrada no Diretório Escolar"
},
lastActiveLabel: {
de: "Zuletzt aktiv",
en: "Last active",
fr: "Dernière activité",
es: "Última actividad",
pt: "Última atividade"
},
markForDeleteInfoInactive: {
de: "Wegen Inaktivität zur Löschung markiert. Automatische Löschung am $1.",
en: "Marked for deletion due to inactivity. Automatic deletion on $1.",
fr: "Suppression du compte engagée en raison de son inactivité. Suppression automatique le $1.",
es: "Marcada para eliminación por inactividad. Se eliminará automáticamente el $1.",
pt: "Marcado para exclusão devido à inatividade. Será excluído automaticamente em $1."
},
markForDeleteInfoSelf: {
de: "Schüler/in hat sich zur Löschung markiert. Automatische Löschung am $1.",
en_gb: "Pupil has marked their account for deletion. Automatic deletion on $1.",
en: "Student has marked their account for deletion. Automatic deletion on $1.",
fr: "L'élève a engagé la suppression de son compte. Suppression automatique le $1.",
es: "El/la estudiante solicitó la eliminación de la cuenta. Se eliminará automáticamente el $1.",
pt: "O(a) aluno(a) marcou sua conta para ser excluída. Exclusão automática em $1."
},
markForDeleteInfoSchool: {
de: "Vom Schul-Admin zur Löschung markiert. Automatische Löschung am $1.",
en: "School admin has marked this account for deletion. Automatic deletion on $1.",
fr: "Suppression du compte engagée par l'admin de l'école. Suppression automatique le $1.",
es: "El/la admin de la escuela solicitó la eliminación de la cuenta. Se eliminará automáticamente el $1.",
pt: "O(a) admin. da escola marcou esta conta para ser excluída. Exclusão automática em $1."
}
};
})();
pages/group/group/members/_topbar/actions/_t.ls
(function(){
return {
directoryPupil: {
de: "Schulverzeichnis-Schüler/in",
en_gb: "School directory pupil",
en: "School directory student",
fr: "Élève du répertoire",
es: "Estudiante del directorio",
pt: "Alunos do Diretório Escolar"
},
directoryTeacher: {
de: "Schulverzeichnis-Lehrkraft",
en: "School directory teacher",
fr: "Professeur·e du répertoire",
es: "Docente del directorio",
pt: "Professores do Diretório Escolar"
},
pupil: {
de: "Schüler/in",
en_gb: "Pupil",
en: "Student",
fr: "Élève",
es: "Estudiante",
pt: "Aluno(a)"
},
schoolDirectory: {
de: "Schulverzeichnis",
en: "School Directory",
fr: "Répertoire de l'école",
es: "Directorio escolar",
pt: "Diretório escolar"
},
teacher: {
de: "Lehrkraft",
en: "Teacher",
fr: "Professeur·e",
es: "Docente",
pt: "Professor(a)"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
'new': {
de: "Neu",
en: "New",
fr: "Nouveau",
es: "Nuevo",
pt: "Novo"
},
newFamilyMemberCreate: {
de: "Neu erstellen und hinzufügen",
en: "Create and add",
fr: "Créer et ajouter un membre",
es: "Crear y agregar",
pt: "Criar e adicionar um membro"
},
newFamilyMemberLoginCode: {
de: "Per Anmelde-Code hinzufügen",
en: "Add existing user with login code",
fr: "Ajouter avec un code de connexion",
es: "Agregar con clave de acceso",
pt: "Adicionar com código de acesso"
},
newFamilyMemberDevice: {
de: "Von diesem Gerät hinzufügen",
en: "Add existing user from this device",
fr: "Ajouter un·e utilisateur·rice de cet appareil",
es: "Agregar una cuenta de este dispositivo",
pt: "Adicionar uma conta deste dispositivo"
}
};
})();
pages/group/group/members/_topbar/actions/actions.ls
(function(){
return function(page){
var actions;
if (!page.groupDescription.userRoles.admin) {
return;
}
return actions = [inc("new/action")(page), inc("print/action")(page)];
};
})();
pages/group/group/members/_topbar/actions/new/action.ls
(function(){
return function(page){
var gd, ref$, ref1$;
gd = page.groupDescription;
return {
label: T("new"),
icon: path("/lib/svg/shape/plus.svg"),
menuItems: gd.type === "family"
? [inc("items/family/new/item")(page), inc("items/family/loginCode/item")(page), inc("items/family/sameDevice/item")(page)]
: (ref$ = (ref1$ = gd.school) != null ? ref1$.dirRole : void 8) === "teacher" || ref$ === "staff"
? [inc("items/dirPupil/item")(page), inc("items/dirTeacher/item")(page)]
: [inc("items/preparePupil/item")(page), inc("items/addCoTeacher/item")(page), inc("items/proPromotion/item")(page)]
};
};
})();
pages/group/group/members/_topbar/actions/new/items/addCoTeacher/item.ls
(function(){
return function(page){
return {
label: T("teacher"),
icon: path("/lib/svg/shape/user-teacher.svg"),
click: function(){
return startPage({
path: path("/pages/group/group/other/addCoTeacher/page"),
animation: "slideUp"
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/dirPupil/item.ls
(function(){
return function(page){
return {
label: T("directoryPupil"),
icon: path("/lib/svg/shape/user.svg"),
click: function(){
return startPage({
path: path("/pages/group/group/other/addDirMember/search/page"),
animation: "slideUp",
params: {
category: "dirPupil"
}
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/dirTeacher/item.ls
(function(){
return function(page){
return {
label: T("directoryTeacher"),
icon: path("/lib/svg/shape/user.svg"),
click: function(){
return startPage({
path: path("/pages/group/group/other/addDirMember/search/page"),
animation: "slideUp",
params: {
category: "dirTeacher"
}
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/family/_calcLimitReached/_t.ls
(function(){
return {
limitReached: {
de: "Diese Familiengruppe hat das Mitglieder-Limit erreicht (max. $1).",
en: "This family group has reached its member limit (max. $1).",
fr: "Ce groupe familial a atteint son nombre maximum de membres (max. $1) .",
es: "Este grupo familiar ha alcanzado su límite de miembros (max. $1).",
pt: "Este grupo familiar alcançou o número limite de membros (max. $1)."
}
};
})();
pages/group/group/members/_topbar/actions/new/items/family/_calcLimitReached/calc.ls
(function(){
return function(gd){
var limit, total;
limit = 5;
total = gd.members.pupil.length + gd.members.admin.length;
if (total < limit) {
return;
}
inc("/lib/gui/errorPopup/popup")({
label: T("limitReached", limit)
});
return true;
};
})();
pages/group/group/members/_topbar/actions/new/items/family/loginCode/item.ls
(function(){
return function(page){
var gd;
gd = page.groupDescription;
return {
label: T("newFamilyMemberLoginCode"),
icon: path("/lib/svg/shape/user.svg"),
click: function(){
if (inc("../_calcLimitReached/calc")(gd)) {
return;
}
return startPage({
path: path("/pages/group/group/other/addFamilyMemberLoginCode/01_code/page"),
animation: "slideUp",
params: {
groupCode: gd.groupCode
}
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/family/new/item.ls
(function(){
return function(page){
var gd;
gd = page.groupDescription;
return {
label: T("newFamilyMemberCreate"),
icon: path("/lib/svg/shape/plus.svg"),
click: function(){
var isOnline;
if (inc("../_calcLimitReached/calc")(gd)) {
return;
}
isOnline = inc("/lib/util/isOnline/isOnline")();
if (!isOnline) {
inc("/lib/offline/offlinePopup/popup")();
return;
}
return inc("/pages/start/introFamilyMember/start")({
groupCode: gd.groupCode
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/family/sameDevice/item.ls
(function(){
return function(page){
var gd;
gd = page.groupDescription;
return {
label: T("newFamilyMemberDevice"),
icon: path("/lib/svg/shape/user.svg"),
click: function(){
if (inc("../_calcLimitReached/calc")(gd)) {
return;
}
return startPage({
path: path("/pages/group/group/other/addFamilyMemberSameDevice/page"),
animation: "slideUp",
params: {
groupCode: gd.groupCode
}
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/preparePupil/item.ls
(function(){
return function(page){
return {
label: T("pupil"),
icon: path("/lib/svg/shape/user.svg"),
click: function(){
return startPage({
path: path("/pages/group/group/other/preparePupil/page"),
animation: "slideUp"
});
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/proPromotion/_t.ls
(function(){
return {
needSchoolLicense: {
de: "Diese Funktion kannst du mit der ANTON-Schullizenz nutzen.",
en_gb: "You can use this function with an ANTON School Licence.",
en: "You can use this function with an ANTON School License.",
fr: "Tu peux utiliser cette fonction avec une licence scolaire ANTON.",
es: "Puedes utilizar esta función con la Licencia Escolar ANTON.",
pt: "Você pode utilizar esta função com a Licença Escolar ANTON."
}
};
})();
pages/group/group/members/_topbar/actions/new/items/proPromotion/item.ls
(function(){
return function(page){
return {
label: inc("label/label")(),
icon: path("/lib/svg/shape/user-teacher.svg"),
click: function(){
return inc("/lib/gui/noSchoolLicensePopup/popup")(T("needSchoolLicense"));
}
};
};
})();
pages/group/group/members/_topbar/actions/new/items/proPromotion/label/label.ls
(function(){
return function(){
return Div({
display: "flex"
}).html(Div({
flex: "1 1 auto",
marginRight: "0.3em"
}).html(T("schoolDirectory")), SvgIcon({
svg: path("/lib/svg/illustration/school-license.svg"),
width: "1.2em",
height: "1.2em"
}));
};
})();
pages/group/group/members/_topbar/actions/print/action.ls
(function(){
return function(page){
var d, click, isDisabled, showIsDisabled;
if (page.groupDescription.type === "family") {
return;
}
d = page.memberDescriptions;
click = function(){
return startPage({
path: path("/pages/group/group/other/printList/page"),
animation: "slideUp"
});
};
isDisabled = d == null || d.pupil.length === 0;
showIsDisabled = isDisabled && page.params.search;
return {
labelColor: showIsDisabled ? Color.grey[500] : void 8,
label: T("print"),
iconColor: showIsDisabled ? Color.grey[400] : void 8,
icon: path("/lib/svg/shape/print.svg"),
click: !isDisabled ? click : void 8
};
};
})();
pages/group/group/members/_topbar/onSearch/onSearch.ls
(function(){
return function(page){
if (!page.groupDescription.userRoles.admin) {
return;
}
return function(searchQuery){
return page.onSearch(searchQuery);
};
};
})();
pages/group/group/members/_topbar/topbar.ls
(function(){
return function(page){
var onSearch, actions, placeholder, ref$, ref1$, topbar;
onSearch = inc("onSearch/onSearch")(page);
actions = inc("actions/actions")(page);
placeholder = (ref$ = (ref1$ = page.groupDescription.school) != null ? ref1$.dirRole : void 8) === "teacher" || ref$ === "staff"
? T("searchPlaceHolderSV")
: T("searchPlaceHolder");
topbar = inc("../../_topbar/topbar")(page, onSearch, placeholder, actions);
topbar.update = function(){
if (page.groupDescription.userRoles.admin) {
return topbar.updateActions(inc("actions/actions")(page));
}
};
return topbar;
};
})();
pages/group/group/members/calcSorting/calc.ls
(function(){
return function(page){
var sorting, ref$;
sorting = inc("/lib/util/cache/get/get")("groupMembersSorting");
if (!sorting || (sorting === "dirNameAsc" && !((ref$ = page.groupDescription.school) != null && ref$.hasDirAccess))) {
sorting = "nameAsc";
}
return sorting;
};
})();
pages/group/group/members/filterMembers/calc.ls
(function(){
return function(page, onDone){
var mds, filter, ref$, filteredDescriptions, role, members;
mds = _.cloneDeep(page.initialMemberDescriptions);
if (!mds) {
return;
}
filter = ((ref$ = page.params.search) != null ? ref$.toLowerCase() : void 8) || "";
if (!filter) {
onDone(mds);
return;
}
filteredDescriptions = {};
for (role in mds) {
members = mds[role];
filteredDescriptions[role] = inc("filterMembers/filter")(members, role, filter, page);
}
return onDone(filteredDescriptions);
};
})();
pages/group/group/members/filterMembers/filterMembers/filter.ls
(function(){
return function(members, role, filter, page){
return _.filter(members, function(member){
var subgroups, role, ref$, ref1$, ref2$;
subgroups = inc("/data/group/calcSubgroups/calc")(page.groupDescription.groupCode, member.publicId);
subgroups = _.map(subgroups, "name").join(" ");
role = member.role === "pupil"
? T("roleSearchStringPupil")
: member.role === "teacher" ? T("roleSearchStringTeacher") : void 8;
return _.includes((ref$ = member.displayName) != null ? typeof ref$.toLowerCase == 'function' ? ref$.toLowerCase() : void 8 : void 8, filter) || _.includes((ref1$ = member.dirDisplayName) != null ? typeof ref1$.toLowerCase == 'function' ? ref1$.toLowerCase() : void 8 : void 8, filter) || _.includes((ref2$ = member.groupInternalName) != null ? typeof ref2$.toLowerCase == 'function' ? ref2$.toLowerCase() : void 8 : void 8, filter) || _.includes(typeof subgroups.toLowerCase == 'function' ? subgroups.toLowerCase() : void 8, filter) || _.includes(role != null ? role.toLowerCase() : void 8, filter);
});
};
})();
pages/group/group/members/list/calcData/calc.ls
(function(){
return function(page){
if (page.groupDescription.type === "family") {
return inc("calcFamily/calc")(page);
} else {
return inc("calcClass/calc")(page);
}
};
})();
pages/group/group/members/list/calcData/calcClass/calc.ls
(function(){
return function(page){
var mds, data, i$, ref$, len$, d;
mds = page.memberDescriptions;
data = [];
if (page.groupDescription.userRoles.admin) {
data.push({
type: "sortLabel"
});
}
if (!page.groupDescription.userRoles.admin) {
mds.pupil = _.filter(mds.pupil, function(d){
return !d.isPreparedMember;
});
mds.teacher = _.filter(mds.teacher, function(d){
return !d.isPreparedMember;
});
}
if (mds.pupil.length > 0) {
data.push({
type: "headline",
role: "pupil",
total: mds.pupil.length
});
for (i$ = 0, len$ = (ref$ = mds.pupil).length; i$ < len$; ++i$) {
d = ref$[i$];
data.push(d);
}
}
if (mds.teacher.length > 0) {
data.push({
type: "headline",
role: "teacher",
total: mds.teacher.length
});
for (i$ = 0, len$ = (ref$ = mds.teacher).length; i$ < len$; ++i$) {
d = ref$[i$];
data.push(d);
}
}
data.push({
type: "footer"
});
return data;
};
})();
pages/group/group/members/list/calcData/calcFamily/calc.ls
(function(){
return function(page){
var m, data, i$, ref$, len$, d;
m = page.memberDescriptions;
data = [];
data.push({
type: "headline",
role: "family",
total: m.pupil.length + m.admin.length
});
for (i$ = 0, len$ = (ref$ = m.pupil).length; i$ < len$; ++i$) {
d = ref$[i$];
data.push(d);
}
for (i$ = 0, len$ = (ref$ = m.admin).length; i$ < len$; ++i$) {
d = ref$[i$];
data.push(d);
}
data.push({
type: "footer"
});
return data;
};
})();
pages/group/group/members/list/list.ls
(function(){
var lastListPosition;
lastListPosition = null;
return function(page){
var data;
data = inc("calcData/calc")(page);
return page.list = ListDiv({
data: data,
row: inc("row/row")(page),
nearScopeSize: 0.5,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 0.5
},
listPosition: page.params.history <= 0 ? lastListPosition : void 8
}).css({
height: "var(--centerHeight)"
}).onElementClass("onPageFinish", function(){
return lastListPosition = page.list.getListPosition();
});
};
})();
pages/group/group/members/list/row/footer/row.ls
(function(){
return function(){
return Div({
height: "2em"
});
};
})();
pages/group/group/members/list/row/headline/row.ls
(function(){
return function(page, data){
var label, mds, isTopTeacherHeadline;
label = data.role === "pupil"
? T("pupilPl")
: data.role === "teacher"
? T("teacherPl")
: T("familyPl");
if (data.total > 1) {
label += " (" + data.total + ")";
}
mds = page.memberDescriptions;
isTopTeacherHeadline = page.groupDescription.userRoles.admin && ((data.role === "pupil" && mds.pupil.length > 0) || (data.role === "teacher" && mds.pupil.length === 0));
return Div({
display: "flex",
textAlign: "center",
fontWeight: "bold",
borderBottom: "1px solid " + Color.grey[200],
background: "white",
padding: isTopTeacherHeadline ? "0 1em 0.7em" : "2em 1em 0.7em"
}).html(label);
};
})();
pages/group/group/members/list/row/member/arrowIcon/icon.ls
(function(){
return function(page, member){
if (page.groupDescription.userRoles.admin) {
return Svg({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
});
}
};
})();
pages/group/group/members/list/row/member/avatar/activity/activity.ls
(function(){
return function(lastActivityAt){
var l;
l = inc("/lib/util/formatDateAsAgeString/format")(lastActivityAt);
l = l.labelUserActivity;
return Div({
fontSize: "0.75em",
paddingTop: "0.2em",
color: l.color
}).html(l.label);
};
})();
pages/group/group/members/list/row/member/avatar/avatar.ls
(function(){
return function(page, member){
return Div({
display: "flex",
width: "4em",
marginRight: "0.5em",
flexDirection: "column"
}).onScopeRender(function(){
return this.append(inc("/lib/gui/avatar/avatar")(member.avatar, "head", false).css({
width: "2em",
height: "2em"
}), member.isPreparedMember
? inc("preparedLabel/label")()
: member.lastActivityAt != null && page.groupDescription.userRoles.admin ? inc("activity/activity")(member.lastActivityAt) : void 8);
});
};
})();
pages/group/group/members/list/row/member/avatar/preparedLabel/label.ls
(function(){
return function(){
return Div({
fontSize: "0.75em",
paddingTop: "0.2em",
color: Color.grey[500]
}).html(T("prepared"));
};
})();
pages/group/group/members/list/row/member/center/center.ls
(function(){
return function(page, member){
return Div({
flex: "1 1 auto",
textAlign: "left",
margin: "0.8em 0"
}).html(inc("name/name")(member, page), inc("dirDisplayName/dirDisplayName")(member, page), inc("subgroups/subgroups")(member, page), inc("familyAdmin/familyAdmin")(member, page), inc("markForDeleteInfo/info")(member));
};
})();
pages/group/group/members/list/row/member/center/dirDisplayName/dirDisplayName.ls
(function(){
return function(data, page){
var d;
if (!page.groupDescription.userRoles.admin) {
return;
}
d = data.dirDisplayName;
if (!d) {
return;
}
d = inc("/lib/util/tagSearchInString/tagSearchInString")(d, page.params.search, "");
return Div({
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis",
color: Color.grey[700],
fontSize: "0.85em"
}).secureHtml("@ " + d);
};
})();
pages/group/group/members/list/row/member/center/familyAdmin/familyAdmin.ls
(function(){
return function(data, page){
if (page.groupDescription.type !== "family" || data.role === "pupil") {
return;
}
return Div({
display: "inline-block",
padding: "0 0.4em",
background: Color.grey[250],
fontSize: "0.9em",
borderRadius: "3px"
}).html(T("familyAdmin"));
};
})();
pages/group/group/members/list/row/member/center/markForDeleteInfo/info.ls
(function(){
return function(member){
var date;
if (!member.markForDelete) {
return;
}
date = inc("/lib/util/formatDate2/format")(member.markForDelete.dueDate).formats.dateShort;
return Div({
color: Color.red[500],
fontSize: "0.85em"
}).html(SvgIcon({
svg: path("/lib/svg/shape/alert.svg"),
color: Color.red[500]
}).css({
verticalAlign: "-0.1em",
margin: "0.3em 0.2em 0 0"
}), (function(){
switch (member.markForDelete.reason) {
case "inactive":
return T("markForDeleteInfoInactive", date);
case "selfDelete":
return T("markForDeleteInfoSelf", date);
case "dirAdminDelete":
return T("markForDeleteInfoSchool", date);
}
}()));
};
})();
pages/group/group/members/list/row/member/center/name/name.ls
(function(){
return function(data, page){
var d, name;
d = data;
name = !d.groupInternalName || d.groupInternalName === d.displayName || d.role === "teacher" || !page.groupDescription.userRoles.admin
? data.displayName
: d.groupInternalName + " (" + d.displayName + ")";
name = inc("/lib/util/tagSearchInString/tagSearchInString")(name, page.params.search, "");
return Div({
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis"
}).secureHtml(name);
};
})();
pages/group/group/members/list/row/member/center/subgroups/subgroups.ls
(function(){
return function(data, page){
var subgroups, s;
if (!page.groupDescription.userRoles.admin) {
return;
}
subgroups = inc("/data/group/calcSubgroups/calc")(page.groupDescription.groupCode, data.publicId);
if (subgroups.length === 0) {
return;
}
return Div({
display: "flex",
fontSize: "0.8em",
justifyContent: "flex-start",
flexWrap: "wrap",
margin: "0.1em 0 0 -0.3em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = subgroups).length; i$ < len$; ++i$) {
s = ref$[i$];
results$.push(inc("/pages/content/_shared/pinTag/tag")(s));
}
return results$;
}()));
};
})();
pages/group/group/members/list/row/member/lastViewed/lastViewed.ls
(function(){
return function(isLastViewed){
if (!isLastViewed) {
return;
}
return Div({
position: "absolute",
top: 0,
right: 0,
padding: "0.05em 0.2em 0",
fontSize: "0.7em",
color: Color.grey[500]
}).html(T("lastViewed"));
};
})();
pages/group/group/members/list/row/member/row.ls
(function(){
return function(page, data){
var groupCode, publicId, isLastViewed, tapTeacher, tapZoom, b, ref$;
groupCode = page.groupDescription.groupCode;
publicId = data != null ? data.publicId : void 8;
isLastViewed = groupCode + publicId === inc("/lib/util/cache/get/get")("groupMemberLast");
tapTeacher = function(){
inc("/lib/util/cache/set/set")("groupMemberLast", groupCode + publicId);
return inc("/pages/group/member/start")(groupCode, publicId);
};
tapZoom = function(){
var ref$;
return (ref$ = this.findFirst(".avatar")) != null ? ref$.zoom() : void 8;
};
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
marginTop: "-2px",
minHeight: "4.2em",
background: "white"
}).append(inc("avatar/avatar")(page, data), inc("center/center")(page, data), inc("arrowIcon/icon")(page, data), inc("lastViewed/lastViewed")(isLastViewed)).tap(page.groupDescription.userRoles.admin
? tapTeacher
: ((ref$ = data.avatar) != null ? ref$.version : void 8) === 2 ? tapZoom : void 8);
};
})();
pages/group/group/members/list/row/row.ls
(function(){
return function(page){
return function(data){
return Div().html(Div({
width: "35em",
maxWidth: "95%",
margin: "-2px auto 0"
}).html(data.type === "headline"
? inc("headline/row")(page, data)
: data.type === "sortLabel"
? inc("sortLabel/row")(page)
: data.type === "footer"
? inc("footer/row")()
: inc("member/row")(page, data)));
};
};
})();
pages/group/group/members/list/row/sortLabel/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/shape/arrow-down-sort.svg"),
color: Color.grey[600]
});
};
})();
pages/group/group/members/list/row/sortLabel/items/items.ls
(function(){
return function(page, options){
var i$, len$, results$ = [];
for (i$ = 0, len$ = options.length; i$ < len$; ++i$) {
results$.push((fn$.call(this, options[i$])));
}
return results$;
function fn$(s){
return {
label: s.label,
icon: path("/lib/svg/shape/arrow-down-sort.svg"),
iconColor: Color.grey[750],
click: function(){
if (s.id === page.sorting) {
return;
}
inc("/lib/util/cache/set/set")("groupMembersSorting", s.id);
return startPage({
history: 0
});
}
};
}
};
})();
pages/group/group/members/list/row/sortLabel/options/options.ls
(function(){
return function(page){
var sortings, ref$;
sortings = [
{
id: "nameAsc",
label: T("nameLabel")
}, (ref$ = page.groupDescription.school) != null && ref$.hasDirAccess ? {
id: "dirNameAsc",
label: T("dirNameAscLabel")
} : void 8, {
id: "lastActiveDesc",
label: T("lastActiveLabel")
}
];
return _.compact(sortings);
};
})();
pages/group/group/members/list/row/sortLabel/row.ls
(function(){
return function(page){
var options, tap, div;
options = inc("options/options")(page);
tap = function(){
return OverlayMenu({
referenceDiv: div,
items: inc("items/items")(page, options),
direction: "down left",
adjustXY: "-4 -6"
});
};
return Div({
display: "flex",
justifyContent: "flex-end",
margin: "1em 0 0.7em"
}).html(div = Div({
display: "flex",
padding: "0.3em",
fontSize: "0.9em"
}).html(inc("icon/icon")(page), inc("text/text")(page, options)).tap(tap));
};
})();
pages/group/group/members/list/row/sortLabel/text/text.ls
(function(){
return function(page, options){
var label;
label = _.find(options, {
id: page.sorting
}).label;
return Div({
color: Color.grey[600],
fontSize: "0.9em",
paddingLeft: "0.1em"
}).html(label);
};
})();
pages/group/group/members/load/load.ls
(function(){
return function(page, onDone){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: page.groupDescription.groupCode,
requiredVisibleDiv: page,
onError: function(error){
debug(error);
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, true);
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onLoaded: function(result){
page.initialMemberDescriptions = result;
return onDone();
}
});
};
})();
pages/group/group/members/notFound/notFound.ls
(function(){
return function(page){
return Div({
padding: "1em"
}).html(page.filter
? T("noMembersFoundWith", page.filter)
: T("noMembersFound"));
};
})();
pages/group/group/members/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.sorting = inc("calcSorting/calc")(page);
return {
navCategory: "groups",
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var load, create, that, ref$;
load = function(){
return inc("load/load")(page, page.filterMembers);
};
page.onSearch = function(searchQuery){
page.params.search = searchQuery;
return page.filterMembers();
};
page.filterMembers = function(){
return inc("filterMembers/calc")(page, page.sortMembers);
};
page.sortMembers = function(mds){
return inc("sortMembers/sort")(page, mds, create);
};
create = function(mds){
inc("/lib/util/cache/set/set")("filteredSortedGroupMemberDescriptions", page.groupDescription.groupCode, mds);
page.memberDescriptions = mds;
page.topbar.update();
return page.html(mds.pupil.length || mds.teacher.length || mds.admin.length
? inc("list/list")(page)
: (page.topbar.updateActions(), inc("notFound/notFound")(page)));
};
page.html(inc("/lib/gui/spinner/spinner")()).tap({
down: function(){
var ref$;
return (ref$ = page.input) != null ? ref$.stop() : void 8;
},
animation: "none"
}).css({
cursor: "default"
});
if (that = page.params.search) {
page.topbar.setSearchValue(that);
if ((ref$ = app.lastInput) != null) {
ref$.stop();
}
}
return load();
}
};
};
})();
pages/group/group/members/sortMembers/sort.ls
(function(){
return function(page, descriptions, onDone){
var sorting, key, members;
if (!descriptions) {
return;
}
sorting = page.sorting;
if (!sorting) {
onDone(descriptions);
return;
}
for (key in descriptions) {
members = descriptions[key];
descriptions[key] = inc("sort/sort")(key, members, sorting);
}
return onDone(descriptions);
};
})();
pages/group/group/members/sortMembers/sort/sort.ls
(function(){
return function(key, members, sorting){
var membersForSort, sortKey, sortOrderSign, locale, compare;
membersForSort = _.map(members, function(m){
var ref$;
m.sortDisplayName = key === "pupil"
? m.groupInternalName || m.displayName
: m.displayName;
m.sortDisplayName = (ref$ = m.sortDisplayName) != null ? ref$.toLowerCase() : void 8;
if (m.isPreparedMember && m.role === "pupil") {
m.lastActivityAt = "1970";
}
return m;
});
sortKey = _.startsWith(sorting, "lastActive")
? "lastActivityAt"
: _.startsWith(sorting, "name")
? "sortDisplayName"
: _.startsWith(sorting, "dirName") ? "dirDisplayName" : void 8;
sortOrderSign = _.endsWith(sorting, "Asc")
? 1
: _.endsWith(sorting, "Desc") ? -1 : void 8;
locale = engine.guiLanguage.replace("_", "-");
compare = function(v1, v2){
if (v1 == null && v2 == null) {
return 0;
}
if (v1 == null) {
return 1;
}
if (v2 == null) {
return -1;
}
return v1.localeCompare(v2, locale) * sortOrderSign;
};
membersForSort.sort(function(m1, m2){
return compare(m1[sortKey], m2[sortKey]);
});
return membersForSort;
};
})();
pages/group/group/other/addCoTeacher/00_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "addCoTeacher");
},
animation: "slideDown"
});
},
title: T("addCoTeacher")
});
};
})();
pages/group/group/other/addCoTeacher/_t.ls
(function(){
return {
addCoTeacher: {
de: "Lehrkraft hinzufügen",
en: "Add teacher",
fr: "Ajouter un·e professeur·e",
es: "Agregar docente",
pt: "Adicionar professor(a)"
},
teacherCode: {
de: "Lehrer-Code",
en: "Teacher code",
fr: "Code-professeur",
es: "Clave-docente",
pt: "Código-professores"
},
teacherCodeCreated: {
de: "Der Lehrer-Code wurde erstellt.",
en: "The teacher code was created.",
fr: "Le code-professeur a été créé.",
es: "Se generó una clave-docente.",
pt: "O código-professores foi gerado."
},
createGroupCodeInviteTeachers: {
de: "Erstelle hier einen Lehrer-Code, um eine weitere Lehrkraft zu dieser Gruppe einzuladen.
Alle Lehrkräfte der Gruppe können die Informationen zu den Schüler/innen der Gruppe einsehen, Inhalte pinnen und Gruppenmitglieder verwalten.",
en_gb: "Create a teacher code here to invite more teachers to this group.
All teachers in the group can see information about the pupils, pin learning material and manage group members.",
en: "Create a teacher code here in order to invite more teachers to this group.
All teachers in the group can see information about the students, pin learning material and manage group members.",
fr: "Crée un code-professeur ici pour inviter des professeurs à ce groupe.
Tous les professeurs de ce groupe peuvent voir les informations des élèves, épingler du contenu d'apprentissage et gérer les membres du groupe.",
es: "Genera aquí una clave-docente para invitar a un/a docente nuevo/a al grupo.
Los y las docentes de este grupo pueden ver la información de los estudiantes, asignar contenidos y administrar a los miembros de los grupos.",
pt: "Gere aqui um código-professores para convidar novos professores a entrar no grupo.
Os professores deste grupo podem ver as informações dos(as) alunos(as), marcar conteúdos e administrar os membros dos grupos."
},
createTeacherCode: {
de: "Lehrer-Code erstellen",
en: "Create teacher code",
fr: "Créer un code-professeur",
es: "Genera una clave-docente",
pt: "Criar um código-professores"
}
};
})();
pages/group/group/other/addCoTeacher/createCode/create.ls
(function(){
return function(page){
page.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addPreparedMember/add"),
params: {
groupCode: page.groupDescription.groupCode,
name: T("teacherCode"),
role: "teacher"
},
requiredVisibleDiv: page,
onCompleted: function(result){
if (result.status === "ok") {
startPage({
history: -1,
animation: "slideDown"
});
return setTimeout(function(){
return inc("/lib/gui/toast/toast")({
label: T("teacherCodeCreated")
});
}, 500);
} else {
if (result.status === "error_member_limit_reached") {
inc("/lib/gui/infoPopup/popup")({
label: T("errorMaxMembersReached")
});
return page.hideSpinner();
}
}
},
onError: function(error){
debug(error);
page.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
page.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/other/addCoTeacher/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var button, spinner;
page.append(Div({
width: "35em",
maxWidth: "90%",
margin: "0 auto"
}).html(T("createGroupCodeInviteTeachers")), button = Button(T("createTeacherCode")).css({
marginTop: "1em"
}).tap(function(){
return inc("createCode/create")(page);
}), spinner = inc("/lib/gui/spinner/spinner")().css({
marginTop: "1em"
}).hide());
page.showSpinner = function(){
button.hide();
return spinner.show();
};
return page.hideSpinner = function(){
button.show();
return spinner.hide();
};
}
};
};
})();
pages/group/group/other/addDirMember/_t.ls
(function(){
return {
search: {
de: "Suchen",
en: "Search",
fr: "Rechercher",
es: "Buscar",
pt: "Buscar"
},
addDirectoryPupil: {
de: "Schulverzeichnis-Schüler/in hinzufügen",
en_gb: "Add school directory pupil",
en: "Add school directory student",
fr: "Ajouter un·e élève du répertoire",
es: "Agregar un estudiante al directorio",
pt: "Adicionar aluno(a) ao Diretório Escolar"
},
directoryTitle: {
de: "Schulverzeichnis-Anrede",
en: "School directory title",
fr: "Titre du répertoire",
es: "Título en el directorio",
pt: "Título do Diretório Escolar"
},
directoryFirstName: {
de: "Schulverzeichnis-Vorname",
en: "School directory first name",
fr: "Prénom du répertoire",
es: "nombre en el directorio",
pt: "Nome no Diretório Escolar"
},
directorySurname: {
de: "Schulverzeichnis-Nachname",
en_gb: "School directory surname",
en: "School directory last name",
fr: "Nom de famille du répertoire",
es: "apellido en el directorio",
pt: "Sobrenome no Diretório Escolar"
},
directoryClass: {
de: "Schulverzeichnis-Klasse",
en_gb: "School directory year",
en: "School directory grade",
fr: "Classe du répertoire",
es: "grado en el directorio",
pt: "Série no Diretório Escolar"
},
addNumberPupil: {
de: "Möchtest du ((diese/n Schüler/in | diese $1 Schüler/innen)) jetzt zur Gruppe hinzufügen?",
en_gb: "Would you like to add ((this pupil | these $1 pupils)) to the group now?",
en: "Would you like to add ((this student | these $1 students)) to the group now?",
fr: "Veux-tu ajouter ((cet·te élève | ces $1 élèves)) au groupe maintenant ?",
es: "¿Quieres agregar a ((este/a estudiante | estos/as $1 estudiantes)) al grupo ahora?",
pt: "Você quer adicionar ((este(a) aluno(a) | estes(as) $1 alunos(as))) ao grupo agora?"
},
prepared: {
de: "vorbereitet",
en: "prepared",
fr: "Prêt·e",
es: "Listo",
pt: "preparado"
},
numberGroups: {
de: "(($1 Gruppe | $1 Gruppen))",
en: "(($1 group | $1 groups))",
fr: "(($1 groupe | $1 groupe | $1 groupes))",
es: "(($1 grupo | $1 grupos))",
pt: "(($1 grupo | $1 grupos))"
},
membersOfThisGroup: {
de: "Mitglied dieser Gruppe",
en: "Member of this group",
fr: "Membre de ce groupe",
es: "Miembros de este grupo",
pt: "Membros deste grupo"
},
errorMessageLoading: {
de: "Ups, es können keine Daten geladen werden.",
en: "Oops, no data can be loaded.",
fr: "oups… aucune donnée ne peut être chargée.",
es: "¡Ups! No se pudieron cargar los datos.",
pt: "Ops, não foi possível carregar os dados."
}
};
})();
pages/group/group/other/addDirMember/_topbar/_t.ls
(function(){
return {
search: {
de: "Suchen",
en: "Search",
fr: "Rechercher",
es: "Buscar",
pt: "Buscar"
},
createNew: {
de: "Neu erstellen",
en: "Create new",
fr: "Créer",
es: "Crear nuevo",
pt: "Criar novo"
},
addDirectoryPupil: {
de: "Schulverzeichnis-Schüler/in hinzufügen",
en_gb: "Add school directory pupil",
en: "Add school directory student",
fr: "Ajouter un·e élève du répertoire",
es: "Agregar un estudiante al directorio",
pt: "Adicionar um(a) aluno(a) ao Diretório Escolar"
},
addDirectoryTeacher: {
de: "Schulverzeichnis-Lehrkraft hinzufügen",
en: "Add school directory teacher",
fr: "Ajouter un·e professeur·e du répertoire",
es: "Agregar un/a docente al directorio",
pt: "Adicionar um(a) professor(a) ao Diretório Escolar"
},
searchPlaceholderPupil: {
de: "Name, Klasse oder Referenz",
en_gb: "Name, year or reference",
en: "Name, grade or reference",
fr: "Nom, classe ou référence",
es: "Nombre, grado o referencia",
pt: "Nome, série ou referência"
},
searchPlaceholderTeacher: {
de: "Suche nach Name oder Referenz",
en: "Search by name or reference",
fr: "Rechercher par nom ou référence",
es: "Buscar por nombre o referencia",
pt: "Buscar por nome ou referência"
}
};
})();
pages/group/group/other/addDirMember/_topbar/tabMenuItems/tabMenuItems.ls
(function(){
return function(page){
var items;
return items = [
{
label: T("search"),
selected: _.includes(app.currentPagePath, "search"),
click: function(){
return startPage({
path: path("../../search/page"),
history: 0,
params: _.cloneDeep(page.params)
});
}
}, {
label: T("createNew"),
selected: _.includes(app.currentPagePath, "new"),
click: function(){
return startPage({
path: path("../../new/page"),
history: 0,
params: _.cloneDeep(page.params)
});
}
}
];
};
})();
pages/group/group/other/addDirMember/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: function(e){
return startPage({
history: -1,
animation: "slideDown"
});
},
title: page.category === "dirPupil"
? T("addDirectoryPupil")
: T("addDirectoryTeacher"),
onSearch: _.includes(app.currentPagePath, "search") ? function(s){
var ref$;
return typeof (ref$ = app.currentPage).onSearch == 'function' ? ref$.onSearch(s) : void 8;
} : void 8,
searchPlaceholder: page.category === "dirPupil"
? T("searchPlaceholderPupil")
: T("searchPlaceholderTeacher"),
tabMenuItems: page.category === "dirPupil" ? function(){
return inc("tabMenuItems/tabMenuItems")(page);
} : void 8
});
};
})();
pages/group/group/other/addDirMember/new/_t.ls
(function(){
return {
directoryTitle: {
de: "Schulverzeichnis-Anrede",
en: "School directory title",
fr: "Titre du répertoire scolaire",
es: "Título en el directorio",
pt: "Título no Diretório Escolar"
},
directoryFirstName: {
de: "Schulverzeichnis-Vorname",
en: "School directory first name",
fr: "Prénom du répertoire",
es: "Nombre en el directorio",
pt: "Nome no Diretório Escolar"
},
directorySurname: {
de: "Schulverzeichnis-Nachname",
en_gb: "School directory surname",
en: "School directory last name",
fr: "Nom de famille du répertoire",
es: "Apellido en el directorio",
pt: "Sobrenome no Diretório Escolar"
},
directoryClass: {
de: "Schulverzeichnis-Klasse",
en_gb: "School directory year",
en: "School directory grade",
fr: "Classe du répertoire",
es: "Grado en el directorio",
pt: "Série no Diretório Escolar"
},
dirReference: {
de: "Schulverzeichnis-Referenz",
en: "School directory reference",
fr: "Référence du répertoire",
es: "Referencia en el directorio",
pt: "Referência no Diretório Escolar"
},
addButton: {
de: "Hinzufügen",
en: "Add",
fr: "Ajouter",
es: "Agregar",
pt: "Adicionar"
},
referenceInfo: {
de: "Die Schulverzeichnis-Referenz ist ein optionales Feld und muss nicht ausgefüllt werden. Du kannst damit eine eindeutige Nutzer-ID vergeben, mit der man den/die Nutzer/in wiederfinden kann.",
en_gb: "The school directory reference is an optional field and can be left blank. With this reference you are able to assign a unique ID to each user, which can help you to find the user in the future.",
en: "The school directory reference is an optional field and can be left blank. With this reference you are able to assign a unique ID to each user, which can help you to find the user in the future.",
fr: "La référence du répertoire scolaire est un champ optionnel qui peut rester vide. Avec cette référence, tu peux attribuer un numéro d'identification unique pour trouver un·e utilisateur·rice.",
es: "La referencia en el directoiro es un campo opcional que puede dejarse en blanco. Con esta referencia puedes asignar un numéro de identificación único para cada usuario/a, y así poder localizarlo/a fácilmente en el futuro.",
pt: "A referência no Diretório Escolar é um campo opcional e não precisa ser preenchido. Com essa referência você pode atribuir um número de identificação único para cada conta, o que facilitará sua localização no futuro."
},
emptyNameError: {
de: "Der Vorname darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le prénom ne peut pas rester vide.",
es: "El nombre no puede quedar en blanco.",
pt: "O nome não pode ficar em branco."
},
emptySurnameError: {
de: "Der Nachname darf nicht leer sein.",
en_gb: "The surname cannot be left blank.",
en: "The last name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El apellido no puede quedar en blanco.",
pt: "O sobrenome não pode ficar em branco."
}
};
})();
pages/group/group/other/addDirMember/new/form/dirReferenceLabel/label.ls
(function(){
return function(){
return Div({
display: "inline-block"
}).html(T("dirReference"), SvgIcon({
svg: path("/lib/svg/shape/help.svg"),
color: Color.grey[700]
}).css({
marginLeft: "0.4em",
marginTop: "0.1em"
})).tap(function(){
return inc("popupInfo/popup")();
});
};
})();
pages/group/group/other/addDirMember/new/form/dirReferenceLabel/popupInfo/popup.ls
(function(){
return function(){
var div, popup;
div = Div({
padding: "1em"
}).append(Div({
lineHeight: "1.5em",
paddingBottom: "1em"
}).html(T("referenceInfo")), Button(T("ok")).tap(function(){
return popup.close();
}).css({
minWidth: "6em"
}));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/group/group/other/addDirMember/new/form/form.ls
(function(){
return function(page, onSubmit){
return Div({
width: "20em",
maxWidth: "95%",
margin: "0 auto",
textAlign: "left"
}).html(page.form = inc("/lib/gui/multiform/multiform")({
onSubmit: onSubmit,
fields: [
!_.includes(page.category, "Pupil") ? {
id: "dirTitle",
label: T("directoryTitle"),
type: "input"
} : void 8, {
id: "dirName",
label: T("directoryFirstName"),
type: "input"
}, {
id: "dirSurname",
label: T("directorySurname"),
type: "input"
}, _.includes(page.category, "Pupil") ? {
id: "dirClass",
label: T("directoryClass"),
type: "input"
} : void 8, {
id: "dirReference",
label: inc("dirReferenceLabel/label")(),
type: "input"
}, {
id: "button",
label: T("addButton"),
type: "button"
}
]
}));
};
})();
pages/group/group/other/addDirMember/new/page.ls
(function(){
return function(page){
var ref$;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.schoolCode = (ref$ = page.groupDescription.school) != null ? ref$.schoolCode : void 8;
page.schoolDescription = inc("/data/school/calcSchoolDescription/calc")(page.schoolCode);
page.category = page.params.category;
page.categories = inc("/lib/util/memberCategories/categories")();
return {
top: function(){
return inc("../_topbar/topbar")(page);
},
start: function(){
var onSubmit;
onSubmit = function(values){
var ref$;
if ((ref$ = app.lastInput) != null) {
ref$.stop();
}
return inc("submit/submit")(page, values);
};
return page.css({
width: "20em",
maxWidth: "95%",
margin: "0 auto",
textAlign: "left"
}).append(inc("form/form")(page, onSubmit));
}
};
};
})();
pages/group/group/other/addDirMember/new/submit/submit.ls
(function(){
return function(page, v){
var ref$;
if (!v.dirName) {
inc("/lib/gui/toast/toast")({
label: T("emptyNameError")
});
return;
}
if (!v.dirSurname) {
inc("/lib/gui/toast/toast")({
label: T("emptySurnameError")
});
return;
}
page.form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/school/admin/addPreparedUser/add"),
params: {
creatorPublicId: log.findLast("setPublicId").value,
schoolCode: page.schoolCode,
category: page.category,
dirTitle: (ref$ = v.dirTitle) != null ? ref$ : "",
dirName: (ref$ = v.dirName) != null ? ref$ : "",
dirSurname: (ref$ = v.dirSurname) != null ? ref$ : "",
dirClass: (ref$ = v.dirClass) != null ? ref$ : "",
dirReference: (ref$ = v.dirReference) != null ? ref$ : "",
groupCode: page.groupDescription.groupCode
},
requiredVisibleDiv: page,
onCompleted: function(result){
if (result.status === "ok") {
return startPage({
history: -1,
animation: "slideRight"
});
} else if (result.status === "error_member_limit_reached") {
inc("/lib/gui/infoPopup/popup")({
label: T("errorMaxMembersReached")
});
return page.form.hideSpinner();
}
},
onError: function(e){
page.form.hideSpinner();
inc("/lib/gui/errorPopup/popup")();
return debug(e);
},
onOffline: function(){
page.form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/other/addDirMember/search/_bottom/_t.ls
(function(){
return {
buttonReset: {
de: "Auswahl aufheben",
en: "Deselect",
fr: "Désélectionner",
es: "Anular selección",
pt: "Excluir seleção"
},
buttonSelectAll: {
de: "Alle auswählen",
en: "Select all",
fr: "Sélectionner tout",
es: "Seleccionar todo",
pt: "Selecionar tudo"
},
buttonContinue: {
de: "(( | $1x | $1x)) Hinzufügen",
en: "Add (( | $1x | $1x))",
fr: "Ajouter (( | $1x | $1x))",
es: "Agregar (( | $1x | $1x))",
pt: "Adicionar (( | $1x | $1x))"
},
confirmPopupPupil: {
de: "Möchtest du ((diese/n Schüler/in | diese $1 Schüler/innen)) jetzt zur Gruppe hinzufügen?",
en_gb: "Do you want to add ((this pupil | these $1 pupils)) to the group?",
en: "Do you want to add ((this student | these $1 students)) to the group?",
fr: "Veux-tu ajouter ((cet·te élève | ces $1 élèves)) au groupe ?",
es: "¿Quieres agregar a ((este/a estudiante | estos/as $1 estudiantes)) a este grupo?",
pt: "Você quer adicionar ((este(a) aluno(a) | estes(as) $1 alunos(as))) a esse grupo?"
},
confirmPopupTeacherSingular: {
de: "Möchtest du diese Lehrkraft jetzt zur Gruppe hinzufügen? Sie bekommt die gleichen Rechte wie du.",
en_gb: "Do you want to add this teacher to the group? They will have the same permissions as you.",
en: "Do you want to add this teacher to the group? They will have the same rights as you.",
fr: "Veux-tu ajouter ce·tte professeur·e au groupe ? Il·Elle aura les mêmes droits que toi.",
es: "¿Quieres agregar a este/a docente? Él o ella tendrá los mismos derechos que tú.",
pt: "Você quer adicionar este(a) professor(a) a esse grupo? Ele(a) terá os mesmos direitos que você."
},
confirmPopupTeacherPlural: {
de: "Möchtest du diese Lehrkräfte jetzt zur Gruppe hinzufügen? Sie bekommen dann die gleichen Rechte wie du.",
en_gb: "Do you want to add these teachers to the group? They will have the same permissions as you.",
en: "Do you want to add these teachers to the group? They will have the same rights as you.",
fr: "Veux-tu ajouter ces professeur·es au groupe ? Ils·Elles auront les mêmes droits que toi.",
es: "¿Quieres agregar a este/a docente? Él o ella tendrá los mismos derechos que tú.",
pt: "Você quer adicionar este(a) professor(a) a esse grupo? Ele(a) terá os mesmos direitos que você."
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
addButton: {
de: "Hinzufügen",
en: "Add",
fr: "Ajouter",
es: "Agregar",
pt: "Adicionar"
}
};
})();
pages/group/group/other/addDirMember/search/_bottom/bottom.ls
(function(){
return function(page){
var total, ref$, div;
total = (ref$ = _.filter(page.members, {
selected: true
})) != null ? ref$.length : void 8;
div = Div({
padding: "0.3em",
display: "flex"
}).html(inc("buttonReset/button")(page, total), inc("buttonContinue/button")(page, total));
div.update = function(){
return div.replaceWith(inc(THISFILE)(page));
};
return page.buttons = div;
};
})();
pages/group/group/other/addDirMember/search/_bottom/buttonContinue/button.ls
(function(){
return function(page, total){
var tap;
tap = function(){
return inc("confirmPopup/popup")(page, total);
};
return Button(T("buttonContinue", total)).css({
minWidth: "8em",
margin: "0 0.2em",
textAlign: "center"
}).css(total === 0 ? {
opacity: 0.5,
pointerEvents: "none"
} : void 8).tap(tap);
};
})();
pages/group/group/other/addDirMember/search/_bottom/buttonContinue/confirmPopup/popup.ls
(function(){
return function(page, total){
var onOk;
onOk = function(){
return inc("../submit/submit")(page);
};
app.lastInput = undefined;
return inc("/lib/gui/confirmPopup/popup")({
yesLabel: T("addButton"),
noLabel: T("cancelButton"),
label: page.category === "dirPupil"
? T("confirmPopupPupil", total)
: total === 1
? T("confirmPopupTeacherSingular")
: T("confirmPopupTeacherPlural"),
done: function(confirm){
var ref$;
if (confirm) {
onOk();
}
return (ref$ = app.lastInput) != null ? ref$.stop() : void 8;
}
});
};
})();
pages/group/group/other/addDirMember/search/_bottom/buttonContinue/submit/submit.ls
(function(){
return function(page){
var members, publicIds, role;
members = _.filter(page.members, {
selected: true
});
publicIds = _.map(members, "publicId");
role = page.category === "dirPupil" ? "pupil" : "teacher";
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addUsersFromDirectory/add"),
params: {
groupCode: page.groupDescription.groupCode,
publicIds: publicIds,
role: role
},
requiredVisibleDiv: page,
onCompleted: function(result){
if (result.status === "ok") {
return startPage({
history: -1,
animation: "slideDown"
});
} else if (result.status === "error_member_limit_reached") {
return inc("/lib/gui/infoPopup/popup")({
label: T("errorMaxMembersReached")
});
}
},
onError: function(e){
inc("/lib/gui/errorPopup/popup")();
return debug(e);
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/other/addDirMember/search/_bottom/buttonReset/button.ls
(function(){
return function(page, total){
var tap;
tap = function(){
var selectAll, i$, ref$, len$, m;
if (!page.schoolDetails) {
return;
}
selectAll = total === 0;
for (i$ = 0, len$ = (ref$ = page.schoolDetails.members).length; i$ < len$; ++i$) {
m = ref$[i$];
m.selected = selectAll;
}
page.calcFilteredMembers();
return page.buttons.update();
};
return Button(total === 0
? T("buttonSelectAll")
: T("buttonReset")).css({
minWidth: "8em",
margin: "0 0.2em",
background: ""
}).tap(tap);
};
})();
pages/group/group/other/addDirMember/search/_t.ls
(function(){
return {
numberGroups: {
de: "(($1 Gruppe | $1 Gruppen))",
en: "(($1 group | $1 groups))",
fr: "(($1 groupe | $1 groupe | $1 groupes))",
es: "(($1 grupo | $1 grupos))",
pt: "(($1 grupo | $1 grupos))"
},
membersOfThisGroup: {
de: "Mitglied dieser Gruppe",
en: "Member of this group",
fr: "Membre de ce groupe",
es: "Miembro de este grupo",
pt: "Membros deste grupo"
},
prepared: {
de: "vorbereitet",
en: "prepared",
fr: "Prêt·e",
es: "listo",
pt: "preparado"
},
errorMessageLoading: {
de: "Ups, es können keine Daten geladen werden.",
en: "Oops, no data can be loaded.",
fr: "Oups… aucune donnée ne peut être chargée.",
es: "Ups, no se pudieron cargar los datos.",
pt: "Ops, não foi possível carregar dados."
},
newTag: {
de: "NEU",
en: "NEW",
fr: "NOUVEAU",
es: "NUEVO",
pt: "NOVO"
}
};
})();
pages/group/group/other/addDirMember/search/calcFilteredMembers/calc.ls
(function(){
return function(page, onDone){
var s, ref$;
page.members = _.filter(page.schoolDetails.members, "categories." + page.category);
s = (ref$ = page.searchQuery) != null ? ref$.toLowerCase() : void 8;
if (s) {
page.members = _.filter(page.members, function(m){
var ref$, ref1$;
return _.includes((ref$ = m.displayName) != null ? ref$.toLowerCase() : void 8, s) || _.includes((ref1$ = m.dirDisplayName) != null ? ref1$.toLowerCase() : void 8, s);
});
}
return onDone();
};
})();
pages/group/group/other/addDirMember/search/hintBox/_t.ls
(function(){
return {
hintPupil: {
de: "Bitte suche den/die Schüler/in im Schulverzeichnis. Wenn du keinen Eintrag findest, gehe bitte auf Neu erstellen.",
en_gb: "Please search for the pupil in the school directory. If you do not find an entry, please select Create new.",
en: "Please search for the student in the school directory. If you do not find an entry, please select Create new.",
fr: "Tu peux chercher l'élève dans le répertoire scolaire. Si tu ne trouves aucune entrée, sélectionne Créer.",
es: "Por favor, busca al estudiante en el directorio escolar. Si la búsqueda no da resultados, selecciona Crear.",
pt: "Por favor, busque o(a) aluno(a) no Diretório Escolar. Se não encontrar nenhum dado, selecione Criar."
}
};
})();
pages/group/group/other/addDirMember/search/hintBox/hintBox.ls
(function(){
return function(page){
var tap;
if (page.category !== "dirPupil") {
return Div();
}
tap = function(){
return startPage({
path: path("../../new/page"),
history: 0,
params: _.cloneDeep(page.params)
});
};
return Div().html(Div({
padding: "0.5em 0.6em",
maxWidth: "95%",
width: "35em",
margin: "0.8em auto 0.6em",
textAlign: "left",
lineHeight: "1.5em",
fontSize: "0.9em",
color: Color.grey[700]
}).html(T("hintPupil")).tap(tap));
};
})();
pages/group/group/other/addDirMember/search/list/list.ls
(function(){
return function(page){
return ListDiv({
data: _.concat({
type: "firstRow"
}, page.members),
row: inc("row/row")(page),
nearScopeSize: 0.5,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 0.5
}
}).css({
height: "var(--centerHeight)"
});
};
})();
pages/group/group/other/addDirMember/search/list/row/firstRow/row.ls
(function(){
return function(page){
return inc("../../../hintBox/hintBox")(page);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/avatar/activity/activity.ls
(function(){
return function(member){
var l;
l = inc("/lib/util/formatDateAsAgeString/format")(member.lastActivityAt);
l = l.labelUserActivity;
return Div({
fontSize: "0.75em",
paddingTop: "0.2em",
color: l.color
}).html(l.label);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/avatar/activity/label/label.ls
(function(){
return function(age){
return Div({
fontSize: "0.9em",
color: Color.grey[550],
flex: "1 1 auto"
}).html(label);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/avatar/avatar.ls
(function(){
return function(member){
return Div({
display: "flex",
width: "4em",
marginRight: "0.5em",
flexDirection: "column"
}).onScopeRender(function(){
return this.append(inc("/lib/gui/avatar/avatar")(member.avatar, "head", false).css({
width: "2em",
height: "2em"
}), member.isPreparedUser
? inc("preparedLabel/label")()
: member.lastActivityAt != null ? inc("activity/activity")(member) : void 8, inc("newTag/tag")(member));
});
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/avatar/newTag/tag.ls
(function(){
return function(member){
var age, ageMin;
if (!member.created) {
return;
}
age = new Date() - new Date(member.created);
ageMin = parseInt(age / (1000 * 60));
if (ageMin > 10) {
return;
}
return Div({
position: "absolute",
left: "0em",
top: "-0.4em",
background: Color.blue[500],
color: "white",
fontSize: "0.58em",
padding: "0em 0.3em"
}).html(T("newTag"));
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/avatar/preparedLabel/label.ls
(function(){
return function(){
return Div({
fontSize: "0.75em",
paddingTop: "0.2em",
color: Color.grey[500]
}).html(T("prepared"));
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/center/center.ls
(function(){
return function(member, page){
return Div({
flex: "1 1 auto",
textAlign: "left",
padding: "0.2em 0"
}).append(inc("displayName/name")(member, page), inc("dirDisplayName/name")(member, page), inc("groups/groups")(member, page));
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/center/dirDisplayName/name.ls
(function(){
return function(member, page){
var d, s;
d = member.dirDisplayName;
if (!d) {
return;
}
if (s = page.searchQuery) {
d = inc("/lib/util/tagSearchInString/tagSearchInString")(d, s, "");
}
return Div({
display: "flex",
width: "100%",
padding: "0.2em 0",
justifyContent: "flex-start",
color: Color.grey[700],
fontSize: "0.85em"
}).secureHtml("@ " + d);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/center/displayName/name.ls
(function(){
return function(member, page){
var d, s;
d = member.displayName;
if (s = page.searchQuery) {
d = inc("/lib/util/tagSearchInString/tagSearchInString")(d, s, "");
}
return Div().secureHtml(d);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/center/groups/groups.ls
(function(){
return function(member, page){
var inThisGroup, totalGroups, s;
inThisGroup = _.includes(member.groupCodes, page.groupDescription.groupCode);
totalGroups = member.groupCodes.length;
if (totalGroups === 0) {
return;
}
s = T("numberGroups", totalGroups);
return Div({
fontSize: "0.85em",
color: Color.grey[700]
}).append(!inThisGroup
? s
: [
s + ", ", Span().css({
color: Color.green[500]
}).html(T("membersOfThisGroup"))
]);
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/check/check.ls
(function(){
return function(member){
var div;
div = Div({
display: "flex",
padding: "0em 0.4em 0 0.7em",
alignSelf: "stretch"
}).addClass("update").append(SvgIcon({
svg: member.selected
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg"),
color: Color.grey[600]
}));
div.update = function(){
return div.replaceWith(inc(THISFILE)(member));
};
return div;
};
})();
pages/group/group/other/addDirMember/search/list/row/memberRow/row.ls
(function(){
return function(page, member){
var tap, create, div;
tap = function(){
var ref$;
member.selected = !member.selected;
create();
page.buttons.update();
return (ref$ = app.lastInput) != null ? ref$.stop() : void 8;
};
create = function(){
var b;
return div.html(Div({
display: "flex",
padding: "0.5em 0",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
maxWidth: "95%",
width: "35em",
margin: "-1px auto 0",
minHeight: "4em",
background: member.selected ? Color.lightBlue[50] : "white"
}).html(inc("check/check")(member), inc("avatar/avatar")(member), inc("center/center")(member, page)).tap(tap));
};
div = Div();
create();
return div;
};
})();
pages/group/group/other/addDirMember/search/list/row/row.ls
(function(){
return function(page){
return function(rowData){
if (rowData.type === "firstRow") {
return inc("firstRow/row")(page);
} else {
return inc("memberRow/row")(page, rowData);
}
};
};
})();
pages/group/group/other/addDirMember/search/loadSchoolDetails/load.ls
(function(){
return function(page, onDone){
var spinner;
page.html(spinner = inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/school/admin/membersReport/report"),
params: {
schoolCode: page.schoolCode
},
requiredVisibleDiv: spinner,
onCompleted: function(result){
if (result.status === "ok") {
page.schoolDetails = result;
return onDone();
} else {
page.html(T("errorMessageLoading"));
return debug(result);
}
},
onError: function(error){
page.html(T("errorMessageLoading"));
return debug(error);
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
};
})();
pages/group/group/other/addDirMember/search/noUsersFound/_t.ls
(function(){
return {
noMatchFoundInDirPupil: {
de: "Es wurde kein/e passende/r Schüler/in im Schulverzeichnis gefunden.",
en_gb: "No matching pupil was found in the school directory.",
en: "No matching student was found in the school directory.",
fr: "Pas d'élève correspondant·e dans le répertoire scolaire.",
es: "La búsqueda en el directorio escolar no dio resultados.",
pt: "Nenhum(a) aluno(a) correspondente foi encontrado(a) no Diretório Escolar."
},
noMatchFoundInDirTeacher: {
de: "Es wurde keine passende Lehrkraft im Schulverzeichnis gefunden.",
en: "No matching teacher was found in the school directory.",
fr: "Pas de professeur·e correspondant·e dans le répertoire scolaire.",
es: "La búsqueda en el directorio escolar no dio resultados.",
pt: "Nenhum(a) professor(a) correspondente foi encontrado(a) no Diretório Escolar."
},
noTypeExistsInDirPupil: {
de: "Es gibt noch kein/e Schüler/in im Schulverzeichnis.",
en_gb: "There is no pupil in the school directory.",
en: "There is no student in the school directory.",
fr: "Il n'y a pas encore d'élève dans le répertoire scolaire.",
es: "Aún no se ha registrado ningún estudiante en el directorio escolar.",
pt: "Ainda não há alunos no Diretório Escolar."
},
noTypeExistsInDirTeacher: {
de: "Es gibt noch keine Lehrkraft im Schulverzeichnis.",
en: "There is no teacher in the school directory.",
fr: "Il n'y a pas encore de professeur·e dans le répertoire scolaire.",
es: "Aún no se ha registrado ningún docente en el directorio escolar.",
pt: "Ainda não há professores no Diretório Escolar."
}
};
})();
pages/group/group/other/addDirMember/search/noUsersFound/noUsersFound.ls
(function(){
return function(page){
page.setBottomFreeze(0);
return Div({
display: "flex",
height: "var(--centerHeight)",
flexDirection: "column",
alignItems: "stretch"
}).html(inc("../hintBox/hintBox")(page), inc("notFound/notFound")(page));
};
})();
pages/group/group/other/addDirMember/search/noUsersFound/notFound/notFound.ls
(function(){
return function(page){
return Div({
flex: "1 1 auto",
display: "flex",
lineHeight: "1.5em",
paddingBottom: "2em"
}).html(page.searchQuery
? page.category === "dirPupil"
? T("noMatchFoundInDirPupil")
: T("noMatchFoundInDirTeacher")
: page.category === "dirPupil"
? T("noTypeExistsInDirPupil")
: T("noTypeExistsInDirTeacher"));
};
})();
pages/group/group/other/addDirMember/search/page.ls
(function(){
return function(page){
var ref$;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.schoolCode = (ref$ = page.groupDescription.school) != null ? ref$.schoolCode : void 8;
page.schoolDescription = inc("/data/school/calcSchoolDescription/calc")(page.schoolCode);
page.category = page.params.category;
page.categories = inc("/lib/util/memberCategories/categories")();
return {
top: function(){
return inc("../_topbar/topbar")(page);
},
bottom: function(){
return inc("_bottom/bottom")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var setupSearch, loadSchoolDetails, create;
setupSearch = function(){
return inc("setupSearch/setup")(page, loadSchoolDetails);
};
loadSchoolDetails = function(){
return inc("loadSchoolDetails/load")(page, page.calcFilteredMembers);
};
page.calcFilteredMembers = function(){
return inc("calcFilteredMembers/calc")(page, create);
};
create = function(){
return page.html(page.members.length === 0
? inc("noUsersFound/noUsersFound")(page)
: inc("list/list")(page));
};
return setupSearch();
}
};
};
})();
pages/group/group/other/addDirMember/search/setupSearch/setup.ls
(function(){
var lastSearchQuery;
lastSearchQuery = null;
return function(page, onDone){
var ref$;
page.onSearch = function(s){
var i$, ref$, len$, m;
if (lastSearchQuery !== s) {
lastSearchQuery = s;
page.searchQuery = s;
if (page.schoolDetails) {
for (i$ = 0, len$ = (ref$ = page.schoolDetails.members).length; i$ < len$; ++i$) {
m = ref$[i$];
m.selected = false;
}
page.buttons.update();
return page.calcFilteredMembers();
}
}
};
if (lastSearchQuery && page.params.history <= 0) {
page.searchQuery = lastSearchQuery;
page.topbar.setSearchValue(lastSearchQuery);
if ((ref$ = app.lastInput) != null) {
ref$.stop();
}
}
return onDone();
};
})();
pages/group/group/other/addFamilyMemberLoginCode/00_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: T("topbarTitle"),
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "addFamily");
},
animation: "slideDown"
});
}
});
};
})();
pages/group/group/other/addFamilyMemberLoginCode/01_code/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, cancel, loginCode, ref$;
submit = function(){
return inc("submit/submit")(page);
};
cancel = function(){
return startPage({
history: -1,
animation: "slideDown"
});
};
page.append(page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("pleaseEnterLoginCode"),
submitLabel: T("continueButton"),
screenKeyboardLayout: twitch({
de: "login",
en: "loginEN",
fr: "loginFR",
es: "loginES",
pt: "loginPT"
}),
submit: submit,
cancel: cancel
}));
if (loginCode = (ref$ = page.params) != null ? ref$.loginCode : void 8) {
page.form.input.setValue(loginCode);
}
return page.form.input.start();
}
};
};
})();
pages/group/group/other/addFamilyMemberLoginCode/01_code/submit/submit.ls
(function(){
return function(page){
var form, loginCode;
form = page.form;
loginCode = form.input.getValue();
if (loginCode === "") {
form.error.html(T("emptyCode"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addFamilyMemberLoginCode/step1/step1"),
params: {
loginCode: loginCode,
groupCode: page.params.groupCode
},
requiredVisibleDiv: form.input,
onError: function(error){
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var status;
if (result.status !== "ok") {
form.hideSpinner();
status = result.status;
if (status === "error_not_valid") {
return form.error.html(T("unknownUser"));
} else if (status === "error_member_limit_reached") {
return form.error.html(T("familyLimitReached"));
} else if (status === "error_alreadyGroupMember") {
return form.error.html(T("alreadyGroupMember"));
} else {
return inc("/lib/gui/errorPopup/popup")();
}
} else {
inc("/lib/util/cache/set/set")("addFamilyMemberUserDetails", result);
return startPage({
path: path("../../02_confirm/page"),
animation: "slideLeft"
});
}
}
});
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/avatar/avatar.ls
(function(){
return function(page){
var a, s;
a = page.userDetails.avatar;
return inc("/lib/gui/avatar/avatar")(a, "half").css({
width: s = "6em",
height: s
});
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/buttons/buttons.ls
(function(){
return function(page){
return page.buttons = inc("/lib/gui/buttonsSubmitCancel/buttons")({
cancelLabel: T("buttonBack"),
cancel: page.cancel,
submitLabel: T("buttonAdd"),
submit: page.submit
});
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/displayName/displayName.ls
(function(){
return function(page){
return Div({
padding: "1em"
}).secureHtml(page.userDetails.displayName);
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/page.ls
(function(){
return function(page){
page.userDetails = inc("/lib/util/cache/get/get")("addFamilyMemberUserDetails");
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
page.submit = function(){
return inc("submit/submit")(page);
};
page.cancel = function(){
return startPage({
history: -1,
animation: "slideRight"
});
};
return page.append(inc("title/title")(), inc("avatar/avatar")(page), inc("displayName/displayName")(page), inc("buttons/buttons")(page));
}
};
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/submit/submit.ls
(function(){
return function(page){
var groupCode, loginCode;
page.buttons.showSpinner();
groupCode = page.userDetails.groupCode;
loginCode = page.userDetails.loginCode;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addFamilyMemberLoginCode/step2/step2"),
params: {
groupCode: groupCode,
loginCode: loginCode
},
onOffline: function(){
page.buttons.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onError: function(){
page.buttons.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onCompleted: function(result){
var status, label;
if (result.status !== "ok") {
page.buttons.hideSpinner();
status = result.status;
label = status === "error_member_limit_reached"
? T("familyLimitReached")
: status === "error_alreadyGroupMember" ? T("alreadyGroupMember") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: label
});
} else {
return window.groupLogs[groupCode].sync(function(){
return startPage({
history: -2,
animation: "slideDown"
});
});
}
}
});
};
})();
pages/group/group/other/addFamilyMemberLoginCode/02_confirm/title/title.ls
(function(){
return function(){
return Div({
paddingBottom: "2em",
lineHeight: "1.5em"
}).html(T("confirm"));
};
})();
pages/group/group/other/addFamilyMemberLoginCode/_t.ls
(function(){
return {
topbarTitle: {
de: "Familienmitglied hinzufügen",
en: "Add Family Member",
fr: "Ajouter un membre de la famille",
es: "Agregar un miembro de la familia",
pt: "Adicionar um membro da família"
},
pleaseEnterLoginCode: {
de: "Trage den Anmelde-Code des Nutzers ein, den du zur Familiengruppe hinzufügen willst.",
en: "Enter the login code for the user that you want to add to your family group.",
fr: "Entre le code de connexion de l'utilisateur·rice que tu veux ajouter au groupe familial.",
es: "Ingresa la clave de acceso de la o el usuario que deseas agregar al grupo familiar.",
pt: "Digite o código de acesso do(a) usuário(a) que deseja adicionar ao grupo familiar."
},
confirm: {
de: "Möchtest du diese/n Nutzer/in jetzt als Familienmitglied aufnehmen?",
en: "Do you want to make this user a family member?",
fr: "Veux-tu ajouter cet·te utilisateur·rice comme membre de la famille ?",
es: "¿Quieres agregar esta cuenta al grupo familiar?",
pt: "Você quer adicionar este(a) usuário(a) ao grupo familiar?"
},
buttonBack: {
de: "Zurück",
en: "Back",
fr: "Retour",
es: "Anterior",
pt: "Voltar"
},
buttonAdd: {
de: "Hinzufügen",
en: "Add",
fr: "Ajouter",
es: "Agregar",
pt: "Adicionar"
},
emptyCode: {
de: "Der Code darf nicht leer sein.",
en: "The code cannot be left blank.",
fr: "Ce code ne peut pas rester vide.",
es: "La clave no puede quedar en blanco.",
pt: "O código não pode ficar em branco."
},
unknownUser: {
de: "Dieses Nutzerkonto ist unbekannt.",
en: "This user account is unknown.",
fr: "Compte inconnu.",
es: "Esta cuenta no existe.",
pt: "Esta conta não existe."
},
alreadyGroupMember: {
de: "Diese/r Nutzer/in ist bereits Familienmitglied.",
en: "This user is already a family member.",
fr: "Cet·te utilisateur·rice est déjà un membre de la famille.",
es: "El o la usuaria ya es miembro de este grupo familiar.",
pt: "Este(a) usuário(a) já é membro do grupo familiar."
},
familyLimitReached: {
de: "Das Mitglieder-Limit dieser Gruppe ist erreicht.",
en: "The group member limit has been reached.",
fr: "La limite du nombre de membres a déjà été atteinte pour ce groupe.",
es: "Has alcanzado el límite de miembros para este grupo.",
pt: "Você alcançou o limite máximo de membros para este grupo."
}
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/bottom.ls
(function(){
return function(page){
var total, ref$, div;
total = (ref$ = _.filter(page.deviceUsers, {
selected: true
})) != null ? ref$.length : void 8;
div = Div({
padding: "0.3em",
display: "flex"
}).css(total === 0 ? {
opacity: 0.5,
pointerEvents: "none"
} : void 8).html(inc("buttonReset/button")(page, total), inc("buttonContinue/button")(page, total));
div.update = function(){
return div.replaceWith(inc(THISFILE)(page));
};
return page.buttons = div;
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/buttonContinue/button.ls
(function(){
return function(page, total){
var tap;
tap = function(){
var gd, limit, available;
gd = inc("/data/group/calcGroupDescription/calc")(page.params.groupCode);
limit = 5;
available = limit - gd.members.pupil.length - gd.members.admin.length;
if (total > available) {
return inc("popupTooMany/popup")(page, available);
} else {
return inc("popupConfirm/popup")(page, total);
}
};
return Button(T("buttonContinue", total)).css({
minWidth: "8em",
margin: "0 0.2em",
textAlign: "center"
}).tap(tap);
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/buttonContinue/popupConfirm/popup.ls
(function(){
return function(page, total){
var onOk;
onOk = function(){
return inc("../submit/submit")(page);
};
return inc("/lib/gui/confirmPopup/popup")({
yesLabel: T("addButton"),
noLabel: T("cancelButton"),
label: T("popupConfirm", total),
done: function(confirm){
if (confirm) {
return onOk();
}
}
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/buttonContinue/popupTooMany/popup.ls
(function(){
return function(page, available){
var onOk;
onOk = function(){
return inc("../submit/submit")(page);
};
return inc("/lib/gui/errorPopup/popup")({
label: T("popupTooMany", available)
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/buttonContinue/submit/submit.ls
(function(){
return function(page){
var selectedUsers, logIds, groupCode;
selectedUsers = _.filter(page.deviceUsers, {
selected: true
});
logIds = _.map(selectedUsers, "logId");
groupCode = page.params.groupCode;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addFamilyMembersFromDevice/add"),
params: {
groupCode: groupCode,
logIds: logIds
},
onCompleted: function(result){
if (result.status !== "ok") {
return inc("/lib/gui/errorPopup/popup")();
} else {
return groupLogs[groupCode].sync(function(){
return startPage({
history: -1,
animation: "slideDown"
});
});
}
},
onError: function(e){
inc("/lib/gui/errorPopup/popup")();
return debug(e);
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_bottom/buttonReset/button.ls
(function(){
return function(page, total){
var tap;
tap = function(){
var i$, ref$, len$, u, lp;
for (i$ = 0, len$ = (ref$ = page.deviceUsers).length; i$ < len$; ++i$) {
u = ref$[i$];
u.selected = false;
}
lp = page.list.getListPosition();
page.list.setListPosition(lp);
return page.buttons.update();
};
return Button(T("buttonReset")).css({
minWidth: "8em",
margin: "0 0.2em",
background: ""
}).tap(tap);
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_t.ls
(function(){
return {
topbarTitle: {
de: "Familienmitglieder hinzufügen",
en: "Add Family Members",
fr: "Ajouter des membres",
es: "Agregar miembros",
pt: "Adicionar membros"
},
chooseFromDevice: {
de: "Welche auf diesem Gerät gespeicherten Nutzerkonten möchtest du zur Gruppe hinzufügen?",
en: "Which of the users saved on this device would you like to add to this group?",
fr: "Quel·les utilisateur·rices enregistré·es sur cet appareil veux-tu ajouter ?",
es: "¿Qué usuarios/as registrados en este dispositivo quieres agregar al grupo?",
pt: "Quais usuários já registrados neste dispositivo você gostaria de adicionar ao grupo?"
},
buttonReset: {
de: "Auswahl aufheben",
en: "Deselect",
fr: "Désélectionner",
es: "Anular selección",
pt: "Excluir seleção"
},
buttonContinue: {
de: "(( | $1x | $1x)) Hinzufügen",
en: "Add (( | $1x | $1x))",
fr: "Ajouter (( | $1x | $1x))",
es: "Agregar (( | $1x | $1x))",
pt: "Adicionar (( | $1x | $1x))"
},
popupConfirm: {
de: "Möchtest du ((dieses Nutzerkonto | diese $1 Nutzerkonten)) jetzt zur Familiengruppe hinzufügen?",
en_gb: "Do you want to add ((this user | these $1 users)) to the family group?",
en: "Do you want to add ((this user | these $1 users)) to the family group?",
fr: "Veux-tu ajouter ((cet·te utilisateur·rice | ces $1 utilisateur·rices)) au groupe familial ?",
es: "¿Quieres agregar a ((este/a estudiante | estos/as $1 estudiantes)) al grupo familiar?",
pt: "Você gostaria de adicionar ((este membro | estes $1 membros)) ao grupo familiar?"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
addButton: {
de: "Hinzufügen",
en: "Add",
fr: "Ajouter",
es: "Agregar",
pt: "Adicionar"
},
popupTooMany: {
de: "Du kannst nur noch ((1 Nutzerkonto | $1 Nutzerkonten)) zur Familiengruppe hinzufügen.",
en: "You can only add $1 more user(s) to the family group.",
fr: "Tu ne peux ajouter que $1 utilisateur·rice(s) au groupe familial.",
es: "Sólo puedes agregar $1 cuenta(s) más al grupo familiar.",
pt: "Você só pode adicionar mais $1 conta(s) ao grupo familiar."
}
};
})();
pages/group/group/other/addFamilyMemberSameDevice/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: T("topbarTitle"),
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "addFamily");
},
animation: "slideDown"
});
}
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/calcDeviceUsers/calc.ls
(function(){
return function(page){
var users, logId, l, r, e;
return users = (function(){
var ref$, results$ = [];
for (logId in ref$ = window.userLogs) {
l = ref$[logId];
r = inc("/data/user/calcUserDescription/calc")(l);
r = _.cloneDeep(r);
r.logId = logId;
e = l.findLast({
event: "isGroupMember",
groupCode: page.params.groupCode
});
r.alreadyMember = e != null;
results$.push(r);
}
return results$;
}());
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/list.ls
(function(){
return function(page){
var data;
data = _.concat({
type: "firstRow"
}, page.deviceUsers, {
type: "footer"
});
return page.list = ListDiv({
data: data,
row: inc("row/row")(page),
nearScopeSize: 0.5,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 0.5
}
}).css({
height: "var(--centerHeight)"
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/firstRow/row.ls
(function(){
return function(page){
return Div().append(Div({
padding: "2em 0 1em",
maxWidth: "90%",
width: "35em",
margin: "-1px auto 0",
background: "white",
lineHeight: "1.5em"
}).html(T("chooseFromDevice")));
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/footerRow/row.ls
(function(){
return function(){
return Div({
height: "2em"
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/avatar/avatar.ls
(function(){
return function(member){
return Div({
display: "flex",
width: "4em",
marginRight: "0.5em",
flexDirection: "column"
}).onScopeRender(function(){
return this.append(inc("/lib/gui/avatar/avatar")(member.avatar, "head", false).css({
width: "2em",
height: "2em"
}));
});
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/center/alreadyMember/alreadyMember.ls
(function(){
return function(user){
if (!user.alreadyMember) {
return;
}
return Div({
display: "inline-block",
padding: "0 0.3em",
fontSize: "0.9em",
background: Color.green[300],
marginTop: "0.2em",
borderRadius: "3px"
}).html("Familienmitglied");
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/center/center.ls
(function(){
return function(user, page){
return Div({
flex: "1 1 auto",
textAlign: "left",
padding: "0.2em 0"
}).append(inc("displayName/name")(user, page), inc("alreadyMember/alreadyMember")(user));
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/center/displayName/name.ls
(function(){
return function(member, page){
var d, s;
d = member.displayName;
if (s = page.searchQuery) {
d = inc("/lib/util/tagSearchInString/tagSearchInString")(d, s, "");
}
return Div().secureHtml(d);
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/check/check.ls
(function(){
return function(user){
var div;
div = Div({
display: "flex",
padding: "0em 0.4em 0 0.7em",
alignSelf: "stretch"
}).addClass("update").append(SvgIcon({
svg: user.selected || user.alreadyMember
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg"),
color: Color.grey[600]
}));
div.update = function(){
return div.replaceWith(inc(THISFILE)(user));
};
return div;
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/memberRow/row.ls
(function(){
return function(page, user){
var tap, create, div;
tap = function(){
user.selected = !user.selected;
create();
return page.buttons.update();
};
create = function(){
var b;
return div.html(Div({
display: "flex",
padding: "0.5em 0",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
maxWidth: "95%",
width: "35em",
margin: "-1px auto 0",
minHeight: "4em",
background: user.selected
? Color.lightBlue[50]
: user.alreadyMember ? Color.grey[100] : "white"
}).html(inc("check/check")(user), inc("avatar/avatar")(user), inc("center/center")(user, page)).tap(!user.alreadyMember ? tap : void 8));
};
div = Div();
create();
return div;
};
})();
pages/group/group/other/addFamilyMemberSameDevice/list/row/row.ls
(function(){
return function(page){
return function(rowData){
if (rowData.type === "firstRow") {
return inc("firstRow/row")(page);
} else if (rowData.type === "footer") {
return inc("footerRow/row")();
} else {
return inc("memberRow/row")(page, rowData);
}
};
};
})();
pages/group/group/other/addFamilyMemberSameDevice/page.ls
(function(){
return function(page){
page.deviceUsers = inc("calcDeviceUsers/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")();
},
bottom: function(){
return inc("_bottom/bottom")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.append(inc("list/list")(page));
}
};
};
})();
pages/group/group/other/createGroup/00_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "createGroup");
},
animation: "slideDown"
});
},
title: T("createGroup")
});
};
})();
pages/group/group/other/createGroup/01_name/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, cancel, name, ref$;
submit = function(){
return inc("submit/submit")(page);
};
cancel = function(){
return startPage({
history: -1,
animation: "slideDown"
});
};
page.append(page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("pleaseEnterGroupName"),
submitLabel: T("continueButton"),
submit: submit,
cancel: cancel
}));
if (name = (ref$ = app.currentPage.params) != null ? ref$.groupName : void 8) {
page.form.input.setValue(name);
}
return page.form.input.start();
}
};
};
})();
pages/group/group/other/createGroup/01_name/submit/submit.ls
(function(){
return function(page){
var groupName;
groupName = page.form.input.getValue();
if (groupName === "") {
page.form.error.html(T("emptyGroupName"));
return page.form.input.start();
} else {
page.params.groupName = groupName;
return startPage({
path: path("../../02_chooseSchool/page"),
animation: "slideLeft",
params: {
groupName: groupName
}
});
}
};
})();
pages/group/group/other/createGroup/02_chooseSchool/buttonNoSchool/button.ls
(function(){
return function(page){
var click;
click = function(){
return startPage({
path: path("../../90_confirm/page"),
animation: "slideLeft",
params: {
groupName: page.params.groupName
}
});
};
return Div({
lineHeight: "1.5em",
backgroundColor: Color.grey[150],
padding: "0.5em",
margin: "1em auto",
width: "15em"
}).html(page.schoolDescriptions.length > 0
? T("continueWithoutSchool")
: T("no")).tap(click);
};
})();
pages/group/group/other/createGroup/02_chooseSchool/buttonOtherSchool/button.ls
(function(){
return function(page){
var click;
click = function(){
return inc("/pages/schoolSearch/start")({
groupName: page.params.groupName,
finishFunctionPath: path("finish/finish")
});
};
return Div({
lineHeight: "1.5em",
backgroundColor: Color.grey[150],
padding: "0.5em",
margin: "1.5em auto 1em",
width: "15em"
}).html(page.schoolDescriptions.length > 0
? T("searchDifferentSchool")
: T("yesSearchSchool")).tap(click);
};
})();
pages/group/group/other/createGroup/02_chooseSchool/buttonOtherSchool/finish/checkCanChooseDirSchool/_t.ls
(function(){
return {
popupText: {
de: "Bitte wende dich an den Schul-Admin, wenn du an dieser Schule als Lehrkraft hinzugefügt werden möchtest. Anschließend kannst du diese Schule auch deiner Gruppe zuordnen.",
en: "Please contact your school administrator if you would like to be added to this school as a teacher.",
fr: "Merci de contacter un·e responsable de ton établissement si tu souhaites être ajouté·e comme professeur·e à cette école.",
es: "Por favor, contacta a el/la administrador/a de la escuela, si deseas ser agregado como docente a esta institución.",
pt: "Por favor, entre em contato com o(a) administrador(a) da escola, caso deseje ser adicionado(a) como professor(a) desta instituição."
}
};
})();
pages/group/group/other/createGroup/02_chooseSchool/buttonOtherSchool/finish/checkCanChooseDirSchool/check.ls
(function(){
return function(o){
var showPopup, sd, ref$;
showPopup = function(){
return inc("/lib/gui/infoPopup/popup")({
label: T("popupText"),
onClose: function(){
return startPage({
history: 0
});
}
});
};
sd = inc("/data/school/calcSchoolDescription/calc")(o.school.schoolCode);
if ((ref$ = sd != null ? sd.dirRole : void 8) !== "teacher" && ref$ !== "admin") {
showPopup();
return false;
}
return true;
};
})();
pages/group/group/other/createGroup/02_chooseSchool/buttonOtherSchool/finish/finish.ls
(function(){
return function(o){
if (o.school.hasDir) {
if (!inc("checkCanChooseDirSchool/check")(o)) {
return;
}
}
return startPage({
path: path("../../../90_confirm/page"),
animation: "slideDown",
history: 1 - o.totalPages,
params: o.school.schoolCode
? {
groupName: o.groupName,
school: o.school
}
: {
groupName: o.groupName,
newSchool: o.school
}
});
};
})();
pages/group/group/other/createGroup/02_chooseSchool/linkBack/link.ls
(function(){
return function(page){
return inc("/lib/gui/link/link")({
label: T("backButton"),
direction: "left"
}).css({
marginBottom: "1.5em"
}).tap(function(){
return startPage({
history: -1,
animation: "slideRight"
});
});
};
})();
pages/group/group/other/createGroup/02_chooseSchool/page.ls
(function(){
return function(page){
page.schoolDescriptions = inc("/data/school/calcSchoolDescriptions/calc")();
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.html(inc("title/title")(page), inc("schools/schools")(page), inc("buttonOtherSchool/button")(page), inc("buttonNoSchool/button")(page), inc("linkBack/link")(page));
}
};
};
})();
pages/group/group/other/createGroup/02_chooseSchool/schools/schools.ls
(function(){
return function(page){
return Div({
padding: "0 0.5em"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.schoolDescriptions).length; i$ < len$; ++i$) {
results$.push((fn$.call(this, i$, ref$[i$])));
}
return results$;
function fn$(i, sd){
var isFirst;
isFirst = i === 0;
return inc("/pages/school/_shared/schoolRow/row")(sd, isFirst).tap(function(){
return startPage({
path: path("../../90_confirm/page"),
animation: "slideLeft",
params: {
groupName: page.params.groupName,
school: sd
}
});
});
}
}.call(this)));
};
})();
pages/group/group/other/createGroup/02_chooseSchool/title/title.ls
(function(){
return function(page){
return Div({
padding: "1.5em"
}).html(page.schoolDescriptions.length > 0
? T("assignSchoolToGroup")
: T("assignGroupToSchool"));
};
})();
pages/group/group/other/createGroup/90_confirm/buttons/buttons.ls
(function(){
return function(page){
return page.buttons = inc("/lib/gui/buttonsSubmitCancel/buttons")({
cancelLabel: T("backButton"),
cancel: page.cancel,
submitLabel: T("create"),
submit: page.submit
});
};
})();
pages/group/group/other/createGroup/90_confirm/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
page.submit = function(){
return inc("submit/submit")(page);
};
page.cancel = function(){
return startPage({
history: -1,
animation: "slideRight"
});
};
return page.append(inc("title/title")(), inc("values/values")(page), inc("buttons/buttons")(page));
}
};
};
})();
pages/group/group/other/createGroup/90_confirm/submit/submit.ls
(function(){
return function(page){
var onError, onOffline, ref$;
page.buttons.showSpinner();
onError = function(error){
debug(error);
page.buttons.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
};
onOffline = function(){
page.buttons.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/data/group/groupCreate/create")({
name: page.params.groupName,
school: page.params.school,
newSchool: page.params.newSchool,
creatorPublicId: (ref$ = log.findLast({
event: "setPublicId"
})) != null ? ref$.value : void 8,
onCompleted: function(result){
var onCompleted;
onCompleted = function(){
var groupLog;
if (app.currentPage !== page) {
return;
}
groupLog = window.groupLogs[result.groupCode];
if (groupLog == null) {
setTimeout(onCompleted, 1000);
return;
}
return groupLog.sync(function(error){
if (error) {
return onError();
} else {
inc("/data/group/setCurrentGroup/set")(result.groupCode);
return inc("/pages/group/group/start")({
history: function(path){
return !_.includes(path, "createGroup");
},
animation: "slideDown"
});
}
});
};
return setTimeout(onCompleted, 1000);
},
onError: onError,
onOffline: onOffline
});
};
})();
pages/group/group/other/createGroup/90_confirm/title/title.ls
(function(){
return function(){
return Div({
paddingBottom: "2em"
}).html(T("createGroupNow"));
};
})();
pages/group/group/other/createGroup/90_confirm/values/_row/row.ls
(function(){
return function(label, value){
return Div({
display: "flex",
padding: "0.7em",
borderTop: "1px solid " + Color.grey[300],
borderBottom: "1px solid " + Color.grey[300],
marginBottom: "-1px",
textAlign: "left",
minWidth: "12em"
}).append(Div({
flex: "0 0 auto",
alignSelf: "flex-start",
display: "inline-block",
width: "4em",
verticalAlign: "top"
}).html(label), Div({
flex: "1 1 auto",
alignSelf: "flex-start",
display: "inline-block",
verticalAlign: "top"
}).secureHtml(value));
};
})();
pages/group/group/other/createGroup/90_confirm/values/name/name.ls
(function(){
return function(page){
return inc("../_row/row")(T("name"), page.params.groupName);
};
})();
pages/group/group/other/createGroup/90_confirm/values/school/school.ls
(function(){
return function(page){
var school, location, schoolName, label;
school = page.params.school || page.params.newSchool;
location = (school != null && school.zip) && (school != null && school.city)
? school.zip + " " + school.city
: school != null ? school.location : void 8;
if (school) {
schoolName = inc("/data/school/calcSchoolName/calc")(school);
label = schoolName + " " + location;
} else {
label = T("none");
}
return inc("../_row/row")(T("school"), label);
};
})();
pages/group/group/other/createGroup/90_confirm/values/values.ls
(function(){
return function(page){
return Div({
display: "inline-block",
maxWidth: "80%",
marginBottom: "2em"
}).append(inc("name/name")(page), inc("school/school")(page));
};
})();
pages/group/group/other/createGroup/_t.ls
(function(){
return {
createGroup: {
de: "Neue Gruppe erstellen",
en: "Create a new group",
fr: "Créer un nouveau groupe",
es: "Crea un nuevo grupo",
pt: "Criar um novo grupo"
},
emptyGroupName: {
de: "Der Gruppen-Name darf nicht leer sein.",
en: "The group name cannot be left blank.",
fr: "Le nom du groupe ne peut pas rester vide.",
es: "El nombre del grupo no puede quedar en blanco.",
pt: "O nome do grupo não pode ficar em branco."
},
pleaseEnterGroupName: {
de: "Bitte trage einen Gruppen-Namen ein. (Der Name kann später geändert werden.)",
en: "Please enter a group name. (The name can be changed later.)",
fr: "Choisis le nom à donner au groupe. (Ce nom peut être changé plus tard.)",
es: "Elige un nombre para el grupo. (Se puede modificar después.)",
pt: "Por favor, digite um nome para o grupo. (É possível modificar o nome depois.)"
},
continueWithoutSchool: {
de: "Ohne Schule weiter machen",
en: "Continue without school",
fr: "Continuer sans école",
es: "Continuar sin escuela",
pt: "Continuar sem escola"
},
no: {
de: "Nein",
en: "No",
fr: "Non",
es: "No",
pt: "Não"
},
searchDifferentSchool: {
de: "Andere Schule suchen",
en: "Search for a different school",
fr: "Chercher une autre école",
es: "Buscar otra escuela",
pt: "Buscar outra escola"
},
yesSearchSchool: {
de: "Ja (Schule suchen)",
en: "Yes (search school)",
fr: "Oui (Rechercher une école)",
es: "Sí (Buscar escuela)",
pt: "Sim (Buscar escola)"
},
assignSchoolToGroup: {
de: "Welche Schule möchtest du dieser Gruppe zuordnen?",
en: "Which school would you like to assign to this group?",
fr: "Quelle école veux-tu attribuer à ce groupe ?",
es: "¿Con qué escuela quieres vincular este grupo?",
pt: "Qual escola você gostaria de vincular à este grupo?"
},
assignGroupToSchool: {
de: "Möchtest du diese Gruppe einer Schule zuordnen?",
en: "Would you like to assign this group to a school?",
fr: "Veux-tu attribuer ce groupe à une école ?",
es: "¿Quieres vincular este grupo a una escuela?",
pt: "Você quer vincular este grupo à uma escola?"
},
create: {
de: "Anlegen",
en: "Create",
fr: "Créer",
es: "Crear",
pt: "Criar"
},
createGroupNow: {
de: "Soll diese Gruppe nun angelegt werden?",
en: "Would you like to create this group?",
fr: "Veux-tu créer ce groupe ?",
es: "¿Quieres crear este grupo?",
pt: "Você confirma que quer criar este grupo?"
},
none: {
de: "keine",
en: "none",
fr: "aucune",
es: "ninguna",
pt: "nenhuma"
},
school: {
de: "Schule: ",
en: "School: ",
fr: "École : ",
es: "Escuela: ",
pt: "Escola "
},
name: {
de: "Name: ",
en: "Name: ",
fr: "Nom : ",
es: "Nombre: ",
pt: "Nome: "
}
};
})();
pages/group/group/other/familyGroupCreate/_t.ls
(function(){
return {
topbarTitle: {
de: "Familiengruppe",
en: "Family Group",
fr: "Groupe familial",
es: "Grupo familiar",
pt: "Grupo familiar"
},
nameOfCreatedGroup: {
de: "Familie",
en: "Family",
fr: "Famille",
es: "Familia",
pt: "Família"
},
errorAlreadyHasGroup: {
de: "Du hast schon eine Familiengruppe angelegt.",
en: "You have already created a family group.",
fr: "Tu as déjà créé un groupe familial",
es: "Ya creaste un grupo familiar.",
pt: "Você já criou um grupo familiar."
},
text1Allowed: {
de: "Du hast ANTON-Plus Familie und kannst hier eine Familiengruppe anlegen. ",
en: "You have ANTON Plus Family and can create a family group here. ",
fr: "Tu as ANTON-Plus Famille et tu peux créer un groupe familial ici. ",
es: "Tienes ANTON-Plus Familia y puedes crear un grupo familiar aquí.",
pt: "Você possui ANTON-Plus Família e pode criar um grupo familiar aqui."
},
text1NotAllowed: {
de: "Mit ANTON-Plus Familie kannst du hier eine Familiengruppe anlegen. ",
en: "You can create a family group here with ANTON Plus Family. ",
fr: "Tu peux créer un groupe familial ici avec ANTON-Plus Famille. ",
es: "Con ANTON-Plus Familia puedes crear un grupo familiar aquí.",
pt: "Com ANTON-Plus Família você pode criar um grupo familiar aqui."
},
text2: {
de: "Alle Gruppenmitglieder (max. 5) erhalten ANTON-Plus.",
en: "All group members (max. 5) also receive ANTON Plus.",
fr: "Tous les membres du groupe (max. 5) auront aussi ANTON-Plus.",
es: "Cada integrante del grupo (max. 5) adquiere ANTON-Plus.",
pt: "Todos os integrantes do grupo (max. 5) receberão ANTON-Plus."
},
text3: {
de: "Eltern können dann für jedes Kind individuelle Lerninhalte pinnen, den Report einsehen, eine Gruppen-Nachricht setzen und Urkunden erstellen. Zusätzlich zu den Spielen kann auch der Avatar-Designer gesperrt werden.",
en: "Parents can pin individual learning content for each child, view the report, write a group message and create certificates. They can also lock games and the avatar designer.",
fr: "Les parents peuvent épingler des exercices pour chaque enfant, voir les rapports d'apprentissage, écrire un message au groupe et créer des certificats. Ils peuvent aussi désactiver les jeux et le créateur d'avatars.",
es: "Padres y madres pueden asignar ejercicios a cada integrante del grupo, abrir los reportes de progeso, escribir mensajes en el grupo, imprimir certificados y desactivar los juegos y el diseñador de avatares.",
pt: "Os pais podem marcar exercícios para cada criança, visualizar o relatório, escrever mensagens no grupo e criar certificados. Também poderão bloquear jogos e o criador de avatares."
},
buttonCreate: {
de: "Familiengruppe erstellen",
en: "Create family group",
fr: "Créer un groupe familial",
es: "Crear un grupo familiar",
pt: "Criar um grupo familiar"
},
buttonMore: {
de: "Mehr zu ANTON-Plus Familie",
en: "More about ANTON Plus Family",
fr: "En savoir plus sur ANTON-Plus Famille",
es: "Más sobre ANTON-Plus Familia",
pt: "Mais sobre ANTON-Plus Família"
}
};
})();
pages/group/group/other/familyGroupCreate/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: T("topbarTitle"),
close: function(){
return startPage({
history: -1,
animation: "slideDown"
});
}
});
};
})();
pages/group/group/other/familyGroupCreate/buttonCreate/button.ls
(function(){
return function(page){
return Button(T("buttonCreate")).css({
marginTop: "0.4em"
}).tap(function(){
return inc("create/create")(page, this);
});
};
})();
pages/group/group/other/familyGroupCreate/buttonCreate/create/create.ls
(function(){
return function(page, button){
var spinner, onOffline, onError, ref$;
spinner = inc("/lib/gui/spinner/spinner")();
if (button != null) {
button.replaceWith(spinner);
}
onOffline = function(){
spinner.replaceWith(button);
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(error){
var label;
spinner.replaceWith(button);
label = (error != null ? error.status : void 8) === "already_has_group" ? T("errorAlreadyHasGroup") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: label
});
};
return inc("/data/group/groupCreate/create")({
name: T("nameOfCreatedGroup"),
groupType: "family",
creatorPublicId: (ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8,
onOffline: onOffline,
onError: onError,
onCompleted: function(result){
var f;
f = function(){
var groupLog;
if (app.currentPage !== page) {
return;
}
groupLog = window.groupLogs[result.groupCode];
if (groupLog == null) {
setTimeout(f, 1000);
return;
}
return groupLog.sync(function(error){
if (error) {
return onError();
} else {
inc("/data/group/setCurrentGroup/set")(result.groupCode);
return inc("/pages/group/group/start")({
history: -1,
animation: "slideDown"
});
}
});
};
return setTimeout(f, 1000);
}
});
};
})();
pages/group/group/other/familyGroupCreate/buttonMore/button.ls
(function(){
return function(page){
return Button(T("buttonMore")).css({
marginTop: "0.4em"
}).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_familyGroupCreate_click"
});
return startPage({
path: path("/pages/static/antonPlus/1_products/page"),
animation: "fadeIn",
history: 0,
params: {
referrer: "familyGroupAbout"
}
});
});
};
})();
pages/group/group/other/familyGroupCreate/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/home.svg"),
size: "4em"
}).css({
marginBottom: "0.5em"
});
};
})();
pages/group/group/other/familyGroupCreate/linkCreateDebug/link.ls
(function(){
return function(page){
if (!engine.isDebug) {
return;
}
return Div().append(inc("/lib/gui/link/link")("Debug: Create").css({
color: Color.grey[400],
fontSize: "0.9em",
padding: "0.5em",
marginTop: "0.5em"
}).tap(function(){
return inc("../buttonCreate/create/create")(page);
}));
};
})();
pages/group/group/other/familyGroupCreate/logPromo/log.ls
(function(){
return function(){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_familyGroupCreate",
isReferrer: true,
isIgnored: _.includes(app.lastPagePath, "static/antonPlus")
});
};
})();
pages/group/group/other/familyGroupCreate/page.ls
(function(){
return function(page){
var userDescription, hasPlusFamilyAccess;
userDescription = inc("/data/user/calcUserDescription/calc")();
hasPlusFamilyAccess = userDescription.hasPlusFamilyAccess;
return {
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var t;
t = inc("text/text");
if (hasPlusFamilyAccess) {
return page.append(inc("icon/icon")(), t(T("text1Allowed")), t(T("text2")), t(T("text3")), inc("buttonCreate/button")(page));
} else {
inc("logPromo/log")(page);
return page.append(inc("icon/icon")(), t(T("text1NotAllowed")), t(T("text2")), t(T("text3")), inc("buttonMore/button")(page), inc("linkCreateDebug/link")(page));
}
}
};
};
})();
pages/group/group/other/familyGroupCreate/text/text.ls
(function(){
return function(t){
return Div({
margin: "0 auto 1em",
width: "30em",
maxWidth: "95%",
lineHeight: "1.5em"
}).html(t);
};
})();
pages/group/group/other/joinGroupWithCode/00_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "joinGroup");
},
animation: "slideDown"
});
},
title: T("joinGroup")
});
};
})();
pages/group/group/other/joinGroupWithCode/01_code/_t.ls
(function(){
return {
scanQr: {
de: "QR-Code scannen",
en: "Scan QR code",
fr: "Scanner un code QR",
es: "Escanear código QR",
pt: "Escanear código QR"
},
qrCodeInvalid: {
de: "Dieser QR-Code ist ungültig.",
en: "This QR code is invalid.",
fr: "Ce code QR n'est pas valide.",
es: "Este código QR no es válido.",
pt: "Este código QR não é válido."
}
};
})();
pages/group/group/other/joinGroupWithCode/01_code/form/form.ls
(function(){
return function(page){
var isTeacher;
isTeacher = inc("/data/user/isTeacher/get")();
return inc("/lib/gui/inputForm/inputForm")({
label: isTeacher
? T("enterCodeTeacher")
: T("enterCodePupil"),
submitLabel: T("continueButton"),
submit: page.submit,
cancel: page.cancel,
screenKeyboardLayout: twitch({
de: "login",
en: "loginEN",
fr: "loginFR",
es: "loginES",
pt: "loginPT"
})
});
};
})();
pages/group/group/other/joinGroupWithCode/01_code/linkQrcode/icon/icon.ls
(function(){
return function(){
return Svg({
svg: path("/lib/svg/shape/qrcode.svg"),
size: "1.5em",
color: Color.black
}).css({
marginRight: "0.2em"
});
};
})();
pages/group/group/other/joinGroupWithCode/01_code/linkQrcode/link.ls
(function(){
return function(page){
var tap;
if (typeof QRScanner == 'undefined' || QRScanner === null) {
return;
}
tap = function(){
return startPage({
path: path("/pages/misc/qrcode/page"),
animation: "slideUp"
});
};
return Div({
margin: "0.5em 0 0.7em"
}).html(inc("/lib/gui/link/link")({
label: Div({
display: "flex"
}).html(inc("icon/icon")(), T("scanQr"))
}).tap(tap));
};
})();
pages/group/group/other/joinGroupWithCode/01_code/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var code, ref$;
page.submit = function(){
return inc("submit/submit")(page);
};
page.cancel = function(){
return startPage({
history: -1,
animation: "slideDown"
});
};
page.submitQRCode = function(){
return inc("submitQRCode/submit")(page);
};
page.html(page.form = inc("form/form")(page), inc("linkQrcode/link")(page));
if (code = (ref$ = page.params) != null ? ref$.code : void 8) {
page.form.input.setValue(code);
}
if (page.params.qrCodeScanData) {
return page.submitQRCode();
} else {
return page.form.input.start();
}
}
};
};
})();
pages/group/group/other/joinGroupWithCode/01_code/submit/submit.ls
(function(){
return function(page){
var form, code, userDescription;
form = page.form;
code = form.input.getValue();
if (code === "") {
form.error.html(T("emptyCode"));
form.input.start();
return;
}
form.showSpinner();
page.params.code = code;
userDescription = inc("/data/user/calcUserDescription/calc")();
if (!userDescription.publicId) {
if (typeof log != 'undefined' && log !== null) {
log.log({
event: "debugMissingPublicId",
userDescription: _.omit(userDescription, "avatar"),
logLength: log.list().length,
logPublicId: log.findLast("setPublicId"),
isOnline: inc("/lib/util/isOnline/isOnline")()
});
}
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addExistingUserWithCode/step1/step1"),
params: {
code: code,
publicId: userDescription.publicId,
checkCaptcha: true
},
onError: function(error){
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result, samePage){
var error;
if (result.status !== "ok") {
error = (function(){
switch (result.status) {
case "error_codeNotValid":
return T("invalidCode");
case "error_alreadyGroupMember":
return T("alreadyGroupMember");
case "error_alreadyDirMember":
return T("alreadyDirMember");
case "error_captcha_failed":
return T("errorCaptchaFailed");
default:
return T("codeError");
}
}());
form.hideSpinner();
return form.error.html(error);
} else {
if (samePage) {
return startPage({
path: path("../../02_confirm/page"),
animation: "slideLeft",
params: result
});
}
}
}
});
};
})();
pages/group/group/other/joinGroupWithCode/01_code/submitQRCode/submit.ls
(function(){
return function(page){
var loginCode, ref$, ref1$;
loginCode = page.params.qrCodeScanData.replace("anton://login/", "");
if (!loginCode.match(/^[0-9a-z]{4}-?[0-9a-z]{4}$/i)) {
page.form.error.html(T("qrCodeInvalid"));
delete page.params.qrCodeScanData;
return;
}
page.css({
opacity: 0
});
page.form.input.setValue(loginCode);
page.submit();
setTimeout(function(){
return page.css({
opacity: 1
});
}, 1000);
return ref1$ = (ref$ = page.params).qrCodeScanData, delete ref$.qrCodeScanData, ref1$;
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/buttons/buttons.ls
(function(){
return function(page, submit){
var div;
div = inc("/lib/gui/buttonsSubmitCancel/buttons")({
cancelLabel: T("backButton"),
cancel: function(){
return startPage({
history: -1,
animation: "slideRight"
});
},
submitLabel: T("joinGroupNow"),
submit: page.submit
});
return page.buttons = div;
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
page.submit = function(){
return inc("submit/submit")(page);
};
return page.css({
margin: "1.5em 0"
}).append(inc("title/title")(), inc("rows/rows")(page), inc("text/text")(page), inc("buttons/buttons")(page));
}
};
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/_row/row.ls
(function(){
return function(label, value){
return Div({
display: "flex",
padding: "0.7em",
borderTop: "1px solid " + Color.grey[300],
borderBottom: "1px solid " + Color.grey[300],
marginBottom: "-1px",
textAlign: "left",
minWidth: "12em"
}).append(Div({
flex: "0 0 auto",
alignSelf: "flex-start",
display: "inline-block",
width: "4em",
verticalAlign: "top"
}).html(label), Div({
flex: "1 1 auto",
alignSelf: "flex-start",
display: "inline-block",
verticalAlign: "top"
}).secureHtml(value));
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/code/code.ls
(function(){
return function(page){
return inc("../_row/row")(T("code"), page.params.code.toLowerCase());
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/group/group.ls
(function(){
return function(page){
return inc("../_row/row")(T("group"), page.params.groupName);
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/name/name.ls
(function(){
return function(page){
return inc("../_row/row")(T("name"), page.params.name);
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/rows.ls
(function(){
return function(page){
return Div({
width: "20em",
maxWidth: "90%",
margin: "2em auto"
}).append(inc("group/group")(page), inc("school/school")(page), inc("code/code")(page), inc("name/name")(page));
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/rows/school/school.ls
(function(){
return function(page){
return inc("../_row/row")(T("school"), _.isString(page.params.schoolName)
? page.params.schoolName
: page.params.schoolName ? page.params.schoolName[engine.guiLanguage] || page.params.schoolName[_.keys(page.params.schoolName)[0]] || "-" : "-");
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/submit/noGroupPopup/popup.ls
(function(){
return function(result, onDone){
return inc("/lib/gui/infoPopup/popup")({
label: T("popupNoGroupText"),
onClose: onDone
});
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/submit/submit.ls
(function(){
return function(page){
var userDescription, onError, onOffline, onCompleted;
userDescription = inc("/data/user/calcUserDescription/calc")();
page.buttons.showSpinner();
onError = function(error){
page.buttons.hideSpinner();
inc("/lib/gui/errorPopup/popup")();
return debug(error);
};
onOffline = function(){
page.buttons.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
onCompleted = function(result){
var onDone;
onDone = function(){
inc("/data/group/setCurrentGroup/set")(result.groupCode);
return inc("/pages/group/group/start")({
history: function(path){
return !_.includes(path, "joinGroup");
},
animation: "slideDown"
});
};
if (!result.groupCode && result.type === "schoolPreparedUser") {
return inc("noGroupPopup/popup")(result, onDone);
} else {
return onDone();
}
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addExistingUserWithCode/step2/step2"),
params: {
code: page.params.code,
publicId: userDescription.publicId
},
onCompleted: function(result, samePage){
var error, f;
if (result.status !== "ok") {
error = (function(){
switch (result.status) {
case "error_codeNotValid":
return T("invalidCode");
case "error_alreadyGroupMember":
return T("alreadyGroupMember");
case "error_alreadyDirMember":
return T("alreadyDirMember");
default:
return T("codeError");
}
}());
page.buttons.hideSpinner();
inc("/lib/gui/errorPopup/popup")({
label: error
});
return;
}
f = function(){
var groupLog;
if (!samePage) {
return;
}
if (!result.groupCode) {
onCompleted(result);
return;
}
groupLog = window.groupLogs[result.groupCode];
if (groupLog == null) {
setTimeout(f, 1000);
return;
}
return groupLog.sync(function(error){
if (error) {
return onError();
} else {
return onCompleted(result);
}
});
};
return setTimeout(f, 1000);
},
onError: onError,
onOffline: onOffline
});
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/text/text.ls
(function(){
return function(page){
if (page.params.role === "teacher") {
return;
}
return Div({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
marginBottom: "2em",
lineHeight: "1.5em"
}).html(T("ifYouJoinAGroup"));
};
})();
pages/group/group/other/joinGroupWithCode/02_confirm/title/title.ls
(function(){
return function(){
return Div().html(T("codeValidFor"));
};
})();
pages/group/group/other/joinGroupWithCode/_t.ls
(function(){
return {
joinGroup: {
de: "Gruppe beitreten",
en: "Join group",
fr: "Rejoindre un groupe",
es: "Unirse a un grupo",
pt: "Entrar no grupo"
},
emptyCode: {
de: "Der Code darf nicht leer sein.",
en: "The code cannot be left blank.",
fr: "Le code ne peut pas rester vide.",
es: "La clave no puede quedar en blanco.",
pt: "O código não pode ficar em branco."
},
invalidCode: {
de: "Der Code ist nicht gültig.",
en: "The code is not valid.",
fr: "Le code n'est pas valide.",
es: "La clave no es válida.",
pt: "O código não é válido."
},
alreadyGroupMember: {
de: "Du bist schon Mitglied dieser Gruppe.",
en: "You are already a member of this group.",
fr: "Tu es déjà membre de ce groupe.",
es: "Ya eres miembro de este grupo.",
pt: "Você já é membro deste grupo."
},
alreadyDirMember: {
de: "Dieser Code ist ungültig. Bitte deine Lehrkraft, dich der Gruppe hinzuzufügen, indem sie dein Nutzerkonto im Schulverzeichnis sucht.",
en_gb: "This code is not valid. Ask your teacher to add you to the group by looking up your account in the school directory.",
en: "This code is not valid. Ask your teacher to add you to the group by looking up your account in the school directory.",
fr: "Ce code n'est pas valide. Demande à ton·ta professeur·e de t'ajouter au groupe en cherchant ton compte dans le répertoire scolaire.",
es: "Esta clave no es válida. Pídele a tu docente que te agregue al grupo a través del directorio escolar.",
pt: "Este código não é válido. Peça para o(a) professor(a) te adicionar ao grupo procurando sua conta de usuário no Diretório Escolar."
},
codeError: {
de: "Dieser Code ist ungültig.",
en: "This code is not valid.",
fr: "Ce code n'est pas valide.",
es: "Esta clave no es válida.",
pt: "Este código é inválido."
},
enterCodeTeacher: {
de: "Bitte trage den Code ein, den du von deinem/r Kollegen/in bekommen hast:",
en: "Please enter the code that you received from your colleague.",
fr: "Écris ici le code donné par ton·ta collègue.",
es: "Escribe aquí la clave que te envió tu compañera/o.",
pt: "Por favor, digite aqui o código que recebeu de seu/sua colega."
},
enterCodePupil: {
de: "Bitte trage den Code ein, den du von deinem Lehrer oder deiner Lehrerin bekommen hast:",
en: "Please enter the code that you received from your teacher.",
fr: "Écris ici le code donné par ton·ta professeur·e.",
es: "Escribe aquí la clave que te envió tu docente.",
pt: "Por favor, digite o código que recebeu de seu/sua professor(a)."
},
joinGroupNow: {
de: "Jetzt Gruppe beitreten",
en: "Join group now",
fr: "Rejoindre le groupe",
es: "Únete al grupo ahora",
pt: "Entrar no grupo agora"
},
code: {
de: "Code:",
en: "Code:",
fr: "Code :",
es: "Clave:",
pt: "Código:"
},
group: {
de: "Gruppe:",
en: "Group:",
fr: "Groupe :",
es: "Grupo:",
pt: "Grupo:"
},
name: {
de: "Name:",
en: "Name:",
fr: "Nom :",
es: "Nombre:",
pt: "Nome:"
},
school: {
de: "Schule:",
en: "School:",
fr: "École :",
es: "Escuela:",
pt: "Escola:"
},
ifYouJoinAGroup: {
de: "Wenn du der Gruppe beitrittst, kann dein/e Lehrer/in dir Aufgaben vorschlagen und deinen Lernfortschritt sehen.",
en: "If you join the group, the teacher can suggest lessons for you and track your progress.",
fr: "Si tu rejoins le groupe, ton·ta professeur·e peut te proposer des exercices et suivre tes progrès.",
es: "Si te unes al grupo, tu docente podrá sugerirte ejercicios y ver tu historial.",
pt: "Se você se juntar a um grupo, seu/sua professor(a) pode sugerir exercícios e acompanhar seu desempenho."
},
codeValidFor: {
de: "Dieser Code ist gültig für:",
en: "This code is valid for:",
fr: "Ce code est valide pour :",
es: "Esta clave es válida para:",
pt: "Este código é válido para:"
},
popupNoGroupText: {
de: "Du bist der Schule erfolgreich beigetreten. Sobald dich dein/e Lehrer/in zu einer Gruppe hinzufügt, wird diese hier angezeigt.",
en: "You have successfully joined your school. Once your teacher adds you to a group, it will be shown here.",
fr: "Tu as bien rejoint ton école. Si ton·ta professeur·e t'ajoute à un groupe, tu le verras ici.",
es: "Te uniste exitosamente a tu escuela. En cuanto tu docente te agregue a un grupo, verás tu grupo aquí.",
pt: "Você juntou-se com êxito à sua escola. Assim que seu/sua professor(a) te adicionar a um grupo, ele será exibido aqui."
}
};
})();
pages/group/group/other/preparePupil/_t.ls
(function(){
return {
preparePupilCode: {
de: "Schüler-Code vorbereiten",
en_gb: "Prepare pupil code",
en: "Prepare student code",
fr: "Préparer le code-élève",
es: "Preparar clave-estudiante",
pt: "Preparar código-alunos"
},
createMultiplePupil: {
de: "mehrere Schüler/innen anlegen",
en_gb: "Create multiple pupils",
en: "Create multiple students",
fr: "Créer plusieurs codes-élèves",
es: "Crear varios estudiantes",
pt: "Criar vários códigos-alunos"
},
preparedLoginCodeForName: {
de: "Du hast einen Anmelde-Code für \"$1\" vorbereitet.",
en: "You have prepared a login code for \"$1\".",
fr: "Le code de connexion pour \"$1\" est prêt.",
es: "La clave de acceso para \"$1\" está lista.",
pt: "O código de acesso para \"$1\" está preparado."
},
nickName: {
de: "Spitzname:",
en: "Nickname:",
fr: "Surnom :",
es: "Apodo:",
pt: "Apelido"
},
create: {
de: "Anlegen",
en: "Create",
fr: "Créer",
es: "Crear",
pt: "Criar"
}
};
})();
pages/group/group/other/preparePupil/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("preparePupilCode")
});
};
})();
pages/group/group/other/preparePupil/multiCheck/checkIcon/icon.ls
(function(){
return function(isChecked){
return SvgIcon({
svg: isChecked
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg")
}).css({
marginTop: "0.1em"
});
};
})();
pages/group/group/other/preparePupil/multiCheck/label/label.ls
(function(){
return function(){
return Div({
paddingLeft: "0.5em"
}).html(T("createMultiplePupil"));
};
})();
pages/group/group/other/preparePupil/multiCheck/multiCheck.ls
(function(){
var isChecked;
isChecked = false;
return function(page){
var click;
page.multiCheck = isChecked;
click = function(){
isChecked = !isChecked;
return this.replaceWith(inc(THISFILE)(page));
};
return Div({
display: "inline-flex",
marginBottom: "0.5em",
padding: "0.2em"
}).append(inc("checkIcon/icon")(isChecked), inc("label/label")()).tap(click);
};
})();
pages/group/group/other/preparePupil/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("nickName"),
submit: submit,
submitLabel: T("create"),
screenKeyboardShiftStatus: true
}));
form.error.before(inc("multiCheck/multiCheck")(page));
return form.input.start();
}
};
};
})();
pages/group/group/other/preparePupil/submit/submit.ls
(function(){
return function(page, form){
var groupCode, name;
groupCode = page.groupDescription.groupCode;
name = form.input.getValue();
if (name === "") {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/addPreparedMember/add"),
params: {
groupCode: groupCode,
name: name,
role: "pupil"
},
requiredVisibleDiv: page,
onCompleted: function(result, samePage){
if (result.status === "ok") {
if (page.multiCheck) {
startPage({
history: 0,
animation: "fadeIn"
});
} else if (samePage) {
startPage({
history: -1,
animation: "slideDown"
});
}
return setTimeout(function(){
return inc("/lib/gui/toast/toast")({
label: T("preparedLoginCodeForName", result.name)
});
}, 500);
} else {
if (result.status === "error_member_limit_reached") {
inc("/lib/gui/infoPopup/popup")({
label: T("errorMaxMembersReached")
});
return form.hideSpinner();
}
}
},
onError: function(error){
debug(error);
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/other/printList/_bottom/bottom.ls
(function(){
return function(page){
return Div({
backgroundColor: Color.grey[100],
textAlign: "center",
backgroundClip: "border-box"
}).html(inc("printButton/button")(page));
};
})();
pages/group/group/other/printList/_bottom/printButton/button.ls
(function(){
return function(page){
return page.printButton = Button({
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
margin: "1em"
}).tap(function(){
return inc("print/print")(page);
}).setEnabled(false);
};
})();
pages/group/group/other/printList/_bottom/printButton/print/print.ls
(function(){
return function(page){
return inc("/lib/util/print/print")({
div: page,
title: T("pupilListForGroupName", page.groupDescription.name)
});
};
})();
pages/group/group/other/printList/_t.ls
(function(){
return {
pupilListForGroupName: {
de: "$1 Schüler/innen-Liste",
en_gb: "List of pupils $1",
en: "List of students $1",
fr: "Liste des élèves $1",
es: "Lista de estudiantes $1",
pt: "Lista de alunos(as) $1"
},
printList: {
de: "Schüler/innen-Liste drucken",
en_gb: "Print pupil list",
en: "Print student list",
fr: "Imprimer la liste d'élèves",
es: "Imprimir lista de estudiantes",
pt: "Imprimir lista de alunos"
},
noPupilInGroup: {
de: "Diese Gruppe hat noch keine Schüler/innen.",
en_gb: "This group doesn't have any pupils yet.",
en: "This group doesn't have any students yet.",
fr: "Ce groupe n'a pas encore d'élèves.",
es: "Este grupo aún no tiene estudiantes.",
pt: "Este grupo ainda não possui alunos."
},
groupWithName: {
de: "Gruppe: $1",
en: "Group: $1",
fr: "Groupe : $1",
es: "Grupo: $1",
pt: "Grupo: $1"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
}
};
})();
pages/group/group/other/printList/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("printList")
});
};
})();
pages/group/group/other/printList/noMembers/noMembers.ls
(function(){
return function(){
return Div({
padding: "0.5em"
}).html(T("noPupilInGroup"));
};
})();
pages/group/group/other/printList/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
bottom: function(){
return inc("_bottom/bottom")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
page.memberDescriptions = inc("/lib/util/cache/get/get")("filteredSortedGroupMemberDescriptions", page.groupDescription.groupCode);
if (page.memberDescriptions == null || page.memberDescriptions.pupil.length === 0) {
return page.append(inc("noMembers/noMembers")());
} else {
page.printButton.setEnabled(true);
return page.append(inc("userCards/userCards")(page));
}
}
};
};
})();
pages/group/group/other/printList/title/title.ls
(function(){
return function(page){
return Div().secureHtml(T("groupWithName", page.groupDescription.name)).css({
margin: "1em",
fontFamily: "sans-serif"
});
};
})();
pages/group/group/other/printList/userCards/userCard/userCard.ls
(function(){
return function(pupil){
var ref$;
return inc("/../qrcode/userCard/userCard")({
loginCode: pupil.loginCode || ((ref$ = pupil.code) != null ? ref$ : ""),
groupName: pupil.groupName,
name: pupil.groupInternalName !== "" && pupil.groupInternalName !== pupil.name
? pupil.groupInternalName + " (" + pupil.name + ")"
: pupil.name
}).css({
margin: "-1px 0 0 -1px"
});
};
})();
pages/group/group/other/printList/userCards/userCards.ls
(function(){
return function(page){
var pupil;
return Div({
paddingBottom: "1em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.memberDescriptions.pupil).length; i$ < len$; ++i$) {
pupil = ref$[i$];
pupil.groupName = page.groupDescription.name;
results$.push(inc("userCard/userCard")(pupil));
}
return results$;
}()));
};
})();
pages/group/group/other/subgroupCreatePopup/_t.ls
(function(){
return {
titleCreateSubgroup: {
de: "Wie soll die neue Untergruppe heißen?",
en: "What should the new subgroup be called?",
fr: "Choisis un nom pour ce sous-groupe.",
es: "¿Cómo quieres que se llame el subgrupo?",
pt: "Escolha um nome para o novo subgrupo."
},
createButton: {
de: "Anlegen",
en: "Create",
fr: "Créer",
es: "Crear",
pt: "Criar"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
emptyNameError: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío.",
pt: "O nome não pode ficar vazio."
}
};
})();
pages/group/group/other/subgroupCreatePopup/popup.ls
(function(){
return function(page){
var submit, close, div, input, popup;
submit = function(){
var name;
name = input.getValue().trim();
if (!name) {
inc("/lib/gui/toast/toast")({
label: T("emptyNameError")
});
return;
}
div.html(inc("/lib/gui/spinner/spinner")());
return inc("submit/submit")({
page: page,
name: name
});
};
close = function(){
return popup.close();
};
div = Div({
padding: "1em"
}).html(T("titleCreateSubgroup"), input = inc("/lib/gui/input2/input")({
showResetIcon: true,
keyboardParentDiv: app.currentPage.popupBottom,
onSubmit: submit,
keyboardSubmitLabel: T("createButton")
}).css({
margin: "1em auto",
width: "95%"
}), " ", Button(T("cancelButton")).css({
margin: "0.5em"
}).tap(close), Button(T("createButton")).css({
margin: "0.5em"
}).tap(submit));
popup = inc("/lib/gui/popup/popup")({
html: div
});
return input.start();
};
})();
pages/group/group/other/subgroupCreatePopup/submit/submit.ls
(function(){
return function(o){
var groupCode, name;
groupCode = o.page.groupDescription.groupCode;
name = o.name;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/subgroup/create/create"),
params: {
groupCode: groupCode,
name: name
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var ref$;
if (app.currentPage !== o.page) {} else if (result.status !== "ok") {
return inc("/lib/gui/errorPopup/popup")();
} else {
return (ref$ = window.groupLogs[groupCode]) != null ? ref$.sync(function(){
return startPage({
history: 0
});
}) : void 8;
}
}
});
};
})();
pages/group/group/other/subgroupDetails/_shared/row/row.ls
(function(){
return function(o){
var b;
return Div({
borderTop: b = "1px solid " + Color.grey[300],
borderBottom: b,
margin: "0 0 -1px",
paddingLeft: "0.4em",
display: "flex",
background: "white"
}).append(Div({
flex: "1 0 auto",
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis",
padding: "1em 1em 1em 0.3em",
textAlign: "left"
}).html(o.label), Div({
flex: "1 1 auto",
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis",
padding: "1em 0.3em",
textAlign: "right"
}).secureHtml(o.value), SvgIcon({
svg: o.icon,
color: Color.grey[500]
}).css({
flex: "0 0 auto",
margin: "0 0.5em"
}));
};
})();
pages/group/group/other/subgroupDetails/_shared/subtitle/subtitle.ls
(function(){
return function(title){
return Div({
margin: "2em 0 1em",
fontWeight: "bold"
}).html(title);
};
})();
pages/group/group/other/subgroupDetails/_t.ls
(function(){
return {
backLabelSubgroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
subgroupMembers: {
de: "Untergruppen-Mitglieder",
en: "Subgroup members",
fr: "Membres du sous-groupe",
es: "Miembros del subgrupo",
pt: "Membros do subgrupo"
},
rowName: {
de: "Name",
en: "Name",
fr: "Nom ",
es: "Nombre",
pt: "Nome"
},
rowDeleteSubgroup: {
de: "Untergruppe löschen",
en: "Delete subgroup",
fr: "Effacer le sous-groupe",
es: "Borrar subgrupo",
pt: "Apagar subgrupo"
},
noMembersInGroup: {
de: "Es gibt noch keine Schüler/innen in dieser Gruppe.",
en_gb: "There are no pupils in this group.",
en: "There are no students in this group.",
fr: "Il n'y a pas d'élèves dans ce groupe.",
es: "Aún no hay estudiantes en este grupo.",
pt: "Ainda não há alunos neste grupo."
}
};
})();
pages/group/group/other/subgroupDetails/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: T("backLabelSubgroups"),
title: page.subgroup.name
});
};
})();
pages/group/group/other/subgroupDetails/loadMemberDescriptions/load.ls
(function(){
return function(page, onLoaded){
var memberDescriptions;
memberDescriptions = inc("/data/group/getCachedMemberDescriptions/get")(page.groupDescription.groupCode);
if (memberDescriptions != null) {
page.memberDescriptions = memberDescriptions;
onLoaded();
return;
}
return inc("/data/group/getMemberDescriptions/get")({
groupCode: page.groupDescription.groupCode,
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onLoaded: function(result){
page.memberDescriptions = result;
return onLoaded();
}
});
};
})();
pages/group/group/other/subgroupDetails/members/calcPupils/calc.ls
(function(){
return function(page){
var pupils;
return pupils = _.map(page.memberDescriptions.pupil, function(p){
return {
publicId: p.publicId,
name: p.groupInternalName || p.displayName,
avatar: p.avatar,
isSelected: in$(p.publicId, page.subgroup.members)
};
});
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/group/group/other/subgroupDetails/members/members.ls
(function(){
return function(page){
var pupils, groupCode, subgroupId, pupil, memberDescription;
pupils = inc("calcPupils/calc")(page);
groupCode = page.groupDescription.groupCode;
subgroupId = page.subgroup.id;
if (pupils.length === 0) {
return Div({
fontStyle: "italic",
marginTop: "1em"
}).html(T("noMembersInGroup"));
}
return Div({
display: "flex",
flexDirection: "column",
alignItems: "stretch"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = pupils).length; i$ < len$; ++i$) {
pupil = ref$[i$];
memberDescription = _.find(page.memberDescriptions.pupil, {
publicId: pupil.publicId
});
results$.push(inc("row/row")(pupil, groupCode, subgroupId, memberDescription));
}
return results$;
}()));
};
})();
pages/group/group/other/subgroupDetails/members/row/avatar/avatar.ls
(function(){
return function(pupil){
return inc("/lib/gui/avatar/avatar")(pupil.avatar).css({
width: "1.6em",
height: "1.6em",
flex: "0 0 auto"
});
};
})();
pages/group/group/other/subgroupDetails/members/row/checkbox/checkbox.ls
(function(){
return function(isSelected){
var div, setColor, update, iconOff, iconOn;
div = null;
setColor = function(color){
iconOff.setColor(color);
return iconOn.setColor(color);
};
update = function(s){
if (s) {
iconOn.show();
return iconOff.hide();
} else {
iconOff.show();
return iconOn.hide();
}
};
div = Div({
margin: "0.5em 0.4em 0 0"
}).append(iconOff = SvgIcon({
svg: path("/lib/svg/icon/check-off.svg"),
color: Color.grey[600]
}), iconOn = SvgIcon({
svg: path("/lib/svg/icon/check-on.svg"),
color: Color.grey[600]
}));
if (isSelected) {
iconOff.hide();
} else {
iconOn.hide();
}
div.setColor = setColor;
div.update = update;
return div;
};
})();
pages/group/group/other/subgroupDetails/members/row/name/name.ls
(function(){
return function(pupil, memberDescription){
var that;
return Div({
flex: "1 1 auto",
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis",
padding: "1em 0.3em",
textAlign: "left"
}).secureHtml(pupil.name, (that = memberDescription.dirDisplayName) ? Div({
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis",
color: Color.grey[700],
fontSize: "0.85em"
}).secureHtml("@ " + that) : void 8);
};
})();
pages/group/group/other/subgroupDetails/members/row/row.ls
(function(){
return function(pupil, groupCode, subgroupId, memberDescription){
var tap, div, b, checkbox;
tap = function(){
var t, isCanceled;
t = new Date();
div.css({
pointerEvents: "none"
});
pupil.isSelected = !pupil.isSelected;
isCanceled = false;
setTimeout(function(){
if (!isCanceled) {
return checkbox.setColor(Color.grey[450]);
}
}, 150);
return inc("submitSelected/submit")(groupCode, subgroupId, pupil, function(error){
var d, fakeDelay;
d = new Date() - t;
fakeDelay = error
? 0
: d < 150
? (isCanceled = true, 0)
: 500 - d < 0 ? 500 - d : 0;
return setTimeout(function(){
if (error) {
pupil.isSelected = !pupil.isSelected;
}
checkbox.setColor(Color.grey[600]);
checkbox.update(pupil.isSelected);
return div.css({
pointerEvents: ""
});
}, fakeDelay);
});
};
return div = Div({
display: "flex",
borderTop: b = "1px solid " + Color.grey[300],
borderBottom: b,
margin: "0 0 -1px",
paddingLeft: "0.4em"
}).html(checkbox = inc("checkbox/checkbox")(pupil.isSelected), inc("avatar/avatar")(pupil), inc("name/name")(pupil, memberDescription)).tap(tap);
};
})();
pages/group/group/other/subgroupDetails/members/row/submitSelected/submit.ls
(function(){
return function(groupCode, subgroupId, pupil, done){
return inc("/lib/util/pllsCall/call")({
path: pupil.isSelected
? path("/../server-apis-db2/apis/group/subgroup/members/add/add")
: path("/../server-apis-db2/apis/group/subgroup/members/remove/remove"),
params: {
groupCode: groupCode,
id: subgroupId,
publicId: pupil.publicId
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
return done(true);
},
onOffline: function(){
inc("/lib/offline/offlinePopup/popup")();
return done(true);
},
onCompleted: function(result){
if (result.status !== "ok") {
return debug(result);
} else {
return done();
}
}
});
};
})();
pages/group/group/other/subgroupDetails/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")(page.params.groupCode);
page.subgroups = inc("/data/group/calcSubgroups/calc")(page.params.groupCode);
page.subgroup = _.find(page.subgroups, {
id: page.params.subgroupId
});
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var loadMemberDescriptions, create;
loadMemberDescriptions = function(){
return inc("loadMemberDescriptions/load")(page, create);
};
create = function(){
return page.css({
width: "35em",
maxWidth: "95%",
margin: "0 auto 1em"
}).html(inc("_shared/subtitle/subtitle")(T("settings")), inc("rowName/row")(page), inc("rowDelete/row")(page), inc("_shared/subtitle/subtitle")(T("subgroupMembers")), inc("members/members")(page));
};
page.append(inc("/lib/gui/spinner/spinner")());
return loadMemberDescriptions();
}
};
};
})();
pages/group/group/other/subgroupDetails/rowDelete/popup/_t.ls
(function(){
return {
reallyDelete: {
de: "Möchtest du diese Untergruppe jetzt löschen?",
en: "Are you sure you want to delete this subgroup?",
fr: "Tu veux vraiment effacer ce sous-groupe ?",
es: "¿Realmente quieres borrar este subgrupo?",
pt: "Tem certeza que quer apagar este subgrupo?"
},
buttonCancel: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
buttonDelete: {
de: "Löschen",
en: "Delete",
fr: "Effacer",
es: "Borrar",
pt: "Apagar"
}
};
})();
pages/group/group/other/subgroupDetails/rowDelete/popup/delete/delete.ls
(function(){
return function(subgroup, groupCode){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/subgroup/delete/delete"),
params: {
groupCode: groupCode,
id: subgroup.id
},
onError: function(error){
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var ref$;
if (result.status === "ok") {
return (ref$ = window.groupLogs[groupCode]) != null ? ref$.sync(function(){
return startPage({
history: -1
});
}) : void 8;
} else {
return inc("/lib/gui/errorPopup/popup")();
}
}
});
};
})();
pages/group/group/other/subgroupDetails/rowDelete/popup/popup.ls
(function(){
return function(subgroup, groupCode){
var submit, close, div, popup;
submit = function(){
div.html(inc("/lib/gui/spinner/spinner")());
return inc("delete/delete")(subgroup, groupCode);
};
close = function(){
return popup.close();
};
div = Div({
padding: "1em"
}).html(Div({
lineHeight: "1.6em",
margin: "0.5em 0 1em"
}).html(T("reallyDelete")), Button(T("buttonCancel")).css({
margin: "0.5em"
}).tap(close), Button(T("buttonDelete")).css({
margin: "0.5em"
}).tap(submit).addClass("keyManager-enter").bind("keyManager", submit));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/group/group/other/subgroupDetails/rowDelete/row.ls
(function(){
return function(page){
return inc("../_shared/row/row")({
label: T("rowDeleteSubgroup"),
icon: path("/lib/svg/icon/bin.svg"),
page: page
}).tap(function(){
return inc("popup/popup")(page.subgroup, page.groupDescription.groupCode);
});
};
})();
pages/group/group/other/subgroupDetails/rowName/popup/_t.ls
(function(){
return {
nameCannotBeEmpty: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío.",
pt: "O nome não pode ficar vazio."
},
titleNewSubgroup: {
de: "Wie soll die Untergruppe heißen?",
en: "Name new subgroup.",
fr: "Choisis un nom pour le sous-groupe.",
es: "Elige un nombre para el subgrupo.",
pt: "Escolha um nome para o subgrupo."
},
buttonCancel: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
buttonSave: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
subgroupNotFound: {
de: "Die Untergruppe wurde nicht gefunden.",
en: "Subgroup not found.",
fr: "Le sous-groupe est introuvable.",
es: "No se encontró el subgrupo.",
pt: "O subgrupo não foi encontrado."
}
};
})();
pages/group/group/other/subgroupDetails/rowName/popup/popup.ls
(function(){
return function(subgroup, groupCode){
var submit, close, div, input, c;
submit = function(){
var name;
name = input.getValue().trim();
if (!name) {
inc("/lib/gui/toast/toast")({
label: T("nameCannotBeEmpty")
});
return;
}
div.html(inc("/lib/gui/spinner/spinner")());
return inc("rename/rename")(subgroup, groupCode, name);
};
close = function(){
return app.currentPopup.close();
};
div = Div({
padding: "1em"
}).append(T("titleNewSubgroup"), input = inc("/lib/gui/input2/input")({
showResetIcon: true,
keyboardParentDiv: app.currentPage.popupBottom,
onSubmit: submit,
keyboardSubmitLabel: T("buttonSave")
}).css({
display: "block",
margin: "1.5em auto",
width: "95%"
}), Button(T("buttonCancel")).css(c = {
margin: "0.5em"
}).tap(close), Button(T("buttonSave")).css(c).tap(submit));
inc("/lib/gui/popup/popup")({
html: div
});
input.setValue(subgroup.name);
return input.start();
};
})();
pages/group/group/other/subgroupDetails/rowName/popup/rename/rename.ls
(function(){
return function(subgroup, groupCode, name){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/subgroup/rename/rename"),
params: {
groupCode: groupCode,
id: subgroup.id,
name: name
},
onError: function(error){
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var label, ref$;
if (result.status !== "ok") {
label = result.status === "subgroup_not_found" ? T("subgroupNotFound") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: label
});
} else {
return (ref$ = window.groupLogs[groupCode]) != null ? ref$.sync(function(){
return startPage({
history: 0
});
}) : void 8;
}
}
});
};
})();
pages/group/group/other/subgroupDetails/rowName/row.ls
(function(){
return function(page){
return inc("../_shared/row/row")({
label: T("rowName"),
value: page.subgroup.name,
icon: path("/lib/svg/icon/arrow-right-small.svg")
}).tap(function(){
return inc("popup/popup")(page.subgroup, page.groupDescription.groupCode);
});
};
})();
pages/group/group/other/subgroupList/_t.ls
(function(){
return {
titleSubgroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
newSubgroup: {
de: "Neue Untergruppe",
en: "New subgroup",
fr: "Nouveau sous-groupe",
es: "Nuevo subgrupo",
pt: "Novo subgrupo"
},
noSubgroups: {
de: "Die Gruppe hat noch keine Untergruppen.",
en: "This group does not currently have any subgroups.",
fr: "Ce groupe n'a pas de sous-groupes pour le moment.",
es: "Este grupo aún no tiene subgrupos.",
pt: "Este grupo ainda não tem subgrupos."
}
};
})();
pages/group/group/other/subgroupList/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: T("titleSubgroups")
});
};
})();
pages/group/group/other/subgroupList/buttonCreate/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc("../../subgroupCreatePopup/popup")(page);
};
return Button({
label: T("newSubgroup"),
icon: path("/lib/svg/shape/plus.svg")
}).css({
margin: "1.5em"
}).tap(tap);
};
})();
pages/group/group/other/subgroupList/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")(page.params.groupCode);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.append(inc("subgroupRows/rows")(page), inc("buttonCreate/button")(page));
}
};
};
})();
pages/group/group/other/subgroupList/subgroupRows/noSubgroups/noSubgroups.ls
(function(){
return function(){
return Div({
marginBottom: "1em"
}).html(T("noSubgroups"));
};
})();
pages/group/group/other/subgroupList/subgroupRows/row/arrowIcon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
});
};
})();
pages/group/group/other/subgroupList/subgroupRows/row/row.ls
(function(){
return function(subgroup, page){
var tap, b;
tap = function(){
return startPage({
path: path("../../../subgroupDetails/page"),
animation: "slideLeft",
params: {
groupCode: page.params.groupCode,
subgroupId: subgroup.id
}
});
};
return Div({
display: "flex",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
margin: "0 0 -1px",
background: "white",
minHeight: "4em"
}).html(inc("tag/tag")(subgroup), inc("totalMembers/totalMembers")(subgroup), inc("arrowIcon/icon")()).tap(tap);
};
})();
pages/group/group/other/subgroupList/subgroupRows/row/tag/tag.ls
(function(){
return function(subgroup){
return Div({
flex: "1 1 auto",
display: "flex",
justifyContent: "flex-start",
pointerEvents: "none"
}).append(inc("/pages/content/_shared/pinTag/tag")({
type: "subgroup",
name: subgroup.name
}));
};
})();
pages/group/group/other/subgroupList/subgroupRows/row/totalMembers/totalMembers.ls
(function(){
return function(subgroup){
return Div({
display: "flex",
padding: "0 0.3em 0 1em"
}).html(subgroup.members.length);
};
})();
pages/group/group/other/subgroupList/subgroupRows/rows.ls
(function(){
return function(page){
var subgroups, update, div, s;
subgroups = inc("/data/group/calcSubgroups/calc")(page.groupDescription.groupCode);
update = function(events){
return div.replaceWith(inc(THISFILE)(page));
};
div = Div({
display: "flex",
margin: "0 auto",
flexDirection: "column",
width: "35em",
maxWidth: "95%",
alignItems: "stretch"
}).addClass("onNewLogEvents_setSubgroup", "onNewLogEvents_setSubgroupMember", "onNewLogEvents_deleteEvent").append(subgroups.length === 0
? inc("noSubgroups/noSubgroups")()
: (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = subgroups).length; i$ < len$; ++i$) {
s = ref$[i$];
results$.push(inc("row/row")(s, page));
}
return results$;
}()));
div.onNewLogEvents = update;
return div;
};
})();
pages/group/group/reloadPopup/_t.ls
(function(){
return {
groupSubscribeErrorText: {
de: "Ups, beim Starten deiner Gruppe ist ein Fehler aufgetreten. Bitte starte die App neu!",
en: "Oops! An error occurred while loading your group. Please restart the app.",
fr: "Oups… une erreur s'est produite pendant le chargement de ton groupe. Merci de rédémarrer l'appli.",
es: "¡Ups! Ocurrió un error al descargar el grupo. Por favor, reinicia la aplicación.",
pt: "Ops! Ocorreu um erro ao carregar o seu grupo. Por favor, reinicie o aplicativo."
},
restart: {
de: "Neu starten",
en_gb: "Restart",
en: "Reboot",
fr: "Redémarrer",
es: "Reiniciar",
pt: "Reiniciar"
}
};
})();
pages/group/group/reloadPopup/popup.ls
(function(){
return function(){
var div;
if (typeof log != 'undefined' && log !== null) {
log.log({
event: "debugGroupStartError",
groupLogs: _.keys(window.groupLogs)
});
}
div = Div({
display: "inline-block",
maxWidth: "90%",
margin: "1em",
lineHeight: "1.5em"
}).html(T("groupSubscribeErrorText"), "
Die Löschung einer Gruppe kann nicht rückgängig gemacht werden. Die Nutzerkonten bleiben bestehen, allerdings solltest du vorher sicherstellen, dass die Schüler/innen ihre Anmelde-Codes kennen, da du diese dann nicht mehr einsehen kannst.",
en_gb: "Are you sure you want to delete this group?
You will not be able to undo the deletion of the group. The accounts will remain, but you should first make sure that the pupils know their login codes. You will not be able to view the login codes after deleting the group.",
en: "Are you sure you want to delete this group?
You will not be able to undo the deletion of the group. The accounts will remain, but you should first make sure that the students know their login codes, as you will not be able to view them.",
fr: "Tu veux vraiment effacer ce groupe ?
Une fois le groupe effacé, il ne peut plus être récupéré. Les comptes existeront toujours, mais tu devrais vérifier que les élèves connaissent leurs codes de connexion. En effet, si tu effaces ce groupe, tu n'auras plus accès à leurs codes.",
es: "¿Realmente quieres borrar el grupo?
La eliminación del grupo es irreversible. Las cuentas que forman el grupo se mantendrán activas. Sin embargo, es importante que te asegures de que los y las estudiantes conozcan sus claves de acceso, ya que, cuando borres el grupo, no podrás verlas más.",
pt: "Tem certeza que deseja apagar o grupo?
A eliminação do grupo é irreversível. As contas presentes no grupo permanecerão ativas. No entanto, você deve se certificar de antemão que os alunos saibam seus códigos de acesso, já que depois eles não serão mais visíveis."
},
reallyDeleteGroupFamily: {
de: "Möchtest du die Gruppe wirklich löschen?
Die Löschung einer Gruppe kann nicht rückgängig gemacht werden. Die Nutzerkonten der Gruppenmitglieder bleiben bestehen, allerdings verlieren alle bis auf das Nutzerkonto, von dem ANTON-Plus-Familie gekauft wurde, ihre ANTON-Plus-Mitgliedschaft.
Außerdem solltest du sicherstellen, dass alle Gruppenmitglieder ihre Anmelde-Codes kennen, da du diese dann nicht mehr einsehen kannst. Von dem Nutzerkonto, von dem ANTON-Plus-Familie gekauft wurde, kann anschließend eine neue Familiengruppe erstellt werden.",
en_gb: "Are you sure you want to delete this group?
You will not be able to undo the deletion of the group. The group member accounts will remain, but only the account from which ANTON Plus Family was purchased will still have access to the ANTON Plus membership.
You should also first make sure that all group members know their login codes. You will not be able to view the login codes after deleting the group. A new family group can be created from the ANTON-Plus Family purchasing account.",
en: "Are you sure you want to delete this group?
You will not be able to undo the deletion of the group. The group member accounts will remain, but only the account from which ANTON Plus Family was purchased will still have access to the ANTON Plus membership.
You should also first make sure that all group members know their login codes, as you will not be able to view them. A new family group can then be created from the ANTON Plus Family purchasing account.",
fr: "Tu veux vraiment effacer ce groupe ?
Une fois le groupe effacé, il ne peut plus être récupéré. Les comptes du groupe existeront toujours, mais, à l'exception du compte à partir duquel ANTON-Plus a été acheté, ils perdent l'accès à l'abonnement ANTON-Plus.
Tu devrais aussi vérifier que les membres du groupe connaissent leurs codes de connexion. En effet, si tu effaces ce groupe, tu n'auras plus accès à leurs codes. Un nouveau groupe familial peut ensuite être créé depuis le compte à partir duquel ANTON-Plus a été acheté.",
es: "¿Realmente quieres borrar el grupo?
La eliminación del grupo es irreversible. Las cuentas que forman el grupo se mantendrán activas, pero sólo la cuenta con la que se adquirió ANTON-Plus Familia tendrá acceso a ANTON-Plus.
Además, debes asegúrate de que las y los miembros del grupo conozcan sus claves de acceso, ya que no podrás verlas más. Puedes crear un nuevo grupo familiar desde la cuenta con la que se adquirió ANTON-Plus Familia.",
pt: "Tem certeza que deseja apagar o grupo?
A eliminação do grupo é irreversível. As contas presentes no grupo permanecerão ativas, mas somente a conta com a qual o ANTON-Plus Família foi adquirido continuará tendo acesso ao ANTON-Plus.
Além disso, você deve se certificar de antemão que os alunos saibam seus códigos de acesso, já que depois eles não ficarão mais visíveis. Um novo grupo familiar poderá ser criado a partir da conta de usuário pela qual foi adquirido ANTON-Plus."
},
askCoTeachers: {
de: "
Bitte sprich dich zunächst mit den anderen Lehrkräften dieser Gruppe ab.",
en: "
Please first inform the other teachers of this group.",
fr: "
Merci d'informer d'abord les autres professeur·es de ce groupe.",
es: "
Por favor confirma primero con los y las demás docentes del grupo.",
pt: "
Por favor confirme primeiro com outros professores do grupo."
},
'delete': {
de: "Löschen",
en: "Delete",
fr: "Effacer",
es: "Borrar",
pt: "Apagar"
},
deleteGroup: {
de: "Gruppe löschen",
en: "Delete group",
fr: "Effacer le groupe",
es: "Borrar el grupo",
pt: "Apagar grupo"
},
groupDeletedInfo: {
de: "Die Gruppe $1 wurde erfolgreich gelöscht.",
en_gb: "The group $1 has been deleted successfully.",
en: "The group $1 has been successfully deleted.",
fr: "Le groupe $1 a bien été effacé.",
es: "El grupo $1 ha sido borrado exitosamente.",
pt: "O grupo $1 foi deletado com sucesso."
}
};
})();
pages/group/group/settings/delete/delete.ls
(function(){
return function(page){
var groupCode, click;
groupCode = page.groupDescription.groupCode;
click = function(){
return inc("popup/popup")(page);
};
return inc("../_row/row")({
label: T("deleteGroup"),
value: SvgIcon({
svg: path("/lib/svg/icon/bin.svg"),
color: Color.grey[700]
}).css({
marginTop: "0.14em"
})
}).tap(click);
};
})();
pages/group/group/settings/delete/popup/popup.ls
(function(){
return function(page){
var gd, clickYes, clickNo, div, buttonsDiv, css, popup;
gd = page.groupDescription;
clickYes = function(){
buttonsDiv.replaceWith(inc("/lib/gui/spinner/spinner")().css({
height: "3.5em"
}));
return inc("submit/submit")(page);
};
clickNo = function(){
return popup.close();
};
div = Div({
margin: "1em 0 0.5em"
}).append(Div({
paddingBottom: "0.7em",
lineHeight: "1.5em",
margin: "0 0.5em"
}).html(gd.type === "family"
? T("reallyDeleteGroupFamily")
: T("reallyDeleteGroup"), gd.type !== "family" && gd.members.admin.length > 1 ? T("askCoTeachers") : void 8), buttonsDiv = Div().append(Button(T("delete")).css(css = {
minWidth: "6em",
margin: "0.5em"
}).tap(clickYes), Button(T("cancelButton")).css(css).tap(clickNo)));
popup = inc("/lib/gui/popup/popup")({
html: div
});
return page.popup = popup;
};
})();
pages/group/group/settings/delete/popup/submit/submit.ls
(function(){
return function(page){
var groupCode;
groupCode = page.groupDescription.groupCode;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/group/delete/delete"),
params: {
groupCode: groupCode
},
requiredVisibleDiv: page,
onCompleted: function(result){
if (result.status !== "ok") {
return inc("/lib/gui/errorPopup/popup")();
} else {
page.popup.close();
return log.sync(function(){
inc("/lib/gui/toast/toast")({
label: T("groupDeletedInfo", page.groupDescription.name),
duration: 5000
});
if (app.currentPage === page) {
return inc("/pages/group/group/start")({
history: function(path){
return !_.includes("path", "settings");
},
animation: "slideDown"
});
}
});
}
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: function(){
page.popup.close();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/settings/disabledPlanCoins/_t.ls
(function(){
return {
coins: {
de: "Münzen",
en: "Coins",
fr: "Pièces",
es: "Fichas",
pt: "Moedas"
},
subtitleClass: {
de: "Deine Schüler/innen bekommen Münzen für:",
en_gb: "Your pupils receive coins for:",
en: "Your students receive coins for:",
fr: "Tes élèves reçoivent des pièces pour :",
es: "Tus estudiantes reciben fichas por:",
pt: "Seus/suas alunos(as) receberão moedas por:"
},
subtitleFamily: {
de: "Deine Familien-Mitglieder bekommen Münzen für:",
en: "Your family members receive coins for:",
fr: "Les membres de ta famille reçoivent des pièces pour :",
es: "Los miembros de tu familia reciben fichas por:",
pt: "Os membros da família receberão moedas por:"
},
restricted: {
de: "eingeschränkt",
en: "restricted",
fr: "limité",
es: "restringidas",
pt: "restrito"
},
unrestricted: {
de: "uneingeschränkt",
en: "unrestricted",
fr: "illimité",
es: "sin restricciones",
pt: "sem restrições"
}
};
})();
pages/group/group/settings/disabledPlanCoins/disabledPlanCoins.ls
(function(){
return function(page){
var click, plans, planInfos, deselectedPlans, row;
click = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
};
plans = _.map(inc("/data/content/calcPlanDescriptions/calc")(), "project");
planInfos = inc("/data/group/calcDisabledCoinsPlanInfos/calc")({
role: "teacher",
groupCode: page.groupDescription.groupCode
});
deselectedPlans = _.filter(planInfos != null ? planInfos[page.groupDescription.groupCode] : void 8, function(plan){
return in$(plan, plans);
});
row = inc("../_row/row")({
label: T("coins"),
value: deselectedPlans.length > 0
? T("restricted")
: T("unrestricted"),
icon: path("/lib/svg/icon/arrow-right-small.svg")
}).tap(click);
return row;
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/group/group/settings/disabledPlanCoins/page/_topbar/topbar.ls
(function(){
return function(page){
var close;
close = function(){
return startPage({
history: -1,
animation: "slideRight"
});
};
return inc("/addons/topbar2/topbar")({
back: function(){
var valuesBefore, valuesNow, groupCode;
valuesBefore = _.sortBy(page.deselectedPlans);
valuesNow = _.sortBy(_.map(_.filter(page.rows, function(r){
return !r.isSelected();
}), "project"));
if (!_.isEqual(valuesBefore, valuesNow)) {
groupCode = page.groupDescription.groupCode;
return window.groupLogs[groupCode].sync(close);
} else {
return close();
}
},
backLabel: page.groupDescription.name,
title: T("coins")
});
};
})();
pages/group/group/settings/disabledPlanCoins/page/page.ls
(function(){
return function(page){
var groupCode;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
groupCode = page.groupDescription.groupCode;
page.deselectedPlans = inc("/data/group/calcDisabledCoinsPlanInfos/calc")({
role: "teacher",
groupCode: groupCode
})[groupCode];
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.css({
width: "35em",
maxWidth: "90%",
margin: "1em auto"
}).append(inc("subtitle/subtitle")(page), inc("rows/rows")(page));
}
};
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/iconCheckbox/icon.ls
(function(){
return function(selected){
var div, iconOff, iconOn;
div = Div({
flex: "0 0 auto"
}).html(iconOff = SvgIcon({
svg: path("/lib/svg/icon/check-off.svg")
}).css({
marginTop: "0.2em"
}), iconOn = SvgIcon({
svg: path("/lib/svg/icon/check-on.svg")
}).css({
marginTop: "0.2em"
}));
if (selected) {
iconOff.hide();
} else {
iconOn.hide();
}
return div;
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/name/name.ls
(function(){
return function(name){
return Div({
flex: "1 1 auto"
}).secureHtml(name);
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/row.ls
(function(){
return function(page, pd, selectedInit){
var selected, icon, isDone, spinnerStartTime, tap, onDone, div, spinner;
selected = selectedInit;
icon = null;
isDone = true;
spinnerStartTime = null;
tap = function(){
div.css({
pointerEvents: "none"
});
isDone = false;
inc("save/save")(page, pd, selected, onDone);
return setTimeout(function(){
if (div.isVisible() && !isDone) {
spinner.show();
return spinnerStartTime = new Date();
}
}, 200);
};
onDone = function(success){
var delay;
div.css({
pointerEvents: ""
});
isDone = true;
if (!success) {
spinner.hide();
return;
}
selected = !selected;
delay = spinner.isVisible() && new Date() - spinnerStartTime < 300 ? 300 : 0;
return setTimeout(function(){
spinner.hide();
return icon.replaceWith(icon = inc("iconCheckbox/icon")(selected));
}, delay);
};
div = Div({
display: "flex",
padding: "0.5em",
borderBottom: "1px solid " + Color.grey[300]
}).html(inc("name/name")(pd.displayName), inc("spacer/spacer")(), spinner = inc("spinner/spinner")(), icon = inc("iconCheckbox/icon")(selected)).tap(tap);
div.project = pd.project;
div.isSelected = function(){
return selected;
};
return div;
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/save/save.ls
(function(){
return function(page, pd, wasSelected, onDone){
var groupCode, disable;
groupCode = page.groupDescription.groupCode;
disable = !!wasSelected;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/disablePlanCoins/disable"),
params: {
groupCode: groupCode,
project: pd.project,
disable: disable
},
onCompleted: function(result){
log.log({
event: "debugDisableCoins",
groupCode: groupCode,
project: pd.project,
disabled: disable
});
return onDone(true);
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
onDone(false);
return debug(error);
},
onOffline: function(){
inc("/lib/offline/offlinePopup/popup")();
return onDone(false);
}
});
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/spacer/spacer.ls
(function(){
return function(){
return Div({
flex: "1 1 auto"
});
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/row/spinner/spinner.ls
(function(){
return function(){
return Div({
flex: "0 0 auto",
paddingRight: "0.5em",
margin: "-0.2em 0"
}).append(inc("/lib/gui/spinner/spinner")()).hide();
};
})();
pages/group/group/settings/disabledPlanCoins/page/rows/rows.ls
(function(){
return function(page){
var pd, isSelected;
page.planDescriptions = inc("/data/content/calcPlanDescriptions/calc")();
return Div({
textAlign: "left",
marginTop: "1em"
}).html(page.rows = (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.planDescriptions).length; i$ < len$; ++i$) {
pd = ref$[i$];
isSelected = !_.includes(page.deselectedPlans, pd.project);
results$.push(inc("row/row")(page, pd, isSelected));
}
return results$;
}()));
};
})();
pages/group/group/settings/disabledPlanCoins/page/subtitle/subtitle.ls
(function(){
return function(page){
return Div({
lineHeight: "1.5em",
paddingTop: "0.5em"
}).html(page.groupDescription.type === "family"
? T("subtitleFamily")
: T("subtitleClass"));
};
})();
pages/group/group/settings/familyAntonPlus/_t.ls
(function(){
return {
label: {
de: "ANTON-Plus Familie",
en: "ANTON Plus Family",
fr: "ANTON-Plus Famille",
es: "ANTON-Plus Familia",
pt: "ANTON-Plus Familia"
},
value: {
de: "gültig bis $1",
en: "valid until $1",
fr: "valide jusqu'au $1",
es: "valido hasta el $1",
pt: "válido até $1"
}
};
})();
pages/group/group/settings/familyAntonPlus/familyAntonPlus.ls
(function(){
return function(page){
var validUntil, v, ref$;
validUntil = page.groupDescription.isPlusFamilyUntil;
v = validUntil > new Date()
? T("value", (ref$ = inc("/lib/util/formatDate2/format")(validUntil)) != null ? ref$.formats.dateShort : void 8)
: T("no");
return inc("../_row/row")({
label: T("label"),
value: v
});
};
})();
pages/group/group/settings/groupCode/groupCode.ls
(function(){
return function(page){
var groupCode;
if (!engine.isDebug) {
return;
}
groupCode = page.groupDescription.groupCode;
return Div({
textAlign: "center",
marginTop: "1.5em",
fontSize: "0.9em",
color: Color.grey[400],
userSelect: "text"
}).html(SvgIcon({
svg: path("/lib/svg/shape/debug.svg"),
color: Color.grey[350]
}).css({
verticalAlign: "-0.2em",
marginRight: "0.3em"
}), "GROUP CODE: " + groupCode);
};
})();
pages/group/group/settings/groupTypeFamily/_t.ls
(function(){
return {
groupType: {
de: "Gruppentyp",
en: "Group type",
fr: "Type de groupe",
es: "Tipo de grupo",
pt: "Tipo de grupo"
},
family: {
de: "Familie",
en: "Family",
fr: "Famille",
es: "Familia",
pt: "Família"
}
};
})();
pages/group/group/settings/groupTypeFamily/groupTypeFamily.ls
(function(){
return function(){
return inc("../_row/row")({
label: T("groupType"),
value: T("family")
});
};
})();
pages/group/group/settings/leave/_t.ls
(function(){
return {
leaveGroup: {
de: "Gruppe verlassen",
en: "Remove current user",
fr: "Quitter le groupe",
es: "Abandonar el grupo",
pt: "Sair do grupo"
},
reallyLeaveGroup: {
de: "Möchtest du diese Gruppe jetzt wirklich verlassen?",
en: "Are you sure you want to leave this group?",
fr: "Tu veux vraiment quitter ce groupe ?",
es: "¿Realmente quieres salir del grupo?",
pt: "Tem certeza que deseja sair do grupo?"
},
leaveButton: {
de: "Verlassen",
en: "Leave",
fr: "Quitter",
es: "Abandonar",
pt: "Sair"
},
errorLastAdmin: {
de: "Die letzte Lehrkraft kann die Gruppe nicht verlassen. Lösche die Gruppe oder füge eine weitere Lehrkraft hinzu.",
en: "The last teacher cannot leave the group. Delete the group or add another teacher.",
fr: "Le·La dernier·ère professeur·e ne peut pas quitter le groupe. Tu peux supprimer le groupe ou ajouter un·e professeur·e.",
es: "Tiene que haber al menos un/a docente dentro del grupo. Si deseas abandonarlo agrega a otro/a docente o elimina el grupo.",
pt: "O(a) último(a) professor(a) não pode sair do grupo.Delete o grupo ou adicione mais um(a) professor(a)."
},
errorLastAdminFamily: {
de: "Der letzte Familien-Admin kann die Gruppe nicht verlassen.",
en: "The last family admin cannot leave the group.",
fr: "Le·La dernier·ère admin de la famille ne peut pas quitter le groupe.",
es: "El/la único/a administrador/a de la familia no puede abandonar el grupo.",
pt: "O(a) último(a) adminsitrador(a) do grupo familiar não pode sair do grupo."
}
};
})();
pages/group/group/settings/leave/leave.ls
(function(){
return function(page){
return inc("../_row/row")({
label: T("leaveGroup"),
icon: path("/lib/svg/shape/exit.svg")
}).tap(function(){
return inc("popup/popup")(page);
});
};
})();
pages/group/group/settings/leave/popup/popup.ls
(function(){
return function(page){
return inc("/lib/gui/confirmPopup/popup")({
yesLabel: T("leaveButton"),
noLabel: T("cancelButton"),
label: T("reallyLeaveGroup"),
onConfirm: function(){
return inc("../../../../_shared/removeFromGroup/remove")(page);
},
animationOnClose: false
});
};
})();
pages/group/group/settings/lifetime/_t.ls
(function(){
return {
finished: {
de: "beendet",
en: "finished",
fr: "terminé",
es: "terminado",
pt: "finalizado"
},
nothingFound: {
de: "Es wurde nichts gefunden.",
en: "Nothing was found.",
fr: "Rien n'a été trouvé.",
es: "No hay resultados.",
pt: "Não há resultados."
},
selected: {
de: "Ausgewählt",
en: "selected",
fr: "sélectionné",
es: "seleccionado",
pt: "selecionado"
},
unlimited: {
de: "unbegrenzt",
en: "unlimited",
fr: "illimité",
es: "ilimitada",
pt: "ilimitado"
},
lifeTime: {
de: "Laufzeit",
en: "Duration",
fr: "Durée",
es: "Duración",
pt: "Duração"
}
};
})();
pages/group/group/settings/lifetime/isNotActive/isNotActive.ls
(function(){
return function(lifetime){
if ((lifetime != null && lifetime.endDate) && new Date(lifetime != null ? lifetime.endDate : void 8) < new Date()) {
return Div().append(Div({
display: "inline-block",
backgroundColor: Color.grey[300],
padding: "0.2em 0.5em",
fontSize: "0.8em",
borderRadius: "5px",
marginTop: "0.3em"
}).html(T("finished")));
}
};
})();
pages/group/group/settings/lifetime/lifetime.ls
(function(){
return function(page){
var lifetime, click;
if (engine.guiLanguage !== "de") {
return;
}
lifetime = page.groupDescription.lifetime;
click = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
completedFunction: path("onChooseCompletedFunction/onCompleted"),
groupCode: page.groupDescription.groupCode
}
});
};
return inc("../_row/row")({
label: T("lifeTime"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
value: Div().html(!lifetime
? T("unlimited")
: "" + lifetime.name + "\n \n(" + inc("/lib/util/formatDateRange/format")(lifetime.startDate, lifetime.endDate) + ")").append(inc("isNotActive/isNotActive")(lifetime))
}).tap(click);
};
})();
pages/group/group/settings/lifetime/onChooseCompletedFunction/onCompleted.ls
(function(){
return function(preset){
var groupCode;
groupCode = app.currentPage.params.groupCode;
return inc("/data/group/updateLifetime/update")({
groupCode: groupCode,
name: preset.startDate ? preset.name : "none",
startDate: preset.startDate,
endDate: preset.endDate,
onCompleted: function(){
return window.groupLogs[groupCode].sync(function(){
return startPage({
history: -1,
animation: "slideRight"
});
});
},
onOffline: function(){
body.find(".rowSpinner")[0].remove();
return inc("/lib/offline/offlinePopup/popup")();
},
onError: function(error){
body.find(".rowSpinner")[0].remove();
debug(error);
return inc("/lib/gui/errorPopup/popup")();
}
});
};
})();
pages/group/group/settings/lifetime/page/_topbar/input/input.ls
(function(){
return function(page){
var onSubmit, onReset, input;
onSubmit = function(){
var value;
value = input.getValue();
return page.load(value);
};
onReset = function(){
return onSubmit();
};
input = inc("/lib/gui/input2/input")({
onSubmit: onSubmit,
onReset: onSubmit,
showSearchIcon: true,
showResetIcon: true,
autoSubmitDelay: 1000
}).css({
flex: "1 1 auto",
maxWidth: "35em",
padding: "0.3em 1.6em",
margin: "0",
textAlign: "left",
backgroundColor: "white"
});
page.input = input;
return input;
};
})();
pages/group/group/settings/lifetime/page/_topbar/topbar.ls
(function(){
return function(page){
var div;
div = Div({
flex: "1 1 auto",
display: "flex",
pointerEvents: "auto",
fontWeight: "normal"
}).append(inc("input/input")(page));
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: div
});
};
})();
pages/group/group/settings/lifetime/page/loadPresets/load.ls
(function(){
var presets;
presets = null;
return function(o){
var loadPresets, filterPresets;
loadPresets = function(){
return inc("/lib/util/loadProject/load")("group-lifetimes", function(){
var res$, i$, len$, p;
presets = inc("/../group-lifetimes/presets", {
silentError: true
});
if (presets.includeError) {
presets = undefined;
inc("/lib/offline/offlinePage/offlinePage")(o.page);
return;
}
res$ = [];
for (i$ = 0, len$ = presets.length; i$ < len$; ++i$) {
p = presets[i$];
res$.push({
startDate: p[0],
endDate: p[1],
name: p[2]
});
}
presets = res$;
return filterPresets();
});
};
filterPresets = function(){
var resultPresets;
resultPresets = _.filter(presets, function(p){
if (!o.value) {
return true;
} else {
return _.includes(p.name.toLowerCase(), o.value.toLowerCase());
}
});
return o.onCompleted(resultPresets);
};
if (presets) {
return filterPresets();
} else {
return loadPresets();
}
};
})();
pages/group/group/settings/lifetime/page/notFound/notFound.ls
(function(){
return function(page){
return Div({
fontStyle: "italic"
}).append(T("nothingFound"));
};
})();
pages/group/group/settings/lifetime/page/page.ls
(function(){
return function(page){
if (page.params.groupCode) {
page.groupDescription = inc("/data/group/calcGroupDescription/calc")(page.params.groupCode);
}
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var search;
page.load = function(value){
value = value || "";
page.params.search = value;
return inc("loadPresets/load")({
value: value,
onCompleted: page.showRows,
page: page
});
};
page.showRows = function(presets){
page.presets = presets;
return page.empty().append(presets.length > 0
? inc("rows/rows")(page)
: inc("notFound/notFound")());
};
page.reset = function(){
page.input.setValue("");
return page.input.start();
};
page.submit = function(preset){
page.params.lastPresetName = preset.name;
return inc("submit/submit")(page, preset);
};
page.append(inc("/lib/gui/spinner/spinner")());
search = page.params.search;
page.input.setValue(search);
return page.load(search);
}
};
};
})();
pages/group/group/settings/lifetime/page/rows/row/isCurrent/isCurrent.ls
(function(){
return function(page, preset){
var ref$, ref1$, ref2$;
if (preset.name === ((ref$ = page.groupDescription) != null ? (ref1$ = ref$.lifetime) != null ? ref1$.name : void 8 : void 8) || (preset.startDate != null) === false && page.groupDescription != null && (((ref2$ = page.groupDescription) != null ? ref2$.lifetime : void 8) != null) === false) {
return Div({
display: "inline-block",
backgroundColor: Color.grey[300],
padding: "0.2em 0.5em",
fontSize: "0.8em",
borderRadius: "5px",
color: "black",
marginTop: "0.3em",
marginRight: "0.5em"
}).html(T("selected"));
}
};
})();
pages/group/group/settings/lifetime/page/rows/row/isNotActive/isNotActive.ls
(function(){
return function(lifetime){
if ((lifetime != null && lifetime.endDate) && new Date(lifetime != null ? lifetime.endDate : void 8) < new Date()) {
return Div({
display: "inline-block",
backgroundColor: Color.grey[100],
padding: "0.2em 0.5em",
fontSize: "0.8em",
borderRadius: "5px",
marginTop: "0.3em"
}).html(T("finished"));
}
};
})();
pages/group/group/settings/lifetime/page/rows/row/row.ls
(function(){
return function(page){
var rowFunction;
return rowFunction = function(preset){
var click, div;
click = function(){
div.append(inc("rowSpinner/rowSpinner")());
return page.submit(preset);
};
return div = Div().html(Div().cssClass({
width: "35em",
maxWidth: "95%",
margin: "0 auto",
textAlign: "left",
padding: "0.7em 0.3em 0.7em 1.2em",
borderBottom: "1px solid " + Color.grey[300]
}).html(preset.name, Div().html(inc("isCurrent/isCurrent")(page, preset), inc("isNotActive/isNotActive")(preset))).tap(click));
};
};
})();
pages/group/group/settings/lifetime/page/rows/row/rowSpinner/rowSpinner.ls
(function(){
return function(){
return Div().addClass("rowSpinner").css({
position: "absolute",
display: "flex",
left: "0.15em",
top: 0,
bottom: 0
}).append(inc("/lib/gui/spinner/spinner")({
small: true
}));
};
})();
pages/group/group/settings/lifetime/page/rows/rows.ls
(function(){
return function(page){
return ListDiv({
data: page.presets,
row: inc("row/row")(page),
nearScopeSize: 0.5
}).css({
height: "var(--centerHeight)"
});
};
})();
pages/group/group/settings/lifetime/page/submit/submit.ls
(function(){
return function(page, preset){
var funtionPath;
funtionPath = page.params.completedFunction;
return inc(funtionPath)(preset);
};
})();
pages/group/group/settings/lockedAvatarDesigner/_t.ls
(function(){
return {
errorInput: {
de: "Es sind nur Werte von 1 - 480 erlaubt.",
en: "Only values from 1-480 are allowed.",
fr: "Seuls les nombres de 1 à 480 sont acceptés.",
es: "Sólo se aceptan números del 1 al 480.",
pt: "Só são permitidos valores de 1 - 480."
},
disableForMinutes: {
de: "Für wie viele Minuten soll der Avatar-Designer gesperrt werden?",
en: "How many minutes should the avatar designer be disabled for?",
fr: "Pour combien de minutes le créateur d'avatars doit-il être désactivé ?",
es: "¿Cuántos minutos quieres que el diseñador de avatares permanezca desactivado?",
pt: "Por quantos minutos o criador de avatares deverá ser desativado?"
},
disableNow: {
de: "Soll der Avatar-Designer jetzt wieder aktiviert werden?",
en: "Would you like to reactivate the avatar designer?",
fr: "Veux-tu réactiver le créateur d'avatars ?",
es: "¿Quieres reactivar el diseñador de avatares?",
pt: "Gostaria de reativar o criador de avatares?"
},
avatarDesigner: {
de: "Avatar-Designer",
en: "Avatar designer",
fr: "Créateur d'avatars",
es: "Diseñador de avatares",
pt: "Criador de avatares"
},
locked: {
de: "$1 gesperrt",
en: "locked for $1",
fr: "Désactivé pour $1",
es: "bloqueado por $1",
pt: "bloqueado por $1"
},
active: {
de: "aktiviert",
en: "activated",
fr: "activé",
es: "activado",
pt: "ativado"
}
};
})();
pages/group/group/settings/lockedAvatarDesigner/lockedAvatarDesigner.ls
(function(){
return function(page){
var groupCode, plusFeatureMode, hasAccess, isExpiredFamily, lockedDetails, tap, row;
groupCode = page.groupDescription.groupCode;
if ((typeof log == 'undefined' || log === null) || groupCode == null) {
return;
}
plusFeatureMode = page.groupDescription.plusFeatureMode;
hasAccess = plusFeatureMode === "enabled";
isExpiredFamily = plusFeatureMode === "expiredPlusFamily";
lockedDetails = inc("/data/group/calcLockedFeature/calc")({
groupCode: groupCode,
eventName: "lockAvatarDesigner"
});
tap = function(){
if (!hasAccess) {
if (isExpiredFamily) {
return inc("/lib/gui/noPlusFamilyPopup/popup")();
} else {
return inc("/lib/gui/noSchoolLicensePopup/popup")();
}
} else {
if (lockedDetails.seconds > 0) {
return inc("popupCancel/popup")(page);
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
}
}
};
row = inc("row/row")(hasAccess, lockedDetails).tap(tap);
setTimeout(function(){
if (app.currentPage === page) {
return row.replaceWith(inc(THISFILE)(page));
}
}, 1000);
return row;
};
})();
pages/group/group/settings/lockedAvatarDesigner/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: T("avatarDesigner")
});
};
})();
pages/group/group/settings/lockedAvatarDesigner/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("disableForMinutes"),
submitLabel: T("continueButton"),
submit: submit,
screenKeyboardLayout: "numbers"
}));
form.input.css({
minWidth: "3em"
});
return form.input.start();
}
};
};
})();
pages/group/group/settings/lockedAvatarDesigner/page/submit/submit.ls
(function(){
return function(page, form){
var groupCode, min, onOffline;
groupCode = page.groupDescription.groupCode;
min = parseInt(form.input.getValue());
if (min < 1 || min > 480 || _.isNaN(min)) {
requestAnimationFrame(function(){
form.error.html(T("errorInput"));
return form.input.start();
});
return;
}
form.showSpinner();
onOffline = function(){
form.input.start();
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/lockAvatarDesigner/lock"),
params: {
groupCode: groupCode,
durationSecs: min * 60
},
requiredVisibleDiv: page,
onCompleted: function(result){
log.log({
event: "debugLockAvatarDesigner",
groupCode: groupCode,
durationSecs: min * 60
});
return setTimeout(function(){
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return startPage({
history: -1,
animation: "slideRight"
});
}
});
}, 1000);
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
form.hideSpinner();
return debug(error);
},
onOffline: onOffline
});
};
})();
pages/group/group/settings/lockedAvatarDesigner/popupCancel/popup.ls
(function(){
return function(page){
var clickYes, clickNo, div, buttons, css, popup;
clickYes = function(){
return inc("submit/submit")(page, popup);
};
clickNo = function(){
return popup.close();
};
div = Div({
margin: "1em 0 0.5em"
}).append(Div({
marginBottom: "0.5em"
}).html(T("disableNow")), buttons = Div({
padding: "0.5em 0"
}).append(Button(T("yes")).css(css = {
minWidth: "6em",
margin: "0 0.5em"
}).tap(clickYes), Button(T("no")).css(css).tap(clickNo)));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/group/group/settings/lockedAvatarDesigner/popupCancel/submit/submit.ls
(function(){
return function(page, popup){
var groupCode, onOffline, onError;
groupCode = page.groupDescription.groupCode;
onOffline = function(){
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(){
return inc("/lib/gui/errorPopup/popup")();
};
popup.css({
pointerEvents: "none"
});
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/lockAvatarDesigner/lock"),
params: {
groupCode: groupCode,
durationSecs: 0
},
requiredVisibleDiv: page,
onCompleted: function(result){
log.log({
event: "debugLockAvatarDesigner",
groupCode: groupCode,
durationSecs: 0
});
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return popup.close();
}
});
},
onOffline: onOffline,
onError: onError
});
};
})();
pages/group/group/settings/lockedAvatarDesigner/row/row.ls
(function(){
return function(hasAccess, lockedDetails){
return inc("../../_row/row")({
label: T("avatarDesigner"),
icon: !hasAccess
? path("/lib/svg/shape/help.svg")
: lockedDetails.seconds > 0
? path("/lib/svg/icon/close-small.svg")
: path("/lib/svg/icon/arrow-right-small.svg"),
value: !hasAccess
? Span().css({
color: Color.grey[600]
}).html(T("active"))
: lockedDetails.seconds > 0
? Span().css({
color: Color.red[700]
}).html(T("locked", lockedDetails.label))
: Span().css({
color: Color.green[600]
}).html(T("active"))
});
};
})();
pages/group/group/settings/lockedGames/_t.ls
(function(){
return {
games: {
de: "Spiele",
en: "Games",
fr: "Jeux",
es: "Juegos",
pt: "Jogos"
},
errorInput: {
de: "Es sind nur Werte von 1 - 480 erlaubt.",
en: "Only values from 1-480 are allowed.",
fr: "Seuls les nombres de 1 à 480 sont acceptés.",
es: "Sólo se aceptan números del 1 al 480.",
pt: "Só são permitidos valores de 1 a 480."
},
disableGamesForMinutes: {
de: "Für wie viele Minuten sollen die Spiele gesperrt werden?",
en: "How many minutes should the games be disabled for?",
fr: "Pour combien de minutes les jeux doivent-ils être désactivés ?",
es: "¿Cuántos minutos quieres que los juegos permanezcan desactivados?",
pt: "Por quantos minutos os jogos devem ser desativados?"
},
disableGamesNow: {
de: "Sollen die Spiele jetzt wieder aktiviert werden?",
en: "Would you like to reactivate the games?",
fr: "Veux-tu réactiver les jeux ?",
es: "¿Quieres reactivar los juegos?",
pt: "Você gostaria de reativar os jogos?"
},
yes: {
de: "Ja",
en: "Yes",
fr: "Oui",
es: "Sí",
pt: "Sim"
},
no: {
de: "Nein",
en: "No",
fr: "Non",
es: "No",
pt: "Não"
},
gameLocked: {
de: "$1 gesperrt",
en: "locked for $1",
fr: "Désactivé pour $1",
es: "bloqueados por $1",
pt: "Desativados por $1"
},
active: {
de: "aktiviert",
en: "activated",
fr: "activé",
es: "activados",
pt: "ativados"
}
};
})();
pages/group/group/settings/lockedGames/lockedGames.ls
(function(){
return function(page){
var groupCode, lockedDetails, click, row;
groupCode = page.groupDescription.groupCode;
lockedDetails = inc("/data/group/calcLockedFeature/calc")({
groupCode: groupCode,
eventName: "lockGames"
});
click = function(){
if (lockedDetails.seconds > 0) {
return inc("popupCancel/popup")(page);
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
}
};
row = inc("row/row")(lockedDetails).tap(click);
setTimeout(function(){
if (app.currentPage === page || row.isVisible()) {
return row.replaceWith(inc(THISFILE)(page));
}
}, 1000);
return row;
};
})();
pages/group/group/settings/lockedGames/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: T("games")
});
};
})();
pages/group/group/settings/lockedGames/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("disableGamesForMinutes"),
submitLabel: T("continueButton"),
submit: submit,
screenKeyboardLayout: "numbers"
}));
form.input.css({
minWidth: "3em"
});
return form.input.start();
}
};
};
})();
pages/group/group/settings/lockedGames/page/submit/submit.ls
(function(){
return function(page, form){
var groupCode, min, onOffline;
groupCode = page.groupDescription.groupCode;
min = parseInt(form.input.getValue());
if (min < 1 || min > 480 || _.isNaN(min)) {
requestAnimationFrame(function(){
form.error.html(T("errorInput"));
return form.input.start();
});
return;
}
form.showSpinner();
onOffline = function(){
form.input.start();
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/lockGames/lock"),
params: {
groupCode: groupCode,
durationSecs: min * 60
},
requiredVisibleDiv: page,
onCompleted: function(result){
log.log({
event: "debugLockGames",
groupCode: groupCode,
durationSecs: min * 60
});
return setTimeout(function(){
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return startPage({
history: -1,
animation: "slideRight"
});
}
});
}, 1000);
},
onError: function(error){
form.hideSpinner();
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: onOffline
});
};
})();
pages/group/group/settings/lockedGames/popupCancel/popup.ls
(function(){
return function(page){
var clickYes, clickNo, div, buttons, css, popup;
clickYes = function(){
return inc("submit/submit")(page, popup);
};
clickNo = function(){
return popup.close();
};
div = Div({
margin: "1em 0 0.5em"
}).append(Div({
marginBottom: "0.5em"
}).html(T("disableGamesNow")), buttons = Div({
padding: "0.5em 0"
}).append(Button(T("yes")).css(css = {
minWidth: "6em",
margin: "0 0.5em"
}).tap(clickYes), Button(T("no")).css(css).tap(clickNo)));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/group/group/settings/lockedGames/popupCancel/submit/submit.ls
(function(){
return function(page, popup){
var groupCode, onOffline, onError;
groupCode = page.groupDescription.groupCode;
popup.css({
pointerEvents: "none"
});
onOffline = function(){
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(){
return inc("/lib/gui/errorPopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/lockGames/lock"),
params: {
groupCode: groupCode,
durationSecs: 0
},
requiredVisibleDiv: page,
onCompleted: function(result){
log.log({
event: "debugLockGames",
groupCode: groupCode,
durationSecs: 0
});
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return popup.close();
}
});
},
onOffline: onOffline,
onError: onError
});
};
})();
pages/group/group/settings/lockedGames/row/row.ls
(function(){
return function(lockedDetails){
return inc("../../_row/row")(lockedDetails.seconds > 0
? {
label: T("games"),
icon: path("/lib/svg/icon/close-small.svg"),
value: Span().css({
color: Color.red[700]
}).html(T("gameLocked", lockedDetails.label))
}
: {
label: T("games"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
value: Span().css({
color: Color.green[600]
}).html(T("active"))
});
};
})();
pages/group/group/settings/message/_t.ls
(function(){
return {
message: {
de: "Gruppen-Nachricht",
en: "Group message",
fr: "Message pour le groupe",
es: "Mensaje grupal",
pt: "Mensagem de grupo"
},
groupMessageInfo: {
de: "Hier kannst du eine Nachricht schreiben, die $1 dann dauerhaft oberhalb der gepinnten Inhalte angezeigt wird.",
en_gb: "Here you can write a message that will be visible to $1 in the content overview.",
en: "Here you can write a message that will be visible to $1 in the content overview.",
fr: "Ici tu peux écrire un message que $1 verront dans la présentation du contenu.",
es: "Aquí puedes escribir un mensaje que verán $1 sobre la tabla de contenidos asignados.",
pt: "Aqui você pode escrever uma mensagem que ficará visível para $1 acima da lista de conteúdos marcados."
},
yourFamilyMembers: {
de: "deinen Familienmitgliedern",
en: "your family members",
fr: "les membres de ta famille",
es: "los integrantes de tu familia",
pt: "os membros da sua família"
},
yourPupils: {
de: "deinen Schüler/innen",
en_gb: "your pupils",
en: "your students",
fr: "tes élèves",
es: "tus estudiantes",
pt: "seus alunos"
},
saveButton: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
charsLeft: {
de: "noch $1",
en: "$1 left",
fr: "$1 restants",
es: "$1 restantes",
pt: "$1 restantes"
},
notSet: {
de: "nicht gesetzt",
en: "not set",
fr: "indéfini",
es: "indefinido",
pt: "indefinido"
}
};
})();
pages/group/group/settings/message/deleteGroupMessageOptions/_t.ls
(function(){
return {
title: {
de: "Möchtest du die bestehende Gruppennachricht entfernen?",
en: "Would you like to remove the existing group message?",
fr: "Veux-tu supprimer le message noté dans le groupe ?",
es: "¿Quieres borrar el mensaje de grupo guardado?",
pt: "Você gostaria de apagar a mensagem de grupo existente?"
},
remove: {
de: "Ja, entfernen",
en: "Yes, remove",
fr: "Oui, supprimer",
es: "Sí, borrar.",
pt: "Sim, apagar"
}
};
})();
pages/group/group/settings/message/deleteGroupMessageOptions/options.ls
(function(){
return function(page, popup){
var clickYes, clickNo, div, buttonsDiv, css;
clickYes = function(){
popup.css({
pointerEvents: "none"
});
buttonsDiv.replaceWith(inc("/lib/gui/spinner/spinner")().css({
height: "3.5em"
}));
return inc("submit/submit")(page, popup);
};
clickNo = function(){
return popup.close();
};
return div = Div({
margin: "1.5em 0 0",
paddingTop: "1em",
borderTop: "1px solid " + Color.grey[300]
}).append(Div({
paddingBottom: "0.7em",
lineHeight: "1.5em",
margin: "0 0.5em"
}).html(T("title")), buttonsDiv = Div().append(Button(T("remove")).css(css = {
minWidth: "6em",
margin: "0.5em"
}).tap(clickYes), Button(T("cancelButton")).css(css).tap(clickNo)));
};
})();
pages/group/group/settings/message/deleteGroupMessageOptions/submit/submit.ls
(function(){
return function(page, popup){
var groupCode;
groupCode = page.groupDescription.groupCode;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/groupMessage/update"),
params: {
groupCode: groupCode
},
onCompleted: function(result){
log.log({
event: "debugSetGroupMessage",
groupCode: groupCode
});
return setTimeout(function(){
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return startPage({
history: 0
});
}
});
}, 1000);
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: function(){
popup.close();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/group/settings/message/message.ls
(function(){
return function(page){
var groupCode, plusFeatureMode, hasAccess, isExpiredFamily, groupMessage, tap;
groupCode = page.groupDescription.groupCode;
if ((typeof log == 'undefined' || log === null) || groupCode == null) {
return;
}
plusFeatureMode = page.groupDescription.plusFeatureMode;
hasAccess = plusFeatureMode === "enabled";
isExpiredFamily = plusFeatureMode === "expiredPlusFamily";
groupMessage = inc("/data/group/calcGroupMessage/calc")(groupCode);
tap = function(){
var popup;
if (!hasAccess) {
popup = isExpiredFamily
? inc("/lib/gui/noPlusFamilyPopup/popup")()
: inc("/lib/gui/noSchoolLicensePopup/popup")();
if (groupMessage) {
return popup.findFirst(".popupContent").append(inc("deleteGroupMessageOptions/options")(page, popup));
}
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
message: groupMessage
}
});
}
};
return inc("row/row")(hasAccess, groupMessage).tap(tap);
};
})();
pages/group/group/settings/message/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: T("message")
});
};
})();
pages/group/group/settings/message/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var maxLength, submit, label2, label, input, ref$, charCounter, button;
maxLength = 300;
submit = function(){
return inc("submit/submit")(page, button, input);
};
label2 = page.groupDescription.type === "family"
? T("yourFamilyMembers")
: T("yourPupils");
label = T("groupMessageInfo", label2);
return page.html(Div({
width: "30em",
margin: "0 auto",
maxWidth: "90%",
lineHeight: "1.5em"
}).html(label), Div({
height: "10em",
width: "20em",
maxWidth: "95%",
margin: "1em auto 0"
}).html(input = inc("/lib/gui/inputEditable/input")({
value: (ref$ = page.params.message) != null ? ref$.message : void 8,
multiline: true,
maxLength: maxLength,
onChange: function(){
return typeof charCounter != 'undefined' && charCounter !== null ? charCounter.html(T("charsLeft", maxLength - input.getValue().length)) : void 8;
}
}).css({
height: "10em",
maxHeight: "",
width: "20em",
maxWidth: "95%",
margin: "0 auto"
}), charCounter = Div({
position: "absolute",
bottom: "-2em",
left: "1em",
fontSize: "0.9em",
color: Color.grey[400]
}).html(T("charsLeft", maxLength - (input != null ? input.getValue().length : void 8)))), button = Button(T("saveButton")).css({
alignSelf: "center",
marginTop: "0.5em"
}).tap(submit));
}
};
};
})();
pages/group/group/settings/message/page/submit/submit.ls
(function(){
return function(page, button, input){
var groupCode, spinner, message, ref$, onOffline;
groupCode = page.groupDescription.groupCode;
spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(button);
input.disable();
message = (ref$ = input.getValue()) != null ? ref$.trim() : void 8;
if (message.length === 0) {
message = undefined;
}
onOffline = function(){
input.start();
spinner.stop();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/groupMessage/update"),
params: {
groupCode: groupCode,
message: message
},
requiredVisibleDiv: page,
onCompleted: function(result){
log.log({
event: "debugSetGroupMessage",
groupCode: groupCode,
message: message
});
return setTimeout(function(){
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return startPage({
history: -1,
animation: "slideRight"
});
}
});
}, 1000);
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
spinner.stop();
return debug(error);
},
onOffline: onOffline
});
};
})();
pages/group/group/settings/message/row/row.ls
(function(){
return function(hasAccess, groupMessage){
var value, lines;
if (groupMessage == null) {
value = {
message: T("notSet")
};
} else {
lines = groupMessage.message.split("\n");
value = lines.length > 1
? lines[0] + " …"
: lines[0];
}
return inc("../../_row/row")({
label: T("message"),
icon: !hasAccess
? path("/lib/svg/shape/help.svg")
: path("/lib/svg/icon/arrow-right-small.svg"),
value: Div({
display: "inline-block",
verticalAlign: "top",
flex: "0 1 auto",
maxWidth: "100%",
width: "10em",
whiteSpace: "nowrap",
overflow: "hidden",
textOverflow: "ellipsis"
}).secureHtml(value)
});
};
})();
pages/group/group/settings/name/_t.ls
(function(){
return {
changeName: {
de: "Name ändern",
en: "Change name",
fr: "Changer le nom",
es: "Cambiar nombre",
pt: "Modificar nome"
},
emptyNameError: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío.",
pt: "O nome não pode ficar vazio."
},
name: {
de: "Name",
en: "Name",
fr: "Nom ",
es: "Nombre",
pt: "Nome"
},
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
}
};
})();
pages/group/group/settings/name/name.ls
(function(){
return function(page){
var name, click;
name = page.groupDescription.name;
click = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
};
return inc("../_row/row")({
label: T("name"),
value: name,
icon: path("/lib/svg/icon/arrow-right-small.svg")
}).tap(click);
};
})();
pages/group/group/settings/name/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: T("changeName")
});
};
})();
pages/group/group/settings/name/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("name") + ":",
submitLabel: T("change"),
submit: submit
}));
form.input.setValue(page.groupDescription.name);
return form.input.start();
}
};
};
})();
pages/group/group/settings/name/page/submit/submit.ls
(function(){
return function(page, form){
var name, groupCode, onOffline;
name = form.input.getValue();
groupCode = page.groupDescription.groupCode;
if (name.length === 0) {
form.error.html(T("emptyNameError"));
form.input.start();
return;
}
form.showSpinner();
onOffline = function(){
form.input.start();
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/group/rename/rename"),
params: {
groupCode: groupCode,
name: name
},
requiredVisibleDiv: page,
onCompleted: function(result){
if (result.status !== "ok") {
return inc("/lib/gui/errorPopup/popup")();
} else {
return setTimeout(function(){
return window.groupLogs[groupCode].sync(function(error){
if (error) {
return onOffline();
} else {
return startPage({
history: -1,
animation: "slideRight"
});
}
});
}, 1000);
}
},
onError: function(error){
form.hideSpinner();
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: onOffline
});
};
})();
pages/group/group/settings/page.ls
(function(){
return function(page){
var hasChat, ref$;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.schoolDescription = page.groupDescription.school;
hasChat = (ref$ = page.schoolDescription) != null ? ref$.hasChat : void 8;
return {
navCategory: "groups",
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.css({
margin: "1.5em 0"
}).append(inc("name/name")(page), page.groupDescription.type === "family"
? [inc("groupTypeFamily/groupTypeFamily")(), inc("familyAntonPlus/familyAntonPlus")(page), inc("pinsHiddenSettings/pinsHiddenSettings")(page), hasChat ? inc("chat/chat")(page) : void 8, inc("certificates/certificates")(page), inc("message/message")(page), inc("lockedAvatarDesigner/lockedAvatarDesigner")(page), inc("lockedGames/lockedGames")(page), inc("disabledPlanCoins/disabledPlanCoins")(page)]
: [inc("subgroups/subgroups")(page), inc("pinsHiddenSettings/pinsHiddenSettings")(page), hasChat ? inc("chat/chat")(page) : void 8, inc("certificates/certificates")(page), inc("message/message")(page), inc("lockedAvatarDesigner/lockedAvatarDesigner")(page), inc("lockedGames/lockedGames")(page), inc("disabledPlanCoins/disabledPlanCoins")(page), inc("lifetime/lifetime")(page), inc("school/school")(page)], inc("created/created")(page), inc("leave/leave")(page), inc("delete/delete")(page), inc("groupCode/groupCode")(page));
}
};
};
})();
pages/group/group/settings/pinsHiddenSettings/_t.ls
(function(){
return {
yourFamilyMembers: {
de: "Familienmitglieder",
en: "your family members",
fr: "les membres de ta famille",
es: "integrantes de la familia",
pt: "Membros da família"
},
yourPupils: {
de: "deine Schüler/innen",
en_gb: "your pupils",
en: "your students",
fr: "tes élèves",
es: "tus estudiantes",
pt: "Seus alunos"
},
pinSettingsTitle: {
de: "Sichtbarkeit von Pins für $1 einschränken:",
en_gb: "Restrict visibility of pins for $1:",
en: "Restrict visibility of pins for $1:",
fr: "Masquer des activités épinglées pour $1.",
es: "Limitar la visibilidad de los elementos asignados.",
pt: "Limitar a visibilidade das marcações por $1."
},
past: {
de: "vergangene",
en: "past",
fr: "passées",
es: "pasados",
pt: "passados"
},
future: {
de: "zukünftige",
en: "future",
fr: "futures",
es: "futuros",
pt: "futuros"
},
and: {
de: "und",
en: "and",
fr: "et",
es: "y",
pt: "e"
},
rowLabelPast: {
de: "Vergangene Pins ausblenden",
en: "Hide past pinned exercises",
fr: "Masquer les activités passées",
es: "Esconder elementos pasados",
pt: "Ocultar marcações passadas"
},
rowLabelFuture: {
de: "Zukünftige Pins ausblenden",
en: "Hide future pinned exercises",
fr: "Masquer les activités futures",
es: "Esconder elementos futuros",
pt: "Ocultar marcações futuras"
},
save: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
rowLabel: {
de: "Pins ausblenden",
en: "Hide pinned exercises",
fr: "Masquer des épingles",
es: "Esconder elementos asignados",
pt: "Ocultar marcações"
},
none: {
de: "keine",
en: "none",
fr: "aucune",
es: "ninguna",
pt: "nenhuma"
}
};
})();
pages/group/group/settings/pinsHiddenSettings/icon/icon.ls
(function(){
return function(hasAccess){
if (!hasAccess) {
return path("/lib/svg/shape/help.svg");
} else {
return path("/lib/svg/icon/arrow-right-small.svg");
}
};
})();
pages/group/group/settings/pinsHiddenSettings/label/label.ls
(function(){
return function(){
return Div().html(T("rowLabel"));
};
})();
pages/group/group/settings/pinsHiddenSettings/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: function(){
if (!page.isSubmitting && page.pinsHiddenSettings != null && !_.isEqual(page.pinsHiddenSettings, page.calcValues())) {
return inc("../popupSave/popup")(page.submit, page.finish);
} else {
return page.finish();
}
},
backLabel: page.groupDescription.name,
title: T("rowLabel")
});
};
})();
pages/group/group/settings/pinsHiddenSettings/page/button/button.ls
(function(){
return function(page){
var div;
return div = Button({
label: T("save")
}).css({
marginTop: "2em"
}).tap(function(){
return page.submit();
});
};
})();
pages/group/group/settings/pinsHiddenSettings/page/calcValues/calc.ls
(function(){
return function(page){
return function(){
var rowValues, values;
rowValues = _.map(page.findAll(".row"), function(row){
return row.isSelected();
});
return values = {
past: rowValues[0],
future: rowValues[1]
};
};
};
})();
pages/group/group/settings/pinsHiddenSettings/page/finish/finish.ls
(function(){
return function(page){
return function(sync){
var finish, groupCode, groupLog;
finish = function(){
return startPage({
history: -1,
animation: "slideRight"
});
};
if (!sync) {
return finish();
} else {
groupCode = page.groupDescription.groupCode;
groupLog = window.groupLogs[groupCode];
return groupLog.sync(finish);
}
};
};
})();
pages/group/group/settings/pinsHiddenSettings/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
page.pinsHiddenSettings = inc("/data/group/calcPinsHidden/calc")(page.groupDescription.groupCode);
page.submit = inc("submit/submit")(page);
page.finish = inc("finish/finish")(page);
page.calcValues = inc("calcValues/calc")(page);
return page.css({
width: "35em",
maxWidth: "90%",
margin: "1em auto"
}).append(inc("title/title")(page.groupDescription), inc("rows/rows")(page), page.button = inc("button/button")(page));
}
};
};
})();
pages/group/group/settings/pinsHiddenSettings/page/popupSave/_t.ls
(function(){
return {
saveChange: {
de: "Möchtest du die Änderungen speichern?",
en: "Would you like to save your changes?",
fr: "Veux-tu enregistrer ces modifications ?",
es: "¿Quieres guardar los cambios?",
pt: "Gostaria de salvar suas alterações?"
},
saveButton: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
}
};
})();
pages/group/group/settings/pinsHiddenSettings/page/popupSave/popup.ls
(function(){
return function(onSave, onAbort){
return inc("/lib/gui/confirmPopup/popup")({
label: T("saveChange"),
yesLabel: T("saveButton"),
noLabel: T("cancelButton"),
done: function(confirm){
if (confirm) {
return onSave();
} else {
return onAbort();
}
}
});
};
})();
pages/group/group/settings/pinsHiddenSettings/page/rows/row/icon/icon.ls
(function(){
return function(selected){
var div, iconOff, iconOn;
div = Div({
flex: "0 0 auto"
}).append(iconOff = SvgIcon({
svg: path("/lib/svg/icon/check-off.svg")
}).css({
marginTop: "0.2em"
}), iconOn = SvgIcon({
svg: path("/lib/svg/icon/check-on.svg")
}).css({
marginTop: "0.2em"
}));
if (selected) {
iconOff.hide();
} else {
iconOn.hide();
}
return div;
};
})();
pages/group/group/settings/pinsHiddenSettings/page/rows/row/label/label.ls
(function(){
return function(type){
return Div({
flex: "1 1 auto"
}).html(type === "past"
? T("rowLabelPast")
: T("rowLabelFuture"));
};
})();
pages/group/group/settings/pinsHiddenSettings/page/rows/row/row.ls
(function(){
return function(page, type){
var selected, ref$, ref1$, icon, click, div;
selected = (ref$ = (ref1$ = page.pinsHiddenSettings) != null ? ref1$[type] : void 8) != null ? ref$ : false;
icon = null;
click = function(){
selected = !selected;
return icon.replaceWith(icon = inc("icon/icon")(selected));
};
div = Div({
padding: "0.5em",
borderBottom: "1px solid " + Color.grey[300],
display: "flex"
}).addClass("row").append(inc("label/label")(type), inc("spacer/spacer")(), icon = inc("icon/icon")(selected)).tap(click);
div.isSelected = function(){
return selected;
};
return div;
};
})();
pages/group/group/settings/pinsHiddenSettings/page/rows/row/spacer/spacer.ls
(function(){
return function(){
return Div({
flex: "1 1 auto"
});
};
})();
pages/group/group/settings/pinsHiddenSettings/page/rows/rows.ls
(function(){
return function(page){
return Div({
textAlign: "left",
marginTop: "1em",
maxWidth: "20em",
margin: "0 auto"
}).append(inc("row/row")(page, "past"), inc("row/row")(page, "future"));
};
})();
pages/group/group/settings/pinsHiddenSettings/page/submit/submit.ls
(function(){
return function(page){
return function(){
var values, groupCode, spinner;
values = page.calcValues();
if (_.isEqual(page.pinsHiddenSettings, values)) {
page.button.css({
pointerEvents: "none"
});
page.finish();
return;
}
groupCode = page.groupDescription.groupCode;
spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(page.button);
page.isSubmitting = true;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/setHidePins/set"),
params: {
groupCode: groupCode,
past: values.past,
future: values.future
},
onCompleted: function(result, samePage){
log.log({
event: "debugSetHidePins",
groupCode: groupCode,
past: values.past,
future: values.future
});
if (samePage) {
return page.finish(true);
}
},
onError: function(error){
debug(error);
inc("/lib/gui/errorPopup/popup")();
spinner.stop();
return page.isSubmitting = false;
},
onOffline: function(){
inc("/lib/offline/offlinePopup/popup")();
spinner.stop();
return page.isSubmitting = false;
}
});
};
};
})();
pages/group/group/settings/pinsHiddenSettings/page/title/title.ls
(function(){
return function(gd){
var label2, label;
label2 = gd.type === "family"
? T("yourFamilyMembers")
: T("yourPupils");
label = T("pinSettingsTitle", label2);
return Div({
margin: "2em 0 1em",
fontWeight: "bold"
}).html(label);
};
})();
pages/group/group/settings/pinsHiddenSettings/pinsHiddenSettings.ls
(function(){
return function(page){
var plusFeatureMode, hasAccess, isExpiredFamily, tap, row;
plusFeatureMode = page.groupDescription.plusFeatureMode;
hasAccess = plusFeatureMode === "enabled";
isExpiredFamily = plusFeatureMode === "expiredPlusFamily";
tap = function(){
if (!hasAccess) {
if (isExpiredFamily) {
return inc("/lib/gui/noPlusFamilyPopup/popup")();
} else {
return inc("/lib/gui/noSchoolLicensePopup/popup")();
}
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
}
};
return row = inc("../_row/row")({
label: inc("label/label")(),
icon: inc("icon/icon")(hasAccess),
value: inc("value/value")(page)
}).tap(tap);
};
})();
pages/group/group/settings/pinsHiddenSettings/value/value.ls
(function(){
return function(page){
var groupCode, infos, value;
groupCode = page.groupDescription.groupCode;
infos = inc("/data/group/calcPinsHidden/calc")(groupCode);
return value = (infos != null && infos.past) || (infos != null && infos.future)
? Div().html(infos.past ? T("past") : void 8, infos.past && infos.future ? " " + T("and") + " " : void 8, infos.future ? T("future") : void 8)
: T("none");
};
})();
pages/group/group/settings/school/_t.ls
(function(){
return {
noSchoolAssigned: {
de: "keine Schule zugeordnet",
en: "No school assigned",
fr: "Pas d'école attribuée",
es: "sin escuela asignada",
pt: "Nenhuma escola atribuída"
},
school: {
de: "Schule",
en: "School",
fr: "École",
es: "Escuela",
pt: "Escola"
}
};
})();
pages/group/group/settings/school/finishFunction/checkCanChooseDirSchool/_t.ls
(function(){
return {
popupText: {
de: "Bitte wende dich an den Schul-Admin, wenn du an dieser Schule als Lehrkraft hinzugefügt werden möchtest. Anschließend kannst du diese Schule auch deiner Gruppe zuordnen.",
en: "Please contact your school administrator if you would like to be added to this school as a teacher.",
fr: "Merci de contacter un·e responsable de ton établissement si tu souhaites être ajouté·e comme professeur·e à cette école.",
es: "Por favor, contacta a el/la administrador/a de la escuela, si deseas ser agregado como docente a esta institución.",
pt: "Por favor, entre em contato com o(a) administrador(a) da escola, caso deseje ser adicionado(a) como professor(a) desta instituição."
}
};
})();
pages/group/group/settings/school/finishFunction/checkCanChooseDirSchool/check.ls
(function(){
return function(o){
var showPopup, sd, ref$;
showPopup = function(){
return inc("/lib/gui/infoPopup/popup")({
label: T("popupText"),
onClose: function(){
return startPage({
history: 0
});
}
});
};
sd = inc("/data/school/calcSchoolDescription/calc")(o.school.schoolCode);
if ((ref$ = sd != null ? sd.dirRole : void 8) !== "teacher" && ref$ !== "admin") {
showPopup();
return false;
}
return true;
};
})();
pages/group/group/settings/school/finishFunction/finish.ls
(function(){
return function(o){
var publicId, onCompleted, refresh, onOffline, onError;
publicId = log.findLast("setPublicId").value;
if (o.school.hasDir) {
if (!inc("checkCanChooseDirSchool/check")(o)) {
return;
}
}
onCompleted = function(){
return log.sync(function(){
return groupLogs[o.groupCode].sync(function(){
return inc("waitForSchool/wait")(o.groupCode, function(){
return startPage({
history: function(path){
return !_.includes(path, "/schoolSearch");
},
animation: "slideDown"
});
});
});
});
};
refresh = function(){
return startPage({
history: 0
});
};
onOffline = function(){
return inc("/lib/offline/offlinePopup/popup")({
onClose: refresh
});
};
onError = function(error){
debug(error);
return inc("/lib/gui/errorPopup/popup")({
onClose: refresh
});
};
if (o.school.schoolCode) {
return inc("/data/school/groupAdd/add")({
groupCode: o.groupCode,
schoolCode: o.school.schoolCode,
onCompleted: onCompleted,
onOffline: onOffline,
onError: onError
});
} else {
return inc("/data/school/schoolCreate/create")({
name: o.school.name,
location: o.school.location,
googlePlace: o.school.googlePlace,
creatorPublicId: publicId,
groupCode: o.groupCode,
onCompleted: onCompleted,
onOffline: onOffline,
onError: onError
});
}
};
})();
pages/group/group/settings/school/finishFunction/waitForSchool/wait.ls
(function(){
return function(groupCode, onDone){
var i, f;
i = 0;
f = function(){
var groupDescription;
i++;
groupDescription = inc("/data/group/calcGroupDescription/calc")();
if (groupDescription.school != null) {
return onDone();
} else if (i === 20) {
return onDone();
} else {
return setTimeout(f, 500);
}
};
return f();
};
})();
pages/group/group/settings/school/page/_row/arrow/arrow.ls
(function(){
return function(showArrow){
if (!showArrow) {
return;
}
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
}).css({
marginLeft: "0.3em"
});
};
})();
pages/group/group/settings/school/page/_row/label/label.ls
(function(){
return function(label){
return Div({
flex: "1 1 auto",
paddingRight: "0.6em",
textAlign: "left"
}).html(label);
};
})();
pages/group/group/settings/school/page/_row/row.ls
(function(){
return function(o){
var b;
return Div({
display: "flex",
textAlign: "left",
padding: "1.2em 0.5em",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
marginTop: "-1px",
alignItems: "center",
background: "white"
}).append(inc("label/label")(o.label), inc("value/value")(o.value), inc("arrow/arrow")(o.arrow), o.icon ? o.icon : void 8);
};
})();
pages/group/group/settings/school/page/_row/value/value.ls
(function(){
return function(value){
return Div({
flex: "1 1 auto",
userSelect: "text",
color: Color.grey[700],
overflow: "hidden",
textOverflow: "ellipsis",
textAlign: "right"
}).secureHtml(value);
};
})();
pages/group/group/settings/school/page/_t.ls
(function(){
return {
rowLabelLocation: {
de: "Ort",
en: "Location",
fr: "Lieu",
es: "Lugar",
pt: "Lugar"
},
rowLabelName: {
de: "Name",
en: "Name",
fr: "Nom",
es: "Nombre",
pt: "Nome"
},
rowLabelDirectory: {
de: "Schulverzeichnis",
en: "School Directory",
fr: "Répertoire scolaire",
es: "Directorio escolar",
pt: "Diretório escolar"
},
rowValueActive: {
de: "aktiv",
en: "active",
fr: "actif",
es: "activo",
pt: "ativo"
},
rowLabelRemoveSchool: {
de: "Schulzuordnung entfernen",
en_gb: "Unassign group from school",
en: "Remove school assignment from group",
fr: "Retirer le lien à l'école",
es: "Eliminar vínculo con la escuela",
pt: "Remover vínculo com a escola"
}
};
})();
pages/group/group/settings/school/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: page.schoolDescription.name
});
};
})();
pages/group/group/settings/school/page/dirActive/dirActive.ls
(function(){
return function(page){
if (!page.schoolDescription.hasDirAccess) {
return;
}
return inc("../_row/row")({
label: T("rowLabelDirectory"),
value: T("rowValueActive")
});
};
})();
pages/group/group/settings/school/page/image/image.ls
(function(){
return function(page){
return inc("/pages/school/_shared/schoolIcon/icon")({
schoolDescription: page.schoolDescription,
size: "big"
}).css({
margin: "0 auto 2em"
});
};
})();
pages/group/group/settings/school/page/location/location.ls
(function(){
return function(page){
var d, location;
d = page.schoolDescription;
location = d.zip
? d.zip + " " + d.city + ", " + d.country
: d.location;
return inc("../_row/row")({
label: T("rowLabelLocation"),
value: location
});
};
})();
pages/group/group/settings/school/page/name/name.ls
(function(){
return function(page){
return inc("../_row/row")({
label: T("rowLabelName"),
value: page.schoolDescription.name
});
};
})();
pages/group/group/settings/school/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.schoolDescription = page.groupDescription.school;
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.css({
width: "35em",
maxWidth: "95%",
margin: "1em auto"
}).append(inc("image/image")(page), inc("schoolCode/schoolCode")(page), inc("name/name")(page), inc("location/location")(page), inc("dirActive/dirActive")(page), inc("removeGroup/removeGroup")(page));
}
};
};
})();
pages/group/group/settings/school/page/removeGroup/calcHasPreparedUsers/calc.ls
(function(){
return function(page, onDone){
var spinner;
spinner = inc("/lib/gui/spinnerOverlay/overlay")(void 8, true);
return inc("/data/group/getMemberDescriptions/get")({
groupCode: page.groupDescription.groupCode,
onError: function(error){
debug(error);
inc("/lib/gui/errorPopup/popup")();
return spinner.close();
},
onOffline: function(){
inc("/lib/offline/offlinePopup/popup")();
return spinner.close();
},
onLoaded: function(result){
var members, hasPreparedUsers;
members = _.concat(result.pupil, result.teacher, result.admin);
hasPreparedUsers = _.find(members, {
isPreparedUser: true
}) != null;
onDone(hasPreparedUsers);
return spinner.close();
}
});
};
})();
pages/group/group/settings/school/page/removeGroup/popupAbortPreparedUsers/_t.ls
(function(){
return {
text: {
de: "Diese Gruppe enthält vorbereitete Schulverzeichnis-Mitglieder und kann deshalb nicht von der Schule gelöst werden.
Bitte entferne diese vorbereiteten Nutzerkonten zuerst und probiere es dann erneut.",
en: "This group contains prepared school directory members and therefore cannot be removed from the school.
Please remove these prepared users first and try again.",
fr: "Ce groupe contient des membres du répertoire scolaire dont le code est prêt, c'est pourquoi il ne peut pas être retiré de l'école.
Efface d'abord les comptes d'utilisateur·rices qui sont indiqués comme étant prêts et tu pourras réessayer.",
es: "Este grupo contiene miembros preparados en el directorio escolar. Por esta razón, no pueden ser eliminados de la escuela.
Por favor, elimina primero a los miembros preparados y vuelve a intentarlo.",
pt: "Este grupo contém contas já preparadas dentro do Diretório Escolar. Por isso, elas não podem ser excluídas da escola.
Por favor, remova primeiro as contas já preparadas e tente novamente."
}
};
})();
pages/group/group/settings/school/page/removeGroup/popupAbortPreparedUsers/popup.ls
(function(){
return function(page){
return inc("/lib/gui/errorPopup/popup")({
label: T("text")
});
};
})();
pages/group/group/settings/school/page/removeGroup/popupConfirm/_t.ls
(function(){
return {
text: {
de: "Soll die Zuordnung dieser Gruppe zur Schule nun entfernt werden?
Die Gruppe mitsamt allen Schüler/innen bleibt bestehen und kann anschließend einer anderen Schule zugeordnet werden.",
en_gb: "Would you like this group to no longer be assigned to this school?
You can assign this group to a different school later.",
en: "Would you like to remove the assignment of this group to the school?
You can assign this group to a different school later.",
fr: "Veux-tu retirer le lien entre ce groupe et cette école ?
Tu pourras ensuite attribuer une autre école à ce groupe.",
es: "¿Quieres eliminar el vínculo de este grupo con la escuela?
Posteriormente podrás vincular a este grupo con otra escuela.",
pt: "Você gostaria de remover o vínculo deste grupo com a escola?
Posteriormente você poderá vincular este grupo a outra escola."
},
buttonYes: {
de: "Zuordnung entfernen",
en: "Remove now",
fr: "Retirer maintenant",
es: "Eliminar vínculo",
pt: "Remover vínculo"
}
};
})();
pages/group/group/settings/school/page/removeGroup/popupConfirm/popup.ls
(function(){
return function(page){
return inc("/lib/gui/confirmPopup/popup")({
label: T("text"),
yesLabel: T("buttonYes"),
noLabel: T("cancelButton"),
onConfirm: function(){
return inc("../submit/submit")(page);
},
animationDisableBackground: true
});
};
})();
pages/group/group/settings/school/page/removeGroup/removeGroup.ls
(function(){
return function(page){
var tap, row;
tap = function(){
return inc("calcHasPreparedUsers/calc")(page, function(hasPreparedUsers){
if (hasPreparedUsers) {
return inc("popupAbortPreparedUsers/popup")(page);
} else {
return inc("popupConfirm/popup")(page);
}
});
};
return row = inc("../_row/row")({
label: T("rowLabelRemoveSchool"),
icon: SvgIcon({
svg: path("/lib/svg/icon/close-small.svg"),
color: Color.grey[700]
})
}).tap(tap);
};
})();
pages/group/group/settings/school/page/removeGroup/submit/submit.ls
(function(){
return function(page){
var groupCode, spinner;
groupCode = page.groupDescription.groupCode;
spinner = inc("/lib/gui/spinnerOverlay/overlay")();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/group/removeSchool/remove"),
params: {
groupCode: groupCode
},
requiredVisibleDiv: page,
onError: function(error){
spinner.remove();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
spinner.remove();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
return groupLogs[groupCode].sync(function(){
spinner.remove();
return startPage({
history: -1,
animation: "slideRight"
});
});
}
});
};
})();
pages/group/group/settings/school/page/schoolCode/schoolCode.ls
(function(){
return function(page){
if (!engine.isDebug) {
return;
}
return Div({
margin: "-1.5em 0 1em",
userSelect: "text",
fontSize: "0.9em",
color: Color.grey[400]
}).html(page.schoolDescription.schoolCode);
};
})();
pages/group/group/settings/school/school.ls
(function(){
return function(page){
var tap;
tap = function(){
if (!page.schoolDescription) {
return inc("/pages/schoolSearch/start")({
groupCode: page.groupDescription.groupCode,
finishFunctionPath: path("finishFunction/finish")
});
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
groupCode: page.groupDescription.groupCode
}
});
}
};
return inc("../_row/row")({
label: T("school"),
value: inc("value/value")(page.schoolDescription),
icon: path("/lib/svg/icon/arrow-right-small.svg")
}).tap(tap);
};
})();
pages/group/group/settings/school/value/value.ls
(function(){
return function(d){
if (!d) {
return T("noSchoolAssigned");
}
return Div({
display: "flex"
}).append(Div({
flex: "1 1 auto",
marginRight: "0.5em"
}).secureHtml(d.name), inc("/pages/school/_shared/schoolIcon/icon")({
schoolDescription: d,
size: "mini"
}));
};
})();
pages/group/group/settings/subgroups/_t.ls
(function(){
return {
rowLabelSubgroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
emptyNameError: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar en blanco.",
pt: "O nome não pode ficar em branco."
},
nameOfSubgroup: {
de: "Wie soll die neue Untergruppe heißen?",
en: "What should the new subgroup be called?",
fr: "Choisis le nom à donner au sous-groupe.",
es: "¿Cómo quieres que se llame el subgrupo?",
pt: "Qual nome você gostaria de dar ao subgrupo?"
},
create: {
de: "Anlegen",
en: "Create",
fr: "Créer",
es: "Crear",
pt: "Criar"
},
newSubgroup: {
de: "Neue Untergruppe",
en: "New subgroup",
fr: "Nouveau sous-groupe",
es: "Nuevo subgroup",
pt: "Novo subgrupo"
},
noMembersInGroup: {
de: "Die Gruppe hat noch keine Mitglieder.",
en: "The group doesn't have any members yet.",
fr: "Le groupe n'a pas encore de membres.",
es: "El grupo aún no tiene miembros.",
pt: "O grupo ainda não tem membros."
},
changeName: {
de: "Name ändern",
en: "Change name",
fr: "Changer le nom",
es: "Cambiar nombre",
pt: "Modificar nome"
},
reallyDeleteSubgroupWithName: {
de: "Möchtest du die Untergruppe '$1' wirklich löschen?",
en: "Do you really want to delete the subgroup '$1'?",
fr: "Tu veux vraiment effacer le sous-groupe “$1” ?",
es: "¿Realmente quieres eliminar el subgrupo '$1'?",
pt: "Tem certeza que deseja apagar o subgrupo '$1'?"
},
deleteSubgroup: {
de: "Untergruppe löschen",
en: "Delete subgroup",
fr: "Effacer le sous-groupe",
es: "Eliminar subgrupo",
pt: "Apagar subgrupos"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
subGroupMembers: {
de: "Untergruppen-Mitglieder",
en: "Subgroup members",
fr: "Membres du sous-groupe",
es: "Miembros del subgrupo",
pt: "Membros do subgrupo"
},
none: {
de: "keine",
en: "None",
fr: "aucun",
es: "ninguno",
pt: "nenhum"
}
};
})();
pages/group/group/settings/subgroups/subgroups.ls
(function(){
return function(page){
var subgroups, hasAccess, tap;
subgroups = inc("/data/group/calcSubgroups/calc")(page.groupDescription.groupCode);
hasAccess = page.groupDescription.plusFeatureMode === "enabled";
tap = function(){
if (!hasAccess) {
return inc("/lib/gui/noSchoolLicensePopup/popup")();
} else {
return startPage({
path: path("../../other/subgroupList/page"),
animation: "slideLeft",
params: {
groupCode: page.groupDescription.groupCode
}
});
}
};
return inc("../_row/row")({
label: T("rowLabelSubgroups"),
value: inc("value/value")(subgroups),
icon: hasAccess
? path("/lib/svg/icon/arrow-right-small.svg")
: path("/lib/svg/shape/help.svg")
}).tap(tap);
};
})();
pages/group/group/settings/subgroups/value/value.ls
(function(){
return function(subgroups){
var subgroup;
if (subgroups.length === 0) {
return T("none");
}
return Div({
display: "flex",
flexWrap: "wrap",
justifyContent: "flex-end",
fontSize: "0.9em",
pointerEvents: "none",
paddingLeft: "0.3em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = subgroups).length; i$ < len$; ++i$) {
subgroup = ref$[i$];
results$.push(inc("/pages/content/_shared/pinTag/tag")(subgroup));
}
return results$;
}()));
};
})();
pages/group/group/start.ls
(function(){
return function(params){
var currentGroupCode, groupDescription, e, ref$, p;
currentGroupCode = inc("/data/group/calcCurrentGroupCode/calc")();
groupDescription = inc("/data/group/calcGroupDescription/calc")();
if (groupDescription == null) {
e = typeof log != 'undefined' && log !== null ? log.findLast({
event: "setCurrentGroup",
groupCode: currentGroupCode
}) : void 8;
if (e) {
if (e.groupCode === ((ref$ = log.findLast("isGroupMember")) != null ? ref$.groupCode : void 8)) {
inc("reloadPopup/popup")();
} else {
log.deleteEvent(e);
inc(THISFILE)(params);
return;
}
}
}
p = inc("calcStartPageParams/calc")(currentGroupCode, groupDescription, params);
return startPage(p);
};
})();
pages/group/member/_prepared/_t.ls
(function(){
return {
preparedNotActive: {
de: "Vorbereitet, noch nicht aktiv",
en: "Prepared, not active yet",
fr: "Prêt·e - Pas encore actif·ve",
es: "Preparado / aún inactivo",
pt: "Preparado / ainda inativo"
}
};
})();
pages/group/member/_prepared/prepared.ls
(function(){
return function(page){
if (page.memberDescription.isPreparedMember !== true) {
return;
}
return Div().append(Div({
display: "inline-block",
padding: "0.4em",
marginBottom: "1em",
color: Color.grey[500]
}).html(T("preparedNotActive")));
};
})();
pages/group/member/_topbar/_t.ls
(function(){
return {
person: {
de: "Person",
en: "Person",
fr: "Membre",
es: "Persona",
pt: "Pessoa"
},
content: {
de: "Inhalte",
en: "Contents",
fr: "Contenu",
es: "Contenido",
pt: "Conteúdo"
},
history: {
de: "Verlauf",
en: "History",
fr: "Historique",
es: "Historial",
pt: "Histórico"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
historyPrintTitle: {
de: "Verlauf für $1",
en: "History of $1",
fr: "Historique de $1",
es: "Historial de $1",
pt: "Histórico de $1"
}
};
})();
pages/group/member/_topbar/calcTitle/calc.ls
(function(){
return function(page){
var d, name;
d = page.memberDescription;
name = !d.groupInternalName || d.groupInternalName === d.displayName || d.role === "teacher"
? d.displayName
: d.groupInternalName + " (" + d.displayName + ")";
return Div({
flex: "0 1 auto",
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap"
}).secureHtml(name);
};
})();
pages/group/member/_topbar/rememberLastPage/remember.ls
(function(){
return function(page){
return inc("/lib/util/cache/set/set")("lastGroupMemberPage", app.currentPagePath);
};
})();
pages/group/member/_topbar/tabMenuItems/tabMenuItems.ls
(function(){
return function(page){
var canSeeContents, canSeeTimeline, ref$, clickItem, items;
canSeeContents = page.memberDescription.role === "pupil" && !page.memberDescription.isPreparedMember;
canSeeTimeline = canSeeContents || ((ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8) === page.memberDescription.publicId;
clickItem = function(p){
return function(){
startPage({
path: p,
history: 0,
params: _.omit(page.params, "history")
});
return inc("../rememberLastPage/remember")(page);
};
};
return items = [
{
label: T("person"),
selected: _.includes(app.currentPagePath, "member/person"),
click: clickItem(path("/pages/group/member/person/page"))
}, page.groupDescription.type !== "family" ? {
label: T("content"),
selected: _.includes(app.currentPagePath, "member/content"),
color: !canSeeContents ? Color.grey[400] : void 8,
click: canSeeContents ? clickItem(path("/pages/group/member/content/page")) : void 8
} : void 8, {
label: T("history"),
selected: _.includes(app.currentPagePath, "member/timeline"),
color: !canSeeTimeline ? Color.grey[400] : void 8,
click: canSeeTimeline ? clickItem(path("/pages/group/member/timeline/page")) : void 8
}
];
};
})();
pages/group/member/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.groupDescription.name,
title: inc("calcTitle/calc")(page),
tabMenuItems: function(){
return inc("tabMenuItems/tabMenuItems")(page);
},
topRightCustom: function(){
return inc("topbarRightCustom/topbarRightCustom")(page);
}
});
};
})();
pages/group/member/_topbar/topbarRightCustom/topbarRightCustom.ls
(function(){
return function(page){
var tap;
if (!_.includes(app.currentPagePath, "timeline")) {
return;
}
tap = function(){
if (!page.listData) {
return;
}
return page.popupPrint(page);
};
return Div({
fontSize: "0.9em",
color: Color.blue[600],
padding: "0.1em 0.7em 0.1em 0"
}).append(SvgIcon({
svg: path("/lib/svg/shape/print.svg"),
size: "0.8em",
color: Color.blue[600]
}).css({
marginRight: "0.2em"
}), T("print")).tap({
up: tap,
tapZone: "0.5em 0"
});
};
})();
pages/group/member/content/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(page.params.groupCode, page.params.publicId);
page.lastViewedBlockPath = inc("../../_shared/calcLastViewedBlockPath/calc")(page);
page.context = "groupSingle";
return {
navCategory: "groups",
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var loadWeeksAndLevelsReport, create;
loadWeeksAndLevelsReport = function(){
return inc("../../group/_shared/loadWeeksAndLevelsReport/load")({
page: page,
filterPublicId: page.params.publicId,
onLoaded: create,
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
};
create = function(){
return inc("../../group/_shared/contentDiv/div")(page);
};
page.html(inc("/lib/gui/spinner/spinner")());
return loadWeeksAndLevelsReport();
}
};
};
})();
pages/group/member/person/_t.ls
(function(){
return {
leave: {
de: "Verlassen",
en: "Leave",
fr: "Quitter",
es: "Abandonar",
pt: "Sair"
},
'delete': {
de: "Löschen",
en: "Delete",
fr: "Effacer",
es: "Borrar",
pt: "Apagar"
},
errorMessage: {
de: "Ein Fehler ist aufgetreten.",
en: "An error occurred.",
fr: "Une erreur s'est produite",
es: "Ocurrió un error",
pt: "Ocorreu um erro"
},
reallyLeaveGroup: {
de: "Möchtest du diese Gruppe jetzt wirklich verlassen?",
en: "Do you really want to leave this group?",
fr: "Veux-tu vraiment quitter ce groupe ?",
es: "¿Realmente quieres abandonar el grupo?",
pt: "Tem certeza que deseja sair do grupo?"
},
pupil: {
de: "Schüler",
en_gb: "Pupil",
en: "Student",
fr: "Élève",
es: "Estudiante",
pt: "Aluno(a)"
},
teacher: {
de: "Lehrer",
en: "Teacher",
fr: "Professeur",
es: "Docente",
pt: "Professor(a)"
},
removeGroup: {
de: "Gruppe verlassen",
en: "Leave group",
fr: "Quitter le groupe",
es: "Abandonar el grupo",
pt: "Sair do grupo"
},
removeFromGroup: {
de: "Aus dieser Gruppe entfernen",
en: "Remove from this group",
fr: "Retirer du groupe",
es: "Eliminar del grupo",
pt: "Remover deste grupo"
},
linkUserNameWithUserName: {
de: "Möchtest du \"$1\" mit \"$2\" verknüpfen?",
en: "Would you like to link \"$1\" with \"$2\"?",
fr: "Veux-tu relier \"$1\" à \"$2\" ?",
es: "¿Quieres vincular \"$1\" con \"$2\"?",
pt: "Gostaria de vincular \"$1\" com \"$2\"?"
},
notLinked: {
de: "nicht verknüpft",
en: "not linked",
fr: "pas relié",
es: "no está vinculado",
pt: "não está vinculado"
},
myEntryInDirectory: {
de: "Mein Eintrag im Schulverzeichnis",
en: "My entry in the school directory",
fr: "Mon entrée dans le répertoire scolaire",
es: "Mi entrada en el directorio escolar",
pt: "Minha entrada no Diretório Escolar"
},
entryInDirectory: {
de: "Eintrag im Schulverzeichnis",
en: "Entry in the school directory",
fr: "Entrée dans le répertoire scolaire",
es: "Entrada en el directorio escolar",
pt: "Entrada no Diretório Escolar"
},
nameInGroup: {
de: "Name in dieser Gruppe",
en: "Name in this group",
fr: "Nom dans ce groupe",
es: "Nombre en este grupo",
pt: "Nome neste grupo"
},
nameInGroupOnlyVisibleForTeacher: {
de: "Name in dieser Gruppe: (nur für Lehrkräfte sichtbar)",
en: "Name in this group: (only visible to teachers)",
fr: "Nom dans ce groupe : (seulement visible pour les professeur·es)",
es: "Nombre en este grupo: (únicamente visible para docentes)",
pt: "Nome neste grupo: (Somente visível para professores)"
},
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
},
nameInThisGroup: {
de: "Name in dieser Gruppe:",
en: "Name in this group:",
fr: "Nom dans ce groupe :",
es: "Nombre en este grupo:",
pt: "Nome neste grupo"
},
today: {
de: "Heute",
en: "Today",
fr: "Aujourd'hui",
es: "Hoy",
pt: "Hoje"
},
yesterday: {
de: "Gestern",
en: "Yesterday",
fr: "Hier",
es: "Ayer",
pt: "Ontem"
},
lastActivity: {
de: "Letzte Aktivität:",
en: "Last activity:",
fr: "Dernière activité :",
es: "Última actividad:",
pt: "Última atividade"
},
loginCode: {
de: "Anmelde-Code",
en: "Login code",
fr: "Code de connexion",
es: "Clave de acceso",
pt: "Código de acesso"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
antonLoginCode: {
de: "ANTON-Anmelde-Code",
en: "ANTON login code",
fr: "Code de connexion ANTON",
es: "Clave de acceso ANTON",
pt: "Código de acesso ANTON"
},
loginCode2: {
de: "Anmelde-Code:",
en: "Login code:",
fr: "Code de connexion :",
es: "Clave de acceso:",
pt: "Código de acesso:"
},
name: {
de: "Name:",
en: "Name:",
fr: "Nom :",
es: "Nombre:",
pt: "Nome:"
},
changeName: {
de: "Name ändern",
en: "Change name",
fr: "Changer le nom",
es: "Cambiar nombre",
pt: "Modificar nome"
},
nickName: {
de: "Spitzname:",
en: "Nickname:",
fr: "Surnom :",
es: "Apodo:",
pt: "Apelido:"
},
stats: {
de: "Statistik",
en: "Statistics",
fr: "Statistiques",
es: "Estadísticas",
pt: "Estatísticas"
},
subGroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
needBeConfirmedTeacher: {
de: "Um diese Funktion zu nutzen, musst du bestätigte Lehrkraft einer Schule mit ANTON-Schullizenz sein.",
en_gb: "You must be a verified teacher at a school with an ANTON School Licence to use this function.",
en: "You must be a verified teacher at a school with an ANTON School License to use this function.",
fr: "Pour utiliser cette fonction, tu dois être officiellement professeur·e dans une école qui a la licence scolaire ANTON.",
es: "Para utilizar esta función necesitas ser docente de una escuela que tenga la Licencia Escolar ANTON.",
pt: "Para utilizar esta função, você deve ser professor(a) de uma escola que tenha Licença Escolar ANTON."
},
markForDeleteInfoInactive: {
de: "Das Nutzerkonto wird wegen Inaktivität am $1 automatisch gelöscht. ",
en: "This user account will be automatically deleted on $1 due to inactivity.",
fr: "Le compte sera automatiquement supprimé pour cause d'inactivité le $1. ",
es: "Por inactividad, esta cuenta se eliminará automáticamente el $1. ",
pt: "Devido à inatividade, a conta de usuário será automaticamente excluída no dia $1."
},
markForDeleteInfoSelf: {
de: "Diese/r Schüler/in hat sich zur Löschung markiert und wird am $1 automatisch gelöscht. ",
en_gb: "This pupil has marked their account for deletion and will be automatically deleted on $1.",
en: "This student has marked their account for deletion and will be automatically deleted on $1.",
fr: "L'élève a engagé la suppression de son compte qui se fera automatiquement le $1. ",
es: "Este estudiante solicitó la eliminación de su cuenta y será eliminada automáticamente el $1.",
pt: "O(a) aluno(a) solicitou a exclusão de sua conta e esta será automaticamente excluída no dia $1."
},
markForDeleteInfoSchool: {
de: "Das Nutzerkonto wurde von einem Schul-Admin zur Löschung markiert und wird am $1 automatisch gelöscht. ",
en: "This user account was marked for deletion by a school admin and will be automatically deleted on $1.",
fr: "La suppression de ce compte a été engagée par un admin de l'école et elle se fera automatiquement le $1. ",
es: "El admin de la escuela solicitó la eliminación de la cuenta y será eliminada automáticamente el $1.",
pt: "A pessoa administradora da escola solicitou a exclusão desta conta e esta será automaticamente excluída no dia $1."
},
markForDeleteInfo2: {
de: "Die Löschung kann abgebrochen werden, indem sich der/die Schüler/in einloggt und dann auf Löschung abbrechen klickt.",
en: "The deletion can be prevented by logging in and selecting Cancel deletion.",
fr: "La suppression peut être annulée par l'élève s'il·elle se connecte à son compte et appuie sur Annuler la suppression.",
es: "El estudiante puede cancelar la eliminación ingresando a su cuenta y presionando Cancelar la eliminación.",
pt: "A exclusão desta conta pode ser cancelada se o(a) aluno(a) efetuar seu login e, dentro da sua conta, selecionar Cancelar exclusão."
}
};
})();
pages/group/member/person/page.ls
(function(){
return function(page){
var ref$, ref1$;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(page.params.groupCode, page.params.publicId);
page.schoolDescription = (ref$ = inc("/data/school/calcSchoolDescription/calc")((ref1$ = page.groupDescription.school) != null ? ref1$.schoolCode : void 8)) != null
? ref$
: {};
return {
navCategory: "groups",
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.append(Div({
padding: "1em 0em"
}).append(inc("profile/profile")(page), inc("../_prepared/prepared")(page), inc("rows/rows")(page)));
}
};
};
})();
pages/group/member/person/profile/avatar/avatar.ls
(function(){
return function(page){
var md, s, ref$;
md = page.memberDescription;
s = (md != null ? (ref$ = md.avatar) != null ? ref$.version : void 8 : void 8) === 2 ? "7em" : "5em";
return Div().html(inc("/lib/gui/avatar/avatar")(md, "half", true, true).css({
width: s,
height: s,
borderRadius: "999px"
}));
};
})();
pages/group/member/person/profile/markForDeleteInfo/info.ls
(function(){
return function(md){
var date;
date = inc("/lib/util/formatDate2/format")(md.markForDelete.dueDate).formats.dateShort;
return Div({
color: Color.red[500],
margin: "0.5em auto",
width: "40em",
maxWidth: "90%",
fontSize: "0.9em",
lineHeight: "1.5em"
}).html(SvgIcon({
svg: path("/lib/svg/shape/alert.svg"),
color: Color.red[500]
}).css({
verticalAlign: "-0.1em",
margin: "0.3em 0.2em 0 0"
}), (function(){
switch (md.markForDelete.reason) {
case "inactive":
return T("markForDeleteInfoInactive", date);
case "selfDelete":
return T("markForDeleteInfoSelf", date);
case "dirAdminDelete":
return T("markForDeleteInfoSchool", date);
}
}()), T("markForDeleteInfo2"));
};
})();
pages/group/member/person/profile/profile.ls
(function(){
return function(page){
var md;
md = page.memberDescription;
return Div({
display: "flex",
flexDirection: "column",
marginBottom: "1em"
}).append(inc("avatar/avatar")(page), md.role === "pupil" && !md.isPreparedMember ? inc("/lib/gui/userStarsTrophiesCoinsDiv/div")(md) : void 8, md.markForDelete ? inc("markForDeleteInfo/info")(md) : void 8);
};
})();
pages/group/member/person/rows/_row/icon/icon.ls
(function(){
return function(icon){
if (icon != null && !_.isString(icon)) {
return icon;
}
return SvgIcon({
svg: icon,
color: Color.grey[400]
}).css({
width: "1em",
height: "1em",
marginLeft: "0.3em"
});
};
})();
pages/group/member/person/rows/_row/label/label.ls
(function(){
return function(label){
return Div({
flex: "1 0 auto",
paddingRight: "1em",
textAlign: "left"
}).html(label);
};
})();
pages/group/member/person/rows/_row/row.ls
(function(){
return function(o){
var b;
return Div({
display: "flex",
textAlign: "left",
padding: "0.3em 0.5em",
borderBottom: b = "1px solid " + Color.grey[200],
borderTop: b,
width: "35em",
maxWidth: "95%",
minHeight: "3.6em",
margin: "0 auto -2px",
background: "white"
}).append(o.label ? inc("label/label")(o.label) : void 8, inc("value/value")(o.value), o.icon ? inc("icon/icon")(o.icon) : void 8);
};
})();
pages/group/member/person/rows/_row/value/value.ls
(function(){
return function(value){
var div;
div = Div({
flex: "1 1 auto",
userSelect: "text",
color: Color.grey[700],
overflow: "hidden",
textOverflow: "ellipsis",
textAlign: "right",
minWidth: "2em"
});
if (_.isString(value) || !_.isObject(value)) {
div.secureHtml(value);
} else {
div.html(value);
}
return div;
};
})();
pages/group/member/person/rows/certificate/_row/row.ls
(function(){
return function(){
return inc("../../_row/row")({
label: Div().html(T("certificate"), inc("/lib/gui/newTag/newTag")().css({
marginLeft: "0.3em"
}), SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
margin: "0 0 -0.1em 0.2em"
})),
icon: path("/lib/svg/icon/arrow-right-small.svg")
});
};
})();
pages/group/member/person/rows/certificate/_t.ls
(function(){
return {
certificate: {
de: "Urkunde",
en: "Certificate",
fr: "Certificat",
es: "Certificado",
pt: "Certificado"
}
};
})();
pages/group/member/person/rows/certificate/row.ls
(function(){
return function(page){
var p, plusFeatureMode, hasAccess, isExpiredFamily, subgroups, tap;
p = page.params;
plusFeatureMode = page.groupDescription.plusFeatureMode;
hasAccess = plusFeatureMode === "enabled";
isExpiredFamily = plusFeatureMode === "expiredPlusFamily";
subgroups = inc("/data/group/calcSubgroups/calc")(p.groupCode, p.publicId);
tap = function(){
if (!hasAccess) {
if (isExpiredFamily) {
return inc("/lib/gui/noPlusFamilyPopup/popup")();
} else {
return inc("/lib/gui/noSchoolLicensePopup/popup")();
}
} else {
return startPage({
path: path("/pages/group/_shared/certificatesPage/page"),
animation: "slideLeft",
params: {
groupCode: page.groupDescription.groupCode,
memberPublicId: page.memberDescription.publicId
}
});
}
};
return inc("../_row/row")({
label: T("certificate"),
icon: hasAccess
? path("/lib/svg/icon/arrow-right-small.svg")
: path("/lib/svg/shape/help.svg")
}).tap(tap);
};
})();
pages/group/member/person/rows/deviceRememberUser/_t.ls
(function(){
return {
label: {
de: "Auf Geräte-Startseite speichern",
en: "Save user to start screen",
fr: "Enregistrer sur la page d'accueil",
es: "Guardar cuenta en pantalla inicial",
pt: "Salvar conta na tela inicial"
},
popupEnableNow: {
de: "Möchtest du diese/n Nutzer/in auf der Startseite dieses Geräts speichern?",
en: "Would you like to save this user to this device's start screen?",
fr: "Veux-tu vraiment enregistrer ce compte sur la page d'accueil de cet appareil ?",
es: "¿Quieres que esta cuenta se guarde en la pantalla inicial de este dispositivo?",
pt: "Tem certeza que deseja salvar esta conta na tela inicial deste dispositivo? "
},
popupDisableNow: {
de: "Möchtest du diese/n Nutzer/in von der Startseite dieses Geräts entfernen?",
en: "Would you like to remove this user from this device's start screen?",
fr: "Veux-tu vraiment retirer ce compte de la page d'accueil de cet appareil ?",
es: "¿Quieres que esta cuenta sea eliminada de la pantalla inicial de este dispositivo?",
pt: "Tem certeza que deseja remover esta conta da tela inicial deste dispositivo?"
},
removeButton: {
de: "Entfernen",
en: "Remove",
fr: "Retirer",
es: "Eliminar",
pt: "Remover"
},
saveButton: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
}
};
})();
pages/group/member/person/rows/deviceRememberUser/popupConfirm/getAuthToken/get.ls
(function(){
return function(logId, loginCode, onDone){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/relogin/relogin"),
params: {
logId: logId,
type: "loginCode",
value: loginCode
},
onError: function(error){
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(r){
var authToken;
authToken = r.authToken;
if (authToken) {
inc("/lib/util/storedAuthToken/set/set")(logId, authToken);
return onDone();
} else {
return inc("/lib/gui/errorPopup/popup")();
}
}
});
};
})();
pages/group/member/person/rows/deviceRememberUser/popupConfirm/popup.ls
(function(){
return function(logId, loginCode, enabled){
var toggle, addUser;
toggle = function(){
if (enabled) {
inc("/lib/util/storedUsers/removeUser/remove")(logId);
delete window.userLogs[logId];
return startPage({
history: 0
});
} else if (Store("useAuthToken")) {
return inc("getAuthToken/get")(logId, loginCode, addUser);
} else {
return addUser();
}
};
addUser = function(){
inc("/lib/util/storedUsers/addUser/add")(logId);
inc("subscribeLog/subscribe")(logId);
return startPage({
history: 0
});
};
return inc("/lib/gui/confirmPopup/popup")({
onConfirm: toggle,
label: enabled
? T("popupDisableNow")
: T("popupEnableNow"),
yesLabel: enabled
? T("removeButton")
: T("saveButton"),
noLabel: T("cancelButton")
});
};
})();
pages/group/member/person/rows/deviceRememberUser/popupConfirm/subscribeLog/subscribe.ls
(function(){
return function(logId){
return inc("/lib/util/log/subscribeUser/subscribe")({
logId: logId,
onInitDone: function(userLog){
return window.userLogs[logId] = userLog;
}
});
};
})();
pages/group/member/person/rows/deviceRememberUser/row.ls
(function(){
return function(memberDescription){
var logId, loginCode, rememberedLogIds, enabled, tap;
logId = memberDescription.logId;
loginCode = memberDescription.loginCode;
rememberedLogIds = inc("/lib/util/storedUsers/logIds/logIds")();
enabled = _.includes(rememberedLogIds, logId);
if (!Store("deviceRememberUser") || !logId) {
return;
}
tap = function(){
return inc("popupConfirm/popup")(logId, loginCode, enabled);
};
return inc("../_row/row")({
label: T("label"),
value: enabled
? T("yes")
: T("no")
}).tap(tap);
};
})();
pages/group/member/person/rows/dirDisplayName/_t.ls
(function(){
return {
dirDisplayName: {
de: "Schulverzeichnis-Eintrag",
en: "School directory entry",
fr: "Entrée du répertoire scolaire",
es: "Entrada en el directorio escolar",
pt: "Entrada no Diretório Escolar"
},
noEntry: {
de: "keiner",
en: "no entry",
fr: "aucune",
es: "ninguna",
pt: "nenhuma"
}
};
})();
pages/group/member/person/rows/dirDisplayName/dirDisplayName.ls
(function(){
return function(d){
var n;
n = d.dirDisplayName;
if (!n) {
return;
}
return inc("../_row/row")({
label: T("dirDisplayName"),
value: "@ " + n
});
};
})();
pages/group/member/person/rows/directoryAdd/_t.ls
(function(){
return {
schoolDir: {
de: "Schulverzeichnis",
en: "School directory",
fr: "Répertoire scolaire",
es: "Directorio escolar",
pt: "Diretório escolar"
},
addToDirButton: {
de: "Aufnehmen",
en: "Add",
fr: "Ajouter",
es: "Agregar",
pt: "Adicionar"
}
};
})();
pages/group/member/person/rows/directoryAdd/row.ls
(function(){
return function(page){
var ref$, tap, start;
if (page.memberDescription.dirDisplayName != null) {
return;
}
if (((ref$ = page.schoolDescription) != null ? ref$.dirRole : void 8) == null) {
return;
}
tap = function(){
var p, ref$, spinner;
p = "app01-school-admin";
if ((ref$ = projects.info()[p]) != null && ref$.isLoaded) {
return start();
} else {
spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(this);
return inc("/lib/util/loadProject/load")(p, function(){
var ref$;
spinner.stop();
if (!((ref$ = projects.info()[p]) != null && ref$.isLoaded)) {
return inc("/lib/offline/offlinePopup/popup")();
} else {
return start();
}
});
}
};
start = function(){
return startPage({
path: path("/../app01-school-admin/pages/memberDirectoryAdd/search/page"),
animation: "slideUp",
params: {
schoolCode: page.schoolDescription.schoolCode,
groupCode: page.groupDescription.groupCode,
publicId: page.memberDescription.publicId,
context: "group",
category: "dirPupil"
}
});
};
return inc("../_row/row")({
label: T("schoolDir"),
icon: Button(T("addToDirButton")).tap(tap)
});
};
})();
pages/group/member/person/rows/displayName/_t.ls
(function(){
return {
displayName: {
de: "Anzeige-Name",
en: "Display name",
fr: "Nom d'affichage",
es: "Nombre de pantalla",
pt: "Nome na tela"
},
nonDirPupilWarning: {
de: "Den Anzeige-Namen von Schüler/innen, die nicht im Schulverzeichnis sind, kannst du nicht verändern.",
en_gb: "You cannot change the display name of pupils who are not in the school directory.",
en: "You are unable change the display name of students who are not in the school directory.",
fr: "Tu ne peux pas changer le nom d'affichage d'élèves qui ne sont pas dans le répertoire scolaire.",
es: "No puedes cambiar el nombre de estudiantes que no están en el directorio escolar.",
pt: "Você não pode alterar o nome de exibição dos alunos que não estão no Diretório Escolar."
}
};
})();
pages/group/member/person/rows/displayName/displayName.ls
(function(){
return function(md, page){
var isDirPupil, sd, isEditable, tap;
isDirPupil = md.dirDisplayName;
sd = page.schoolDescription;
isEditable = md.role === "pupil" && !md.isPreparedUser && sd.hasDirAccess && sd.dirRole;
tap = function(){
if (!isDirPupil) {
inc("/lib/gui/toast/toast")({
label: T("nonDirPupilWarning"),
duration: 5000
});
return;
}
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
publicId: page.params.publicId,
groupCode: page.params.groupCode
}
});
};
return inc("../_row/row")({
label: T("displayName"),
value: md.displayName,
icon: isEditable ? path("/lib/svg/icon/arrow-right-small.svg") : void 8
}).tap(isEditable ? tap : void 8);
};
})();
pages/group/member/person/rows/displayName/page/_t.ls
(function(){
return {
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
},
changePupilDisplayName: {
de: "Wenn ein/e Schüler/in sich einen unangebrachten Spitznamen angelegt hat, kannst du diesen hier ändern.
Damit ändert sich der Spitzname dieses/r Schülers/in, den er/sie auch außerhalb dieser Gruppe überall nutzt. Der/die Schüler/in kann den Spitznamen erst nach 7 Tagen wieder selbst ändern. ",
en_gb: "If a pupil has given themselves an inappropriate nickname, you can change it here.
By doing so, you will also change the nickname of the pupil outside this group. Afterwards, the pupil must wait 7 days before they can change the nickname again.",
en: "If a student has given themselves an inappropriate nickname, you can change it here.
By doing so, you will also change the nickname of the student outside this group. The student must then wait 7 days before they are able to change the nickname again.",
fr: "Si un·e élève s'est donné un surnom inapproprié, tu peux le modifier ici.
Cela change aussi le surnom qui s'affiche pour l'élève hors de ce groupe. Après ce changement, l'élève doit attendre 7 jours avant de pouvoir changer de surnom à nouveau.",
es: "Si un/a estudiante se pone un nombre inapropiado, puedes cambiarlo aquí.
Al cambiarlo, también cambiarás el apodo que utiliza en toda la app. El o la estudiante deberá esperar 7 días para poder cambiar su nombre nuevamente. ",
pt: "Se um(a) aluno(a) criou um apelido inadequado, você pode alterá-lo aqui.
Ao fazer isso, você também mudará o apelido do(a) aluno(a) fora deste grupo. Depois disso, o(a) aluno(a) deve esperar 7 dias até poder mudar o apelido novamente."
}
};
})();
pages/group/member/person/rows/displayName/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: T("backButton"),
title: T("displayName")
});
};
})();
pages/group/member/person/rows/displayName/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(page.params.groupCode, page.params.publicId);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("changePupilDisplayName"),
submit: submit,
submitLabel: T("change"),
screenKeyboardShiftStatus: true,
showResetIcon: false,
forceShowButtons: true,
cancel: false
}));
return form.input.setValue(page.memberDescription.displayName);
}
};
};
})();
pages/group/member/person/rows/displayName/page/submit/submit.ls
(function(){
return function(page, form){
var value, groupCode, publicId;
value = form.input.getValue();
if (value === "") {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
if (value === page.memberDescription.displayName) {
return;
}
groupCode = page.groupDescription.groupCode;
publicId = page.memberDescription.publicId;
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/school/admin/setUserName/query"),
params: {
publicId: publicId,
name: value
},
requiredVisibleDiv: page,
onCompleted: function(result){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: groupCode,
onLoaded: function(){
return startPage({
history: -1,
animation: "slideRight"
});
},
onOffline: function(){
return debug("offline getMemberDescriptions");
}
});
},
onError: function(error){
debug(error);
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/member/person/rows/familyAdmin/_t.ls
(function(){
return {
label: {
de: "Familien-Admin",
en: "Family admin",
fr: "Admin de la famille",
es: "Admin de la familia",
pt: "Admin da família"
},
popupEnableNow: {
de: "Möchtest du diesem Familienmitglied jetzt Admin-Rechte geben?
Es kann dann die Einstellungen dieser Familiengruppe bearbeiten und auch deinen Adminstatus ändern. ",
en: "Would you like to give this family member admin rights?
They will then be able to edit the settings for this family group and also change your admin status.",
fr: "Veux-tu vraiment donner les droits d'admin à ce membre de la famille ?
Ce membre pourra alors modifier les paramètres du groupe familial et changer ton statut d'admin.",
es: "¿Quieres otorgar derechos de admin a este/a integrante de la familia?
Podrá modificar todos los ajustes, incluso cambiar tu estatus de admin.",
pt: "Você gostaria de conceder direitos de administração a este membro da família?
Essa pessoa poderá então editar as configurações deste grupo familiar, inclusive alterar seu status de admin."
},
popupDisableNow: {
de: "Möchtest du diesem Familienmitglied die Admin-Rechte jetzt entziehen?
Es kann dann die Einstellungen dieser Familiengruppe nicht mehr sehen.",
en_gb: "Are you sure you want to take away this family member’s admin rights?
They will then no longer be able to see the settings of this family group.",
en: "Would you like to take away this family member’s admin rights?
They will then no longer be able to see the settings for this family group.",
fr: "Veux-tu vraiment retirer les droits d'admin à ce membre de la famille ?
Ce membre ne pourra alors plus voir les paramètres du groupe familial.",
es: "¿Quieres revocar los derechos de admin de este/a integrante de la familia?
Ya no podrá ver los ajustes del grupo familiar.",
pt: "Você gostaria de revogar os direitos de administração deste membro da família?
Essa pessoa não poderá mais ver as configurações do grupo familiar."
},
giveAdminButton: {
de: "Admin-Rechte geben",
en: "Give admin rights",
fr: "Donner les droits",
es: "Otorgar derechos",
pt: "Conceder direitos"
},
takeAdminButton: {
de: "Admin-Rechte entziehen",
en: "Take away admin rights",
fr: "Retirer les droits",
es: "Revocar derechos",
pt: "Revogar direitos"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
loginCode: {
de: "Anmelde-Code:",
en: "Login code:",
fr: "Code de connexion :",
es: "Clave de acceso:",
pt: "Código de acesso:"
},
okDone: {
de: "Fertig",
en: "Done!",
fr: "C'est fait !",
es: "¡Listo!",
pt: "Pronto!"
},
infoText: {
de: "Dies ist der Anmelde-Code des neuen Familien-Admins.
Notiere ihn dir und hinterlege am besten eine E-Mail-Adresse in dem Nutzerkonto, damit du den Zugang nicht verlieren kannst.",
en: "This is the login code for the new family admin.
Make sure to write it down or save it somewhere. It is recommended to add an email address to your account to avoid losing access.",
fr: "Voici le code de connexion pour l'admin de la famille nouvellement ajouté·e.
Note le code ou, mieux encore, ajoute une adresse e-mail à ce compte pour ne pas perdre l'accès.",
es: "Esta es la clave de acceso del nuevo admin familiar.
Guárdalo bien y, de preferencia, registra tu correo e. en los ajustes de tu cuenta para que nunca pierdas el acceso. ",
pt: "Este é o código de acesso do(a) novo(a) administrador(a) do grupo familiar.
Por favor, anote-o e, de preferência, adicione um endereço de e-mail a essa conta para que você não perca o acesso."
},
lastAdminDeleteWarning: {
de: "Der letzte Familien-Admin kann nicht entfernt werden.",
en: "The last family admin cannot be removed.",
fr: "Cet·te admin ne peut pas être retiré·e car il n'y en a pas d'autre.",
es: "No se puede eliminar un admin si no hay otro registrado.",
pt: "Não é possível remover um Admin se não há outro registrado."
}
};
})();
pages/group/member/person/rows/familyAdmin/popupAbort/popup.ls
(function(){
return function(){
return inc("/lib/gui/errorPopup/popup")({
label: T("lastAdminDeleteWarning")
});
};
})();
pages/group/member/person/rows/familyAdmin/popupConfirm/popup.ls
(function(){
return function(page, groupCode, publicId, enabled){
var tap;
tap = function(){
return inc("submit/submit")(page, groupCode, publicId, !enabled);
};
return inc("/lib/gui/confirmPopup/popup")({
onConfirm: tap,
label: enabled
? T("popupDisableNow")
: T("popupEnableNow"),
yesLabel: enabled
? T("takeAdminButton")
: T("giveAdminButton"),
noLabel: T("cancelButton")
});
};
})();
pages/group/member/person/rows/familyAdmin/popupConfirm/submit/showLoginCodePopup/buttonDone/button.ls
(function(){
return function(){
return Button(T("okDone")).css({
marginTop: "1em"
}).tap(function(){
return app.currentPopup.close();
});
};
})();
pages/group/member/person/rows/familyAdmin/popupConfirm/submit/showLoginCodePopup/buttonPrint/button.ls
(function(){
return function(md, loginCode){
var print;
print = function(){
var userCard;
userCard = inc("/../qrcode/userCard/userCard")({
loginCode: loginCode,
name: md.displayName || md.name
});
return inc("/lib/util/print/print")({
div: userCard,
title: T("loginCode")
});
};
return Button({
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
marginTop: "1.5em",
marginRight: "1em"
}).tap(print);
};
})();
pages/group/member/person/rows/familyAdmin/popupConfirm/submit/showLoginCodePopup/show.ls
(function(){
return function(page, onDone){
var md, loginCode, html;
md = page.memberDescription;
loginCode = md.loginCode;
html = Div({
margin: "1em"
}).append(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("infoText")), Div({
fontSize: "1.3em"
}).html(T("loginCode"), Span().css({
userSelect: "text",
marginLeft: "0.2em"
}).secureHtml(loginCode.toLowerCase())), inc("buttonPrint/button")(md, loginCode), inc("buttonDone/button")());
return inc("/lib/gui/popup/popup")({
html: html,
onClose: onDone
});
};
})();
pages/group/member/person/rows/familyAdmin/popupConfirm/submit/submit.ls
(function(){
return function(page, groupCode, publicId, enable){
var spinner;
spinner = inc("/lib/gui/spinnerOverlay/overlay")();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/setFamilyAdmin/set"),
params: {
groupCode: groupCode,
publicId: publicId,
enable: enable
},
requiredVisibleDiv: app.currentPage,
onError: function(error){
spinner.remove();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
spinner.remove();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var ref$;
if (result.status === "ok") {
return (ref$ = groupLogs[groupCode]) != null ? ref$.sync(function(){
spinner.remove();
if (enable) {
return inc("showLoginCodePopup/show")(page, function(){
return startPage({
history: -1
});
});
} else {
return startPage({
history: -1
});
}
}) : void 8;
} else {
spinner.remove();
return inc("/lib/gui/errorPopup/popup")();
}
}
});
};
})();
pages/group/member/person/rows/familyAdmin/row.ls
(function(){
return function(page){
var d, publicId, enabled, groupCode, totalAdmins, tap, row;
d = page.memberDescription;
publicId = d.publicId;
enabled = d.role === "admin";
groupCode = page.groupDescription.groupCode;
totalAdmins = page.groupDescription.members.admin.length;
tap = function(){
if (enabled && totalAdmins === 1) {
return inc("popupAbort/popup")();
} else {
return inc("popupConfirm/popup")(page, groupCode, publicId, enabled);
}
};
return row = inc("../_row/row")({
label: T("label"),
value: enabled
? T("yes")
: T("no")
}).tap(tap);
};
})();
pages/group/member/person/rows/groupInternalName/_t.ls
(function(){
return {
nameInThisGroup: {
de: "Name in dieser Gruppe",
en: "Name in this group",
fr: "Nom dans ce groupe",
es: "Nombre en este grupo",
pt: "Nome neste grupo"
}
};
})();
pages/group/member/person/rows/groupInternalName/page/_t.ls
(function(){
return {
nameInGroup: {
de: "Name in dieser Gruppe",
en: "Name in group",
fr: "Nom dans le groupe",
es: "Nombre en este grupo",
pt: "Nome neste grupo"
},
nameInGroupTeacher: {
de: "Name in dieser Gruppe: (nur für Lehrkräfte sichtbar)",
en: "Name in group: (only visible for teachers)",
fr: "Nom dans ce groupe : (Visible uniquement pour les professeurs)",
es: "Nombre en este grupo: (únicamente visible para docentes)",
pt: "Nome neste grupo: (somente visível para professores)"
},
nameInGroupFamily: {
de: "Name in dieser Gruppe:",
en: "Name in group:",
fr: "Nom dans le groupe :",
es: "Nombre en el grupo:",
pt: "Nome neste grupo:"
},
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
}
};
})();
pages/group/member/person/rows/groupInternalName/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: T("backButton"),
title: T("nameInGroup")
});
};
})();
pages/group/member/person/rows/groupInternalName/page/page.ls
(function(){
return function(page){
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(page.params.groupCode, page.params.publicId);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: page.groupDescription.type === "family"
? T("nameInGroupFamily")
: T("nameInGroupTeacher"),
submit: submit,
submitLabel: T("change"),
screenKeyboardShiftStatus: true
}));
return form.input.setValue(page.memberDescription.groupInternalName);
}
};
};
})();
pages/group/member/person/rows/groupInternalName/page/submit/submit.ls
(function(){
return function(page, form){
var groupCode, publicId, groupInternalName;
groupCode = page.groupDescription.groupCode;
publicId = page.memberDescription.publicId;
groupInternalName = form.input.getValue();
if (groupInternalName === "") {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/setGroupInternalName/set"),
params: {
groupCode: groupCode,
publicId: publicId,
groupInternalName: groupInternalName
},
requiredVisibleDiv: page,
onCompleted: function(result){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: groupCode,
onLoaded: function(d){
return startPage({
history: -1,
animation: "slideRight"
});
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
},
onError: function(error){
debug(error);
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/member/person/rows/groupInternalName/row.ls
(function(){
return function(page){
var tap;
tap = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
publicId: page.params.publicId,
groupCode: page.params.groupCode
}
});
};
return inc("../_row/row")({
label: T("nameInThisGroup"),
value: page.memberDescription.groupInternalName,
icon: path("/lib/svg/icon/arrow-right-small.svg")
}).tap(tap);
};
})();
pages/group/member/person/rows/loginCode/_t.ls
(function(){
return {
loginCode: {
de: "Anmelde-Code",
en: "Login code",
fr: "Code de connexion",
es: "Clave de acceso",
pt: "Código de acesso"
}
};
})();
pages/group/member/person/rows/loginCode/page/_t.ls
(function(){
return {
titleLoginCode: {
de: "Anmelde-Code",
en: "Login Code",
fr: "Code de connexion",
es: "Clave de acceso",
pt: "Código de acesso"
},
buttonPrint: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
antonLoginCode: {
de: "ANTON-Anmelde-Code",
en: "ANTON Login Code",
fr: "Code de connexion ANTON",
es: "Clave de acceso ANTON",
pt: "Código de acesso ANTON"
}
};
})();
pages/group/member/person/rows/loginCode/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("titleLoginCode")
});
};
})();
pages/group/member/person/rows/loginCode/page/card/card.ls
(function(){
return function(page){
var md, gd;
md = page.memberDescription;
gd = page.groupDescription;
return page.userCard = inc("/../qrcode/userCard/userCard")({
loginCode: md.loginCode || md.code,
groupName: gd.name,
name: md.groupInternalName && md.groupInternalName !== md.name
? md.groupInternalName + " (" + md.name + ")"
: md.name
});
};
})();
pages/group/member/person/rows/loginCode/page/page.ls
(function(){
return function(page){
var p;
p = page.params;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(p.groupCode, p.publicId);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.append(Div({
display: "flex",
flexDirection: "column"
}).append(inc("card/card")(page), inc("printButton/button")(page)));
}
};
};
})();
pages/group/member/person/rows/loginCode/page/printButton/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc("/lib/util/print/print")({
div: page.userCard,
title: T("antonLoginCode")
});
};
return Button({
label: T("buttonPrint"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
margin: "1.5em 0 1em"
}).tap(tap);
};
})();
pages/group/member/person/rows/loginCode/row.ls
(function(){
return function(page){
var md, loginCode, tap;
md = page.memberDescription;
loginCode = md.loginCode || md.code;
if (!loginCode) {
return;
}
tap = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
publicId: page.params.publicId,
groupCode: page.params.groupCode
}
});
};
return inc("../_row/row")({
label: T("loginCode"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
value: Span().css({
userSelect: "text"
}).html(loginCode.toLowerCase())
}).tap(tap);
};
})();
pages/group/member/person/rows/preparedName/_t.ls
(function(){
return {
nickName: {
de: "Spitzname",
en: "Nickname",
fr: "Surnom",
es: "Apodo",
pt: "Apelido"
}
};
})();
pages/group/member/person/rows/preparedName/page/_t.ls
(function(){
return {
titleChangeName: {
de: "Name ändern",
en: "Change name",
fr: "Changer de nom",
es: "Cambiar de nombre",
pt: "Modificar nome"
},
nickName: {
de: "Spitzname",
en: "Nickname",
fr: "Surnom",
es: "Apodo",
pt: "Apelido"
},
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
}
};
})();
pages/group/member/person/rows/preparedName/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("titleChangeName")
});
};
})();
pages/group/member/person/rows/preparedName/page/page.ls
(function(){
return function(page){
var p;
p = page.params;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(p.groupCode, p.publicId);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var submit, form;
submit = function(){
return inc("submit/submit")(page, form);
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("nickName"),
submit: submit,
submitLabel: T("change"),
screenKeyboardShiftStatus: true
}));
form.input.setValue(page.memberDescription.name);
return form.input.start();
}
};
};
})();
pages/group/member/person/rows/preparedName/page/submit/submit.ls
(function(){
return function(page, form){
var groupCode, publicId, name;
groupCode = page.groupDescription.groupCode;
publicId = page.memberDescription.publicId;
name = form.input.getValue();
if (name === "") {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/group/members/setPreparedMemberName/set"),
params: {
groupCode: groupCode,
publicId: publicId,
name: name
},
requiredVisibleDiv: page,
onCompleted: function(result){
return inc("/data/group/getMemberDescriptions/get")({
groupCode: groupCode,
onLoaded: function(d){
return startPage({
history: -1,
animation: "slideRight"
});
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
},
onError: function(error){
debug(error);
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/member/person/rows/preparedName/row.ls
(function(){
return function(page){
var md, tap;
md = page.memberDescription;
tap = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
publicId: page.params.publicId,
groupCode: page.params.groupCode
}
});
};
return inc("../_row/row")({
label: T("nickName"),
value: md.name,
icon: md.isPreparedMember ? path("/lib/svg/icon/arrow-right-small.svg") : void 8
}).tap(md.isPreparedMember ? tap : void 8);
};
})();
pages/group/member/person/rows/remove/_t.ls
(function(){
return {
removeFromGroup: {
de: "Aus dieser Gruppe entfernen",
en: "Remove from this group",
fr: "Retirer du groupe",
es: "Eliminar del grupo",
pt: "Remover do grupo"
},
'delete': {
de: "Löschen",
en: "Delete",
fr: "Supprimer",
es: "Borrar",
pt: "Apagar"
},
pupil: {
de: "Schüler/innen",
en_gb: "pupil",
en: "student",
fr: "élève",
es: "estudiante",
pt: "aluno(a)"
},
teacher: {
de: "Lehrer",
en: "teacher",
fr: "professeur·e",
es: "docente",
pt: "professor(a)"
},
deleteCode: {
de: "Soll dieser vorbereitete $1-Code gelöscht werden?",
en: "Do you want to delete this $1 code?",
fr: "Veux-tu supprimer ce code-$1 ?",
es: "¿Quieres eliminar esta clave-$1?",
pt: "Você quer apagar este código-$1?"
},
removePupilFromGroup: {
de: "Soll diese/r Schüler/in aus der Gruppe $1 entfernt werden?",
en_gb: "Do you want to remove this pupil from the group $1?",
en: "Do you want to remove this student from the group $1?",
fr: "Veux-tu retirer cet·te élève du groupe $1 ?",
es: "¿Quieres que el o la estudiante sea eliminada del grupo $1?",
pt: "Você quer remover este(a) aluno(a) do grupo $1?"
},
removeTeacherFromGroup: {
de: "Soll diese Lehrkraft aus der Gruppe $1 entfernt werden?",
en: "Do you want to remove this teacher from the group $1?",
fr: "Veux-tu retirer ce·tte professeur·e du groupe $1 ?",
es: "¿Quieres que el o la docente sea eliminada del grupo $1?",
pt: "Você quer remover este(a) professor(a) do grupo $1?"
},
removeMemberFromFamily: {
de: "Soll dieses Mitglied aus der Familiengruppe entfernt werden?",
en: "Do you want to remove this member from the family group?",
fr: "Veux-tu retirer ce membre du groupe familial ?",
es: "¿Quieres eliminar a esta o este miembro del grupo familiar?",
pt: "Você quer remover este membro do grupo familiar?"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
removeButton: {
de: "Entfernen",
en: "Remove",
fr: "Retirer",
es: "Eliminar",
pt: "Remover"
},
deleteButton: {
de: "Löschen",
en: "Delete",
fr: "Effacer",
es: "Borrar",
pt: "Apagar"
}
};
})();
pages/group/member/person/rows/remove/popup/popup.ls
(function(){
return function(page, isDelete){
var d, groupName, type, label;
d = page.memberDescription;
groupName = page.groupDescription.name;
type = d.role === "pupil"
? T("pupil")
: T("teacher");
label = page.groupDescription.type === "family"
? T("removeMemberFromFamily")
: isDelete
? T("deleteCode", type)
: d.role === "pupil"
? T("removePupilFromGroup", groupName)
: T("removeTeacherFromGroup", groupName);
return inc("/lib/gui/confirmPopup/popup")({
yesLabel: isDelete
? T("deleteButton")
: T("removeButton"),
noLabel: T("cancelButton"),
label: label,
onConfirm: function(){
return inc("../../../../../_shared/removeFromGroup/remove")(page);
},
animationOnClose: false
});
};
})();
pages/group/member/person/rows/remove/row.ls
(function(){
return function(page){
var md, publicId, ref$, isDelete;
md = page.memberDescription;
publicId = (ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8;
if (md.publicId === publicId) {
return;
}
isDelete = md.isPreparedMember && !md.isPreparedUser;
return inc("../_row/row")({
label: isDelete
? T("delete")
: T("removeFromGroup"),
icon: isDelete
? path("/lib/svg/icon/bin.svg")
: path("/lib/svg/shape/exit.svg")
}).tap(function(){
return inc("popup/popup")(page, isDelete);
});
};
})();
pages/group/member/person/rows/rows.ls
(function(){
return function(page){
var d, displayName, dirDisplayName, groupInternalName, preparedName, loginCode, subgroups, certificate, directoryAdd, remove, deviceRememberUser, familyAdmin;
d = page.memberDescription;
displayName = function(){
return inc("displayName/displayName")(d, page);
};
dirDisplayName = function(){
return inc("dirDisplayName/dirDisplayName")(d);
};
groupInternalName = function(){
return inc("groupInternalName/row")(page);
};
preparedName = function(){
return inc("preparedName/row")(page);
};
loginCode = function(){
return inc("loginCode/row")(page);
};
subgroups = function(){
return inc("subgroups/row")(page);
};
certificate = function(){
return inc("certificate/row")(page);
};
directoryAdd = function(){
return inc("directoryAdd/row")(page);
};
remove = function(){
return inc("remove/row")(page);
};
deviceRememberUser = function(){
return inc("deviceRememberUser/row")(d);
};
familyAdmin = function(){
return inc("familyAdmin/row")(page);
};
return Div().html(page.groupDescription.type === "family"
? [displayName(), dirDisplayName(), groupInternalName(), loginCode(), familyAdmin(), deviceRememberUser(), d.role === "pupil" ? certificate() : void 8, remove()]
: d.role === "pupil"
? d.isPreparedUser
? [displayName(), dirDisplayName(), groupInternalName(), loginCode(), subgroups(), directoryAdd(), remove()]
: d.isPreparedMember
? [preparedName(), loginCode(), subgroups(), remove()]
: [displayName(), dirDisplayName(), groupInternalName(), loginCode(), subgroups(), certificate(), directoryAdd(), remove()]
: d.role === "teacher" ? d.isPreparedUser
? [displayName(), dirDisplayName(), remove()]
: d.isPreparedMember
? [loginCode(), remove()]
: [displayName(), dirDisplayName(), remove()] : void 8);
};
})();
pages/group/member/person/rows/subgroups/_t.ls
(function(){
return {
subGroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
none: {
de: "keine",
en: "none",
fr: "aucun",
es: "no hay",
pt: "nenhum"
}
};
})();
pages/group/member/person/rows/subgroups/page/_t.ls
(function(){
return {
titleSubgroups: {
de: "Untergruppen",
en: "Subgroups",
fr: "Sous-groupes",
es: "Subgrupos",
pt: "Subgrupos"
},
noSubgroupsAvailable: {
de: "Es gibt noch keine Untergruppen.",
en: "Currently, there are no subgroups available.",
fr: "Il n'y a actuellement aucun sous-groupe disponible.",
es: "Aún no hay subgrupos disponibles.",
pt: "Ainda não há subgrupos disponíveis."
},
buttonNewSubgroup: {
de: "Neue Untergruppe",
en: "New subgroup",
fr: "Nouveau sous-groupe",
es: "Nuevo subgrupo",
pt: "Novo subgrupo"
}
};
})();
pages/group/member/person/rows/subgroups/page/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("titleSubgroups")
});
};
})();
pages/group/member/person/rows/subgroups/page/buttonCreateSubgroup/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc("/pages/group/group/other/subgroupCreatePopup/popup")(page);
};
return Button({
label: T("buttonNewSubgroup"),
icon: path("/lib/svg/shape/plus.svg")
}).css({
margin: "1.5em"
}).tap(tap);
};
})();
pages/group/member/person/rows/subgroups/page/noSubgroups/noSubgroups.ls
(function(){
return function(){
return Div({
width: "35em",
maxWidth: "95%",
lineHeight: "1.5em",
margin: "0 auto"
}).html(T("noSubgroupsAvailable"));
};
})();
pages/group/member/person/rows/subgroups/page/page.ls
(function(){
return function(page){
var p, ref$, ref1$;
p = page.params;
page.groupDescription = inc("/data/group/calcGroupDescription/calc")(p.groupCode);
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(p.groupCode, p.publicId);
page.schoolDescription = (ref$ = inc("/data/school/calcSchoolDescription/calc")((ref1$ = page.groupDescription.school) != null ? ref1$.schoolCode : void 8)) != null
? ref$
: {};
page.subgroups = inc("/data/group/calcSubgroups/calc")(p.groupCode);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
return page.append(page.subgroups.length === 0
? inc("noSubgroups/noSubgroups")()
: inc("subgroupRows/rows")(page), inc("buttonCreateSubgroup/button")(page));
}
};
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/calcIsSelected/calc.ls
(function(){
return function(subgroup, page){
var groupCode, publicId, e;
groupCode = page.params.groupCode;
publicId = page.memberDescription.publicId;
e = window.groupLogs[groupCode].findLast({
event: "setSubgroupMember",
id: subgroup.id,
publicId: publicId
});
return e != null;
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/check/check.ls
(function(){
return function(isSelected){
return Div().addClass("check").css({
display: "flex",
width: "2em",
height: "2em"
}).append(SvgIcon({
svg: isSelected
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg"),
color: Color.grey[600]
}));
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/row.ls
(function(){
return function(subgroup, page, isSelected){
var tap, update, div, b;
isSelected == null && (isSelected = inc("calcIsSelected/calc")(subgroup, page));
tap = function(){
this.css({
pointerEvents: "none"
});
this.findFirst(".check").replaceWith(inc("spinner/spinner")());
return inc("submit/submit")(subgroup, page, !isSelected, update);
};
update = function(newIsSelected){
return div.replaceWith(inc(THISFILE)(subgroup, page, newIsSelected));
};
return div = Div({
display: "flex",
padding: "0",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
maxWidth: "95%",
width: "35em",
margin: "0 auto -1px",
minHeight: "3.6em",
background: "white"
}).html(inc("check/check")(isSelected), inc("tag/tag")(subgroup)).tap(tap);
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/spinner/spinner.ls
(function(){
return function(){
return Div({
display: "flex",
width: "2em",
height: "2em"
}).append(inc("/lib/gui/spinner/spinner")().css({
width: "0.8em",
height: "0.8em"
}));
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/submit/submit.ls
(function(){
return function(subgroup, page, newSelected, update){
var groupCode, publicId;
groupCode = page.groupDescription.groupCode;
publicId = page.memberDescription.publicId;
return inc("/lib/util/pllsCall/call")({
path: newSelected
? path("/../server-apis-db2/apis/group/subgroup/members/add/add")
: path("/../server-apis-db2/apis/group/subgroup/members/remove/remove"),
params: {
id: subgroup.id,
groupCode: groupCode,
publicId: publicId
},
onCompleted: function(result){
return window.groupLogs[groupCode].sync(function(){
return update(newSelected);
});
},
onError: function(error){
update(!newSelected);
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: function(){
update(!newSelected);
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/row/tag/tag.ls
(function(){
return function(subgroup){
return Div({
flex: "1 1 auto",
display: "flex",
justifyContent: "flex-start",
pointerEvents: "none"
}).append(inc("/pages/content/_shared/pinTag/tag")(subgroup));
};
})();
pages/group/member/person/rows/subgroups/page/subgroupRows/rows.ls
(function(){
return function(page){
var s;
return Div({
width: "35em",
maxWidth: "95%",
display: "flex",
margin: "0 auto",
flexDirection: "column",
alignItems: "stretch"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.subgroups).length; i$ < len$; ++i$) {
s = ref$[i$];
results$.push(inc("row/row")(s, page));
}
return results$;
}()));
};
})();
pages/group/member/person/rows/subgroups/row.ls
(function(){
return function(page){
var p, hasAccess, subgroups, tap;
p = page.params;
hasAccess = page.groupDescription.plusFeatureMode === "enabled";
subgroups = inc("/data/group/calcSubgroups/calc")(p.groupCode, p.publicId);
tap = function(){
if (!hasAccess) {
return inc("/lib/gui/noSchoolLicensePopup/popup")();
} else {
return startPage({
path: path("page/page"),
animation: "slideLeft",
params: {
groupCode: p.groupCode,
publicId: p.publicId
}
});
}
};
return inc("../_row/row")({
label: T("subGroups"),
value: inc("value/value")(subgroups),
icon: hasAccess
? path("/lib/svg/icon/arrow-right-small.svg")
: path("/lib/svg/shape/help.svg")
}).tap(tap);
};
})();
pages/group/member/person/rows/subgroups/value/value.ls
(function(){
return function(subgroups){
var s;
if (subgroups.length === 0) {
return T("none");
}
return Div({
display: "flex",
flexWrap: "wrap",
justifyContent: "flex-end",
fontSize: "0.9em",
pointerEvents: "none"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = subgroups).length; i$ < len$; ++i$) {
s = ref$[i$];
results$.push(inc("/pages/content/_shared/pinTag/tag")({
type: "subgroup",
name: s.name
}));
}
return results$;
}()));
};
})();
pages/group/member/start.ls
(function(){
return function(groupCode, publicId){
var lastGroupMemberPage, groupDescription, memberDescription, pagePath;
lastGroupMemberPage = inc("/lib/util/cache/get/get")("lastGroupMemberPage");
groupDescription = inc("/data/group/calcGroupDescription/calc")(groupCode);
memberDescription = inc("/data/group/getCachedMemberDescription/get")(groupCode, publicId);
pagePath = groupDescription.type === "family" && _.includes(lastGroupMemberPage, "content")
? path("person/page")
: (groupDescription != null ? groupDescription.type : void 8) === "family" && lastGroupMemberPage
? lastGroupMemberPage
: lastGroupMemberPage && memberDescription.role === "pupil" && !memberDescription.isPreparedMember
? lastGroupMemberPage
: path("person/page");
return startPage({
path: pagePath,
animation: "slideLeft",
params: {
publicId: publicId,
groupCode: groupCode
}
});
};
})();
pages/group/member/timeline/_popupPrint/_t.ls
(function(){
return {
printTitle: {
de: "Druck-Vorschau",
en: "Print preview",
fr: "Aperçu de l'impression",
es: "Vista previa",
pt: "Pré-vizualização"
},
activeDays: {
de: "Drucke letzte aktive Tage:",
en: "Number of most recent active days to print:",
fr: "Nombre de jours actifs récents à imprimer :",
es: "Imprimir los días activos más recientes:",
pt: "Imprimir dias ativos mais recentes:"
},
day: {
de: "Tag",
en: "day",
fr: "jour",
es: "día",
pt: "dia"
},
days: {
de: "Tage",
en: "days",
fr: "jours",
es: "días",
pt: "dias"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
historyPrintTitle: {
de: "ANTON-Verlauf für $1",
en: "ANTON history for $1",
fr: "ANTON historique de $1",
es: "ANTON historial de $1",
pt: "Histórico de ANTON de $1"
}
};
})();
pages/group/member/timeline/_popupPrint/buttonPrint/button.ls
(function(){
return function(prePrint, page){
var tap;
tap = function(){
return inc("/lib/util/print/print")({
div: prePrint.firstChild.scrollContainerDiv,
title: T("historyPrintTitle", page.memberDescription.displayName)
});
};
return Div({
padding: "1em"
}).append(Button(T("print")).tap(tap));
};
})();
pages/group/member/timeline/_popupPrint/days/calcItems/calc.ls
(function(){
return function(click){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = [1, 3, 7, 14, 30]).length; i$ < len$; ++i$) {
results$.push((fn$.call(this, ref$[i$])));
}
return results$;
function fn$(i){
return {
value: i,
click: function(){
return click(i);
},
label: i + " " + (i === 1
? T("day")
: T("days"))
};
}
};
})();
pages/group/member/timeline/_popupPrint/days/days.ls
(function(){
return function(page){
var tap, select, div;
tap = function(){
var items;
items = inc("calcItems/calc")(select);
return OverlayMenu({
referenceDiv: div,
items: items,
direction: "down left",
adjustXY: "0 -2"
});
};
select = function(v){
inc("/lib/util/cache/set/set")("printDays", v);
return inc("../popup")(page, true);
};
return Div({
display: "flex"
}).html(div = Div({
flex: "0 1 auto",
display: "flex",
margin: "0.5em"
}).append(Div({
flex: "0 1 auto"
}).html(T("activeDays") + " "), Div({
minWidth: "0.8em",
textAlign: "right"
}).html(page.printDays), inc("iconArrow/icon")()).tap(tap));
};
})();
pages/group/member/timeline/_popupPrint/days/iconArrow/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-down-mini.svg"),
color: Color.grey[600]
}).css({
marginLeft: "-0.1em"
});
};
})();
pages/group/member/timeline/_popupPrint/popup.ls
(function(){
return function(page, refresh){
var div, pp, popup;
page.printDays = inc("/lib/util/cache/get/get")("printDays") || 3;
div = Div().append(inc("title/title")(), inc("days/days")(page), pp = inc("prePrint/prePrint")(page), inc("buttonPrint/button")(pp, page));
return popup = inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: !refresh
});
};
})();
pages/group/member/timeline/_popupPrint/prePrint/calcEvents/calc.ls
(function(){
return function(page){
var totalActiveDays, events, events2, counterDays, i$, i, e;
totalActiveDays = page.printDays;
events = page.listData;
events2 = [];
counterDays = 0;
for (i$ = events.length - 1; i$ >= 0; --i$) {
i = i$;
e = events[i];
events2.push(e);
if (e.event === "day") {
counterDays++;
}
if (counterDays === totalActiveDays) {
break;
}
}
return _.reverse(events2);
};
})();
pages/group/member/timeline/_popupPrint/prePrint/prePrint.ls
(function(){
return function(page){
var events, w, scale, div, e;
events = inc("calcEvents/calc")(page);
w = body.width();
scale = w < 450
? 0.4
: w < 550 ? 0.5 : 0.6;
return div = Div({
display: "flex",
border: "1px solid " + Color.grey[300],
overflow: "hidden",
width: 38 * scale + "em",
height: 16 * scale + "em",
margin: "0.2em auto",
boxSizing: "border-box"
}).append(ScrollDiv().css({
width: "38em",
height: "16em",
transform: "scale(" + scale + ", " + scale + ")"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = events).length; i$ < len$; ++i$) {
e = ref$[i$];
results$.push(inc("../../list/row/row")(page)(e).css({
pointerEvents: "none",
pageBreakInside: "avoid"
}));
}
return results$;
}()))).onDomAppend(function(){
var i$, ref$, len$, el, results$ = [];
for (i$ = 0, len$ = (ref$ = div.findAll(".onScopeRender")).length; i$ < len$; ++i$) {
el = ref$[i$];
results$.push(el.onScopeRenderHandler());
}
return results$;
});
};
})();
pages/group/member/timeline/_popupPrint/title/title.ls
(function(){
return function(){
return Div({
padding: "0.8em 0.3em 0.2em",
fontWeight: "bold"
}).html(T("printTitle"));
};
})();
pages/group/member/timeline/_shared/dayLabelDiv/div.ls
(function(){
return function(){
return Div().addClass("dayLabel").css({
background: Color.grey[75],
border: "1px solid " + Color.grey[150],
padding: "0.2em",
fontSize: "0.9em",
minWidth: "10em"
});
};
})();
pages/group/member/timeline/_t.ls
(function(){
return {
deletedLearnList: {
de: "Gelöschte Lernliste",
en: "Deleted study list",
fr: "Liste supprimée",
es: "Lista eliminada",
pt: "Lista de estudos apagada"
},
deletedLearnListLevel: {
de: "Gelöschte Übung",
en: "Deleted exercise",
fr: "Exercice supprimé",
es: "Ejercicio eliminado",
pt: "Exercícios apagados"
},
level: {
de: "Übung",
en: "Exercise",
fr: "Exercice",
es: "Ejercicio",
pt: "Exercício"
},
learnList: {
de: "Lernliste",
en: "Study list",
fr: "Liste",
es: "Lista",
pt: "Lista de estudos"
},
partXfromY: {
de: "(Teil $1 von $2)",
en: "(Part $1 of $2)",
fr: "(Partie $1 sur $2)",
es: "(Parte $1 de $2)",
pt: "(Parte $1 de $2)"
},
pause: {
de: "Pause",
en: "Break",
fr: "Pause",
es: "Pausa",
pt: "Pausa"
},
games: {
de: "Spiele",
en: "Games",
fr: "Jeux",
es: "Juegos",
pt: "Jogos"
},
noDataSelf: {
de: "An dieser Stelle wird dein Lernfortschritt ab dem Gruppenbeitritt am $1 angezeigt. Du warst seit dem Gruppenbeitritt noch nicht aktiv.",
en_gb: "This is where your learning progress since joining the group on $1 is shown. You have not been active since joining the group.",
en: "This is where your learning progress since joining the group on $1 is shown. You have not been active since joining the group.",
fr: "Dans cette rubrique, tu peux voir ta progression depuis que tu as rejoint le groupe le $1. Il n'y a eu aucune activité depuis que tu as rejoint le groupe.",
es: "Esta sección muestra tu progreso desde que te uniste al grupo en $1. No has estado activo desde que te uniste al grupo.",
pt: "Esta seção mostra o seu progresso de aprendizagem, desde quando ingressou no grupo em $1. Você ainda não esteve ativo desde que entrou no grupo."
},
noDataPupil: {
de: "An dieser Stelle wird der Lernfortschritt dieses Schülers / dieser Schülerin ab dem Gruppenbeitritt am $1 angezeigt. Er/Sie war seit dem Gruppenbeitritt noch nicht aktiv.",
en_gb: "This is where the learning progress of this pupil since joining the group on $1 is shown. They have not been active since joining the group.",
en: "This is where the learning progress of this student since joining the group on $1 is shown. They have not been active since joining the group.",
fr: "Dans cette rubrique, la progression de l'élève s'affiche à partir de sa date d'entrée dans le groupe le $1. L'élève n'a eu aucune activité depuis son entrée dans le groupe.",
es: "Este/a estudiante no ha estado activo/a desde su ingreso al grupo el $1. En cuanto empiece a repasar los ejercicios podrás ver aquí su progreso.",
pt: "Este(a) aluno(a) ainda não esteve ativo(a) desde que entrou no grupo em $1. Assim que alguns exercícios forem feitos, você poderá ver o progresso do aprendizado aqui."
},
groupJoin: {
de: "Der Gruppe beigetreten",
en: "Entered the group",
fr: "A rejoint le groupe",
es: "Se unió al grupo",
pt: "Entrou no grupo"
}
};
})();
pages/group/member/timeline/calcData/attachGameEvents/attach.ls
(function(){
return function(events){
var events2, parentEvent, i$, len$, e;
events2 = [];
parentEvent = null;
for (i$ = 0, len$ = events.length; i$ < len$; ++i$) {
e = events[i$];
if (e.event === "games") {
parentEvent = e;
e.gameEvents = [];
}
if (e.event === "debugGame") {
parentEvent.gameEvents.push(e);
} else {
events2.push(e);
}
}
return events2;
};
})();
pages/group/member/timeline/calcData/attachLevelEvents/attach.ls
(function(){
return function(events){
var events2, parentEvent, i$, len$, e, ref$;
events2 = [];
parentEvent = null;
for (i$ = 0, len$ = events.length; i$ < len$; ++i$) {
e = events[i$];
if ((ref$ = e.event) === "block" || ref$ === "learnList") {
parentEvent = e;
e.levelEvents = [];
}
if ((ref$ = e.event) === "finishLevel" || ref$ === "abortLevel") {
parentEvent.levelEvents.push(e);
} else {
events2.push(e);
}
}
return events2;
};
})();
pages/group/member/timeline/calcData/calc.ls
(function(){
return function(page, result, onDone){
var events, events2, lastDate, lastType, i$, len$, i, e, ePrev, eNext, date, ref$, duration, that, blockPuid, listCode;
events = result.events;
events2 = [];
lastDate = "";
lastType = "";
for (i$ = 0, len$ = events.length; i$ < len$; ++i$) {
i = i$;
e = events[i$];
ePrev = events[i - 1];
eNext = events[i + 1];
date = e.created.substr(0, 10);
if (lastDate !== date) {
events2.push({
event: "day",
created: e.created
});
lastDate = date;
lastType = "";
}
if (((ref$ = _.last(events2)) != null ? ref$.event : void 8) !== "day") {
if (ePrev.created != null) {
duration = new Date(e.created) - new Date(ePrev.created);
if (duration > 1000 * 60 * 20) {
lastType = "";
events2.push({
event: "pause",
created: e.created,
duration: duration
});
}
}
}
if (e.event === "groupJoin") {
events2.push({
event: "groupJoin",
created: e.created
});
}
if (e.event === "outdatedEvents") {
events2.push({
event: "outdatedEvents",
created: e.created
});
}
if (e.event === "debugGame") {
if (lastType !== "games") {
events2.push({
event: "games",
created: e.created
});
lastType = "games";
}
events2.push(e);
} else if ((that = e.data.blockPuid) != null) {
blockPuid = that;
if (blockPuid !== lastType) {
events2.push({
event: "block",
created: e.created,
blockPuid: e.data.blockPuid,
blockTitle: e.data.blockTitle
});
lastType = blockPuid;
}
events2.push(e);
} else if (_.startsWith(e.data.puid, "/learnList")) {
listCode = e.data.puid.split("/")[2];
e.listCode = listCode;
if (lastType !== listCode) {
events2.push({
event: "learnList",
created: e.created,
listCode: listCode
});
lastType = listCode;
}
events2.push(e);
}
}
if (events2.length > 0) {
events2.push({
event: "bottom"
});
}
events2 = inc("attachLevelEvents/attach")(events2);
events2 = inc("attachGameEvents/attach")(events2);
page.listData = events2;
page.learnListInfos = result.learnListInfos;
page.groupJoinDate = result.groupJoinDate;
return onDone();
};
})();
pages/group/member/timeline/list/list.ls
(function(){
return function(page){
return page.list = ListDiv({
data: page.listData,
row: inc("row/row")(page),
nearScopeSize: 2,
nearScopeDelay: 1000,
debug: false,
onScroll: function(){
return inc("onScroll/onScroll")(page);
},
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 1
},
listPosition: {
rowIndex: page.listData.length - 1,
bottomOffset: 0
}
}).css({
height: "var(--centerHeight)"
});
};
})();
pages/group/member/timeline/list/onScroll/initFixedHeader/init.ls
(function(){
return function(page){
var wrapper;
if (page.fixedHeader) {
return;
}
return page.list.scrollContainerDiv.after(wrapper = Div({
display: "flex",
position: "absolute",
left: 0,
right: 0,
top: 0,
pointerEvents: "none"
}).append(page.fixedHeader = inc("../../../_shared/dayLabelDiv/div")().css({
marginTop: "-2px"
})));
};
})();
pages/group/member/timeline/list/onScroll/onScroll.ls
(function(){
return function(page){
var row, visible, dayLabel, labelTop, date;
inc("initFixedHeader/init")(page);
row = page.list.calcTopScopeRow();
visible = true;
if (row.data.event === "day") {
dayLabel = row.row.findFirst(".dayLabel");
labelTop = dayLabel.offsetTop + row.offsetTop;
if (labelTop < 0) {
visible = true;
} else {
visible = false;
}
}
date = inc("/lib/util/formatDate2/format")(row.data.created);
return page.fixedHeader.html(date.DD + ", " + date.formats.dateShort + "").css({
opacity: visible ? 1 : 0
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/_showReviewPopup/show.ls
(function(){
return function(page, e){
return inc("/pages/level/reviewOrPreviewPopup/popup")({
levelPuid: e.data.puid,
startConfig: e.data.startConfig,
round: e.data.round,
publicId: page.params.publicId,
popupType: "review"
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/duration/duration.ls
(function(){
return function(e){
var duration, durationSec, durationMin;
duration = e.data.duration;
if (!duration) {
return;
}
durationSec = _.ceil(duration);
durationMin = _.round(durationSec / 60);
return Div({
fontSize: "0.8em",
padding: "0 0.2em 0 0.4em",
minWidth: "3em",
textAlign: "right",
color: Color.grey[500]
}).html(durationSec < 60
? durationSec + "s"
: durationMin + "min");
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/abort/abort.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/cross.svg"),
color: Color.grey[300],
size: "0.7em"
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/bulb/bulb.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/bulb.svg"),
color: Color.yellow[600]
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/icon.ls
(function(){
return function(e){
return Div({
display: "flex",
width: "1.5em",
height: "2.5em",
overflow: "hidden"
}).onScopeRender(function(){
return this.append(e.event === "abortLevel"
? inc("abort/abort")()
: e.data.type === "bulb"
? inc("bulb/bulb")()
: e.data.levelTitle ? inc("starOrTrophy/starOrTrophy")(e) : void 8);
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/starOrTrophy/crown/crown.ls
(function(){
return function(score, i){
if (score !== 3) {
return;
}
return SvgIcon({
svg: path("/lib/svg/shape/crown.svg"),
color: Color.yellow[700],
size: "1.05em"
}).css({
position: "absolute",
transform: "rotate(25deg)"
}).css(i === "star"
? {
top: "-0.5em",
right: "-0.15em"
}
: {
top: "-0.7em",
right: "-0.05em"
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/starOrTrophy/icon/icon.ls
(function(){
return function(svg, color, width){
return Div({
position: "absolute",
top: 0,
left: "0.15em",
overflow: "hidden",
width: width
}).append(SvgIcon({
svg: path("/lib/svg/shape/" + svg + ".svg"),
color: color
}));
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/starOrTrophy/label/label.ls
(function(){
return function(score){
return Div({
position: "absolute",
bottom: "0px",
left: 0,
right: 0,
textAlign: "center",
fontSize: "0.6em",
color: Color.grey[500]
}).html(score);
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/icon/starOrTrophy/starOrTrophy.ls
(function(){
return function(e){
var type, score, g, i, c1, c2, icon;
type = e.data.type;
score = e.data.score;
g = Color.grey[400];
if (type === "test") {
i = "trophy";
c1 = g;
c2 = Color.yellow[600];
} else {
i = "star";
c1 = g;
c2 = Color.green[500];
}
icon = inc("icon/icon");
return Div({
width: "1.4em",
height: "1.8em",
textAlign: "left",
marginTop: "0.55em"
}).append(icon(i, c1, "100%"), icon(i, c2, score / 3 * 100 + "%"), inc("crown/crown")(score, i), inc("label/label")(score));
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/level.ls
(function(){
return function(page, e){
var tap;
tap = function(){
return inc("_showReviewPopup/show")(page, e);
};
return Div({
display: "flex",
borderBottom: "1px solid " + Color.grey[200],
background: "white",
minHeight: "3.2em",
paddingLeft: "0.2em",
marginLeft: "1em"
}).append(inc("title/title")(page, e), inc("progressBar/progressBar")(e), inc("icon/icon")(e), inc("duration/duration")(e)).tap(tap);
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/progressBar/canvas/canvas.ls
(function(){
return function(div, event){
var canvas, ctx;
canvas = inc("canvas/canvas")(div);
ctx = canvas.getContext("2d");
inc("drawProgressColors/draw")(0, canvas.height, 0, canvas.width, event.data.progressColors, event.data.total, ctx);
return canvas;
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/progressBar/canvas/canvas/canvas.ls
(function(){
return function(div){
var dpr, w, h;
dpr = window.devicePixelRatio;
w = _.round(div.width() * dpr);
h = _.round(div.height() * dpr);
return document.createElement("canvas").attr({
width: w,
height: h
}).css({
width: w / dpr + "px",
height: h / dpr + "px"
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/progressBar/canvas/drawProgressColors/draw.ls
(function(){
return function(yFrom, yTo, xFrom, xTo, progressColors, totalElements, ctx){
var s, parts, total, res$, i$, len$, i, p, t, scoreWidth, colors, xFrom2, xDelta, results$ = [];
s = progressColors;
if (!s) {
return;
}
s = s.split("g").join("g|");
s = s.split("r").join("r|");
s = s.split("b").join("b|");
parts = s.split("|");
parts = parts.filter(function(p){
return p.length > 0;
});
total = 0;
res$ = [];
for (i$ = 0, len$ = parts.length; i$ < len$; ++i$) {
i = i$;
p = parts[i$];
if (p.length === 1) {
total++;
parts[i] = 1 + p;
res$.push({
color: p,
total: 1,
start: total - 1
});
} else {
t = +p.substr(0, p.length - 1);
total += t;
res$.push({
color: _.last(p),
total: t,
start: total - t
});
}
}
parts = res$;
if (totalElements > total) {
total = totalElements;
}
scoreWidth = (xTo - xFrom) / total;
colors = {
g: Color.green[400],
r: Color.red[400],
b: Color.grey[400]
};
for (i$ = 0, len$ = parts.length; i$ < len$; ++i$) {
p = parts[i$];
xFrom2 = xFrom + p.start * scoreWidth;
xDelta = p.total * scoreWidth;
ctx.fillStyle = colors[p.color];
results$.push(ctx.fillRect(xFrom2, yFrom, xDelta, yTo - yFrom));
}
return results$;
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/progressBar/fakeProgressColors/fake.ls
(function(){
return function(event){
var d, c, that;
d = event.data;
if (d.progressColors != null) {
return;
}
c = "";
if (that = d.corrects) {
c += that + "g";
}
if (that = d.mistakes) {
c += that + "r";
}
return d.progressColors = c;
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/progressBar/progressBar.ls
(function(){
return function(event){
var div;
return div = Div({
display: "flex",
background: Color.grey[200],
height: "11px",
width: "2em",
overflow: "hidden",
borderRadius: "5px",
marginRight: "0.2em"
}).onScopeRender(function(){
inc("fakeProgressColors/fake")(event);
return div.append(inc("canvas/canvas")(div, event));
});
};
})();
pages/group/member/timeline/list/row/_shared/levels/level/title/title.ls
(function(){
return function(page, event){
var title, info, sublevel, t, that;
title = event.listCode
? (info = page.learnListInfos[event.listCode], sublevel = +event.data.puid.split("sublevel-")[1], !info
? T("deletedLearnListLevel")
: (t = inc("/../app01-learn-list/pages/_shared/calcLevelTitle/calc")(event.data.puid), t + " " + T("partXfromY", sublevel, info.totalSublevels)))
: (that = event.data.levelTitle)
? that
: T("level");
return Div({
flex: "1 1 auto",
textAlign: "left"
}).html(title);
};
})();
pages/group/member/timeline/list/row/_shared/levels/levels.ls
(function(){
return function(page, event){
var toggle, div;
toggle = function(){
var e;
if (event.expand) {
event.expand = false;
div.css({
paddingBottom: ""
}).empty();
} else {
event.expand = true;
div.css({
paddingBottom: "1.6em"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = event.levelEvents).length; i$ < len$; ++i$) {
e = ref$[i$];
results$.push(inc("level/level")(page, e));
}
return results$;
}()));
}
return requestAnimationFrame(page.list.repositionCurrentRows);
};
div = Div({
display: "flex",
flexDirection: "column",
alignItems: "stretch",
alignSelf: "stretch"
});
div.toggle = toggle;
return div;
};
})();
pages/group/member/timeline/list/row/_shared/stats/duration/duration.ls
(function(){
return function(event){
var d, dSec, dMin;
d = _.sumBy(event.levelEvents, "data.duration");
dSec = _.ceil(d);
dMin = _.round(dSec / 60);
return Div({
minWidth: "3em",
textAlign: "right",
color: Color.grey[500]
}).html(dSec < 60
? dSec + "s"
: dMin + "min");
};
})();
pages/group/member/timeline/list/row/_shared/stats/green/green.ls
(function(){
return function(e){
var c;
c = _.sumBy(e.levelEvents, "data.corrects");
return Div({
display: "flex",
padding: "0 0.2em",
color: Color.green[500]
}).html(c + "", SvgIcon({
svg: path("/lib/svg/shape/check.svg"),
color: Color.green[500],
size: "0.7em"
}).css({
marginLeft: "0.1em"
}));
};
})();
pages/group/member/timeline/list/row/_shared/stats/red/red.ls
(function(){
return function(e){
var m;
m = _.sumBy(e.levelEvents, "data.mistakes");
return Div({
display: "flex",
padding: "0 0.2em",
color: Color.red[500]
}).html(m + "", SvgIcon({
svg: path("/lib/svg/shape/cross.svg"),
color: Color.red[500],
size: "0.7em"
}).css({
marginLeft: "0.1em"
}));
};
})();
pages/group/member/timeline/list/row/_shared/stats/stats.ls
(function(){
return function(e){
return Div({
display: "flex",
padding: "0 0 0 0.4em",
alignSelf: "flex-end",
justifyContent: "flex-end"
}).html(inc("green/green")(e), inc("red/red")(e), inc("duration/duration")(e));
};
})();
pages/group/member/timeline/list/row/block/main/cover/addImage/add.ls
(function(){
return function(div, page, event){
var project, loadBlock, addImage;
project = event.blockPuid.split("/")[0];
if (!_.startsWith(project, "c-")) {
return;
}
loadBlock = function(){
return inc("/lib/util/loadBlock/load")({
puid: event.blockPuid,
onError: function(){},
onLoaded: function(b){
var that;
if (that = b.coverImage) {
return addImage(that);
}
}
});
};
addImage = function(ci){
return div.append(inc("/lib/gui/image/image")({
id: ci.id,
etag: ci.etag || "any",
fileFolder: "content/" + project + "/_images"
}).css({
width: "2.5em",
height: "2.5em",
backgroundColor: Color.grey[50],
border: "1px solid " + Color.grey[200]
}));
};
return loadBlock();
};
})();
pages/group/member/timeline/list/row/block/main/cover/cover.ls
(function(){
return function(page, event){
return Div({
flex: "0 0 auto",
display: "flex",
pointerEvents: "none",
width: "2.5em",
height: "2.5em",
background: Color.grey[50],
border: "1px solid " + Color.grey[200],
marginRight: "0.6em"
}).onScopeRender(function(){
return inc("addImage/add")(this, page, event);
});
};
})();
pages/group/member/timeline/list/row/block/main/main.ls
(function(){
return function(page, event){
var b;
return Div({
display: "flex",
alignSelf: "stretch",
padding: "0.8em 0.2em",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
marginTop: "-2px",
background: "white"
}).append(inc("cover/cover")(page, event), Div({
flex: "1 1 auto"
}).html(inc("title/title")(event), Div({
display: "flex",
fontSize: "0.8em",
paddingTop: "0.2em"
}).append(inc("plan/plan")(page, event), inc("../../_shared/stats/stats")(event))));
};
})();
pages/group/member/timeline/list/row/block/main/plan/plan.ls
(function(){
return function(page, event){
var p, pd;
p = event.blockPuid.split("/")[0];
pd = _.find(page.planDescriptions, {
project: p
});
return Div({
flex: "1 1 auto",
textAlign: "left",
color: Color.grey[600]
}).html((pd != null ? pd.displayName : void 8) || " ");
};
})();
pages/group/member/timeline/list/row/block/main/title/title.ls
(function(){
return function(e){
return Div({
marginRight: "2.5em",
textAlign: "left"
}).html(e.blockTitle || " ");
};
})();
pages/group/member/timeline/list/row/block/row.ls
(function(){
return function(page, event){
var levels;
return Div({
display: "flex",
flexDirection: "column"
}).append(inc("main/main")(page, event).tap(function(){
return levels.toggle();
}), levels = inc("../_shared/levels/levels")(page, event));
};
})();
pages/group/member/timeline/list/row/bottom/row.ls
(function(){
return function(page, event){
return Div({
minHeight: "2em"
});
};
})();
pages/group/member/timeline/list/row/day/row.ls
(function(){
return function(page, event){
var d;
d = inc("/lib/util/formatDate2/format")(event.created);
return Div({
display: "flex",
padding: "2.5em 0 1.2em",
textAlign: "center"
}).html(inc("../../../_shared/dayLabelDiv/div")().html(d.DD + ", " + d.formats.dateShort));
};
})();
pages/group/member/timeline/list/row/games/games/game/duration/duration.ls
(function(){
return function(e){
var duration, durationSec, durationMin;
duration = e.data.duration;
if (!duration) {
return;
}
durationSec = _.ceil(duration);
durationMin = _.round(durationSec / 60);
return Div({
fontSize: "0.8em",
padding: "0 0.2em 0 0.4em",
minWidth: "3em",
textAlign: "right",
color: Color.grey[500]
}).html(durationSec < 60
? durationSec + "s"
: durationMin + "min");
};
})();
pages/group/member/timeline/list/row/games/games/game/game.ls
(function(){
return function(page, event){
var gd, b;
gd = _.find(page.gameDescriptions, {
id: event.data.game
});
return Div({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[200],
background: "white",
minHeight: "3.2em",
paddingLeft: "0.7em",
marginLeft: "0.5em"
}).append(inc("image/image")(gd), inc("title/title")(gd), inc("duration/duration")(event));
};
})();
pages/group/member/timeline/list/row/games/games/game/image/image.ls
(function(){
return function(gd){
return inc("/lib/gui/image/image")({
id: gd.icon,
fileFolder: "media/gameIcons/_images"
}).css({
flex: "0 0 auto",
width: "2em",
height: "2em",
borderRadius: "50%",
border: "2px solid " + Color.grey[300]
});
};
})();
pages/group/member/timeline/list/row/games/games/game/title/title.ls
(function(){
return function(gd){
return Div({
flex: "1 1 auto",
textAlign: "left",
marginLeft: "0.5em"
}).html((gd != null ? gd.title : void 8) || " ");
};
})();
pages/group/member/timeline/list/row/games/games/games.ls
(function(){
return function(page, event){
var toggle, div;
toggle = function(){
var i, e;
if (event.expand) {
event.expand = false;
div.css({
paddingBottom: ""
}).empty();
} else {
event.expand = true;
div.css({
paddingBottom: "1.6em"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = event.gameEvents).length; i$ < len$; ++i$) {
i = i$;
e = ref$[i$];
results$.push(inc("game/game")(page, e, i));
}
return results$;
}()));
}
return requestAnimationFrame(page.list.repositionCurrentRows);
};
div = Div({
display: "flex",
flexDirection: "column",
alignItems: "stretch",
alignSelf: "stretch"
});
div.toggle = toggle;
return div;
};
})();
pages/group/member/timeline/list/row/games/main/icon/icon.ls
(function(){
return function(){
return Div({
flex: "0 0 auto",
display: "flex",
width: "2.5em",
height: "2.5em",
marginRight: "0.6em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/games.svg"),
color: Color.grey[600],
size: "1.4em"
}));
};
})();
pages/group/member/timeline/list/row/games/main/main.ls
(function(){
return function(page, event){
var b;
return Div({
display: "flex",
alignSelf: "stretch",
padding: "0.5em 0.2em",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
marginTop: "-2px",
background: "white"
}).append(inc("icon/icon")(), inc("title/title")(), inc("total/total")(event));
};
})();
pages/group/member/timeline/list/row/games/main/title/title.ls
(function(){
return function(e){
return Div({
flex: "1 1 auto",
marginRight: "2.5em",
textAlign: "left"
}).html(T("games"));
};
})();
pages/group/member/timeline/list/row/games/main/total/duration/duration.ls
(function(){
return function(event){
var d, dSec, dMin;
d = _.sumBy(event.levelEvents, "data.duration");
dSec = _.ceil(d);
dMin = _.round(dSec / 60);
return Div({
minWidth: "3em",
textAlign: "right",
color: Color.grey[500]
}).html(dSec < 60
? dSec + "s"
: dMin + "min");
};
})();
pages/group/member/timeline/list/row/games/main/total/total.ls
(function(){
return function(event){
var d, dSec, dMin;
d = _.sumBy(event.gameEvents, "data.duration");
dSec = _.ceil(d);
dMin = _.round(dSec / 60);
return Div({
minWidth: "3em",
textAlign: "right",
fontSize: "0.8em",
color: Color.grey[500],
paddingTop: "0.25em"
}).html(dSec < 60
? dSec + "s"
: dMin + "min");
};
})();
pages/group/member/timeline/list/row/games/row.ls
(function(){
return function(page, event){
var games;
return Div({
display: "flex",
flexDirection: "column"
}).append(inc("main/main")(page, event).tap(function(){
return games.toggle();
}), games = inc("games/games")(page, event));
};
})();
pages/group/member/timeline/list/row/groupJoin/row.ls
(function(){
return function(){
return Div({
display: "flex",
padding: "0 0 1.2em",
fontSize: "0.9em"
}).html(T("groupJoin"));
};
})();
pages/group/member/timeline/list/row/learnList/main/cover/cover.ls
(function(){
return function(info){
if (!info) {
return;
}
return inc("/../app01-learn-list/pages/_shared/calcLearnListCover/cover")(info).css({
fontSize: "0.61em",
margin: "0 0.6em 0 0"
});
};
})();
pages/group/member/timeline/list/row/learnList/main/learnList/learnList.ls
(function(){
return function(page, event){
return Div({
flex: "1 1 auto",
textAlign: "left",
color: Color.grey[600]
}).html(T("learnList"));
};
})();
pages/group/member/timeline/list/row/learnList/main/main.ls
(function(){
return function(page, event){
var info, b;
info = page.learnListInfos[event.listCode];
return Div({
display: "flex",
alignSelf: "stretch",
padding: "0.8em 0.2em",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
marginTop: "-2px",
background: "white"
}).append(inc("cover/cover")(info), Div({
flex: "1 1 auto"
}).html(inc("title/title")(info), Div({
display: "flex",
fontSize: "0.8em",
paddingTop: "0.2em"
}).append(inc("learnList/learnList")(), inc("../../_shared/stats/stats")(event))));
};
})();
pages/group/member/timeline/list/row/learnList/main/title/title.ls
(function(){
return function(info){
var title, that;
title = (that = info != null ? info.name : void 8)
? that
: T("deletedLearnList");
return Div({
marginRight: "2.5em",
textAlign: "left"
}).secureHtml(title);
};
})();
pages/group/member/timeline/list/row/learnList/row.ls
(function(){
return function(page, event){
var levels;
return Div({
display: "flex",
flexDirection: "column"
}).append(inc("main/main")(page, event).tap(function(){
return levels.toggle();
}), levels = inc("../_shared/levels/levels")(page, event));
};
})();
pages/group/member/timeline/list/row/outdatedEvents/row.ls
(function(){
return function(){
return Div({
display: "flex",
padding: "0 0 1.2em",
fontSize: "0.9em"
}).html("...");
};
})();
pages/group/member/timeline/list/row/pause/row.ls
(function(){
return function(page, event){
return Div({
display: "flex",
borderBottom: "1px solid " + Color.grey[200],
minHeight: "3.2em",
background: "white"
}).html(Div({
fontSize: "0.9em",
color: Color.grey[500]
}).html(T("pause")));
};
})();
pages/group/member/timeline/list/row/row.ls
(function(){
return function(page){
return function(data){
return Div().html(Div({
width: "35em",
maxWidth: "95%",
margin: "0 auto"
}).html(inc(data.event + "/row")(page, data)));
};
};
})();
pages/group/member/timeline/loadEvents/load.ls
(function(){
return function(page, onCompleted){
var publicId;
publicId = page.params.publicId;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/getUserTimelineEvents/getEvents"),
params: {
publicId: publicId,
groupCode: page.params.groupCode
},
onCompleted: function(result){
return onCompleted(result);
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onError: function(error){
page.spinner.hide();
return inc("/lib/gui/errorPopup/popup")();
}
});
};
})();
pages/group/member/timeline/noData/noData.ls
(function(){
return function(page){
var role, dateLabel;
role = page.memberDescription.role;
dateLabel = inc("/lib/util/formatDate2/format")(page.groupJoinDate, {
ensureDate: true
}).formats.dateShort;
return Div({
margin: "0 auto",
width: "30em",
maxWidth: "90%",
lineHeight: "1.5em"
}).html(role === "pupil"
? T("noDataPupil", dateLabel)
: T("noDataSelf", dateLabel));
};
})();
pages/group/member/timeline/page.ls
(function(){
return function(page){
page.memberDescription = inc("/data/group/getCachedMemberDescription/get")(page.params.groupCode, page.params.publicId);
page.groupDescription = inc("/data/group/calcGroupDescription/calc")();
page.planDescriptions = inc("/data/content/calcPlanDescriptions/calc")(true);
page.gameDescriptions = inc("/pages/games/00_shared/gameDescriptions/gameDescriptions")();
return {
navCategory: "groups",
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var loadEvents, calcData, create;
page.popupPrint = inc("_popupPrint/popup");
loadEvents = function(){
return inc("loadEvents/load")(page, calcData);
};
calcData = function(result){
return inc("calcData/calc")(page, result, create);
};
create = function(){
return page.html(page.listData.length > 0
? inc("list/list")(page)
: inc("noData/noData")(page));
};
if (page.memberDescription.isPreparedMember) {
return page.append(inc("../_prepared/prepared")(page));
} else {
page.append(page.spinner = inc("/lib/gui/spinner/spinner")());
return loadEvents();
}
}
};
};
})();
pages/group/noGroupFound/_t.ls
(function(){
return {
groups: {
de: "Gruppen",
en: "Groups",
fr: "Groupes",
es: "Grupos",
pt: "Grupos"
},
createNewGroup: {
de: "Neue Gruppe erstellen",
en: "Create new group",
fr: "Créer un groupe",
es: "Crear nuevo grupo",
pt: "Criar novo grupo"
},
createFamilyGroup: {
de: "Familiengruppe erstellen",
en: "Create family group",
fr: "Créer un groupe familial",
es: "Crear grupo famliliar",
pt: "Criar grupo familiar"
},
joinGroupWithCode: {
de: "Gruppe beitreten mit Code",
en: "Join group with code",
fr: "Rejoindre un groupe",
es: "Unirse a un grupo con clave",
pt: "Entrar no grupo com código"
},
pleaseLoginToSeeGroups: {
de: "Bitte melde dich als Nutzer an, um hier deine Gruppen sehen zu können.",
en: "Please log in to see your groups.",
fr: "Tu dois te connecter pour voir tes groupes.",
es: "Regístrate para poder ver tus grupos.",
pt: "Por favor, faça seu login para poder ver seus grupos."
},
notGroupMemberTeacher: {
de: "Du bist noch nicht Mitglied einer Gruppe.",
en: "You are not a member of a group yet.",
fr: "Tu n'es pas encore membre d'un groupe.",
es: "Aún no eres miembro de ningún grupo.",
pt: "Você ainda não é membro de nenhum grupo."
},
hint: {
de: "Tipp: Du kannst ANTON im Browser auf www.anton.app nutzen oder dir die App im Apple App Store, Google Play Store oder Amazon App Store herunterladen.",
en: "Tip: ANTON works on all devices. Open www.anton.app in your browser or download ANTON from the Apple App Store, Google Play Store or Amazon App Store.",
fr: "À noter : ANTON est disponible sur tous les appareils. Ouvre www.anton.app dans ton navigateur ou télécharge ANTON depuis l’Apple App Store, le Google Play Store ou l’Amazon App Store.",
es: "Nota: ANTON funciona en todos los dispositivos. Puedes usar ANTON en tu navegador en: www.anton.app y también puedes bajar ANTON app en el App Store de Apple, Google Play o Amazon compras.",
pt: "Dica: ANTON funciona em todos os dispositivos. Abra ANTON no seu navegador em www.anton.app ou baixe o aplicativo do ANTON no App Store da Apple, no Google Play Store ou no Amazon Appstore."
},
notGroupMemberPupil: {
de: "Du bist noch nicht Mitglied einer Gruppe.
Bitte frage deine Lehrkraft nach deinem Schüler-Code.",
en_gb: "You are not a member of a group yet.
ANTON is free for teachers and school classes. Your teacher can create a group for your class, assign exercises and more.",
en: "You are not a member of a group yet.
ANTON is free for teachers and school classes. With ANTON your teacher can create a group for your class, assign tasks and more.",
fr: "Tu n'es pas encore membre d'un groupe.
ANTON est gratuit pour les professeures et leurs classes. Ton·Ta professeur·e peut créer un groupe pour ta classe, sélectionner des exercices et utiliser d’autres options.",
es: "Aún no eres miembro de ningún grupo.
Los y las docentes pueden usar ANTON en clase de forma gratuita. Tu docente puede crear un grupo para tu clase, asignar ejercicios y hacer uso de varias funciones más.",
pt: "Você ainda não é membro de nenhum grupo.
ANTON é gratuito para professores e turmas escolares. Seu/sua professor(a) pode criar um grupo para sua turma, atribuir exercícios, entre outras funções."
}
};
})();
pages/group/noGroupFound/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
title: T("groups")
});
};
})();
pages/group/noGroupFound/buttonCreateGroup/button.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/group/group/other/createGroup/01_name/page"),
animation: "slideUp"
});
};
return Button(T("createNewGroup")).css({
margin: "1em 0.5em 0"
}).tap(click);
};
})();
pages/group/noGroupFound/buttonFamilyGroup/button.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/group/group/other/familyGroupCreate/page"),
animation: "slideUp"
});
};
return Button(T("createFamilyGroup")).css({
margin: "1em 0.5em 0"
}).tap(tap);
};
})();
pages/group/noGroupFound/buttonJoinGroup/button.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/group/group/other/joinGroupWithCode/01_code/page"),
animation: "slideUp"
});
};
return Button(T("joinGroupWithCode")).css({
margin: "1em 0.5em 0"
}).tap(click);
};
})();
pages/group/noGroupFound/icon/icon.ls
(function(){
return function(){
return Div().append(SvgIcon({
svg: path("/lib/svg/shape/group.svg"),
color: Color.grey[400]
}).css({
width: "5em",
height: "5em"
}));
};
})();
pages/group/noGroupFound/page.ls
(function(){
return function(page){
return {
navCategory: "groups",
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("/pages/group/_urlDescription/description")();
},
start: function(){
var d;
d = inc("/data/user/calcUserDescription/calc")();
return page.css({
margin: "1em 0"
}).append(inc("icon/icon")(), inc("text/text")(), Div({
margin: "0.5em auto 1.6em",
maxWidth: "30em"
}).append(inc("/data/user/isTeacher/get")() ? inc("buttonCreateGroup/button")() : void 8, window.log != null && !d.hasAntonPlusHidden ? inc("buttonFamilyGroup/button")() : void 8, window.log != null ? inc("buttonJoinGroup/button")() : void 8), inc("text2/text")());
}
};
};
})();
pages/group/noGroupFound/text/text.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "95%",
lineHeight: "1.5em",
margin: "0 auto"
}).html(!window.log
? T("pleaseLoginToSeeGroups")
: inc("/data/user/isTeacher/get")()
? T("notGroupMemberTeacher")
: T("notGroupMemberPupil"));
};
})();
pages/group/noGroupFound/text2/text.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "95%",
lineHeight: "1.5em",
margin: "0 auto"
}).html(T("hint"));
};
})();
pages/learnBeta/loadingPage/_topbar/topbar.ls
(function(){
return function(page){
var topbar;
topbar = inc("/addons/topbar2/topbar")({
title: " ",
tabMenuItems: function(){
({
label: "Placeholder1 ",
selected: false
});
return {
label: "Placeholder2",
selected: false
};
}
});
topbar.findFirst(".tabMenu").css({
opacity: 0.3
});
return topbar;
};
})();
pages/learnBeta/loadingPage/page.ls
(function(){
return function(page){
return {
navCategory: "learnBeta",
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/loadProject/load")("app01-learn-beta", function(){
var ref$;
if ((ref$ = projects.info()["app01-learn-beta"]) != null && ref$.isLoaded) {
return inc("/../app01-learn-beta/start/start")({
history: 0
});
} else {
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
}
};
};
})();
pages/learnBeta/start.ls
(function(){
return function(p){
var ref$;
p == null && (p = {});
if ((ref$ = projects.info()["app01-learn-beta"]) != null && ref$.isLoaded) {
return inc("/../app01-learn-beta/start/start")({
history: 0
});
} else {
return startPage({
path: path("loadingPage/page")
});
}
};
})();
pages/learnList/start.ls
(function(){
return function(p){
return inc("/../app01-learn-list/start/start")(p);
};
})();
pages/level/_shared/_t.ls
(function(){
return {
learn: {
de: "Lernen",
en: "Learn",
fr: "Apprendre",
es: "Aprender",
pt: "Aprender"
},
solveTheExercise: {
de: "Löse die Aufgaben",
en: "Solve the exercises",
fr: "Fais les exercices",
es: "Resuelve los ejercicios",
pt: "Resolva os exercícios"
},
learnOnlineWithFunForFree: {
de: "$1 - Lerne online mit Spaß, kostenlos und ohne Werbung!",
en_gb: "$1 - Learn online and have fun, for free and no ads!",
en: "$1 - Learn online with fun, for free and no ads!",
fr: "$1 - Apprends en ligne en t'amusant, gratuitement et sans publicité !",
es: "$1 - ¡Aprende en línea divirtiéndote, gratis y sin publicidad!",
pt: "$1 - Aprenda online e se divertindo, de graça e sem anúncios!"
},
exercise2: {
de: "Übung - $1",
en: "Lesson - $1",
fr: "Exercice - $1",
es: "Ejercicios - $1",
pt: "Exercícios - $1"
},
exercise: {
de: "Übung",
en: "Lesson",
fr: "Exercice",
es: "Ejercicio",
pt: "Exercício"
},
restartOnline: {
de: "Bitte starte deine ANTON-App online neu, um diese Lerninhalte sehen zu können.",
en: "Please restart the ANTON app online in order to access the learning material.",
fr: "Tu dois être en ligne et redémarrer l'application ANTON pour accéder au contenu.",
es: "Por favor, conéctate y reinicia ANTON para poder ver este contenido.",
pt: "Por favor, conecte-se e reinicie seu aplicativo ANTON para poder ver este conteúdo."
},
learnUrl: {
de: "lernen",
en: "learn",
fr: "apprendre",
es: "aprender",
pt: "aprender"
}
};
})();
pages/level/_shared/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: T("learnUrl"),
title: T("learn"),
metaDescription: ""
};
};
})();
pages/level/_shared/_urlDescriptionWithLevel/calcBreadcrumbs/calc.ls
(function(){
return function(page, pageUrl){
var p, breadcrumbs, t;
if (!page.level || !page.planDescription) {
return;
}
p = page.planDescription;
return breadcrumbs = [
{
name: p.displayName,
pageUrl: p.pageUrl
}, {
name: t = page.level.parentTopic.title,
pageUrl: p.pageUrl,
pageAnchor: t ? _.replaceAll(t, " ", "-").toLowerCase() : void 8
}, {
name: page.level.parentBlock.title,
pageUrl: inc("/data/content/calcBlockPageUrl/calc")(page.level.parentBlock.path)
}
];
};
})();
pages/level/_shared/_urlDescriptionWithLevel/calcMetaDescription/calc.ls
(function(){
return function(page){
var i, ref$;
if (!page.level) {
return "";
}
i = ((ref$ = page.level.trainers[0]) != null ? ref$.instruction : void 8) || page.level.instruction;
i = _.isString(i)
? i
: (i != null ? i.text : void 8) != null
? i.text
: (i != null ? i.sound : void 8) != null
? i.sound
: T("solveTheExercise");
return T("learnOnlineWithFunForFree", i);
};
})();
pages/level/_shared/_urlDescriptionWithLevel/calcTitle/calc.ls
(function(){
return function(page){
var title;
title = page.level != null
? T("exercise2", page.level.title)
: T("exercise");
title = inc("/lib/util/removeHtmlTags/remove")(title);
return title;
};
})();
pages/level/_shared/_urlDescriptionWithLevel/description.ls
(function(){
return function(page){
var pageUrl;
if (page.params.context === "idePreview") {
return;
}
return {
pageUrl: pageUrl = inc("/data/content/calcLevelPageUrl/calc")(page.params.levelPath),
title: inc("calcTitle/calc")(page),
metaDescription: inc("calcMetaDescription/calc")(page),
breadcrumbs: inc("calcBreadcrumbs/calc")(page, pageUrl),
pageReady: page.level != null
};
};
})();
pages/level/_shared/checkMinLevelPlayerVersion/check.ls
(function(){
return function(o){
var levelVersion, levelPlayerVersion;
levelVersion = o.level.minLevelPlayerVersion;
if (levelVersion == null) {
return false;
}
if (!(typeof levelVersion.match == 'function' && levelVersion.match(/^v[1-9][0-9]*\.[0-9]$/))) {
debug("Warning: wrong format for minLevelPlayerVersion (must be something like \"v1.0\" or \"v12.3\")");
return false;
}
levelPlayerVersion = inc("/../app01-trainers/_levelPlayerVersion/version")();
if (levelVersion > levelPlayerVersion) {
log.log({
event: "debugLevelPlayerVersionAbort",
levelVersion: levelVersion,
playerVersion: levelPlayerVersion,
levelPath: o.level.path
});
inc("/lib/gui/errorPopup/popup")({
label: inc("label/label")(o.level, levelPlayerVersion),
onClose: o.afterWarning
});
return true;
}
return false;
};
})();
pages/level/_shared/checkMinLevelPlayerVersion/label/label.ls
(function(){
return function(level, levelPlayerVersion){
return Div().append(T("restartOnline"), engine.isDebug ? Div({
fontSize: "0.7em",
color: Color.grey[500]
}).html(" Debug: levelVersion: " + level.minLevelPlayerVersion + " playerVersion: " + levelPlayerVersion + "") : void 8);
};
})();
pages/level/_shared/generateSlides/generate.ls
(function(){
return function(level){
var slides, i$, ref$, len$, trainer, t, path, slides2;
slides = [];
for (i$ = 0, len$ = (ref$ = _.ensureArray(level.trainers)).length; i$ < len$; ++i$) {
trainer = ref$[i$];
t = trainer.trainer;
path = "/../" + (_.startsWith(t, "kid")
? "app01-kid-trainers/trainers/" + t
: _.startsWith(t, "playground")
? "app01-playground-trainers/trainers/" + t.replace("playground/", "")
: "app01-trainers/trainers/" + t) + "/generateSlides";
slides2 = inc(path)(trainer, level);
slides = slides.concat(slides2);
}
return level.slides = slides;
};
})();
pages/level/_shared/loadMediaFiles/load.ls
(function(){
return function(p){
var slides, totalDone, errors, trainersWithReviewSounds, loadSlides, onSlideDone, finish;
slides = p.level.slides;
totalDone = 0;
errors = [];
trainersWithReviewSounds = app.ide || engine.isBotMode
? []
: ["soundButtons", "dragMatch", "dragGroup"];
loadSlides = function(){
var i$, ref$, len$, s, skipSounds, results$ = [];
for (i$ = 0, len$ = (ref$ = slides).length; i$ < len$; ++i$) {
s = ref$[i$];
skipSounds = !in$(s.trainerParams.trainer, trainersWithReviewSounds);
results$.push(s.loadMediaFiles({
onDone: onSlideDone,
onError: onSlideDone,
skipSounds: skipSounds
}));
}
return results$;
};
onSlideDone = function(slideErrors){
if (slideErrors) {
errors = _.concat(errors, slideErrors);
}
totalDone++;
if (totalDone === slides.length) {
return finish();
}
};
finish = function(){
if (errors.length > 0) {
return p.onError(errors);
} else {
return p.onLoaded(p.level);
}
};
return loadSlides();
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/level/_shared/loadPlaygroundProject/calcBranch/calc.ls
(function(){
return function(p){
var c;
c = helpers.resolveProject(p);
if (c.branch === "master") {
return "develop_ide";
} else {
return c.branch + "_ide";
}
};
})();
pages/level/_shared/loadPlaygroundProject/hasPlaygroundLevel/has.ls
(function(){
return function(levels){
var i$, len$, level, j$, ref$, len1$, t;
for (i$ = 0, len$ = levels.length; i$ < len$; ++i$) {
level = levels[i$];
for (j$ = 0, len1$ = (ref$ = level.trainers).length; j$ < len1$; ++j$) {
t = ref$[j$];
if (_.startsWith(t.trainer, "playground")) {
return true;
}
}
}
return false;
};
})();
pages/level/_shared/loadPlaygroundProject/load.ls
(function(){
return function(levels, onDone){
var hasPlaygroundLevel, p;
levels = _.ensureArray(levels);
hasPlaygroundLevel = inc("hasPlaygroundLevel/has")(levels);
p = "app01-playground-trainers";
if (!hasPlaygroundLevel) {
return onDone();
} else {
return inc("/lib/util/loadProjects/load")({
projectDescriptions: [{
project: p,
branch: inc("calcBranch/calc")(p),
timeout: "12,7"
}],
logResults: false,
onDone: onDone,
onProjectMissingError: function(r){
return debug("playground error", r);
}
});
}
};
})();
pages/level/_t.ls
(function(){
return {
myResults: {
de: "Meine Ergebnisse",
en: "My results",
fr: "Mes réponses",
es: "Mis resultados",
pt: "Meus resultados"
},
preview: {
de: "Vorschau",
en: "Preview",
fr: "Aperçu",
es: "Vista previa",
pt: "Pré-visualização"
}
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/_preloadMedia/loadImage/load.ls
(function(){
return function(media){
return inc("/lib/util/downloadContentFile/download")({
fileFolder: "media/afterFinish",
fileId: twitch({
de: "image/solocode_advent-calendar-white-de",
en: "image/solocode_advent-calendar-white-en",
fr: "image/solocode_advent-calendar-white-fr",
es: "image/solocode_advent-calendar-brown-es",
pt: "image/solocode_advent-calendar-brown-pt",
'default': "image/solocode_advent-calendar-white-en"
}),
etag: "any",
returnFileContent: true,
onError: function(){},
onLoaded: function(base64){
return media.image = base64;
}
});
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/_preloadMedia/preloadMedia.ls
(function(){
var media;
media = {
init: false,
isReady: function(){
return media.image != null;
}
};
return function(){
if (media.init === false) {
inc("loadImage/load")(media);
media.init = true;
}
return media;
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/_t.ls
(function(){
return {
adventCalendar: {
de: "ANTON-Adventskalender",
en: "ANTON Advent Calendar",
fr: "Le calendrier de l'Avent ANTON",
es: "Calendario de adviento ANTON",
pt: "Calendário do Advento ANTON"
},
adventCalendarText1: {
de: "Du kannst bis Weihnachten jeden Tag ein Türchen des Adventskalenders öffnen und tolle Geschenke bekommen, wenn du drei Übungen erledigt hast.
Dir ((fehlt nur noch eine Übung | fehlen nur noch $1 Übungen))!",
en_gb: "In the run up to Christmas, you can open one door of the advent calendar every day to receive amazing gifts. You have to complete at least three exercises to receive your gift.
You have ((one more exercise | $1 more exercises)) to complete!",
en: "Until Christmas you can open one door of the advent calendar every day and get amazing gifts, as long as you have completed at least three exercises.
You have ((one more exercise | $1 more exercises)) to complete!",
fr: "Jusqu'à Noël, tu peux ouvrir une porte du calendrier chaque jour et gagner des cadeaux, si tu as fait au moins trois exercices.
Tu dois encore faire ((un exercice | $1 autres exercices)) !",
es: "¡Todos los días puedes abrir una puerta y recibir increíbles regalos hasta Nochebuena! Siempre y cuando resuelvas, por lo menos, tres ejercicios.
¡Resuelve ((un ejercicio más | $1 ejercicios más))! ",
pt: "Todos os dias até o Natal, você pode abrir uma janelinha do Calendário do Advento e ganhar ótimos presentes. Para isso, você deve resolver pelo menos três exercícios.
Resolva ((mais um exercício | mais $1 exercícios))!"
},
adventCalendarText2: {
de: "Du hast heute schon deine drei Übungen erledigt und kannst jetzt ein Türchen des Adventskalenders öffnen!",
en_gb: "You have completed three exercises today so you may now open a door on the advent calendar!",
en: "You have completed at least three exercises today and may now open a door on the advent calendar!",
fr: "Tu as déjà fait tes trois exercices aujourd'hui. Tu peux ouvrir une porte du calendrier de l'Avent !",
es: "¡Resolviste tres ejercicios el día de hoy y puedes abrir una de las puertas del calendario de adviento!",
pt: "Você já resolveu seus três exercícios de hoje e já pode abrir uma das janelinhas do calendário do Advento!"
},
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Plus tard",
es: "Más tarde",
pt: "Agora não"
},
openAdventCalendar: {
de: "Zum Adventkalender",
en: "Show Advent Calendar",
fr: "Voir le calendrier",
es: "Ir al calendario",
pt: "Ir para o Calendário do Advento"
}
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/_waitForMedia/wait.ls
(function(){
return function(page){
if (!page.media.isReady()) {
return setTimeout(function(){
if (app.currentPage === page) {
return page.pageCode.start();
}
}, 100);
}
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/button/button.ls
(function(){
return function(totalLevelsToday, mode){
var div;
if (totalLevelsToday < 3) {
return Button(T("continueButton")).tap(function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
});
} else {
div = Button(T("openAdventCalendar"));
return div.tap(function(){
var overlay;
div.css({
pointerEvents: "none"
});
overlay = inc("/lib/gui/spinnerOverlay/overlay")();
return inc("/lib/util/loadProjects/load")({
projectDescriptions: [
{
project: "app01-advent-calendar"
}, {
project: "app01-avatar"
}
],
onDone: function(doneProjects, projectsByStatus){
var that, i;
if (that = projectsByStatus != null ? projectsByStatus.timeout : void 8) {
deviceLog.log({
event: "deviceDebugAdventProjectTimeout",
timeout: that
});
}
overlay.close();
i = projects.info()["app01-advent-calendar"];
if (i.branch === "master" && i.version < 43) {
return inc("/lib/offline/offlinePopup/popup")();
} else {
return log.sync(function(error){
if (mode === "preview") {
debug("Advent calendar preview mode: Displaying advent calendar for debug users during november already.");
}
return startPage({
path: path("/../app01-advent-calendar/page/overview/page"),
history: function(path){
return _.includes(path, "/level/play");
},
animation: "slideUp"
});
});
}
},
onProjectMissingError: function(){
overlay.close();
div.css({
pointerEvents: ""
});
return inc("/lib/offline/offlinePopup/popup")();
}
});
});
}
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/image/image.ls
(function(){
return function(page){
return inc("/lib/gui/image/image")({
base64: page.media.image
}).css({
width: 8 * 1.5 + "em",
height: 8 * 1.5 + "em",
margin: "1em 0"
});
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/link/link.ls
(function(){
return function(totalLevelsToday){
if (totalLevelsToday < 3) {
return;
}
return inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: "black"
}).css({
marginTop: "0.8em",
padding: "0.5em"
}).tap(function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
});
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/page.ls
(function(){
return function(page){
page.media = inc("_preloadMedia/preloadMedia")();
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var d, previewMode, mode, todoLevelsToday, totalLevelsToday;
if (inc("_waitForMedia/wait")(page)) {
return;
}
d = inc("/lib/util/formatDate2/format")();
previewMode = engine.isDebug && d.m === 11;
mode = previewMode ? "preview" : "live";
todoLevelsToday = page.params.todoLevelsToday;
totalLevelsToday = page.params.totalLevelsToday;
log.log({
event: "showPromoAdventCalendar",
year: d.Y,
mode: mode,
todoLevelsToday: todoLevelsToday
});
return page.css({
lineHeight: "1.5em",
maxWidth: "90%",
width: "35em",
margin: "0 auto"
}).append(inc("title/title")(), inc("image/image")(page), inc("text/text")(totalLevelsToday), inc("button/button")(totalLevelsToday, mode), " ", inc("link/link")(totalLevelsToday));
}
};
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/text/text.ls
(function(){
return function(totalLevelsToday){
var totalLevelsTodo;
totalLevelsTodo = 3 - totalLevelsToday;
return Div({
paddingBottom: "1.5em",
lineHeight: "1.5em",
margin: "0 auto",
maxWidth: "90%",
width: "30em"
}).html(totalLevelsToday < 3
? T("adventCalendarText1", totalLevelsTodo)
: T("adventCalendarText2"));
};
})();
pages/level/afterFinish/pages/adventCalendarPromo/title/title.ls
(function(){
return function(){
return Div().html(T("adventCalendar"));
};
})();
pages/level/afterFinish/pages/antonPlus/_shared/calcTestVariantSound/calc.ls
(function(){
return function(){
return inc("/lib/util/calcTestVariant/calc")({
testName: "afterFinishSound2",
testVariants: ["enabled", "disabled"]
});
};
})();
pages/level/afterFinish/pages/antonPlus/_shared/playSound/play.ls
(function(){
return function(page){
var ref$;
if (page.testVariantSound === "enabled" && !_.includes(app.lastPagePath, "static/antonPlus")) {
return (ref$ = page.media.sound) != null ? ref$.play() : void 8;
}
};
})();
pages/level/afterFinish/pages/antonPlus/_shared/waitForMedia/wait.ls
(function(){
return function(page){
if (!page.media.isReady()) {
return setTimeout(function(){
if (app.currentPage === page) {
return page.pageCode.start();
}
}, 100);
}
};
})();
pages/level/afterFinish/pages/antonPlus/_t.ls
(function(){
return {
moreAboutAntonPlus: {
de: "Mehr zu ANTON-Plus",
en: "More about ANTON Plus",
fr: "En savoir plus sur ANTON-Plus",
es: "Más sobre ANTON-Plus",
pt: "Mais sobre ANTON-Plus"
},
moreAboutAntonPlusFamily: {
de: "Mehr zu ANTON-Plus Familie",
en: "More about ANTON Plus Family",
fr: "En savoir plus sur ANTON-Plus Famille",
es: "Más sobre ANTON-Plus Familia",
pt: "Mais sobre ANTON-Plus Família"
},
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
}
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/_preloadMedia/loadSound/load.ls
(function(){
return function(media){
return inc("/lib/util/downloadSound/download")({
text: T("soundText"),
voiceLang: engine.guiLanguage === "de" ? "de" : "en",
voice: engine.guiLanguage === "de" ? "m3" : "m5Us",
fileFolder: "media/afterFinish",
etag: "any",
onError: function(){
return media.aborted = true;
},
onOffline: function(){
return media.aborted = true;
},
onLoaded: function(sound){
return media.sound = sound;
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/_preloadMedia/preloadMedia.ls
(function(){
var media;
media = {
init: false,
aborted: false,
isReady: function(){
return media.sound != null;
},
clear: function(){
media.init = false;
return media.sound = undefined;
}
};
return function(){
if (!media.init || media.aborted) {
media.init = true;
media.aborted = false;
inc("loadSound/load")(media);
}
return media;
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/_t.ls
(function(){
return {
title: {
de: "Kennst du schon ANTON-Plus?",
en: "Have you heard about ANTON Plus?",
fr: "Tu connais ANTON-Plus ?",
es: "¿Ya conces ANTON-Plus?",
pt: "Você já conhece ANTON-Plus?"
},
text1: {
de: "Damit kannst du offline lernen, deinen Avatar besser gestalten und du unterstützt die Weiterentwicklung von ANTON.",
en: "It allows you to learn offline, improve your avatar design and support the further development of ANTON!",
fr: "Ça te permet d'apprendre hors ligne, de changer le design de ton avatar et d'aider ANTON à s'améliorer encore !",
es: "¡Te permite seguir aprendiendo sin conexión, mejorar el diseño de tu avatar y contribuir a que ANTON siga desarrollándose!",
pt: "Isso permitirá que você continue aprendendo offline, melhore o design do seu Avatar e contribua para que ANTON continue se desenvolvendo!"
},
soundText: {
de: "ssml:Kennst Du schon ANTON-Plus?Damit kannst du offline lernen, deinen Avatar besser gestalten und du unterstützt die Weiterentwicklung von ANTON!",
en: "ssml:Have you heard about ANTON Plus?It allows you to learn offline, improve your avatar design and support the further development of ANTON!",
fr: "ssml:Tu connais ANTON-Plus ?Ça te permet d'apprendre hors ligne, de changer le design de ton avatar et d'aider ANTON à s'améliorer encore !",
es: "ssml:¿ya conoces ANTON-Plus?¡Te permite seguir aprendiendo sin conexión , mejorar el diseño de tu avatar y contribuir a que ANTON siga desarrollándose!",
pt: "ssml:Você já conhece ANTON-Plus?Ele permite que você continue aprendendo mesmo sem conexão, melhore estilo do seu Avatar e contribua para que ANTON continue se desenvolvendo!"
}
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/button/button.ls
(function(){
return function(){
return Button(T("moreAboutAntonPlus")).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish1_click"
});
return startPage({
path: path("/pages/static/antonPlus/1_products/page"),
animation: "slideUp",
params: {
referrer: "afterFinishAntonPlus1"
}
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
width: "5em",
height: "5em"
}).css({
margin: "2em"
});
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/link/link.ls
(function(){
return function(){
return inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: "black"
}).css({
marginTop: "1em",
padding: "0.5em"
}).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish1_skip"
});
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/logPromo/log.ls
(function(){
return function(page){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish1",
isReferrer: true,
isBack: _.includes(app.lastPagePath, "static/antonPlus"),
details: {
testVariantAfterFinishSound2: page.testVariantSound
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/page.ls
(function(){
return function(page){
page.media = inc("_preloadMedia/preloadMedia")();
page.testVariantSound = inc("../_shared/calcTestVariantSound/calc")();
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
finish: function(){
return page.media.clear();
},
start: function(){
if (inc("../_shared/waitForMedia/wait")(page)) {
return;
}
inc("logPromo/log")(page);
page.css({
lineHeight: "1.5em",
maxWidth: "90%",
width: "35em",
margin: "0 auto"
}).append(inc("title/title")(), inc("icon/icon")(), inc("text1/text1")(), inc("button/button")(), " ", inc("link/link")());
return inc("../_shared/playSound/play")(page);
}
};
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/text1/text1.ls
(function(){
return function(){
return Div().css({
paddingBottom: "2em",
maxWidth: "30em",
lineHeight: "1.5em",
margin: "0 auto"
}).html(T("text1"));
};
})();
pages/level/afterFinish/pages/antonPlus/page1Intro/title/title.ls
(function(){
return function(){
return Div().html(T("title"));
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/_preloadMedia/loadImage/load.ls
(function(){
return function(media){
return inc("/lib/util/downloadContentFile/download")({
fileId: "image/lorenz_antonPlusAvatarGallery1",
fileFolder: "media/afterFinish",
etag: "5b8c-122025",
returnFileContent: true,
onError: function(){
return media.abort = true;
},
onLoaded: function(base64){
return media.image = base64;
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/_preloadMedia/loadSound/load.ls
(function(){
return function(media){
return inc("/lib/util/downloadSound/download")({
text: T("soundText"),
voiceLang: engine.guiLanguage === "de" ? "de" : "en",
voice: engine.guiLanguage === "de" ? "m3" : "m5Us",
fileFolder: "media/afterFinish",
etag: "any",
onError: function(){
return media.abort = true;
},
onOffline: function(){
return media.abort = true;
},
onLoaded: function(sound){
return media.sound = sound;
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/_preloadMedia/preloadMedia.ls
(function(){
var media;
media = {
init: false,
aborted: false,
isReady: function(){
return media.sound != null && media.image != null;
},
clear: function(){
media.init = false;
media.sound = undefined;
return media.image = undefined;
}
};
return function(){
if (!media.init || media.aborted) {
media.init = true;
media.aborted = false;
inc("loadSound/load")(media);
inc("loadImage/load")(media);
}
return media;
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/_t.ls
(function(){
return {
title: {
de: "Übrigens, mit ANTON-Plus kannst du deinen Avatar aus 32 Tieren und 16 Robotern auswählen!",
en: "With ANTON Plus you can choose from 32 animals and 16 robots for your avatar!",
fr: "Avec ANTON-Plus, tu peux choisir ton avatar parmi 32 animaux et 16 robots !",
es: "¡Con ANTON-Plus puedes escoger entre 32 animales y 16 robots para tu avatar!",
pt: "A propósito, com ANTON-Plus você pode escolher entre 32 animais e 16 robôs para seu avatar!"
},
text1: {
de: "Außerdem ermöglicht dein ANTON-Plus-Beitrag die Weiterentwicklung von ANTON.",
en: "Moreover, your ANTON Plus contribution supports the further development of ANTON!",
fr: "De plus, ta contribution te permet de participer au développement d'ANTON !",
es: "Además, con ANTON-Plus contribuyes a que ANTON se siga desarrollando.",
pt: "Além disso, com ANTON-Plus você contribui para que ANTON continue se desenvolvendo!"
},
soundText: {
de: "ssml:\n\nÜbrigens.\n\nMit ANTON-Plus kannst Du deinen Avatar aus \n32 Tieren und 16 Robotern auswählen!\n\nAußerdem ermöglicht dein ANTON-Plus-Beitrag \ndie Weiterentwicklung von ANTON!",
en: "ssml:\n\nBy the way.\n\nWith ANTON Plus you can choose from 32 animals and 16 robots for your avatar!\n\nMoreover, your ANTON Plus contribution supports the further development of ANTON! ",
fr: "ssml:\nAvec ANTON-Plus, tu peux choisir ton avatar parmi 32 animaux et 16 robots !\n\nDe plus, ta contribution te permet de participer au développement d'ANTON ! ",
es: "ssml:\nPor cierto,\n\n¡Con ANTON-Plus puedes escoger entre 32 animales y 16 robots para tu avatar!\n\nAdemás, con tu aportación contribuyes a que ANTON se siga desarrollando.",
pt: "ssml:\nA propósito.\n\nCom ANTON-Plus você pode escolher entre 32 animais e 16 robôs para seu \navatar!\n\nAlém disso, sua contribuição com ANTON-Plus possibilita que ANTON continue se desenvolvendo!"
}
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/button/button.ls
(function(){
return function(){
return Button(T("moreAboutAntonPlus")).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish2Avatars_click"
});
return startPage({
path: path("/pages/static/antonPlus/1_products/page"),
animation: "slideUp",
params: {
referrer: "afterFinishAntonPlus2"
}
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/image/image.ls
(function(){
return function(page){
return inc("/lib/gui/image/image")({
base64: page.media.image
}).css({
width: 8 * 1.5 + "em",
height: 7 * 1.5 + "em",
margin: "1em 0"
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/link/link.ls
(function(){
return function(){
return inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: "black"
}).css({
marginTop: "0.8em",
padding: "0.5em"
}).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish1_skip"
});
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/logPromo/log.ls
(function(){
return function(page){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish2Avatars",
isReferrer: true,
isBack: _.includes(app.lastPagePath, "static/antonPlus"),
details: {
testVariantAfterFinishSound2: page.testVariantSound
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/page.ls
(function(){
return function(page){
page.media = inc("_preloadMedia/preloadMedia")();
page.testVariantSound = inc("../_shared/calcTestVariantSound/calc")();
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
finish: function(){
return page.media.clear();
},
start: function(){
if (inc("../_shared/waitForMedia/wait")(page)) {
return;
}
inc("logPromo/log")(page);
page.css({
lineHeight: "1.5em",
maxWidth: "90%",
width: "35em",
margin: "0 auto"
}).append(inc("title/title")(), inc("image/image")(page), inc("text1/text1")(), inc("button/button")(), " ", inc("link/link")());
return inc("../_shared/playSound/play")(page);
}
};
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/text1/text1.ls
(function(){
return function(){
return Div().css({
paddingBottom: "1.5em"
}).html(T("text1"));
};
})();
pages/level/afterFinish/pages/antonPlus/page2Avatars/title/title.ls
(function(){
return function(){
return Div().html(T("title"));
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/_preloadMedia/loadSound/load.ls
(function(){
return function(media){
return inc("/lib/util/downloadSound/download")({
text: T("soundText"),
voiceLang: engine.guiLanguage === "de" ? "de" : "en",
voice: engine.guiLanguage === "de" ? "m3" : "m5Us",
fileFolder: "media/afterFinish",
etag: "any",
onError: function(){
return media.abort = true;
},
onOffline: function(){
return media.abort = true;
},
onLoaded: function(sound){
return media.sound = sound;
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/_preloadMedia/preloadMedia.ls
(function(){
var media;
media = {
init: false,
aborted: false,
isReady: function(){
return media.sound != null;
},
clear: function(){
media.init = false;
return media.sound = undefined;
}
};
return function(){
if (!media.init || media.aborted) {
media.init = true;
media.aborted = false;
inc("loadSound/load")(media);
}
return media;
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/_t.ls
(function(){
return {
title: {
de: "Übrigens, es gibt nun neu: ANTON-Plus Familie",
en: "By the way we now offer ANTON Plus Family",
fr: "Nous proposons maintenant ANTON-Plus Famille",
es: "Te proponemos adquirir ANTON-Plus Familia",
pt: "Sugerimos que adquira ANTON-Plus Família"
},
text1: {
de: "Erstelle eine Familiengruppe mit bis zu 5 Mitgliedern, von denen alle ANTON-Plus erhalten. Du kannst dort Aufgaben pinnen und die Münzen und Spiele kontrollieren.",
en: "Create a family group with up to 5 members where everyone receives ANTON Plus. You will be able to pin learning material for your children and restrict access to coins and games.",
fr: "Crée un groupe familial comptant jusqu'à 5 membres qui bénéficient tous d'ANTON-Plus. Tu pourras épingler du contenu pour tes enfants et réguler l'accès aux pièces et aux jeux.",
es: "Crea un grupo familiar de hasta 5 integrantes y cada uno adquirirá ANTON-Plus automáticamente. Podrás asignar ejercicios al grupo, y también regular las recompensas y los juegos.",
pt: "Crie um grupo familiar com até 5 membros onde todos receberão ANTON-Plus. Lá você pode marcar exercícios e controlar o acesso a moedas e jogos."
},
soundText: {
de: "ssml:\n\nÜbrigens.\n\nEs gibt nun neuANTON-Plus Familie!\n\nErstelle eine Familiengruppe mit bis zu 5 Mitgliedern, von denen alle ANTON-Plus erhalten. Du kannst dort Aufgaben pinnen \nund die Münzen und Spiele kontrollieren.",
en: "ssml:\n\nBy the way.\n\nWe now offer ANTON Plus Family.\n \nCreate a family group with up to 5 members where everyone receives ANTON Plus. \nYou will be able to pin learning material for your children and restrict access to coins and games.",
fr: "ssml:\nNous proposons maintenant ANTON-Plus Famille.\n \nCrée un groupe familial comptant jusqu'à 5 membres qui bénéficient tous d'ANTON-Plus. \nTu pourras épingler du contenu pour tes enfants et réguler l'accès aux pièces et aux jeux.",
es: "ssml:\n\nTe proponemos adquirir ANTON-Plus Familia.\n\nCrea un grupo familiar de hasta 5 integrantes y cada uno adquirirá ANTON-Plus automáticamente. Podrás asignar ejercicios al grupo, y también regular las recompensas y los juegos.",
pt: "ssml:\n\nSugerimos que você adquira ANTON-Plus Família.\n\nCrie um grupo familiar de até 5 integrantes e cada um adquirá ANTON-Plus automaticamente. Você poderá marcar exercícios para o grupo e controlar o acesso a moedas e aos jogos."
}
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/button/button.ls
(function(){
return function(){
return Button(T("moreAboutAntonPlusFamily")).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish3NewFamily_click"
});
return startPage({
path: path("/pages/static/antonPlus/1_products/page"),
animation: "slideUp",
params: {
referrer: "afterFinish3NewFamily",
highlight: "plusFamily"
}
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/illustration/family-plus.svg"),
size: "7em"
}).css({
margin: "1em auto"
});
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/link/link.ls
(function(){
return function(){
return inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: "black"
}).css({
marginTop: "0.8em",
padding: "0.5em"
}).tap(function(){
inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish3NewFamily_skip"
});
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
});
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/logPromo/log.ls
(function(){
return function(page){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_afterFinish3NewFamily",
isReferrer: true,
isBack: _.includes(app.lastPagePath, "static/antonPlus"),
details: {
testVariantAfterFinishSound2: page.testVariantSound
}
});
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/page.ls
(function(){
return function(page){
page.media = inc("_preloadMedia/preloadMedia")();
page.testVariantSound = inc("../_shared/calcTestVariantSound/calc")();
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
finish: function(){
return page.media.clear();
},
start: function(){
if (inc("../_shared/waitForMedia/wait")(page)) {
return;
}
inc("logPromo/log")(page);
page.css({
lineHeight: "1.5em",
maxWidth: "90%",
width: "35em",
margin: "0 auto"
}).append(inc("title/title")(), inc("icon/icon")(), inc("text1/text1")(), inc("button/button")(), " ", inc("link/link")());
return inc("../_shared/playSound/play")(page);
}
};
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/text1/text1.ls
(function(){
return function(){
return Div().css({
paddingBottom: "1.5em"
}).html(T("text1"));
};
})();
pages/level/afterFinish/pages/antonPlus/page3NewFamily/title/title.ls
(function(){
return function(){
return Div().html(T("title"));
};
})();
pages/level/afterFinish/pages/disabledCoins/_t.ls
(function(){
return {
text: {
de: "Die Lehrkraft der Gruppe $1 hat die Münzen für diese Aufgaben abgestellt.",
en: "The teacher of the group $1 deactivated the coins for these exercises.",
fr: "Le·La professeur·e du groupe $1 a désactivé les pièces pour ces exercices.",
es: "El/la docente del grupo $1 desactivó las fichas para este ejercicio.",
pt: "O(a) professor(a) do grupo $1 desativou as moedas para este exercício."
},
textFamily: {
de: "Dein Familien-Admin hat die Münzen für diese Aufgaben abgestellt.",
en: "Your family admin deactivated the coins for these exercises.",
fr: "L'admin du groupe familial a désactivé les pièces pour ces exercices.",
es: "El/la administrador/a del grupo desactivó las fichas para este ejercicio.",
pt: "O(a) administrador(a) do grupo familiar desativou as moedas para este exercício."
}
};
})();
pages/level/afterFinish/pages/disabledCoins/button/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
};
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
}).tap(tap);
};
})();
pages/level/afterFinish/pages/disabledCoins/coinWithCross/coinWithCross.ls
(function(){
return function(){
return Div().css({
height: "6em",
width: "6em",
margin: "0 auto 1em"
}).append(SvgIcon({
svg: path("/lib/svg/illustration/coin.svg"),
size: "6em"
}), SvgIcon({
svg: path("/lib/svg/shape/cross.svg"),
color: Color.red[500],
size: "4em"
}).css({
position: "absolute",
top: "1em",
left: "1em"
}));
};
})();
pages/level/afterFinish/pages/disabledCoins/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
return page.append(inc("coinWithCross/coinWithCross")(), inc("text/text")(page), inc("button/button")());
}
};
};
})();
pages/level/afterFinish/pages/disabledCoins/text/calcDisabledGroupDescription/calc.ls
(function(){
return function(page, onDone){
var infos, project, ref$, ref1$, ref2$, code, projects, groupCode;
infos = page.params.disabledCoinsPlanInfos;
project = (ref$ = log.findLast("finishLevel")) != null ? (ref1$ = ref$.puid) != null ? (ref2$ = ref1$.split("/")) != null ? ref2$[0] : void 8 : void 8 : void 8;
for (code in infos) {
projects = infos[code];
if (in$(project, projects)) {
groupCode = code;
break;
}
}
if (!groupCode) {
return;
}
return inc("/data/group/calcGroupDescription/calc")(groupCode);
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/level/afterFinish/pages/disabledCoins/text/text.ls
(function(){
return function(page){
var d;
d = inc("calcDisabledGroupDescription/calc")(page);
return Div().css({
maxWidth: "90%",
width: "30em",
margin: "0 auto 1em",
lineHeight: "1.5em"
}).secureHtml((d != null ? d.type : void 8) === "family"
? T("textFamily")
: T("text", d != null ? d.name : void 8));
};
})();
pages/level/afterFinish/pages/levelRating/00_shared/logRating/log.ls
(function(){
return function(page){
var p, e, e2;
p = page.params;
e = log.findLast({
event: "finishLevel"
});
e2 = _.cloneDeep(e);
e2.rating = p.rating;
if (p.ratingFeedback) {
e2.ratingFeedback = p.ratingFeedback;
}
delete e2.created;
delete e2.inserted;
delete e2.seq;
log.log(e2);
return log.deleteEvent(e);
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/buttons/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right",
action: click,
key: "enter"
});
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/buttons/buttonWrite/button.ls
(function(){
return function(click){
return inc("/lib/gui/link/link")({
label: T("giveFeedback")
}).tap(click);
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/buttons/buttons.ls
(function(){
return function(clickWrite, clickContinue){
return Div().append(inc("buttonWrite/button")(clickWrite), Div().css({
height: "1.3em"
}), inc("buttonContinue/button")(clickContinue)).css({
opacity: 0
});
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/buttons/text/text.ls
(function(){
return function(){
return Div().css({
marginBottom: "0.5em"
}).html(T("thanksForFeedback"));
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/icons/icon/animate/animate.ls
(function(){
return function(div){
div.css({
transform: "rotate(360deg)",
transition: "transform 800ms",
pointerEvents: "none"
});
return setTimeout(function(){
return div.css({
transition: "",
transform: "",
pointerEvents: ""
});
}, 800);
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/icons/icon/icon.ls
(function(){
return function(icon, i, onClick){
var animate, notMobile, div;
animate = function(){
return inc("animate/animate")(div);
};
notMobile = body.width() > 600;
div = Div({
display: "inline-block",
width: "2.4em",
height: "2.4em",
padding: "0.4em",
borderRadius: "1.2em",
margin: "0.3em",
marginBottom: 0,
overflow: "hidden",
backgroundColor: icon.color
}).tap({
down: function(){
return onClick(i);
},
animation: "none"
}).append(SvgIcon({
svg: icon.path,
color: Color.black,
size: notMobile ? "2em" : "1.5em"
}));
if (notMobile) {
div.css({
width: "3.5em",
height: "3.5em",
padding: "0.75em",
borderRadius: "1.75em",
margin: "0.5em"
});
}
div.animate = animate;
return div;
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/icons/icons.ls
(function(){
return function(onChoose){
var selected, choose, iconProperties, div, icons, i, icon;
selected = -1;
choose = function(index){
var i$, ref$, len$, i, icon;
onChoose(index);
for (i$ = 0, len$ = (ref$ = icons).length; i$ < len$; ++i$) {
i = i$;
icon = ref$[i$];
if (i === index) {
icon.animate();
icon.css({
opacity: 1
});
} else {
icon.css({
opacity: 0.2
});
}
}
return selected = index;
};
iconProperties = [
{
path: path("/lib/svg/emoticon/cry.svg"),
color: Color.red[500]
}, {
path: path("/lib/svg/emoticon/sad.svg"),
color: Color.orange[600]
}, {
path: path("/lib/svg/emoticon/neutral.svg"),
color: Color.yellow[600]
}, {
path: path("/lib/svg/emoticon/smile.svg"),
color: Color.lime[500]
}, {
path: path("/lib/svg/emoticon/laugh.svg"),
color: Color.green[500]
}
];
div = Div({
padding: "1.5em 0 1em"
}).html(icons = (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = iconProperties).length; i$ < len$; ++i$) {
i = i$;
icon = ref$[i$];
results$.push(inc("icon/icon")(icon, i, choose));
}
return results$;
}()));
div.icons = icons;
div.choose = choose;
return div;
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var p, init, clickWrite, clickContinue, onChoose, icons, buttons;
p = page.params;
init = function(){
if (p.rating > -1) {
return icons.choose(p.rating);
}
};
clickWrite = function(){
return startPage({
path: path("../02_feedback/page"),
params: {
rating: p.rating
},
animation: "slideUp"
});
};
clickContinue = function(){
page.css({
pointerEvents: "none"
});
return setTimeout(function(){
inc("../00_shared/logRating/log")(page);
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
}, 500);
};
onChoose = function(index){
buttons.fadeIn();
return p.rating = index;
};
page.append(inc("text/text")(), icons = inc("icons/icons")(onChoose), buttons = inc("buttons/buttons")(clickWrite, clickContinue));
return init();
}
};
};
})();
pages/level/afterFinish/pages/levelRating/01_rating/text/text.ls
(function(){
return function(){
var name, ref$;
name = (ref$ = log.findLast("setName")) != null ? ref$.value : void 8;
return Div().css({
display: "inline-block",
maxWidth: "90%"
}).html(T("howDidYouLike", name));
};
})();
pages/level/afterFinish/pages/levelRating/02_feedback/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("send"),
action: click,
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
});
};
})();
pages/level/afterFinish/pages/levelRating/02_feedback/input/input.ls
(function(){
return function(){
return inc("/lib/gui/inputEditable/input")({
multiline: true,
maxLength: 500
}).css({
margin: "1em auto",
width: "20em",
maxWidth: "90%",
height: "12em"
});
};
})();
pages/level/afterFinish/pages/levelRating/02_feedback/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("yourOpinion")
});
},
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var submit, input;
submit = function(){
var v;
v = input.getValue();
if (!v) {
input.start();
return;
}
page.params.ratingFeedback = v;
page.css({
pointerEvents: "none"
});
return setTimeout(function(){
inc("../00_shared/logRating/log")(page);
startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
return inc("/lib/gui/toast/toast")({
label: T("thanksForReporting")
});
}, 300);
};
page.append(inc("text/text")(), input = inc("input/input")(), inc("buttonContinue/button")(submit));
return input.start();
}
};
};
})();
pages/level/afterFinish/pages/levelRating/02_feedback/text/text.ls
(function(){
return function(){
return Div().html(T("writeYourFeedback"));
};
})();
pages/level/afterFinish/pages/levelRating/_t.ls
(function(){
return {
giveFeedback: {
de: "Schreib deine Meinung",
en: "Give feedback",
fr: "Écrire un commentaire",
es: "Escríbenos un comentario",
pt: "Escreva sua opinião"
},
thanksForFeedback: {
de: "Danke für deine Bewertung!",
en: "Thank you for your feedback!",
fr: "Merci pour ton message !",
es: "¡Gracias por tu comentario!",
pt: "Agradecemos pela sua avaliação!"
},
howDidYouLike: {
de: "$1, wie gut hat dir die Übung gefallen?",
en: "$1, how much did you like this lesson?",
fr: "$1, est-ce que cet exercice t'a plu ?",
es: "$1, ¿qué te pareció este ejercicio?",
pt: "$1, o que achou deste exercício?"
},
send: {
de: "Abschicken",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
},
writeYourFeedback: {
de: "Schreib uns hier deine Meinung:",
en: "Write your feedback here:",
fr: "Écris ton commentaire ici :",
es: "Escribe aquí tu opinión:",
pt: "Escreva aqui sua opinião:"
},
yourOpinion: {
de: "Deine Meinung",
en: "Your feedback",
fr: "Ton commentaire",
es: "Tu comentario",
pt: "Seu comentário"
},
thanksForReporting: {
de: "Danke für deine Meinung!",
en: "Thanks for letting us know!",
fr: "Merci pour ton message !",
es: "¡Gracias por tu comentario!",
pt: "Agradecemos pelo seu comentário!"
}
};
})();
pages/level/afterFinish/pages/newCoin/_t.ls
(function(){
return {
receiveNewCoin: {
de: "Du bekommst eine neue Münze für dein gutes Lernen!",
en: "You get one new coin for your good work!",
fr: "Tu gagnes une nouvelle pièce pour ce bon travail !",
es: "¡Ganaste una ficha por tu buen trabajo!",
pt: "Você ganhou uma moeda pelo ótimo trabalho!"
},
thanksForYourRating: {
de: "Danke für deine Bewertung!",
en: "Thank you for your rating!",
fr: "Merci pour ton évaluation !",
es: "¡Gracias por tu evaluación!",
pt: "Agradecemos pela sua avaliação!"
},
thanks4Stars: {
de: "Danke für deine Bewertung! Viel Spaß beim Weiterlernen mit ANTON!",
en: "Thank you for your rating! Keep going, more fun learning awaits!",
fr: "Merci pour ton évaluation ! Continue à apprendre en t'amusant avec ANTON !",
es: "¡Gracias por tu evaluación! ¡Sigue aprendiendo con ANTON!",
pt: "Agradecemos pela sua avaliação! Continue aprendendo e se divertindo com ANTON!"
},
howDoYouLikeAnton: {
de: "$1, wie gut gefällt dir ANTON?",
en: "$1, how much do you like ANTON?",
fr: "$1, est-ce qu'ANTON te plaît ?",
es: "$1 ¿Qué te parece ANTON?",
pt: "$1 O que achou de ANTON?"
},
canPlayWithCoins: {
de: "Du bekommst immer nach 6 vollen Sternen oder Pokalen eine Münze. Mit den Münzen kannst du dann Spiele spielen.
Klicke dafür auf der nächsten Seite $1 auf Spiele.",
en: "You get a coin for every 6 full stars or trophies you earn in the app. You can use your coins to play games.
Just click on Games at the $1 of the following page.",
fr: "Tu obtiens une pièce à chaque fois que tu as collecté 6 étoiles ou trophées. Tu peux utiliser tes pièces pour jouer sur ANTON.
Pour jouer, appuie sur Jeux $1 la page suivante.",
es: "Cada vez que juntas 6 estrellas o trofeos completos, recibes una ficha. Puedes utilizar tus fichas para jugar juegos.
Presiona juegos en la $1 de la siguiente página. ",
pt: "Após ganhar 6 estrelas completas ou um troféu no aplicativo, você receberá uma moeda. Você pode utilizar suas moedas para jogar jogos.
Para isso, selecione Jogos $1 na próxima página."
},
bottom: {
de: "unten",
en: "at the bottom of",
fr: "au bas de",
es: "parte inferior",
pt: "abaixo"
},
top: {
de: "oben",
en: "at the top of",
fr: "en haut de",
es: "parte superior",
pt: "acima"
},
pleaseRate: {
de: "Bitte bewerte %@ im $1",
en: "Please rate %@ in $1",
fr: "Merci d'évaluer %@ dans $1",
es: "Por favor, evalúa %@ en $1",
pt: "Por favor, avalie %@ em $1"
},
pleaseRateMessage: {
de: "Unterstütze uns, damit %@ kostenlos bleibt.",
en: "Support us, so that %@ stays free.",
fr: "Apporte-nous ton soutien pour que %@ reste gratuit.",
es: "Apóyanos para que %@ siga siendo gratuito.",
pt: "Nos apoie, para que %@ continue gratuito."
},
noThanks: {
de: "Nein, danke",
en: "No, thanks",
fr: "Non merci",
es: "No, gracias",
pt: "Não, obrigado"
},
rateLater: {
de: "Später bewerten",
en: "Rate later",
fr: "Évaluer plus tard",
es: "Evaluar más tarde",
pt: "Avaliar mais tarde"
},
rateNow: {
de: "Jetzt bewerten",
en: "Rate now",
fr: "Évaluer maintenant",
es: "Evaluar ahora",
pt: "Avaliar agora"
},
yes: {
de: "Ja",
en: "Yes",
fr: "Oui",
es: "Sí",
pt: "Sim"
},
no: {
de: "Nein",
en: "No",
fr: "Non",
es: "No",
pt: "Não"
},
pleaseRateGood: {
de: "Bitte gib uns eine gute Bewertung",
en: "Please give us a good rating",
fr: "Nous apprécierions beaucoup une bonne note",
es: "Por favor, déjanos una buena reseña",
pt: "Por favor, nos dê uma avaliação positiva"
},
pleaseGiveFeedback: {
de: "Bitte gib uns Feedback",
en: "Please give us feedback",
fr: "Nous apprécierions beaucoup un commentaire",
es: "Por favor, déjanos un comentario",
pt: "Por favor, deixe seu comentário"
},
pleaseRatePrompt: {
de: "Bitte bewerte %@",
en: "Please rate %@",
fr: "Merci d'évaluer %@",
es: "Favor de evaluar %@",
pt: "Favor avaliar %@"
},
games: {
de: "Spiele",
en: "Games",
fr: "Jeux",
es: "Juegos",
pt: "Jogos"
}
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/button/button.ls
(function(){
return function(page){
var click;
click = function(){
if (page.isFirstCoinEver) {
return startPage({
path: path("../../firstCoinExplainGameMenu/page"),
animation: "fadeIn"
});
} else if (page.showAppRatePage) {
return startPage({
path: path("../../appRating/01_rating/page"),
animation: "fadeIn"
});
} else {
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
}
};
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
}).tap(click).addClass("keyManager-enter").bind("keyManager", click);
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/calcShowAppRatePage/calc.ls
(function(){
return function(){
var ref$;
return engine.isMobileApp && (typeof AppRate != 'undefined' && AppRate !== null) && ((ref$ = Store("deviceRememberUser")) != null ? ref$ : true) && deviceLog.findLast("hasSeenAppRatePage") == null && log.findLast("hasSeenAppRatePage") == null && inc("hasAtLeastFourCoins/hasAtLeastFourCoins")();
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/calcShowAppRatePage/hasAtLeastFourCoins/hasAtLeastFourCoins.ls
(function(){
return function(){
var snapshot, ref$, events, collectedCoins, ref1$, ref2$;
snapshot = log.findLast({
event: "snapshot"
});
if ((snapshot != null ? (ref$ = snapshot.adjustCoins) != null ? ref$.positiveSum : void 8 : void 8) >= 4) {
return true;
}
events = _.filter(log.list("adjustCoins"), function(e){
var ref$, ref1$;
return !e.inserted || new Date(e.inserted) > new Date((ref$ = snapshot != null ? (ref1$ = snapshot.adjustCoins) != null ? ref1$.lastInserted : void 8 : void 8) != null
? ref$
: (ref$ = snapshot != null ? snapshot.inserted : void 8) != null
? ref$
: new Date(0).toISOString());
});
collectedCoins = _.reduce(_.filter(_.map(events, "value"), function(v){
return v > 0;
}), function(a, b){
return a + b;
}, (ref1$ = snapshot != null ? (ref2$ = snapshot.adjustCoins) != null ? ref2$.positiveSum : void 8 : void 8) != null ? ref1$ : 0);
return collectedCoins >= 4;
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
page.isFirstCoinEver = page.params.isFirstCoinEver;
page.showAppRatePage = inc("calcShowAppRatePage/calc")();
page.totalCoins = page.userDescription.totalCoins;
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
page.html(inc("totalAndCoin/totalAndCoin")(page), inc("text/text")(), inc("button/button")(page));
return inc("/lib/util/soundEffectPlay/soundEffectPlay")("notification");
}
};
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/text/text.ls
(function(){
return function(){
return Div({
width: "25em",
maxWidth: "90%",
margin: "1.5em auto",
lineHeight: "1.5em"
}).html(T("receiveNewCoin"));
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/coin/animated/animated.ls
(function(){
return function(){
var icon;
icon = inc("../static/static")().css({
transform: "translateY(-100vh)"
});
icon.animation({
css: {
transform: "translateY(0)"
},
easing: "ease-in",
onCompleted: function(){
return icon.animation({
css: {
transform: "scaleY(0.95)",
transformOrigin: "50% 100%"
},
easing: "ease-out",
duration: 100,
onCompleted: function(){
return icon.animation({
css: {
transform: "scaleY(1)"
},
easing: "ease-in",
duration: 100,
onCompleted: function(){
return icon.hide();
}
});
}
});
}
});
return icon;
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/coin/coin.ls
(function(){
return function(totalCoins){
return Div({
display: "inline-block",
width: "5em",
height: "5em"
}).html(inc("animated/animated")(), inc("static/static")().css({
opacity: totalCoins > 0 ? 1 : 0
}).animation({
css: {
transform: "scale(1.1)"
},
easing: "ease-out",
autoReverse: true,
delay: 500,
duration: 150
}));
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/coin/static/static.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/illustration/coin.svg")
}).css({
position: "absolute",
width: "inherit",
height: "inherit",
left: 0,
top: 0
});
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/spacer/spacer.ls
(function(){
return function(){
return Div({
fontSize: "1.2em",
width: "2em"
});
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/total/total.ls
(function(){
return function(totalCoins){
var div;
div = Div({
fontSize: "1.2em",
color: Color.yellow[800],
paddingRight: "0.6em",
width: "2em",
textAlign: "right"
}).html(totalCoins - 1);
setTimeout(function(){
return div.html(totalCoins);
}, 500);
return div;
};
})();
pages/level/afterFinish/pages/newCoin/addCoin/totalAndCoin/totalAndCoin.ls
(function(){
return function(page){
return Div({
display: "flex",
margin: "1em"
}).html(inc("total/total")(page.totalCoins), inc("coin/coin")(page.totalCoins), inc("spacer/spacer")());
};
})();
pages/level/afterFinish/pages/newCoin/appRating/00_shared/logRating/log.ls
(function(){
return function(o){
var e, k, v;
deviceLog.log({
event: "hasSeenAppRatePage"
});
log.log({
event: "hasSeenAppRatePage"
});
e = {
event: "appRating"
};
for (k in o) {
v = o[k];
if (v != null) {
e[k] = v;
}
}
return log.log(e);
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/buttons/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right",
action: click,
key: "enter"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/buttons/buttons.ls
(function(){
return function(clickContinue){
return Div().append(inc("buttonContinue/button")(clickContinue)).css({
visibility: "hidden",
marginTop: "1em"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/buttons/text/text.ls
(function(){
return function(){
return Div().css({
marginBottom: "0.5em"
}).html(T("thanksForYourRating"));
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var p, clickContinue, onChoose, text, stars, buttons;
p = page.params;
clickContinue = function(){
var pagePath;
buttons.css({
pointerEvents: "none"
});
pagePath = p.stars < 4
? path("../02_1-3/page")
: p.stars < 5
? path("../02_4/page")
: (typeof AppRate != 'undefined' && AppRate !== null) && engine.isMobileApp
? path("../02_5-mobile/page")
: path("../02_5-desktop/page");
return setTimeout(function(){
return startPage({
path: pagePath,
params: {
stars: p.stars
}
});
}, 500);
};
onChoose = function(index){
p.stars = index + 1;
return buttons.css({
visibility: "visible"
});
};
return page.append(text = inc("text/text")(), stars = inc("stars/stars")(onChoose), buttons = inc("buttons/buttons")(clickContinue));
}
};
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/stars/star/star.ls
(function(){
return function(i, onClick){
var setSelected, svg;
setSelected = function(select){
return svg.setColor(select
? Color.yellow[600]
: Color.grey[150]);
};
svg = SvgIcon({
svg: path("/lib/svg/shape/star.svg"),
color: Color.grey[150]
}).css({
width: "2.4em",
height: "2.4em",
margin: "0 0.3em"
}).tap({
animation: "none",
up: function(){
return onClick(i);
}
});
svg.setSelected = setSelected;
return svg;
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/stars/stars.ls
(function(){
return function(onChoose){
var choose, div, stars, i;
choose = function(index){
var i$, i;
for (i$ = 0; i$ <= index; ++i$) {
i = i$;
stars[i].setSelected(true);
}
for (i$ = index + 1; i$ < 5; ++i$) {
i = i$;
stars[i].setSelected(false);
}
return onChoose(index);
};
div = Div().css({
padding: "1.5em 0 1em"
}).append(stars = (function(){
var i$, results$ = [];
for (i$ = 0; i$ < 5; ++i$) {
i = i$;
results$.push(inc("star/star")(i, choose));
}
return results$;
}()));
div.stars = stars;
div.choose = choose;
return div;
};
})();
pages/level/afterFinish/pages/newCoin/appRating/01_rating/text/text.ls
(function(){
return function(){
var name, ref$;
name = (ref$ = log.findLast("setName")) != null ? ref$.value : void 8;
return Div().css({
display: "inline-block",
maxWidth: "90%"
}).html(T("howDoYouLikeAnton", name));
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_1-3/_t.ls
(function(){
return {
thanksForRating: {
de: "Vielen Dank für deine Bewertung. Bitte schreib uns, wie wir ANTON verbessern können.",
en: "Thank you for your rating. Please tell us how we can improve ANTON.",
fr: "Merci pour ton évaluation. Selon toi, comment pouvons-nous améliorer ANTON ?",
es: "Gracias por tu evaluación ¿Qué nos sugieres mejorar?",
pt: "Agradecemos pela sua avaliação. Por favor, diga-nos como podemos melhorar ANTON."
},
send: {
de: "Abschicken",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
}
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_1-3/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("send"),
action: click,
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_1-3/input/input.ls
(function(){
return function(){
return inc("/lib/gui/inputEditable/input")({
multiline: true,
lineHeight: "1.5em",
linePadding: "0 0.3em"
}).css({
margin: "1em auto",
minHeight: "10em",
width: "20em",
maxWidth: "90%"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_1-3/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var p, submit, input, buttonContinue;
p = page.params;
submit = function(){
buttonContinue.css({
pointerEvents: "none"
});
if (typeof buttonSpeech != 'undefined' && buttonSpeech !== null) {
buttonSpeech.css({
pointerEvents: "none"
});
}
input.stop();
return setTimeout(function(){
inc("../00_shared/logRating/log")({
stars: p.stars,
feedback: input.getValue()
});
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
}, 300);
};
page.append(inc("text/text")(), input = inc("input/input")(), Div(), buttonContinue = inc("buttonContinue/button")(submit));
return input.start();
}
};
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_1-3/text/text.ls
(function(){
return function(){
return Div().css({
margin: "0 auto 0.5em",
width: "30em",
maxWidth: "90%"
}).html(T("thanksForRating"));
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_4/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right",
action: click,
key: "enter"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_4/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var p, click, button;
p = page.params;
click = function(){
button.css({
pointerEvents: "none"
});
inc("../00_shared/logRating/log")({
stars: p.stars
});
return setTimeout(function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
}, 500);
};
return page.append(inc("text/text")(), button = inc("buttonContinue/button")(click));
}
};
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_4/text/text.ls
(function(){
return function(){
return Div().css({
margin: "0 auto 1.5em",
width: "30em",
maxWidth: "90%"
}).html(T("thanks4Stars"));
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-desktop/_t.ls
(function(){
return {
thanksRating2: {
de: "Danke für deine Bewertung! Und nun viel Spaß beim Weiterlernen mit ANTON!",
en: "Thank you for your rating! Keep going, more fun learning awaits!",
fr: "Merci pour ton évaluation ! Continue à apprendre en t'amusant avec ANTON !",
es: "Gracias por tu evaluación ¡Sigue aprendiendo y divirtiéndote con ANTON!",
pt: "Agradecemos pela sua avaliação! Continue aprendendo e se divertindo com ANTON!"
}
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-desktop/buttonContinue/button.ls
(function(){
return function(click){
return Button({
label: T("continueButton"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right",
action: click,
key: "enter"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-desktop/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
var p, click, button;
p = page.params;
click = function(){
button.css({
pointerEvents: "none"
});
inc("../00_shared/logRating/log")({
stars: p.stars,
appRateAvailable: false
});
return setTimeout(function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
}, 500);
};
return page.append(inc("text/text")(), Div(), button = inc("buttonContinue/button")(click));
}
};
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-desktop/text/text.ls
(function(){
return function(){
return Div().css({
margin: "0 auto 1.5em",
width: "30em",
maxWidth: "90%"
}).html(T("thanksRating2"));
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/_t.ls
(function(){
return {
thanksRating3: {
de: "Unterstütze uns mit einer guten Bewertung im $1, damit ANTON kostenlos bleibt!",
en: "We would appreciate if you left a positive rating in the $1, so that ANTON can continue as a free learning platform!",
fr: "Tu peux nous laisser une note positive dans $1 pour qu'ANTON puisse rester une plateforme d'apprentissage gratuite ! ",
es: "¡Apóyanos! Evalúanos positivamente en el $1 para que ANTON siga siendo una plataforma gratuita.",
pt: "Apoie-nos! Deixe uma avaliação positiva em $1 para que ANTON continue sendo um aplicativo de aprendizagem gratuito."
},
continueWithoutRating: {
de: "Weiter ohne Bewerten",
en: "Continue without rating",
fr: "Continuer sans évaluer",
es: "Continuar sin evaluar",
pt: "Continuar sem avaliar"
}
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/buttonNoRate/button.ls
(function(){
return function(click){
return inc("/lib/gui/link/link")({
label: T("continueWithoutRating")
}).tap(click);
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/buttonRate/button.ls
(function(){
return function(click){
return Button({
label: T("rateNow"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconPosition: "right",
action: click,
key: "enter"
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/log/log.ls
(function(){
return function(o){
o = o || {};
o.stars = 5;
o.appRateAvailable = true;
inc("../../00_shared/logRating/log")(o);
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/openAppRatePlugin/open.ls
(function(){
return function(callback){
var storeName, isAmazonFire;
if (typeof AppRate == 'undefined' || AppRate === null) {
return;
}
storeName = engine.isAndroidApp
? T("playStore")
: engine.isAmazonDevice
? T("amazonAppStore")
: T("appStore");
isAmazonFire = engine.isAmazonDevice;
AppRate.preferences = {
inAppReview: true,
displayAppName: 'ANTON',
openStoreInApp: true,
simpleMode: true,
promptAgainForEachNewVersion: true,
storeAppURL: {
ios: '1180554775',
android: isAmazonFire ? "amzn://apps/android?p=com.solocode.anton" : 'market://details?id=com.solocode.anton'
},
customLocale: {
title: T("pleaseRate", storeName),
message: T("pleaseRateMessage"),
cancelButtonLabel: T("noThanks"),
laterButtonLabel: T("rateLater"),
rateButtonLabel: T("rateNow"),
yesButtonLabel: T("yes"),
noButtonLabel: T("no"),
appRatePromptMessage: T("pleaseRateGood"),
feedbackPromptMessage: T("pleaseGiveFeedback"),
appRatePromptTitle: T("pleaseRatePrompt"),
feedbackPromptTitle: T("pleaseGiveFeedback")
},
callbacks: {
handleNegativeFeedback: function(){
return debug('negative feedback');
},
onRateDialogShow: function(cb){
return cb(0);
},
onButtonClicked: function(buttonIndex){
var message;
message = (function(){
switch (buttonIndex) {
case 1:
return 'yes';
case 2:
return 'later';
case 3:
return 'no';
}
}());
if (message) {
return callback({
appRateChoice: message
});
}
}
},
openUrl: AppRate.preferences.openUrl
};
return AppRate.navigateToAppStore();
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/page.ls
(function(){
return function(){
return {
start: function(page){
var p, onFinish, clickNoRate, clickRate, buttonRate, buttonNoRate;
p = page.params;
onFinish = function(){
buttonRate.css({
pointerEvents: "none"
});
buttonNoRate.css({
pointerEvents: "none"
});
return setTimeout(function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
}, 500);
};
clickNoRate = function(){
inc("log/log")({
appRateChoice: "no"
});
return onFinish();
};
clickRate = function(){
inc("openAppRatePlugin/open")();
inc("log/log")({
appRateChoice: "yes"
});
return onFinish();
};
return page.append(inc("text/text")(), Div().css({
height: "1em"
}), buttonRate = inc("buttonRate/button")(clickRate), Div().css({
height: "1em"
}), buttonNoRate = inc("buttonNoRate/button")(clickNoRate));
}
};
};
})();
pages/level/afterFinish/pages/newCoin/appRating/02_5-mobile/text/text.ls
(function(){
return function(){
var store;
store = engine.isAndroidApp
? T("playStore")
: T("appStore");
return Div({
margin: "0 auto 1.5em",
width: "30em",
maxWidth: "90%"
}).html(T("thanksRating3", store));
};
})();
pages/level/afterFinish/pages/newCoin/firstCoinExplainGameMenu/button/button.ls
(function(){
return function(totalCoins){
var click;
click = function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
};
return Button({
label: T("ok")
}).css({
minWidth: "5em",
textAlign: "center"
}).tap(click);
};
})();
pages/level/afterFinish/pages/newCoin/firstCoinExplainGameMenu/icon/icon.ls
(function(){
return function(){
return Div().css({
padding: "1em"
}).append(Div().css({
display: "inline-flex",
backgroundColor: Color.grey[200],
width: "6.5em",
height: "3em",
borderRadius: "1.5em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/games.svg"),
width: "1.5em",
height: "1.5em"
}).css({
marginRight: "0.5em"
}), Span().css({
color: Color.grey[550]
}).html(T("games"))));
};
})();
pages/level/afterFinish/pages/newCoin/firstCoinExplainGameMenu/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescription/description")(page);
},
start: function(){
return page.append(inc("icon/icon")(), inc("text/text")(), inc("button/button")());
}
};
};
})();
pages/level/afterFinish/pages/newCoin/firstCoinExplainGameMenu/text/text.ls
(function(){
return function(){
var position;
position = app.navbarPosition === "bottom"
? T("bottom")
: T("top");
return Div({
width: "25em",
maxWidth: "90%",
margin: "0 auto 1.5em"
}).html(T("canPlayWithCoins", position));
};
})();
pages/level/afterFinish/start/close/close.ls
(function(){
return function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
},
animation: "fadeIn"
});
};
})();
pages/level/afterFinish/start/showAdventCalendar/calcTotalLevelsToday/calc.ls
(function(){
return function(){
var now, timezoneOffsetMs, nowDate, nowMonth, nowYear, isToday, events, totalEvents;
now = new Date();
timezoneOffsetMs = now.getTimezoneOffset() * 60 * 1000;
nowDate = now.getDate();
nowMonth = now.getMonth();
nowYear = now.getFullYear();
isToday = function(d){
return d.getDate() === nowDate && d.getMonth() === nowMonth && d.getFullYear() === nowYear;
};
events = log.list({
event: "finishLevel"
});
events = _.filter(events, function(e){
var d1, d2;
if (e.inserted) {
d1 = new Date(e.inserted);
d2 = new Date(d1.getTime() - timezoneOffsetMs);
return isToday(d2);
} else {
return true;
}
});
events = _.uniqBy(events, "puid");
return totalEvents = events.length;
};
})();
pages/level/afterFinish/start/showAdventCalendar/show.ls
(function(){
return function(){
var date, previewMode, mode, events, totalLevelsToday, todoLevelsToday, todayDateString, e, preloadMedia;
date = inc("/lib/util/formatDate2/format")();
previewMode = engine.isDebug && date.m === 11;
if (date.m !== 12 && !previewMode) {
return false;
}
if (date.d > 24) {
return false;
}
mode = previewMode ? "preview" : "live";
events = log.list({
event: "showPromoAdventCalendar",
year: date.Y,
mode: mode
});
if ((events != null ? events.length : void 8) > 6) {
return false;
}
totalLevelsToday = inc("calcTotalLevelsToday/calc")();
todoLevelsToday = Math.max(3 - totalLevelsToday, 0);
todayDateString = new Date().toDateString();
if (_.find(events, function(e){
return new Date(e.created).toDateString() === todayDateString && e.todoLevelsToday === todoLevelsToday;
})) {
return false;
}
e = log.findLast({
event: "setAdventCalendarOpened",
day: new Date().getDate(),
year: new Date().getFullYear(),
mode: mode
});
if (e) {
return false;
}
preloadMedia = inc("../../pages/adventCalendarPromo/_preloadMedia/preloadMedia")();
if (!preloadMedia.isReady()) {
return false;
}
startPage({
path: path("../../pages/adventCalendarPromo/page"),
params: {
totalLevelsToday: totalLevelsToday,
todoLevelsToday: todoLevelsToday
}
});
return true;
};
})();
pages/level/afterFinish/start/showAntonPlus1Intro/show.ls
(function(){
return function(){
var events, e, calcDate, preloadMedia;
if (!inc("/lib/util/isPlusPromotionTime/is")()) {
return;
}
events = log.list("finishLevel");
if (events.length <= 3) {
return false;
}
e = log.findLast("promoPlus_afterFinish1");
if ((e != null ? e.count : void 8) > 3) {
return false;
}
calcDate = inc("/lib/util/calcDateString/calc");
if (e != null && calcDate(e.created) === calcDate(new Date())) {
return false;
}
preloadMedia = inc("../../pages/antonPlus/page1Intro/_preloadMedia/preloadMedia")();
if (!preloadMedia.isReady()) {
return false;
}
startPage({
path: path("../../pages/antonPlus/page1Intro/page")
});
return true;
};
})();
pages/level/afterFinish/start/showAntonPlus2Avatars/show.ls
(function(){
return function(){
var e1, age, e2, calcDate, preloadMedia;
if (!inc("/lib/util/isPlusPromotionTime/is")()) {
return;
}
e1 = log.findLast("promoPlus_afterFinish1");
if (!e1) {
return;
}
age = new Date() - e1.created;
if (age < 60 * 1000 * 10) {
return;
}
e2 = log.findLast("promoPlus_afterFinish2Avatars");
if ((e2 != null ? e2.count : void 8) > 2) {
return false;
}
calcDate = inc("/lib/util/calcDateString/calc");
if (e2 != null && calcDate(e2.created) === calcDate(new Date())) {
return false;
}
preloadMedia = inc("../../pages/antonPlus/page2Avatars/_preloadMedia/preloadMedia")();
if (preloadMedia.isReady() !== true) {
return false;
}
startPage({
path: path("../../pages/antonPlus/page2Avatars/page")
});
return true;
};
})();
pages/level/afterFinish/start/showAntonPlus3NewFamily/show.ls
(function(){
return function(){
var e1, age, e2, calcDate, preloadMedia;
if (!inc("/lib/util/isPlusPromotionTime/is")()) {
return;
}
e1 = log.findLast("promoPlus_afterFinish2Avatars");
if (!e1) {
return;
}
age = new Date() - e1.created;
if (age < 60 * 1000 * 60 * 24 * 14) {
return;
}
e2 = log.findLast("promoPlus_afterFinish3NewFamily");
if ((e2 != null ? e2.count : void 8) > 1) {
return false;
}
calcDate = inc("/lib/util/calcDateString/calc");
if (e2 != null && calcDate(e2.created) === calcDate(new Date())) {
return false;
}
preloadMedia = inc("../../pages/antonPlus/page3NewFamily/_preloadMedia/preloadMedia")();
if (preloadMedia.isReady() !== true) {
return false;
}
startPage({
path: path("../../pages/antonPlus/page3NewFamily/page")
});
return true;
};
})();
pages/level/afterFinish/start/showAskPushPermission/show.ls
(function(){
return function(){
var osVersion, ref$, e, duration, age;
osVersion = (ref$ = typeof device != 'undefined' && device !== null ? device.version : void 8) != null ? ref$ : 0;
if (!(engine.isiOsApp || (engine.isAndroidApp && inc("/lib/util/compareVersionString/compare")(osVersion, "13") >= 0))) {
return false;
}
if (deviceLog.findLast("deviceSetPushId")) {
return false;
}
e = deviceLog.findLast("deviceAskPushPermissioniOs") || deviceLog.findLast("deviceAskPushPermissionAndroid");
duration = 1000 * 3600 * 24 * 14;
age = new Date() - (e != null ? e.created : void 8);
if (e && age < duration) {
return false;
}
startPage({
path: path("/pages/misc/askPushPermissioniOs/page"),
params: {
backPage: {
history: "/level",
animation: "fadeIn"
}
}
});
return true;
};
})();
pages/level/afterFinish/start/showLevelRatingPage/calcLevelRatingProjects/calc.ls
(function(){
return function(){
return ["c-mat-7", "c-mat-8", "c-mat-9", "c-mat-11-algebra", "c-mat-11-analysis", "c-mat-11-stochastic", "c-natdeu-11", "c-eng-6", "c-eng-7", "c-eng-8", "c-eng-9", "c-eng-10", "c-sci", "c-sci-1", "c-bio-7", "c-bio-9", "c-chem-7", "c-phy-5", "c-phy-7", "c-his", "c-mus", "c-mus-1", "c-geo-5"];
};
})();
pages/level/afterFinish/start/showLevelRatingPage/show.ls
(function(){
return function(level){
var levelRatingProjects, projectInfixes, project, previousLevelFinishs, lastEvents, r;
levelRatingProjects = inc("calcLevelRatingProjects/calc")();
projectInfixes = ["-eng-", "-us", "-nateng-", "-gb", "-fr", "-natfra-", "-es", "-nates-", "-pt", "-natpt-", "-mono-"];
project = level.level.puid.split("/")[0];
if (!_.includes(levelRatingProjects, project) && !_.some(projectInfixes, function(v){
return _.includes(project, v);
})) {
return false;
}
previousLevelFinishs = log.list({
event: "finishLevel",
puid: level.level.puid
});
if (previousLevelFinishs.length > 1) {
return false;
}
lastEvents = log.list("finishLevel").slice(-21);
if (_.find(lastEvents, "rating") != null) {
return false;
}
r = _.random(1, true);
if (r > 1 / 5) {
return false;
}
startPage({
path: path("../../pages/levelRating/01_rating/page")
});
return true;
};
})();
pages/level/afterFinish/start/start.ls
(function(){
return function(level){
if (level.coinData.type === "firstLevelFinishCoin" && level.coinData.pagePath) {
startPage({
path: level.coinData.pagePath,
params: level.coinData.pageParams
});
return;
}
if (inc("showAskPushPermission/show")()) {
return;
}
if (level.coinData.type === "newCoin" && level.coinData.pagePath) {
startPage({
path: level.coinData.pagePath,
params: level.coinData.pageParams
});
return;
}
if (inc("showAntonPlus1Intro/show")()) {
return;
}
if (inc("showAntonPlus2Avatars/show")()) {
return;
}
if (inc("showAntonPlus3NewFamily/show")()) {
return;
}
if (inc("showAdventCalendar/show")()) {
return;
}
if (inc("showLevelRatingPage/show")(level)) {
return;
}
return inc("close/close")();
};
})();
pages/level/afterFinish/startDebugPopup/popup.ls
(function(){
return function(){
var b, div, popup;
b = function(l){
return Button(l).css({
minWidth: "6em",
margin: "0.3em"
});
};
div = Div().css({
margin: "0.8em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
marginRight: "0.3em"
}), "Wähle eine afterFinish-Seite aus:
", b("First Coin").tap(function(){
return startPage({
path: path("../pages/newCoin/firstCoinExplainGameMenu/page")
});
}), b("New Coin").tap(function(){
return startPage({
path: path("../pages/newCoin/addCoin/page")
});
}), b("Level Rating").tap(function(){
return startPage({
path: path("../pages/levelRating/01_rating/page")
});
}), b("App rating").tap(function(){
return startPage({
path: path("../pages/newCoin/appRating/01_rating/page")
});
}), b("AntonPlus1").tap(function(){
return startPage({
path: path("../pages/antonPlus/page1Intro/page")
});
}), b("AntonPlus2Avatars").tap(function(){
return startPage({
path: path("../pages/antonPlus/page2Avatars/page")
});
}), b("AntonPlus3NewFamily").tap(function(){
return startPage({
path: path("../pages/antonPlus/page3NewFamily/page")
});
}), b("AdventCalendarPromo").tap(function(){
return startPage({
path: path("../pages/adventCalendarPromo/page")
});
}));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/level/finishLevel/_shared/calcCharacter/calc.ls
(function(){
return function(o){
var characters, counter, character;
if (Store("finishPageCharacterCounter") == null) {
Store("finishPageCharacterCounter", 0);
}
characters = twitch({
de: inc("characters/characters-de")(),
en: inc("characters/characters-en")(),
en_gb: inc("characters/characters-en_gb")(),
fr: inc("characters/characters-fr")(),
es: inc("characters/characters-es")(),
pt: inc("characters/characters-pt")()
});
counter = Store("finishPageCharacterCounter");
if (!characters[counter]) {
counter = 0;
}
character = characters[counter];
if (++counter === characters.length) {
counter = 0;
}
Store("finishPageCharacterCounter", counter);
return character;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-de.ls
(function(){
return function(){
var characters, now, charactersXmas;
characters = [
{
pixi: "female",
voice: "f1_override_LM"
}, {
pixi: "male-asia",
voice: "m1_override_SK"
}, {
pixi: "male",
voice: "m1_override_MG"
}, {
pixi: "female-afro",
voice: "f1_override_TH"
}, {
pixi: "male-india",
voice: "m1_override_SK"
}, {
pixi: "male-afro",
voice: "m1_override_MG"
}, {
pixi: "female-asia",
voice: "f1_override_LM"
}, {
pixi: "female-india",
voice: "f1_override_TH"
}, {
pixi: "pig",
voice: "m1_override_SK"
}, {
pixi: "cow",
voice: "m1_override_MG"
}, {
pixi: "super-f",
voice: "f1_override_LM"
}, {
pixi: "super",
voice: "m1_override_SK"
}
];
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
charactersXmas = [
{
pixi: "xmas",
voice: "m1_override_SK"
}, {
pixi: "xmas-f",
voice: "m1_override_LM"
}
];
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-en.ls
(function(){
return function(){
var characters, now, charactersXmas;
characters = [
{
pixi: 'female',
voice: "f7Us_override_HF"
}, {
pixi: 'male-asia',
voice: "m5Us_override_JG"
}, {
pixi: 'male',
voice: "m5Us_override_JG"
}, {
pixi: 'female-afro',
voice: "f8Us_override_AX"
}, {
pixi: 'male-india',
voice: "m3Us_override_FB"
}, {
pixi: 'male-afro',
voice: "m3Us_override_FB"
}, {
pixi: 'female-asia',
voice: "f6Us_override_EK"
}, {
pixi: 'female-india',
voice: "f6Us_override_EK"
}, {
pixi: 'pig',
voice: "f8Us_override_MR"
}, {
pixi: 'cow',
voice: "m4Us_override_DR"
}, {
pixi: 'super-f',
voice: "f8Us_override_MR"
}, {
pixi: 'super',
voice: "m4Us_override_DR"
}
];
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
charactersXmas = [
{
pixi: 'xmas',
voice: "m4Us_override_DR"
}, {
pixi: 'xmas-f',
voice: "f8Us_override_AX"
}
];
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-en_gb.ls
(function(){
return function(){
var characters, now, charactersXmas;
if (engine.isDebug) {
characters = [
{
pixi: 'female',
voice: "f1_override_FE"
}, {
pixi: 'male-asia',
voice: "m1_override_JG"
}, {
pixi: 'male',
voice: "m2_override_OG"
}, {
pixi: 'female-afro',
voice: "f2_override_OM"
}, {
pixi: 'male-india',
voice: "m1_override_JG"
}, {
pixi: 'male-afro',
voice: "m2_override_OG"
}, {
pixi: 'female-asia',
voice: "f3_override_CH"
}, {
pixi: 'female-india',
voice: "f1_override_FE"
}, {
pixi: 'pig',
voice: "m1_override_JG"
}, {
pixi: 'cow',
voice: "m1_override_JG"
}, {
pixi: 'super-f',
voice: "f2_override_OM"
}, {
pixi: 'super',
voice: "m2_override_OG"
}
];
} else {
characters = [
{
pixi: 'female',
voice: "f1"
}, {
pixi: 'male-asia',
voice: "m1"
}, {
pixi: 'male',
voice: "m2"
}, {
pixi: 'female-afro',
voice: "f2"
}, {
pixi: 'male-india',
voice: "m3"
}, {
pixi: 'male-afro',
voice: "m1"
}, {
pixi: 'female-asia',
voice: "f3"
}, {
pixi: 'female-india',
voice: "f4"
}, {
pixi: 'pig',
voice: "f1"
}, {
pixi: 'cow',
voice: "m2"
}, {
pixi: 'super-f',
voice: "f2"
}, {
pixi: 'super',
voice: "m1GbWls"
}
];
}
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
if (engine.isDebug) {
charactersXmas = [
{
pixi: 'xmas',
voice: "m3"
}, {
pixi: 'xmas-f',
voice: "f3"
}
];
} else {
charactersXmas = [
{
pixi: 'xmas',
voice: "m3"
}, {
pixi: 'xmas-f',
voice: "f3"
}
];
}
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-es.ls
(function(){
return function(){
var characters, now, charactersXmas;
characters = [
{
pixi: 'female',
voice: "f1EsUs_override_VF"
}, {
pixi: 'male-asia',
voice: "m1_override_FV"
}, {
pixi: 'male',
voice: "m1_override_RG"
}, {
pixi: 'female-afro',
voice: "f1EsUs_override_AD"
}, {
pixi: 'male-india',
voice: "m1_override_ER"
}, {
pixi: 'male-afro',
voice: "m1_override_MP"
}, {
pixi: 'female-asia',
voice: "f1EsUs_override_VF"
}, {
pixi: 'female-india',
voice: "f1EsUs_override_AD"
}, {
pixi: 'pig',
voice: "m1_override_RK"
}, {
pixi: 'cow',
voice: "m1_override_RG"
}, {
pixi: 'super-f',
voice: "f1EsUs_override_AD"
}, {
pixi: 'super',
voice: "m1_override_MP"
}
];
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
charactersXmas = [
{
pixi: 'xmas',
voice: "m1_override_MP"
}, {
pixi: 'xmas-f',
voice: "f1EsUs_override_VF"
}
];
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-fr.ls
(function(){
return function(){
var characters, now, charactersXmas;
if (engine.isDebug) {
characters = [
{
pixi: 'female',
voice: "f1"
}, {
pixi: 'male-asia',
voice: "m1"
}, {
pixi: 'male',
voice: "m1"
}, {
pixi: 'female-afro',
voice: "f1"
}, {
pixi: 'male-india',
voice: "m1"
}, {
pixi: 'male-afro',
voice: "m1"
}, {
pixi: 'female-asia',
voice: "f1"
}, {
pixi: 'female-india',
voice: "f1"
}, {
pixi: 'pig',
voice: "m1"
}, {
pixi: 'cow',
voice: "m1"
}, {
pixi: 'super-f',
voice: "f1"
}, {
pixi: 'super',
voice: "m1"
}
];
} else {
characters = [
{
pixi: 'female',
voice: "f1"
}, {
pixi: 'male-asia',
voice: "m1"
}, {
pixi: 'male',
voice: "m1"
}, {
pixi: 'female-afro',
voice: "f1"
}, {
pixi: 'male-india',
voice: "m1"
}, {
pixi: 'male-afro',
voice: "m1"
}, {
pixi: 'female-asia',
voice: "f1"
}, {
pixi: 'female-india',
voice: "f1"
}, {
pixi: 'pig',
voice: "m1"
}, {
pixi: 'cow',
voice: "m1"
}, {
pixi: 'super-f',
voice: "f1"
}, {
pixi: 'super',
voice: "m1"
}
];
}
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
if (engine.isDebug) {
charactersXmas = [
{
pixi: 'xmas',
voice: "m1"
}, {
pixi: 'xmas-f',
voice: "f1"
}
];
} else {
charactersXmas = [
{
pixi: 'xmas',
voice: "m1"
}, {
pixi: 'xmas-f',
voice: "f1"
}
];
}
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcCharacter/characters/characters-pt.ls
(function(){
return function(){
var characters, now, charactersXmas;
if (engine.isDebug) {
characters = [
{
pixi: 'female',
voice: "f7"
}, {
pixi: 'male-asia',
voice: "m2"
}, {
pixi: 'male',
voice: "m7"
}, {
pixi: 'female-afro',
voice: "f8"
}, {
pixi: 'male-india',
voice: "m4"
}, {
pixi: 'male-afro',
voice: "m8"
}, {
pixi: 'female-asia',
voice: "f6"
}, {
pixi: 'female-india',
voice: "f7"
}, {
pixi: 'pig',
voice: "m9"
}, {
pixi: 'cow',
voice: "m2"
}, {
pixi: 'super-f',
voice: "f8"
}, {
pixi: 'super',
voice: "m2"
}
];
} else {
characters = [
{
pixi: 'female',
voice: "f11"
}, {
pixi: 'male-asia',
voice: "m2"
}, {
pixi: 'male',
voice: "m7"
}, {
pixi: 'female-afro',
voice: "f8"
}, {
pixi: 'male-india',
voice: "m5"
}, {
pixi: 'male-afro',
voice: "m2"
}, {
pixi: 'female-asia',
voice: "f6"
}, {
pixi: 'female-india',
voice: "f7"
}, {
pixi: 'pig',
voice: "m2"
}, {
pixi: 'cow',
voice: "m6"
}, {
pixi: 'super-f',
voice: "f7"
}, {
pixi: 'super',
voice: "m2"
}
];
}
now = inc("/lib/util/formatDate2/format")();
if (now.specialDays.isChristmasPeriod) {
if (engine.isDebug) {
charactersXmas = [
{
pixi: 'xmas',
voice: "m7"
}, {
pixi: 'xmas-f',
voice: "f7"
}
];
} else {
charactersXmas = [
{
pixi: 'xmas',
voice: "m2"
}, {
pixi: 'xmas-f',
voice: "f7"
}
];
}
characters = charactersXmas.concat(characters);
}
return characters;
};
})();
pages/level/finishLevel/_shared/calcFinishLevelEvent/calc.ls
(function(){
return function(){
return log.findLast(function(e){
return e.event === "finishLevel" && e.src === Store("sourceId");
});
};
})();
pages/level/finishLevel/_shared/calcText/calc.ls
(function(){
return function(o){
var quotes, k, v, word, text;
quotes = twitch({
de: inc("quotes/quotes-de")(),
en: inc("quotes/quotes-en")(),
en_gb: inc("quotes/quotes-en_gb")(),
fr: inc("quotes/quotes-fr")(),
es: inc("quotes/quotes-es")(),
pt: inc("quotes/quotes-pt")()
});
for (k in quotes) {
v = quotes[k];
quotes[k] = _.ensureArray(v);
}
word = o.isBulb
? ""
: o.isTest
? _.sample(o.score === 3
? quotes.perfectWords
: o.score > 1.8
? quotes.almostPerfectWords
: quotes.notGoodWords)
: _.sample(o.score === 3
? quotes.perfectWords
: o.score > 2.4
? quotes.almostPerfectWords
: o.score > 1.8
? quotes.averageWords
: quotes.notGoodWords);
text = _.sample(o.isBulb
? quotes.bulb
: o.isTest
? o.score === 3
? quotes.testPerfect
: o.score > 1.8
? quotes.testDone
: quotes.testFailed
: o.score === 3
? quotes.perfect
: o.score > 2.4
? quotes.almostPerfect
: o.score > 1.8
? quotes.average
: quotes.notGood);
return "" + word + "" + text + "";
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-de.ls
(function(){
return function(){
return {
notGoodWords: ["Glaub an dich!", "Nur Geduld!", "Jetzt nur nicht aufgeben!", "Gib nicht auf!", "Bleib am Ball!", "Nicht ärgern!", "Kopf hoch!", "Noch nicht ganz!"],
notGood: ["Beim nächsten Mal klappt es bestimmt besser.", "Das bekommst du noch besser hin.", "Übung macht's.", "Das kannst du besser.", "Probiere es gleich nochmal.", "Probiere es weiter.", "Da ist noch Luft nach oben.", "Alle Superhelden fangen klein an.", "Übung macht den Meister.", "Beim nächsten Versuch klappt es besser.", "Versuch's doch nochmal.", "Du kannst mehr, als du denkst.", "Es ist noch kein Meister vom Himmel gefallen.", "Am besten gleich nochmal."],
averageWords: ["Gut!", "Gut gemacht!", "Nicht übel!", "Schön!", "Das war gut!", "Nicht schlecht!", "Schon ziemlich gut!", "Das hast du gut gemacht!", "Gute Arbeit!"],
average: ["Nächstes Mal wird's noch besser.", "Jetzt bloß nicht das Ziel aus den Augen verlieren.", "Jetzt bloß nicht aufgeben.", "Aber ich weiß, du kannst mehr.", "Probiere es am besten gleich nochmal.", "Aber kannst du es noch besser?", "Es wird immer besser.", "Gleich nochmal.", "Probiere es gleich nochmal.", "Es wird immer besser.", "Bleib am Ball.", "Übe fleißig weiter.", "Noch ein bisschen üben und der 3. Stern ist da."],
almostPerfectWords: ["Geschafft!", "Schön!", "Yey!", "Kompliment!", "Toll!", "Gute Arbeit!", "Wow!", "Fast perfekt!", "Ding Dong!", "Nicht schlecht, Herr Specht!", "Hipp, hipp, Hurra!", "Glückwunsch!", "Sehr schön!"],
almostPerfect: ["Fast alles richtig.", "Das war stark.", "Das hast du wirklich gut gemacht.", "Das war raketenstark.", "Weiter so.", "Fast alles richtig.", "Das war stark.", "Weiter geht's.", "Du bist ein schlaues Köpfchen.", "Das bekommt nicht jeder hin.", "Du hast es drauf.", "Weiter so.", "Sauber abgeliefert.", "Bald hast du dir eine Krone verdient.", "Drei Sterne auf einmal.", "Drei Sterne sind da.", "Drei Sterne am Start."],
perfectWords: ["Super!", "Hurra!", "Yeah!", "Grandios!", "Fantastisch!", "Großartig!", "Astrein!", "Spitzenmäßig!", "Brillant!", "Prima!", "Perfekt!", "Fabelhaft!", "Ay Caramba!", "Bravo!", "Kompliment!", "Boom Shaka Laka!", "Genial!", "Strike!"],
perfect: ["Weiter so.", "Starke Leistung.", "Das ist nicht mehr zu toppen.", "Willkommen im Einsteinclub.", "Besser geht es nicht.", "Alles richtig.", "Du hast voll abgerockt.", "Das Lernen hat sich gelohnt.", "Du hast den Durchblick.", "Das war monstermäßig.", "Du kannst das.", "Du hast es geschafft.", "Die Krone steht dir.", "Das hast du spitze gemacht.", "Alles richtig.", "Fehlerfrei.", "Das war galaktisch gut.", "Du bist ein echter Profi."],
testFailed: ["Test leider nicht bestanden.", "Leider hast du den Test nicht geschafft.", "Test leider nicht geschafft.", "Leider hast du den Test nicht bestanden.", "Du hast den Test leider nicht bestanden.", "Du hast den Test leider nicht geschafft.", "Diesmal hast du den Test leider nicht bestanden.", "Diesmal hast du den Test leider nicht geschafft."],
testDone: ["Test geschafft.", "Test bestanden.", "Du hast den Test bestanden.", "Du hast den Test geschafft."],
testPerfect: ["Du hast den Test perfekt bestanden.", "Du hast den Test gerockt.", "Alles richtig im Test.", "Besser kann man den Test nicht machen.", "Du hast den Test fehlerfrei bestanden.", "Du hast den Test sehr gut bestanden.", "Test fehlerfrei geschafft.", "Test perfekt geschafft.", "Test sehr gut geschafft.", "Du hast den Test sehr gut gemacht.", "Du hast den Test mit 1+ erledigt."],
bulb: ["Geschafft.", "Erledigt.", "Fertig."]
};
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-en.ls
(function(){
return function(){
return {
notGoodWords: ["Believe in yourself!", "Patience!", "Keep at it!", "Don't give up!", "Stick at it!", "Don't worry!", "Chin up!", "Not quite!"],
notGood: ["Next time it'll be better for sure.", "You can do better than that.", "Practice makes perfect.", "Keep trying.", "Hang in there.", "Keep practicing.", "Everyone has to start somewhere.", "You'll do better next time.", "Just try again.", "You're better than you think.", "All it takes is practice."],
averageWords: ["Good!", "Well done!", "Good effort!", "Nice!", "That was great!", "Not bad!", "Pretty good!", "Nice job!", "Decent effort!", "Good job!", "Nice work!", "Nicely done!", "Pretty decent!"],
average: ["Next time you'll do even better.", "Keep your eyes on the prize.", "But I know you can do even better.", "But can you do even better?", "It gets better and better.", "Stick at it.", "Keep up the good work.", "A bit more practice and you'll get that 3rd star."],
almostPerfectWords: ["You did it!", "Nice!", "Yay!", "Great!", "Wow!", "Almost perfect!", "Hip hip hooray!", "Congratulations!", "Very nice!"],
almostPerfect: ["You got almost everything right.", "That's the way to do it.", "You did really well.", "Couldn't have done it better myself.", "More of the same.", "You make it look easy.", "You must have been practicing.", "Onwards and upwards.", "Aren't you clever?", "Keep up the good work.", "You've got the hang of this.", "Soon you'll have earned that crown.", "Soon that crown will be yours."],
perfectWords: ["Super!", "Hooray!", "Yeah!", "Terrific!", "Fantastic!", "Amazing!", "Super duper!", "Excellent!", "Brilliant!", "Outstanding!", "Perfect!", "Bravo!", "Strike!"],
perfect: ["Keep it up.", "Great effort.", "You can't beat that.", "You can't do better than that.", "You got everything right.", "You rocked.", "All that learning was worth it.", "You know what you're doing.", "You did it.", "The crown suits you.", "Flawless.", "You're a real professional."],
testFailed: ["Unfortunately you've failed the test."],
testDone: ["Test completed.", "Test passed.", "You've passed the test.", "You've completed the test."],
testPerfect: ["You can't do the test any better.", "You've passed the test with no mistakes.", "You've passed the test with an A+."],
bulb: ["Done"]
};
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-en_gb.ls
(function(){
return function(){
return {
notGoodWords: ["Believe in yourself!", "Patience!", "Keep at it!", "Don't give up!", "Don't worry!", "Chin up!", "Not quite!"],
notGood: ["Next time it'll be better for sure.", "You can do better than that.", "Practice makes perfect.", "Keep trying.", "Keep practising.", "Everyone has to start somewhere.", "You'll do better next time.", "Just try again.", "You're better than you think.", "All it takes is practice."],
averageWords: ["Good!", "Well done!", "Good effort!", "Nice!", "That was great!", "Not bad!", "Pretty good!", "Nice job!", "Decent effort!", "Good job!", "Nice work!", "Nicely done!", "Pretty decent!"],
average: ["Next time you'll do even better.", "Keep your eyes on the prize.", "But I know you can do even better.", "But can you do even better?", "It gets better and better.", "Keep up the good work.", "A bit more practice and you'll get that 3rd star."],
almostPerfectWords: ["You did it!", "Nice!", "Yay!", "Great!", "Wow!", "Almost perfect!", "Hip hip hooray!", "Congratulations!", "Very nice!"],
almostPerfect: ["You got almost everything right.", "That's the way to do it.", "You did really well.", "Couldn't have done it better myself.", "More of the same.", "You make it look easy.", "You must have been practising.", "Onwards and upwards.", "Aren't you clever?", "Keep up the good work.", "You've got the hang of this.", "Soon you'll have earned that crown.", "Soon that crown will be yours."],
perfectWords: ["Super!", "Hooray!", "Yeah!", "Terrific!", "Fantastic!", "Amazing!", "Super duper!", "Excellent!", "Brilliant!", "Outstanding!", "Perfect!", "Bravo!"],
perfect: ["Keep it up.", "Great effort.", "You can't beat that.", "You can't do better than that.", "You got everything right.", "You rocked.", "All that learning was worth it.", "You know what you're doing.", "You did it.", "The crown suits you.", "Flawless.", "You're a real professional."],
testFailed: ["Unfortunately you've failed the test."],
testDone: ["Test completed.", "Test passed.", "You've passed the test.", "You've completed the test."],
testPerfect: ["You can't do the test any better.", "You've passed the test with no mistakes.", "You've passed the test with flying colours."],
bulb: ["Done"]
};
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-es.ls
(function(){
return function(){
return {
notGoodWords: ["¡Mantén la cabeza en alto!", "¡Paciencia!", "¡Manos a la obra!", "¡No pasa nada!", "¡Sigue intentando!", "¡Tú puedes!", "¡No te desanimes!", "¡Ánimo!"],
notGood: ["La próxima vez seguramente lo harás mejor.", "Acabas de mejorar y seguirás mejorando.", "La práctica hace al maestro.", "Poquito a poquito se llena el jarrito.", "Paso a paso se llega muy lejos.", "Inténtalo de nuevo.", "La práctica es el camino al éxito.", "Todos los superhéroes se tropezaban al principio.", "Prueba otra vez, de una vez.", "La próxima vez te saldrá mejor.", "Puedes mucho más de lo que tú crees.", "Todo es cuestión de práctica.", "Los errores nos enseñan a ser mejores.", "Los aciertos y los errores nos ayudan a ser mejores.", "Sólo tienes que seguir practicando."],
averageWords: ["¡Bien!", "¡Bien hecho!", "¡Nada mal!", "¡Vamos bien!", "¡Así se hace!", "¡Vas por buen camino!", "¡Buen trabajo!", "¡Por ahí va!", "¡Bien jugado!"],
average: ["A la siguiente te saldrá todavía mejor.", "Mantén tu meta en la mira.", "Mantén la motivación en alto.", "Ahora hazlo otra vez.", "Arriba el entusiasmo y la concentración.", "¿Lo puedes hacer mejor?", "Estás mejorando.", "Prueba de nuevo.", "No bajes la guardia.", "Vas cada vez mejor.", "Síguele.", "Sigue practicando.", "Practica un poco más para juntar las tres estrellas."],
almostPerfectWords: ["¡Lo lograste!", "¡Así se hace!", "¡Lo tienes!", "¡Mis respetos!", "¡Excelente!", "¡Buen trabajo!", "¡Wow!", "¡Lo conseguiste!", "¡Nada mal!", "¡Bravo!", "¡Felicidades!", "¡Estupendo!"],
almostPerfect: ["Casi todo bien.", "Te estás concentrando mucho.", "Sigue así.", "Casi ningún error.", "No te frenes.", "Se nota que has practicado mucho.", "No cualquiera.", "Vas por muy buen camino.", "Aquí huele a campeón.", "Estás aprendiendo mucho.", "Te estás acercando a la corona.", "Tres estrellas de una sola vez.", "Tres estrellas.", "Estas tres estrellas son todas tuyas."],
perfectWords: ["¡Fabuloso!", "¡Magnífico!", "¡Fenomenal!", "¡Grandioso!", "¡Fantástico!", "¡Sensacional!", "¡Impecable!", "¡Brillante!", "¡Increíble!", "¡Insuperable!", "¡Maravilloso!", "¡Ay caramba!", "¡Vientos huracanados!", "¡Goool!", "¡Genial!", "¡Sensacional!", "¡Tirititíto!", "¡Fantabuloso!"],
perfect: ["Sigue con esa concentración.", "No cometiste ni un solo error.", "Ya eres parte del club de Einstein.", "Arrasaste con todo.", "Ya te lo sabes.", "Ya te lo aprendiste.", "Lo hiciste como un profesional.", "Tú sí que puedes.", "Qué bien te queda esa corona.", "No te equivocaste ni una vez.", "Ya sabes cómo se hace.", "Qué bien te lo sabes."],
testFailed: ["No aprobaste el test.", "No lograste pasar el test.", "Desafortunadamente, no lograste pasar el test.", "Desafortunadamente, no aprobaste el test.", "Lamentablemente, no aprobaste el test.", "Lamentablemente, no lograste pasar el test", "Esta vez no lograste pasar el test.", "Esta vez no aprobaste el test."],
testDone: ["Pasaste el test.", "Aprobaste el test."],
testPerfect: ["Pasaste el test a la perfección.", "Aprobaste el test con cero errores.", "Ni un solo error.", "Este test no se puede hacer mejor.", "Aprobaste el test sin un sólo error.", "Lograste pasar el test sin errores.", "Test resuelto a la perfección.", "Resolviste el test a la perfección.", "Sacaste 10."],
bulb: ["Listo.", "Resuelto."]
};
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-fr.ls
(function(){
return function(){
return {
notGoodWords: ["Garde confiance !", "Patience !", "N'abandonne pas !", "Ne t'arrête pas là !", "Ne baisse pas les bras !", "Ne t'inquiète pas !", "Garde la tête haute !", "Ça va venir !"],
notGood: ["Ce sera mieux la prochaine fois.", "Tout est question de pratique.", "Continue à t'entraîner.", "Tu peux faire mieux.", "Réessaye.", "Tu vas t'améliorer.", "Il faut bien commencer quelque part.", "C'est en forgeant qu'on devient forgeron.", "La prochaine fois tu feras mieux.", "Allez, on réessaye.", "On sait que tu peux faire mieux.", "Il suffit de s'entraîner."],
averageWords: ["Bien !", "Bien joué !", "Bel effort !", "C'est bien !", "C'était bien !", "Pas mal !", "Plutôt bien !", "Beau travail !", "Pas mal du tout !", "Tu es sur la bonne voie !"],
average: ["Tu feras encore mieux la prochaine fois.", "Garde le cap.", "Continue sur ta lancée.", "On sait que tu peux faire encore mieux.", "Réessaye pour faire encore mieux.", "Tu penses pouvoir faire mieux ?", "C'est de mieux en mieux.", "Encore une fois ?", "On recommence ?", "Tu peux encore t'améliorer.", "On ne lâche rien.", "Continue comme ça.", "Encore un petit effort et la 3e étoile est pour toi."],
almostPerfectWords: ["C'est dans la poche !", "Magnifique !", "Youhou !", "Félicitations !", "Super !", "Beau travail !", "Waouh !", "Presque parfait !", "Facile !", "Hip, hip, hip, hourra !", "Félicitations !", "Très bien !"],
almostPerfect: ["Tu as presque tout réussi.", "Tu as fait fort.", "Tu as fait très fort.", "Impressionnant.", "Continue comme ça.", "C'était super.", "Ne t'arrête pas là !", "Il y en a là-dedans !", "Ne t'arrête pas en si bon chemin.", "Tu tiens le bon bout.", "Ce n'est que le début.", "Tu mériteras bientôt ta couronne.", "La couronne sera bientôt à toi."],
perfectWords: ["Joli !", "Hourra !", "Oh yeah !", "Extra !", "Fantastique !", "Génial !", "La classe !", "Excellent !", "Sensationnel !", "Exceptionnel !", "Parfait !", "C'est fabuleux !", "On t'applaudit !", "Bravo !", "Tous nos compliments !", "Boom !", "Quel talent !", "Bingo !", "Impressionnant !"],
perfect: ["Continue comme ça.", "Belle performance.", "Tu ne pouvais pas faire mieux.", "Tu as ta place chez les pros.", "Il n'y a pas meilleur score.", "Tu as tout juste.", "Tu as assuré.", "Ça valait le coup d'apprendre.", "Tu maîtrises.", "Rien ne peut t'arrêter.", "Tu gères.", "Tu as réussi.", "La couronne te va bien.", "Rien à redire.", "Tout est juste.", "Impeccable.", "C'est du travail de pro.", "Ne change rien.", "C'est un sans faute."],
testFailed: ["Tu n'as malheureusement pas réussi.", "C'est raté pour cette fois.", "Malheureusement, tu as raté le test cette fois-ci."],
testDone: ["Test réussi.", "Tu as réussi le test."],
testPerfect: ["Tu as réussi le test à la perfection.", "Tu as assuré pour le test.", "Test réussi haut la main.", "Ton résultat ne pourrait pas être meilleur.", "Tu as réussi le test sans faire la moindre erreur.", "Test 100 % réussi.", "Test réussi : 20/20."],
bulb: ["Fait"]
};
};
})();
pages/level/finishLevel/_shared/calcText/quotes/quotes-pt.ls
(function(){
return function(){
return {
notGoodWords: ["Mantenha a cabeça erguida!", "Tenha paciência!", "Mãos à obra!", "Está tudo bem!", "Continue tentando!", "Você consegue!", "Não desanime!", "Anime-se!"],
notGood: ["Da próxima vez será melhor!", "Tente novamente!", "A prática é o caminho para o sucesso!", "Todos os super-heróis tropeçaram no início!", "Tente mais uma vez.", "Da próxima vez será melhor.", "Você é capaz de muito mais do que imagina.", "É tudo uma questão de prática.", "Nós aprendemos com nossos erros.", "Você só precisa praticar mais um pouco."],
averageWords: ["Muito bem!", "Nada mal!", "Você foi muito bem!", "É assim que se faz!", "Você está no caminho certo!", "Bom trabalho!"],
average: ["Da próxima vez será ainda melhor.", "Mantenha o foco no seu objetivo.", "Mantenha sua motivação nas alturas!", "Mantenha seu entusiasmo e concentração.", "Você está cada vez melhor", "Mantenha a animação!", "Siga com esse entusiasmo!", "Continue praticando!", "Pratique mais um pouco para conseguir as três estrelas."],
almostPerfectWords: ["Você conseguiu!", "É isso aí!", "Parabéns!", "Excelente!", "Bom trabalho!", "Uau!", "Ótimo!"],
almostPerfect: ["Quase tudo perfeito!", "Você está se concentrando bem!", "Continue neste ritmo!", "Você tem praticado muito!", "Você está no caminho certo!", "Você está aprendendo muito!"],
perfectWords: ["Fabuloso!", "Magnífico!", "Fenomenal!", "Ótimo!", "Fantástico!", "Impecável!", "Brilhante!", "Que maravilha!", "Sensacional!", "A coroa é sua!", "Uau!"],
perfect: ["Mantenha essa concentração!", "Você acertou tudo!", "Você conseguiu!", "Você já está profissional!", "Você aprendeu direitinho!", "Três estrelas!"],
testFailed: ["Infelizmente você não passou no teste.", "Desta vez você não passou no teste.", "Que pena, não foi desta vez."],
testDone: ["Você acertou toda a prova!", "Você passou no teste!"],
testPerfect: ["Você passou no teste com zero erros!", "Nem um único erro!", "Este teste não poderia ter sido feito melhor!", "Você passou no teste sem um único erro!", "Você conseguiu!", "Você resolveu o teste perfeitamente!", "Você tirou 10!", "Nota 10 para você!"],
bulb: ["Pronto!", "Resolvido!"]
};
};
})();
pages/level/finishLevel/_shared/playSoundText/play.ls
(function(){
return function(o, loadOnly){
var downloadSound, onLoaded;
downloadSound = function(){
return inc("/lib/util/downloadSound/download")({
fileFolder: "media/levelFinish/_sounds",
voiceLang: engine.guiLanguage.split("_")[0],
voice: o.character.voice,
text: o.text.replace(/\ \;/g, ""),
onError: function(){},
onOffline: function(){},
onLoaded: onLoaded
});
};
onLoaded = function(sound){
if (sound.loadDuration < 1500 && loadOnly !== true) {
return sound.play();
}
};
return downloadSound();
};
})();
pages/level/finishLevel/_t.ls
(function(){
return {
totalMistakes: {
de: "$1 Fehler",
en: "$1 mistakes",
fr: "$1 erreurs",
es: "$1 errores",
pt: "$1 erros"
},
again: {
de: "Nochmal",
en_gb: "Practise again",
en: "Practice again",
fr: "À revoir",
es: "Otra vez",
pt: "Tentar de novo"
}
};
})();
pages/level/finishLevel/bulb/bulb.ls
(function(){
return function(){
var svg, lights, i$, len$;
inc("/lib/util/soundEffectPlay/soundEffectPlay")("finish4");
svg = Svg({
svg: path("/lib/svg/shape/bulb.svg"),
color: Color.yellow[600],
width: "140px",
height: "140px"
}).animation({
css: {
transform: "scale(1.1, 1.1) translateY(-0.5em)"
},
autoReverse: true,
duration: 300
});
lights = [svg.findFirst(".light1").hide(), svg.findFirst(".light2").hide(), svg.findFirst(".light3").hide(), svg.findFirst(".light4").hide(), svg.findFirst(".light5").hide(), svg.findFirst(".light6").hide()];
for (i$ = 0, len$ = lights.length; i$ < len$; ++i$) {
(fn$.call(this, i$, lights[i$]));
}
return svg;
function fn$(i, light){
setTimeout(function(){
return light.fadeIn();
}, i * 150);
}
};
})();
pages/level/finishLevel/buttonContinue/button.ls
(function(){
return function(level){
var up, longDown;
up = function(){
return inc("../../afterFinish/start/start")(level);
};
longDown = function(){
return inc("../../afterFinish/startDebugPopup/popup")(level);
};
return Button({
icon: path("/lib/svg/icon/arrow-right-small.svg"),
label: T("continueButton"),
iconPosition: "right"
}).css({
margin: "0.25em"
}).tap({
up: up,
longDown: engine.isDebug ? longDown : void 8
}).addClass("keyManager-enter").bind("keyManager", up).attr({
"aria-label": T("continueButton"),
role: "button"
});
};
})();
pages/level/finishLevel/buttonRepeat/button.ls
(function(){
return function(level){
var click;
click = function(){
return startPage({
history: -1
});
};
return Button({
icon: path("/lib/svg/icon/refresh.svg"),
action: click,
key: 49
}).css({
margin: "0.25em",
marginTop: level.type === "bulb" ? "1em" : void 8
}).attr({
"aria-label": T("again"),
role: "button"
});
};
})();
pages/level/finishLevel/calcCoins/_shared/setNextTotalStarsNeeded/set.ls
(function(){
return function(totalStars, starsUntilNextCoin){
var totalStarsNeeded;
totalStars == null && (totalStars = 0);
starsUntilNextCoin == null && (starsUntilNextCoin = 6);
if (starsUntilNextCoin === 0) {
return;
}
totalStarsNeeded = totalStars - totalStars % starsUntilNextCoin + starsUntilNextCoin;
log.log({
event: "setNextCoinTotalStars",
value: totalStarsNeeded
});
return totalStarsNeeded;
};
})();
pages/level/finishLevel/calcCoins/calcCoins.ls
(function(){
return function(){
var coinData;
coinData = inc("firstLevelFinishCoin/calc")();
if (!coinData.gotCoin) {
coinData = inc("newCoin/calc")();
}
if (coinData.gotCoin) {
inc("/data/user/coin/add/add")();
}
return coinData;
};
})();
pages/level/finishLevel/calcCoins/firstLevelFinishCoin/calc.ls
(function(){
return function(){
var isFirstLevelFinish;
isFirstLevelFinish = log.list("finishLevel").length <= 1 && log.findLast("adjustCoins") == null;
if (!isFirstLevelFinish) {
return {
type: "firstLevelFinishCoin",
gotCoin: false
};
}
inc("../_shared/setNextTotalStarsNeeded/set")();
return {
type: "firstLevelFinishCoin",
gotCoin: true,
pagePath: path("/pages/level/afterFinish/pages/newCoin/addCoin/page"),
pageParams: {
isFirstCoinEver: true
}
};
};
})();
pages/level/finishLevel/calcCoins/newCoin/calc.ls
(function(){
return function(){
var ud, totalStars, totalStarsNeededForCoin, disabledCoinsPlanInfos, coinsDisabled;
ud = inc("/data/user/calcUserDescription/calc")();
totalStars = ud.totalStars + ud.totalTrophies;
totalStarsNeededForCoin = inc("totalStarsNeeded/totalStarsNeeded")(totalStars);
inc("debugMissingStars/debug")(totalStarsNeededForCoin, totalStars);
disabledCoinsPlanInfos = inc("/data/group/calcDisabledCoinsPlanInfos/calc")({
role: "pupil"
});
coinsDisabled = inc("calcCoinsDisabled/calc")(disabledCoinsPlanInfos);
if (coinsDisabled.disabled) {
inc("setTotalStarsNeededCoinsDisabled/set")(totalStarsNeededForCoin);
if (coinsDisabled.reason === "disabledCoinsPlan" && inc("calcShowDisabledCoinsPage/calc")(totalStars)) {
return {
type: "newCoin",
gotCoin: false,
pagePath: path("/pages/level/afterFinish/pages/disabledCoins/page"),
pageParams: {
disabledCoinsPlanInfos: disabledCoinsPlanInfos
}
};
} else {
return {
type: "newCoin",
gotCoin: false
};
}
} else {
if (totalStars < totalStarsNeededForCoin) {
return {
type: "newCoin",
gotCoin: false
};
} else {
inc("../_shared/setNextTotalStarsNeeded/set")(totalStars);
return {
type: "newCoin",
gotCoin: true,
pagePath: path("/pages/level/afterFinish/pages/newCoin/addCoin/page")
};
}
}
};
})();
pages/level/finishLevel/calcCoins/newCoin/calcCoinsDisabled/calc.ls
(function(){
return function(disabledCoinsPlanInfos){
var project, ref$, ref1$, ref2$, projects, i$, ref3$, len$, p;
project = (ref$ = log.findLast("finishLevel")) != null ? (ref1$ = ref$.puid) != null ? (ref2$ = ref1$.split("/")) != null ? ref2$[0] : void 8 : void 8 : void 8;
projects = [];
for (i$ = 0, len$ = (ref3$ = _.values(disabledCoinsPlanInfos)).length; i$ < len$; ++i$) {
p = ref3$[i$];
projects = projects.concat(p);
}
return {
disabled: _.includes(projects, project),
reason: "disabledCoinsPlan"
};
};
})();
pages/level/finishLevel/calcCoins/newCoin/calcShowDisabledCoinsPage/calc.ls
(function(){
return function(totalStars){
var totalStarsNeeded, ref$;
totalStarsNeeded = ((ref$ = log.findLast("starsNeededForDisabledCoinsPage")) != null ? ref$.value : void 8) || 0;
if (totalStarsNeeded <= totalStars) {
log.log({
event: "starsNeededForDisabledCoinsPage",
value: totalStars - totalStars % 6 + 6
});
return true;
}
return false;
};
})();
pages/level/finishLevel/calcCoins/newCoin/debugMissingStars/debug.ls
(function(){
return function(totalStarsNeededForCoin, totalStars){
var diff;
diff = totalStarsNeededForCoin - totalStars;
if (diff > 6) {
return typeof log != 'undefined' && log !== null ? log.log({
event: "debugMissingStars",
totalStars: totalStars,
totalStarsNeededForCoin: totalStarsNeededForCoin,
diff: diff,
version: 2
}) : void 8;
}
};
})();
pages/level/finishLevel/calcCoins/newCoin/setTotalStarsNeededCoinsDisabled/set.ls
(function(){
return function(totalStarsNeededForCoin){
var lastLevelFinish, lastScore, ref$, lastLevelFinishs, prevLastScore, ref1$, diff;
lastLevelFinish = log.findLast("finishLevel");
lastScore = (ref$ = lastLevelFinish != null ? lastLevelFinish.score : void 8) != null ? ref$ : 0;
lastScore = Math.floor(+lastScore);
lastLevelFinishs = log.list({
event: "finishLevel",
puid: lastLevelFinish != null ? lastLevelFinish.puid : void 8
});
prevLastScore = (ref$ = (ref1$ = lastLevelFinishs[lastLevelFinishs.length - 2]) != null ? ref1$.score : void 8) != null ? ref$ : 0;
prevLastScore = Math.floor(+prevLastScore);
diff = Math.max(0, lastScore - prevLastScore);
return inc("../../_shared/setNextTotalStarsNeeded/set")(totalStarsNeededForCoin, diff);
};
})();
pages/level/finishLevel/calcCoins/newCoin/totalStarsNeeded/totalStarsNeeded.ls
(function(){
return function(totalStars){
var starsNeeded, ref$, lastStars, ref1$, ref2$;
starsNeeded = (ref$ = log.findLast("setNextCoinTotalStars")) != null ? ref$.value : void 8;
if (starsNeeded == null) {
lastStars = (ref1$ = (ref2$ = log.findLast("finishLevel")) != null ? ref2$.score : void 8) != null ? ref1$ : 0;
starsNeeded = inc("../../_shared/setNextTotalStarsNeeded/set")(totalStars - Math.floor(+lastStars));
}
return starsNeeded;
};
})();
pages/level/finishLevel/icons/icon/icon.ls
(function(){
return function(icon, w, i, score){
var f, div, iconDiv;
f = _.floor(score) >= i + 1
? 1
: score - _.floor(score);
div = Div({
marginRight: w * 0.05 + "em",
width: w + "em",
height: w + "em",
display: "inline-block"
}).html(Div({
overflow: "hidden",
width: w * f + "em"
}).html(iconDiv = SvgIcon({
svg: icon,
color: "transparent",
size: w + "em"
})));
div.setColor = iconDiv.setColor;
return div;
};
})();
pages/level/finishLevel/icons/icons.ls
(function(){
return function(o){
var w, s, p, icons, backIcons, icon, play, div, i, crownIcon;
w = 3;
s = 275;
p = 1;
icons = [];
backIcons = [];
icon = o.isTest
? path("/lib/svg/shape/trophy.svg")
: path("/lib/svg/shape/star.svg");
play = function(done){
return inc("play/play")(o, icons, backIcons, crownIcon, w, s, done);
};
div = Div({
width: w * 3.15 + "em",
height: w + "em",
margin: "0 auto 0.7em",
marginTop: !o.isTest ? "-0.3em" : void 8
}).html(Div({
position: "absolute",
top: 0,
left: 0,
whiteSpace: "nowrap"
}).html((function(){
var i$, results$ = [];
for (i$ = 0; i$ <= 2; ++i$) {
i = i$;
results$.push(backIcons[i] = SvgIcon({
svg: icon,
color: Color.grey[400],
size: w + "em"
}).css({
marginRight: w * 0.05 + "em"
}));
}
return results$;
}())), Div({
position: "absolute",
top: 0,
left: 0,
whiteSpace: "nowrap"
}).html((function(){
var i$, results$ = [];
for (i$ = 0; i$ <= 2; ++i$) {
i = i$;
results$.push(icons[i] = inc("icon/icon")(icon, w, i, o.score));
}
return results$;
}())), crownIcon = SvgIcon({
svg: path("/lib/svg/shape/crown.svg"),
color: Color.yellow[700],
size: w * 0.92 + "em"
}).css({
position: "absolute",
top: "-" + w * 1 + "em",
right: "-" + w * 0.5 + "em",
opacity: 0,
transform: "rotate(30deg) scale(1.2)",
transition: "all " + s * 1 + "ms linear"
}));
div.play = play;
return div;
};
})();
pages/level/finishLevel/icons/play/play.ls
(function(){
return function(o, icons, backIcons, crownIcon, w, s, done){
var playSoundEffect, color;
playSoundEffect = inc("/lib/util/soundEffectPlay/soundEffectPlay");
color = o.isTest
? Color.yellow[600]
: Color.green[500];
setTimeout(function(){
playSoundEffect("finish1");
icons[0].setColor(color);
icons[0].css({
transform: "scale(1.2)"
});
setTimeout(function(){
return icons[0].css({
transform: "scale(1)",
transition: "all " + s / 4 + "ms linear"
});
}, 100);
if (o.score <= 1) {
return setTimeout(done, s * 1);
}
}, s * 0);
if (o.score > 1) {
setTimeout(function(){
playSoundEffect("finish2");
icons[1].setColor(color);
icons[1].css({
transform: "scale(1.2)"
});
setTimeout(function(){
return icons[1].css({
transform: "scale(1)",
transition: "all " + s / 4 + "ms linear"
});
}, 100);
if (o.score <= 2) {
return setTimeout(done, s * 1);
}
}, s * 1);
}
if (o.score > 2) {
setTimeout(function(){
playSoundEffect("finish3");
icons[2].setColor(color);
icons[2].css({
transform: "scale(1.2)"
});
setTimeout(function(){
return icons[2].css({
transform: "scale(1)",
transition: "all " + s / 4 + "ms linear"
});
}, 100);
if (o.score < 3) {
return setTimeout(done, s * 1);
}
}, s * 1.7);
}
if (o.score === 3) {
return setTimeout(function(){
playSoundEffect("finish4");
crownIcon.css(o.isTest
? {
top: "-" + w * 0.55 + "em",
right: "-" + w * 0.25 + "em",
transform: "rotate(30deg) scale(1)",
opacity: 1
}
: {
top: "-" + w * 0.3 + "em",
right: "-" + w * 0.15 + "em",
transform: "rotate(30deg) scale(1)",
opacity: 1
});
return setTimeout(done, s * 1);
}, s * 3.5);
}
};
})();
pages/level/finishLevel/linkReview/debugPopup/popup.ls
(function(){
return function(o){
var b, div, popup;
b = function(s){
return Button(s).css({
display: "block",
margin: "0 auto 0.5em",
maxWidth: "15em"
});
};
div = Div({
margin: "2em"
}).html(inc("title/title")(), b("Review").tap(function(){
return inc("/pages/level/reviewOrPreviewPopup/popup")({
level: o.level,
popupType: "review"
});
}), b("Preview").tap(function(){
return inc("/pages/level/reviewOrPreviewPopup/popup")({
level: o.level,
popupType: "preview"
});
}), b("PreviewDocumentationDiv").tap(function(){
return inc("/lib/gui/popup/popup")({
html: inc("/pages/level/previewDocumentationDiv/div")(o.level)
});
}), b("PreviewNoUser").tap(function(){
return inc("/pages/content/block/levels/level/_shared/actions/previewNoUser/preview")(o);
}));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/level/finishLevel/linkReview/debugPopup/title/title.ls
(function(){
return function(){
return Div({
marginBottom: "1em"
}).html(SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
marginRight: "0.3em"
}), "Wähle eine Visualisierungsart für das Level aus:");
};
})();
pages/level/finishLevel/linkReview/link.ls
(function(){
return function(o){
var tap, longDown, linkDiv;
tap = function(){
return inc("/pages/level/reviewOrPreviewPopup/popup")({
level: o.level,
popupType: "review"
});
};
longDown = function(){
return inc("debugPopup/popup")(o);
};
return Div().html(linkDiv = inc("/lib/gui/link/link")({
label: T("myResults"),
iconColor: "black"
}).css({
margin: "0.3em 0 1em 0.2em"
}).tap({
up: tap,
longDown: engine.isDebug ? longDown : void 8
}).attr({
"aria-label": T("myResults"),
role: "button"
}));
};
})();
pages/level/finishLevel/loadLevel/load.ls
(function(){
return function(page, onDone){
return inc("/lib/util/loadLevel/load")({
path: page.params.levelPath,
onLoaded: onDone,
onError: function(level){
return inc("/lib/offline/offlinePageWithLogging/offlinePage")({
page: page,
reason: "levelFinishLoadLevelFailed",
buttonClick: function(){
return startPage({
history: function(path){
return !_.includes(path, "/level");
}
});
},
buttonLabel: T("continueButton"),
reasonDetails: {
level: level
},
isTechnicalProblem: true
});
}
});
};
})();
pages/level/finishLevel/page.ls
(function(){
return function(page){
var charactersDisabled, ref$;
charactersDisabled = ((ref$ = log.findLast("setLevelFinishPageStyle")) != null ? ref$.value : void 8) === "simple";
page.finishLevelEvent = inc("_shared/calcFinishLevelEvent/calc")();
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarLevelFinish/topbar")(page);
},
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescriptionWithLevel/description")(page);
},
start: function(){
var o, loadLevel, create, start;
o = {
page: page
};
loadLevel = function(){
return inc("loadLevel/load")(page, create);
};
create = function(level){
o.level = level;
o.isBulb = level.type === "bulb";
o.isTest = level.type === "test";
o.score = page.finishLevelEvent.score;
o.corrects = page.finishLevelEvent.corrects;
o.total = page.finishLevelEvent.total;
o.coinData = inc("calcCoins/calcCoins")();
app.animateThisLevelScore = page.params.levelPath;
o.text = inc("_shared/calcText/calc")(o);
o.character = inc("_shared/calcCharacter/calc")(o);
page.append(o.isBulb
? inc("bulb/bulb")()
: !charactersDisabled ? [o.pixi = inc("pixiSpineCanvas/pixiSpineCanvas")(o), engine.isDebug ? inc("voice/voice")(o.character.voice) : void 8, inc("text/text")(o)] : void 8, !o.isBulb ? o.icons = inc("icons/icons")(o) : void 8, !o.isBulb ? inc("linkReview/link")(o) : void 8, Div({
marginBottom: "3em"
}).html(inc("buttonRepeat/button")(o), inc("buttonContinue/button")(o)));
return start();
};
start = function(){
if (!charactersDisabled) {
inc("_shared/playSoundText/play")(o, true);
}
if (charactersDisabled && !o.isBulb) {
return setTimeout(function(){
if (app.currentPage !== page) {
return;
}
return o.icons.play();
}, 1000);
} else if (o.isBulb) {
return setTimeout(o.text.play, 1000);
} else {
return setTimeout(function(){
if (app.currentPage !== page) {
return;
}
return o.icons.play(function(){
if (app.currentPage !== page) {
return;
}
o.pixi.start();
return inc("_shared/playSoundText/play")(o);
});
}, 1000);
}
};
return loadLevel();
}
};
};
})();
pages/level/finishLevel/pixiSpineCanvas/pixiSpineCanvas.ls
(function(){
return function(o){
var isReady, start, onDone, emInPx, pixiSize, pixiScale, spineCanvas;
isReady = false;
start = function(){
var animation;
animation = o.score === 3
? _.sample(['party', 'dance'])
: o.score > 1.8 ? _.sample(['cool', 'thumbs-up']) : 'damn';
if (!isReady) {
if (spineCanvas.isVisible()) {
setTimeout(start, 500);
}
return;
}
return spineCanvas.spine.state.setAnimation(0, animation, true);
};
onDone = function(){
isReady = true;
return spineCanvas.spine.state.setAnimation(0, "idle", true);
};
emInPx = inc("/lib/util/emToPx/emToPx")();
pixiSize = emInPx * 11.5;
pixiScale = pixiSize / 200 * 0.3;
spineCanvas = inc("/lib/gui/pixiSpineCanvas/pixiSpineCanvas")({
width: pixiSize,
height: pixiSize,
projectFolder: "/../sprites/human1",
skin: o.character.pixi,
scale: pixiScale,
onDone: onDone
}).css({
position: "relative",
display: "inline-flex"
}).onDomRemove(function(){
return this.remove();
});
spineCanvas.start = start;
return spineCanvas;
};
})();
pages/level/finishLevel/text/text.ls
(function(){
return function(o){
var div;
return div = Div().css({
margin: "0 1em 1em"
}).html(o.text);
};
})();
pages/level/finishLevel/voice/voice.ls
(function(){
return function(voice){
return Div().css({
display: "flex",
marginTop: "-0.8em",
marginBottom: "0.4em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/debug.svg"),
color: Color.grey[500],
width: "0.6em",
height: "0.6em",
flex: "0 auto"
}).css({
marginRight: "0.2em"
}), Div().css({
fontSize: "0.6em",
color: Color.grey[500],
flex: "0 auto"
}).html(voice));
};
})();
pages/level/play/checkMedia/check.ls
(function(){
return function(page, onDone){
if (engine.isMobileApp && !deviceLog['var']("loadDevelopContent") && !inc("/lib/util/isOnline/isOnline")()) {
return inc("checkMediaFilesOfflineAvailable/check")({
level: page.level,
onOk: onDone,
onOffline: function(details){
return page.showOffline({
reason: "offline-checkMediaFilesOfflineAvailable",
reasonDetails: details
});
}
});
} else {
return onDone();
}
};
})();
pages/level/play/checkMedia/checkMediaFilesOfflineAvailable/check.ls
(function(){
return function(p){
var fileIds, missingFileIds, totalDone, calcFileIds, checkFilesExist, onFileCheckDone, finish;
fileIds = [];
missingFileIds = [];
totalDone = 0;
calcFileIds = function(){
var m, a;
m = p.level.mediaFiles;
a = _.concat(m.images, m.svgs, _.filter(m.lsgs, function(d){
return !_.endsWith(d.fileId, ".lsr");
}), _.filter(m.sounds, function(d){
return d.isMultiSound !== true;
}));
fileIds = _.map(a, "fileId");
if (fileIds.length === 0) {
return p.onOk();
} else {
return checkFilesExist();
}
};
checkFilesExist = function(){
var i$, ref$, len$, fileId, results$ = [];
for (i$ = 0, len$ = (ref$ = fileIds).length; i$ < len$; ++i$) {
fileId = ref$[i$];
results$.push(inc("checkFileExists/check")(p.level, fileId, onFileCheckDone));
}
return results$;
};
onFileCheckDone = function(exists, fileId){
if (!exists) {
missingFileIds.push(fileId);
}
totalDone++;
if (totalDone === fileIds.length) {
return finish();
}
};
finish = function(){
if (missingFileIds.length > 0) {
return p.onOffline({
totalMissingFiles: missingFileIds.length,
firstMissingFile: missingFileIds[0]
});
} else {
return p.onOk();
}
};
if (!p.level.mediaFiles) {
return p.onOk();
} else {
return calcFileIds();
}
};
})();
pages/level/play/checkMedia/checkMediaFilesOfflineAvailable/checkFileExists/check.ls
(function(){
return function(level, fileId, onDone){
var project, fileHash, fileType, startsWith;
project = level.path.split("/")[2];
fileHash = inc("/lib/util/md5/md5")(fileId).substr(0, 10);
fileType = fileId.split("/")[0];
startsWith = "content/" + project + "/_" + fileType + "s/" + fileHash;
return inc("/lib/util/fileDirectoryList/search/search")({
startsWith: startsWith,
onDone: function(fileNames){
var exists;
exists = fileNames.length > 0;
return onDone(exists, fileId);
}
});
};
})();
pages/level/play/checkMinLevelPlayerVersion/check.ls
(function(){
return function(page, onDone){
if (!inc("../../_shared/checkMinLevelPlayerVersion/check")({
level: page.level,
afterWarning: function(){
return startPage({
history: -1
});
}
})) {
return onDone();
}
};
})();
pages/level/play/loadLevel/load.ls
(function(){
return function(page, onDone){
var p, load, onError, finish;
p = page.params;
load = function(){
if (_.startsWith(p.levelPath, "/learnList")) {
return inc("load/learnList/load")(p, finish, onError);
} else if (_.startsWith(p.levelPath, "/mathPractice")) {
return inc("load/mathPractice/load")(p, finish, onError);
} else {
return inc("load/content/load")(p, finish, onError);
}
};
onError = function(error){
return page.showOffline({
reason: "offline" === (error != null ? error.error : void 8) ? "offline-loadLevel" : "technicalProblem",
reasonDetails: {
loadDuration: error != null ? error.loadDuration : void 8
}
});
};
finish = function(l){
page.level = l;
if (!_.startsWith(p.levelPath, "/learnList")) {
page.updateUrlDescription();
}
return onDone();
};
return load();
};
})();
pages/level/play/loadLevel/load/content/load.ls
(function(){
return function(p, finish, onError){
return inc("/lib/util/loadLevel/load")({
path: p.levelPath,
onError: onError,
onLoaded: finish
});
};
})();
pages/level/play/loadLevel/load/learnList/load.ls
(function(){
return function(p, finish, onError){
return inc("/../app01-learn-list/data/loadLevel/load")({
levelPath: p.levelPath,
etag: p.etag,
startConfig: {
shuffleAtoms: p.shuffleAtoms,
switchAB: p.switchAB,
soundMode: p.soundMode
},
onError: onError,
onLoaded: finish
});
};
})();
pages/level/play/loadLevel/load/mathPractice/load.ls
(function(){
return function(p, finish, onError){
return inc("/../app01-math-practice/data/loadLevel/load")({
levelPath: p.levelPath,
onError: onError,
onLoaded: finish
});
};
})();
pages/level/play/onFinish/onFinish.ls
(function(){
return function(page, params){
if (params.context === "learnList") {
return startPage({
path: path("/../app01-learn-list/pages/level/finishLevelLearnList/page"),
params: _.cloneDeep(params)
});
} else if (params.context === "mathPractice") {
return startPage({
path: path("/../app01-math-practice/pages/level/finishLevel/page"),
params: _.cloneDeep(params)
});
} else if (params.context === "preschoolShape") {
inc("../../finishLevel/calcCoins/calcCoins")();
return startPage({
history: -1
});
} else {
return startPage({
path: path("../../finishLevel/page"),
params: {
levelPath: page.level.path,
levelType: page.level.type
}
});
}
};
})();
pages/level/play/page.ls
(function(){
return function(page){
var params;
params = page.params;
page.showOffline = inc("showOffline/showOffline")(page);
page.planDescription = inc("/data/content/calcPlanDescription/calc")(params.levelPath);
return {
top: function(){
return inc("/addons/topbarLevel/topbar")(page);
},
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescriptionWithLevel/description")(page);
},
start: function(){
var loadLevel, checkMedia, checkMinLevelPlayerVersion, loadPlaygroundProject, play, onFinish;
loadLevel = function(){
return inc("loadLevel/load")(page, checkMedia);
};
checkMedia = function(){
return inc("checkMedia/check")(page, checkMinLevelPlayerVersion);
};
checkMinLevelPlayerVersion = function(){
return inc("checkMinLevelPlayerVersion/check")(page, loadPlaygroundProject);
};
loadPlaygroundProject = function(){
return inc("../_shared/loadPlaygroundProject/load")(page.level, play);
};
play = function(){
return inc("play/play")(page, onFinish);
};
onFinish = function(){
return inc("onFinish/onFinish")(page, params);
};
page.pageScrollWrapper.setScrollbarMode("show");
page.html(inc("/lib/gui/spinner/spinner")());
return loadLevel();
}
};
};
})();
pages/level/play/play/play.ls
(function(){
return function(page, onDone){
return inc("/../app01-trainers/shared/levelPlayer/player")({
level: page.level,
onFinish: onDone,
progressBar: page.progressBar,
page: page,
context: page.params.context,
previewTrainerIndex: page.params.previewTrainerIndex
});
};
})();
pages/level/play/showOffline/showOffline.ls
(function(){
return function(page){
return function(o){
var ref$;
if ((ref$ = body.findFirst(".topbarAntonPlus")) != null) {
ref$.hide();
}
o.reasonDetails == null && (o.reasonDetails = {});
o.reasonDetails.levelPath = page.params.levelPath;
return inc("/lib/offline/offlinePageWithLogging/offlinePage")({
page: page,
reason: o.reason,
reasonDetails: o.reasonDetails,
isTechnicalProblem: _.startsWith(o.reason, "technicalProblem"),
showAntonPlusHint: true
});
};
};
})();
pages/level/previewBlockPopup/generateSlides/generate.ls
(function(){
return function(block){
var slides, totalLevels, i$, ref$, len$, level, firstTrainer, t, path, trainerSlides;
slides = [];
totalLevels = block.levels.length;
for (i$ = 0, len$ = (ref$ = block.levels).length; i$ < len$; ++i$) {
level = ref$[i$];
firstTrainer = level.trainers[0];
t = firstTrainer.trainer;
path = "/../" + (_.startsWith(t, "kid")
? "app01-kid-trainers/trainers/" + t
: _.startsWith(t, "playground")
? "app01-playground-trainers/trainers/" + t.replace("playground/", "")
: "app01-trainers/trainers/" + t) + "/generateSlides";
trainerSlides = inc(path)(firstTrainer, level);
slides.push(_.ensureArray(trainerSlides)[0]);
}
return slides;
};
})();
pages/level/previewBlockPopup/loadLevels/load.ls
(function(){
return function(p){
var block, totalDone, errors, loadLevels, onLevelLoaded, finish;
block = p.block;
totalDone = 0;
errors = [];
loadLevels = function(){
var i$, ref$, len$, index, level, results$ = [];
for (i$ = 0, len$ = (ref$ = p.block.levels).length; i$ < len$; ++i$) {
index = i$;
level = ref$[i$];
results$.push(inc("loadLevel/load")(level, block, index, onLevelLoaded));
}
return results$;
};
onLevelLoaded = function(error){
if (error) {
errors.push(error);
}
totalDone++;
if (totalDone === block.levels.length) {
return finish();
}
};
finish = function(){
if (errors.length > 0) {
return p.onError(errors);
} else {
return p.onLoaded();
}
};
return loadLevels();
};
})();
pages/level/previewBlockPopup/loadLevels/loadLevel/load.ls
(function(){
return function(level, block, index, onDone){
return inc("/lib/util/loadLevel/load")({
path: level.path,
onError: function(error){
return onDone(error);
},
onLoaded: function(levelFull){
block.levels[index] = levelFull;
return onDone();
}
});
};
})();
pages/level/previewBlockPopup/popup.ls
(function(){
return function(block){
var levelFull, spinnerOverlay, isCancelled, showSpinnerOverlay, loadLevels, loadPlaygroundProject, checkMinPlayerVersion, createLevelFullWithSlides, loadMediaFiles, showSlidesPopup, onOffline, onError;
block = _.cloneDeep(block);
levelFull = null;
spinnerOverlay = null;
isCancelled = false;
_.setRandomSeed(0);
showSpinnerOverlay = function(){
spinnerOverlay = inc("/lib/gui/spinnerOverlay/overlay")(function(){
return isCancelled = true;
});
return loadLevels();
};
loadLevels = function(){
return inc("loadLevels/load")({
block: block,
onError: onError,
onLoaded: loadPlaygroundProject
});
};
loadPlaygroundProject = function(){
return inc("../_shared/loadPlaygroundProject/load")(block.levels, checkMinPlayerVersion);
};
checkMinPlayerVersion = function(){
var i$, ref$, len$, level;
for (i$ = 0, len$ = (ref$ = block.levels).length; i$ < len$; ++i$) {
level = ref$[i$];
if (inc("../_shared/checkMinLevelPlayerVersion/check")({
level: level
})) {
spinnerOverlay.remove();
return;
}
}
return createLevelFullWithSlides();
};
createLevelFullWithSlides = function(){
levelFull = {
title: "dummy",
slides: inc("generateSlides/generate")(block)
};
return loadMediaFiles();
};
loadMediaFiles = function(){
if (!isCancelled) {
return inc("../_shared/loadMediaFiles/load")({
level: levelFull,
onError: onError,
onLoaded: showSlidesPopup
});
}
};
showSlidesPopup = function(){
if (!isCancelled) {
spinnerOverlay.remove();
return inc("../reviewOrPreviewPopup/showSlidesPopup/show")(levelFull, {
popupType: "preview"
});
}
};
onOffline = function(){
spinnerOverlay.remove();
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(errors){
if (_.find(errors, {
error: "offline"
})) {
return onOffline();
} else {
spinnerOverlay.remove();
return inc("/lib/gui/errorPopup/popup")();
}
};
if (typeof log != 'undefined' && log !== null) {
log.log({
event: "debugClickOpenBlockPreviewPopup",
path: block.path
});
}
return showSpinnerOverlay();
};
})();
pages/level/previewDocumentationDiv/div.ls
(function(){
return function(level){
var loadPlaygroundProject, generateSlides, loadMediaFiles, create, div;
level = _.cloneDeep(level);
loadPlaygroundProject = function(){
return inc("../_shared/loadPlaygroundProject/load")(level, generateSlides);
};
generateSlides = function(){
_.setRandomSeed(0);
inc("../_shared/generateSlides/generate")(level);
return loadMediaFiles();
};
loadMediaFiles = function(){
return inc("../_shared/loadMediaFiles/load")({
level: level,
onError: function(){
return debug("loadMediaFiles error");
},
onLoaded: create
});
};
create = function(){
var slide;
return div.html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = level.slides).length; i$ < len$; ++i$) {
slide = ref$[i$];
results$.push([inc("line/line")(), inc("slideDiv/slideDiv")(slide)]);
}
return results$;
}()));
};
div = Div({
padding: "1em"
});
loadPlaygroundProject();
return div;
};
})();
pages/level/previewDocumentationDiv/generateSlides/generate.ls
(function(){
return function(level){
var slides, i$, ref$, len$, trainer, path, trainerParams, levelParams;
slides = [];
for (i$ = 0, len$ = (ref$ = _.ensureArray(level.trainers)).length; i$ < len$; ++i$) {
trainer = ref$[i$];
path = "/../app01-trainers/trainers/" + trainer.trainer + "/generateSlides";
trainerParams = trainer;
levelParams = level;
slides = slides.concat(inc(path)(trainerParams, levelParams));
}
return slides;
};
})();
pages/level/previewDocumentationDiv/line/line.ls
(function(){
return function(){
return Div({
borderBottom: "1px solid " + Color.grey[200]
});
};
})();
pages/level/previewDocumentationDiv/slideDiv/slideDiv.ls
(function(){
return function(slide){
slide.div = Div({
pointerEvents: "none"
});
requestAnimationFrame(function(){
slide.init();
return typeof slide.preview == 'function' ? slide.preview() : void 8;
});
return slide.div;
};
})();
pages/level/previewNoUser/_t.ls
(function(){
return {
level: {
de: "Übung",
en: "Exercise",
fr: "Exercice",
es: "Ejercicio",
pt: "Exercícios"
}
};
})();
pages/level/previewNoUser/_topbar/backLabel/label.ls
(function(){
return function(page){
var b;
if (page.level) {
b = page.level.parentBlock;
return inc("/lib/seo/element/a2/a")({
html: b.title,
pageUrl: inc("/data/content/calcBlockPageUrl/calc")(b.path)
});
}
};
})();
pages/level/previewNoUser/_topbar/topbar.ls
(function(){
return function(page){
var update, div;
update = function(){
return div.replaceWith(inc(THISFILE)(page));
};
div = inc("/addons/topbar2/topbar")({
title: page.level ? T("level") + ": " + page.level.title : " ",
back: page.level != null,
backLabel: inc("backLabel/label")(page),
backDeepLink: function(){
var ref$;
return startPage({
path: path("/pages/content/block/page"),
params: {
blockPath: (ref$ = page.level) != null ? ref$.parentBlock.path : void 8,
isDeepLink: true
}
});
}
});
div.update = update;
return div;
};
})();
pages/level/previewNoUser/line/line.ls
(function(){
return function(){
return Div().css({
borderBottom: "1px solid " + Color.grey[200]
});
};
})();
pages/level/previewNoUser/page.ls
(function(){
return function(page){
page.planDescription = inc("/data/content/calcPlanDescription/calc")(page.params.levelPath);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("/pages/level/_shared/_urlDescriptionWithLevel/description")(page);
},
navCategory: "content",
start: function(){
var loadLevel, loadPlaygroundProject, generateSlides, loadMediaFiles, create;
loadLevel = function(){
return inc("/lib/util/loadLevel/load")({
path: page.params.levelPath,
onError: function(){
return startPage({
path: path("/pages/static/unknownUrl/page"),
history: 0
});
},
onLoaded: function(l){
page.level = l;
return loadPlaygroundProject();
}
});
};
loadPlaygroundProject = function(){
return inc("../_shared/loadPlaygroundProject/load")(page.level, generateSlides);
};
generateSlides = function(){
_.setRandomSeed(0);
inc("../_shared/generateSlides/generate")(page.level);
return loadMediaFiles();
};
loadMediaFiles = function(){
return inc("../_shared/loadMediaFiles/load")({
level: page.level,
onError: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
},
onLoaded: create
});
};
create = function(){
var div, slide;
page.topbar.update();
page.breadcrumbs.show();
page.html(div = Div({
width: "45em",
maxWidth: "90%",
margin: "3em auto",
opacity: 0
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.level.slides).length; i$ < len$; ++i$) {
slide = ref$[i$];
results$.push([inc("line/line")(), inc("slideDiv/slideDiv")(slide)]);
}
return results$;
}())));
return inc("/lib/util/waitFrames/wait")(2, function(){
div.css({
opacity: 1
});
return page.updateUrlDescription();
});
};
page.breadcrumbs.hide();
page.html(inc("/lib/gui/spinner/spinner")());
return loadLevel();
}
};
};
})();
pages/level/previewNoUser/slideDiv/slideDiv.ls
(function(){
return function(slide){
slide.div = Div().css({
pointerEvents: "none"
});
requestAnimationFrame(function(){
slide.init();
return typeof slide.preview == 'function' ? slide.preview() : void 8;
});
return slide.div;
};
})();
pages/level/reviewOrPreviewPopup/_shared/calcDateLabel/calc.ls
(function(){
return function(p, e){
var date, isSelf, ref$, isSmall, dateLabel, date2;
date = inc("/lib/util/formatDate2/format")(e.created);
isSelf = p.publicId == null || p.publicId === ((ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8);
isSmall = body.width() < 500;
dateLabel = isSelf
? isSmall
? date.formats.fullShort
: date.formats.full
: isSmall
? date.formats.dateShort
: date.formats.date;
if (!isSelf && (date.specialDays.isToday || date.specialDays.isYesterday)) {
date2 = inc("/lib/util/formatDate2/format")(e.created, {
ensureDate: true
});
dateLabel += isSmall
? " " + date2.formats.dateShort
: " " + date2.formats.date;
}
return dateLabel;
};
})();
pages/level/reviewOrPreviewPopup/_t.ls
(function(){
return {
debugInfo: {
de: "von insgesamt: $1",
en_gb: "from a total of: $1",
en: "of in total: $1",
fr: "Sur un total de $1",
es: "de un total de: $1",
pt: "de um total de: $1"
},
levelAborted: {
de: "Übung abgebrochen",
en: "Exercise cancelled",
fr: "Exercice arrêté",
es: "Ejercicios interrumpidos",
pt: "Exercícios interrompidos"
},
levelSkipped: {
de: "Übung geskipped (debug)",
en: "Exercise skipped (debug)",
fr: "Exercice sauté (debug)",
es: "Ejercicio saltado (debug)",
pt: "Exercício pulado (debug)"
}
};
})();
pages/level/reviewOrPreviewPopup/calcReviewEvents/addLocalEvents/add.ls
(function(){
return function(serverEvents, puid){
var i$, ref$, len$, eventName, events;
for (i$ = 0, len$ = (ref$ = ["score", "finishLevel", "abortLevel"]).length; i$ < len$; ++i$) {
eventName = ref$[i$];
events = _.filter(log.list({
event: eventName,
puid: puid
}), fn$);
if (events.length > 0) {
serverEvents = serverEvents.concat(events);
}
}
return serverEvents;
function fn$(e){
return !e.inserted && !_.find(serverEvents, function(e2){
return e2.event === e.event && e2.round === e.round;
});
}
};
})();
pages/level/reviewOrPreviewPopup/calcReviewEvents/calc.ls
(function(){
return function(o){
var ref$;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/level/reviewReport/get"),
params: {
levelPuid: o.level.puid,
publicId: o.publicId || ((ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8)
},
requiredVisibleDiv: o.div,
onCompleted: function(result){
var events, ref$;
if (result.status !== "ok") {
return o.onError();
} else {
events = _.orderBy(result.events, "created");
if (o.publicId == null || o.publicId === ((ref$ = log.findLast("setPublicId")) != null ? ref$.value : void 8)) {
events = inc("addLocalEvents/add")(events, o.level.puid);
}
return o.onDone(events);
}
},
onError: o.onError,
onOffline: function(){
return o.onError({
error: "offline"
});
}
});
};
})();
pages/level/reviewOrPreviewPopup/calcReviewScores/assignScoreEventToAtoms/assign.ls
(function(){
return function(level, scoreEvents){
var allTrainers, allAtoms, i$, ref$, len$, t, j$, ref1$, len1$, a, e, matchingAtom, lastMatchingAtom, matchingTrainer, lastMatchingTrainer;
level.unassignedScoreEvents = [];
allTrainers = [];
allAtoms = [];
for (i$ = 0, len$ = (ref$ = _.ensureArray(level.trainers)).length; i$ < len$; ++i$) {
t = ref$[i$];
allTrainers.push({
trainer: t
});
for (j$ = 0, len1$ = (ref1$ = _.ensureArray(t.atoms)).length; j$ < len1$; ++j$) {
a = ref1$[j$];
delete a.scoreEvent;
allAtoms.push({
atom: a,
trainer: t
});
}
}
for (i$ = 0, len$ = scoreEvents.length; i$ < len$; ++i$) {
e = scoreEvents[i$];
if (e.atom) {
matchingAtom = _.find(allAtoms, fn$);
if (matchingAtom) {
lastMatchingAtom = matchingAtom;
matchingAtom.isAssigned = true;
e.matchingAtom = matchingAtom.atom;
e.matchingTrainer = matchingAtom.trainer;
}
} else if (e.atoms) {
matchingTrainer = _.find(allTrainers, fn1$);
if (matchingTrainer) {
lastMatchingTrainer = matchingTrainer;
matchingTrainer.isAssigned = true;
e.matchingTrainer = matchingTrainer.trainer;
}
}
}
return level.scoreEvents = scoreEvents;
function fn$(a){
return a.isAssigned !== true && e.trainer === a.trainer.trainer && _.isEqual(e.atom, a.atom);
}
function fn1$(t){
return t.isAssigned !== true && e.trainer === t.trainer.trainer && _.xorBy(e.atoms, _.ensureArray(t.trainer.atoms), _.isEqual).length === 0;
}
};
})();
pages/level/reviewOrPreviewPopup/calcReviewScores/calc.ls
(function(){
return function(o){
var getScoreEvents, assignScoreEventToAtoms;
getScoreEvents = function(){
return inc("getScoreEvents/get")({
events: o.events,
publicId: o.publicId,
round: o.round,
level: o.level,
onLoaded: assignScoreEventToAtoms
});
};
assignScoreEventToAtoms = function(scoreEvents, e, round){
inc("assignScoreEventToAtoms/assign")(o.level, scoreEvents);
return o.onDone(e, round);
};
return getScoreEvents();
};
})();
pages/level/reviewOrPreviewPopup/calcReviewScores/getScoreEvents/calcScoreEvents/calc.ls
(function(){
return function(o){
var e, scoreEvents;
if (o.round) {
e = _.find(o.events, function(e2){
var ref$;
return ((ref$ = e2.event) === "finishLevel" || ref$ === "abortLevel") && e2.round === o.round;
});
} else {
e = _.findLast(o.events, {
event: "finishLevel"
});
o.round = e != null ? e.round : void 8;
}
if (!e) {
o.onLoaded([], null);
return;
}
_.setRandomSeed(o.round);
o.level.startedAt = new Date(new Date(e.created) - e.duration * 1000);
o.level.finishedAt = e.created;
if (e.isSkipped) {
o.level.isSkipped = true;
} else {
delete o.level.isSkipped;
}
scoreEvents = _.filter(o.events, {
event: "score",
round: e.round,
src: e.src
});
return o.onLoaded(scoreEvents, e);
};
})();
pages/level/reviewOrPreviewPopup/calcReviewScores/getScoreEvents/get.ls
(function(){
return function(o){
var e, scoreEvents;
if (o.publicId != null) {
return inc("calcScoreEvents/calc")(o);
} else {
e = o.round
? _.find(o.events, function(e2){
var ref$;
return ((ref$ = e2.event) === "abortLevel" || ref$ === "finishLevel") && e2.round === o.round;
})
: _.findLast(o.events, {
event: "finishLevel"
});
if (!e) {
return o.onLoaded([], null, o.round);
} else {
o.level.startedAt = new Date(new Date(e.created).getTime() - e.duration * 100);
o.level.finishedAt = e.created;
if (e.isSkipped) {
o.level.isSkipped = true;
} else {
delete o.level.isSkipped;
}
scoreEvents = _.cloneDeep(log.list({
event: "score",
levelPuid: o.level.puid,
round: e.round
}));
if (scoreEvents.length === 0) {
return inc("calcScoreEvents/calc")(o);
} else {
o.round = e.round;
_.setRandomSeed(o.round);
return o.onLoaded(scoreEvents, e, o.round);
}
}
}
};
})();
pages/level/reviewOrPreviewPopup/loadLevel/load.ls
(function(){
return function(p){
if (_.startsWith(p.levelPath, "/learnList/") || _.startsWith(p.levelPuid, "/learnList/")) {
return inc("/../app01-learn-list/data/loadLevel/load")({
levelPath: p.levelPath || p.levelPuid,
startConfig: p.startConfig,
onError: p.onError,
onLoaded: p.onLoaded
});
} else if (_.startsWith(p.levelPath, "/mathPractice/")) {
return inc("/../app01-math-practice/data/loadLevel/load")({
levelPath: p.levelPath,
onError: p.onError,
onLoaded: p.onLoaded
});
} else {
return inc("/lib/util/loadLevel/load")({
path: p.levelPath,
puid: p.levelPuid,
onError: p.onError,
onLoaded: p.onLoaded
});
}
};
})();
pages/level/reviewOrPreviewPopup/logEvent/log.ls
(function(){
return function(levelPath, levelPuid, popupType){
var event, that;
event = {
event: "debugClickOpenPreviewPopup",
popupType: popupType
};
if (that = levelPath) {
event.path = that;
} else if (that = levelPuid) {
event.puid = that;
}
return log.log(event);
};
})();
pages/level/reviewOrPreviewPopup/popup.ls
(function(){
return function(p){
var levelPuid, levelPath, ref$, startConfig, publicId, round, popupType, level, spinnerOverlay, isCancelled, showSpinnerOverlay, loadLevel, loadPlaygroundProject, checkMinPlayerVersion, calcReviewEvents, calcReviewScores, generateSlides, loadMediaFiles, showSlidesPopup, onError;
levelPuid = p.levelPuid;
levelPath = (ref$ = p.level) != null ? ref$.path : void 8;
startConfig = p.startConfig;
publicId = p.publicId;
round = p.round;
popupType = p.popupType;
level = null;
spinnerOverlay = null;
isCancelled = false;
_.setRandomSeed(0);
showSpinnerOverlay = function(){
spinnerOverlay = inc("/lib/gui/spinnerOverlay/overlay")(function(){
return isCancelled = true;
});
return loadLevel();
};
loadLevel = function(){
if (isCancelled) {
return;
}
return inc("loadLevel/load")({
levelPuid: levelPuid,
levelPath: levelPath,
startConfig: startConfig,
onError: onError,
onLoaded: function(l){
level = l;
return loadPlaygroundProject();
}
});
};
loadPlaygroundProject = function(){
return inc("../_shared/loadPlaygroundProject/load")(level, checkMinPlayerVersion);
};
checkMinPlayerVersion = function(){
if (inc("../_shared/checkMinLevelPlayerVersion/check")({
level: level
})) {
return spinnerOverlay.remove();
} else if (popupType === "review") {
return calcReviewEvents();
} else {
return generateSlides();
}
};
calcReviewEvents = function(){
if (isCancelled) {
return;
}
return inc("calcReviewEvents/calc")({
level: level,
publicId: publicId,
onError: onError,
onDone: function(events){
p.events = events;
return calcReviewScores();
}
});
};
calcReviewScores = function(){
if (isCancelled) {
return;
}
return inc("calcReviewScores/calc")({
events: p.events,
level: level,
publicId: publicId,
round: round,
onDone: function(e, round){
p.levelEvent = e;
p.round = round;
return generateSlides();
}
});
};
generateSlides = function(){
inc("../_shared/generateSlides/generate")(level);
return loadMediaFiles();
};
loadMediaFiles = function(){
if (isCancelled) {
return;
}
return inc("../_shared/loadMediaFiles/load")({
level: level,
onError: onError,
onLoaded: showSlidesPopup
});
};
showSlidesPopup = function(){
if (isCancelled) {
return;
}
spinnerOverlay.remove();
return inc("showSlidesPopup/show")(level, p);
};
onError = function(errors){
errors = _.ensureArray(errors);
spinnerOverlay.remove();
if (_.find(errors, function(error){
var ref$;
return (ref$ = error.error) === "offline" || ref$ === "no_etag_found";
})) {
return inc("/lib/offline/offlinePopup/popup")();
} else {
return inc("/lib/gui/errorPopup/popup")();
}
};
p.update = function(r){
spinnerOverlay = inc("/lib/gui/spinnerOverlay/overlay")(function(){
return isCancelled = true;
});
round = r;
return calcReviewScores(p.events);
};
inc("logEvent/log")(levelPath, levelPuid, popupType);
return showSpinnerOverlay();
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/closeButton/button.ls
(function(){
return function(p){
var tap;
tap = function(){
var ref$;
return (ref$ = app.currentPopup) != null ? ref$.close() : void 8;
};
return Div({
background: "white",
padding: "0.7em",
fontSize: "0.95em",
color: Color.blue[500],
display: "flex",
boxShadow: "0px 0px 7px rgba(0,0,0,0.1)"
}).html(SvgIcon({
svg: path("/lib/svg/icon/close-small.svg"),
color: Color.blue[500]
}), Div({
marginLeft: "0.3em"
}).html(T("closeButton"))).tap({
up: tap,
animation: "none"
});
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/arrow/arrow.ls
(function(){
return function(events){
return Div({
display: "flex"
}).html(Div({
fontSize: "0.8em",
color: Color.grey[500]
}).html(events.length), SvgIcon({
svg: path("/lib/svg/icon/arrow-down-small.svg"),
color: Color.grey[700]
}));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/header.ls
(function(){
return function(level, p){
var events, currentIndex, currentEvent, isMulti, div, arrow;
if (p.popupType !== "review") {
return;
}
events = _.filter(p.events, function(e){
var ref$;
return (ref$ = e.event) === "finishLevel" || ref$ === "abortLevel";
});
currentIndex = _.findIndex(events, function(e){
return _.isEqual(new Date(e.created), new Date(level.finishedAt));
});
currentEvent = events[currentIndex];
isMulti = events.length > 1;
if (!currentEvent) {
return;
}
return Div({
display: "flex",
boxShadow: "0px 1px 2px " + Color.grey[250]
}).html(div = Div({
display: "inline-flex",
padding: isMulti ? "0.3em 1em 0.3em 0.3em" : "0.3em"
}).html(Div().html(inc("../../_shared/calcDateLabel/calc")(p, currentEvent)), inc("progressBar/progressBar")(currentEvent), isMulti ? arrow = inc("arrow/arrow")(events) : void 8).tap(isMulti ? function(){
return inc("showTrialsOverlay/show")(arrow, level, p);
} : void 8));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/progressBar/canvas/canvas.ls
(function(){
return function(div, event){
var canvas, ctx;
canvas = inc("canvas/canvas")(div);
ctx = canvas.getContext("2d");
inc("drawProgressColors/draw")(0, canvas.height, 0, canvas.width, event.progressColors, event.total, ctx);
return canvas;
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/progressBar/canvas/canvas/canvas.ls
(function(){
return function(div){
var dpr, w, h;
dpr = window.devicePixelRatio;
w = _.round(div.width() * dpr);
h = _.round(div.height() * dpr);
return document.createElement("canvas").attr({
width: w,
height: h
}).css({
width: w / dpr + "px",
height: h / dpr + "px"
});
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/progressBar/canvas/drawProgressColors/draw.ls
(function(){
return function(yFrom, yTo, xFrom, xTo, progressColors, totalElements, ctx){
var s, parts, total, res$, i$, len$, i, p, t, scoreWidth, colors, xFrom2, xDelta, results$ = [];
s = progressColors;
if (!s) {
return;
}
s = s.split("g").join("g|");
s = s.split("r").join("r|");
s = s.split("b").join("b|");
parts = s.split("|");
parts = parts.filter(function(p){
return p.length > 0;
});
total = 0;
res$ = [];
for (i$ = 0, len$ = parts.length; i$ < len$; ++i$) {
i = i$;
p = parts[i$];
if (p.length === 1) {
total++;
parts[i] = 1 + p;
res$.push({
color: p,
total: 1,
start: total - 1
});
} else {
t = +p.substr(0, p.length - 1);
total += t;
res$.push({
color: _.last(p),
total: t,
start: total - t
});
}
}
parts = res$;
if (totalElements > total) {
total = totalElements;
}
scoreWidth = (xTo - xFrom) / total;
colors = {
g: Color.green[400],
r: Color.red[400],
b: Color.grey[450]
};
for (i$ = 0, len$ = parts.length; i$ < len$; ++i$) {
p = parts[i$];
xFrom2 = xFrom + p.start * scoreWidth;
xDelta = p.total * scoreWidth;
ctx.fillStyle = colors[p.color];
results$.push(ctx.fillRect(xFrom2, yFrom, xDelta, yTo - yFrom));
}
return results$;
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/progressBar/fakeProgressColors/fake.ls
(function(){
return function(event){
var c, that;
if (event.progressColors != null) {
return;
}
c = "";
if (that = event.corrects) {
c += that + "g";
}
if (that = event.mistakes) {
c += that + "r";
}
return event.progressColors = c;
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/progressBar/progressBar.ls
(function(){
return function(event){
var div;
return div = Div({
display: "inline-flex",
background: Color.grey[300],
height: "11px",
width: "2em",
overflow: "hidden",
borderRadius: "5px",
margin: "0 0.5em"
}).onDomAppend(function(){
inc("fakeProgressColors/fake")(event);
return div.append(inc("canvas/canvas")(div, event));
});
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/showTrialsOverlay/rows/row/row.ls
(function(){
return function(p, e, i, events){
var dateLabel;
dateLabel = inc("../../../../../_shared/calcDateLabel/calc")(p, e);
return Div({
display: "flex",
padding: "0.2em",
justifyContent: "space-between"
}).addClass("row" + i).html(Div({
display: "inline"
}).html(dateLabel), inc("../../../progressBar/progressBar")(e));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/showTrialsOverlay/rows/rows.ls
(function(){
return function(p, level, events){
var rows;
return rows = (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = events).length; i$ < len$; ++i$) {
results$.push((fn$.call(this, i$, ref$[i$])));
}
return results$;
function fn$(i, e){
return {
label: inc("row/row")(p, e, i, events),
click: function(){
return p.update(e.round);
}
};
}
}.call(this));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/header/showTrialsOverlay/show.ls
(function(){
return function(parent, level, p){
var events, menu, items, scrollDiv, currentIndex, currentItem;
events = _.filter(p.events, function(e){
var ref$;
return (ref$ = e.event) === "finishLevel" || ref$ === "abortLevel";
});
menu = OverlayMenu({
referenceDiv: parent,
items: inc("rows/rows")(p, level, events),
maxHeight: "15em",
direction: "down left",
adjustXY: "0 -1"
});
items = menu.findAll(".itemDiv");
scrollDiv = menu.findFirst(".scrollDiv");
currentIndex = _.findIndex(events, function(e){
return _.isEqual(new Date(e.created), new Date(level.finishedAt));
});
currentItem = items[currentIndex];
currentItem.css({
backgroundColor: Color.grey[150]
});
return scrollDiv.scrollElementIntoView(currentItem, {
instant: true,
center: true
});
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/abortRow/row.ls
(function(){
return function(level){
var css;
css = {
flex: "1 1 auto",
borderBottom: "1px solid " + Color.grey[200]
};
return Div().css({
display: "flex",
margin: "0.5em 0"
}).append(Div(css), Div().css({
padding: "0.2em 0.5em",
fontSize: "0.9em",
color: Color.grey[600]
}).html(level.isSkipped
? T("levelSkipped")
: T("levelAborted")), Div(css));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/debugInfo/info.ls
(function(){
return function(level, p){
var e;
e = p.levelEvent || log.findLast({
event: "finishLevel",
puid: level.puid
});
return Div({
color: Color.grey[350],
fontSize: "0.8em",
margin: "0.2em 0.5em 0"
}).html(SvgIcon({
svg: path("/lib/svg/shape/debug.svg"),
color: Color.grey[350]
}).css({
verticalAlign: "-0.2em",
marginRight: "0.2em"
}), Span().html("Results: total " + e.total + ", mistakes " + e.mistakes + ", corrects " + e.corrects + ", resolved " + e.resolved));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/line/index/index.ls
(function(){
return function(index){
return Div().css({
display: "inline-block",
padding: "0.1em 0.7em",
fontSize: "0.7em",
color: Color.grey[400]
}).html(index + 1);
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/line/line.ls
(function(){
return function(slide, index){
return Div().css({
borderBottom: "1px solid " + Color.grey[200],
textAlign: "right"
}).append(inc("index/index")(index));
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/rows.ls
(function(){
return function(level, p){
var div, e, isAborted, totalScored, currentScored, showUnfinishedScores, i$, ref$, len$, i, slide;
div = ScrollDiv().css({
flex: "0 1 auto"
});
if (p.popupType === "review") {
e = p.levelEvent;
isAborted = (e != null ? e.event : void 8) === "abortLevel" || ((e != null ? e.event : void 8) === "finishLevel" && e.isSkipped);
if (isAborted) {
totalScored = e.corrects + e.resolved;
currentScored = 0;
showUnfinishedScores = _.find(level.scoreEvents, {
unfinished: true
});
}
if (engine.isDebug) {
div.append(inc("debugInfo/info")(level, p));
}
}
for (i$ = 0, len$ = (ref$ = level.slides).length; i$ < len$; ++i$) {
i = i$;
slide = ref$[i$];
if (isAborted) {
currentScored += slide.totalProgressElements;
if (currentScored > totalScored) {
if (showUnfinishedScores) {
showUnfinishedScores = false;
} else {
div.append(inc("abortRow/row")(level));
break;
}
}
}
div.append(inc("line/line")(slide, i), inc("slideDiv/slideDiv")(slide, i, p));
}
return div;
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/rows/slideDiv/slideDiv.ls
(function(){
return function(slide, i, p){
var popupType;
popupType = p.popupType;
slide.div = Div({
pointerEvents: "none"
});
requestAnimationFrame(function(){
if (p.round) {
_.setRandomSeed(p.round * 100 + i);
}
slide.init();
if (popupType === "preview") {
return slide.preview();
} else if (popupType === "review") {
return slide.review();
}
});
return slide.div;
};
})();
pages/level/reviewOrPreviewPopup/showSlidesPopup/show.ls
(function(){
return function(level, p){
var oldHeight, ref$, div, showAnimations;
oldHeight = (ref$ = p.popup) != null ? ref$.height() : void 8;
div = Div({
width: "35em",
display: "flex",
flexDirection: "column",
justifyContent: "flex-start",
alignItems: "stretch",
minHeight: Math.max((oldHeight != null ? oldHeight : 0) - 8, 200) + "px"
}).html(inc("header/header")(level, p), inc("rows/rows")(level, p), inc("closeButton/button")(p));
showAnimations = app.currentPopup == null;
return p.popup = inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: false,
animationOnClose: showAnimations,
animationDisableBackground: showAnimations,
onClose: p.onClose
});
};
})();
pages/misc/_shared/_t.ls
(function(){
return {
pleaseAcceptPrivacyPolicy: {
de: "Bitte stimme noch unseren Datenschutzbestimmungen zu.",
en: "Please agree to our privacy policy.",
fr: "Merci d'accepter notre politique de protection des données personnelles.",
es: "Por favor, acepta nuestra política de privacidad.",
pt: "Por favor, aceite nossa política de privacidade."
},
showPolicy: {
de: "Bestimmungen ansehen",
en: "View terms",
fr: "Voir nos conditions",
es: "Ver condiciones",
pt: "Ver condições"
},
accept: {
de: "Zustimmen",
en: "Agree",
fr: "Accepter",
es: "Aceptar",
pt: "Aceitar"
}
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/confirm.ls
(function(){
return function(onOk){
var confirmAge16, acceptPrivacy1, acceptPrivacy2, finish;
confirmAge16 = function(){
return inc("/lib/gui/parentalGate/parentalGate")(acceptPrivacy1, {
forceShow: true
});
};
acceptPrivacy1 = function(){
var ref$;
if (((ref$ = log.findLast("setAcceptPrivacy")) != null && ref$.value) && engine.isDebug !== true) {
return finish();
} else {
return inc("popups/privacy1/popup")(acceptPrivacy2);
}
};
acceptPrivacy2 = function(){
return inc("popups/privacy2/popup")(finish);
};
finish = function(){
return onOk();
};
return confirmAge16();
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/_debugOnlyInfo/info.ls
(function(){
return function(eventName){
var ref$;
if (engine.isDebug && ((ref$ = log.findLast(eventName)) != null && ref$.value)) {
return Div().css({
fontSize: "0.8em",
color: Color.grey[500],
marginBottom: "1em",
marginTop: "-0.3em"
}).html("(Already agreed, skipped for non-debug.)");
}
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy1/button/button.ls
(function(){
return function(label, tap){
return Button(label).css({
margin: "0.3em",
minWidth: "5em"
}).tap(tap);
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy1/popup.ls
(function(){
return function(onYes){
var clickYes, div, popup;
log.log({
event: "debugShowAcceptPrivacy1Popup"
});
clickYes = function(){
return onYes();
};
div = Div().css({
margin: "1em 0"
}).append(inc("text/text")(), inc("../_debugOnlyInfo/info")("setAcceptPrivacy"), inc("button/button")(T("showPolicy"), clickYes));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy1/text/text.ls
(function(){
return function(){
return Div().css({
padding: "0 1em 1em 1em",
lineHeight: "1.5em"
}).html(T("pleaseAcceptPrivacyPolicy"));
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy2/button/button.ls
(function(){
return function(label, tap){
return Button(label).tap(tap);
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy2/popup.ls
(function(){
return function(onYes){
var clickYes, div, popup;
log.log({
event: "debugShowAcceptPrivacy1Popup"
});
clickYes = function(){
log.log({
event: "setAcceptPrivacy",
value: true
});
return onYes();
};
div = Div().css({
margin: "1em 0"
}).append(inc("text/text")(), inc("../_debugOnlyInfo/info")("setAcceptPrivacy"), inc("button/button")(T("accept"), clickYes));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/misc/_shared/confirmAge16AndPrivacy/popups/privacy2/text/text.ls
(function(){
return function(){
var div;
return div = ScrollDiv().css({
padding: "0 1em 1em 1em",
lineHeight: "1.5em",
maxHeight: "20em",
border: "1px solid " + Color.grey[200],
textAlign: "left",
marginBottom: "1em",
backgroundColor: Color.grey[75]
}).html(inc("/pages/static/privacy/div/div")());
};
})();
pages/misc/_t.ls
(function(){
return {
errorPassword: {
de: "Das Passwort ist nicht korrekt.",
en: "The password is not correct.",
fr: "Le mot de passe n'est pas correct.",
es: "La contraseña es incorrecta.",
pt: "A senha não está correta."
},
yesDelete: {
de: "Ja, löschen",
en: "Yes, delete",
fr: "Oui, retirer",
es: "Sí, retirar",
pt: "Sim, apagar"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein.",
en: "The password cannot be left blank.",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no pueda quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
yourMail: {
de: "deine E-Mail-Adresse",
en: "your email address",
fr: "ton adresse e-mail",
es: "tu correo electrónico",
pt: "seu endereço de e-mail"
},
yourPhone: {
de: "deine Telefonnummer",
en_gb: "your mobile phone number",
en: "your cell phone number",
fr: "ton numéro de portable",
es: "tu número de teléfono",
pt: "seu número de telefone"
},
enterPassword: {
de: "Bitte gib aus Sicherheitsgründen dein Passwort ein, um $1 zu ändern:",
en: "For security reasons, please enter your password to change $1:",
fr: "Pour des raisons de sécurité, tu dois entrer ton mot de passe pour changer $1:",
es: "Por razones de seguridad, necesitas ingresar tu contraseña para cambiar $1:",
pt: "Por razões de segurança, digite sua senha para modificar $1. "
}
};
})();
pages/misc/askPushPermissioniOs/_t.ls
(function(){
return {
shouldSendNotifications: {
de: "Soll ANTON dir eine Benachrichtigung schicken?",
en: "Should ANTON send you a notification?",
fr: "Veux-tu recevoir une notification d'ANTON ?",
es: "¿Quieres que ANTON te envíe una notificación?",
pt: "Quer que ANTON te envie uma notificação?"
},
askPushText: {
de: "Wenn es ein neues Spiel gibt? Wenn es neue Fächer und Aufgaben gibt? Wenn es einen Wettbewerb gibt? ",
en: "If there is a new game? If there are new subjects and lessons? If there is a competition? ",
fr: "Quand il y a un nouveau jeu ? Quand il y a de nouvelles matières et exercices ? Quand il y a un challenge ? ",
es: "¿Cuando apearezca un nuevo juego? ¿Cuando se publiquen nuevas materias y ejercicios? ¿Cuando haya alguna competencia? ",
pt: "Quando há um novo jogo? Quando há novas disciplinas e exercícios? Quando há uma competição? "
}
};
})();
pages/misc/askPushPermissioniOs/buttons/buttons.ls
(function(){
return function(backPage){
var backParams, ref$, tap, css;
backParams = {
animation: backPage != null ? backPage.animation : void 8,
history: _.isString(backPage != null ? backPage.history : void 8)
? function(path){
return !_.includes(path, backPage.history) && !_.includes(path, _.dropRight(THISFILE.split("/"), 2).join("/"));
}
: (ref$ = backPage != null ? backPage.history : void 8) != null
? ref$
: -1
};
tap = function(answer){
inc("log/log")(answer);
if (answer === "yes") {
inc("/lib/init/push/push")();
}
return startPage(backParams);
};
return Div({
display: "flex"
}).html(Button(T("no")).css(css = {
margin: "0.5em",
minWidth: "5em"
}).tap(function(){
return tap("no");
}), Button(T("yes")).css(css).tap(function(){
return tap("yes");
}));
};
})();
pages/misc/askPushPermissioniOs/buttons/log/log.ls
(function(){
return function(answer){
var deviceEventName, debugEventName;
deviceEventName = engine.isiOsApp ? "deviceAskPushPermissioniOs" : "deviceAskPushPermissionAndroid";
deviceLog.log({
event: deviceEventName,
answer: answer,
userPublicId: inc("/data/user/calcUserDescription/calc")().publicId
});
debugEventName = engine.isiOsApp ? "debugDeviceAskPushPermissioniOs" : "debugDeviceAskPushPermissionAndroid";
return log.log({
event: debugEventName,
answer: answer
});
};
})();
pages/misc/askPushPermissioniOs/headline/headline.ls
(function(){
return function(){
return Div({
margin: "0.7em",
fontSize: "1.2em"
}).html(T("shouldSendNotifications"));
};
})();
pages/misc/askPushPermissioniOs/image/image.ls
(function(){
return function(){
return SvgIcon(path("/lib/svg/illustration/avatar-headphones.svg")).css({
width: "7em",
height: "7em"
});
};
})();
pages/misc/askPushPermissioniOs/page.ls
(function(){
return function(page){
return {
start: function(){
return page.html(inc("image/image")(), inc("headline/headline")(), inc("text/text")(), inc("buttons/buttons")(page.params.backPage));
}
};
};
})();
pages/misc/askPushPermissioniOs/text/text.ls
(function(){
return function(){
return Div({
display: "inline-flex",
flexDirection: "column",
margin: "0 0.7em 1em",
lineHeight: "1.5em"
}).html(T("askPushText"));
};
})();
pages/misc/email/_urlDescription/_t.ls
(function(){
return {
email: {
de: "E-Mail",
en: "Email",
fr: "E-mail",
es: "Correo electrónico",
pt: "E-mail"
}
};
})();
pages/misc/email/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: "email",
title: T("email"),
metaDescription: ""
};
};
})();
pages/misc/email/edit/_t.ls
(function(){
return {
changeEmail: {
de: "E-Mail-Adresse ändern",
en: "Change email address",
fr: "Changer d'adresse e-mail",
es: "Cambiar dirección de correo electrónico",
pt: "Modificar endereço de e-mail"
},
reallyDeleteEmail: {
de: "Möchtest du wirklich deine E-Mail löschen?",
en: "Do you really want to delete your email?",
fr: "Tu veux vraiment effacer ton e-mail ?",
es: "¿Realmente quieres borrar tu correo electrónico?",
pt: "Tem certeza que deseja apagar seu e-mail?"
},
emptyEmail: {
de: "Die E-Mail darf nicht leer sein!",
en: "The email cannot be left blank!",
fr: "L'e-mail ne peut pas rester vide.",
es: "El correo electrónico no puede quedar vacío.",
pt: "O e-mail não pode ficar vazio."
},
invalidEmail: {
de: "Diese E-Mail-Adresse ist ungültig.",
en: "This email address is invalid.",
fr: "Cette adresse e-mail n'est pas valide.",
es: "Este correo electrónico no es válido.",
pt: "Este e-mail não é válido."
},
unavailableEmail: {
de: "Diese E-Mail-Adresse ist bereits vergeben.",
en: "This email address has already been taken.",
fr: "Cette adresse e-mail est déjà utilisée.",
es: "Este correo electrónico ya existe.",
pt: "Este endereço de e-mail não existe."
},
enterNewEmail: {
de: "Gib deine neue E-Mail ein:",
en: "Enter your new email:",
fr: "Écris ta nouvelle adresse :",
es: "Escribe tu nuevo correo electrónico:",
pt: "Digite seu novo endereço de e-mail:"
},
enterEmail: {
de: "Gib deine E-Mail ein:",
en: "Enter your email:",
fr: "Écris ton adresse e-mail :",
es: "Escribe tu correo electrónico:",
pt: "Digite seu e-mail:"
},
emailDeleteWarning: {
de: "
Achtung! Du hast deinen Anmelde-Code mit Passwort abgesichert. Solltest du deinen Anmelde-Code oder Passwort vergessen, benötigst du eine verifizierte E-Mail-Adresse oder Telefonnummer, um den Zugang zu deinem Konto wiederherzustellen. Jetzt E-Mail-Adresse löschen?",
en_gb: "
Attention! You secured your login code with your password. If you forget either your login code or your password, you will need a verified email address or mobile phone number to recover your account. Delete your email address now?",
en: "
Attention! You secured your login code with your password. If you forget either your login code or your password, you will need a verified email address or cell phone number to recover your account. Delete your email address now?",
fr: "
Attention ! Tu as protégé ton code de connexion avec un mot de passe. Si tu oublies ton code de connexion ou ton mot de passe, tu auras besoin d'une adresse e-mail ou d'un numéro de téléphone pour récupérer ton compte. Effacer ton adresse e-mail maintenant ?",
es: "
¡Atención! Protegiste tu clave de acceso con tu contraseña. Si olvidas tu clave de acceso o tu contraseña, necesitas haber registrado una dirección de correo e o un número de teléfono para recuperar el acceso a tu cuenta. ¿Borrar tu dirección de correo electrónico ahora?",
pt: "
Dann können wir dir deinen Anmelde-Code zusenden, falls du ihn verlierst.
Deine E-Mail wird nie an Dritte weitergegeben!
Achtung: Du musst mind. 16 Jahre alt sein und den Datenschutzbestimmungen zustimmen.",
en: "You can enter your email here.
We can then send you your login code if you lose it.
Your email will never be shared with third parties!
Attention: You must be at least 16 years old and agree to our privacy policy.",
fr: "Tu peux écrire ton adresse e-mail ici.
Nous pouvons ainsi t'envoyer ton code de connexion si tu le perds.
Nous ne partagerons jamais ton adresse e-mail avec des tiers !
Attention : Tu dois avoir 16 ans ou plus et accepter notre politique de protection des données personnelles.",
es: "Puedes escribir aquí tu correo electrónico.
Así podemos mandarte tu clave de acceso si la llegas a perder.
Jamás compartiremos tu dirección de correo electrónico con terceros.
Atención: debes tener por lo menos 16 años de edad y aceptar nuestra política de privacidad.",
pt: "Você pode inserir seu endereço de e-mail aqui.
Assim, podemos te enviar seu código de acesso caso você o perca.
Seu e-mail nunca será repassado a terceiros!
Atenção: Você deve ter pelo menos 16 anos de idade e aceitar nossa política de privacidade."
},
verifyWarning: {
de: "Achtung, bitte verifiziere deine E-Mail-Adresse, damit du den Zugang zu deinem Konto nicht verlieren kannst.",
en: "Attention: Please verify your email address, so that you don’t lose access to your account.",
fr: "Attention : Merci de confirmer ton adresse e-mail pour ne jamais perdre l'accès à ton compte.",
es: "¡Atención!: por favor, verifica tu correo electrónico para que no pierdas el acceso a tu cuenta.",
pt: "Atenção! Por favor, verifique seu endereço de e-mailpara não perder o acesso à sua conta."
}
};
})();
pages/misc/email/show/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: T("settings"),
title: T("emailAddress")
});
};
})();
pages/misc/email/show/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("../_urlDescription/description")();
},
start: function(){
var e, mail, isVerified, hiddenMail;
e = log.findLast("setEMail");
mail = e != null ? e.value : void 8;
isVerified = (e != null ? e.isVerified : void 8) || inc("/lib/util/cache/get/get")("verifiedEMail");
return page.append(mail
? (hiddenMail = inc("/../app01/lib/util/calcHiddenMail/calc")(mail), inc("withMail/withMail")(page, hiddenMail, isVerified))
: inc("withoutMail/withoutMail")());
}
};
};
})();
pages/misc/email/show/withMail/editLink/editLink.ls
(function(){
return function(){
return inc("/lib/gui/link/link")(T("change")).tap(function(){
return startPage({
path: path("../../../edit/page"),
animation: "slideUp"
});
});
};
})();
pages/misc/email/show/withMail/email/email.ls
(function(){
return function(mail){
return Div().css({
margin: "0.5em 1em 0.7em",
fontSize: "1.3em",
userSelect: "text",
wordWrap: "break-word"
}).secureHtml(mail);
};
})();
pages/misc/email/show/withMail/notVerifiedWarning/warning.ls
(function(){
return function(){
return Div().css({
color: Color.grey[550],
width: "30em",
maxWidth: "90%",
margin: "0 auto 0.5em"
}).html(T("verifyWarning"));
};
})();
pages/misc/email/show/withMail/title/title.ls
(function(){
return function(){
return Div().html(T("yourEmail"));
};
})();
pages/misc/email/show/withMail/verifyButton/button.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("../../../verify/page"),
animation: "slideLeft"
});
};
return Div().html(Button(T("confirmNow")).css({
margin: "1em"
}).tap(tap));
};
})();
pages/misc/email/show/withMail/verifyText/icon/icon.ls
(function(){
return function(isVerified){
return SvgIcon({
svg: isVerified
? path("/lib/svg/shape/validated.svg")
: path("/lib/svg/shape/unvalidated.svg"),
color: isVerified
? Color.green[500]
: Color.red[400]
}).css({
width: "1em",
height: "1em",
marginRight: "0.3em"
});
};
})();
pages/misc/email/show/withMail/verifyText/text/text.ls
(function(){
return function(isVerified){
return Div({
color: Color.grey[550]
}).html(isVerified
? T("confirmed")
: T("notConfirmed"));
};
})();
pages/misc/email/show/withMail/verifyText/verifyText.ls
(function(){
return function(isVerified){
return Div().css({
margin: "0 1em 1em",
display: "flex"
}).append(inc("icon/icon")(isVerified), inc("text/text")(isVerified));
};
})();
pages/misc/email/show/withMail/withMail.ls
(function(){
return function(page, mail, isVerified){
var ref$;
return Div().append(inc("title/title")(), inc("email/email")(mail), inc("verifyText/verifyText")(isVerified), !isVerified ? [((ref$ = log.findLast("setLoginCodeNeedsPassword")) != null ? ref$.value : void 8) === true ? inc("notVerifiedWarning/warning")() : void 8, inc("verifyButton/button")()] : void 8, inc("editLink/editLink")());
};
})();
pages/misc/email/show/withoutMail/buttonAdd/button.ls
(function(){
return function(){
var click;
click = function(){
return inc("../../../../_shared/confirmAge16AndPrivacy/confirm")(function(){
return startPage({
path: path("../../../edit/page"),
animation: "slideUp"
});
});
};
return Div({
paddingTop: "2em"
}).append(Button(T("continueButton")).tap(click));
};
})();
pages/misc/email/show/withoutMail/text/text.ls
(function(){
return function(){
return Div().css({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em"
}).html(T("recomendEmailText"));
};
})();
pages/misc/email/show/withoutMail/withoutMail.ls
(function(){
return function(){
return Div().append(inc("text/text")(), inc("buttonAdd/button")());
};
})();
pages/misc/email/verify/_t.ls
(function(){
return {
verifyEmail: {
de: "E-Mail-Adresse bestätigen",
en: "Confirm email address",
fr: "Vérifier l'adresse e-mail",
es: "Verificar correo electrónico",
pt: "Confirmar e-mail"
},
errorText2: {
de: "Ups, hier ist etwas schiefgelaufen.",
en: "Oops, something went wrong here.",
fr: "Oups… Il y a eu un problème.",
es: "¡Ups! Algo salió mal.",
pt: "Ops, algo deu errado aqui."
},
resendEmail: {
de: "E-Mail erneut versendet.",
en: "Sent email again.",
fr: "E-mail envoyé à nouveau.",
es: "Correo enviado nuevamente.",
pt: "E-mail enviado novamente."
},
emptyCode: {
de: "Das Feld darf nicht leer sein.",
en_gb: "This field cannot be left empty.",
en: "This field cannot be left blank.",
fr: "Ce champ ne peut pas rester vide.",
es: "Este campo no puede quedar en blanco.",
pt: "Este campo não pode ficar vazio."
},
codeTooShort: {
de: "Dein Code ist zu kurz.",
en: "Your code is too short.",
fr: "Ton code est trop court.",
es: "Tu clave es demasiado corta.",
pt: "Seu código é curto demais."
},
codeInvalid: {
de: "Dieser Code ist ungültig.",
en: "This code is not valid.",
fr: "Ce code n'est pas valide.",
es: "Esta clave no es válida.",
pt: "Este código não é válido."
},
codeExpired: {
de: "Dieser Code ist abgelaufen.",
en: "This code has expired.",
fr: "Ce code est expiré.",
es: "Esta clave ha expirado.",
pt: "Este código está expirado."
},
sendAgain: {
de: "Nochmal senden",
en: "Send again",
fr: "Renvoyer",
es: "Reenviar",
pt: "Reenviar"
},
enterVerificationCode: {
de: "Trage unten deinen Bestätigungs-Code ein. Wir haben ihn dir soeben per E-Mail an diese Adresse gesendet:",
en: "Enter your verification code below. We just sent it to the following email address:",
fr: "Écris ton code de confirmation ci-dessous. Nous venons juste de te l'envoyer à l'adresse e-mail suivante :",
es: "Escribe tu clave de confirmación aquí abajo. Te la enviamos al siguiente correo electrónico:",
pt: "Digite seu código de confirmação abaixo. Acabamos de enviá-lo para este endereço de e-mail:"
},
checkSpamFolder: {
de: "Bitte überprüfe auch deinen Spam- bzw. Junk-Ordner.",
en_gb: "Please check your junk folder as well.",
en: "Please check your spam folder as well.",
fr: "Merci de regarder aussi dans tes spams.",
es: "Por favor, verifica también la carpeta Spam.",
pt: "Por favor, verifique também sua caixa de spam."
},
errorMessage: {
de: "Ups, hier ist etwas schief gelaufen.",
en: "Oops, something went wrong here.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Algo deu errado aqui."
}
};
})();
pages/misc/email/verify/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("verifyEmail")
});
};
})();
pages/misc/email/verify/api/sendCode/sendCode.ls
(function(){
return function(page, form, mail, hideSendMessage){
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/verificationCode/getMailCode/getMailCode"),
params: {
logId: log.id()
},
onCompleted: function(result){
form.hideSpinner();
if (result.status !== "ok") {
return form.error.html(T("errorText2"));
} else if (hideSendMessage !== true) {
return page.showHelp(T("resendEmail"));
}
},
onError: function(error){
form.hideSpinner();
return form.error.html(T("errorText2"));
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/misc/email/verify/api/verifyCode/verifyCode.ls
(function(){
return function(form, page, mail, code){
var onError;
onError = function(result){
var status;
status = result != null ? result.status : void 8;
return requestAnimationFrame(function(){
form.error.html(status === "empty_code"
? T("emptyCode")
: status === "too_short"
? T("codeTooShort")
: status === "code_invalid"
? T("codeInvalid")
: status === "code_expired"
? T("codeExpired")
: T("errorMessage"));
return form.hideSpinner();
});
};
if (code === "") {
onError({
status: "empty_code"
});
form.input.start();
return;
}
if (code.length !== 6) {
onError({
status: "too_short"
});
form.input.start();
return;
}
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/verificationCode/verifyMailCode/verifyMailCode"),
params: {
logId: log.id(),
code: code
},
onCompleted: function(result){
if (result.status !== "ok") {
return onError(result);
} else {
inc("/lib/util/cache/set/set")("verifiedEMail", mail);
return log.sync(function(){
return startPage({
history: -1,
animation: "slideRight"
});
});
}
},
onError: onError,
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/misc/email/verify/email/email.ls
(function(){
return function(mail){
return Div({
paddingTop: "1em",
fontWeight: "bold"
}).html(mail);
};
})();
pages/misc/email/verify/inputForm/inputForm.ls
(function(){
return function(page, mail){
var validate, change, submit, form;
validate = function(value, key){
value = value.replace(/[^0-9]/g, '');
value = value.toUpperCase();
if (key === "back" && value.length === 3) {
value = value.slice(0, 3);
} else if (value.length > 2) {
value = value.slice(0, 3) + '-' + value.slice(3);
}
if (value.length > 7) {
value = value.slice(0, 7);
}
return value;
};
change = function(key){
var value, validated;
value = form.input.getValue();
validated = validate(value, key);
if (value !== validated) {
return form.input.setValue(validated);
}
};
submit = function(){
var code;
code = form.input.getValue();
code = code.replace("-", "");
return inc("../api/verifyCode/verifyCode")(form, page, mail, code);
};
form = inc("/lib/gui/inputForm/inputForm")({
fixedLength: 7,
change: change,
submit: submit,
submitLabel: T("checkButton"),
screenKeyboardLayout: "validationCode",
screenKeyboardShiftStatus: true
}).css({
marginTop: "0.5em"
});
form.input.css({
minWidth: "8em"
});
return form;
};
})();
pages/misc/email/verify/page.ls
(function(){
return function(page){
var form;
form = null;
page.showHelp = function(value){
return form.error.html(Div().css({
color: Color.grey[500]
}).html(value));
};
return {
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("../_urlDescription/description")();
},
start: function(){
var e, mail;
e = log.findLast("setEMail");
mail = e != null ? e.value : void 8;
page.append(inc("title/title")(), inc("email/email")(mail), form = inc("inputForm/inputForm")(page, mail), inc("sendAgainLink/sendAgainLink")(page, form, mail));
form.input.start();
inc("api/sendCode/sendCode")(page, form, mail, true);
return page.showHelp(T("checkSpamFolder"));
}
};
};
})();
pages/misc/email/verify/sendAgainLink/sendAgainLink.ls
(function(){
return function(page, form, mail){
return inc("/lib/gui/link/link")(T("sendAgain")).css({
marginTop: "0.5em"
}).tap(function(){
return inc("../api/sendCode/sendCode")(page, form, mail);
});
};
})();
pages/misc/email/verify/title/title.ls
(function(){
return function(){
return Div({
lineHeight: "1.4em",
margin: "0.3em 1em 0"
}).html(T("enterVerificationCode"));
};
})();
pages/misc/password/_shared/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("settingsUrl"),
title: T("settings"),
metaDescription: ""
};
};
})();
pages/misc/password/_t.ls
(function(){
return {
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
settingsUrl: {
de: "einstellungen",
en: "settings",
fr: "parametres",
es: "ajustes",
pt: "configuracoes"
},
passwordInput: {
de: "Passwort:",
en: "Password:",
fr: "Mot de passe :",
es: "Contraseña:",
pt: "Senha:"
},
newPasswordInput: {
de: "Neues Passwort:",
en: "New password:",
fr: "Nouveau mot de passe :",
es: "Nueva contraseña:",
pt: "Nova senha:"
},
errorMessage: {
de: "Ups, etwas ist schief gegangen.",
en: "Oops, something went wrong here.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Ocorreu um erro."
},
errorInvalidCharacter: {
de: "Das Passwort enthält ein ungültiges Zeichen: '$1'",
en: "The password contains an invalid character: '$1'",
fr: "Le mot de passe contient un caractère qui n'est pas valide : “$1”",
es: "Tu contraseña contiene un carácter inválido: '$1'",
pt: "Sua senha contém caracteres inválidos: '$1'"
},
errorInvalidLength: {
de: "Das Passwort muss mindestens ((ein | $1)) Zeichen beinhalten.",
en: "The password must contain at least ((one character | $1 characters)).",
fr: "Le mot de passe doit contenir au moins ((un caractère | $1 caractères)).",
es: "La contraseña debe contener por lo menos ((un carácter | $1 caracteres)).",
pt: "A senha deve conter pelo menos ((um caractere | $1 caracteres))."
},
errorOldPassword: {
de: "Das alte Passwort ist nicht korrekt.",
en: "The old password is not correct.",
fr: "L'ancien mot de passe n'est pas correct.",
es: "La contraseña anterior es incorrecta.",
pt: "A senha antiga está incorreta."
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein.",
en: "The password cannot be left blank.",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
emptyNewPassword: {
de: "Das neue Passwort darf nicht leer sein.",
en: "The new password cannot be left blank.",
fr: "Le nouveau mot de passe ne peut pas rester vide.",
es: "La contraseña nueva no puede quedar en blanco.",
pt: "A senha nova não pode ficar em branco."
},
emptyOldPassword: {
de: "Das alte Passwort darf nicht leer sein.",
en: "The old password cannot be left blank.",
fr: "L'ancien mot de passe ne peut pas rester vide.",
es: "La contraseña anterior no puede quedar en blanco.",
pt: "A senha antiga não pode ficar em branco."
},
passwordsNotEqual: {
de: "Die Passwörter stimmen nicht überein!",
en: "The passwords do not match.",
fr: "Les mots de passe ne sont pas identiques !",
es: "Las contraseñas no coinciden.",
pt: "As senhas não coincidem."
},
newPasswordsNotEqual: {
de: "Die neuen Passwörter stimmen nicht überein!",
en: "The new passwords do not match.",
fr: "Les nouveaux mots de passe ne sont pas identiques !",
es: "Las contraseñas nuevas no coinciden.",
pt: "As senhas novas não coincidem."
},
setPassword: {
de: "Passwort setzen",
en: "Set password",
fr: "Établir un mot de passe",
es: "Establecer contraseña",
pt: "Definir senha"
},
confirmPassword: {
de: "Passwort bestätigen:",
en: "Confirm password:",
fr: "Confirmation du mot de passe :",
es: "Confirmar contraseña:",
pt: "Confirmar senha:"
},
confirmNewPassword: {
de: "Neues Passwort bestätigen:",
en: "Confirm new password:",
fr: "Confirmation du nouveau mot de passe :",
es: "Confirmar nueva contraseña:",
pt: "Confirmar nova senha:"
},
oldPassword: {
de: "Altes Passwort:",
en: "Old password:",
fr: "Ancien mot de passe :",
es: "Contraseña anterior:",
pt: "Senha antiga"
},
send: {
de: "Senden",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
},
setSuccess: {
de: "Du hast dein Passwort erfolgreich neu gesetzt!",
en: "You have successfully reset your password.",
fr: "Ton mot de passe a bien été réinitialisé !",
es: "¡Restableciste tu contraseña exitosamente!",
pt: "Você redefiniu sua senha com sucesso!"
},
setSuccessFirstTime: {
de: "Du hast dein Passwort erfolgreich gesetzt!",
en: "You have successfully set your password.",
fr: "Ton mot de passe a bien été établi !",
es: "¡Estableciste tu contraseña exitosamente!",
pt: "Você definiu sua senha com sucesso!"
}
};
})();
pages/misc/password/reset/01_forgot/_t.ls
(function(){
return {
noOptions: {
de: "Leider hast du keine Kontaktinformationen angegeben, damit wir dir einen Link zum Zurücksetzen deines Passworts zuschicken können.
Bitte kontaktiere uns unter support@anton.app",
en: "Unfortunately you have not provided us with any contact information so we cannot send you a link to reset your password.
Please contact us at support@anton.app",
fr: "Tu ne nous as malheureusement pas donné tes coordonnées et nous ne pouvons pas t'envoyer de lien pour redéfinir ton mot de passe.
Merci de nous contacter à support@anton.app",
es: "Lamentablemente, no tenemos ningún contacto tuyo al cual enviarte el vínculo para restablecer tu contraseña.
Por favor, envíanos un correo a support@anton.app",
pt: "Infelizmente, você não forneceu nenhuma informação de contato para que possamos enviar um link para redefinir sua senha.
Por favor, entre em contato conosco através de support@anton.app"
},
askTeacher: {
de: "Du kannst auch deine/n Lehrer/in nach deinem Anmelde-Code fragen.",
en: "You can also ask your teacher for your login-code.",
fr: "Tu peux aussi demander ton code de connexion à ton·ta professeur·e.",
es: "También, puedes preguntarle a tu docente por tu clave de acceso.",
pt: "Você também pode perguntar para seu/sua professor(a) o seu código de acesso."
},
noOptionsAskTeacher: {
de: "Leider hast du keine Kontaktinformationen angegeben, damit wir dir einen Link zum Zurücksetzen deines Passworts zuschicken können.
Du kannst aber deine/n Lehrer/in nach deinem Anmelde-Code fragen.",
en: "Unfortunately you have not provided us with any contact information so we cannot send you a link to reset your password.
You can ask your teacher for your login code.",
fr: "Tu ne nous as malheureusement pas donné tes coordonnées et nous ne pouvons pas t'envoyer de lien pour réinitialiser ton mot de passe.
Tu peux demander ton code de connexion à ton·ta professeur·e.",
es: "Lamentablemente, no tenemos ningún contacto tuyo al cual enviarte el vínculo para restablecer tu contraseña.
Puedes preguntarle tu clave de acceso a tu docente.",
pt: "Infelizmente, você não forneceu nenhuma informação de contato para que possamos enviar um link para redefinir sua senha.
Mas você pode pedir o seu código de acesso ao/à seu/sua professor(a)."
},
howToContact: {
de: "Bitte sag uns, wie wir dich benachrichtigen sollen.",
en: "Please tell us how you would like to be contacted.",
fr: "Merci de nous dire comment tu veux qu'on te contacte.",
es: "¿Cómo quieres que te contactemos?",
pt: "Por favor, diga-nos como devemos contatá-lo."
},
byMail: {
de: "per E-Mail",
en: "by email",
fr: "par e-mail",
es: "Por correo electrónico",
pt: "por e-mail"
},
byTextMessage: {
de: "per SMS",
en: "by text",
fr: "par SMS",
es: "por SMS",
pt: "por SMS"
}
};
})();
pages/misc/password/reset/01_forgot/noOptions/noOptions.ls
(function(){
return function(){
return Div().css({
maxWidth: "90%",
width: "30em",
margin: "0 auto",
lineHeight: "1.5em"
}).html(T("noOptions"));
};
})();
pages/misc/password/reset/01_forgot/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbar2/topbar")({
close: true
});
},
start: function(){
var validateRecovery;
validateRecovery = function(params){
return startPage({
path: path("../02_enterRecoveryMailOrPhone/page"),
params: params
});
};
page.append(inc("recoveryOptions/recoveryOptions")(validateRecovery) || inc("noOptions/noOptions")(page));
return page.top.css({
boxShadow: ""
});
}
};
};
})();
pages/misc/password/reset/01_forgot/recoveryOptions/askTeacher/askTeacher.ls
(function(){
return function(hasOtherOptions){
var text;
text = hasOtherOptions
? T("askTeacher")
: T("noOptionsAskTeacher");
return Div().css({
margin: "0.5em auto 0",
width: "30em",
maxWidth: "90%"
}).html(text);
};
})();
pages/misc/password/reset/01_forgot/recoveryOptions/question/question.ls
(function(){
return function(){
return Div().css({
margin: "0.5em",
lineHeight: "1.5em"
}).html(T("howToContact"));
};
})();
pages/misc/password/reset/01_forgot/recoveryOptions/recoveryOptions.ls
(function(){
return function(onStartRecovery){
var params, hasPhone, hasEMail, hasTeacher, spinner, setFieldsVisible, onOffline, onError, onCompleted, div, question, email, phone, teacher;
params = app.currentPage.params;
hasPhone = params.recoveryOptions.hasPhone;
hasEMail = params.recoveryOptions.hasEMail;
hasTeacher = params.recoveryOptions.hasGroupTeacher;
if (!hasPhone && !hasEMail && !hasTeacher) {
return undefined;
}
spinner = null;
setFieldsVisible = function(visible){
if (visible) {
if (typeof email != 'undefined' && email !== null) {
email.show();
}
if (typeof phone != 'undefined' && phone !== null) {
phone.show();
}
if (typeof teacher != 'undefined' && teacher !== null) {
teacher.show();
}
return typeof question != 'undefined' && question !== null ? question.show() : void 8;
} else {
if (typeof email != 'undefined' && email !== null) {
email.hide();
}
if (typeof phone != 'undefined' && phone !== null) {
phone.hide();
}
if (typeof teacher != 'undefined' && teacher !== null) {
teacher.hide();
}
return typeof question != 'undefined' && question !== null ? question.hide() : void 8;
}
};
onOffline = function(){
setFieldsVisible(true);
spinner.remove();
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(error){
debug(error);
setFieldsVisible(true);
return spinner.remove();
};
onCompleted = function(recoveryOption){
setFieldsVisible(false);
params.recoveryOption = recoveryOption;
return onStartRecovery(params);
};
return div = Div().append(hasPhone || hasEMail ? question = inc("question/question")() : void 8, Div().html(hasEMail ? email = inc("sendViaEmail/sendViaEmail")(onCompleted) : void 8, hasPhone ? phone = inc("sendViaSMS/sendViaSMS")(onCompleted) : void 8, hasTeacher ? teacher = inc("askTeacher/askTeacher")(hasPhone || hasEMail) : void 8));
};
})();
pages/misc/password/reset/01_forgot/recoveryOptions/sendViaEmail/sendViaEmail.ls
(function(){
return function(startRecovery){
var click;
click = function(){
return startRecovery("email");
};
return Button({
label: T("byMail")
}).css({
margin: "0.5em"
}).tap(click);
};
})();
pages/misc/password/reset/01_forgot/recoveryOptions/sendViaSMS/sendViaSMS.ls
(function(){
return function(startRecovery){
var click;
click = function(){
return startRecovery("sms");
};
return Button({
label: T("byTextMessage")
}).css({
margin: "0.5em"
}).tap(click);
};
})();
pages/misc/password/reset/02_enterRecoveryMailOrPhone/_t.ls
(function(){
return {
emptyField: {
de: "Bitte trage etwas ein.",
en: "Please enter something.",
fr: "Merci d'entrer quelque chose.",
es: "Por favor, escribe algo.",
pt: "Por favor, escreva algo."
},
inputMailOrPhone: {
de: "Bitte trage deine hinterlegte $1 ein:",
en: "Please enter your given $1.",
fr: "Merci d'entrer ton $1.",
es: "Por favor, ingresa tu $1.",
pt: "Por favor, digite seu $1."
},
errorWrongOptionEmail: {
de: "Die angegebene E-Mail-Adresse ist nicht in deinem ANTON-Konto gespeichert.",
en: "This email address is not connected to your account.",
fr: "Cette adresse e-mail n'est pas connectée à ton compte.",
es: "Este correo electrónico no está registrada en tu cuenta.",
pt: "Este endereço de e-mail não está registrado em sua conta."
},
errorWrongOptionPhone: {
de: "Die angegebene Handynummer ist nicht in deinem ANTON-Konto gespeichert.",
en_gb: "This mobile phone number is not connected to your account.",
en: "This cell phone number is not connected to your account.",
fr: "Ce numéro de téléphone n'est pas connecté à ton compte.",
es: "Este número de teléfono no está registrado en tu cuenta.",
pt: "Este número de telefone não está registrado em sua conta."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen!",
en: "Oops, something has gone wrong!",
fr: "Oups… Il y a eu un problème !",
es: "¡Ups! Algo salió mal",
pt: "Ops! Algo deu errado!"
},
errorTooManyRequested: {
de: "Aus Sicherheitsgründen kannst du erst in (($1 Minute | $1 Minuten)) einen neuen Code anfordern.",
en: "Due to security reasons, you will need to wait (($1 minute | $1 minutes)) before you are able to request a new code.",
fr: "Pour des raisons de sécurité, tu dois attendre (($1 minute | $1 minutes)) avant de pouvoir demander un nouveau code.",
es: "Por motivos de seguridad, debes esperar (($1 minuto | $1 minutos)) antes de solicitar un nuevo código.",
pt: "Por motivos de segurança, você só poderá solicitar um novo código em (($1 minuto | $1 minutos))."
}
};
})();
pages/misc/password/reset/02_enterRecoveryMailOrPhone/inputForm/inputForm.ls
(function(){
return function(option, onSubmit){
var label;
label = option === "email"
? T("email")
: T("cellNumber");
return inc("/lib/gui/inputForm/inputForm")({
label: T("inputMailOrPhone", label),
submitLabel: T("continueButton"),
submit: onSubmit,
cancel: false,
native: true,
placeholder: label.replace("", ""),
screenKeyboardLayout: option === "email" ? twitch({
de: "login",
en: "loginEN",
fr: "loginFR",
es: "loginES",
pt: "loginPT"
}) : "phoneNumber"
}).css({
display: "inline-block",
width: "100%",
maxWidth: "18em"
});
};
})();
pages/misc/password/reset/02_enterRecoveryMailOrPhone/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var params, recoveryOption, onError, onSubmit;
params = page.params;
recoveryOption = params.recoveryOption;
onError = function(error){
var message, minutes, that;
page.form.hideSpinner();
message = error.status === "error_no_user_found"
? T("errorUserNotFound")
: error.status === "error_wrong_recovery_option"
? recoveryOption === "email"
? T("errorWrongOptionEmail")
: T("errorWrongOptionPhone")
: error.status === "error_blocked"
? T("errorBlocked")
: error.status === "error_captcha_failed"
? T("errorCaptchaFailed")
: error.status === "error_too_many_codes_requested"
? (minutes = _.ceil((new Date(error.blockedUntil) - new Date()) / (1000 * 60)), T("errorTooManyRequested", minutes))
: (that = error.message)
? that
: T("errorMessage");
page.form.error.html(message);
page.form.error.css({
minHeight: page.form.error.height() + "px"
});
page.form.input.start();
return page.form.input.selectAll();
};
onSubmit = function(){
var value;
page.form.showSpinner();
value = page.form.input.getValue();
if (value === "") {
return onError({
message: T("emptyField")
});
}
return inc("requestResetPassword/request")({
uniqName: params.uniqName,
email: params.email,
phone: params.phone,
loginCode: params.loginCode,
recoveryOption: recoveryOption,
recoveryValue: value,
requiredVisibleDiv: page,
onError: onError,
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(){
return startPage({
path: path("../03_resetPasswordCode/page"),
params: params
});
}
});
};
page.append(page.form = inc("inputForm/inputForm")(recoveryOption, onSubmit));
return page.form.input.start();
}
};
};
})();
pages/misc/password/reset/02_enterRecoveryMailOrPhone/requestResetPassword/request.ls
(function(){
return function(o){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/passwordReset/sendCode/send"),
params: {
uniqName: o.uniqName,
email: o.email,
phone: o.phone,
loginCode: o.loginCode,
recoveryOption: o.recoveryOption,
recoveryValue: o.recoveryValue,
checkCaptcha: true
},
requiredVisibleDiv: o.requiredVisibleDiv,
onError: function(error){
return o.onError(error);
},
onOffline: function(){
return o.onOffline();
},
onCompleted: function(result){
if (result.status !== "ok") {
return o.onError(result);
} else {
return o.onCompleted();
}
}
});
};
})();
pages/misc/password/reset/03_resetPasswordCode/_t.ls
(function(){
return {
inputEmailOrPhoneCode: {
de: "Bitte trage den Code ein, den wir soeben an deine $1 geschickt haben.",
en: "Please enter the code that we just sent to your $1.",
fr: "Merci d'entrer le code que nous venons d'envoyer à ton $1.",
es: "Por favor, ingresa el código que acabamos de enviarte a tu $1.",
pt: "Por favor, digite o código que acabamos de enviar para seu $1."
},
errorInvalidCode: {
de: "Dein Code ist nicht gültig. Bitte überprüfe deine Eingabe oder fordere einen neuen an.",
en_gb: "Your code is not valid. Please check your entry or request a new one.",
en: "Your code is not valid. Please check your input or request a new one.",
fr: "Ton code n'est pas valide. Merci de le vérifier ou d'en demander un nouveau.",
es: "Tu código no es válido. Por favor, verifica una vez más o vuelve a pedirlo.",
pt: "Seu código não é válido. Por favor, verifique mais uma vez ou solicite um novo código."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen!",
en: "Oops, something has gone wrong!",
fr: "Oups… Il y a eu un problème !",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Algo deu errado!"
}
};
})();
pages/misc/password/reset/03_resetPasswordCode/inputForm/inputForm.ls
(function(){
return function(onSubmit){
var validate, change, submit, form;
validate = function(value, key){
value = value.replace(/[^0-9]/g, '');
value = value.toUpperCase();
if (key === "back" && value.length === 3) {
value = value.slice(0, 3);
} else if (value.length > 2) {
value = value.slice(0, 3) + '-' + value.slice(3);
}
if (value.length > 7) {
value = value.slice(0, 7);
}
return value;
};
change = function(key){
var value, validated;
value = form.input.getValue();
validated = validate(value, key);
if (value !== validated) {
return form.input.setValue(validated);
}
};
submit = function(){
var code;
code = form.input.getValue();
if (code === "") {
form.input.start();
return;
}
code = code.replace("-", "");
return onSubmit(code);
};
form = inc("/lib/gui/inputForm/inputForm")({
fixedLength: 7,
change: change,
submit: submit,
submitLabel: T("continueButton"),
screenKeyboardLayout: "validationCode",
screenKeyboardShiftStatus: true
}).css({
marginTop: "0.5em"
});
form.input.css({
minWidth: "8em"
});
return form;
};
})();
pages/misc/password/reset/03_resetPasswordCode/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var submit;
submit = function(code){
var params;
page.form.showSpinner();
params = page.params;
params.code = code;
return inc("requestCheckCode/request")({
uniqName: params.uniqName,
email: params.email,
phone: params.phone,
loginCode: params.loginCode,
code: params.code,
requiredVisibleDiv: page,
onError: function(error){
var message;
page.form.hideSpinner();
message = error.status === "error_user_not_found"
? T("errorUserNotFound")
: error.status === "error_invalid_code"
? T("errorInvalidCode")
: error.status === "error_captcha_failed"
? T("errorCaptchaFailed")
: T("errorMessage");
page.form.error.html(message);
page.form.error.css({
minHeight: page.form.error.height() + "px"
});
page.form.input.start();
return page.form.input.selectAll();
},
onOffline: function(){
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(){
return startPage({
path: path("../04_resetPasswordPassword/page"),
params: params
});
}
});
};
page.append(Div({
width: "30em",
margin: "0 auto",
maxWidth: "90%"
}).html(T("inputEmailOrPhoneCode", page.params.recoveryOption === 'email'
? T("email")
: T("cellNumber"))), page.form = inc("inputForm/inputForm")(submit));
return page.form.input.start();
}
};
};
})();
pages/misc/password/reset/03_resetPasswordCode/requestCheckCode/request.ls
(function(){
return function(o){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/passwordReset/checkCode/check"),
params: {
uniqName: o.uniqName,
email: o.email,
phone: o.phone,
code: o.code,
loginCode: o.loginCode,
checkCaptcha: true
},
requiredVisibleDiv: o.requiredVisibleDiv,
onError: function(error){
return o.onError(error);
},
onOffline: function(){
return o.onOffline();
},
onCompleted: function(result){
if (result.status !== "ok") {
return o.onError(result);
} else {
return o.onCompleted();
}
}
});
};
})();
pages/misc/password/reset/04_resetPasswordPassword/_t.ls
(function(){
return {
errorInvalidCode: {
de: "Dein Code ist nicht mehr gültig. Bitte fordere einen neuen an.",
en_gb: "Your code is not valid any more. Please request a new one.",
en: "Your code is not valid anymore. Please request a new one.",
fr: "Ton code n'est plus valide. Merci d'en demander un nouveau.",
es: "Tu código ya no es válido. Por favor, pide uno nuevo.",
pt: "Seu código não é mais válido. Por favor, solicite um novo."
}
};
})();
pages/misc/password/reset/04_resetPasswordPassword/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var submit;
submit = function(){
var params;
if (inc("validate/validate")(page.form)) {
params = page.params;
params.password = page.form.input1.getValue();
page.form.showSpinner();
return inc("submit/submit")(params, {
onError: function(){
page.form.hideSpinner();
page.form.error.html(T("errorOccurred"));
return page.form.input1.start();
},
onOffline: function(){
page.form.hideSpinner();
page.form.input1.start();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var s, message;
if (result.status === "ok") {
return startPage({
path: path("../05_resetPasswordDone/page")
});
} else {
page.form.hideSpinner();
s = result.status;
message = s === "error_user_not_found"
? T("errorUserNotFound")
: s === "error_captcha_failed"
? T("errorCaptchaFailed")
: s === "error_invalid_code"
? T("errorInvalidCode")
: s === "error_invalid_length"
? T("errorInvalidLength", result.count)
: s === "error_invalid_character"
? T("errorInvalidCharacter", result.character)
: T("errorOccurred");
page.form.error.html(message);
return page.form.input1.start();
}
}
});
}
};
page.append(page.form = inc("/lib/gui/inputForm/inputForm2x")({
label1: T("newPasswordInput"),
label2: T("confirmNewPassword"),
submit: submit,
isPassword: true
}));
return page.form.input1.start();
}
};
};
})();
pages/misc/password/reset/04_resetPasswordPassword/submit/submit.ls
(function(){
return function(params, o){
var p;
p = params;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/passwordReset/resetPassword/reset"),
params: {
password: p.password,
code: p.code,
uniqName: p.uniqName,
email: p.email,
phone: p.phone,
loginCode: p.loginCode,
checkCaptcha: true
},
onCompleted: o.onCompleted,
onError: o.onError,
onOffline: o.onOffline
});
};
})();
pages/misc/password/reset/04_resetPasswordPassword/validate/validate.ls
(function(){
return function(form){
var value1, value2;
value1 = form.input1.getValue();
value2 = form.input2.getValue();
if (value1 === "") {
form.error.html(T("emptyPassword"));
form.input1.start();
return false;
}
if (value2 === "") {
form.error.html(T("emptyPassword"));
return false;
}
if (value1 !== value2) {
form.error.html(T("passwordsNotEqual"));
form.input2.selectAll();
return false;
}
return true;
};
})();
pages/misc/password/reset/05_resetPasswordDone/_t.ls
(function(){
return {
passwordResetSuccess: {
de: "Du hast dein Passwort erfolgreich neu gesetzt.",
en: "You have successfully reset your password.",
fr: "Tu as bien réinitialisé ton mot de passe.",
es: "Restableciste tu contraseña exitosamente.",
pt: "Você redefiniu sua senha com sucesso."
}
};
})();
pages/misc/password/reset/05_resetPasswordDone/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
return page.append(Div({
marginBottom: "1em"
}).html(T("passwordResetSuccess")), Button(T("closeButton")).tap(function(){
return startPage({
history: function(path){
return !_.includes(path, "/password/reset");
},
animation: "slideDown"
});
}));
}
};
};
})();
pages/misc/password/reset/_t.ls
(function(){
return {
errorUserNotFound: {
de: "Wir konnten dein Nutzerkonto leider nicht finden.",
en: "We couldn't find your account.",
fr: "Nous n'avons pas trouvé ton compte.",
es: "No pudimos encontrar tu cuenta.",
pt: "Não foi possível encontrar sua conta."
},
email: {
de: "E-Mail-Adresse",
en: "email address",
fr: "adresse e-mail",
es: "correo electrónico",
pt: "endereço de e-mail"
},
cellNumber: {
de: "Handynummer",
en_gb: "mobile phone number",
en: "cell phone number",
fr: "numéro de téléphone",
es: "número de teléfono",
pt: "número de telefone"
}
};
})();
pages/misc/password/set/_topbar/topbar.ls
(function(){
return function(context){
var params;
params = context === "startUser"
? {
close: true
}
: {
back: true,
backLabel: T("backButton")
};
params.title = T("setPassword");
return inc("/addons/topbar2/topbar")(params);
};
})();
pages/misc/password/set/errorDiv/div.ls
(function(){
return function(){
return Div({
color: Color.red[600],
marginTop: "0.5em",
textAlign: "center",
minHeight: "3em"
});
};
})();
pages/misc/password/set/page.ls
(function(){
return function(page){
var context;
context = page.params.context;
return {
top: function(){
return inc("_topbar/topbar")(context);
},
urlDescription: function(){
return inc("../_shared/_urlDescription/description")();
},
start: function(){
var firstTime, finish;
firstTime = page.params.firstTime;
finish = function(password){
var that;
if (that = page.params.finishFunctionPath) {
return inc(that)();
} else {
return startPage({
history: -2,
animation: "slideRight"
});
}
};
page.submit = function(values){
values == null && (values = page.form.getValues());
if (inc("validate/validate")(page, firstTime, values)) {
return inc("submit/submit")(page, values, function(){
if (context === "settings") {
inc("/lib/gui/toast/toast")({
label: firstTime
? T("setSuccessFirstTime")
: T("setSuccess")
});
}
return finish();
});
}
};
page.append(Div({
width: "20em",
maxWidth: "95%",
margin: "0 auto",
textAlign: "left"
}).append(page.form = inc("/lib/gui/multiform/multiform")({
onSubmit: page.submit,
fields: [
!firstTime ? {
id: "oldPw",
label: T("oldPassword"),
type: "input",
isPassword: true
} : void 8, {
id: "newPw1",
label: firstTime
? T("passwordInput")
: T("newPasswordInput"),
type: "input",
isPassword: true
}, {
id: "newPw2",
label: firstTime
? T("confirmPassword")
: T("confirmNewPassword"),
type: "input",
isPassword: true
}, {
id: "button",
type: "button",
label: T("send")
}
]
}), page.errorDiv = inc("errorDiv/div")()));
return page.form.start();
}
};
};
})();
pages/misc/password/set/submit/submit.ls
(function(){
return function(page, values, onDone){
var onError, onOffline, onCompleted;
page.form.showSpinner();
onError = function(error){
var message;
page.form.hideSpinner();
message = error.status === "error_invalid_length"
? T("errorInvalidLength", error.count)
: error.status === "error_invalid_character"
? T("errorInvalidCharacter", error.character)
: error.status === "error_oldPassword"
? T("errorOldPassword")
: T("errorMessage");
return page.errorDiv.html(message);
};
onOffline = function(){
page.form.hideSpinner();
page.form.start();
return inc("/lib/offline/offlinePopup/popup")();
};
onCompleted = function(result){
if (result.status !== "ok") {
return onError(result);
} else {
return log.sync(function(error){
if (error) {
return onOffline();
} else {
return onDone();
}
});
}
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setPassword/set"),
params: {
oldPassword: values.oldPw,
password: values.newPw1,
logId: log.id()
},
requiredVisibleDiv: page.form,
onCompleted: onCompleted,
onError: onError,
onOffline: onOffline
});
};
})();
pages/misc/password/set/validate/validate.ls
(function(){
return function(page, firstTime, values){
var vOld, vNew1, vNew2;
vOld = values.oldPw;
vNew1 = values.newPw1;
vNew2 = values.newPw2;
if (vOld != null && !vOld) {
page.errorDiv.html(T("emptyOldPassword"));
return false;
}
if (vNew1 === "" || vNew2 === "") {
page.errorDiv.html(firstTime
? T("emptyPassword")
: T("emptyNewPassword"));
return false;
}
if (vNew1 !== vNew2) {
page.errorDiv.html(firstTime
? T("passwordsNotEqual")
: T("newPasswordsNotEqual"));
return false;
}
return true;
};
})();
pages/misc/phoneNumber/_urlDescription/_t.ls
(function(){
return {
phoneNumber: {
de: "Telefonnummer",
en_gb: "Mobile phone number",
en: "Cell phone number",
fr: "Numéro de téléphone",
es: "Número de teléfono",
pt: "Número de telefone"
},
phoneNumberUrl: {
de: "telefonnummer",
en: "phone-number",
fr: "numero-de-telephone",
es: "numero-de-telefono",
pt: "numero-de-telefone"
}
};
})();
pages/misc/phoneNumber/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("phoneNumberUrl"),
title: T("phoneNumber"),
metaDescription: ""
};
};
})();
pages/misc/phoneNumber/edit/_t.ls
(function(){
return {
changePhoneNumber: {
de: "Telefonnummer ändern",
en_gb: "Change mobile phone number",
en: "Change cell phone number",
fr: "Changer de numéro de téléphone",
es: "Cambiar número de teléfono",
pt: "Modificar número de telefone"
},
setPhoneNumber: {
de: "Telefonnummer hinzufügen",
en_gb: "Set mobile phone number",
en: "Set cell phone number",
fr: "Ajouter un numéro de téléphone",
es: "Establecer número de teléfono",
pt: "Adicionar número de telefone"
},
phoneNumber: {
de: "Handynummer",
en_gb: "Mobile phone number",
en: "Cell phone number",
fr: "Numéro de portable",
es: "Número de teléfono",
pt: "Número do celular"
},
enterNewNumber: {
de: "Gib deine neue Nummer mit Ländervorwahl ein: (im Format +491234567890)",
en_gb: "Enter your new number along with the country code: (for example +441234567890)",
en: "Enter your new number along with the country code: (for example +11234567890)",
fr: "Écris ton nouveau numéro avec l'indicatif de ton pays : (exemple +331234567890)",
es: "Ingresa tu nuevo número de teléfono con el prefijo de tu país: (ejemplo +521234567890)",
pt: "Insira seu novo número com o prefixo do seu país: (por exemplo +551234567890)"
},
enterNumber: {
de: "Gib deine Nummer mit Ländervorwahl ein: (im Format +491234567890)",
en_gb: "Enter your number along with the country code: (for example +441234567890)",
en: "Enter your number along with the country code: (for example +11234567890)",
fr: "Écris ton numéro avec l'indicatif de ton pays : (exemple +331234567890)",
es: "Ingresa tu número con el prefijo de tu país: (ejemplo +521234567890)",
pt: "Insira seu número com o prefixo do seu país: (por exemplo +551234567890)"
},
reallyDeleteNumber: {
de: "Möchtest du wirklich deine Telefonnummer löschen?",
en_gb: "Do you really want to delete your mobile phone number?",
en: "Do you really want to delete your cell phone number?",
fr: "Tu veux vraiment effacer ton numéro de téléphone ?",
es: "¿Realmente quieres borrar tu número de teléfono?",
pt: "Tem certeza que deseja apagar seu número de telefone?"
},
phoneDeleteWarning: {
de: "
Achtung! Du hast deinen Anmelde-Code mit Passwort abgesichert. Solltest du deinen Anmelde-Code oder Passwort vergessen, benötigst du eine verifizierte Telefonnummer oder E-Mail-Adresse, um den Zugang zu deinem Konto wiederherzustellen. Jetzt Telefonnummer löschen?",
en_gb: "
Attention! You secured your login code with your password. If you forget either your login code or your password, you will need a verified mobile phone number or email address to recover your account. Delete mobile phone number now?",
en: "
Attention! You secured your login code with your password. If you forget either your login code or your password, you will need a verified cell phone number or email address to recover your account. Delete cell phone number now?",
fr: "
Attention ! Tu as sécurisé ton code de connexion avec un mot de passe. Si tu oublies ton code de connexion ou ton mot de passe, tu auras besoin d'un numéro de téléphone vérifié ou d'une adresse e-mail pour récupérer ton compte. Effacer le numéro de téléphone maintenant ?",
es: "
¡Atención! Protegiste tu clave de acceso con tu contraseña. Si olvidas tu clave de acceso o tu contraseña, necesitas haber registrado una dirección de correo electrónico o un número de teléfono para recuperar el acceso a tu cuenta. ¿Borrar tu número de teléfono ahora?",
pt: "
Aviso! Você protegeu seu código de login com uma senha.Se você esquecer seu código de login ou senha, precisará de um número de telefone validado ou um endereço de e-mail para recuperar o acesso à sua conta. Excluir o número de telefone agora?"
},
emptyNumber: {
de: "Die Telefonnummer darf nicht leer sein!",
en_gb: "The mobile phone number cannot be left blank!",
en: "The cell phone number cannot be left blank!",
fr: "Le numéro de téléphone ne peut pas rester vide.",
es: "El número de teléfono no puede quedar en blanco.",
pt: "O número de telefone não pode ficar em branco."
},
errorInvalid: {
de: "Die Telefonnummer ist ungültig.",
en_gb: "This mobile phone number is not valid.",
en: "This cell phone number is not valid.",
fr: "Ce numéro de téléphone n'est pas valide.",
es: "Este número de teléfono no es válido.",
pt: "Este número de telefone não é válido."
},
errorUnavailable: {
de: "Die Telefonnummer ist bereits vergeben.",
en_gb: "This mobile phone number is already taken.",
en: "This cell phone number is already taken.",
fr: "Ce numéro de téléphone est déjà utilisé.",
es: "Este número de teléfono ya existe.",
pt: "Este número de telefone já está sendo utilizado."
},
errorIdentical: {
de: "Dies ist bereits deine Telefonnummer.",
en_gb: "This is already your mobile phone number.",
en: "This is already your cell phone number.",
fr: "C'est déjà ton numéro de téléphone.",
es: "Este ya es tu número de teléfono.",
pt: "Este já é seu número de telefone."
},
errorInvalidSyntax: {
de: "Bitte gib deine Nummer im angegebenen Format mit „+“ und Ländervorwahl an.",
en: "Please enter your number in the specified format with “+” and the country code.",
fr: "Merci d'écrire ton numéro suivant le format spécifié avec “+” et l'indicatif du pays.",
es: "Por favor, ingresa tu número utilizando el formato indicado: “+” y luego el prefijo del país.",
pt: "Por favor, digite seu número utilizando o formato indicado: “+” e depois o prefixo do seu país."
}
};
})();
pages/misc/phoneNumber/edit/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: true,
title: page.oldEvent
? T("changePhoneNumber")
: T("setPhoneNumber")
});
};
})();
pages/misc/phoneNumber/edit/confirmPassword/confirm.ls
(function(){
return function(page){
return function(){
var ref$;
if (!((ref$ = page.oldEvent) != null && ref$.isVerified)) {
return page.setNumber();
}
return inc("/lib/gui/confirmPasswordPopup/popup")({
label: T("enterPassword", T("yourPhone")),
onDone: function(isCorrect, password){
if (!isCorrect) {
return page.onError({
status: "error_wrongPassword"
});
} else {
return page.setNumber(password);
}
},
onOffline: page.onOffline,
onError: page.onError,
onAborted: function(){
page.form.hideSpinner();
return page.form.input.start();
}
});
};
};
})();
pages/misc/phoneNumber/edit/deleteButton/button.ls
(function(){
return function(page){
return Button({
icon: path("/lib/svg/icon/bin.svg")
}).css({
marginRight: "0.4em"
}).tap(function(){
return page.submit({
'delete': true
});
});
};
})();
pages/misc/phoneNumber/edit/onCompleted/onCompleted.ls
(function(){
return function(page){
return function(result){
if (result.status !== "ok") {
page.onError(result);
return page.form.input.start();
} else {
inc("/lib/util/cache/set/set")("verifiedPhoneNumber", "");
return log.sync(function(error){
if (error) {
return page.onOffline();
} else {
return startPage({
history: -1,
animation: "slideDown"
});
}
});
}
};
};
})();
pages/misc/phoneNumber/edit/onError/onError.ls
(function(){
return function(page){
return function(error){
page.form.hideSpinner();
return requestAnimationFrame(function(){
return page.form.error.html(!error
? T("errorMessage")
: error.status === "error_invalid_syntax"
? T("errorInvalidSyntax")
: error.status === "error_invalid"
? T("errorInvalid")
: error.status === "error_captcha_failed"
? T("errorCaptchaFailed")
: error.status === "error_unavailable"
? T("errorUnavailable")
: error.status === "error_wrongPassword"
? T("errorPassword")
: error.status === "error_emptyPassword"
? T("emptyPassword")
: error.status === "error_identical"
? T("errorIdentical")
: T("errorMessage"));
});
};
};
})();
pages/misc/phoneNumber/edit/onOffline/onOffline.ls
(function(){
return function(page){
return function(){
page.form.hideSpinner();
page.form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
};
};
})();
pages/misc/phoneNumber/edit/page.ls
(function(){
return function(page){
page.oldEvent = log.findLast("setPhoneNumber");
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("../_urlDescription/description")();
},
start: function(){
page.onError = inc("onError/onError")(page);
page.onOffline = inc("onOffline/onOffline")(page);
page.confirmPassword = inc("confirmPassword/confirm")(page);
page.setNumber = inc("setNumber/set")(page);
page.onCompleted = inc("onCompleted/onCompleted")(page);
page.submit = inc("submit/submit")(page);
page.append(page.form = inc("/lib/gui/inputForm/inputForm")({
label: page.oldEvent
? T("enterNewNumber")
: T("enterNumber"),
submitLabel: T("continueButton"),
submit: page.submit,
forceShowButtons: true,
cancel: false,
native: true,
screenKeyboardLayout: "phoneNumber"
}));
if (page.oldEvent) {
page.form.findFirst(".buttonsSubmitCancel").prepend(inc("deleteButton/button")(page));
}
return page.form.input.start();
}
};
};
})();
pages/misc/phoneNumber/edit/setNumber/set.ls
(function(){
return function(page){
return function(password, dryRun){
var set;
set = function(){
page.form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setPhoneNumber/set"),
params: {
phoneNumber: page.newNumber,
password: password,
dryRun: dryRun,
logId: log.id()
},
onCompleted: function(result){
if (result.status !== "ok") {
return page.onError(result);
} else {
if (dryRun) {
return page.confirmPassword();
} else {
return page.onCompleted(result);
}
}
},
onError: page.onError,
onOffline: page.onOffline
});
};
if (page.newNumber && !page.newNumber.match(/^\+[0-9]/)) {
return page.onError({
status: "error_invalid_syntax"
});
} else {
return set();
}
};
};
})();
pages/misc/phoneNumber/edit/submit/deletePopup/popup.ls
(function(){
return function(form, onDone){
var clickYes, html, ref$, popup;
clickYes = function(){
return popup.close("confirm");
};
html = Div().css({
margin: "1em 0.5em"
}).append(Div().css({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("reallyDeleteNumber"), ((ref$ = log.findLast("setLoginCodeNeedsPassword")) != null ? ref$.value : void 8) === true ? T("phoneDeleteWarning") : void 8), Button(T("cancelButton")).css({
margin: "0.2em"
}).tap(function(){
return popup.close();
}), Button(T("yesDelete")).css({
margin: "0.2em"
}).tap(clickYes).addClass("keyManager-enter").bind("keyManager", clickYes));
return popup = inc("/lib/gui/popup/popup")({
html: html,
onClose: function(type){
return onDone(type === "confirm");
}
});
};
})();
pages/misc/phoneNumber/edit/submit/submit.ls
(function(){
return function(page){
return function(o){
var oldNumber, ref$, form, newNumber;
oldNumber = (ref$ = page.oldEvent) != null ? ref$.value : void 8;
form = page.form;
page.newNumber = o != null && o['delete']
? ""
: form.input.getValue();
newNumber = page.newNumber;
if (newNumber === oldNumber) {
page.onCompleted({
status: "ok"
});
return;
}
if (newNumber === "" && !oldNumber) {
form.error.html(T("emptyNumber"));
form.input.start();
return;
}
form.error.html(" ");
if (!oldNumber) {
return page.setNumber();
} else if (newNumber === "") {
return inc("deletePopup/popup")(form, function(confirm){
if (confirm) {
return page.confirmPassword();
} else {
return form.input.start();
}
});
} else {
return page.setNumber(null, true);
}
};
};
})();
pages/misc/phoneNumber/show/_t.ls
(function(){
return {
phoneNumber: {
de: "Telefonnummer",
en_gb: "Mobile phone number",
en: "Cell phone number",
fr: "Numéro de téléphone",
es: "Número de telefono",
pt: "Número de telefone"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
change: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
},
yourNumber: {
de: "Deine Nummer:",
en: "Your number:",
fr: "Ton numéro :",
es: "Tu número de teléfono:",
pt: "Seu número"
},
verified: {
de: "Bestätigt.",
en: "Verified.",
fr: "Confirmé.",
es: "Confirmado.",
pt: "Confirmado"
},
notVerified: {
de: "Noch nicht bestätigt.",
en: "Not verified yet.",
fr: "Pas encore confirmé.",
es: "Sin confirmar.",
pt: "Ainda não confirmado."
},
enterNumber: {
de: "Telefonnummer eingeben",
en_gb: "Enter mobile phone number",
en: "Enter cell phone number",
fr: "Écrire ton numéro de téléphone",
es: "Ingresar número de teléfono",
pt: "Inserir número de telefone"
},
recomendNumberText: {
de: "Hier kannst du deine Telefonnummer eintragen.
Dann können wir dir deinen Anmelde-Code per SMS zusenden, falls du ihn verlierst.
Deine Telefonnummer wird nie an Dritte weitergegeben!
Achtung: Du musst mind. 16 Jahre alt sein und den Datenschutzbestimmungen zustimmen.",
en_gb: "You can enter your mobile phone number here.
We can then text you your registration code if you lose it.
Your mobile phone number will never be shared with third parties!
Attention: You must be at least 16 years old and agree to our privacy policy.",
en: "You can enter your cell phone number here.
We can then text you your registration code if you lose it.
Your cell phone number will never be shared with third parties!
Attention: You must be at least 16 years old and agree to our privacy policy.",
fr: "Tu peux écrire ton numéro de téléphone ici.
Nous pouvons ainsi t'envoyer ton code de connexion par SMS si tu le perds.
Nous ne partagerons jamais ton numéro de téléphone avec des tiers !
Attention : Tu dois avoir 16 ans ou plus et accepter notre politique de protection des données personnelles.",
es: "Puedes Ingresar aquí tu número de teléfono.
Así podemos mandarte tu clave de acceso por SMS si la llegaras a perder.
Jamás compartiremos tu número de teléfono con terceros.
Atención: debes tener por lo menos 16 años de edad y aceptar nuestra política de privacidad.",
pt: "Você pode inserir seu número de celular aqui.
Assim, poderemos te enviar seu código de acesso por SMS, caso você o perca.
Seu número de telefone nunca será fornecido a terceiros!
Atenção: Você deve ter pelo menos 16 anos de idade e aceitar nossa política de privacidade."
},
confirmNow: {
de: "Jetzt bestätigen",
en: "Verify now",
fr: "Confirmer maintenant",
es: "Verificar ahora",
pt: "Confirmar agora"
},
verifyWarning: {
de: "Achtung, bitte verifiziere deine Telefonnummer, damit du den Zugang zu deinem Konto nicht verlieren kannst.",
en_gb: "Attention: Please verify your mobile phone number so that you don’t lose access to your account.",
en: "Attention: Please verify your cell phone number so that you don’t lose access to your account.",
fr: "Attention : Merci de confirmer ton numéro de téléphone pour ne jamais perdre l'accès à ton compte.",
es: "¡Atención!: por favor, verifica tu número de teléfono para que no pierdas el acceso a tu cuenta.",
pt: "Atenção! Por favor, verifique o seu número de telefonepara que não perca o acesso à sua conta."
}
};
})();
pages/misc/phoneNumber/show/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: T("settings"),
title: T("phoneNumber")
});
};
})();
pages/misc/phoneNumber/show/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("../_urlDescription/description")();
},
start: function(){
var e, number, isVerified, hiddenNumber;
e = log.findLast("setPhoneNumber");
number = e != null ? e.value : void 8;
isVerified = (e != null ? e.isVerified : void 8) || e != null && inc("/lib/util/cache/get/get")("verifiedPhoneNumber");
return page.append(number
? (hiddenNumber = inc("/../app01/lib/util/calcHiddenPhoneNumber/calc")(number), inc("withNumber/withNumber")(page, hiddenNumber, isVerified))
: inc("withoutNumber/withoutNumber")());
}
};
};
})();
pages/misc/phoneNumber/show/withNumber/editLink/editLink.ls
(function(){
return function(){
return inc("/lib/gui/link/link")(T("change")).tap(function(){
return startPage({
path: path("../../../edit/page"),
animation: "slideUp"
});
});
};
})();
pages/misc/phoneNumber/show/withNumber/notVerifiedWarning/warning.ls
(function(){
return function(){
return Div().css({
color: Color.grey[550],
width: "30em",
maxWidth: "90%",
margin: "0 auto 0.5em"
}).html(T("verifyWarning"));
};
})();
pages/misc/phoneNumber/show/withNumber/number/number.ls
(function(){
return function(number){
return Div().css({
margin: "0.5em 1em",
fontSize: "1.5em",
userSelect: "text",
wordWrap: "break-word"
}).append(number);
};
})();
pages/misc/phoneNumber/show/withNumber/title/title.ls
(function(){
return function(){
return Div().html(T("yourNumber"));
};
})();
pages/misc/phoneNumber/show/withNumber/verifyButton/button.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("../../../verify/page"),
animation: "slideUp"
});
};
return Div().append(Button(T("confirmNow")).css({
margin: "1em"
}).tap(click));
};
})();
pages/misc/phoneNumber/show/withNumber/verifyText/icon/icon.ls
(function(){
return function(isVerified){
return SvgIcon({
svg: isVerified
? path("/lib/svg/shape/validated.svg")
: path("/lib/svg/shape/unvalidated.svg"),
color: isVerified
? Color.green[500]
: Color.red[400]
}).css({
width: "1em",
height: "1em",
marginRight: "0.3em"
});
};
})();
pages/misc/phoneNumber/show/withNumber/verifyText/text/text.ls
(function(){
return function(isVerified){
return Div().css({
color: Color.grey[550]
}).html(isVerified
? T("verified")
: T("notVerified"));
};
})();
pages/misc/phoneNumber/show/withNumber/verifyText/verifyText.ls
(function(){
return function(isVerified){
return Div().css({
margin: "0 1em 1em",
display: "flex"
}).append(inc("icon/icon")(isVerified), inc("text/text")(isVerified));
};
})();
pages/misc/phoneNumber/show/withNumber/withNumber.ls
(function(){
return function(page, number, isVerified){
var ref$;
return Div().append(inc("title/title")(), inc("number/number")(number), inc("verifyText/verifyText")(isVerified), !isVerified ? [((ref$ = log.findLast("setLoginCodeNeedsPassword")) != null ? ref$.value : void 8) === true ? inc("notVerifiedWarning/warning")() : void 8, inc('verifyButton/button')()] : void 8, inc('editLink/editLink')());
};
})();
pages/misc/phoneNumber/show/withoutNumber/buttonAdd/button.ls
(function(){
return function(){
var click;
click = function(){
return inc("../../../../_shared/confirmAge16AndPrivacy/confirm")(function(){
return startPage({
path: path("../../../edit/page"),
animation: "slideUp"
});
});
};
return Div({
paddingTop: "2em"
}).append(Button(T("continueButton")).tap(click));
};
})();
pages/misc/phoneNumber/show/withoutNumber/text/text.ls
(function(){
return function(){
return Div().css({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em"
}).html(T("recomendNumberText"));
};
})();
pages/misc/phoneNumber/show/withoutNumber/withoutNumber.ls
(function(){
return function(){
return Div().append(inc("text/text")(), inc("buttonAdd/button")());
};
})();
pages/misc/phoneNumber/verify/_t.ls
(function(){
return {
confirmNumber: {
de: "Telefonnummer bestätigen",
en_gb: "Confirm mobile phone number",
en: "Confirm cell phone number",
fr: "Confirmer mon numéro de téléphone",
es: "Confirmar número de teléfono",
pt: "Confirmar número de telefone"
},
errorText: {
de: "Ups, hier ist etwas schiefgelaufen.",
en: "Oops, something went wrong here.",
fr: "Oups… Il y a eu un problème.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Algo deu errado aqui."
},
resendMessage: {
de: "SMS erneut verschickt.",
en: "Text sent again.",
fr: "SMS envoyé à nouveau.",
es: "SMS se envió nuevamente.",
pt: "SMS reenviada."
},
emptyCode: {
de: "Das Feld darf nicht leer sein.",
en_gb: "This field cannot be left empty.",
en: "This field cannot be left blank.",
fr: "Ce champ ne peut pas rester vide.",
es: "Este campo no puede quedar en blanco.",
pt: "Este campo não pode ficar vazio."
},
codeTooShort: {
de: "Dein Code ist zu kurz.",
en: "Your code is too short.",
fr: "Ton code est trop court.",
es: "Tu clave es demasiado corta.",
pt: "Seu código é curto demais."
},
invalidCode: {
de: "Dieser Code ist ungültig.",
en: "This code is not valid.",
fr: "Ce code n'est pas valide.",
es: "Esta clave no es válida.",
pt: "Este código é inválido."
},
codeExpired: {
de: "Dieser Code ist abgelaufen.",
en: "This code has expired.",
fr: "Ce code est expiré.",
es: "Esta clave ha expirado.",
pt: "Este código está expirado."
},
resendMessage2: {
de: "SMS nochmal senden",
en: "Send text again",
fr: "Renvoyer le SMS",
es: "Reenviar SMS",
pt: "Reenviar SMS"
},
insertVerificationCode: {
de: "Trage unten deinen Bestätigungs-Code ein. Wir haben ihn dir soeben per SMS an diese Handynummer gesendet:",
en_gb: "Enter your verification code below. We just sent it to the following mobile phone number:",
en: "Enter your verification code below. We just sent it to the following cell phone number:",
fr: "Écris ton code de confirmation ci-dessous. Nous venons juste de te l'envoyer au numéro de portable suivant :",
es: "Escribe tu clave de confirmación aquí abajo. Te la enviamos al siguiente número de teléfono:",
pt: "Insira abaixo seu código de confirmação. Acabamos de enviá-lo por SMS para este número de celular:"
}
};
})();
pages/misc/phoneNumber/verify/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("confirmNumber")
});
};
})();
pages/misc/phoneNumber/verify/api/sendCode/sendCode.ls
(function(){
return function(form, number, hideSendMessage){
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/verificationCode/getPhoneCode/getPhoneCode"),
params: {
logId: log.id()
},
onCompleted: function(result){
form.hideSpinner();
if (result.status !== "ok") {
return form.error.html(T("errorText"));
} else if (hideSendMessage !== true) {
return form.error.html(T("resendMessage"));
}
},
onError: function(error){
form.hideSpinner();
return form.error.html(T("errorText"));
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/misc/phoneNumber/verify/api/verifyCode/verifyCode.ls
(function(){
return function(form, page, number, code){
var onError;
onError = function(result){
var status;
status = result != null ? result.status : void 8;
return requestAnimationFrame(function(){
form.error.html(status === "empty_code"
? T("emptyCode")
: status === "too_short"
? T("codeTooShort")
: status === "code_invalid"
? T("invalidCode")
: status === "code_expired"
? T("codeExpired")
: T("errorText"));
return form.hideSpinner();
});
};
if (code === "") {
onError({
status: "empty_code"
});
form.input.start();
return;
}
if (code.length !== 6) {
onError({
status: "too_short"
});
form.input.start();
return;
}
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/verificationCode/verifyPhoneCode/verifyPhoneCode"),
params: {
logId: log.id(),
code: code
},
onCompleted: function(result){
if (result.status !== "ok") {
return onError(result);
} else {
inc("/lib/util/cache/set/set")("verifiedPhoneNumber", number);
return log.sync(function(){
return startPage({
history: -1,
animation: "slideDown"
});
});
}
},
onError: onError,
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/misc/phoneNumber/verify/inputForm/inputForm.ls
(function(){
return function(page, number){
var validate, change, submit, form;
validate = function(value, key){
value = value.replace(/[^0-9]/g, '');
value = value.toUpperCase();
if (key === "back" && value.length === 3) {
value = value.slice(0, 3);
} else if (value.length > 2) {
value = value.slice(0, 3) + '-' + value.slice(3);
}
if (value.length > 7) {
value = value.slice(0, 7);
}
return value;
};
change = function(key){
var value, validated;
value = form.input.getValue();
validated = validate(value, key);
if (value !== validated) {
return form.input.setValue(validated);
}
};
submit = function(){
var code;
code = form.input.getValue();
code = code.replace("-", "");
return inc("../api/verifyCode/verifyCode")(form, page, number, code);
};
form = inc("/lib/gui/inputForm/inputForm")({
fixedLength: 7,
change: change,
submit: submit,
submitLabel: T("checkButton"),
screenKeyboardLayout: "validationCode",
screenKeyboardShiftStatus: true
}).css({
marginTop: "0.5em"
});
form.input.css({
minWidth: "8em"
});
return form;
};
})();
pages/misc/phoneNumber/verify/number/number.ls
(function(){
return function(number){
return Div().css({
paddingTop: "1em",
fontWeight: "bold"
}).html(inc("/lib/util/formatPhoneNumber/format")(number));
};
})();
pages/misc/phoneNumber/verify/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("../_urlDescription/description")();
},
start: function(){
var e, number, form;
e = log.findLast("setPhoneNumber");
number = e != null ? e.value : void 8;
page.append(inc("title/title")(), inc("number/number")(number), form = inc("inputForm/inputForm")(page, number), inc("sendAgainLink/sendAgainLink")(form, number));
form.input.start();
return inc("api/sendCode/sendCode")(form, number, true);
}
};
};
})();
pages/misc/phoneNumber/verify/sendAgainLink/sendAgainLink.ls
(function(){
return function(form, number){
return inc("/lib/gui/link/link")(T("resendMessage2")).tap(function(){
return inc("../api/sendCode/sendCode")(form, number);
});
};
})();
pages/misc/phoneNumber/verify/title/title.ls
(function(){
return function(){
return Div().css({
lineHeight: "1.4em",
margin: "0.3em 1em 0"
}).html(T("insertVerificationCode"));
};
})();
pages/misc/qrcode/_t.ls
(function(){
return {
backCamera: {
de: "Kamera: hinten",
en: "Camera: back",
fr: "Appareil photo : arrière",
es: "Cámara: trasera",
pt: "Câmera: atrás"
},
frontCamera: {
de: "Kamera: vorne",
en: "Camera: front",
fr: "Appareil photo : avant",
es: "Cámara: frontal",
pt: "Câmera: frente"
},
allowCameraAccess: {
de: "Bitte erlaube den Zugriff auf deine Kamera, um die QR-Codes zu scannen.",
en: "Please allow access to your camera, in order to scan QR codes.",
fr: "Merci d'autoriser l'accès à ton appareil photo pour pouvoir scanner les codes QR.",
es: "Por favor, permite el acceso a tu cámara para que puedas escanear códigos QR.",
pt: "Por favor, habilite o acesso à sua câmera para escanear o código QR."
},
scanQRCode: {
de: "QR-Code scannen",
en: "Scan QR code",
fr: "Scanner le code QR",
es: "Escanear código QR",
pt: "Escanear código QR"
}
};
})();
pages/misc/qrcode/bottom/bottom.ls
(function(){
return function(){
var o, b2;
o = {};
return Div({
padding: "0.5em",
textAlign: "center"
}).html(Div({
margin: "0 auto"
}).html(b2 = Button({
label: T("backCamera"),
icon: path("/lib/svg/shape/flip.svg")
}).tap(function(){
if (o.frontCamera) {
o.frontCamera = false;
QRScanner.useBackCamera();
return b2.setLabel(T("backCamera"));
} else {
o.frontCamera = true;
QRScanner.useFrontCamera();
return b2.setLabel(T("frontCamera"));
}
}).css({
margin: "0.5em"
})));
};
})();
pages/misc/qrcode/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/qrcode-scan.svg"),
color: Color.black
}).css({
opacity: 0.2,
width: "100%",
maxWidth: "300px",
height: "100%",
maxHeight: "300px"
});
};
})();
pages/misc/qrcode/initScanner/initScanner.ls
(function(){
return function(page, o){
return setTimeout(function(){
page.pageSpacer.css({
backgroundColor: "transparent"
});
return QRScanner.prepare(function(err, status){
var ref$, ref1$;
if (err && err.name === "CAMERA_ACCESS_DENIED") {
inc("/lib/gui/toast/toast")({
label: T("allowCameraAccess")
}).tap(((ref$ = window.cordova) != null ? (ref1$ = ref$.plugins) != null ? ref1$.settings : void 8 : void 8) != null ? function(){
return window.cordova.plugins.settings.open("application_details");
} : void 8);
return;
}
return QRScanner.show(function(err, status){
return QRScanner.scan(function(error, data){
if (data) {
deviceLog.log({
event: "debugQrcodeSuccess",
duration: new Date() - o.startDate
});
QRScanner.pausePreview();
page.html(SvgIcon({
svg: path("/lib/svg/shape/validated.svg"),
size: "15em",
color: Color.green[500]
}));
return setTimeout(function(){
var params;
params = page.params || {};
params.qrCodeScanData = data;
page.pageSpacer.css({
backgroundColor: "white"
});
return startPage({
history: -1,
animation: "slideDown",
params: params
});
}, 1000);
}
});
});
});
}, 500);
};
})();
pages/misc/qrcode/page.ls
(function(){
return function(page){
var o;
o = {};
return {
top: function(){
return inc("topbar/topbar")(o);
},
bottom: function(){
return inc("bottom/bottom")();
},
finish: function(){
body.css({
background: "white"
});
return QRScanner.destroy();
},
start: function(){
o.startDate = new Date();
deviceLog.log({
event: "debugQrcodeStart"
});
page.html(inc("icon/icon")());
return inc("initScanner/initScanner")(page, o);
}
};
};
})();
pages/misc/qrcode/topbar/topbar.ls
(function(){
return function(o){
return inc("/addons/topbar2/topbar")({
title: T("scanQRCode"),
close: function(){
var duration;
duration = new Date() - o.startDate;
deviceLog.log({
event: "debugQrcodeAbort",
duration: duration
});
return startPage({
history: -1,
animation: "slideDown"
});
}
});
};
})();
pages/prestart/appOutdated/_t.ls
(function(){
return {
restart: {
de: "Neu starten",
en: "Restart",
fr: "Redémarrer",
es: "Reiniciar",
pt: "Reiniciar"
},
restartOnlineText: {
de: "Achtung!
Starte deine ANTON-App bitte online neu, um sie weiter nutzen zu können.",
en: "Attention!
To continue using ANTON, please restart the app online.",
fr: "Attention !
Pour continuer à utiliser ANTON, tu dois redémarrer l'application en ligne.",
es: "¡Atención!
Para poder seguir usando ANTON reinicia la aplicación en línea.",
pt: "Atenção!
Para continuar usando ANTON reinicie o aplicativo online."
},
notNow: {
de: "Nicht jetzt",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
restartOnlineText2: {
de: "Hinweis:
Du hast deine ANTON-App seit ((einem Tag | $1 Tagen)) nicht mehr online neu gestartet.
Bitte gehe online und starte die App neu.",
en: "Note:
You have not restarted your ANTON app online for ((one day | $1 days)).
Please go online and restart the app.",
fr: "Note :
Ça fait ((un jour | $1 jours)) que tu n'as pas redémarré ton application ANTON en ligne.
Merci de passer en ligne et de redémarrer l'application.",
es: "Nota:
Hace más de ((un día | $1 días)) que no reinicias ANTON en línea.
Por favor, conéctate a internet y reinicia la aplicación.",
pt: "Nota:
Faz ((um dia | $1 dias)) que você não reinicia seu aplicativo ANTON online.
Deine ANTON-App ist veraltet. Bitte öffne den $1 und suche dort nach ANTON. Klicke dann auf Aktualisieren.
Dein Nutzerkonto bleibt in der aktualisierten App erhalten.",
en: "Note:
Your ANTON-App is out of date. Please open the $1 and search for ANTON. Then click on Update.
Your account will appear in the updated app.",
fr: "Note :
Ton application ANTON n'est plus à jour. Pour l'actualiser, tu dois ouvrir $1 et chercher ANTON. Appuie ensuite sur Mettre à jour.
Ton compte reste le même dans la version actualisée.",
es: "Nota:
Tu ANTON-App no está actualizada. Por favor, abre el $1 y busca ANTON. Después haz clic en Actualizar.
Tu cuenta permanecerá igual en la versión actualizada.",
pt: "Nota:
Seu ANTON-App está desatualizado. Por favor, abra o $1 e pesquise por ANTON. Depois clique em Atualizar.
Sua conta permanecerá igual na versão actualizada."
},
updateAppForced: {
de: "Achtung!
Deine ANTON-App ist veraltet und wird nicht mehr unterstützt.
Bitte öffne den $1 und suche dort nach ANTON. Klicke dann auf Aktualisieren.
Dein Nutzerkonto bleibt in der aktualisierten App erhalten.",
en: "Attention!
Your ANTON-App is out of date and no longer supported.
Please open the $1 and search for ANTON. Then click on Update.
You can keep your account in the updated app.",
fr: "Attention !
Ton application ANTON n'est plus à jour et n'est plus prise en charge.
Pour l'actualiser, tu dois ouvrir $1 et chercher ANTON. Appuie ensuite sur Mettre à jour.
Ton compte reste le même dans la version actualisée.",
es: "¡Atención!
Tu ANTON-App no está al día y ya no tiene soporte. Por favor, abre el $1 y busca ANTON. Después presiona Actualizar.
Tu cuenta permanecerá igual en la versión actualizada.",
pt: "Atenção!
Seu ANTON-App não está atualizado e não tem mais suporte. Por favor, abra a $1 e pesquise por ANTON. Depois clique em Atualizar.
Sua conta permanecerá igual na versão actualizada. "
},
playStore2: {
de: "Play Store",
en: "Play Store",
fr: "le Play Store",
es: "Play Store",
pt: "Play Store"
},
appStore2: {
de: "App Store",
en: "App Store",
fr: "l'App Store",
es: "App Store",
pt: "App Store"
},
appSupportWillEndText: {
de: "Hinweis:
Deine ANTON-App ist veraltet und wird nur noch (($1 Tag | $1 Tage)) unterstützt. Danach wirst du mit dieser App-Version nicht mehr lernen können.
Bitte öffne den $2 und suche dort nach ANTON. Klicke dann auf Aktualisieren.
Dein Nutzerkonto bleibt in der aktualisierten App erhalten.",
en_gb: "Note:
Your ANTON-App is out of date and will only be supported for the next (($1 day | $1 days)). After that you will not be able to learn with this app version any more.
Please open $2 and search for ANTON. Then click on Update.
You can keep your account in the updated app.",
en: "Note:
Your ANTON-App is out of date and will only be supported for the next (($1 day | $1 days)). After that you will not be able to learn with this app version anymore.
Please open $2 and search for ANTON. Then click on Update.
You can keep your account in the updated app.",
fr: "Note :
Ton application ANTON n'est plus à jour et sera prise en charge encore (($1 jour | $1 jours)) seulement. Tu ne pourras ensuite plus apprendre avec cette version de l'application.
Pour l'actualiser, tu dois ouvrir $2 et chercher ANTON. Appuie ensuite sur Mettre à jour.
Ton compte reste le même dans la version actualisée.",
es: " ¡Atención!
Tu ANTON-App no está al día y se quedará sin soporte en(($1 día | $1 días)). Después tendrás que actualizar ANTON para seguir aprendiendo.
Para actualizar, abre el $2 y busca ANTON. Después, presiona Actualizar.
Tu cuenta permanecerá igual en la versión actualizada.",
pt: "Atenção!
Seu ANTON-App não está atualizado e só receberá suporte por (($1 dia | $1 dias)). Depois disso, você não poderá mais utilizar o aplicativo com esta versão.
Para atualizar, abra o $2 e pesquise por ANTON.Depois, clique em Atualizar.
Sua conta permanecerá igual na versão actualizada. "
}
};
})();
pages/prestart/engineOutdated/engineOutdated.ls
(function(){
var compare;
compare = inc("/lib/util/compareVersionString/compare");
return function(){
var version, osVersion, ref$, platform, versions, softWarnVersion, warnVersion, stopDate, stopVersion;
if (!engine.isMobileApp) {
return false;
}
version = engine.clientVersion;
osVersion = (ref$ = typeof device != 'undefined' && device !== null ? device.version : void 8) != null ? ref$ : 0;
if (engine.isAndroidApp && compare(osVersion, "5") === -1) {
return false;
}
if (engine.isiOsApp && compare(osVersion, "11") === -1) {
return false;
}
platform = engine.isAndroidApp
? "android"
: engine.isiOsApp ? "ios" : void 8;
versions = {
android: {
softwarn: {
v: "1.9.7"
},
warn: {
v: "1.7.28",
date: "2024-01-31"
},
stop: {
v: "1.7.13"
}
},
ios: {
softwarn: {
v: "1.8.6"
},
warn: {
v: "1.7.23",
date: "2024-01-31"
},
stop: {
v: "1.7.16"
}
}
};
softWarnVersion = versions[platform].softwarn.v;
warnVersion = versions[platform].warn.v;
stopDate = versions[platform].warn.date;
stopVersion = versions[platform].stop.v;
if (!(compare(stopVersion, warnVersion) === -1 && compare(warnVersion, softWarnVersion) === -1)) {
debug("engine outdate stop versions are not valid");
return false;
}
if (compare(version, softWarnVersion) === 1) {
return false;
} else if (compare(version, stopVersion) === 1 && compare(version, warnVersion) === 1 && compare(version, softWarnVersion) <= 0) {
debug("engine outdated soft warning (if version <= " + softWarnVersion + ", your version " + version + ")");
startPage({
path: path("softWarning/page")
});
return true;
} else if (compare(version, stopVersion) === 1 && compare(version, warnVersion) <= 0 && new Date() < inc("/lib/util/convertTimeString/convert")(stopDate)) {
debug("engine outdated warning (if version <= " + warnVersion + ", your version " + version + ")");
startPage({
path: path("warning/page"),
params: {
stopDate: stopDate
}
});
return true;
} else {
debug("engine outdated stop (if version <= " + stopVersion + ", your version " + version + ")");
startPage({
path: path("stop/page"),
params: {
stopDate: stopDate
}
});
return true;
}
};
})();
pages/prestart/engineOutdated/softWarning/buttonContinue/button.ls
(function(){
return function(){
var click;
click = function(){
return inc("/lib/init/startFirstPage/start")();
};
return inc("/lib/gui/link/link")(T("notNow")).css({
margin: "0.2em",
padding: "0.3em"
}).tap(click);
};
})();
pages/prestart/engineOutdated/softWarning/page.ls
(function(){
return function(page){
return {
start: function(){
deviceLog.log({
event: "deviceDebugSoftWarningOutdatedEngine",
engineVersion: engine.clientVersion
});
return page.append(inc("text/text")(), inc("/lib/gui/buttonOpenAppStore/button")(), " ", inc("buttonContinue/button")());
}
};
};
})();
pages/prestart/engineOutdated/softWarning/text/text.ls
(function(){
return function(){
var store;
store = engine.isAndroidApp
? T("playStore")
: T("appStore");
return Div({
width: "35em",
maxWidth: "90%",
margin: "0 auto 0.8em",
lineHeight: "1.5em"
}).html(T("updateAppWarning", store));
};
})();
pages/prestart/engineOutdated/stop/page.ls
(function(){
return function(page){
return {
start: function(){
deviceLog.log({
event: "deviceDebugStopOutdatedEngine",
stopDate: page.params.stopDate,
engineVersion: engine.clientVersion
});
return page.append(inc("text/text")(), inc("/lib/gui/buttonOpenAppStore/button")());
}
};
};
})();
pages/prestart/engineOutdated/stop/text/text.ls
(function(){
return function(){
var store;
store = engine.isAndroidApp
? T("playStore2")
: T("appStore2");
return Div().css({
width: "35em",
maxWidth: "90%",
margin: "0 auto 0.5em",
lineHeight: "1.5em"
}).html(T("updateAppForced", store));
};
})();
pages/prestart/engineOutdated/warning/buttonContinue/button.ls
(function(){
return function(){
var click;
click = function(){
return inc("/lib/init/startFirstPage/start")();
};
return inc("/lib/gui/link/link")(T("notNow")).css({
margin: "0.2em",
padding: "0.3em"
}).tap(click);
};
})();
pages/prestart/engineOutdated/warning/page.ls
(function(){
return function(page){
return {
start: function(){
deviceLog.log({
event: "deviceDebugWarningOutdatedEngine",
stopDate: page.params.stopDate,
engineVersion: engine.clientVersion
});
return page.append(inc("text/text")(page.params.stopDate), inc("/lib/gui/buttonOpenAppStore/button")(), " ", inc("buttonContinue/button")());
}
};
};
})();
pages/prestart/engineOutdated/warning/text/text.ls
(function(){
return function(stopDate){
var d, store;
d = inc("/lib/util/convertTimeString/convert")(stopDate) - new Date();
d = _.round(d / (1000 * 60 * 60 * 24));
d = Math.max(1, _.round(d));
store = engine.isAndroidApp
? T("playStore2")
: T("appStore2");
return Div().css({
width: "35em",
maxWidth: "90%",
margin: "0 auto 0.8em",
lineHeight: "1.5em"
}).html(T("appSupportWillEndText", d, store));
};
})();
pages/school/_shared/joinSchool/join.ls
(function(){
return function(o){
var page, publicId, isTeacher, ref$, finish, onCompleted, refresh, onOffline, onError;
page = app.currentPage;
publicId = log.findLast("setPublicId").value;
isTeacher = (ref$ = log.findLast("isTeacher")) != null ? ref$.value : void 8;
finish = function(){
return startPage({
history: function(path){
return !_.includes(path, "/school");
},
animation: "slideDown"
});
};
onCompleted = function(result){
return inc("onCompleted/onCompleted")(page, result, finish);
};
refresh = function(){
return startPage({
history: 0
});
};
onOffline = function(){
return inc("/lib/offline/offlinePopup/popup")({
onClose: refresh
});
};
onError = function(error){
debug(error);
return inc("/lib/gui/errorPopup/popup")({
onClose: refresh
});
};
if (o.school.hasDir && isTeacher) {
return inc("popupBlockTeacherJoinDirSchool/popup")({
onCompleted: refresh
});
} else if (o.school.schoolCode) {
return inc("/data/school/memberAdd/add")({
schoolCode: o.school.schoolCode,
publicId: publicId,
onCompleted: onCompleted,
onOffline: onOffline,
onError: onError
});
} else {
return inc("/data/school/schoolCreate/create")({
name: o.school.name,
location: o.school.location,
googlePlace: o.school.googlePlace,
creatorPublicId: publicId,
onCompleted: onCompleted,
onOffline: onOffline,
onError: onError
});
}
};
})();
pages/school/_shared/joinSchool/onCompleted/onCompleted.ls
(function(){
return function(page, result, finish){
var schoolCode, checkSchoolLog;
schoolCode = result != null ? result.schoolCode : void 8;
if (!schoolCode) {
finish();
return;
}
checkSchoolLog = function(){
if (page !== app.currentPage) {
return;
}
if (!inc("/lib/util/isOnline/isOnline")() || window.schoolLogs[schoolCode] != null) {
finish();
return;
}
return setTimeout(checkSchoolLog, 1000);
};
return checkSchoolLog();
};
})();
pages/school/_shared/joinSchool/popupBlockTeacherJoinDirSchool/_t.ls
(function(){
return {
text: {
de: "Bitte wende dich an den Schul-Admin, wenn du an dieser Schule als Lehrkraft hinzugefügt werden möchtest.",
en: "Please contact your school administrator if you would like to be added to this school as a teacher.",
fr: "Merci de contacter un·e responsable de ton établissement si tu souhaites être ajouté·e comme professeur·e à cette école.",
es: "Por favor, contacta a el/la administrador/a de la escuela, si deseas ser agregado como docente a esta institución.",
pt: "Por favor, entre em contato com o(a) administrador(a) da escola, caso deseje ser adicionado(a) como professor(a) desta instituição."
}
};
})();
pages/school/_shared/joinSchool/popupBlockTeacherJoinDirSchool/popup.ls
(function(){
return function(p){
var div;
div = Div({
padding: "0.8em"
}).html(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("text")), Button(T("ok")).css({
minWidth: "5em"
}).tap(function(){
return app.currentPopup.close();
}));
return inc("/lib/gui/popup/popup")({
html: div,
onClose: p.onCompleted
});
};
})();
pages/school/_shared/schoolIcon/base64/base64.ls
(function(){
return function(base64){
return inc("/lib/gui/image/image")({
base64: base64
}).css({
width: "101%",
height: "101%"
});
};
})();
pages/school/_shared/schoolIcon/icon.ls
(function(){
return function(o){
var d, imageId, size, base64, config, a, s, b;
o == null && (o = {});
d = o.schoolCode
? inc("/data/school/calcSchoolDescription/calc")(o.schoolCode)
: o.schoolDescription;
imageId = d != null ? d.imageId : void 8;
size = o.size || "small";
base64 = o.base64;
config = {
big: "10em 6px",
medium: "6em 5px",
small: "3em 3px",
mini: "1.4em 2px",
micro: "1.2em 2px"
};
a = config[size].split(" ");
s = a[0];
b = a[1];
return Div({
flex: "0 0 auto",
width: s,
height: s,
borderRadius: "999px",
overflow: "hidden",
display: "flex",
backgroundColor: Color.grey[50],
border: b + " solid " + Color.grey[250],
zIndex: 0
}).append(base64
? inc("base64/base64")(base64, s)
: imageId
? inc("image/image")(imageId)
: inc("svg/svg")());
};
})();
pages/school/_shared/schoolIcon/image/image.ls
(function(){
return function(imageId){
return inc("/lib/gui/image/image")({
id: imageId,
fileFolder: "media/schools/_images"
}).css({
width: "101%",
height: "101%"
});
};
})();
pages/school/_shared/schoolIcon/svg/svg.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/school.svg"),
color: Color.grey[350]
}).css({
width: "65%",
height: "65%",
marginTop: "-9%"
});
};
})();
pages/school/_shared/schoolRow/row.ls
(function(){
return function(school, isFirst, showBadge){
var location, div, b;
location = (school != null && school.zip) && (school != null && school.city)
? school.zip + " " + school.city
: school.location;
return div = Div({
display: "flex",
padding: "1em",
borderBottom: b = "1px solid " + Color.grey[250],
borderTop: isFirst ? b : void 8,
maxWidth: "100%",
width: "35em",
margin: "0 auto"
}).html(inc("../schoolIcon/icon")({
schoolDescription: school
}).css({
marginRight: "0.4em"
}), Div({
display: "flex",
flex: "1 1 auto",
textAlign: "left",
alignItems: "flex-start",
flexDirection: "column"
}).html(Div({
flex: "1 1 auto",
textAlign: "left"
}).secureHtml(school.name), Div({
flex: "1 1 auto",
color: Color.grey[400],
textAlign: "left",
paddingRight: "0.5em"
}).secureHtml(location)), school.membersTotal ? Div({
display: "flex"
}).html(SvgIcon({
svg: path("/lib/svg/shape/user.svg"),
color: Color.grey[400]
}).css({
flex: "0 0 auto"
}), Div({
flex: "0 0 auto",
color: Color.grey[400]
}).html(school.membersTotal)) : void 8, showBadge ? Div({
flex: "0 0 auto",
borderRadius: "999px",
backgroundColor: Color.red[500],
color: Color.white,
fontSize: "0.7em",
width: "1.35em",
height: "1.35em"
}).html("1") : void 8, SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
}).css({
flex: "0 0 auto"
}));
};
})();
pages/schoolAdmin/loadingPage/_t.ls
(function(){
return {
member: {
de: "Mitglieder",
en: "Member",
fr: "Membre",
es: "Miembro",
pt: "Membro"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
}
};
})();
pages/schoolAdmin/loadingPage/_topbar/topbar.ls
(function(){
return function(page){
var topbar;
topbar = inc("/addons/topbar2/topbar")({
title: " ",
tabMenuItems: function(){
var items;
return items = [
{
label: T("member"),
selected: false
}, {
label: T("settings"),
selected: false
}
];
}
});
topbar.findFirst(".tabMenu").css({
opacity: 0.3
});
return topbar;
};
})();
pages/schoolAdmin/loadingPage/page.ls
(function(){
return function(page){
return {
navCategory: "schoolAdmin",
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/loadProject/load")("app01-school-admin", function(){
var ref$, p;
if ((ref$ = projects.info()["app01-school-admin"]) != null && ref$.isLoaded) {
p = inc("/lib/util/cache/get/get")("schoolAdminStartParams");
p.history = 0;
return inc("/../app01-school-admin/start/start")(p);
} else {
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
}
};
};
})();
pages/schoolAdmin/start.ls
(function(){
return function(p){
var ref$;
p == null && (p = {});
inc("/lib/util/cache/set/set")("schoolAdminStartParams", p);
if ((ref$ = projects.info()["app01-school-admin"]) != null && ref$.isLoaded) {
return inc("/../app01-school-admin/start/start")(p);
} else {
return startPage({
path: path("loadingPage/page")
});
}
};
})();
pages/schoolSearch/00_shared/calcCityLabel/calc.ls
(function(){
return function(city){
var a, stateCode;
if (!city) {
return;
}
a = city.split("[[stateCode=");
if (a.length === 1) {
return city;
}
stateCode = a[1].split("]]")[0];
return a[0] + ", " + stateCode;
};
})();
pages/schoolSearch/00_shared/topSearchInput/input.ls
(function(){
return function(page){
var search;
search = function(){
var v;
v = page.input.getValue().trim();
return page.search(v);
};
return Div({
display: "flex"
}).append(page.input = inc("/lib/gui/inputEditable/input")({
showResetIcon: true,
showSearchIcon: true,
onSubmit: search,
onReset: search,
autoSubmitDelay: 1000,
value: page.params.search || ""
}).css({
flex: "1 1 auto",
maxWidth: "35em",
margin: "0",
textAlign: "left",
backgroundColor: "white"
}));
};
})();
pages/schoolSearch/00_shared/topbarAbort/abort.ls
(function(){
return function(page){
var tap;
tap = function(){
var ref$;
if ((ref$ = document.activeElement) != null) {
ref$.blur();
}
return inc("popupAbort/popup")(page);
};
return Div({
alignSelf: "stretch",
display: "flex",
padding: "0 0.3em 0 0.3em"
}).html(SvgIcon(path("/lib/svg/icon/close-small.svg"))).tap(tap);
};
})();
pages/schoolSearch/00_shared/topbarAbort/popupAbort/_t.ls
(function(){
return {
popupAbort: {
de: "Möchtest du die Schulsuche beenden?",
en: "Would you like to quit searching for a school?",
fr: "Veux-tu abandonner la recherche d'école ?",
es: "¿Quieres interrumpir la búsqueda de escuela?",
pt: "Tem certeza que deseja interromper a busca da escola?"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Cancelar",
pt: "Cancelar"
},
quitButton: {
de: "Ja, beenden",
en: "Yes, quit",
fr: "Oui, abandonner",
es: "Sí, interrumpir",
pt: "Sim, interromper"
}
};
})();
pages/schoolSearch/00_shared/topbarAbort/popupAbort/popup.ls
(function(){
return function(page){
return inc("/lib/gui/confirmPopup/popup")({
label: T("popupAbort"),
yesLabel: T("quitButton"),
noLabel: T("cancelButton"),
onConfirm: function(){
return startPage({
history: function(p){
return !_.includes(p, "schoolSearch");
},
animation: "slideDown"
});
}
});
};
})();
pages/schoolSearch/01_countrySelect/_t.ls
(function(){
return {
whichCountry: {
de: "In welchem Land liegt deine Schule?",
en: "Which country is your school in?",
fr: "Dans quel pays est ton école ?",
es: "¿En qué país está tu escuela?",
pt: "Em qual país está a sua escola?"
},
OTHER: {
de: "anderes Land",
en: "other country",
fr: "Autre pays",
es: "Otro país",
pt: "Outro país"
},
DE: {
de: "Deutschland",
en: "Germany",
fr: "Allemagne",
es: "Alemania",
pt: "Alemanha"
},
AT: {
de: "Österreich",
en: "Austria",
fr: "Autriche",
es: "Austria",
pt: "Áustria"
},
CH: {
de: "Schweiz",
en: "Switzerland",
fr: "Suisse",
es: "Suiza",
pt: "Suíça"
},
US: {
de: "USA",
en: "USA",
fr: "États-Unis",
es: "Estados Unidos",
pt: "Estados Unidos"
},
GB: {
de: "Vereinigtes Königreich",
en: "United Kingdom",
fr: "Royaume-Uni",
es: "Reino Unido",
pt: "Reino Unido"
},
CA: {
de: "Kanada",
en: "Canada",
fr: "Canada",
es: "Canadá",
pt: "Canadá"
},
FR: {
de: "Frankreich",
en: "France",
fr: "France",
es: "Francia",
pt: "França"
},
BE: {
de: "Belgien",
en: "Belgium",
fr: "Belgique",
es: "Bélgica",
pt: "Bélgica"
},
MX: {
de: "Mexiko",
en: "Mexico",
fr: "Mexique",
es: "México",
pt: "México"
},
ES: {
de: "Spanien",
en: "Spain",
fr: "Espagne",
es: "España",
pt: "Espanha"
},
CO: {
de: "Kolumbien",
en: "Colombia",
fr: "Colombie",
es: "Colombia",
pt: "Comlômbia"
},
AR: {
de: "Argentinien",
en: "Argentina",
fr: "Argentine",
es: "Argentina",
pt: "Argentina"
},
PT: {
de: "Portugal",
en: "Portugal",
fr: "Portugal",
es: "Portugal",
pt: "Portugal"
},
BR: {
de: "Brasilien",
en: "Brasil",
fr: "Brésil",
es: "Brasil",
pt: "Brasil"
}
};
})();
pages/schoolSearch/01_countrySelect/buttons/button/button.ls
(function(){
return function(code, name){
var tap;
tap = function(){
if (code === "OTHER") {
return startPage({
path: path("../../../02_countrySearch/page"),
animation: "slideLeft"
});
} else {
return startPage({
path: path("../../../03_citySearch/page"),
animation: "slideLeft",
params: {
countryCode: code,
countryName: name
}
});
}
};
return Button(name).css({
margin: "1em auto",
display: "block"
}).tap(tap);
};
})();
pages/schoolSearch/01_countrySelect/buttons/buttons.ls
(function(){
return function(){
var m, n, lang, code, name;
m = {
de: ["DE", "AT", "CH", "OTHER"],
en: ["US", "GB", "CA", "OTHER"],
fr: ["FR", "BE", "CH", "CA", "OTHER"],
es: ["MX", "ES", "US", "CO", "AR", "OTHER"],
pt: ["BR", "PT", "OTHER"]
};
n = {
DE: T("DE"),
AT: T("AT"),
CH: T("CH"),
US: T("US"),
GB: T("GB"),
BE: T("BE"),
CA: T("CA"),
FR: T("FR"),
MX: T("MX"),
ES: T("ES"),
CO: T("CO"),
AR: T("AR"),
PT: T("PT"),
BR: T("BR"),
OTHER: T("OTHER")
};
lang = engine.guiLanguage.substring(0, 2);
return Div({
display: "inline-block",
minWidth: "12em"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = m[lang]).length; i$ < len$; ++i$) {
code = ref$[i$];
name = n[code];
results$.push(inc("button/button")(code, name));
}
return results$;
}()));
};
})();
pages/schoolSearch/01_countrySelect/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("whichCountry")
});
},
start: function(){
return page.html(inc("buttons/buttons")());
}
};
};
})();
pages/schoolSearch/02_countrySearch/_t.ls
(function(){
return {
enterSearch: {
de: "Gib deine Suche über die Tastatur ein.",
en: "Enter your search using the keyboard.",
fr: "Utilise le clavier pour ta recherche.",
es: "Ingresa tu búsqueda usando el teclado.",
pt: "Digite sua busca utilizando o teclado."
},
noCountryFoundWith: {
de: "Es wurde kein Land mit \"$1\" gefunden.",
en: "No country found matching \"$1\".",
fr: "Aucun pays correspondant à “$1” n'a été trouvé.",
es: "No se encontró ningún país que corresponda a \"$1\".",
pt: "Não foi encontrado nenhum país com \"$1\"."
},
whichCountry: {
de: "In welchem Land liegt deine Schule?",
en: "Which country is your school in?",
fr: "Dans quel pays est ton école ?",
es: "¿En qué país está tu escuela?",
pt: "Em qual país está a sua escola?"
}
};
})();
pages/schoolSearch/02_countrySearch/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("whichCountry")
}).append(inc("../../00_shared/topSearchInput/input")(page));
};
})();
pages/schoolSearch/02_countrySearch/list/list.ls
(function(){
return function(page){
return page.list = ListDiv({
data: page.countries,
row: inc("row/row")(page),
nearScopeSize: 1,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 1
}
}).css({
flex: "1 1 auto"
});
};
})();
pages/schoolSearch/02_countrySearch/list/row/arrowIcon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
}).css({
flex: "0 0 auto"
});
};
})();
pages/schoolSearch/02_countrySearch/list/row/name/name.ls
(function(){
return function(c){
return Div({
flex: "1 1 auto",
textAlign: "left"
}).html(c.countryName);
};
})();
pages/schoolSearch/02_countrySearch/list/row/row.ls
(function(){
return function(page){
return function(country){
var tap, b;
tap = function(){
return startPage({
path: path("../../../03_citySearch/page"),
animation: "slideLeft",
params: {
countryCode: country.countryCode,
countryName: country.countryName
}
});
};
return Div({
display: "flex"
}).html(Div({
display: "flex",
padding: "1.2em 0.5em",
textAlign: "left",
maxWidth: "100%",
width: "35em",
margin: "-2px auto",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
background: "white"
}).html(inc("name/name")(country), inc("arrowIcon/icon")()).tap(tap));
};
};
})();
pages/schoolSearch/02_countrySearch/load/load.ls
(function(){
return function(p){
var page;
page = p.page;
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/schoolSearch/searchCountry/search"),
params: {
search: page.params.search,
guiLanguage: engine.guiLanguage
},
requiredVisibleDiv: page,
onError: function(){
return page.html(T("errorMessage"));
},
onOffline: function(){
return page.html(T("offlineError"));
},
onCompleted: function(result){
var countries;
countries = result.countries || [];
return p.onLoaded(countries);
}
});
};
})();
pages/schoolSearch/02_countrySearch/notFound/notFound.ls
(function(){
return function(page){
return Div({
padding: "1em",
lineHeight: "1.5em"
}).html(T("noCountryFoundWith", page.params.search));
};
})();
pages/schoolSearch/02_countrySearch/page.ls
(function(){
return function(page){
var p;
p = page.params;
return {
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
page.search = function(search){
search == null && (search = "");
p.search = search;
if (search.length < 2) {
return page.html(inc("startText/text")(page));
} else {
page.input.stop();
return page.load(search);
}
};
page.load = function(search){
return inc("load/load")({
page: page,
search: search,
onLoaded: page.onLoaded
});
};
page.onLoaded = function(countries){
page.countries = countries;
if (countries.length === 0) {
return page.html(inc("notFound/notFound")(page));
} else {
return page.html(Div({
display: "flex",
flexDirection: "column",
height: "var(--centerHeight)",
alignItems: "stretch"
}).append(inc("list/list")(page)));
}
};
page.input.start();
return page.search(p.search);
}
};
};
})();
pages/schoolSearch/02_countrySearch/startText/text.ls
(function(){
return function(page){
return Div({
padding: "1em",
lineHeight: "1.5em"
}).html(T("enterSearch"));
};
})();
pages/schoolSearch/03_citySearch/_t.ls
(function(){
return {
enterSearch: {
de: "Gib deine Suche über die Tastatur ein.",
en: "Enter your search using the keyboard.",
fr: "Utilise le clavier pour ta recherche.",
es: "Usa el teclado para ingresar tu búsqueda.",
pt: "Digite sua busca utilizando o teclado."
},
noCityFoundWith: {
de: "Es wurde keine Stadt mit \"$1\" gefunden. Bitte gib weitere Zeichen ein oder probiere den nächstgrößeren Ort aus.",
en_gb: "No town found matching \"$1\". Please try your nearest larger town.",
en: "No city found matching \"$1\". Please try your nearest larger city.",
fr: "Aucune ville correspondant à “$1” n'a été trouvée. Essaie la grande ville la plus proche.",
es: "No se encontró ninguna ciudad/localidad que corresponda a “$1”. Intenta ingresar una localidad cercana más grande.",
pt: "Não foi encontrada nenhuma cidade com \"$1\". Por favor, tente colocar a maior cidade mais próxima de você."
},
cantFindCity: {
de: "Ich finde meinen Ort nicht",
en_gb: "I can't find my town",
en: "I can't find my city",
fr: "Je ne trouve pas ma ville",
es: "No encuentro mi localidad",
pt: "Não encontro minha cidade."
},
whichCity: {
de: "In welchem Ort liegt deine Schule?",
en_gb: "Which town is your school in?",
en: "Which city is your school in?",
fr: "Dans quelle ville est ton école ?",
es: "¿En qué ciudad o localidad está tu escuela?",
pt: "Em qual cidade está a sua escola?"
}
};
})();
pages/schoolSearch/03_citySearch/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: page.params.countryName,
title: T("whichCity"),
topRightCustom: function(){
return inc("../../00_shared/topbarAbort/abort")();
}
}).append(inc("../../00_shared/topSearchInput/input")(page));
};
})();
pages/schoolSearch/03_citySearch/createNewSchoolLink/link.ls
(function(){
return function(page){
var tap;
tap = function(){
var p;
p = page.params;
return startPage({
path: path("../../05_createNewSchool/page"),
animation: "slideLeft",
params: {
countryCode: p.countryCode,
countryName: p.countryName,
city: p.search
}
});
};
return Div({
padding: "0.5em",
textAlign: "center",
color: Color.blue[700]
}).html(T("cantFindCity")).tap(tap);
};
})();
pages/schoolSearch/03_citySearch/list/list.ls
(function(){
var lastListPosition;
lastListPosition = null;
return function(page){
return page.list = ListDiv({
data: page.cities,
row: inc("row/row")(page),
nearScopeSize: 1,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 1
},
listPosition: page.params.history <= 0 ? lastListPosition : void 8
}).css({
flex: "1 1 auto",
height: "var(--centerHeight)"
}).onElementClass("onPageFinish", function(){
return lastListPosition = page.list.getListPosition();
});
};
})();
pages/schoolSearch/03_citySearch/list/row/arrowIcon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
}).css({
flex: "0 0 auto"
});
};
})();
pages/schoolSearch/03_citySearch/list/row/name/name.ls
(function(){
return function(city){
var label;
label = inc("../../../../00_shared/calcCityLabel/calc")(city);
return Div({
flex: "1 1 auto",
textAlign: "left"
}).html(label);
};
})();
pages/schoolSearch/03_citySearch/list/row/row.ls
(function(){
return function(page){
return function(city){
var tap, b;
tap = function(){
return startPage({
path: path("../../../04_schoolSearch/page"),
animation: "slideLeft",
params: {
countryCode: page.params.countryCode,
countryName: page.params.countryName,
city: city
}
});
};
return Div({
display: "flex"
}).html(Div({
display: "flex",
padding: "1.2em 0.5em",
textAlign: "left",
maxWidth: "100%",
width: "35em",
margin: "-2px auto",
borderTop: b = "1px solid " + Color.grey[200],
borderBottom: b,
background: "white"
}).html(inc("name/name")(city), inc("arrowIcon/icon")()).tap(tap));
};
};
})();
pages/schoolSearch/03_citySearch/load/load.ls
(function(){
return function(p){
var page;
page = p.page;
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/schoolSearch/searchCity/query"),
params: {
search: page.params.search,
countryCode: page.params.countryCode,
guiLanguage: engine.guiLanguage
},
requiredVisibleDiv: page,
onError: function(){
return page.html(T("errorMessage"));
},
onOffline: function(){
return page.html(T("offlineError"));
},
onCompleted: function(result){
var cities;
cities = result.cities || [];
return p.onLoaded(cities);
}
});
};
})();
pages/schoolSearch/03_citySearch/notFound/notFound.ls
(function(){
return function(page){
return Div({
padding: "1em",
lineHeight: "1.5em",
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).html(T("noCityFoundWith", page.params.search), "
", inc("../createNewSchoolLink/link")(page));
};
})();
pages/schoolSearch/04_schoolSearch/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
page.search = function(search){
search == null && (search = "");
page.params.search = search;
page.input.stop();
return page.load(search);
};
page.load = function(search){
return inc("load/load")({
page: page,
search: search,
onLoaded: page.onLoaded
});
};
page.onLoaded = function(schools){
page.schools = schools;
if (schools.length === 0) {
page.html(inc("notFound/notFound")(page));
return page.bottom.empty().hide();
} else {
page.html(inc("list/list")(page));
return page.bottom.fadeIn(1).html(inc("createNewSchoolLink/link")(page));
}
};
return page.search(page.params.search);
}
};
};
})();
pages/schoolSearch/05_createNewSchool/_t.ls
(function(){
return {
createSchool: {
de: "Neue Schule anlegen",
en: "Create new school",
fr: "Créer une nouvelle école",
es: "Agrega una escuela nueva",
pt: "Adicionar nova escola"
},
'continue': {
de: "Weiter",
en: "Continue",
fr: "Continuer",
es: "Continuar",
pt: "Continuar"
},
enterSchoolNameAndLocation: {
de: "Bitte gib den Namen und den Ort deiner Schule ein.",
en: "Please enter the name and location of your school.",
fr: "Écris le nom de ton école et la ville/le village où elle se trouve.",
es: "Ingresa el nombre y la ciudad o localidad de tu escuela.",
pt: "Por favor, digite o nome e a cidade da sua escola."
},
city: {
de: "Ort/Stadt",
en_gb: "Town",
en: "City",
fr: "Ville/Village",
es: "Localidad",
pt: "Cidade"
},
name: {
de: "Name",
en: "Name",
fr: "Nom",
es: "Nombre",
pt: "Nome"
},
errorNameEmpty: {
de: "Der Name darf nicht leer sein.",
en: "Name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar en blanco.",
pt: "O nome não pode ficar em branco."
},
errorCityEmpty: {
de: "Der Ort darf nicht leer sein.",
en_gb: "The town cannot be left blank.",
en: "City cannot be left blank.",
fr: "La ville/Le village ne peut pas rester vide.",
es: "La ciudad/localidad no puede quedar en blanco.",
pt: "A cidade não pode ficar em branco."
},
yesSuggest: {
de: "Ja, weiter mit diesem Vorschlag",
en: "Yes, continue with this suggestion",
fr: "Oui, continuer avec cette suggestion",
es: "Sí, continuar con esta sugerencia",
pt: "Sim, continuar com esta sugestão"
},
noSuggest: {
de: "Nein, weiter mit meinen Angaben",
en: "No, continue with my information",
fr: "Non, continuer avec mon information",
es: "No, continuar con mi información",
pt: "Não, continuar com minha informação"
},
suggestTitle: {
de: "Meinst du vielleicht diese Schule?",
en: "Do you mean this school?",
fr: "S'agit-il de cette école ?",
es: "¿Te refieres a esta escuela?",
pt: "Você que dizer esta escola?"
}
};
})();
pages/schoolSearch/05_createNewSchool/_topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
back: true,
title: T("createSchool"),
topRightCustom: function(){
return inc("../../00_shared/topbarAbort/abort")();
}
});
};
})();
pages/schoolSearch/05_createNewSchool/form/form.ls
(function(){
return function(page, submit){
var onSubmit, div, f;
onSubmit = function(values){
var v, ok;
v = values;
ok = true;
if (!v.name) {
ok = false;
f.setValues({
errorName: T("errorNameEmpty")
});
}
if (!v.city) {
ok = false;
f.setValues({
errorCity: T("errorCityEmpty")
});
}
if (ok) {
return submit(values);
}
};
div = Div({
width: "20em",
maxWidth: "95%",
margin: "0 auto",
textAlign: "left"
}).html(f = inc("/lib/gui/multiform/multiform")({
onSubmit: onSubmit,
fields: [
{
id: "name",
label: T("name"),
type: "input",
value: page.params.name,
onChange: function(){
return f != null ? f.setValues({
errorName: ""
}) : void 8;
}
}, {
id: "errorName",
type: "error"
}, {
id: "city",
label: T("city"),
type: "input",
value: page.params.city,
onChange: function(){
return f != null ? f.setValues({
errorCity: ""
}) : void 8;
}
}, {
id: "errorCity",
type: "error"
}, {
id: "button",
label: T("continue"),
type: "button"
}
]
}));
page.form = f;
return div;
};
})();
pages/schoolSearch/05_createNewSchool/loadSuggestedSchool/load.ls
(function(){
return function(p){
var page, params;
page = p.page;
params = page.params;
page.form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/schoolSearch/suggestSchool/suggest"),
params: {
countryCode: params.countryCode,
guiLanguage: engine.guiLanguage,
name: params.name,
city: params.city
},
requiredVisibleDiv: page,
onError: function(){
page.form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
page.form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
page.form.hideSpinner();
p.page.suggestedSchool = result.suggestedSchool;
return p.onLoaded();
}
});
};
})();
pages/schoolSearch/05_createNewSchool/page.ls
(function(){
return function(page){
page.params.city = inc("../00_shared/calcCityLabel/calc")(page.params.city);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
var submit, showSuggestPopup, startConfirmPage;
submit = function(v){
var p;
p = page.params;
p.name = v.name;
p.city = v.city;
return inc("loadSuggestedSchool/load")({
page: page,
onLoaded: showSuggestPopup
});
};
showSuggestPopup = function(){
var ref$;
if (!page.suggestedSchool) {
return startConfirmPage();
} else {
if ((ref$ = document.activeElement) != null) {
ref$.blur();
}
return inc("popupSuggestSchool/popup")({
page: page,
onDone: startConfirmPage
});
}
};
startConfirmPage = function(){
var s, pa, p;
s = page.suggestedSchool;
pa = page.params;
p = {
countryCode: pa.countryCode,
countryName: pa.countryName
};
if (s != null && s.schoolCode) {
p.schoolCode = s.schoolCode;
p.name = s.name;
} else if (s) {
p.googlePlaceId = s.id;
p.name = s.name;
p.address = s.address;
p.lat = s.lat;
p.lng = s.lng;
} else {
p.name = pa.name;
p.city = pa.city;
}
return startPage({
path: path("../06_confirm/page"),
animation: "slideLeft",
params: p
});
};
return page.html(inc("title/title")(), inc("form/form")(page, submit));
}
};
};
})();
pages/schoolSearch/05_createNewSchool/popupSuggestSchool/buttons/buttons.ls
(function(){
return function(p){
var tap, css;
tap = function(v){
p.page.chooseSchool = v === "no" ? p.page.suggestedSchool = undefined : void 8;
return p.onDone();
};
return Div({
display: "inline-block",
margin: "0 auto"
}).html(Button(T("yesSuggest")).css(css = {
display: "block",
margin: "0.5em 0",
minWidth: "3em"
}).tap(function(){
return tap("yes");
}), Button(T("noSuggest")).css(css).tap(function(){
return tap("no");
}));
};
})();
pages/schoolSearch/05_createNewSchool/popupSuggestSchool/popup.ls
(function(){
return function(p){
var div;
div = Div({
padding: "1em"
}).html(inc("title/title")(), inc("school/school")(p), inc("buttons/buttons")(p));
return inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/schoolSearch/05_createNewSchool/popupSuggestSchool/school/school.ls
(function(){
return function(p){
var s, b;
s = p.page.suggestedSchool;
return Div().css({
borderTop: b = "1px solid " + Color.grey[150],
borderBottom: b,
padding: "0.3em",
margin: "0.8em",
textAlign: "left"
}).html(s.name, " ", s.address);
};
})();
pages/schoolSearch/05_createNewSchool/popupSuggestSchool/title/title.ls
(function(){
return function(){
return Div().html(T("suggestTitle"));
};
})();
pages/schoolSearch/05_createNewSchool/title/title.ls
(function(){
return function(){
return Div({
padding: "0 0 0.8em",
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).html(T("enterSchoolNameAndLocation"));
};
})();
pages/schoolSearch/06_confirm/_t.ls
(function(){
return {
confirmSchool: {
de: "Schule bestätigen",
en: "Confirm school",
fr: "Valider une école",
es: "Confirmar una escuela",
pt: "Confirmar escola"
},
buttonConfirmSchool: {
de: "Schule auswählen",
en: "Select school",
fr: "Valider l'école",
es: "Seleccionar escuela",
pt: "Selecionar escola"
},
contactSchoolPersonInCharge: {
de: "Bitte wende dich an den Verantwortlichen der Schule, um aufgenommen zu werden.",
en: "Please contact the person responsible for ANTON at your school in order to become a confirmed school member.",
fr: "Tu dois contacter la personne responsable d'ANTON à ton école pour être admis·e comme membre de l'école.",
es: "Por favor, contacta al o a la administrador/a de ANTON en tu escuela para que te admita como miembro de la escuela. ",
pt: "Por favor, entre em contato com o(a) responsável por ANTON na sua escola para que você seja admitido(a) como membro da escola."
}
};
})();
pages/schoolSearch/06_confirm/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
back: true,
backLabel: inc("../../00_shared/calcCityLabel/calc")(page.params.city),
title: T("confirmSchool"),
topRightCustom: function(){
return inc("../../00_shared/topbarAbort/abort")();
}
});
};
})();
pages/schoolSearch/06_confirm/button/button.ls
(function(){
return function(page, school){
var tap;
if (school.joinType != null) {
return;
}
tap = function(){
if (!inc("/lib/util/isOnline/isOnline")()) {
return inc("/lib/offline/offlinePopup/popup")();
} else {
page.html(inc("/lib/gui/spinner/spinner")());
return inc("../../finish")(school);
}
};
return Button(T("buttonConfirmSchool")).tap(tap);
};
})();
pages/schoolSearch/06_confirm/debug/debug.ls
(function(){
return function(s){
if (!engine.isDebug) {
return;
}
return Div({
color: Color.grey[300],
fontSize: "0.7em",
padding: "0 0 0.4em",
userSelect: "text"
}).html(s.type === "schoolCode"
? s.schoolCode + " (hasDir=" + (s.hasDir || 'false') + ")"
: s.type);
};
})();
pages/schoolSearch/06_confirm/load/calcNewCustomDetails/calc.ls
(function(){
return function(p){
var pa;
pa = p.page.params;
return p.onLoaded({
type: p.page.type,
name: pa.name,
city: pa.city
});
};
})();
pages/schoolSearch/06_confirm/load/calcNewGooglePlaceDetails/calc.ls
(function(){
return function(p){
var pa;
pa = p.page.params;
return p.onLoaded({
type: p.page.type,
name: pa.name,
city: pa.address,
googlePlace: {
id: pa.googlePlaceId,
name: pa.name,
address: pa.address,
lat: pa.lat,
lng: pa.lng
}
});
};
})();
pages/schoolSearch/06_confirm/load/load.ls
(function(){
return function(p){
var t;
t = p.page.type;
if (t === "schoolCode") {
return inc("loadSchoolCodeDetails/load")(p);
} else if (t === "newGooglePlace") {
return inc("calcNewGooglePlaceDetails/calc")(p);
} else if (t === "newCustom") {
return inc("calcNewCustomDetails/calc")(p);
}
};
})();
pages/schoolSearch/06_confirm/load/loadSchoolCodeDetails/load.ls
(function(){
return function(p){
var page, params;
page = p.page;
params = page.params;
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/schoolSearch/getSchoolDetails/get"),
params: {
schoolCode: params.schoolCode,
guiLanguage: engine.guiLanguage
},
requiredVisibleDiv: page,
onError: function(){
return page.html(T("errorMessage"));
},
onOffline: function(){
return page.html(T("offlineError"));
},
onCompleted: function(result){
var s;
s = result.school;
s.type = page.type;
return p.onLoaded(s);
}
});
};
})();
pages/schoolSearch/06_confirm/location/location.ls
(function(){
return function(school){
var that;
return Div({
userSelect: "text",
padding: "0 1em 2em"
}).secureHtml((that = school.zip)
? that + " " + school.city
: school.city);
};
})();
pages/schoolSearch/06_confirm/name/name.ls
(function(){
return function(school){
return Div({
display: "flex",
padding: "0.5em",
fontSize: "1.1em",
lineHeight: "1.4em"
}).secureHtml(school.name);
};
})();
pages/schoolSearch/06_confirm/page.ls
(function(){
return function(page){
var p;
p = page.params;
page.type = p.schoolCode
? "schoolCode"
: p.googlePlaceId ? "newGooglePlace" : "newCustom";
return {
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
var load, onLoaded;
page.css({
maxWidth: "95%",
width: "30em",
margin: "0 auto"
});
load = function(){
return inc("load/load")({
page: page,
onLoaded: onLoaded
});
};
onLoaded = function(school){
var s;
s = school;
return page.html(inc("debug/debug")(s), inc("schoolIcon/icon")(s), inc("totalMembers/total")(s), inc("name/name")(s), inc("location/location")(s), inc("protectedText/text")(s), inc("button/button")(page, s));
};
return load();
}
};
};
})();
pages/schoolSearch/06_confirm/protectedText/text.ls
(function(){
return function(school){
if (!school.joinType) {
return;
}
return Div({
lineHeight: "1.5em",
background: Color.grey[150],
padding: "0.3em",
margin: "1em 0"
}).html(T("contactSchoolPersonInCharge"));
};
})();
pages/schoolSearch/06_confirm/schoolIcon/icon.ls
(function(){
return function(school){
return inc("/pages/school/_shared/schoolIcon/icon")({
size: "medium",
schoolDescription: {
imageId: school.imageId
}
}).css({
margin: "auto"
});
};
})();
pages/schoolSearch/06_confirm/totalMembers/total.ls
(function(){
return function(school){
if (school.totalMembers == null) {
return;
}
return Div({
display: "flex",
padding: "0.6em 0.2em 0"
}).html(Div({
color: Color.grey[650],
paddingRight: "0.3em"
}).html(school.totalMembers), SvgIcon({
svg: path("/lib/svg/shape/group.svg"),
color: Color.grey[550]
}));
};
})();
pages/schoolSearch/finish.ls
(function(){
return function(school){
var totalPages, i$, ref$, len$, h, o;
totalPages = 0;
for (i$ = 0, len$ = (ref$ = app.pageHistory.slice().reverse()).length; i$ < len$; ++i$) {
h = ref$[i$];
if (_.includes(h.path, "schoolSearch")) {
totalPages++;
} else {
break;
}
}
if (school.city) {
school.location = school.city;
delete school.city;
}
o = inc("/lib/util/cache/get/get")("schoolFinish");
o.totalPages = totalPages;
o.school = school;
return inc(o.finishFunctionPath)(o);
};
})();
pages/schoolSearch/start.ls
(function(){
return function(o){
inc("/lib/util/cache/set/set")("schoolFinish", o);
return startPage({
path: path("01_countrySelect/page"),
animation: "slideUp"
});
};
})();
pages/search/loadingPage/_topbar/topbar.ls
(function(){
return function(page){
var topbar;
topbar = inc("/addons/topbar2/topbar")({
back: true,
backLabel: "Suche beenden",
onSearch: function(){}
});
topbar.findFirst(".searchTopbar").css({
opacity: 0,
pointerEvents: "none"
});
return topbar;
};
})();
pages/search/loadingPage/page.ls
(function(){
return function(page){
return {
navCategory: "content",
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
page.html(inc("/lib/gui/spinner/spinner")());
return inc("/lib/util/loadProject/load")("app01-search", function(){
var ref$, p;
if ((ref$ = projects.info()["app01-search"]) != null && ref$.isLoaded) {
p = inc("/lib/util/cache/get/get")("searchStartParams");
p.history = 0;
return inc("/../app01-search/start/start")(p);
} else {
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
}
};
};
})();
pages/search/start.ls
(function(){
return function(p){
var ref$;
p == null && (p = {});
inc("/lib/util/cache/set/set")("searchStartParams", p);
if ((ref$ = projects.info()["app01-search"]) != null && ref$.isLoaded) {
return inc("/../app01-search/start/start")(p);
} else {
return startPage({
path: path("loadingPage/page")
});
}
};
})();
pages/standards/_t.ls
(function(){
return {
standardDescriptions: "State Standards Alignment"
};
})();
pages/standards/loadingPage/_topbar/topbar.ls
(function(){
return function(page){
var topbar;
topbar = inc("/addons/topbar2/topbar")({
title: T("standardDescriptions"),
close: true
});
if (page.params.isDeepLink) {
topbar.css({
opacity: 0
});
}
return topbar;
};
})();
pages/standards/loadingPage/page.ls
(function(){
return function(page){
page.deepLinkUrl = inc("/lib/util/browser/getPageUrl/get")();
return {
top: function(){
return page.topbar = inc("_topbar/topbar")(page);
},
start: function(){
var startedAt, loadProject, onError, loadListStandards, start;
startedAt = new Date();
page.html(inc("/lib/gui/spinner/spinner")());
loadProject = function(){
var ref$;
if ((ref$ = projects.info()["app01-standards"]) != null && ref$.isLoaded) {
return loadListStandards();
} else {
return inc("/lib/util/loadProject/load")("app01-standards", loadListStandards);
}
};
onError = function(error){
page.topbar.css({
opacity: 1
});
if ((error != null ? error.error : void 8) === "offline") {
return inc("/lib/offline/offlinePage/offlinePage")(page);
} else {
return inc("/lib/offline/offlinePage/offlinePage")(page, void 8, true);
}
};
loadListStandards = function(){
return inc("/lib/util/downloadContentFile/download")({
fileId: "list/standards",
fileFolder: "content/_standards",
fileApi: "files",
etag: "latest",
returnFileContent: true,
onLoaded: start,
onError: onError
});
};
start = function(result){
var loadingTime, delay;
loadingTime = new Date() - startedAt;
delay = loadingTime < 700 ? 700 - loadingTime : 0;
return setTimeout(function(){
page.standards = result;
return inc("../start/start")(page);
}, delay);
};
return loadProject();
}
};
};
})();
pages/standards/start/start.ls
(function(){
return function(page){
var onError, url, regStandard, regRootSubject, that;
onError = function(){
return startPage({
path: path("/pages/static/unknownUrl/page"),
history: -(app.pageHistory.length - 1)
});
};
url = page.deepLinkUrl;
regStandard = new RegExp("standards/([^/]+)/([^/]+)");
regRootSubject = new RegExp("standards/([^/]+)");
if (url.match(regStandard)) {
return inc("startStandardsPage/start")(page, onError);
} else if (that = url.match(regRootSubject)) {
return inc("startOverviewSubjects/start")(page, that, onError);
} else {
return inc("startOverviewRoots/start")(page);
}
};
})();
pages/standards/start/startOverviewRoots/start.ls
(function(){
return function(page){
return startPage({
path: path("/../app01-standards/pages/01_standardsOverviewRoots/page"),
history: 0,
params: {
isDeepLink: page.params.isDeepLink
}
});
};
})();
pages/standards/start/startOverviewSubjects/start.ls
(function(){
return function(page, urlMatch, onError){
var rootUrl, standard;
rootUrl = urlMatch[1];
standard = _.find(page.standards.standards, {
rootUrl: rootUrl
});
if (!standard) {
onError();
return;
}
return startPage({
path: path("/../app01-standards/pages/02_standardsOverviewSubjects/page"),
history: 0,
params: {
isDeepLink: page.params.isDeepLink,
root: {
root: standard.root,
rootUrl: standard.rootUrl
}
}
});
};
})();
pages/standards/start/startStandardsPage/start.ls
(function(){
return function(page, onError){
var fileId, standard, rootUrl;
fileId = "standard/" + engine.guiLanguage + "/" + page.deepLinkUrl.replace("standards/", "");
standard = _.find(page.standards.standards, {
fileId: fileId
});
rootUrl = standard.rootUrl;
if (!standard) {
onError();
return;
}
return startPage({
path: path("/../app01-standards/pages/03_standard/page"),
history: 0,
params: {
standard: _.pick(standard, ["fileId", "etag"]),
rootUrl: rootUrl,
isDeepLink: page.params.isDeepLink
}
});
};
})();
pages/start/exitUser/page.ls
(function(){
return function(page){
return {
start: function(){
var ref$;
deviceLog.log({
event: "deviceUserLogout",
logID: (ref$ = typeof log != 'undefined' && log !== null ? log.id() : void 8) != null ? ref$ : "notFound",
type: page.params.logoutType
});
if (Store("useAuthToken")) {
inc("/lib/util/storedAuthToken/removeFromMemory/remove")(typeof log != 'undefined' && log !== null ? log.id() : void 8);
}
window.log = undefined;
inc("/lib/util/orientation/unlock")();
inc("/lib/util/browser/setPageUrl/set")("");
return inc("/lib/init/startFirstPage/start")();
}
};
};
})();
pages/start/introFamilyMember/01_name/page.ls
(function(){
return function(page){
page.nameValue = page.params.name;
page.onCustomFinish = function(name){
page.params.name = name;
return startPage({
path: path("../02_avatarWizard/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../intro_sharedPageTemplates/name/pageTemplate")(page);
};
})();
pages/start/introFamilyMember/02_avatarWizard/page.ls
(function(){
return function(page){
page.avatarValue = page.params.avatar;
page.onCustomFinish = function(avatar){
page.params.avatar = avatar;
return startPage({
path: path("../03_school/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../intro_sharedPageTemplates/avatarWizard/pageTemplate")(page);
};
})();
pages/start/introFamilyMember/03_school/finishFunction/finish.ls
(function(){
return function(o){
var p, c, ref$;
p = _.omit(o.params, "history");
if (c = (ref$ = o.school) != null ? ref$.schoolCode : void 8) {
p.school = {
schoolCode: c
};
} else if (o.school != null) {
p.school = _.omit(o.school, ["hasDir", "imageId"]);
}
return startPage({
path: path("../../04_done/page"),
history: 1 - o.totalPages,
animation: "slideLeft",
params: p
});
};
})();
pages/start/introFamilyMember/03_school/page.ls
(function(){
return function(page){
page.wordingType = "pupil";
page.finishFunctionPath = path("finishFunction/finish");
return inc("../../intro_sharedPageTemplates/school/pageTemplate")(page);
};
})();
pages/start/introFamilyMember/04_done/page.ls
(function(){
return function(page){
page.avatarValue = page.params.avatar;
page.privacyValue = "pupil";
page.onCustomFinish = function(){
return inc("submit/submit")(page);
};
return inc("../../intro_sharedPageTemplates/done/pageTemplate")(page);
};
})();
pages/start/introFamilyMember/04_done/submit/_t.ls
(function(){
return {
familyLimitReached: {
de: "Das Mitglieder-Limit dieser Gruppe ist erreicht.",
en: "The group member limit has been reached.",
fr: "La limite du nombre de membres de ce groupe a été atteinte.",
es: "Se ha alcanzado el límite de miembros para este grupo.",
pt: "O limite máximo de membros deste grupo foi alcançado."
}
};
})();
pages/start/introFamilyMember/04_done/submit/submit.ls
(function(){
return function(page){
var p;
page.button.hide();
page.spinner.show();
p = page.params;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/createNewFamilyMember/create"),
params: {
funnelId: p.funnelId,
groupCode: p.groupCode,
name: p.name,
avatar: p.avatar,
school: p.school,
guiLanguage: engine.guiLanguage,
deviceSrc: Store("sourceId")
},
onError: function(error){
page.spinner.hide();
page.button.show();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
page.spinner.hide();
page.button.show();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var label;
if (result.status !== "ok") {
page.spinner.hide();
page.button.show();
label = result.status === "error_member_limit_reached" ? T("familyLimitReached") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: label
});
} else if (!Store("deviceRememberUser")) {
return inc("../../99_finish/finish")(page);
} else {
page.params.logId = result.logId;
if (Store("useAuthToken")) {
inc("/lib/util/storedAuthToken/set/set")(result.logId, result.authToken);
}
return startPage({
path: path("../../06_deviceRememberUser/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
}
}
});
};
})();
pages/start/introFamilyMember/06_deviceRememberUser/page.ls
(function(){
return function(page){
page.logIdValue = page.params.logId;
page.onCustomFinish = function(){
return inc("../99_finish/finish")(page);
};
return inc("../../intro_sharedPageTemplates/deviceRememberUser/pageTemplate")(page);
};
})();
pages/start/introFamilyMember/99_finish/finish.ls
(function(){
return function(page){
return groupLogs[page.params.groupCode].sync(function(){
return startPage({
history: function(path){
return !_.includes(path, "introFamily");
},
animation: "slideDown"
});
});
};
})();
pages/start/introFamilyMember/start.ls
(function(){
return function(params){
params.context = "familyMember";
params.funnelId = "F-" + deviceLog.id().split("-")[1] + "-" + new Date().toISOString();
return startPage({
path: path("01_name/page"),
animation: "slideUp",
params: params
});
};
})();
pages/start/introFunnel/00_shared/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
}
};
})();
pages/start/introFunnel/00_shared/log/log.ls
(function(){
return function(){
try {
return helpers.postEvent("introFunnel", {
event: "introFunnelNewUser",
page: app.currentPagePath,
newUser: app.currentPage.params.newUser,
isDebug: engine.isDebug
});
} catch (e$) {}
};
})();
pages/start/introFunnel/00_shared/skipLink/link.ls
(function(){
return function(onSkip){
return inc("/lib/gui/link/link")({
label: T("notNow")
}).css({
marginLeft: "0.5em",
marginTop: inc("/lib/util/isDesktop/isDesktop")() ? "1em" : void 8
}).tap({
up: onSkip,
animation: "hover"
});
};
})();
pages/start/introFunnel/00_shared/topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbarWhiteBack/topbar")();
};
})();
pages/start/introFunnel/01_start/logOffline/log.ls
(function(){
return function(){
return deviceLog.log({
event: "debug",
message: "funnel abort because device is offline"
});
};
})();
pages/start/introFunnel/01_start/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var isOnline, newUser;
if (Store("debugLoggerReadOnly")) {
debug("Achtung, wenn \"Logger read only\" aktiviert ist, können keine neuen Nutzer angelegt werden!");
}
isOnline = inc("/lib/util/isOnline/isOnline")();
if (isOnline && (page != null && page.isVisible())) {
newUser = {
funnelId: "F-" + deviceLog.id().split("-")[1] + "-" + new Date().toISOString()
};
return startPage({
path: path("../01b_userType/page"),
animation: "slideLeft",
history: 0,
params: {
newUser: newUser
}
});
} else {
inc("logOffline/log")();
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
}
};
};
})();
pages/start/introFunnel/01b_userType/_t.ls
(function(){
return {
pupil: {
de: "Schüler/in",
en_gb: "pupil",
en: "student",
fr: "élève en élémentaire",
es: "estudiante",
pt: "aluno(a)"
},
teacher: {
de: "Lehrkraft",
en: "teacher",
fr: "professeur·e",
es: "docente",
pt: "professor(a)"
},
iAm: {
de: "Ich bin ...",
en: "I am a ...",
fr: "Je suis…",
es: "Soy...",
pt: "Eu sou..."
},
preschoolPupil: {
de: "Vorschüler/in",
en_gb: "preschool pupil",
en: "preschooler",
fr: "élève en maternelle",
es: "niño/a de preescolar",
pt: "aluno(a) da Educação Infantil"
}
};
})();
pages/start/introFunnel/01b_userType/buttons/buttons.ls
(function(){
return function(onSelected){
var types, ref$, tap, type, b;
types = [
{
label: T("pupil"),
value: "pupil"
}, {
label: T("teacher"),
value: "teacher"
}
];
if ((ref$ = engine.guiLanguage) === "de" || ref$ === "en_gb" || ref$ === "fr" || ref$ === "es" || ref$ === "pt") {
types.unshift({
label: T("preschoolPupil"),
value: "preschool"
});
}
tap = function(){
return onSelected(this.value);
};
return Div({
display: "inline-block",
marginTop: "0.5em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = types).length; i$ < len$; ++i$) {
type = ref$[i$];
b = Button({
label: type.label
}).css({
minWidth: "6em",
display: "block",
textAlign: "center",
margin: "0.7em"
}).tap(tap);
b.value = type.value;
results$.push(b);
}
return results$;
}()));
};
})();
pages/start/introFunnel/01b_userType/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete;
page.params.newUser = _.omitBy(page.params.newUser, function(v, k){
return k !== "funnelId";
});
inc("../00_shared/log/log")();
submit = function(type){
return inc("submit/submit")(type, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../02_name/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
return page.append(inc("title/title")(), inc("buttons/buttons")(submit));
}
};
};
})();
pages/start/introFunnel/01b_userType/submit/submit.ls
(function(){
return function(type, onPageComplete){
var newUser;
newUser = app.currentPage.params.newUser;
if (type === "preschool") {
newUser.type = "pupil";
newUser.pupilType = "preschool";
newUser.subject = "PRESCHOOL";
} else {
newUser.type = type;
}
return onPageComplete();
};
})();
pages/start/introFunnel/01b_userType/title/title.ls
(function(){
return function(){
return Div().css({
paddingBottom: "0.5em"
}).html(T("iAm"));
};
})();
pages/start/introFunnel/02_name/_t.ls
(function(){
return {
emptyName: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío.",
pt: "O nome não pode ficar em branco."
},
inputNickname: {
de: "Was ist dein Spitzname?",
en: "What is your nickname?",
fr: "Quel surnom veux-tu utiliser ?",
es: "Elige un apodo.",
pt: "Qual o seu apelido?"
},
inputFirstname: {
de: "Was ist dein Vorname?",
en: "What is your first name?",
fr: "Quel est ton prénom ?",
es: "¿Cuál es tu nombre? (sin apellidos)",
pt: "Qual o seu primeiro nome?"
},
nickname: {
de: "Spitzname?",
en: "Nickname?",
fr: "Surnom ?",
es: "¿Apodo?",
pt: "Apelido?"
},
firstname: {
de: "Vorname?",
en: "First name?",
fr: "Prénom ?",
es: "¿Nombre?",
pt: "Nome?"
}
};
})();
pages/start/introFunnel/02_name/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
var nextPagePath;
nextPagePath = page.params.newUser.type === "pupil"
? path("../03_avatarWizard/page")
: path("../02b_surname/page");
return startPage({
path: nextPagePath,
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: page.params.newUser.type === "pupil"
? T("inputNickname")
: T("inputFirstname"),
submitLabel: T("continueButton"),
submit: submit,
screenKeyboardShiftStatus: true,
forceShowButtons: true,
cancel: false
}));
form.input.setValue(page.params.newUser.name);
return form.input.start();
}
};
};
})();
pages/start/introFunnel/02_name/submit/submit.ls
(function(){
return function(form, onPageComplete){
var name;
name = form.input.getValue();
if (name.length === 0) {
form.error.html(T("emptyName"));
form.input.start();
return;
}
app.currentPage.params.newUser.name = name;
return onPageComplete();
};
})();
pages/start/introFunnel/02b_surname/_t.ls
(function(){
return {
emptyName: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le nom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío",
pt: "O nome não pode ficar vazio."
},
inputSurename: {
de: "Was ist dein Nachname?",
en_gb: "What is your surname?",
en: "What is your last name?",
fr: "Quel est ton nom de famille ?",
es: "¿Cómo te apellidas?",
pt: "Qual o seu sobrenome?"
},
surename: {
de: "Nachname",
en_gb: "Surname",
en: "Last name",
fr: "Nom de famille",
es: "Apellidos",
pt: "Sobrenome"
}
};
})();
pages/start/introFunnel/02b_surname/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../02c_title/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputSurename"),
submitLabel: T("continueButton"),
submit: submit,
screenKeyboardShiftStatus: true,
forceShowButtons: true,
cancel: false
}));
form.input.setValue(page.params.newUser.surname);
return form.input.start();
}
};
};
})();
pages/start/introFunnel/02b_surname/submit/submit.ls
(function(){
return function(form, onPageComplete){
var name;
name = form.input.getValue();
if (name.length === 0) {
form.error.html(T("emptyName"));
form.input.start();
return;
}
app.currentPage.params.newUser.surname = name;
return onPageComplete();
};
})();
pages/start/introFunnel/02c_title/_t.ls
(function(){
return {
inputTitle: {
de: "Wie möchtest du angesprochen werden? (z.B. Frau, Herr, Dr.)",
en_gb: "How would you like to be addressed? (e.g. Ms, Mrs, Mr, Dr)",
en: "How would you like to be addressed? (e.g. Ms., Mrs., Mr., Dr.)",
fr: "Quel titre visible par les élèves veux-tu afficher devant ton nom ? (ex: Mme, M., Dr)",
es: "¿Cómo quieres que se dirijan a tí? (p. ej. Sr. Sra. Mtro. Profa.)",
pt: "Como você prefere que se dirijam a você? (ex: Sr., Sra., Dr., Dra., Prof., Profª.)"
},
titlePlaceholder: {
de: "Frau, Herr, Dr.",
en_gb: "Ms, Mrs, Mr, Dr",
en: "Ms., Mrs., Mr., Dr.",
fr: "Mme, M., Dr",
es: "Sr., Sra, Mtro., Mtra., Prof. Profa.",
pt: "Sr., Srª., Dr., Drª., Prof., Profª."
}
};
})();
pages/start/introFunnel/02c_title/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../03_avatarWizard/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputTitle"),
submitLabel: T("continueButton"),
submit: submit,
screenKeyboardShiftStatus: true,
forceShowButtons: true,
cancel: false
}));
form.input.setValue(page.params.newUser.title);
return form.input.start();
}
};
};
})();
pages/start/introFunnel/02c_title/submit/submit.ls
(function(){
return function(form, onPageComplete){
var title;
title = form.input.getValue();
if (title.length === 0) {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
app.currentPage.params.newUser.title = title;
return onPageComplete();
};
})();
pages/start/introFunnel/03_avatarWizard/_t.ls
(function(){
return {
human: {
de: "Mensch",
en: "Human",
fr: "Humain",
es: "Humano",
pt: "Humano"
},
monster: {
de: "Monster",
en: "Monster",
fr: "Monstre",
es: "Monstruo",
pt: "Monstro"
},
createAvatar: {
de: "Erstelle dir einen zufälligen Avatar. (Du kannst ihn später in den Einstellungen anpassen.)",
en: "Create a random avatar. (You can change it in the settings later.)",
fr: "Crée un avatar de façon aléatoire. (Tu pourras le changer plus tard dans les paramètres)",
es: "Genera un avatar aleatoriamente (lo podrás modificar más adelante en los ajustes). ",
pt: "Crie um avatar aleatório. (Você poderá modificá-lo mais tarde nas configurações)."
}
};
})();
pages/start/introFunnel/03_avatarWizard/avatarShape/avatarShape.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/avatar.svg"),
width: "5em",
height: "5em"
}).css({
margin: "0.5em"
});
};
})();
pages/start/introFunnel/03_avatarWizard/continueLink/continueLink.ls
(function(){
return function(onPageComplete){
return inc("/lib/gui/link/link")({
label: T("continueButton"),
action: onPageComplete
}).css({
opacity: 0,
pointerEvents: "none"
}).tap(onPageComplete);
};
})();
pages/start/introFunnel/03_avatarWizard/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var avatar, avatarDiv, shuffleProgress, shuffleAvatar, setAvatar, onPageComplete, continueLink;
inc("../00_shared/log/log")();
avatar = null;
avatarDiv = null;
shuffleProgress = false;
shuffleAvatar = function(type){
var counter, interval;
if (shuffleProgress) {
return;
}
shuffleProgress = true;
continueLink.css({
opacity: "",
pointerEvents: ""
});
counter = 0;
return interval = setInterval(function(){
var typeRestrictions;
if (counter++ >= 5) {
clearInterval(interval);
shuffleProgress = false;
}
typeRestrictions = {
head: [type],
body: [type],
legs: [type]
};
avatar = inc("/../app01-avatar/lib/util/randomizeAvatar/randomize")(null, typeRestrictions);
avatar.version = 2;
return setAvatar();
}, 100);
};
setAvatar = function(){
return avatarDiv.replaceWith(avatarDiv = inc("/lib/gui/avatar/avatar")(avatar, null).css({
width: "6em",
height: "6em",
borderRadius: "999px"
}));
};
onPageComplete = function(){
page.params.newUser.avatar = avatar;
return startPage({
path: page.params.newUser.pupilType === "preschool"
? path("../09_howKnowAbout/page")
: path("../05_school/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
requestAnimationFrame(function(){
var that, ref$;
if (that = (ref$ = page.params.newUser) != null ? ref$.avatar : void 8) {
avatar = that;
continueLink.css({
opacity: "",
pointerEvents: ""
});
return setAvatar();
}
});
return page.css({
maxWidth: "90%",
margin: "0 auto"
}).append(inc("title/title")(), avatarDiv = inc("avatarShape/avatarShape")(), inc("shuffleButtons/shuffleButtons")(shuffleAvatar), continueLink = inc("continueLink/continueLink")(onPageComplete));
}
};
};
})();
pages/start/introFunnel/03_avatarWizard/shuffleButtons/shuffleButtons.ls
(function(){
return function(shuffleAvatar){
return Div().css({
marginBottom: "1em",
marginTop: "0.5em"
}).append(Button({
label: T("human"),
action: function(){
return shuffleAvatar('human');
},
icon: path("/lib/svg/shape/avatar.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}), Button({
label: T("monster"),
action: function(){
return shuffleAvatar('monster');
},
icon: path("/lib/svg/shape/monster.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}));
};
})();
pages/start/introFunnel/03_avatarWizard/title/title.ls
(function(){
return function(){
return Div().css({
marginBottom: "1em"
}).html(T("createAvatar"));
};
})();
pages/start/introFunnel/05_school/_t.ls
(function(){
return {
selectSchool: {
de: "Schule auswählen",
en: "Select school",
fr: "Choisir une école",
es: "Elige una escuela",
pt: "Selecione uma escola"
},
groupTeaserPupil: {
de: "Du kannst dann mit anderen in Gruppen lernen und Spiel-Ergebnisse vergleichen.",
en: "Then you can learn with others in groups and compare game scores.",
fr: "Tu pourras alors étudier en groupes avec d'autres élèves et comparer tes scores de jeux avec eux.",
es: "Podrás estudiar en grupos con tus compañeros/as y comparar con ellos/as tu puntuación en los juegos.",
pt: "Você poderá, assim, estudar em grupos com seus colegas e comparar as pontuações dos jogos com eles."
},
groupTeaserTeacher: {
de: "Du kannst dann an dieser Schule Gruppen für deine Schüler/innen erstellen.",
en_gb: "Then you can create groups for your pupils in this school.",
en: "Then you can create groups for your students in this school.",
fr: "Tu pourras alors créer des groupes pour les élèves de cette école.",
es: "Podrás crear grupos para los y las estudiantes de esa escuela.",
pt: "Você poderá, assim, criar grupos de alunos para esta escola."
},
selectSchool2: {
de: "Bitte wähle deine Schule aus.",
en: "Please select a school.",
fr: "Merci de choisir une école.",
es: "Por favor, elige tu escuela. ",
pt: "Por favor, selecione a sua escola."
}
};
})();
pages/start/introFunnel/05_school/button/button.ls
(function(){
return function(page){
var click;
click = function(){
return inc("/pages/schoolSearch/start")({
finishFunctionPath: path("finish/finish"),
newUser: page.params.newUser
});
};
return Div().css({
padding: "1em"
}).append(Button(T("selectSchool")).tap(click));
};
})();
pages/start/introFunnel/05_school/button/finish/finish.ls
(function(){
return function(o){
var newUser, nextPagePath;
newUser = o.newUser;
newUser.school = o.school;
if (newUser.type === "teacher" && o.school.hasDir) {
inc("popupBlockTeacherJoinDirSchool/popup")();
return;
}
nextPagePath = newUser.type === "pupil"
? path("../../../07_grade/page")
: path("../../../09_howKnowAbout/page");
return startPage({
path: nextPagePath,
animation: "slideDown",
history: 1 - o.totalPages,
params: {
newUser: newUser
}
});
};
})();
pages/start/introFunnel/05_school/button/finish/popupBlockTeacherJoinDirSchool/_t.ls
(function(){
return {
text1: {
de: "Wenn du einen Anmelde-Code von deinem Schul-Admin bekommen hast, logg dich bitte mit diesem ein.",
en: "If you received a login code from a school administrator, please log in using this code.",
fr: "Si tu as reçu un code de connexion du·de la responsable de ton école, connecte-toi avec ce code.",
es: "Si recibiste una clave del o de la administrador/a de la escuela, inicia sesión con esta clave.",
pt: "Você receberá um código de acesso do(a) admin. da escola. Por favor, utilize este código para realizar o login."
},
text2: {
de: "Falls nicht, wende dich an den Schul-Admin dieser Schule, um als Lehrkraft aufgenommen zu werden.",
en: "If not, please contact the school administrator of this school in order to be added as a teacher.",
fr: "Sinon, merci de contacter le·la responsable de cette école afin d'être ajouté·e comme professeur·e.",
es: "si no, contacta al o a la administrador/a de la escuela para que te agregue como docente.",
pt: "Caso não receba o código, por favor, entre em contato com o(a) admin. da sua escola para você poder ser adicionado como professor(a)."
},
buttonLogin: {
de: "Zurück zum Login",
en: "Back to login",
fr: "Retour à la page d'accueil",
es: "Regresar a la página de inicio",
pt: "Voltar para login"
}
};
})();
pages/start/introFunnel/05_school/button/finish/popupBlockTeacherJoinDirSchool/popup.ls
(function(){
return function(){
var clickToLogin, close, div, popup;
clickToLogin = function(){
startPage({
history: function(p){
return p === path("/pages/start/welcome/_shared/main/otherUser/page/page");
},
animation: "slideRight"
});
return popup.close();
};
close = function(){
return startPage({
history: function(p){
return !_.includes(p, "schoolSearch");
},
animation: "slideRight"
});
};
div = Div({
padding: "0.8em"
}).html(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("text1")), Button(T("buttonLogin")).css({
minWidth: "5em",
marginBottom: "1em"
}).tap(clickToLogin), Div({
lineHeight: "1.5em"
}).html(T("text2")));
return popup = inc("/lib/gui/popup/popup")({
html: div,
onClose: function(type){
if (type === "outside" || type === "icon") {
return close();
}
}
});
};
})();
pages/start/introFunnel/05_school/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/school.svg")
}).css({
width: "4em",
height: "4em",
marginBottom: "1em"
});
};
})();
pages/start/introFunnel/05_school/linkSkip/link.ls
(function(){
return function(page){
var tap;
tap = function(){
var nextPagePath;
nextPagePath = page.params.newUser.type === "pupil"
? path("../../07_grade/page")
: path("../../09_howKnowAbout/page");
return startPage({
path: nextPagePath,
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
return inc("../../00_shared/skipLink/link")(tap);
};
})();
pages/start/introFunnel/05_school/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
return page.append(inc("icon/icon")(), inc("title/title")(), inc("subtitle/subtitle")(page), inc("button/button")(page), inc("linkSkip/link")(page));
}
};
};
})();
pages/start/introFunnel/05_school/subtitle/subtitle.ls
(function(){
return function(page){
var newUser;
newUser = page.params.newUser;
return Div().css({
width: "25em",
maxWidth: "90%",
paddingBottom: "1em",
margin: "0 auto",
lineHeight: "1.4em"
}).html(newUser.type === "teacher"
? T("groupTeaserTeacher")
: T("groupTeaserPupil"));
};
})();
pages/start/introFunnel/05_school/title/title.ls
(function(){
return function(){
return Div().css({
width: "25em",
maxWidth: "90%",
paddingBottom: "1em",
margin: "0 auto"
}).html(T("selectSchool2"));
};
})();
pages/start/introFunnel/07_grade/_t.ls
(function(){
return {
gradeToStart: {
de: "Mit welcher Klassenstufe möchtest du anfangen?",
en_gb: "Which year would you like to begin with?",
en: "Which grade would you like to begin with?",
fr: "Dans quelle classe veux-tu commencer ?",
es: "¿Con qué grado quieres empezar?",
pt: "Com qual série você gostaria de começar?"
}
};
})();
pages/start/introFunnel/07_grade/buttons/button/button.ls
(function(){
return function(label, i, onSelected){
var click;
click = function(){
return onSelected(i);
};
return Button({
label: label
}).css({
minWidth: "5.5em",
textAlign: "center",
margin: "0.25em"
}).tap(click);
};
})();
pages/start/introFunnel/07_grade/buttons/buttons.ls
(function(){
return function(onSelected){
return Div({
maxWidth: "20em",
margin: "0 auto"
}).html(twitch({
de: inc("buttonsDe/buttons")(onSelected),
en: inc("buttonsEn/buttons")(onSelected),
en_gb: inc("buttonsEnGb/buttons")(onSelected),
fr: inc("buttonsFr/buttons")(onSelected),
es: inc("buttonsEs/buttons")(onSelected),
pt: inc("buttonsPt/buttons")(onSelected)
}));
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsDe/buttons.ls
(function(){
return function(onSelected){
var buttons, i, label;
return buttons = (function(){
var i$, results$ = [];
for (i$ = 1; i$ <= 13; ++i$) {
i = i$;
label = i + ".";
results$.push(inc("../button/button")(label, i, onSelected));
}
return results$;
}());
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsEn/buttons.ls
(function(){
return function(onSelected){
var buttons, b, i$, i, label;
buttons = [];
b = inc("../button/button");
buttons.push(b("Pre-K", i, onSelected).css({
padding: "0 1em 0 1em"
}), b("Kindergarten", i, onSelected).css({
padding: "0 1em 0 1em"
}), " ");
for (i$ = 1; i$ <= 8; ++i$) {
i = i$;
label = inc("/lib/util/calcOrdinalEn/calc")(i);
buttons.push(b(label, i, onSelected));
}
return buttons;
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsEnGb/buttons.ls
(function(){
return function(onSelected){
var buttons, i;
return buttons = (function(){
var i$, results$ = [];
for (i$ = 1; i$ <= 9; ++i$) {
i = i$;
results$.push(inc("../button/button")("Year " + i, i, onSelected));
}
return results$;
}());
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsEs/buttons.ls
(function(){
return function(onSelected){
var primaryButtons, secondaryButtons, i$, i, label;
primaryButtons = [];
secondaryButtons = [];
for (i$ = 1; i$ <= 6; ++i$) {
i = i$;
label = i + "º";
primaryButtons.push(inc("../button/button")(label, i, onSelected));
}
for (i$ = 7; i$ <= 8; ++i$) {
i = i$;
label = i - 6 + "º";
secondaryButtons.push(inc("../button/button")(label, i, onSelected));
}
return Div().html("Primaria", Div({
paddingTop: "0.3em",
paddingBottom: "1.5em"
}).html(primaryButtons), "Secundaria", Div({
paddingTop: "0.3em"
}).html(secondaryButtons));
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsFr/buttons.ls
(function(){
return function(onSelected){
var buttons, i, label;
return buttons = (function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = ["CP", "CE1", "CE2", "CM1", "CM2"]).length; i$ < len$; ++i$) {
i = i$;
label = ref$[i$];
results$.push(inc("../button/button")(label, i + 1, onSelected));
}
return results$;
}());
};
})();
pages/start/introFunnel/07_grade/buttons/buttonsPt/buttons.ls
(function(){
return function(onSelected){
var buttons, i$, i, label;
buttons = [];
for (i$ = 1; i$ <= 5; ++i$) {
i = i$;
label = i + "º ano";
buttons.push(inc("../button/button")(label, i, onSelected), " ");
}
return buttons;
};
})();
pages/start/introFunnel/07_grade/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete;
inc("../00_shared/log/log")();
submit = function(grade){
return inc("submit/submit")(grade, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../08_subject/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
return page.html(inc("title/title")(page), inc("buttons/buttons")(submit));
}
};
};
})();
pages/start/introFunnel/07_grade/submit/submit.ls
(function(){
return function(grade, onPageComplete){
app.currentPage.params.newUser.grade = grade;
return onPageComplete(true);
};
})();
pages/start/introFunnel/07_grade/title/title.ls
(function(){
return function(page){
return Div().css({
padding: "0 1em 1.5em"
}).html(T("gradeToStart"));
};
})();
pages/start/introFunnel/08_subject/_t.ls
(function(){
return {
subjectToStart: {
de: "Mit welchem Fach möchtest du anfangen?",
en: "Which subject would you like to begin with?",
fr: "Avec quelle matière veux-tu commencer ?",
es: "¿Con qué materia quieres empezar?",
pt: "Com qual disciplina você gostaria de começar?"
}
};
})();
pages/start/introFunnel/08_subject/buttons/buttons.ls
(function(){
return function(onSelected){
var subjects, tap, subject, b;
subjects = twitch({
de: inc("subjectsDe/subjects")(),
en: inc("subjectsEn/subjects")(),
en_gb: inc("subjectsEnGb/subjects")(),
fr: inc("subjectsFr/subjects")(),
es: inc("subjectsEs/subjects")(),
pt: inc("subjectsPt/subjects")()
});
tap = function(){
return onSelected(this.subject);
};
return Div({
margin: "1em 0"
}).html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = subjects).length; i$ < len$; ++i$) {
subject = ref$[i$];
b = Button({
label: subject.title
}).css({
textAlign: "center",
margin: "0.25em"
}).tap(tap).addClass("button");
b.subject = subject.subject;
results$.push(b);
}
return results$;
}()));
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsDe/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "Deutsch",
subject: "NATDEU"
}, {
title: "Mathematik",
subject: "MAT"
}, {
title: "Englisch",
subject: "ENG"
}, {
title: "Sachunterricht",
subject: "SCI"
}, {
title: "Geographie",
subject: "GEO"
}, {
title: "Biologie",
subject: "BIO"
}, {
title: "Chemie",
subject: "CHEM"
}, {
title: "Physik",
subject: "PHY"
}, {
title: "Geschichte",
subject: "HIS"
}, {
title: "Musik",
subject: "MUS"
}, {
title: "Deutsch als Zweitsprache",
subject: "MONODEU"
}
];
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsEn/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "English Language Arts",
subject: "NATENG"
}, {
title: "Math",
subject: "MAT"
}, {
title: "Science",
subject: "SCI"
}, {
title: "Music",
subject: "MUS"
}, {
title: "Social Studies",
subject: "SOC"
}, {
title: "Spanish",
subject: "MONOESP"
}, {
title: "English (EAL)",
subject: "MONOENG"
}, {
title: "German",
subject: "MONODEU"
}, {
title: "French",
subject: "MONOFRA"
}, {
title: "Italian",
subject: "MONOIT"
}, {
title: "Biology",
subject: "BIO"
}, {
title: "Physics",
subject: "PHY"
}, {
title: "Geography",
subject: "GEO"
}
];
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsEnGb/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "English",
subject: "NATENG"
}, {
title: "Maths",
subject: "MAT"
}, {
title: "Science",
subject: "SCI"
}, {
title: "Geography",
subject: "GEO"
}, {
title: "Music",
subject: "MUS"
}, {
title: "PSHE",
subject: "PSHE"
}, {
title: "English (EAL)",
subject: "MONOENG"
}, {
title: "German",
subject: "MONODEU"
}, {
title: "French",
subject: "MONOFRA"
}, {
title: "Spanish",
subject: "MONOESP"
}, {
title: "Italian",
subject: "MONOIT"
}, {
title: "Russian",
subject: "MONORU"
}, {
title: "Ukrainian",
subject: "MONOUA"
}
];
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsEs/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "Matemáticas",
subject: "MAT"
}, {
title: "Lenguaje",
subject: "NATES"
}, {
title: "Ciencias",
subject: "SCI"
}, {
title: "Historia",
subject: "HIS"
}, {
title: "Inglés",
subject: "SLENG"
}, {
title: "Francés",
subject: "MONOFRA"
}, {
title: "Italiano",
subject: "MONOIT"
}, {
title: "Portugués",
subject: "MONOPOR"
}, {
title: "Alemán",
subject: "MONODEU"
}, {
title: "Náhuatl",
subject: "MONONAHU"
}, {
title: "Música",
subject: "MUS"
}
];
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsFr/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "Maths",
subject: "MAT"
}, {
title: "Français",
subject: "NATFRA"
}, {
title: "Questionner le monde",
subject: "SCI"
}, {
title: "Anglais",
subject: "SLENG"
}, {
title: "Allemand",
subject: "MONODEU"
}, {
title: "Espagnol",
subject: "MONOESP"
}, {
title: "Italien",
subject: "MONOIT"
}, {
title: "Musique",
subject: "MUS"
}, {
title: "Français de scolarisation",
subject: "MONOFRA"
}
];
};
})();
pages/start/introFunnel/08_subject/buttons/subjectsPt/subjects.ls
(function(){
return function(){
var subjects;
return subjects = [
{
title: "Matemática",
subject: "MAT"
}, {
title: "Língua Portuguesa",
subject: "NATPT"
}, {
title: "Ciências",
subject: "SCI"
}, {
title: "Inglês",
subject: "SLENG"
}, {
title: "Alemão",
subject: "MONODEU"
}, {
title: "Francês",
subject: "MONOFRA"
}, {
title: "Espanhol",
subject: "MONOESP"
}, {
title: "Italiano",
subject: "MONOIT"
}
];
};
})();
pages/start/introFunnel/08_subject/optimizeSizes/optimize.ls
(function(){
return function(div){
var buttons, maxWidth, i$, len$, button, buttonWidth;
buttons = div.findAll(".button");
maxWidth = 0;
for (i$ = 0, len$ = buttons.length; i$ < len$; ++i$) {
button = buttons[i$];
buttonWidth = button.width();
if (maxWidth < buttonWidth) {
maxWidth = buttonWidth;
}
}
maxWidth += 10;
for (i$ = 0, len$ = buttons.length; i$ < len$; ++i$) {
button = buttons[i$];
button.css({
width: maxWidth + "px"
});
}
return div.css({
maxWidth: 2.5 * maxWidth + "px"
});
};
})();
pages/start/introFunnel/08_subject/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, div;
inc("../00_shared/log/log")();
submit = function(subject){
return inc("submit/submit")(subject, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../09_howKnowAbout/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
return page.html(div = Div({
margin: "0 auto",
padding: "1.1em 0 0"
}).html(inc("title/title")(), inc("buttons/buttons")(submit)).onDomAppend(function(){
return inc("optimizeSizes/optimize")(div);
}));
}
};
};
})();
pages/start/introFunnel/08_subject/submit/submit.ls
(function(){
return function(subject, onPageComplete){
app.currentPage.params.newUser.subject = subject;
return onPageComplete();
};
})();
pages/start/introFunnel/08_subject/title/title.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "90%",
margin: "1em auto",
padding: "0 1em"
}).html(T("subjectToStart"));
};
})();
pages/start/introFunnel/09_howKnowAbout/_t.ls
(function(){
return {
playStore: {
de: "Play Store",
en: "Play Store",
fr: "le Play Store",
es: "Play Store",
pt: "Play Store"
},
appStore: {
de: "App Store",
en: "App Store",
fr: "l'App Store",
es: "App Store",
pt: "App Store"
},
appstoreSearch: {
de: "Suche im $1",
en: "$1 search",
fr: "Par une recherche dans $1",
es: "En $1",
pt: "Pesquisa na $1"
},
friends: {
de: "Freunde oder Bekannte",
en: "From friends",
fr: "Par des amis",
es: "Conocidos",
pt: "Amigos ou conhecidos"
},
fromSchool: {
de: "Aus der Schule",
en: "At school",
fr: "Par l'école",
es: "Escuela",
pt: "Escola"
},
other: {
de: "Sonstiges",
en: "Other",
fr: "Autre",
es: "Otro",
pt: "Outro"
},
whereDoYouKnow: {
de: "Woher kennst du ANTON?",
en: "How did you hear about ANTON?",
fr: "Comment as-tu découvert ANTON ?",
es: "¿Cómo te enteraste de ANTON?",
pt: "De onde você conhece ANTON?"
}
};
})();
pages/start/introFunnel/09_howKnowAbout/buttons/buttons.ls
(function(){
return function(onSelected){
var storeName, types, click, type, b;
storeName = engine.isAndroidApp
? T("playStore")
: T("appStore");
types = [
{
label: T("appstoreSearch", storeName),
value: "appstore_search"
}, {
label: T("friends"),
value: "relatives"
}, {
label: T("fromSchool"),
value: "school"
}
];
types = _.shuffle(types);
types.push({
label: T("other"),
value: "other"
});
click = function(){
return onSelected(this.value);
};
return Div().css({
display: "inline-block",
marginTop: "1em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = types).length; i$ < len$; ++i$) {
type = ref$[i$];
b = Button({
label: type.label
}).css({
display: "block",
textAlign: "center",
margin: "0.7em"
}).tap(click);
b.value = type.value;
results$.push(b);
}
return results$;
}()));
};
})();
pages/start/introFunnel/09_howKnowAbout/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete;
inc("../00_shared/log/log")();
submit = function(type){
return inc("submit/submit")(type, onPageComplete);
};
onPageComplete = function(type){
var nextPagePath;
if (type === "school" || type === "relatives") {
if (page.params.newUser.type !== "pupil") {
nextPagePath = path("../11_email/page");
} else {
nextPagePath = path("../13_done/page");
}
} else {
nextPagePath = path("../10_howKnowAboutDetail/page");
}
return startPage({
path: nextPagePath,
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
return page.append(inc("title/title")(), inc("buttons/buttons")(submit));
}
};
};
})();
pages/start/introFunnel/09_howKnowAbout/submit/submit.ls
(function(){
return function(type, onPageComplete){
app.currentPage.params.newUser.howKnowAbout = type;
return onPageComplete(type);
};
})();
pages/start/introFunnel/09_howKnowAbout/title/title.ls
(function(){
return function(){
return Div().css({
paddingBottom: "1em"
}).html(T("whereDoYouKnow"));
};
})();
pages/start/introFunnel/10_howKnowAboutDetail/_t.ls
(function(){
return {
searchDetails: {
de: "Wonach hast du gesucht?",
en: "What did you search for?",
fr: "Qu'est-ce que tu as recherché ?",
es: "¿Qué estabas buscando?",
pt: "O que está procurando?"
},
whereFrom: {
de: "Woher genau?",
en: "From where exactly?",
fr: "Plus précisément ?",
es: "¿De dónde exactamente?",
pt: "De onde exatamente?"
}
};
})();
pages/start/introFunnel/10_howKnowAboutDetail/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, question, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
var nextPagePath;
nextPagePath = page.params.newUser.type === "pupil"
? path("../13_done/page")
: path("../11_email/page");
return startPage({
path: nextPagePath,
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
question = page.params.newUser.howKnowAbout === "appstore_search"
? T("searchDetails")
: T("whereFrom");
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: question,
submitLabel: T("continueButton"),
submit: submit,
forceShowButtons: true,
cancel: false
}), inc("../00_shared/skipLink/link")(onPageComplete));
form.input.setValue(app.currentPage.params.newUser.howKnowAboutDetail);
return form.input.start();
}
};
};
})();
pages/start/introFunnel/10_howKnowAboutDetail/submit/submit.ls
(function(){
return function(form, onPageComplete){
var value;
value = form.input.getValue();
if (value.length === 0) {
form.error.html(T("emptyFieldError"));
form.input.start();
return;
}
app.currentPage.params.newUser.howKnowAboutDetail = value;
return onPageComplete();
};
})();
pages/start/introFunnel/11_email/_t.ls
(function(){
return {
emptyEmail: {
de: "Die E-Mail darf nicht leer sein!",
en: "The email cannot be left blank!",
fr: "L'e-mail ne peut pas rester vide.",
es: "El correo electrónico no puede quedar vacío.",
pt: "O endereço de e-mail não pode ficar vazio."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen!",
en: "Oops, something has gone wrong!",
fr: "Oups… Il y a eu un problème !",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Ocorreu um erro!"
},
errorInvalid: {
de: "Diese E-Mail-Adresse ist ungültig.",
en: "This email address is not valid.",
fr: "Cette adresse e-mail n'est pas valide.",
es: "Este correo electrónico no es válido.",
pt: "Este endereço de e-mail é inválido."
},
errorUnavailable: {
de: "Diese E-Mail-Adresse ist bereits vergeben.
Wenn dies deine E-Mail-Adresse ist, geh bitte zurück auf die Startseite, klicke auf „Login mit Code, E-Mail...“ und trage die E-Mail-Adresse ein. Klicke dann auf „Passwort vergessen“ und folge den Anweisungen, um Zugang zu deinem Nutzerkonto zu erhalten.",
en: "This email address is already taken.
If this is your email address, please go back to the homepage, click on “Log in with code, email...” and enter the email address. Then click on “Forgot your password” and follow the instructions to regain access to your account.",
fr: "Cette adresse e-mail est déjà prise.
S'il s'agit de ton adresse e-mail, retourne à la page d'accueil, appuie sur “Me connecter avec un code, un e-mail…” et écris ton adresse e-mail. Appuie ensuite sur “Mot de passe oublié” et suis les instructions pour retrouver l'accès à ton compte.",
es: "Este correo electrónico ya existe.
Si esta es realmente tu dirección de correo, regresa a la página de inicio, presiona “iniciar sesión con clave, correo-e...” e ingresa tu correo electrónico. Después presiona “olvidé mi contraseña” y sigue las indicaciones para recuperar el acceso a tu cuenta.",
pt: "Este endereço de e-mail já está sendo utilizado.
Se este for o seu endereço de e-mail, volte para a página inicial, clique em \"Efetuar login com código de acesso, e-mail...\" e insira o endereço de e-mail. Em seguida, clique em \"Esqueci minha senha\" e siga as instruções para obter acesso à sua conta de usuário."
},
inputEmail: {
de: "Was ist deine E-Mail-Adresse?",
en: "What is your email address?",
fr: "Quelle est ton adresse e-mail ?",
es: "¿Cuál es tu dirección de correo electrónico?",
pt: "Qual o seu endereço de e-mail?"
},
email: {
de: "E-Mail",
en: "Email",
fr: "E-mail",
es: "Correo electrónico",
pt: "E-mail"
}
};
})();
pages/start/introFunnel/11_email/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, onSkip, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../12_password/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
onSkip = function(){
return startPage({
path: path("../13_done/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputEmail"),
submitLabel: T("continueButton"),
submit: submit,
forceShowButtons: true,
cancel: false
}), inc("../00_shared/skipLink/link")(onSkip)).css({
margin: "1em auto"
});
form.input.setValue(page.params.newUser.email);
return form.input.start();
}
};
};
})();
pages/start/introFunnel/11_email/submit/submit.ls
(function(){
return function(form, onPageComplete){
var email;
email = form.input.getValue();
if (email === "") {
form.error.html(T("emptyEmail"));
form.input.start();
return;
}
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setEmail/set"),
params: {
email: email,
dryRun: true
},
onCompleted: function(result){
var message;
if (result.status !== "ok") {
message = result.status === "error_invalid"
? T("errorInvalid")
: result.status === "error_unavailable"
? T("errorUnavailable")
: T("errorMessage");
form.error.css({
lineHeight: "1.5em"
}).html(message);
return form.hideSpinner();
} else {
app.currentPage.params.newUser.email = email;
return onPageComplete();
}
},
onError: function(error){
form.error.html(T("errorMessage"));
return form.hideSpinner();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/start/introFunnel/12_password/_t.ls
(function(){
return {
emptyPassword: {
de: "Das Passwort darf nicht leer sein!",
en: "The password cannot be left blank!",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen.",
en: "Oops, something has gone wrong.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Surgió un problema.",
pt: "Ops! Ocorreu um erro."
},
errorInvalidLength: {
de: "Das Passwort muss mindestens ((ein | $1)) Zeichen beinhalten.",
en: "The password must contain at least ((one character | $1 characters)).",
fr: "Le mot de passe contient au moins ((un caractère | $1 caractères)).",
es: "La contraseña debe de tener al menos ((un carácter | $1 caracteres)).",
pt: "A senha deve conter pelo menos ((um caractere | $1 caracteres))."
},
errorInvalidCharacter: {
de: "Das Passwort enthält ein ungültiges Zeichen: '$1'",
en: "The password contains an invalid character: '$1'",
fr: "Le mot de passe contient un caractère non valide : “$1”",
es: "La contraseña contiene un signo no válido: '$1'",
pt: "A senha contém um caractere inválido: '$1'"
},
inputPassword: {
de: "Wie soll das Passwort für diese E-Mail-Adresse lauten?",
en: "What should be the password for this email address?",
fr: "Quel mot de passe veux-tu pour aller avec cette adresse e-mail ?",
es: "¿Qué contraseña quieres asignarle a este correo electrónico?",
pt: "Qual senha deseja definir para este endereço de e-mail?"
},
password: {
de: "Passwort",
en: "Password",
fr: "Mot de passe",
es: "Contraseña",
pt: "Senha"
}
};
})();
pages/start/introFunnel/12_password/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit, onPageComplete, form;
inc("../00_shared/log/log")();
submit = function(){
return inc("submit/submit")(form, onPageComplete);
};
onPageComplete = function(){
return startPage({
path: path("../13_done/page"),
animation: "slideLeft",
params: {
newUser: page.params.newUser
}
});
};
page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputPassword"),
isPassword: true,
submitLabel: T("continueButton"),
submit: submit,
forceShowButtons: true,
cancel: false
}), inc("../00_shared/skipLink/link")(onPageComplete));
return form.input.start();
}
};
};
})();
pages/start/introFunnel/12_password/submit/submit.ls
(function(){
return function(form, onPageComplete){
var password;
password = form.input.getValue();
if (password === "") {
form.error.html(T("emptyPassword"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setPassword/set"),
params: {
password: password,
dryRun: true
},
onCompleted: function(result){
var message;
if (result.status !== "ok") {
form.hideSpinner();
message = result.status === "error_invalid_length"
? T("errorInvalidLength", result.count)
: result.status === "error_invalid_length"
? T("errorInvalidCharacter", result.character)
: T("errorMessage");
return form.error.html(message);
} else {
app.currentPage.params.newUser.password = password;
return onPageComplete();
}
},
onError: function(error){
form.error.html(T("errorMessage"));
return form.hideSpinner();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/start/introFunnel/13_done/_shared/link/link.ls
(function(){
return function(label, click){
return Span().css({
textDecoration: "underline",
padding: "0.2em 0"
}).html(label).tap({
animation: "none",
down: function(){
return this.css({
backgroundColor: Color.grey[150]
});
},
up: function(){
this.css({
backgroundColor: ""
});
return click();
},
cancel: function(){
return this.css({
backgroundColor: ""
});
}
});
};
})();
pages/start/introFunnel/13_done/_shared/privacyLink/link.ls
(function(){
return function(label){
var click;
click = function(){
return inc("popupPrivacy/popup")();
};
return inc("../link/link")(label, click);
};
})();
pages/start/introFunnel/13_done/_shared/privacyLink/popupPrivacy/popup.ls
(function(){
return function(onYes){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("privacyTitle")), inc("/pages/static/privacy/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/introFunnel/13_done/_shared/termsLink/link.ls
(function(){
return function(label){
var click;
click = function(){
return inc("popupTerms/popup")();
};
return inc("../link/link")(label, click);
};
})();
pages/start/introFunnel/13_done/_shared/termsLink/popupTerms/popup.ls
(function(){
return function(onYes){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("termsTitle")), inc("/pages/static/terms/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/introFunnel/13_done/_t.ls
(function(){
return {
privacyTitle: {
de: "ANTON-Datenschutzbestimmungen",
en: "ANTON privacy policy",
fr: "La politique de protection des données personnelles d'ANTON",
es: "Política de privacidad de ANTON",
pt: "Política de privacidade de ANTON"
},
termsTitle: {
de: "ANTON-Nutzungsbedingungen",
en: "ANTON terms of use",
fr: "Les conditions d'utilisation d'ANTON",
es: "Condiciones de uso de ANTON",
pt: "Termos de uso de ANTON"
},
startNow: {
de: "Los geht's",
en: "Start now",
fr: "Commencer",
es: "Comenzar",
pt: "Começar"
},
iAgree: {
de: "Ich stimme den",
en: "I agree to the",
fr: "J'accepte",
es: "Acepto",
pt: "Aceito os"
},
terms: {
de: "Nutzungsbedingungen",
en: "terms of use",
fr: "les conditions d'utilisation",
es: "las condiciones de uso",
pt: "termos de uso"
},
andThe: {
de: "und den",
en: "and the",
fr: "et",
es: "y la",
pt: "e a"
},
privacyPolicy: {
de: "Datenschutzbestimmungen",
en: "privacy policy",
fr: "la politique de protection des données personnelles",
es: "política de privacidad",
pt: "política de privacidade"
},
to: {
de: " zu.",
en: ".",
fr: ".",
es: ".",
pt: "."
},
agreeToTermsAndPrivacyPolicy: {
de: "Bitte stimme den Nutzungsbedingungen und den Datenschutzbestimmungen zu.",
en: "Please agree to the terms of use and to the privacy policy.",
fr: "Merci d'accepter nos conditions d'utilisation et notre politique de protection des données personnelles.",
es: "Por favor, acepta nuestras condiciones de uso y nuestra política de privacidad.",
pt: "Por favor, aceite nossos termos de uso e nossa política de privicidade."
},
saveProgress: {
de: "ANTON speichert deinen Lernfortschritt. ",
en: "ANTON saves your learning progress. ",
fr: "ANTON enregistre les progrès que tu fais. ",
es: "ANTON registrará tu progreso de aprendizaje. ",
pt: "ANTON salvará seu desempenho de aprendizagem. "
},
moreInformation: {
de: "Mehr Informationen findest du in den",
en: "You can find more information in the",
fr: "Tu peux trouver plus d'informations dans la",
es: "Para más información consulta nuestra",
pt: "Para mais informações, consulte nossa"
},
privacyPolicy2: {
de: "Datenschutzbestimmungen.",
en: "Privacy policy.",
fr: "politique de protection des données personnelles.",
es: "política de privacidad.",
pt: "política de privacidade."
},
welcome: {
de: "Willkommen $1! ",
en: "Welcome $1! ",
fr: "Bienvenue $1 ! ",
es: "¡Hola, $1! ",
pt: "Olá $1! "
},
haveFun: {
de: "Viel Spaß mit ANTON!",
en: "Have fun with ANTON!",
fr: "Amuse-toi bien avec ANTON !",
es: "¡Diviértete con ANTON!",
pt: "Divirta-se com ANTON!"
}
};
})();
pages/start/introFunnel/13_done/avatar/avatar.ls
(function(){
return function(page){
var avatar;
if (!page.params.newUser.avatar) {
return;
}
avatar = page.params.newUser.avatar;
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "6em",
height: "6em",
borderRadius: "999px"
});
};
})();
pages/start/introFunnel/13_done/button/button.ls
(function(){
return function(onClick){
return Button({
label: T("startNow")
}).css({
minWidth: "5em",
textAlign: "center"
}).tap(onClick);
};
})();
pages/start/introFunnel/13_done/checkboxTeacherPrivacy/checkIcon/icon.ls
(function(){
return function(newUser){
return SvgIcon({
svg: newUser.acceptPrivacy === true
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg")
}).css({
marginRight: "0.4em",
verticalAlign: "-0.18em"
});
};
})();
pages/start/introFunnel/13_done/checkboxTeacherPrivacy/checkbox.ls
(function(){
return function(page){
var newUser, click, div;
newUser = page.params.newUser;
if (newUser.type !== "teacher") {
return;
}
click = function(){
newUser.acceptPrivacy = newUser.acceptPrivacy ? false : true;
return div.replaceWith(inc(THISFILE)(page));
};
return div = Div().css({
display: "inline-block",
marginBottom: "2em",
lineHeight: "1.6em",
maxWidth: "90%",
width: "30em"
}).append(inc("checkIcon/icon")(newUser), T("iAgree") + " ", inc("../_shared/termsLink/link")(T("terms")), " " + T("andThe") + " ", inc("../_shared/privacyLink/link")(T("privacyPolicy")), T("to")).tap(click);
};
})();
pages/start/introFunnel/13_done/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var onPageComplete;
inc("../00_shared/log/log")();
onPageComplete = function(){
var newUser;
newUser = page.params.newUser;
if (newUser.type === "teacher" && !newUser.acceptPrivacy) {
inc("popupCheckMissing/popup")();
return;
}
page.css({
minHeight: page.height() + "px"
});
page.button.hide();
page.spinner.show();
return inc("submit/submit")({
params: newUser,
page: page
});
};
page.html(inc("avatar/avatar")(page), inc("text/text")(page), inc("checkboxTeacherPrivacy/checkbox")(page), " ", page.button = inc("button/button")(onPageComplete), page.spinner = inc("/lib/gui/spinner/spinner")());
return page.spinner.hide();
}
};
};
})();
pages/start/introFunnel/13_done/popupCheckMissing/popup.ls
(function(){
return function(){
var div, popup;
div = Div().css({
padding: "1em",
lineHeight: "1.5em"
}).append(T("agreeToTermsAndPrivacyPolicy"));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/introFunnel/13_done/submit/submit.ls
(function(){
return function(o){
var page;
page = o.page;
if (o.params.type === "teacher") {
o.params.grade = 1;
o.params.subject = "MAT";
}
o.params.guiLanguage = engine.guiLanguage;
o.params.deviceSrc = Store('sourceId');
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/create2/create"),
params: o.params,
onOffline: function(){
page.spinner.hide();
page.button.show();
return inc("/lib/offline/offlinePopup/popup")();
},
onError: function(error){
page.spinner.hide();
page.button.show();
return inc("/lib/gui/errorPopup/popup")();
},
onCompleted: function(result){
var errorMessage;
if (result.status !== "ok") {
page.spinner.hide();
page.button.show();
errorMessage = result.status === "error_blocked" ? T("errorBlocked") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: errorMessage
});
} else {
return startPage({
path: path("/pages/start/startUser/page"),
params: {
logId: result.logId,
authToken: result.authToken,
loginType: "introFunnel",
rememberUser: "yes"
}
});
}
}
});
};
})();
pages/start/introFunnel/13_done/text/pupilPrivacyText/text.ls
(function(){
return function(page){
return Div().html(Div().css({
fontSize: "0.85em",
marginTop: "1.5em",
lineHeight: "1.6em"
}).html(T("saveProgress"), T("moreInformation")), inc("../../_shared/privacyLink/link")(T("privacyPolicy2")).css({
fontSize: "0.85em"
}));
};
})();
pages/start/introFunnel/13_done/text/text.ls
(function(){
return function(page){
var name, ref$, ref1$;
name = (ref$ = page.params.newUser) != null ? ref$.name : void 8;
return Div().css({
width: "30em",
maxWidth: "90%",
margin: "0.7em auto 2em"
}).html(Div().css({
lineHeight: "1.5em"
}).secureHtml(T("welcome", name), T("haveFun")), ((ref1$ = page.params.newUser) != null ? ref1$.type : void 8) === "pupil" ? inc("pupilPrivacyText/text")(page) : void 8);
};
})();
pages/start/introPreparedMember/00_shared/_t.ls
(function(){
return {
welcomeWithGroup: {
de: "Willkommen, du wurdest zu einer ANTON-Gruppe eingeladen!",
en: "Welcome, you were invited to an ANTON group!",
fr: "Bienvenue ! Tu as été invité·e à rejoindre un groupe ANTON !",
es: "¡Hola! Tienes una invitación a un grupo en ANTON.",
pt: "Olá! Você recebeu um convite para entrar em um grupo em ANTON."
},
welcomeWithGroupSound: {
de: "Willkommen. Du wurdest zu einer ANTON Gruppe eingeladen!",
en: "Welcome. You were invited to an ANTON Group!",
fr: "Bienvenue ! Tu as été invité à rejoindre un groupe ANTON",
es: "¡Hola! Tienes una invitación a un grupo en ANTON.",
pt: "Olá! Você recebeu um convite para entrar em um grupo em ANTON."
},
createAvatar: {
de: "Erstelle dir einen Avatar. Du kannst ihn später in den Einstellungen anpassen.",
en_gb: "Create an avatar. You can customise it further in the settings later.",
en: "Create an avatar. You can customize it further in the settings later.",
fr: "Crée un avatar. Tu peux le modifier plus tard dans les paramètres.",
es: "Crea un avatar. Lo podrás modificar en los ajustes más adelante.",
pt: "Crie um avatar. Você poderá modificá-lo mais tarde nas configurações."
},
createAvatarSound: {
de: "ssml: Erstelle dir einen awattahr. Du kannst ihn später in den Einstellungen anpassen.",
en_gb: "ssml: Create an avatar. You can customise it further in the settings later.",
en: "ssml: Create an avatar. You can customize it further in the settings later.",
fr: "ssml: Crée un avatar. Tu peux le modifier plus tard dans les paramètres.",
es: "ssml: Crea un avatar. Lo podrás modificar en los ajustes más adelante.",
pt: "ssml: Crie um avatar. Você poderá modificá-lo mais tarde nas configurações."
},
whichClass: {
de: "In welche Klasse gehst du?",
en_gb: "Which year are you in?",
en: "What grade are you in?",
fr: "Dans quelle classe es-tu ?",
es: "¿En qué grado vas?",
pt: "Em qual série você está?"
},
whichClassSound: {
de: "In welche Klasse gehst du?",
en_gb: "Which year are you in?",
en: "What grade are you in?",
fr: "Dans quelle classe es-tu ?",
es: "¿En qué grado vas?",
pt: "Em qual série você está?"
},
thanksForYour: {
de: "Danke für deine Angaben.",
en: "Thank you for your information.",
fr: "Merci pour ces renseignements.",
es: "Gracias por ingresar tus datos.",
pt: "Agradecemos pelas suas informações."
},
thanksForYourSound: {
de: "Danke für deine Angaben. Los geht's.",
en: "Thank you for your information. Let's start!",
fr: "Merci pour ces renseignements.",
es: "Gracias por ingresar tus datos. ¡Vamos a comenzar!",
pt: "Agradecemos pelas suas informações. Vamos começar!"
}
};
})();
pages/start/introPreparedMember/00_shared/title/descriptions/descriptions.ls
(function(){
return function(){
var titles, i$, t;
titles = {
welcome: {
text: T("welcomeWithGroup"),
sound: T("welcomeWithGroupSound")
},
avatar: {
text: T("createAvatar"),
sound: T("createAvatarSound")
},
grade: {
text: T("whichClass"),
sound: T("whichClassSound")
},
done: {
text: T("thanksForYour"),
sound: T("thanksForYourSound")
}
};
for (i$ in titles) {
t = titles[i$];
t.sound = t.sound || t.text;
t.voiceLang = engine.guiLanguage.split("_")[0];
t.voice = twitch({
de: "f1_override_AE",
en: "f8Us_override_DG",
en_gb: "f3",
fr: "f1",
es: "f1EsUs",
pt: "m2"
});
}
return titles;
};
})();
pages/start/introPreparedMember/00_shared/title/speaker/speaker.ls
(function(){
return function(description){
var currentPage, d, fileId, fileFolder, loadFile, onLoaded, speaker;
currentPage = app.currentPage;
d = description;
fileId = "sound/" + d.voiceLang + "/" + d.voice + "/" + d.sound;
fileFolder = "media/introPreparedMember/_sounds";
loadFile = function(){
return inc("/lib/util/downloadContentFile/download")({
fileId: fileId,
fileFolder: fileFolder,
etag: "any",
returnFileContent: true,
onLoaded: onLoaded,
onError: function(){}
});
};
onLoaded = function(base64){
var sound;
if (currentPage !== app.currentPage) {
return;
}
sound = inc("/lib/util/sound/sound")({
base64: base64
});
speaker.setSound(sound);
if (currentPage.params.history !== -1) {
return speaker.play();
}
};
speaker = inc("/lib/gui/speakerIconPlayer/speakerIconPlayer")({
outline: true,
size: "1.4em"
}).css({
marginRight: "0.1em"
});
loadFile();
return speaker;
};
})();
pages/start/introPreparedMember/00_shared/title/text/text.ls
(function(){
return function(description){
return description.text;
};
})();
pages/start/introPreparedMember/00_shared/title/title.ls
(function(){
return function(titleId){
var description, speaker;
description = inc("descriptions/descriptions")()[titleId];
return Div({
display: "inline-block",
lineHeight: "1.5em",
marginBottom: "1em",
padding: "0.3em"
}).html(speaker = inc("speaker/speaker")(description), inc("text/text")(description)).tap(function(){
return speaker.toggle();
});
};
})();
pages/start/introPreparedMember/00_shared/topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbarWhiteBack/topbar")();
};
})();
pages/start/introPreparedMember/01_welcome/_t.ls
(function(){
return {
nameGroup: {
de: "Name: $1 Gruppe: $2",
en: "Name: $1 Group: $2",
fr: "Nom : $1 Groupe : $2",
es: "Nombre: $1 Grupo: $2",
pt: "Nome: $1 Grupo: $2"
}
};
})();
pages/start/introPreparedMember/01_welcome/button/button.ls
(function(){
return function(page){
var click;
click = function(){
return startPage({
path: path("../../02_avatarWizard/page"),
params: _.omit(page.params, "history"),
animation: "slideLeft"
});
};
return Div().css({
paddingTop: "1.5em"
}).append(Button(T("continueButton")).css({
minWidth: "6em",
margin: "0.3em"
}).tap(click));
};
})();
pages/start/introPreparedMember/01_welcome/loadFunnelTitleSounds/load.ls
(function(){
return function(onDone){
var descriptions, total, loadSounds, onSoundLoaded;
descriptions = inc("../../00_shared/title/descriptions/descriptions")();
total = 0;
loadSounds = function(){
var i$, ref$, d, fileId, fileFolder, results$ = [];
for (i$ in ref$ = descriptions) {
d = ref$[i$];
fileId = "sound/" + d.voiceLang + "/" + d.voice + "/" + d.sound;
fileFolder = "media/introPreparedMember/_sounds";
results$.push(inc("/lib/util/downloadContentFile/download")({
fileId: fileId,
fileFolder: fileFolder,
etag: "any",
returnFileContent: true,
onLoaded: onSoundLoaded,
onError: fn$
}));
}
return results$;
function fn$(){}
};
onSoundLoaded = function(){
total++;
if (total === _.keys(descriptions).length) {
return onDone();
}
};
return loadSounds();
};
})();
pages/start/introPreparedMember/01_welcome/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var loadSounds, create;
loadSounds = function(){
return inc("loadFunnelTitleSounds/load")(create);
};
create = function(){
return page.html(inc("../00_shared/title/title")("welcome"), inc("text/text")(page), inc("button/button")(page));
};
page.append(inc("/lib/gui/spinner/spinner")());
return loadSounds();
}
};
};
})();
pages/start/introPreparedMember/01_welcome/text/text.ls
(function(){
return function(page){
var p;
p = page.params;
return Div().css({
lineHeight: "1.5em"
}).secureHtml(T("nameGroup", p.name, p.groupName));
};
})();
pages/start/introPreparedMember/02_avatarWizard/_t.ls
(function(){
return {
human: {
de: "Mensch",
en: "Human",
fr: "Humain",
es: "Humano",
pt: "Humano"
},
monster: {
de: "Monster",
en: "Monster",
fr: "Monstre",
es: "Monstruo",
pt: "Monstro"
}
};
})();
pages/start/introPreparedMember/02_avatarWizard/avatar/avatar.ls
(function(){
return function(page, avatarDescription){
var update, div;
update = function(avatarDescription){
return div.replaceWith(inc(THISFILE)(page, avatarDescription));
};
div = Div().append(inc("/lib/gui/avatar/avatar")(avatarDescription, "half").css({
width: "6em",
height: "6em",
borderRadius: "999px",
filter: 'drop-shadow(0 0 0.5em rgba(0, 0, 0, 0.2))'
}));
div.update = update;
div.getAvatar = function(){
return avatarDescription;
};
return page.avatar = div;
};
})();
pages/start/introPreparedMember/02_avatarWizard/continueLink/continueLink.ls
(function(){
return function(page, onPageComplete){
var click, div;
click = function(){
page.params.avatar = page.avatar.getAvatar();
return startPage({
path: path("../../10_done/page"),
params: _.omit(page.params, "history"),
animation: "slideLeft"
});
};
div = inc("/lib/gui/link/link")(T("continueButton")).css({
visibility: page.params.avatar != null ? "visible" : "hidden"
}).tap(click);
return page.continueLink = div;
};
})();
pages/start/introPreparedMember/02_avatarWizard/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var avatar;
page.css({
maxWidth: "90%",
margin: "0 auto"
}).append(inc("../00_shared/title/title")("avatar"), inc("avatar/avatar")(page), inc("shuffleButtons/shuffleButtons")(page), inc("continueLink/continueLink")(page));
if (avatar = page.params.avatar) {
return page.avatar.update(avatar);
}
}
};
};
})();
pages/start/introPreparedMember/02_avatarWizard/shuffleButtons/shuffleButtons.ls
(function(){
return function(page){
var shuffleProgress, shuffle;
shuffleProgress = false;
shuffle = function(type){
var counter, interval;
if (shuffleProgress) {
return;
}
shuffleProgress = true;
counter = 0;
return interval = setInterval(function(){
var typeRestrictions, avatarDescription;
if (counter++ >= 5) {
clearInterval(interval);
shuffleProgress = false;
page.continueLink.css({
visibility: "visible"
});
}
typeRestrictions = {
head: [type],
body: [type],
legs: [type]
};
avatarDescription = inc("/../app01-avatar/lib/util/randomizeAvatar/randomize")(null, typeRestrictions);
avatarDescription.version = 2;
return page.avatar.update(avatarDescription);
}, 100);
};
return Div().css({
margin: "1em 0.5em"
}).append(Button({
label: T("human"),
icon: path("/lib/svg/shape/avatar.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}).tap(function(){
return shuffle("human");
}), Button({
label: T("monster"),
icon: path("/lib/svg/shape/monster.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}).tap(function(){
return shuffle("monster");
}));
};
})();
pages/start/introPreparedMember/10_done/_t.ls
(function(){
return {
startNow: {
de: "Los geht's",
en: "Start now",
fr: "C'est parti !",
es: "¡Comenzar!",
pt: "Começar"
}
};
})();
pages/start/introPreparedMember/10_done/avatar/avatar.ls
(function(){
return function(page){
return Div().append(inc("/lib/gui/avatar/avatar")(page.params.avatar, "half").css({
margin: "1em 0 2em",
width: "6em",
height: "6em",
borderRadius: "999px"
}));
};
})();
pages/start/introPreparedMember/10_done/button/button.ls
(function(){
return function(submit){
return Div().append(Button(T("startNow")).tap(submit));
};
})();
pages/start/introPreparedMember/10_done/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var submit;
submit = function(){
page.css({
minHeight: page.height() + "px"
});
page.button.hide();
page.spinner.show();
page.params.funnelId = "F-" + deviceLog.id().split("-")[1] + "-" + new Date().toISOString();
return inc("submit/submit")({
params: page.params,
page: page
});
};
page.append(inc("../00_shared/title/title")("done"), inc("avatar/avatar")(page), page.button = inc("button/button")(submit), page.spinner = inc("/lib/gui/spinner/spinner")());
return page.spinner.hide();
}
};
};
})();
pages/start/introPreparedMember/10_done/submit/submit.ls
(function(){
return function(o){
var page;
page = o.page;
o.params.guiLanguage = engine.guiLanguage;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/createFromPreparedMember2/create"),
params: o.params,
onOffline: function(){
page.spinner.hide();
page.button.show();
return inc("/lib/offline/offlinePopup/popup")();
},
onError: function(error){
page.spinner.hide();
page.button.show();
return inc("/lib/gui/errorPopup/popup")();
},
onCompleted: function(result){
return startPage({
path: path("/pages/start/startUser/page"),
params: {
logId: result.logId,
authToken: result.authToken,
loginType: "preparedMember",
rememberUser: "no",
name: page.params.name,
avatar: page.params.avatar,
startNavCategory: "groups"
}
});
}
});
};
})();
pages/start/introPreparedUser/_shared/submit/submit.ls
(function(){
return function(page){
var p, finish;
p = page.params;
finish = function(data){
return startPage({
path: path("/pages/start/startUser/page"),
params: {
logId: data.logId,
authToken: data.authToken,
loginType: "preparedUser",
rememberUser: "no",
name: p.displayName,
avatar: p.avatar,
startNavCategory: p.groupNames.length > 0 ? "groups" : "content"
}
});
};
if (window.log != null) {
return finish({
logId: log.id()
});
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/createFromPreparedUser/create"),
params: {
code: p.loginCode,
avatar: p.avatar,
email: p.email,
password: p.password,
guiLanguage: engine.guiLanguage,
deviceSrc: Store("sourceId")
},
onError: function(error){
page.spinner.hide();
page.button.show();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
page.spinner.hide();
page.button.show();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
if (result.status !== "ok") {
page.spinner.hide();
page.button.show();
return inc("/lib/gui/errorPopup/popup")();
} else {
return finish(result);
}
}
});
};
})();
pages/start/introPreparedUser/pupil/01_welcome/page.ls
(function(){
return function(page){
page.soundEnabled = true;
page.onCustomFinish = function(){
return startPage({
path: path("../02_avatarWizard/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../../intro_sharedPageTemplates/welcomePreparedUser/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/pupil/02_avatarWizard/page.ls
(function(){
return function(page){
page.soundEnabled = true;
page.avatarValue = page.params.avatar;
page.onCustomFinish = function(avatar){
page.params.avatar = avatar;
return startPage({
path: path("../03_done/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../../intro_sharedPageTemplates/avatarWizard/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/pupil/03_done/page.ls
(function(){
return function(page){
page.avatarValue = page.params.avatar;
page.privacyValue = "pupil";
page.soundEnabled = true;
page.onCustomFinish = function(){
page.button.hide();
page.spinner.show();
return inc("../../_shared/submit/submit")(page);
};
return inc("../../../intro_sharedPageTemplates/done/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/start.ls
(function(){
return function(params){
var pagePath;
pagePath = !params.isTeacher
? path("pupil/01_welcome/page")
: path("teacher/01_welcome/page");
return startPage({
path: pagePath,
animation: "slideLeft",
params: params
});
};
})();
pages/start/introPreparedUser/teacher/01_welcome/page.ls
(function(){
return function(page){
page.soundEnabled = false;
page.onCustomFinish = function(){
return startPage({
path: app.openIdData
? path("../04_avatarWizard/page")
: path("../02_askExistingUser/page"),
params: _.omit(page.params, "history"),
animation: "slideLeft"
});
};
return inc("../../../intro_sharedPageTemplates/welcomePreparedUser/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/teacher/02_askExistingUser/_t.ls
(function(){
return {
text: {
de: "Mit diesem Lehrer-Code kannst du entweder ein neues ANTON-Nutzerkonto erstellen oder ein bestehendes Nutzerkonto mit dem Schulverzeichnis verknüpfen.",
en: "With this teacher code, you can either create a new ANTON account or add an existing account to the school directory.",
fr: "Avec ce code-professeur, tu peux créer un nouveau compte ANTON ou lié un compte existant au répertoire scolaire.",
es: "Con esta clave-docente puedes crear una nueva cuenta en ANTON o agregar tu cuenta actual al directorio escolar.",
pt: "Com este código-professores, você pode criar uma nova conta no ANTON ou pode incluir uma conta já existente no Diretório Escolar."
},
buttonExistingUser: {
de: "Bestehendes Nutzerkonto verknüpfen",
en_gb: "Add existing account.",
en: "Add existing account.",
fr: "Lier un compte existant",
es: "Ya tengo una cuenta en ANTON",
pt: "Já tenho uma conta no ANTON"
},
buttonNewUser: {
de: "Neues Nutzerkonto erstellen",
en: "Create new account",
fr: "Créer un nouveau compte",
es: "Crear una cuenta nueva",
pt: "Criar uma nova conta"
}
};
})();
pages/start/introPreparedUser/teacher/02_askExistingUser/buttonExistingUser/button.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("../../03_infoExistingUser/page"),
animation: "slideLeft"
});
};
return Button(T("buttonExistingUser")).css({
display: "block",
padding: "0.7em"
}).tap(tap);
};
})();
pages/start/introPreparedUser/teacher/02_askExistingUser/buttonNewUser/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return startPage({
path: path("../../04_avatarWizard/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return Button(T("buttonNewUser")).css({
display: "block",
padding: "0.7em"
}).tap(tap);
};
})();
pages/start/introPreparedUser/teacher/02_askExistingUser/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../../../intro_sharedPageTemplates/_shared/topbar/topbar")(page);
},
start: function(){
return page.css({
width: "25em",
maxWidth: "90%",
margin: "0 auto"
}).html(inc("text/text")(page), Div({
display: "inline-block"
}).html(inc("buttonNewUser/button")(page), " ", inc("buttonExistingUser/button")()));
}
};
};
})();
pages/start/introPreparedUser/teacher/02_askExistingUser/text/text.ls
(function(){
return function(page){
return Div({
lineHeight: "1.5em",
paddingBottom: "2em"
}).html(T("text"));
};
})();
pages/start/introPreparedUser/teacher/03_infoExistingUser/_t.ls
(function(){
return {
text: {
de: "Bitte logge dich mit deinem bestehenden ANTON-Nutzerkonto ein.
In den Nutzer-Einstellungen kannst du dann diesen Lehrer-Code aktivieren.",
en: "Please log in with your existing ANTON account.
You can activate your teacher code in the account settings. ",
fr: "Connecte-toi à ton compte ANTON actuel.
Tu peux activer ton code-professeur dans les paramètres. ",
es: "Por favor, inicia sesión con tu cuenta de ANTON ya existente.
Posteriormente, activa tu clave-docente en los ajustes.",
pt: "Por favor, faç seu login com sua conta do ANTON já existente.
Depois ative o seu código-professores nas configurações de conta."
},
backToStart: {
de: "Zurück zum Start",
en: "Back to start",
fr: "Retour à la page d'accueil",
es: "Volver al inicio",
pt: "Voltar ao início"
}
};
})();
pages/start/introPreparedUser/teacher/03_infoExistingUser/buttonBackToStart/button.ls
(function(){
return function(){
return Button(T("backToStart")).tap(function(){
return startPage({
history: -5,
animation: "slideRight"
});
});
};
})();
pages/start/introPreparedUser/teacher/03_infoExistingUser/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("../../../intro_sharedPageTemplates/_shared/topbar/topbar")(page);
},
start: function(){
return page.css({
width: "25em",
maxWidth: "90%",
margin: "0 auto"
}).append(inc("text/text")(page), inc("buttonBackToStart/button")());
}
};
};
})();
pages/start/introPreparedUser/teacher/03_infoExistingUser/text/text.ls
(function(){
return function(page){
return Div().css({
lineHeight: "1.5em",
paddingBottom: "2em"
}).html(T("text"));
};
})();
pages/start/introPreparedUser/teacher/04_avatarWizard/page.ls
(function(){
return function(page){
page.avatarValue = page.params.avatar;
page.soundEnabled = false;
page.onCustomFinish = function(avatar){
page.params.avatar = avatar;
return startPage({
path: path("../05_email/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../../intro_sharedPageTemplates/avatarWizard/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/teacher/05_email/page.ls
(function(){
return function(page){
page.emailValue = page.params.email;
page.onCustomFinish = function(email){
if (email) {
page.params.email = email;
return startPage({
path: path("../06_password/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
} else {
return startPage({
path: path("../07_done/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
}
};
return inc("../../../intro_sharedPageTemplates/email/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/teacher/06_password/page.ls
(function(){
return function(page){
page.passwordValue = page.params.password;
page.onCustomFinish = function(password){
page.params.password = password;
return startPage({
path: path("../07_done/page"),
animation: "slideLeft",
params: _.omit(page.params, "history")
});
};
return inc("../../../intro_sharedPageTemplates/password/pageTemplate")(page);
};
})();
pages/start/introPreparedUser/teacher/07_done/page.ls
(function(){
return function(page){
page.avatarValue = page.params.avatar;
page.privacyValue = "teacher";
page.soundEnabled = false;
page.onCustomFinish = function(){
page.button.hide();
page.spinner.show();
return inc("../../_shared/submit/submit")(page);
};
return inc("../../../intro_sharedPageTemplates/done/pageTemplate")(page);
};
})();
pages/start/intro_sharedPageTemplates/_shared/_t.ls
(function(){
return {
welcomePreparedUser: {
de: "Willkommen bei ANTON!",
en: "Welcome to ANTON!",
fr: "Bienvenue sur ANTON !",
es: "¡ANTON te da la bienvenida!",
pt: "ANTON te dá as boas-vindas!"
},
welcomePreparedUserSound: {
de: "Willkommen bei ANTON!",
en: "Welcome to ANTON!",
fr: "Bienvenue sur ANTON !",
es: "¡ANTON te da la bienvenida!",
pt: "ANTON te dá as boas-vindas!"
},
createAvatar: {
de: "Erstelle dir einen Avatar. Du kannst ihn später in den Einstellungen anpassen.",
en_gb: "Create an avatar. You can further customise it in the settings later.",
en: "Create an avatar. You can further customize it in the settings later.",
fr: "Crée un avatar. Tu peux le modifier plus tard dans les paramètres.",
es: "Crea un avatar. Lo podrás modificar en los ajustes más adelante.",
pt: "Crie um avatar. Você poderá modificá-lo mais tarde nas configurações."
},
createAvatarSound: {
de: "ssml: Erstelle dir einen awattahr. Du kannst ihn später in den Einstellungen anpassen.",
en_gb: "ssml: Create an avatar. You can further customise it in the settings later.",
en: "ssml: Create an avatar. You can further customize it in the settings later.",
fr: "ssml: Crée un avatar. Tu peux le modifier plus tard dans les paramètres.",
es: "ssml: Crea un avatar. Lo podrás modificar en los ajustes más adelante.",
pt: "ssml: Crie um avatar. Você poderá modificá-lo mais tarde nas configurações."
},
whichClass: {
de: "In welche Klasse gehst du?",
en_gb: "Which year are you in?",
en: "What grade are you in?",
fr: "En quelle classe es-tu ?",
es: "¿En qué grado vas?",
pt: "Em qual série você está?"
},
thanksForYour: {
de: "Danke für deine Angaben. Los geht's.",
en: "Thank you for your information. Let's start!",
fr: "Merci pour ces renseignements. C'est parti !",
es: "Gracias por ingresar tus datos. ¡Vamos a comenzar!",
pt: "Agradecemos pelas suas informações. Vamos começar!"
},
thanksForYourSound: {
de: "Danke für deine Angaben. Los geht's.",
en: "Thank you for your information. Let's start!",
fr: "Merci pour ces renseignements. C'est parti !",
es: "Gracias por ingresar tus datos. ¡Vamos a comenzar!",
pt: "Agradecemos pelas suas informações. Vamos começar!"
},
topTitleContextFamilyMember: {
de: "Neues Familienmitglied",
en: "New Family Member",
fr: "Nouveau membre de la famille",
es: "Nuevo integrante de la familia",
pt: "Novo membro da família"
}
};
})();
pages/start/intro_sharedPageTemplates/_shared/statusBarColor/status.ls
(function(){
return function(page){
if (page.params.context !== "familyMember") {
return Color.white;
}
};
})();
pages/start/intro_sharedPageTemplates/_shared/title/descriptions/descriptions.ls
(function(){
return function(){
var voice, voiceLang, titles, i$, t;
voice = twitch({
de: "f1_override_AE",
en: "f8Us_override_DG",
en_gb: "f3",
fr: "f1",
es: "f1EsUs",
pt: "m2"
});
voiceLang = engine.guiLanguage.split("_")[0];
titles = {
welcome: {
text: T("welcomePreparedUser"),
sound: T("welcomePreparedUserSound"),
voice: voice
},
avatar: {
text: T("createAvatar"),
sound: T("createAvatarSound"),
voice: voice
},
grade: {
text: T("whichClass"),
sound: T("whichClass"),
voice: voice
},
done: {
text: T("thanksForYour"),
sound: T("thanksForYourSound"),
voice: voice
}
};
for (i$ in titles) {
t = titles[i$];
t.voiceLang = voiceLang;
}
return titles;
};
})();
pages/start/intro_sharedPageTemplates/_shared/title/speaker/speaker.ls
(function(){
return function(description){
var currentPage, d, fileId, fileFolder, loadFile, onLoaded, speaker;
currentPage = app.currentPage;
d = description;
fileId = "sound/" + d.voiceLang + "/" + d.voice + "/" + d.sound;
fileFolder = "media/introPreparedMember/_sounds";
loadFile = function(){
return inc("/lib/util/downloadContentFile/download")({
fileId: fileId,
fileFolder: fileFolder,
etag: "any",
returnFileContent: true,
onLoaded: onLoaded,
onError: function(){}
});
};
onLoaded = function(base64){
var sound;
if (currentPage !== app.currentPage) {
return;
}
sound = inc("/lib/util/sound/sound")({
base64: base64
});
speaker.setSound(sound);
if (currentPage.params.history !== -1) {
return speaker.play();
}
};
speaker = inc("/lib/gui/speakerIconPlayer/speakerIconPlayer")({
outline: true,
size: "1.4em"
}).css({
marginRight: "0.2em"
});
loadFile();
return speaker;
};
})();
pages/start/intro_sharedPageTemplates/_shared/title/text/text.ls
(function(){
return function(description){
return description.text;
};
})();
pages/start/intro_sharedPageTemplates/_shared/title/title.ls
(function(){
return function(titleId, soundEnabled){
var description, div, speaker;
description = inc("descriptions/descriptions")()[titleId];
div = Div({
margin: "0.3em 0 1em"
});
if (!soundEnabled) {
div.html(inc("text/text")(description));
} else {
div.html(Div({
display: "inline-block",
padding: "0.3em"
}).html(speaker = inc("speaker/speaker")(description), inc("text/text")(description)).tap(function(){
return speaker.toggle();
}));
}
return div;
};
})();
pages/start/intro_sharedPageTemplates/_shared/topbar/topbar.ls
(function(){
return function(page){
if (page.params.context === "familyMember") {
return inc("/addons/topbar2/topbar")({
title: T("topTitleContextFamilyMember"),
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "introFamily");
},
animation: "slideDown"
});
}
});
} else {
return inc("/addons/topbarWhiteBack/topbar")({
back: function(){
return startPage({
history: -1,
animation: "slideRight"
});
}
});
}
};
})();
pages/start/intro_sharedPageTemplates/avatarWizard/_t.ls
(function(){
return {
human: {
de: "Mensch",
en: "Human",
fr: "Humain",
es: "Humano",
pt: "Humano"
},
monster: {
de: "Monster",
en: "Monster",
fr: "Monstre",
es: "Monstruo",
pt: "Monstro"
}
};
})();
pages/start/intro_sharedPageTemplates/avatarWizard/avatar/avatar.ls
(function(){
return function(page, avatarDescription){
var update, div;
update = function(avatarDescription){
return div.replaceWith(inc(THISFILE)(page, avatarDescription));
};
div = Div().append(inc("/lib/gui/avatar/avatar")(avatarDescription, "half").css({
width: "6em",
height: "6em",
borderRadius: "999px",
filter: 'drop-shadow(0 0 0.5em rgba(0, 0, 0, 0.2))'
}));
div.update = update;
div.getAvatar = function(){
return avatarDescription;
};
return page.avatar = div;
};
})();
pages/start/intro_sharedPageTemplates/avatarWizard/continueLink/continueLink.ls
(function(){
return function(page, onPageFinish){
var tap, div;
tap = function(){
page.avatarValue = page.avatar.getAvatar();
return onPageFinish(page.avatarValue);
};
div = inc("/lib/gui/link/link")(T("continueButton")).css({
visibility: page.avatarValue ? "visible" : "hidden"
}).tap(tap);
return page.continueLink = div;
};
})();
pages/start/intro_sharedPageTemplates/avatarWizard/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
var a;
page.css({
maxWidth: "90%",
margin: "0 auto"
}).append(inc("../_shared/title/title")("avatar", page.soundEnabled), inc("avatar/avatar")(page), inc("shuffleButtons/shuffleButtons")(page), inc("continueLink/continueLink")(page, page.onCustomFinish));
if (a = page.avatarValue) {
return page.avatar.update(a);
}
}
};
};
})();
pages/start/intro_sharedPageTemplates/avatarWizard/shuffleButtons/shuffleButtons.ls
(function(){
return function(page){
var shuffleProgress, shuffle;
shuffleProgress = false;
shuffle = function(type){
var counter, interval;
if (shuffleProgress) {
return;
}
shuffleProgress = true;
counter = 0;
return interval = setInterval(function(){
var typeRestrictions, avatarDescription;
if (counter++ >= 5) {
clearInterval(interval);
shuffleProgress = false;
page.continueLink.css({
visibility: "visible"
});
}
typeRestrictions = {
head: [type],
body: [type],
legs: [type]
};
avatarDescription = inc("/../app01-avatar/lib/util/randomizeAvatar/randomize")(null, typeRestrictions);
avatarDescription.version = 2;
return page.avatar.update(avatarDescription);
}, 100);
};
return Div().css({
margin: "1em 0.5em"
}).append(Button({
label: T("human"),
icon: path("/lib/svg/shape/avatar.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}).tap(function(){
return shuffle("human");
}), Button({
label: T("monster"),
icon: path("/lib/svg/shape/monster.svg"),
iconColor: Color.grey[400]
}).css({
margin: "0.25em"
}).tap(function(){
return shuffle("monster");
}));
};
})();
pages/start/intro_sharedPageTemplates/deviceRememberUser/_t.ls
(function(){
return {
title: {
de: "Soll das neue Familienmitglied auf der Startseite gespeichert werden?",
en: "Should the new family member appear on this device when ANTON is started?",
fr: "Veux-tu que le nouveau membre de la famille apparaisse sur la page d'accueil de cet appareil ?",
es: "¿Quieres que el nuevo miembro de la familia aparezca en la página de inicio?",
pt: "O novo membro da família deve aparecer na página inicial?"
}
};
})();
pages/start/intro_sharedPageTemplates/deviceRememberUser/buttons/buttons.ls
(function(){
return function(page){
var tapNo, tapYes, c;
tapNo = function(){
return page.onCustomFinish();
};
tapYes = function(){
return inc("rememberUser/remember")(page);
};
return Div().append(Button(T("no")).css(c = {
margin: "0.5em",
minWidth: "5em"
}).tap(tapNo), Button(T("yes")).css(c).tap(tapYes));
};
})();
pages/start/intro_sharedPageTemplates/deviceRememberUser/buttons/rememberUser/remember.ls
(function(){
return function(page){
var logId;
logId = page.logIdValue;
inc("/lib/util/storedUsers/addUser/add")(logId);
inc("/lib/util/log/subscribeUser/subscribe")({
logId: logId,
onInitDone: function(userLog){
return window.userLogs[logId] = userLog;
}
});
return page.onCustomFinish();
};
})();
pages/start/intro_sharedPageTemplates/deviceRememberUser/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
return page.append(inc("title/title")(), inc("buttons/buttons")(page));
}
};
};
})();
pages/start/intro_sharedPageTemplates/deviceRememberUser/title/title.ls
(function(){
return function(){
return Div().css({
width: "25em",
maxWidth: "90%",
margin: "1em auto 2em",
lineHeight: "1.5em"
}).html(T("title"));
};
})();
pages/start/intro_sharedPageTemplates/done/_t.ls
(function(){
return {
antonPrivacy: {
de: "ANTON-Datenschutzbestimmungen",
en: "ANTON data privacy policy",
fr: "Politique de protection des données personnelles d'ANTON",
es: "Política de privacidad de ANTON",
pt: "Política de privacidade de ANTON"
},
startNow: {
de: "Los geht's",
en: "Start now",
fr: "C'est parti",
es: "Comenzar",
pt: "Começar"
},
iAgree: {
de: "Ich stimme den",
en: "I agree to the",
fr: "J'accepte la",
es: "Acepto la",
pt: "Aceito a"
},
privacyPolicy: {
de: "Datenschutzbestimmungen",
en: "data privacy policy",
fr: "politique de protection des données personnelles",
es: "política de privacidad",
pt: "política de privacidade"
},
to: {
de: "zu.",
en: ".",
fr: ".",
es: ".",
pt: "."
},
agreeToPrivacyPolicy: {
de: "Bitte stimme den Datenschutzbestimmungen zu.",
en: "Please agree to the data privacy policy.",
fr: "Merci d'accepter la politique de protection des données personnelles",
es: "Por favor, acepta la política de privacidad.",
pt: "Por favor, aceite a política de privacidade."
},
saveProgress: {
de: "ANTON speichert deinen Lernfortschritt. ",
en: "ANTON saves your learning progress. ",
fr: "ANTON enregistre les progrès de ton apprentissage. ",
es: "ANTON registra tu progreso de aprendizaje. ",
pt: "ANTON registra o seu progresso de aprendizagem. "
},
moreInformation: {
de: "Mehr Informationen findest du in den",
en: "More information can be found in the",
fr: "Tu peux trouver plus d'informations dans la",
es: "Puedes leer más al respecto en la",
pt: "Encontre mais informações em"
},
createFamilyMember: {
de: "Familienmitglied jetzt anlegen",
en: "Create family member now",
fr: "Créer maintenant",
es: "Agregar miembro familiar ahora",
pt: "Adicionar membro familiar"
}
};
})();
pages/start/intro_sharedPageTemplates/done/avatar/avatar.ls
(function(){
return function(page){
var avatar;
avatar = page.avatarValue;
if (!avatar) {
return;
}
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "6em",
height: "6em",
borderRadius: "999px"
});
};
})();
pages/start/intro_sharedPageTemplates/done/button/button.ls
(function(){
return function(page){
var tap;
tap = function(){
if (page.privacyValue === "teacher" && !page.acceptedPrivacy) {
return inc("popupPrivacyMissing/popup")();
} else {
return page.onCustomFinish();
}
};
return page.button = Button(page.params.context === "familyMember"
? T("createFamilyMember")
: T("startNow")).css({
minWidth: "5em",
textAlign: "center"
}).tap(tap);
};
})();
pages/start/intro_sharedPageTemplates/done/button/popupPrivacyMissing/popup.ls
(function(){
return function(){
var div, popup;
div = Div().css({
padding: "1em",
lineHeight: "1.5em"
}).append(T("agreeToPrivacyPolicy"));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/intro_sharedPageTemplates/done/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
return page.append(inc("avatar/avatar")(page), inc("../_shared/title/title")("done", page.soundEnabled), inc("privacy/privacy")(page), " ", inc("button/button")(page), inc("spinner/spinner")(page).hide());
}
};
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/_link/link.ls
(function(){
return function(){
var tap;
tap = function(){
return inc("popupPrivacy/popup")();
};
return Span().css({
textDecoration: "underline",
padding: "0 0.3em"
}).html(T("privacyPolicy")).tap({
animation: "none",
down: function(){
return this.css({
backgroundColor: Color.grey[150]
});
},
cancel: function(){
return this.css({
backgroundColor: ""
});
},
up: function(){
this.css({
backgroundColor: ""
});
return tap();
}
});
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/_link/popupPrivacy/popup.ls
(function(){
return function(){
var div, popup;
div = Div().css({
width: "32em",
margin: "1em 0",
textAlign: "left",
padding: "0em 1em"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("antonPrivacy")), inc("/pages/static/privacy/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/privacy.ls
(function(){
return function(page){
if (page.privacyValue === "pupil") {
return inc("privacyPupil/privacyPupil")(page);
} else if (page.privacyValue === "teacher") {
return inc("privacyTeacher/privacyTeacher")(page);
}
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/privacyPupil/privacyPupil.ls
(function(){
return function(page){
return Div().css({
fontSize: "0.9em",
lineHeight: "1.5em",
paddingBottom: "0.5em"
}).html(T("saveProgress"), T("moreInformation"), " ", inc("../_link/link")());
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/privacyTeacher/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: page.acceptedPrivacy === true
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg")
}).css({
marginRight: "0.4em",
verticalAlign: "-0.18em"
});
};
})();
pages/start/intro_sharedPageTemplates/done/privacy/privacyTeacher/privacyTeacher.ls
(function(){
return function(page){
var tap;
page.acceptedPrivacy == null && (page.acceptedPrivacy = false);
tap = function(){
page.acceptedPrivacy = !page.acceptedPrivacy;
return this.replaceWith(inc(THISFILE)(page));
};
return Div().css({
display: "inline-block",
marginBottom: "2em",
lineHeight: "1.6em",
maxWidth: "95%"
}).append(inc("icon/icon")(page), T("iAgree"), inc("../_link/link")(), T("to")).tap(tap);
};
})();
pages/start/intro_sharedPageTemplates/done/spinner/spinner.ls
(function(){
return function(page){
return page.spinner = inc("/lib/gui/spinner/spinner")().css({
padding: "0.35em"
});
};
})();
pages/start/intro_sharedPageTemplates/email/_t.ls
(function(){
return {
inputEmail: {
de: "Was ist deine E-Mail-Adresse?",
en: "Please enter a valid email address.",
fr: "Merci d'écrire une adresse e-mail valide.",
es: "¿Cuál es tu correo electrónico?",
pt: "Qual o seu endereço de e-mail?"
},
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
emptyEmail: {
de: "Die E-Mail darf nicht leer sein!",
en: "The email cannot be left empty.",
fr: "Il nous faut une adresse e-mail valide.",
es: "Es necesario ingresar una direccion de correo elecetrónico.",
pt: "O e-mail não pode ficar em branco."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen!",
en: "Oops! Something went wrong.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Ocorreu um erro!"
},
errorInvalid: {
de: "Diese E-Mail-Adresse ist ungültig.",
en: "This email address is not valid.",
fr: "Cette adresse e-mail n'est pas valide.",
es: "Esta dirección de correo no es válida.",
pt: "Este endereço de e-mail não é válido."
},
errorUnavailable: {
de: "Diese E-Mail-Adresse ist bereits vergeben.",
en: "This email address is already taken.",
fr: "Cette adresse e-mail est déjà prise.",
es: "Este corre electrónico ya existe.",
pt: "Este endereço de e-mail não existe."
},
email: {
de: "E-Mail",
en: "email",
fr: "e-mail",
es: "Correo electrónico",
pt: "E-mail"
}
};
})();
pages/start/intro_sharedPageTemplates/email/form/form.ls
(function(){
return function(page, submit){
return page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputEmail"),
submitLabel: T("continueButton"),
submit: submit,
cancel: false,
native: true,
autocomplete: "username",
placeholder: T("email"),
type: "email"
});
};
})();
pages/start/intro_sharedPageTemplates/email/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
var submit;
submit = function(){
return inc("submit/submit")(page);
};
page.append(inc("form/form")(page, submit), inc("skipLink/link")(page));
page.form.input.setValue(page.emailValue);
return page.form.input.start();
}
};
};
})();
pages/start/intro_sharedPageTemplates/email/skipLink/link.ls
(function(){
return function(page){
return inc("/lib/gui/link/link")({
label: T("notNow")
}).css({
marginLeft: "0.5em",
marginTop: inc("/lib/util/isDesktop/isDesktop")() && !deviceLog['var']("showScreenKeyboard") ? "1em" : void 8
}).tap(function(){
return page.onCustomFinish();
});
};
})();
pages/start/intro_sharedPageTemplates/email/submit/submit.ls
(function(){
return function(page){
var form, email;
form = page.form;
email = form.input.getValue();
if (email === "") {
form.error.html(T("emptyEmail"));
form.input.start();
return;
}
form.error.html(" ");
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setEmail/set"),
params: {
email: email,
dryRun: true
},
onCompleted: function(result){
var message;
if (result.status !== "ok") {
message = result.status === "error_invalid"
? T("errorInvalid")
: result.status === "error_unavailable"
? T("errorUnavailable")
: T("errorMessage");
form.error.html(message);
return form.hideSpinner();
} else {
return page.onCustomFinish(email);
}
},
onError: function(error){
form.error.html(T("errorMessage"));
return form.hideSpinner();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/start/intro_sharedPageTemplates/name/_t.ls
(function(){
return {
inputFirstname: {
de: "Was ist dein Vorname?",
en: "What is your first name?",
fr: "Quel est ton prénom ?",
es: "¿Cuál es tu nombre? (sin apellidos)",
pt: "Qual o seu primeiro nome?"
},
emptyName: {
de: "Der Name darf nicht leer sein.",
en: "The name cannot be left blank.",
fr: "Le prénom ne peut pas rester vide.",
es: "El nombre no puede quedar vacío.",
pt: "O nome não pode ficar em branco."
}
};
})();
pages/start/intro_sharedPageTemplates/name/form/form.ls
(function(){
return function(page, submit){
return page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputFirstname"),
submitLabel: T("continueButton"),
submit: submit
});
};
})();
pages/start/intro_sharedPageTemplates/name/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
var submit;
submit = function(){
return inc("submit/submit")(page);
};
page.append(inc("form/form")(page, submit));
page.form.input.setValue(page.nameValue);
return page.form.input.start();
}
};
};
})();
pages/start/intro_sharedPageTemplates/name/submit/submit.ls
(function(){
return function(page){
var form, name;
form = page.form;
name = form.input.getValue();
if (name.length === 0) {
form.error.html(T("emptyName"));
form.input.start();
return;
}
return page.onCustomFinish(name);
};
})();
pages/start/intro_sharedPageTemplates/password/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein!",
en: "The password cannot be left blank!",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen.",
en: "Oops! An error occurred.",
fr: "Oups… Une erreur s'est produite.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Ocorreu um erro."
},
errorInvalidLength: {
de: "Das Passwort muss mindestens ((ein | $1)) Zeichen beinhalten.",
en: "The password must contain at least ((one character | $1 characters)).",
fr: "Le mot de passe doit contenir au moins ((un caractère | $1 caractères)).",
es: "La contraseña debe de tener por lo menos ((un carácter | $1 caractéres)).",
pt: "A senha deve conter pelo menos ((um caractere | $1 caracteres))."
},
errorInvalidCharacter: {
de: "Das Passwort enthält ein ungültiges Zeichen: '$1'",
en: "The password contains an invalid character: '$1'",
fr: "Le mot de passe contient un caractère non valable : “$1”",
es: "La contraseña contiene un signo no válido: '$1'",
pt: "A senha contém um caractere inválido: '$1'"
},
inputPassword: {
de: "Wie soll das Passwort \nfür diese E-Mail-Adresse lauten?",
en: "Create a password for this email address.",
fr: "Crée un mot de passe pour aller avec cette adresse e-mail.",
es: "¿Qué contraseña quieres asignarle a este correo electrónico?",
pt: "Qual senha você deseja definir para este e-mail?"
},
password: {
de: "Passwort",
en: "Password",
fr: "Mot de passe",
es: "Contraseña",
pt: "Senha"
}
};
})();
pages/start/intro_sharedPageTemplates/password/form/form.ls
(function(){
return function(page, submit){
return page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputPassword"),
isPassword: true,
submitLabel: T("continueButton"),
submit: submit,
cancel: false,
native: true,
autocomplete: "new-password",
placeholder: T("password")
});
};
})();
pages/start/intro_sharedPageTemplates/password/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
var submit;
submit = function(){
return inc("submit/submit")(page);
};
page.append(inc("form/form")(page, submit), inc("skipLink/link")(page));
return page.form.input.start();
}
};
};
})();
pages/start/intro_sharedPageTemplates/password/skipLink/link.ls
(function(){
return function(page){
return inc("/lib/gui/link/link")({
label: T("notNow")
}).css({
marginLeft: "0.5em",
marginTop: inc("/lib/util/isDesktop/isDesktop")() && !deviceLog['var']("showScreenKeyboard") ? "1em" : void 8
}).tap(function(){
return page.onCustomFinish();
});
};
})();
pages/start/intro_sharedPageTemplates/password/submit/submit.ls
(function(){
return function(page){
var form, password;
form = page.form;
password = form.input.getValue();
if (password === "") {
form.error.html(T("emptyPassword"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setPassword/set"),
params: {
password: password,
dryRun: true
},
onCompleted: function(result){
var message;
if (result.status !== "ok") {
form.hideSpinner();
message = result.status === "error_invalid_length"
? T("errorInvalidLength", result.count)
: result.status === "error_invalid_length"
? T("errorInvalidCharacter", result.character)
: T("errorMessage");
return form.error.html(message);
} else {
return page.onCustomFinish(password);
}
},
onError: function(error){
form.error.html(T("errorMessage"));
return form.hideSpinner();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
})();
pages/start/intro_sharedPageTemplates/school/_t.ls
(function(){
return {
selectSchool: {
de: "Schule auswählen",
en: "Select school",
fr: "Choisir une école",
es: "Elegir una escuela",
pt: "Escolher escola"
},
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
groupTeaserPupil: {
de: "Du kannst dann mit anderen in Gruppen lernen und Spiel-Ergebnisse vergleichen.",
en: "Then you can learn with others in groups and compare game scores.",
fr: "Tu pourras alors étudier en groupes avec d'autres élèves et comparer tes scores de jeux avec eux.",
es: "Podrás estudiar en grupos con otros estudiantes y comparar con ellos tu puntuación en los juegos.",
pt: "Você poderá estudar com outros alunos e comparar suas pontuações dos jogos com eles/as."
},
groupTeaserTeacher: {
de: "Du kannst dann an dieser Schule Gruppen für deine Schüler/innen erstellen.",
en_gb: "Then you can create groups for your pupils in this school.",
en: "Then you can create groups for your students in this school.",
fr: "Tu pourras alors créer des groupes pour les élèves de cette école.",
es: "Podrás crear grupos para los estudiantes de esta escuela.",
pt: "Você poderá criar grupos de alunos desta escola."
},
selectSchool2: {
de: "Bitte wähle deine Schule aus.",
en: "Please select a school.",
fr: "Choisis une école.",
es: "Elige una escuela.",
pt: "Por favor, selecione uma escola."
}
};
})();
pages/start/intro_sharedPageTemplates/school/button/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc("/pages/schoolSearch/start")({
finishFunctionPath: page.finishFunctionPath,
params: page.params
});
};
return Div().css({
padding: "1em"
}).append(Button(T("selectSchool")).tap(tap));
};
})();
pages/start/intro_sharedPageTemplates/school/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/school.svg"),
size: "4em"
});
};
})();
pages/start/intro_sharedPageTemplates/school/linkSkip/link.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc(page.finishFunctionPath)({
params: page.params,
skipped: true,
totalPages: 0
});
};
return Div().append(inc("/lib/gui/link/link")(T("notNow")).tap({
up: tap,
animation: "hover"
}));
};
})();
pages/start/intro_sharedPageTemplates/school/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
return page.append(inc("icon/icon")(), inc("title/title")(), inc("subtitle/subtitle")(page), inc("button/button")(page), inc("linkSkip/link")(page));
}
};
};
})();
pages/start/intro_sharedPageTemplates/school/subtitle/subtitle.ls
(function(){
return function(page){
return Div().css({
width: "25em",
maxWidth: "90%",
margin: "1em auto",
lineHeight: "1.5em"
}).html(page.wordingType === "teacher"
? T("groupTeaserTeacher")
: T("groupTeaserPupil"));
};
})();
pages/start/intro_sharedPageTemplates/school/title/title.ls
(function(){
return function(){
return Div().css({
width: "25em",
maxWidth: "90%",
margin: "1em auto"
}).html(T("selectSchool2"));
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/_t.ls
(function(){
return {
rowSchool: {
de: "Schule",
en: "School",
fr: "École",
es: "Escuela",
pt: "Escola"
},
rowDisplayName: {
de: "Name",
en: "Name",
fr: "Nom",
es: "Nombre",
pt: "Nome"
},
rowType: {
de: "Nutzertyp",
en: "Account Type",
fr: "Type de compte",
es: "Tipo de cuenta",
pt: "Tipo de conta"
},
teacher: {
de: "Lehrkraft",
en: "Teacher",
fr: "Professeur·e",
es: "Docente",
pt: "Professor(a)"
},
pupil: {
de: "Schüler/in",
en_gb: "Pupil",
en: "Student",
fr: "Élève",
es: "Estudiante",
pt: "Aluno(a)"
},
admin: {
de: "Admin",
en: "Admin",
fr: "Admin",
es: "Admin",
pt: "Admin"
},
rowGroup: {
de: "Gruppe",
en: "Group",
fr: "Groupe",
es: "Grupo",
pt: "Grupo"
},
rowGroups: {
de: "Gruppen",
en: "Groups",
fr: "Groupes",
es: "Grupos",
pt: "Grupos"
}
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/button/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return page.onCustomFinish();
};
return Button(T("continueButton")).css({
minWidth: "6em",
margin: "0.7em 0.3em 0 "
}).tap(tap);
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/loadFunnelTitleSounds/load.ls
(function(){
return function(onDone){
var descriptions, total, loadSounds, onSoundLoaded;
descriptions = inc("../../_shared/title/descriptions/descriptions")();
total = 0;
loadSounds = function(){
var i$, ref$, d, fileId, fileFolder, results$ = [];
for (i$ in ref$ = descriptions) {
d = ref$[i$];
fileId = "sound/" + d.voiceLang + "/" + d.voice + "/" + d.sound;
fileFolder = "media/introPreparedMember/_sounds";
results$.push(inc("/lib/util/downloadContentFile/download")({
fileId: fileId,
fileFolder: fileFolder,
etag: "any",
returnFileContent: true,
onLoaded: onSoundLoaded,
onError: fn$
}));
}
return results$;
function fn$(){}
};
onSoundLoaded = function(){
total++;
if (total === _.keys(descriptions).length) {
return onDone();
}
};
return loadSounds();
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/pageTemplate.ls
(function(){
return function(page){
return {
statusBarColor: inc("../_shared/statusBarColor/status")(page),
top: function(){
return inc("../_shared/topbar/topbar")(page);
},
start: function(){
var loadSounds, create;
loadSounds = function(){
return inc("loadFunnelTitleSounds/load")(create);
};
create = function(){
return page.html(inc("../_shared/title/title")("welcome", page.soundEnabled), inc("values/values")(page), " ", inc("button/button")(page));
};
if (!page.soundEnabled) {
return create();
} else {
page.append(inc("/lib/gui/spinner/spinner")());
return loadSounds();
}
}
};
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/_row/row.ls
(function(){
return function(label, value){
var b;
return Div().css({
display: "flex",
padding: "0.7em",
borderTop: b = "1px solid " + Color.grey[300],
borderBottom: b,
marginBottom: "-1px",
textAlign: "left",
minWidth: "12em"
}).append(Div().css({
flex: "1 1 auto",
textAlign: "left",
paddingRight: "2em"
}).html(label), Div().css({
flex: "1 1 auto",
textAlign: "right"
}).secureHtml(value));
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/displayName/displayName.ls
(function(){
return function(page){
return inc("../_row/row")(T("rowDisplayName"), page.params.dirDisplayName || page.params.displayName);
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/groups/groups.ls
(function(){
return function(page){
var groupNames;
groupNames = page.params.groupNames;
if (groupNames.length === 1) {
return inc("../_row/row")(T("rowGroup"), groupNames[0]);
} else if (groupNames.length > 1) {
return inc("../_row/row")(T("rowGroups"), groupNames.join(", "));
}
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/school/school.ls
(function(){
return function(page){
var n;
n = page.params.schoolName;
if (!_.isString(n)) {
n = n[engine.guiLanguage] || _.values(n)[0];
}
return inc("../_row/row")(T("rowSchool"), n);
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/type/type.ls
(function(){
return function(page){
return inc("../_row/row")(T("rowType"), page.params.isAdmin
? T("admin")
: page.params.dirRole === "pupil"
? T("pupil")
: T("teacher"));
};
})();
pages/start/intro_sharedPageTemplates/welcomePreparedUser/values/values.ls
(function(){
return function(page){
return Div().css({
display: "inline-block",
maxWidth: "90%",
margin: "1em 0 2em"
}).append(inc("displayName/displayName")(page), inc("school/school")(page), inc("groups/groups")(page), inc("type/type")(page));
};
})();
pages/start/login/00_shared/finishLogin/finish.ls
(function(){
return function(o){
var storedLogIds;
storedLogIds = inc("/lib/util/storedUsers/logIds/logIds")();
return startPage({
path: path("/pages/start/startUser/page"),
history: o.history,
params: {
logId: o.logId,
authToken: o.authToken,
loginType: o.loginType,
displayName: o.displayName,
avatar: o.avatar,
rememberUser: _.includes(storedLogIds, o.logId) ? "no" : "ask"
}
});
};
})();
pages/start/login/00_shared/help/_t.ls
(function(){
return {
helpPage: {
de: " Hast du schon einmal auf einem anderen Gerät mit ANTON gelernt?\n \n Dann klicke dort auf „Einstellungen“, um deinen Anmelde-Code zu finden.\n
\n\n Hast du schon einmal mit ANTON in der Schule gelernt?\n \n Dann frage deinen Lehrer oder deine Lehrerin nach deinem Anmelde-Code.\n
\n\n Bist du neu bei ANTON?\n \n Dann gehe zurück und erstelle ein neues Nutzerkonto.\n
\n\n Hast du eine E-Mail oder Handynummer hinterlegt?\n \n Dann gehe zurück und trage diese in das Feld ein. Klicke dann auf „Weiter“ und gib dein Passwort ein.\n \n Wenn du dein Passwort vergessen oder noch keines vergeben hast, klicke auf „Passwort vergessen“ und folge den Anweisungen. \n
\n \n Wunderst du dich, dass du beim Login keine Großbuchstaben tippen kannst?\n \n Beim Login benötigst du nur Kleinbuchstaben. \n Wenn dein Lehrer oder deine Lehrerin dir ein Nutzerkonto vorbereitet hat, \n funktioniert die erste Anmeldung ausschließlich über den Anmelde-Code im Format xxxx-xxxx. \n Gib diesen in das erste Feld ein, ohne vorher einen Namen oder ähnliches einzutragen.\n
\n\n Hast du ein anderes Problem?\n \n Dann schaue bitte in die Häufigen Fragen. Diese findest du auf der ANTON-Startseite ganz unten \n oder im Browser unter https://anton.app/de/faq",
en_gb: " Have you already used ANTON on another device?\n \n Then go to “Settings” on that device to find your login code.\n
\n\n Have you already used ANTON at school?\n \n Then ask your teacher for your login code.\n
\n\n Is this your first time using ANTON?\n \n Then go back and create a new account.\n
\n \n Have you previously assigned an email or a phone number to your account?\n \n Then go back and enter it in the field. Then click on \"Next\" and type your password.\n \n If you forgot your password or haven't assigned one yet, click on \"Forgot Password\" and follow the instructions. \n
\n \n Are you wondering why you can't type capital letters when you log in?\n \n You only need lowercase letters when logging in. \n If your teacher has created an account for you, \n the first login will work only with the login code (in the format xxxx-xxxx). \n Enter it in the first field without entering a name or anything else beforehand.\n
\n Do you have a different problem?\n \n Then please take a look at the Frequently Asked Questions. You can find them at the bottom of the ANTON home page or in your browser at https://anton.app/de/faq",
en: " Have you already used ANTON on another device?\n \n Then go to “Settings” on that device to find your login code.\n
\n\n Have you already used ANTON at school?\n \n Then ask your teacher for your login code.\n
\n\n Is this your first time using ANTON?\n \n Then go back and create a new account.\n
\n \n Have you previously assigned an email or cell phone number to your account?\n \n Then go back and enter it in the field. Then click on \"Next\" and type your password.\n \n If you forgot your password or haven't assigned one yet, click on \"Forgot Password\" and follow the instructions. \n
\n \n Are you wondering why you can't type capital letters when you log in?\n \n You only need lowercase letters when logging in. \n If your teacher has created an account for you, \n the first login will work only with the login code (in the format xxxx-xxxx). \n Enter it in the first field without entering a name or anything else beforehand.\n
\n Do you have a different problem?\n \n Then please take a look at the Frequently Asked Questions. You can find them at the bottom of the ANTON home page or in your browser at https://anton.app/de/faq",
fr: " Tu as déjà utilisé ANTON sur un autre appareil ?\n \n Tu peux donc retrouver ton code de connexion en appuyant sur “Paramètres”.\n
\n\n Tu as déjà utilisé ANTON à l'école ?\n \n Dans ce cas, tu peux demander ton code de connexion à ton·ta professeur·e.\n
\n\n C'est la première fois que tu utilises ANTON ?\n \n Alors recommence depuis le début pour créer un nouveau compte.\n
\n\n Tu as une adresse e-mail ou un numéro de téléphone portable ?\n \n Dans ce cas, reviens en arrière et complète le champ correspondant. Appuie ensuite sur “Continuer” et entre ton mot de passe.\n \n Si tu as oublié ton mot de passe ou que tu n'en as pas encore établi un, appuie sur “Mot de passe oublié” et suis les indications données. \n
\n\n Tu te demandes pourquoi tu ne peux pas utiliser de lettres majuscules ?\n \n Tu as uniquement besoin de lettres minuscules pour te connecter. \n Si c'est ton·ta professeur·e qui a préparé un compte pour toi, lors de ta toute première connexion, tu dois utiliser le code de connexion dont le format est xxxx-xxxx. \n Entre ce code dans le premier champ que tu vois, sans aucune autre information supplémentaire.\n
\n\n Tu as un autre problème ?\n \n Nous te conseillons de consulter notre rubrique aide/FAQ. Tu la trouveras au bas de la page d'accueil ANTON ou à https://anton.app/fr/faq dans ton navigateur.",
es: " ¿Ya has utilizado ANTON en otro dispositivo?\n \n Entonces ve a los “ajustes” en ese dispositivo y busca ahí tu clave de acceso.\n
\n\n ¿Has utilizado ANTON en la escuela?\n \n Entonces pregúntale a tu docente si tiene tu clave de acceso.\n
\n\n ¿Es la primera vez que utilizas ANTON?\n \n Entonces vuelve al inicio y crea una cuenta nueva.\n
\n\n ¿Ya registraste tu correo electrónico o número de teléfono?\n \n Entonces, ingrésalo aquí. Luego presiona „Continuar“ e ingresa tu contraseña.\n \n Si olvidaste tu contraseña o aún no la has registrado, presiona „¿Olvidaste tu contraseña?“ Luego sigue las instrucciones. \n
\n\n ¿Te parece extraño que no puedas escribir con mayúsculas al iniciar sesión?\n \n El teclado en la página de inicio no diferencía entre mayúsculas y minúsculas porque para iniciar sesión sólo necesitas minúsculas. \n En caso de que tu docente haya preparado una cuenta para ti, sólo te puedes registrar con clave de acceso. Presiona \"iniciar sesión con clave\", luego \n ingrésa únicamente la clave que te proporcinó tu docente con el formato xxxx-xxxx, sin ingresar ninguna otra información en el mismo campo. \n
\n\n ¿Tienes algún otro problema?\n \n Por favor, revisa nuestra sección de preguntas frecuentes. Las preguntas frecuentes las encuentras en la página de inicio, recorriendo la pantalla hasta abajo. \n También puedes consultarlas en tu navegador entrando a https://anton.app/de/faq\n \n Si no encuentras la respuesta que buscas ahí, mándanos un correo a support@anton.app",
pt: " Você já utilizou ANTON em outro dispositivo?\n \n Então clique em “configurações” nesse dispositivo para encontrar o seu código de acesso.\n
\n \n Você já utilizou ANTON na escola?\n \n Então pergunte para seu/sua professor(a) se ele(a) tem seu código de acesso.\n
\n \n É a primeira vez que está usando ANTON?\n \n Então volte à página inicial e crie uma conta nova.\n
\n \n Você já registrou seu endereço de e-mail e seu número de telefone?\n \n Então registre-os aqui. Depois clique em “Continuar” e registre sua senha.\n \n Se você esqueceu sua senha ou ainda não está registrado, clique em “Esqueci minha senha” e siga as instruções.\n
\n \n Você está se perguntando por que que não consegue digitar letras maiúsculas ao efeturar login?\n \n Você só precisa de letras minúsculas para efetuar seu login.\n Se seu/sua professor(a) preparou uma conta de usuário para você, o primeiro registro funciona exclusivamente com o \n código de acesso no formato xxxx-xxxx que ele(a) irá te entregar. Insira esse código no primeiro campo sem \n acrescentar nenhuma outra informação.\n
\n\n Você tem algum outro problema?\n \n Por favor, revise nossa sessão de perguntas frequentes. Você irá encontrá-las na parte inferior da \n tela inicial. Se preferir, também pode consultar as perguntas frequentes em seu navegador em https://anton.app/de/faq\n \n Se ainda não encontrar resposta para sua dúvida, escreva um e-mail para support@anton.app"
}
};
})();
pages/start/login/00_shared/help/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
return page.append(Div({
padding: "1em",
lineHeight: "1.5em",
width: "35em",
maxWidth: "95%",
margin: "1em auto",
textAlign: "justify",
hyphens: "auto"
}).html(T("helpPage")));
}
};
};
})();
pages/start/login/01_step1/_t.ls
(function(){
return {
needHelp: {
de: "Brauchst du Hilfe?",
en: "Do you need help?",
fr: "Besoin d'aide ?",
es: "¿Necesitas ayuda?",
pt: "Precisa de ajuda?"
},
scanQr: {
de: "QR-Code scannen",
en: "Scan QR code",
fr: "Scanner un code QR",
es: "Escanear código QR",
pt: "Escanear código QR"
},
emptyField: {
de: "Bitte trage etwas ein.",
en: "Please enter something.",
fr: "Merci d'entrer quelque chose.",
es: "Por favor, escribe algo.",
pt: "Por favor, digite algo."
},
isPreparedMember: {
de: "Bitte melde dich zuerst mit einem bestehenden Konto an und gehe dann auf Gruppe beitreten mit Code, um der Gruppe $1 als Lehrkraft beizutreten.",
en: "Please log in first with an existing account, then go on Join group with code to enter the group $1 as a teacher.",
fr: "Merci de te connecter d'abord avec un compte existant. Tu peux ensuite appuyer sur Rejoindre un groupe pour rejoindre le groupe $1 en tant que professeur·e.",
es: "Por favor, inicia sesión con una cuenta existente. Posteriormente, presiona Unirse a un grupo para unirte como docente al grupo $1.",
pt: "Por favor, primeiro faça seu login com uma conta já existente. Depois clique em Entrar no grupo com código para entrar no grupo $1 como professor(a)."
},
enterCode: {
de: "Bitte Anmelde-Code, E-Mail, Handynummer oder Nutzername eintragen:",
en_gb: "Please enter your login code, e-mail, mobile phone number or username.",
en: "Please enter your login code, e-mail, cell phone number or username.",
fr: "Merci d'entrer ton code de connexion, ton e-mail, ton numéro de téléphone ou ton identifiant.",
es: "Ingresa tu clave de acceso, tu correo electrónico, tu número de teléfono o tu nombre de usuario/a.",
pt: "Digite seu código de acesso, endereço de e-mail, número de celular ou seu nome de usuário(a)."
},
qrCodeInvalid: {
de: "Dieser QR-Code ist ungültig.",
en: "This QR code is invalid.",
fr: "Ce code QR n'est pas valide.",
es: "Este código QR no es válido.",
pt: "Este código QR não é válido."
}
};
})();
pages/start/login/01_step1/form/form.ls
(function(){
return function(page){
return page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("enterCode"),
submitLabel: T("continueButton"),
submit: page.submit,
isPassword: true,
showPassword: true,
cancel: false,
screenKeyboardLayout: twitch({
de: "login",
en: "loginEN",
fr: "loginFR",
es: "loginES",
pt: "loginPT"
})
}).css({
display: "inline-block",
width: "100%",
maxWidth: "18em"
});
};
})();
pages/start/login/01_step1/linkHelp/link.ls
(function(){
return function(page){
var tap;
tap = function(){
deviceLog.log({
event: "deviceDebugLoginHelpClicked",
value: {
input: page.form.input.getValue()
}
});
return startPage({
path: path("../../00_shared/help/page")
});
};
return Div({
paddingTop: page.form.isDesktop() ? "1em" : void 8
}).append(inc("/lib/gui/link/link")(T("needHelp")).css({
marginLeft: "0.5em"
}).tap(tap));
};
})();
pages/start/login/01_step1/linkQrcode/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/qrcode.svg"),
size: "1.5em",
color: Color.black
}).css({
marginRight: "0.2em"
});
};
})();
pages/start/login/01_step1/linkQrcode/link.ls
(function(){
return function(page){
var tap;
if (typeof QRScanner == 'undefined' || QRScanner === null) {
return;
}
tap = function(){
return startPage({
path: path("/pages/misc/qrcode/page"),
animation: "slideUp"
});
};
return Div({
margin: "0.5em 0 0.7em"
}).html(inc("/lib/gui/link/link")({
label: Div({
display: "flex"
}).html(inc("icon/icon")(), T("scanQr"))
}).tap(tap));
};
})();
pages/start/login/01_step1/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
page.submit = function(){
return inc("submit/submit")(page);
};
page.submitQRCode = function(){
return inc("submitQRCode/submit")(page);
};
page.html(inc("form/form")(page), inc("linkQrcode/link")(page), inc("linkHelp/link")(page));
if (page.params.qrCodeScanData) {
return page.submitQRCode();
} else {
return page.form.input.start();
}
}
};
};
})();
pages/start/login/01_step1/submit/debugLoginOfflineProblems/debug.ls
(function(){
return function(loginStartedAt){
var onOfflineDuration, results, ping, pingAntonApp, onDone;
onOfflineDuration = new Date() - loginStartedAt;
debug("Login failed with offline message even though you're online, please tell the devs");
results = {};
ping = function(url, key, pingDone){
var startedAt;
startedAt = new Date();
return helpers.httpRequest.get(url, null, function(error, data){
results[key] = {
error: error,
data: data,
duration: new Date() - startedAt
};
return pingDone();
});
};
pingAntonApp = function(){
return ping("https://anton.app/ping", "pingAntonApp", onDone);
};
onDone = function(){
return helpers.postEvent(Store('deviceLogId'), {
event: 'deviceDebugLoginOfflineProblem',
pingResults: results,
onOfflineDuration: onOfflineDuration
});
};
return pingAntonApp();
};
})();
pages/start/login/01_step1/submit/onCompleted/onCompleted.ls
(function(){
return function(form){
return function(result){
var errorMessage;
if (result.status !== "ok") {
form.hideSpinner();
errorMessage = result.status === "error_blocked"
? T("errorBlocked")
: result.status === "error_captcha_failed"
? T("errorCaptchaFailed")
: result.status === "error_not_valid"
? T("unknownUser")
: T("unknownError");
return form.error.html(errorMessage);
} else if (result.isPreparedMember) {
if (result.role === "teacher") {
return inc("/lib/gui/errorPopup/popup")({
label: T("isPreparedMember", result.groupName),
onClose: function(){
form.input.start();
return form.hideSpinner();
}
});
} else {
return startPage({
path: path("/pages/start/introPreparedMember/01_welcome/page"),
animation: "slideLeft",
params: result
});
}
} else if (result.isPreparedUser) {
return inc("/pages/start/introPreparedUser/start")(result);
} else if (result.logId) {
return inc("../../../00_shared/finishLogin/finish")({
logId: result.logId,
authToken: result.authToken,
loginType: "loginCode",
displayName: result.displayName,
avatar: result.avatar
});
} else {
return startPage({
path: path("../../../02_step2/page"),
animation: "slideLeft",
params: {
uniqName: result.uniqName,
email: result.email,
phone: result.phone,
loginCode: result.loginCode,
recoveryOptions: result.recoveryOptions
}
});
}
};
};
})();
pages/start/login/01_step1/submit/submit.ls
(function(){
return function(page){
var form, value, startedAt;
form = page.form;
value = form.input.getValue();
if (value.length === 0) {
form.input.start();
form.hideSpinner();
form.error.html(T("emptyField"));
return;
}
form.showSpinner();
startedAt = new Date();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/step1/step1"),
params: {
value: value,
checkCaptcha: true
},
requiredVisibleDiv: form.input,
onError: function(error){
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
if (inc("/lib/util/isOnline/isOnline")()) {
inc("debugLoginOfflineProblems/debug")(startedAt);
}
form.input.start();
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: inc("onCompleted/onCompleted")(form)
});
};
})();
pages/start/login/01_step1/submitQRCode/submit.ls
(function(){
return function(page){
var loginCode, ref$, ref1$;
loginCode = page.params.qrCodeScanData.replace("anton://login/", "");
if (!loginCode.match(/^[0-9a-z]{4}-?[0-9a-z]{4}$/i)) {
page.form.error.html(T("qrCodeInvalid"));
delete page.params.qrCodeScanData;
return;
}
page.css({
opacity: 0
});
page.form.input.setValue(loginCode);
page.submit();
setTimeout(function(){
return page.css({
opacity: 1
});
}, 1000);
return ref1$ = (ref$ = page.params).qrCodeScanData, delete ref$.qrCodeScanData, ref1$;
};
})();
pages/start/login/02_step2/_t.ls
(function(){
return {
forgotPassword: {
de: "Passwort vergessen?",
en: "Forgot your password?",
fr: "Mot de passe oublié ?",
es: "¿Olvidaste tu contraseña?",
pt: "Esqueceu sua senha?"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein.",
en: "The password cannot be left blank.",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
invalidPasswordLong: {
de: "Das Passwort ist nicht gültig, bitte versuche es noch einmal.
Hast du einen 8-stelligen Anmelde-Code im Format xxxx-xxxx? Dann tippe auf den Zurück-Pfeil und trage den Code in das Feld auf der vorigen Seite ein.",
en: "This password is not valid, please try again.
Do you have an 8-digit login code with the format xxxx-xxxx? If so, return to the previous page using the back arrow and enter your code in the login field.",
fr: "Le mot de passe n'est pas valide, tu peux réessayer.
As-tu un code de connexion à 8 chiffres sous ce format xxxx-xxxx ? Si c'est le cas, appuie sur la flèche retour et entre ton code dans le champ prévu.",
es: "La contraseña no es válida. Inténtalo de nuevo.
¿Te proporcionaron una clave de 8 caracteres con el formato: xxxx-xxxx? De ser así, presiona la flecha para regresar a la página anterior e ingresa la clave en el campo correspondiente.",
pt: "A senha não é válida. Por favor, tente novamente.
Você já tem um código de acesso de 8 dígitos neste formato xxxx-xxxx? Então, volte para a página anterior selecionando a seta para voltar e insira seu código com o formato indicado no campo de login."
},
enterPassword: {
de: "Bitte trage dein Passwort ein:",
en: "Please enter your password:",
fr: "Entre ton mot de passe :",
es: "Ingresa tu contraseña:",
pt: "Por favor, digite sua senha:"
}
};
})();
pages/start/login/02_step2/forgot/forgot.ls
(function(){
return function(page){
var click;
click = function(){
var params;
params = app.currentPage.params;
return startPage({
path: path("/pages/misc/password/reset/01_forgot/page"),
animation: "slideUp",
params: {
context: "login",
uniqName: params.uniqName,
email: params.email,
phone: params.phone,
loginCode: params.loginCode,
recoveryOptions: params.recoveryOptions
}
});
};
return Div({
paddingTop: page.form.isDesktop() ? "3em" : "0.5em"
}).html(Button(T("forgotPassword")).css({
backgroundColor: "white",
textDecoration: "underline"
}).tap(click));
};
})();
pages/start/login/02_step2/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var submit;
submit = function(){
return inc("submit/submit")(page.form);
};
page.html(page.form = inc("/lib/gui/inputForm/inputForm")({
label: T("enterPassword"),
submitLabel: T("continueButton"),
submit: submit,
isPassword: true
}), inc("forgot/forgot")(page));
return page.form.input.start();
}
};
};
})();
pages/start/login/02_step2/submit/submit.ls
(function(){
return function(form){
var params, password;
params = app.currentPage.params;
password = form.input.getValue();
if (password === "") {
form.error.html(T("emptyPassword"));
form.input.start();
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/step2/step2"),
params: {
password: password,
uniqName: params.uniqName,
email: params.email,
phone: params.phone,
loginCode: params.loginCode,
checkCaptcha: true
},
requiredVisibleDiv: form.input,
onError: function(error){
form.hideSpinner();
inc("/lib/gui/errorPopup/popup")();
return debug(error);
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: function(result){
var errorMessage, loginType;
if (result.status !== "ok") {
errorMessage = result.status === "error_blocked"
? T("errorBlocked")
: result.status === "error_captcha_failed"
? T("errorCaptchaFailed")
: params.loginCode != null
? T("invalidPassword")
: T("invalidPasswordLong");
form.hideSpinner();
form.error.html(errorMessage);
} else {
loginType = params.uniqName != null
? "uniqName"
: params.email != null
? "email"
: params.phone != null
? "phone"
: params.loginCode != null ? "loginCodeWithPassword" : void 8;
return inc("../../00_shared/finishLogin/finish")({
logId: result.logId,
authToken: result.authToken,
loginType: loginType,
displayName: result.displayName,
avatar: result.avatar
});
}
}
});
};
})();
pages/start/login/_t.ls
(function(){
return {
unknownUser: {
de: "Dieses Nutzerkonto ist unbekannt.",
en: "This user account is unknown.",
fr: "Compte inconnu.",
es: "Esta cuenta no existe.",
pt: "Esta conta não existe."
},
unknownError: {
de: "Es ist ein Fehler aufgetreten. Bitte versuche es später nochmal.",
en: "An error has occurred. Please try again later.",
fr: "Une erreur s'est produite. Merci de réessayer plus tard.",
es: "Ocurrió un error. Inéntalo de nuevo un poco más tarde.",
pt: "Ocorreu um erro. Por favor, tente novamente mais tarde."
},
invalidPassword: {
de: "Das Passwort ist nicht gültig.",
en: "The password is not valid.",
fr: "Le mot de passe n'est pas valide.",
es: "La contraseña no es válida.",
pt: "A senha não é válida."
}
};
})();
pages/start/login/deeplinkLogin/_t.ls
(function(){
return {
login: "Login"
};
})();
pages/start/login/deeplinkLogin/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "login/",
title: T("login"),
metaDescription: ""
};
};
})();
pages/start/login/deeplinkLogin/calcData/calc.ls
(function(){
return function(){
var code;
code = inc("/lib/util/browser/getPageUrlParam/get")("code");
if (code) {
code = decodeURIComponent(code);
}
inc("/lib/util/browser/removePageUrlParams/remove")();
return {
loginCode: code
};
};
})();
pages/start/login/deeplinkLogin/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/pages/static/_shared/topbarDeeplink/topbar")(page, T("login")).hide();
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var abort, data;
abort = function(){
inc("/lib/util/browser/removePageUrlParams/remove")();
return startPage({
history: -1,
path: path("/pages/start/welcome/page")
});
};
data = inc("calcData/calc")();
if (!data.loginCode) {
abort();
return;
}
return startPage({
history: -(app.pageHistory.length - 1),
path: path("../01_step1/page"),
animation: "fadeIn",
params: {
qrCodeScanData: data.loginCode
}
});
}
};
};
})();
pages/start/login/openId/_t.ls
(function(){
return {
openIdLogin: "openId-Login",
errorTryAgain: "Fehlerhafte Anfrage, bitte versuche es erneut.",
errorNoUnlockedSchool: "Deine Schule wurde noch nicht für die Landeslizenz und den Single-Sign-On über das Schulportal freigeschaltet. Bitte wende dich an den Support des Berliner Schulportals.",
errorCreatingPreparedUser: "Das ANTON-Nutzerkonto konnte nicht erfolgreich vorbereitet werden. Bitte versuche es erneut."
};
})();
pages/start/login/openId/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: "openId/login/",
title: T("openIdLogin"),
metaDescription: "",
noIndex: true
};
};
})();
pages/start/login/openId/createPreparedUser/create.ls
(function(){
return function(page, params){
return startPage({
path: path("page/page"),
animation: "fadeIn",
history: 0,
params: {
loginCode: params.loginCode
}
});
};
})();
pages/start/login/openId/createPreparedUser/page/_t.ls
(function(){
return {
text: "Hast du bereits ein ANTON-Nutzerkonto? Dann log dich damit ein, um es automatisch mit deinem Berliner-Schulportal-Konto zu verknüpfen.
Falls du noch kein ANTON-Nutzerkonto hast, kannst du dies hier anlegen. Es ist dann automatisch verknüpft mit deinem Berliner-Schulportal-Konto.",
buttonExistingUser: "Bestehendes Nutzerkonto verknüpfen",
buttonNewUser: {
de: "Neues Nutzerkonto anlegen",
en: "Create new account",
fr: "Créer un nouveau compte",
es: "Crear una cuenta nueva",
pt: "Criar uma nova conta"
}
};
})();
pages/start/login/openId/createPreparedUser/page/buttonExistingUser/button.ls
(function(){
return function(page){
var tap;
tap = function(){
app.openIdData = {
loginCode: page.params.loginCode
};
return startPage({
path: path("/pages/start/login/01_step1/page"),
animation: "slideLeft"
});
};
return Button(T("buttonExistingUser")).css({
display: "block",
padding: "0.7em",
marginBottom: "1em"
}).tap(tap);
};
})();
pages/start/login/openId/createPreparedUser/page/buttonNewUser/button.ls
(function(){
return function(page){
var tap;
tap = function(){
app.openIdData = {
newUser: true
};
return startPage({
path: path("/pages/start/login/01_step1/page"),
animation: "slideLeft",
params: {
qrCodeScanData: page.params.loginCode
}
});
};
return Button(T("buttonNewUser")).css({
display: "block",
padding: "0.7em"
}).tap(tap);
};
})();
pages/start/login/openId/createPreparedUser/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("topbar/topbar")(page);
},
start: function(){
return page.css({
width: "25em",
maxWidth: "90%",
margin: "0 auto"
}).html(inc("text/text")(page), Div({
display: "inline-block"
}).html(inc("buttonExistingUser/button")(page), inc("buttonNewUser/button")(page)));
}
};
};
})();
pages/start/login/openId/createPreparedUser/page/text/text.ls
(function(){
return function(page){
return Div({
lineHeight: "1.5em",
paddingBottom: "2em"
}).html(T("text"));
};
})();
pages/start/login/openId/createPreparedUser/page/topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbarWhiteBack/topbar")({
back: function(){
return startPage({
history: -1,
animation: "slideRight"
});
}
});
};
})();
pages/start/login/openId/login/calcUrlParams/calc.ls
(function(){
return function(){
var params, that;
params = inc("/lib/util/browser/getPageUrlParams/get")() || {};
if (that = params.code) {
params.code = decodeURIComponent(that);
}
if (that = params.state) {
try {
params.state = JSON.parse(atob(decodeURIComponent(that)));
} catch (e$) {}
}
return params;
};
})();
pages/start/login/openId/login/login.ls
(function(){
return function(page){
var code, state, environment, ref$, pllsPath;
page.urlParams = inc("calcUrlParams/calc")();
inc("/lib/util/browser/removePageUrlParams/remove")();
inc("/lib/util/browser/setPageUrl/set")("");
code = page.urlParams.code;
state = page.urlParams.state;
if (_.isString(state)) {
return page.onError("invalid_state");
}
if (!code) {
return page.onError("missing auth-code");
}
environment = (ref$ = state.environment) === "test" || ref$ === "live" ? state.environment : "live";
pllsPath = path("/../server-apis-db2/apis/sso/openId/berlin/login/query");
return inc("/lib/util/pllsCall/call")({
path: pllsPath,
params: {
environment: environment,
authorizationCode: code
},
onCompleted: function(result){
if (result.status !== "ok") {
debug(result);
return page.onError("non-ok received");
} else if (result.isPreparedUser) {
return inc("../createPreparedUser/create")(page, result);
} else {
return inc("/pages/start/login/00_shared/finishLogin/finish")({
logId: result.logId,
authToken: result.authToken,
loginType: "SSO",
displayName: result.displayName,
avatar: result.avatar,
history: 0
});
}
},
onError: function(error){
debug(error);
return page.onError("error");
},
onOffline: function(){
return page.onError("offline");
}
});
};
})();
pages/start/login/openId/onError/logError/log.ls
(function(){
return function(page, error){
return deviceLog.log({
event: "deviceDebugOpenIdLoginError",
error: error,
url: location.href,
urlParams: page.urlParams
});
};
})();
pages/start/login/openId/onError/on.ls
(function(){
return function(page){
return function(error){
var message;
message = (function(){
switch (error) {
case "missing auth-code":
case "invalid_state":
case "non-ok received":
case "error_expired_token":
case "error_getting_token":
case "error":
return T("errorTryAgain");
case "error_no_unlocked_school":
return T("errorNoUnlockedSchool");
case "error_creating_prepared_user":
return T("errorCreatingPreparedUser");
case "offline":
return T("offlineError");
default:
return T("errorMessage");
}
}());
if (error !== "offline") {
inc("logError/log")(page, error);
}
inc("/lib/util/browser/removePageUrlParams/remove")();
page.html(Div().html(message), Button(T("tryAgain")).css({
marginTop: "1.5em"
}).tap(function(){
return location.href = "https://anton.app/de/start/berlin";
}));
return page.topbar.show();
};
};
})();
pages/start/login/openId/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/pages/static/_shared/topbarDeeplink/topbar")(page, T("openIdLogin")).hide();
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
page.onError = inc("onError/on")(page);
return inc("login/login")(page);
}
};
};
})();
pages/start/login/relogin/01_choose/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbarWhiteBack/topbar")({
back: true
});
};
})();
pages/start/login/relogin/01_choose/buttons/button/button.ls
(function(){
return function(){
return Div({
display: "block",
margin: "0.5em",
padding: "0.7em 1em",
background: Color.grey[300]
});
};
})();
pages/start/login/relogin/01_choose/buttons/buttons.ls
(function(){
return function(page){
var b, tap;
b = inc("button/button");
tap = function(type){
return startPage({
path: path("../../02_form/page"),
animation: "slideLeft",
params: {
logId: page.logId,
type: type
}
});
};
return Div({
display: "inline-block",
margin: "2em auto"
}).html(b().html(T("enterLoginCode")).tap(function(){
return tap("loginCode");
}), b().html(T("enterPw")).tap(function(){
return tap("password");
}));
};
})();
pages/start/login/relogin/01_choose/linkRemove/link.ls
(function(){
return function(page){
var tap;
tap = function(){
return inc("popup/popup")(page);
};
return Div().html(inc("/lib/gui/link/link")({
label: T("dontShowUser")
}).css({
fontSize: "0.9em",
color: Color.grey[600]
}).tap(tap));
};
})();
pages/start/login/relogin/01_choose/linkRemove/popup/popup.ls
(function(){
return function(page){
return inc("/lib/gui/confirmPopup/popup")({
label: T("removeQuestion"),
noLabel: T("cancelButton"),
yesLabel: T("yes"),
onConfirm: function(){
inc("/lib/util/storedUsers/removeUser/remove")(page.logId);
delete window.userLogs[page.logId];
return startPage({
history: -1,
animation: "slideRight"
});
}
});
};
})();
pages/start/login/relogin/01_choose/page.ls
(function(){
return function(page){
page.logId = page.params.logId;
return {
statusBarColor: Color.white,
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
return page.css({
maxWidth: "90%",
width: "35em",
margin: "0 auto"
}).html(inc("title/title")(), inc("buttons/buttons")(page), inc("linkRemove/link")(page));
}
};
};
})();
pages/start/login/relogin/01_choose/title/title.ls
(function(){
return function(){
return Div().html(T("pleaseRelogin"));
};
})();
pages/start/login/relogin/02_form/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbarWhiteBack/topbar")({
back: true
});
};
})();
pages/start/login/relogin/02_form/form/form.ls
(function(){
return function(page){
return Div({
width: "17em",
maxWidth: "95%",
margin: "0 auto"
}).append(page.form = inc("/lib/gui/multiform/multiform")({
onSubmit: function(){
return inc("../submit/submit")(page);
},
fields: [
{
id: "value",
type: "input",
isPassword: page.type === "password",
onChange: function(){
return page.form.setValues({
error: ""
});
}
}, {
id: "error",
type: "error",
css: {
minHeight: "1.8em"
}
}, {
id: "button",
label: T("login"),
type: "button"
}
]
}));
};
})();
pages/start/login/relogin/02_form/page.ls
(function(){
return function(page){
var p;
p = page.params;
page.logId = p.logId;
page.type = p.type;
return {
statusBarColor: Color.white,
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
return page.html(inc("title/title")(page), inc("form/form")(page));
}
};
};
})();
pages/start/login/relogin/02_form/submit/onCompleted/onCompleted.ls
(function(){
return function(form){
return function(r){
var errorMessage;
if (r.status !== "ok") {
form.hideSpinner();
errorMessage = r.status === "error_blocked"
? T("errorBlocked")
: r.status === "error_password_wrong"
? T("invalidPassword")
: r.status === "error_login_code"
? T("invalidLoginCode")
: T("unknownError");
return form.setValues({
error: errorMessage
});
} else if (r.logId) {
return inc("../../../../00_shared/finishLogin/finish")({
logId: r.logId,
authToken: r.authToken,
loginType: "relogin",
displayName: r.displayName,
avatar: r.avatar
});
} else {
return startPage({
path: path("../../../../02_step2/page"),
animation: "slideLeft",
params: {
uniqName: r.uniqName,
email: r.email,
phone: r.phone,
loginCode: r.loginCode,
recoveryOptions: r.recoveryOptions
}
});
}
};
};
})();
pages/start/login/relogin/02_form/submit/submit.ls
(function(){
return function(page){
var form, v;
form = page.form;
v = form.getValues().value;
if (v.length === 0) {
form.setValues({
error: T("emptyFieldError")
});
return;
}
form.showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/login/relogin/relogin"),
params: {
logId: page.logId,
type: page.type,
value: v
},
requiredVisibleDiv: form,
onError: function(error){
form.hideSpinner();
return inc("/lib/gui/errorPopup/popup")();
},
onOffline: function(){
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
},
onCompleted: inc("onCompleted/onCompleted")(form)
});
};
})();
pages/start/login/relogin/02_form/title/title.ls
(function(){
return function(page){
return Div().html(page.type === "loginCode"
? T("pleaseEnterLoginCode")
: T("pleaseEnterPw"));
};
})();
pages/start/login/relogin/_t.ls
(function(){
return {
removeQuestion: {
de: "Soll dieses Nutzerkonto jetzt von der Startseite auf diesem Gerät entfernt werden?",
en: "Should this user now be removed from the homepage of this device?",
fr: "Veux-tu retirer dès maintenant ce compte de la page d'accueil de cet appareil ?",
es: "¿Quieres que esta cuenta desaparezca de la página de inicio en este dispositivo?",
pt: "Você gostaria de remover esta conta da página inicial neste dispositivo?"
},
dontShowUser: {
de: "Dieses Nutzerkonto nicht mehr anzeigen",
en_gb: "No longer display user",
en: "Don't display this user anymore.",
fr: "Ne plus afficher ce compte.",
es: "Ya no mostrar esta cuenta.",
pt: "Não mostrar mais esta conta."
},
pleaseRelogin: {
de: "Bitte melde dich aus Sicherheitsgründen erneut an.",
en: "For security reasons, please log in again.",
fr: "Pour des questions de sécurité, tu dois te reconnecter.",
es: "Por medidas de seguridad, es necesario que vuelvas a iniciar sesión.",
pt: "Por favor, faça seu login novamente por medidas de segurança."
},
login: {
de: "Anmelden",
en: "Log in",
fr: "Connexion",
es: "Iniciar sesión",
pt: "Fazer login"
},
enterLoginCode: {
de: "Anmelde-Code eingeben",
en: "Enter login code",
fr: "Entrer le code de connexion",
es: "Ingresa tu clave de acceso",
pt: "Digite seu código de acesso"
},
enterPw: {
de: "Passwort eingeben",
en: "Enter password",
fr: "Entrer le mot de passe",
es: "Ingresa tu contraseña",
pt: "Digitar senha"
},
pleaseEnterLoginCode: {
de: "Bitte trage deinen Anmelde-Code ein.",
en: "Please enter your login code.",
fr: "Tu dois entrer ton code de connexion.",
es: "Por favor, ingresa to clave de acceso.",
pt: "Por favor, digite seu código de acesso."
},
pleaseEnterPw: {
de: "Bitte trage dein Passwort ein.",
en: "Please enter your login code.",
fr: "Tu dois entrer ton mot de passe.",
es: "Por favor, ingresa tu contraseña.",
pt: "Por favor, digite sua senha."
},
invalidLoginCode: {
de: "Der Anmelde-Code ist nicht gültig.",
en: "The login code is not valid.",
fr: "Le code de connexion n'est pas valide.",
es: "La clave de acceso no es válida.",
pt: "Este código de acesso não é válido."
}
};
})();
pages/start/login/sesamLogin/_t.ls
(function(){
return {
sesamLogin: "SESAM-Login",
errorInvalidToken: "Fehler, der SESAM-Token konnte nicht verifiziert werden.",
infoRedirectToLogin: "Um dein ANTON-Nutzerkonto mit SESAM nutzen zu können, logge dich bitte zunächst ein. Anschließend siehst du eine Seite, auf der du dein ANTON-Nutzerkonto mit SESAM verknüpfen kannst."
};
})();
pages/start/login/sesamLogin/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "sesam/login/",
title: T("sesamLogin"),
metaDescription: "",
noIndex: true
};
};
})();
pages/start/login/sesamLogin/calcData/calc.ls
(function(){
return function(){
var data;
data = inc("/lib/util/browser/getPageUrlParam/get")("data");
if (data) {
data = decodeURIComponent(data);
}
inc("/lib/util/browser/removePageUrlParams/remove")();
return data;
};
})();
pages/start/login/sesamLogin/login/login.ls
(function(){
return function(page, data){
var onCompleted, onError;
onCompleted = function(result){
if (result.status !== "ok") {
onError(result.status);
return;
}
if (!result.logId) {
app.sesamData = data;
inc("/lib/gui/infoPopup/popup")({
label: T("infoRedirectToLogin"),
onClose: function(){
return startPage({
path: path("/pages/start/login/01_step1/page"),
animation: "fadeIn"
});
}
});
return;
}
return inc("/pages/start/login/00_shared/finishLogin/finish")({
logId: result.logId,
authToken: result.authToken,
loginType: "SSO",
displayName: result.displayName,
avatar: result.avatar,
history: 0
});
};
onError = function(error){
var errorMessage;
debug(error);
page.topbar.show();
errorMessage = error === "error_blocked"
? T("errorBlocked")
: error === "error_captcha_failed"
? T("errorCaptchaFailed")
: error === "error_invalid_token"
? T("errorInvalidToken")
: error === "error_offline"
? T("offlineError")
: T("errorMessage");
return page.html(errorMessage);
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/sso/sesam/login/query"),
params: {
data: data
},
onCompleted: onCompleted,
onError: onError,
onOffline: function(){
return onError("error_offline");
}
});
};
})();
pages/start/login/sesamLogin/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/pages/static/_shared/topbarDeeplink/topbar")(page, T("sesamLogin")).hide();
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var abort, data;
abort = function(){
inc("/lib/util/browser/removePageUrlParams/remove")();
return startPage({
history: -1,
path: path("/pages/start/welcome/page")
});
};
data = inc("calcData/calc")();
if (!data) {
abort();
return;
}
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("/lib/gui/spinner/spinner")());
return inc("login/login")(page, data);
}
};
};
})();
pages/start/startUser/00_shared/errorPage/errorId/id.ls
(function(){
return function(){
return Div({
marginTop: "2em",
fontSize: "0.8em",
color: Color.grey[500],
userSelect: "text"
}).html("Error " + inc("/lib/util/calcErrorSrc/calc")());
};
})();
pages/start/startUser/00_shared/errorPage/errorInfo/info.ls
(function(){
return function(p){
return Div({
marginTop: "2em",
fontSize: "0.8em",
color: Color.grey[500],
userSelect: "text"
}).secureHtml(SvgIcon(path("/lib/svg/shape/debug.svg")).css({
verticalAlign: "-0.1em",
marginRight: "0.2em"
}), "Error: " + JSON.stringify(p.error));
};
})();
pages/start/startUser/00_shared/errorPage/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("/addons/topbar2/topbar")({
closeLabel: T("closeButton"),
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "/startUser");
}
});
}
});
},
start: function(){
var p, clickRetry;
p = page.params;
clickRetry = function(){
return startPage({
path: path("/pages/start/startUser/page"),
params: {
logId: p.logId,
authToken: p.authToken,
rememberUser: p.rememberUser,
loginType: p.loginType,
startNavCategory: p.startNavCategory
}
});
};
return page.html(Div().html(Div({
paddingBottom: "1.5em",
lineHeight: "1.5em",
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).html(T("subscribeError")), Button(T("tryAgain")).tap(clickRetry), engine.isDebug ? inc("errorInfo/info")(p) : void 8, inc("errorId/id")()));
}
};
};
})();
pages/start/startUser/00_shared/logSubscribeError/log.ls
(function(){
return function(o){
var ref$;
return (ref$ = o.log) != null ? typeof ref$.getDetails == 'function' ? ref$.getDetails(function(d){
return typeof log != 'undefined' && log !== null ? log.log({
event: "debugSubscribeError",
logType: o.error,
details: _.omit(d, "logInfo")
}) : void 8;
}) : void 8 : void 8;
};
})();
pages/start/startUser/01_rememberUser/_t.ls
(function(){
return {
dontSave: {
de: "Nein, nicht speichern",
en: "No, don't save",
fr: "Non, ne pas enregistrer",
es: "No, no guardar",
pt: "Não, não salvar"
},
save: {
de: "Ja, speichern",
en: "Yes, save",
fr: "Oui, enregistrer",
es: "Sí, guardar",
pt: "Sim, salvar"
},
saveUserQuestion: {
de: "Soll dein Nutzerkonto auf der Startseite gespeichert werden?
Hinweis: Bei der Auswahl von Ja, speichern auf Schulgeräten und Geräten mit mehreren Nutzer/innen besteht das Risiko, dass andere Personen Zugriff auf dein Nutzerkonto erhalten. ",
en: "Would you like to save your account on this device?
Note: By selecting Yes, save on shared school devices or other devices with multiple users, there is a risk that other people will be able to gain access to your account.",
fr: "Veux-tu enregistrer ce compte sur cet appareil ?
À noter : Si tu es sur un appareil appartenant à ton école ou partagé avec d'autres, en choisissant Oui, enregistrer, il est possible que d'autres personnes accèdent à ton compte ANTON et l'utilisent.",
es: "¿Quieres que tu cuenta permanezca registrada en la página de inicio?
Observación: al seleccionar Sí, guardar en un dispositivo escolar o que compartes con más personas, las personas que usen el dispositivo podrán acceder a tu cuenta.",
pt: "Você deseja que sua conta fique salva na página inicial?
Observação: ao selecionar Sim, salvar em dispositivos escolares compartilhados ou outros dispositivos com vários usuários, existe o risco de outras pessoas conseguirem acessar sua conta."
},
helloName: {
de: "Hallo $1!",
en: "Hello $1!",
fr: "Bonjour $1 !",
es: "¡Hola $1!",
pt: "Olá $1!"
}
};
})();
pages/start/startUser/01_rememberUser/avatar/avatar.ls
(function(){
return function(o){
var avatar;
avatar = o.page.params.avatar;
if (!avatar) {
return;
}
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "6em",
height: "6em",
borderRadius: "999px"
});
};
})();
pages/start/startUser/01_rememberUser/buttons/buttons.ls
(function(){
return function(o, callback){
var loggerReadOnly, ref$, clickYes, clickNo;
loggerReadOnly = (ref$ = Store("debugLoggerReadOnly")) != null ? ref$ : false;
clickYes = function(){
o.rememberUser = "yes";
inc("../remember/remember")(o);
return callback();
};
clickNo = function(){
o.rememberUser = "no";
return callback();
};
return Div({
display: "inline-block"
}).html(Button({
label: T("dontSave"),
action: clickNo
}).css({
textAlign: "center",
display: "block",
padding: "0.8em"
}), " ", loggerReadOnly !== true ? Button({
label: T("save"),
action: clickYes
}).css({
textAlign: "center",
display: "block",
padding: "0.8em"
}) : void 8);
};
})();
pages/start/startUser/01_rememberUser/remember/remember.ls
(function(){
return function(o){
inc("/lib/util/storedUsers/addUser/add")(o.logId);
return inc("/lib/init/logDeviceStartEvents/setUserLogIds/log")();
};
})();
pages/start/startUser/01_rememberUser/rememberUser.ls
(function(){
return function(o){
var callback, deviceRememberUser, ref$;
callback = function(){
return inc("../02_subscribeUserLog/subscribe")(o);
};
deviceRememberUser = (ref$ = Store("deviceRememberUser")) != null ? ref$ : true;
if (deviceRememberUser === false) {
return callback();
} else if (o.rememberUser === "no") {
return callback();
} else if (o.rememberUser === "yes") {
inc("remember/remember")(o);
return callback();
} else if (o.rememberUser === "ask") {
return o.page.html(inc("avatar/avatar")(o), inc("title/title")(o), inc("text/text")(), inc("buttons/buttons")(o, callback));
}
};
})();
pages/start/startUser/01_rememberUser/text/text.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "90%",
margin: "0 auto",
paddingBottom: "1.3em"
}).html(T("saveUserQuestion"));
};
})();
pages/start/startUser/01_rememberUser/title/title.ls
(function(){
return function(o){
var name;
name = o.page.params.displayName || o.page.params.name;
return Div({
paddingBottom: "0.3em",
width: "30em",
maxWidth: "90%",
margin: "0 auto"
}).secureHtml(T("helloName", name));
};
})();
pages/start/startUser/02_subscribeUserLog/checkAndSyncLog/checkAndSyncLog.ls
(function(){
return function(o, userLog, callback){
var logOk, syncLog;
logOk = function(userLog){
return userLog.findLast("setPublicId") != null;
};
syncLog = function(userLog){
return userLog.sync(function(error){
if (!logOk(userLog) || error) {
return inc("showErrorPage/show")(userLog, error, o);
} else {
return callback();
}
});
};
window.log = userLog;
if (logOk(userLog)) {
return callback();
} else {
return syncLog(userLog);
}
};
})();
pages/start/startUser/02_subscribeUserLog/checkAndSyncLog/showErrorPage/show.ls
(function(){
return function(userLog, error, o){
var params;
if (_.startsWith(userLog.authToken, "T-invalid")) {
if (Store("debugLoggerReadOnly")) {
debug("Please use the Support Login Feature in the debug popup or the IDE app to log in to a user");
}
error == null && (error = {});
error.authTokenError = userLog.authToken;
}
inc("../../../00_shared/logSubscribeError/log")({
error: "user",
log: userLog
});
params = _.omit(o, ["page", "progressBar"]);
params.error = {
error: error,
log: userLog.id()
};
return startPage({
path: path("../../../00_shared/errorPage/page"),
params: params,
replace: true
});
};
})();
pages/start/startUser/02_subscribeUserLog/progressBar/progressBar.ls
(function(){
return function(){
var update, div, fill;
update = function(total, totalDone){
var w;
if (total === 0) {
return;
}
div.css({
visibility: "visible"
});
w = _.round(totalDone / total * 100) + "%";
return fill.css({
width: w
});
};
div = Div().css({
margin: "0.5em auto 0",
width: "5em",
height: "0.6em",
backgroundColor: Color.grey[100],
borderRadius: "5px",
overflow: "hidden",
opacity: 0.99
}).append(fill = Div().css({
width: "0",
backgroundColor: Color.grey[300],
height: "100%",
transition: "width 200ms"
}));
div.update = update;
return div;
};
})();
pages/start/startUser/02_subscribeUserLog/subscribe.ls
(function(){
return function(o){
var callback, logId, userLog, authTokenIsInvalid;
callback = function(){
return inc("../03_subscribeGroupsAndSchools/subscribe")(o);
};
o.page.html(inc("/lib/gui/spinner/spinner")(), o.progressBar = inc("progressBar/progressBar")());
logId = o.logId;
userLog = window.userLogs[logId];
authTokenIsInvalid = _.startsWith(userLog != null ? userLog.authToken : void 8, "T-invalid");
if (userLog && !authTokenIsInvalid) {
return inc("checkAndSyncLog/checkAndSyncLog")(o, userLog, callback);
} else {
return inc("/lib/util/log/subscribeUser/subscribe")({
logId: logId,
onSubscribe: function(userLog){
var storedLogIds;
storedLogIds = inc("/lib/util/storedUsers/logIds/logIds")();
if (_.includes(storedLogIds, logId)) {
window.userLogs[logId] = userLog;
}
return inc("checkAndSyncLog/checkAndSyncLog")(o, userLog, callback);
}
});
}
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/_calcUseOnInitDone/calc.ls
(function(){
return function(){
var useOnInitDone;
return useOnInitDone = engine.isMobileApp && engine.networkConnection.isOnline != null && engine.networkConnection.isOnline === false;
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/onDone/onDone.ls
(function(){
return function(o, callback){
return function(error){
var params;
if (error && !o.errorShown) {
inc("../../00_shared/logSubscribeError/log")(error);
o.errorShown = true;
params = _.omit(o, ["page", "progressBar"]);
params.error = {
error: error.error,
log: error.log.id()
};
startPage({
path: path("../../00_shared/errorPage/page"),
params: params,
replace: true
});
return;
}
o.totalGroupAndSchoolDone++;
o.progressBar.update(o.totalGroupAndSchool, o.totalGroupAndSchoolDone);
if (o.totalGroupAndSchoolDone === o.totalGroupAndSchool) {
return setTimeout(function(){
if (o.page === app.currentPage) {
return callback();
}
}, 100);
}
};
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/subscribe.ls
(function(){
return function(o){
var callback, groupCodes, schoolCodes, onDone, i$, len$, groupCode, schoolCode, results$ = [];
callback = function(){
return inc("../04_logStartEvents/log")(o);
};
window.schoolLogs = window.schoolLogs || {};
window.groupLogs = window.groupLogs || {};
groupCodes = inc("/data/group/calcGroupCodes/calc")();
schoolCodes = inc("/data/school/calcSchoolCodes/calc")();
o.totalGroupAndSchool = groupCodes.length + schoolCodes.length;
o.totalGroupAndSchoolDone = 0;
o.errorShown = false;
if (o.totalGroupAndSchool === 0) {
callback();
return;
}
onDone = inc("onDone/onDone")(o, callback);
for (i$ = 0, len$ = groupCodes.length; i$ < len$; ++i$) {
groupCode = groupCodes[i$];
inc("subscribeGroupLog/subscribe")(groupCode, onDone);
}
for (i$ = 0, len$ = schoolCodes.length; i$ < len$; ++i$) {
schoolCode = schoolCodes[i$];
results$.push(inc("subscribeSchoolLog/subscribe")(schoolCode, onDone));
}
return results$;
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/subscribeGroupLog/checkAndSyncLog/checkAndSyncLog.ls
(function(){
return function(groupCode, groupLog, onDone){
var logOk, handleDeletedLog, syncLog, onLogDone;
logOk = function(){
return (groupLog != null ? groupLog.findLast("setGroupCode") : void 8) != null;
};
handleDeletedLog = function(){
var e;
if (groupLog.findLast("groupIsDeleted") == null) {
return false;
}
e = log.findLast({
event: "isGroupMember",
groupCode: groupLog.id()
});
log.deleteEvent(e);
log.log({
event: "debugDeletedIsGroupMemberEvent",
groupCode: groupLog.id()
});
return true;
};
syncLog = function(){
return groupLog.sync(function(error){
if (!logOk() || error) {
if (handleDeletedLog()) {
return onLogDone();
} else {
return onDone({
error: "group",
log: groupLog
});
}
} else {
return onLogDone();
}
});
};
onLogDone = function(){
window.groupLogs[groupCode] = groupLog;
return onDone();
};
if (logOk()) {
return onLogDone();
} else {
return syncLog();
}
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/subscribeGroupLog/subscribe.ls
(function(){
return function(groupCode, onDone){
var useOnInitDone, checkAndSync;
useOnInitDone = inc("../_calcUseOnInitDone/calc")();
checkAndSync = function(groupLog){
return inc("checkAndSyncLog/checkAndSyncLog")(groupCode, groupLog, onDone);
};
return Logger.subscribe({
logId: groupCode,
filter: "subscribeGroup",
removeOldEvents: true,
onInitDone: useOnInitDone ? checkAndSync : void 8,
onSubscribe: !useOnInitDone ? checkAndSync : void 8
});
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/subscribeSchoolLog/checkAndSyncLog/checkAndSyncLog.ls
(function(){
return function(schoolCode, schoolLog, onDone){
var logOk, handleDeletedLog, syncLog, onLogDone;
logOk = function(){
return (schoolLog != null ? schoolLog.findLast("setSchoolCode") : void 8) != null;
};
handleDeletedLog = function(){
var e;
if (schoolLog.findLast("schoolIsDeleted") == null) {
return false;
}
e = log.findLast({
event: "isSchoolMember",
schoolCode: schoolLog.id()
});
log.deleteEvent(e);
log.log({
event: "debugDeletedIsSchoolMemberEvent",
schoolCode: schoolLog.id()
});
return true;
};
syncLog = function(){
return schoolLog.sync(function(error){
if (!logOk() || error) {
if (handleDeletedLog()) {
return onLogDone();
} else {
return onDone({
error: "school",
log: schoolLog
});
}
} else {
return onLogDone();
}
});
};
onLogDone = function(){
window.schoolLogs[schoolCode] = schoolLog;
return onDone();
};
if (logOk()) {
return onLogDone();
} else {
return syncLog();
}
};
})();
pages/start/startUser/03_subscribeGroupsAndSchools/subscribeSchoolLog/subscribe.ls
(function(){
return function(schoolCode, onDone){
var useOnInitDone, checkAndSync;
useOnInitDone = inc("../_calcUseOnInitDone/calc")();
checkAndSync = function(schoolLog){
return inc("checkAndSyncLog/checkAndSyncLog")(schoolCode, schoolLog, onDone);
};
return Logger.subscribe({
logId: schoolCode,
filter: "subscribeSchool",
removeOldEvents: true,
onInitDone: useOnInitDone ? checkAndSync : void 8,
onSubscribe: !useOnInitDone ? checkAndSync : void 8
});
};
})();
pages/start/startUser/04_logStartEvents/avatar/log.ls
(function(){
return function(){
var d, ref$, v;
d = (ref$ = log.findLast("setAvatar")) != null ? ref$.value : void 8;
if (d && d.version !== 2) {
v = Avatar.validate(d);
if (v.error === true) {
log.log({
event: "debugAvatarValidateErrors",
errors: v.errors
});
return log.log({
event: "setAvatar",
value: v.avatar
});
}
}
};
})();
pages/start/startUser/04_logStartEvents/currentPlan/calcPlanOfLastLevelFinish/calc.ls
(function(){
return function(plans){
var e, project, ref$, plan;
try {
e = log.findLast("finishLevel");
project = (ref$ = e.puid) != null ? ref$.split("/")[0] : void 8;
plan = _.find(plans, {
project: project
});
return plan.planPath;
} catch (e$) {}
};
})();
pages/start/startUser/04_logStartEvents/currentPlan/calcPlanOfSetNewUser/calc.ls
(function(){
return function(plans){
var e, matchingSubjectPlans, orderedByGradeDistancePlans, plan, p;
try {
e = log.findLast("setNewUser");
matchingSubjectPlans = _.filter(plans, {
subject: e.value.subject
});
orderedByGradeDistancePlans = _.orderBy((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = matchingSubjectPlans).length; i$ < len$; ++i$) {
plan = ref$[i$];
p = _.clone(plan);
p.distance = Math.abs(plan.grade - e.value.grade);
results$.push(p);
}
return results$;
}()), "distance");
return _.first(orderedByGradeDistancePlans).planPath;
} catch (e$) {}
};
})();
pages/start/startUser/04_logStartEvents/currentPlan/log.ls
(function(){
return function(){
var planPath;
return planPath = inc("/data/content/calcCurrentPlan/calc")();
};
})();
pages/start/startUser/04_logStartEvents/debugDeviceLogDetails/log.ls
(function(){
return function(){
return typeof deviceLog != 'undefined' && deviceLog !== null ? typeof deviceLog.getDetails == 'function' ? deviceLog.getDetails(function(d){
return log.log({
event: "debugDeviceLogDetails",
details: _.omit(d, "logInfo")
});
}) : void 8 : void 8;
};
})();
pages/start/startUser/04_logStartEvents/deviceLogin/log.ls
(function(){
return function(logId, loginType){
return deviceLog.log({
event: "deviceUserLogin",
value: {
logId: logId,
loginType: loginType
}
});
};
})();
pages/start/startUser/04_logStartEvents/log.ls
(function(){
return function(o){
var callback;
callback = function(){
return inc("../05_calcGuiLanguage/calc")(o);
};
inc("sessionStart/log")(o.loginType);
inc("avatar/log")();
inc("currentPlan/log")();
inc("deviceLogin/log")(o.logId, o.loginType);
inc("debugDeviceLogDetails/log")();
return callback();
};
})();
pages/start/startUser/04_logStartEvents/sessionStart/details/details.ls
(function(){
return function(){
var ud, totalGroups, ref$, isTeacher, ref1$;
ud = inc("/data/user/calcUserDescription/calc")();
totalGroups = (ref$ = inc("/data/group/calcGroupCodes/calc")()) != null ? ref$.length : void 8;
isTeacher = inc("/data/user/isTeacher/get")();
return {
lastNavCategory: (ref1$ = log.findLast("setLastNavCategory")) != null ? ref1$.value : void 8,
totalGroups: totalGroups,
totalStars: ud.totalStars,
hasPlusAccess: ud.hasPlusAccess,
isTeacher: isTeacher,
isDirTeacher: ud.isDirTeacher,
uniqNameCreated: ud.uniqNameCreated
};
};
})();
pages/start/startUser/04_logStartEvents/sessionStart/log.ls
(function(){
return function(loginType){
var i, e, ref$;
i = projects.info()["app01"];
e = {
event: "sessionStart",
appBranch: i.branch,
appVersion: i.version,
appDate: (ref$ = i.versionDate) != null ? ref$.substr(0, 19).replace("T", " ") : void 8,
appType: inc("/lib/util/calcAppType/calc")(),
isDebug: engine.isDebug,
loginType: loginType,
networkType: engine.networkConnection.type,
isOnline: engine.networkConnection.isOnline,
engineVersion: engine.clientVersion,
engineStartTime: typeof SolocodePlugin != 'undefined' && SolocodePlugin !== null ? SolocodePlugin.engineStartTime : void 8,
isReload: engine.isReload,
screenSize: screen.width + "x" + screen.height,
windowSize: window.innerWidth + "x" + window.innerHeight,
devicePixelRatio: window.devicePixelRatio
};
engine.isReload = false;
return log.log(e);
};
})();
pages/start/startUser/05_calcGuiLanguage/calc.ls
(function(){
return function(o){
var callback, e, guiLanguage;
callback = function(){
return inc("../06_loadPlansList/load")(o);
};
e = log.findLast("setGuiLanguage");
guiLanguage = (e != null ? e.value : void 8) || "de";
inc("/lib/util/setGuiLanguageUser/set")(guiLanguage);
return callback();
};
})();
pages/start/startUser/06_loadPlansList/load.ls
(function(){
return function(o){
var callback;
callback = function(){
return inc("../07_extraPages/extraPages")(o);
};
return inc("/lib/util/loadPlansList/load")({
etag: "any",
onLoaded: callback,
onError: function(error){
var params;
params = _.omit(o, ["page", "progressBar"]);
params.error = error;
inc("logPlansListError/log")(error);
return startPage({
path: path("../00_shared/errorPage/page"),
params: params,
replace: true
});
}
});
};
})();
pages/start/startUser/06_loadPlansList/logPlansListError/log.ls
(function(){
return function(error){
return log.log({
event: "debugStartUserLoadPlansListFailed",
error: error
});
};
})();
pages/start/startUser/07_extraPages/_onExtraPageDone/on.ls
(function(){
return function(o){
return inc("../extraPages")(o);
};
})();
pages/start/startUser/07_extraPages/_onFinish/on.ls
(function(){
return function(o){
delete app.extraPageIndex;
return inc("../../08_start/start")(o);
};
})();
pages/start/startUser/07_extraPages/_t.ls
(function(){
return {
confirmButton: {
de: "Jetzt bestätigen",
en: "Confirm now",
fr: "Confirmer maintenant",
es: "Confirmar ahora",
pt: "Confirmar agora"
},
changeButton: {
de: "Ändern",
en: "Change",
fr: "Changer",
es: "Cambiar",
pt: "Modificar"
},
notNowButton: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
confirmEmail: {
de: "Hallo $1, bitte bestätige deine E-Mail:",
en: "Hello $1, please confirm your email:",
fr: "Bonjour $1, merci de confirmer ton adresse e-mail :",
es: "¡Hola $1! Por favor, confirma tu correo electrónico:",
pt: "Olá $1, por favor, confirme seu endereço de e-mail:"
},
emailConfirmed: {
de: "Schön, deine E-Mail ist nun bestätigt!",
en: "Nice, your email is now confirmed!",
fr: "Parfait, ton adresse est confirmée !",
es: "¡Perfecto! Tu correo ha sido confirmado.",
pt: "Perfeito! Seu e-mail está confirmado!"
},
confirmPhoneNumber: {
de: "Hallo $1, bitte bestätige deine Telefonnummer:",
en_gb: "Hello $1, please confirm your mobile phone number:",
en: "Hello $1, please confirm your cell phone number:",
fr: "Bonjour $1, merci de confirmer ton numéro de téléphone :",
es: "¡Hola $1! Por favor, confirma tu número de teléfono:",
pt: "Olá $1! Por favor, confirme o número do seu celular:"
},
phoneNumberConfirmed: {
de: "Schön, deine Telefonnummer ist nun bestätigt!",
en_gb: "Nice, your mobile phone number is now confirmed!",
en: "Nice, your cell phone number is now confirmed!",
fr: "Parfait, ton numéro de téléphone est confirmé !",
es: "¡Perfecto! Tu número de teléfono has sido confirmado.",
pt: "Perfeito! Seu número de celular está confirmado!"
}
};
})();
pages/start/startUser/07_extraPages/calcShowDirTeacherDirCanceledWarning/calc.ls
(function(){
return function(onDone){
var sds, dirSds;
sds = inc("/data/school/calcSchoolDescriptions/calc")();
dirSds = _.filter(sds, function(d){
var ref$;
return (ref$ = d != null ? d.dirRole : void 8) === "teacher" || ref$ === "staff";
});
if (dirSds.length === 0) {
return onDone([]);
} else {
return inc("calcIsDirCanceled/calc")(dirSds, onDone);
}
};
})();
pages/start/startUser/07_extraPages/calcShowDirTeacherDirCanceledWarning/calcIsDirCanceled/calc.ls
(function(){
return function(dirSds, onDone){
var schoolsDone, schoolsTotal, canceledSchoolsInfos, now, inThreeMonths, calcDetails, calcDone, i$, len$, s, results$ = [];
schoolsDone = 0;
schoolsTotal = dirSds.length;
canceledSchoolsInfos = [];
now = new Date();
inThreeMonths = new Date();
inThreeMonths.setMonth(inThreeMonths.getMonth() + 3);
calcDetails = function(schoolCode){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/school/admin/subscriptionDetails/get"),
params: {
schoolCode: schoolCode
},
onError: function(error){
return calcDone({
status: "error",
error: error
});
},
onOffline: function(){
return calcDone({
status: "offline"
});
},
onCompleted: function(result){
return calcDone(result);
}
});
};
calcDone = function(result){
var sub, ref$;
if (result.status !== "ok") {
debug(result);
} else if (!result.subscription) {
debug("missing subscription, aborting showDirTeacherDirCanceledWarning");
} else {
sub = result.subscription;
if (!sub.autoRenew && (now < (ref$ = new Date(sub.validUntil)) && ref$ < inThreeMonths)) {
canceledSchoolsInfos.push({
schoolCode: result.schoolCode,
validUntil: sub.validUntil
});
}
}
schoolsDone++;
if (schoolsDone === schoolsTotal) {
return onDone(canceledSchoolsInfos);
}
};
for (i$ = 0, len$ = dirSds.length; i$ < len$; ++i$) {
s = dirSds[i$];
results$.push(calcDetails(s.schoolCode));
}
return results$;
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/00_shared/cancel/cancel.ls
(function(){
return function(onCompleted, onError){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/markForDelete/mark"),
params: {
mark: false
},
onCompleted: function(){
return log.sync(function(){
return inc("/lib/gui/infoPopup/popup")({
label: T("deletionCancelledText"),
buttonLabel: T("continue"),
onClose: onCompleted
});
});
},
onError: function(error){
inc("/lib/gui/errorPopup/popup")();
return onError();
},
onOffline: function(){
inc("/lib/offline/offlinePopup/popup")();
return onError();
}
});
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/00_shared/topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbarWhiteBack/topbar")({
back: function(){
return startPage({
history: -1,
animation: "slideRight"
});
}
});
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/_t.ls
(function(){
return {
userWillBeDeletedText: {
de: "Dein Nutzerkonto wurde zur Löschung vorgemerkt und wird am $1 gelöscht.",
en: "Your account was marked for deletion and will be deleted on $1.",
fr: "La suppression de ton compte a été prise en compte. Il sera supprimé le $1.",
es: "Tu solicitud de eliminación de cuenta ha sido registrada. Tu cuenta se eliminará el $1.",
pt: "Sua solicitação para excluir esta conta foi registrada. Sua conta será excluída em $1."
},
'continue': {
de: "Weiter",
en: "Continue",
fr: "Continuer",
es: "Continuar",
pt: "Continuar"
},
abortDeletion: {
de: "Löschung abbrechen",
en: "Cancel deletion",
fr: "Annuler la suppression",
es: "Cancelar eliminación",
pt: "Cancelar exclusão"
},
deletionCancelledText: {
de: "Dein Nutzerkonto wird nun nicht mehr gelöscht.",
en: "Your account will no longer be deleted.",
fr: "Ton compte ne sera plus supprimé.",
es: "Tu cuenta ya no será eliminada.",
pt: "Sua conta não será mais excluída."
},
userWillBeDeletedBySchoolText: {
de: "Dein Nutzerkonto wurde von deiner Schule $1 zur Löschung vorgemerkt und wird am $2 gelöscht.",
en: "Your account was marked for deletion by your school $1 and will be deleted on $2.",
fr: "Ton école $1 a demandé la suppression de ton compte. Il sera supprimé le $2.",
es: "Tu escuela $1 ha solicitado eliminar tu cuenta. Esta se eliminará el $2.",
pt: "Sua escola $1 solicitou a exclusão da sua conta. Esta será excluída em $2."
}
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/cancel.ls
(function(){
return function(){
var e;
e = typeof log != 'undefined' && log !== null ? log.findLast("markForDelete") : void 8;
if (e == null) {
return false;
}
startPage({
path: path("page/page"),
history: 0
});
return true;
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/page/avatar/avatar.ls
(function(){
return function(d){
return inc("/lib/gui/avatar/avatar")(d, "half").css({
width: "8em",
height: "8em",
borderRadius: "999px"
});
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/page/buttons/buttons.ls
(function(){
return function(onContinue, cancelDeletion){
return Div().html(Button(T("continue")).css({
margin: "0.5em",
minWidth: "5em"
}).tap(onContinue), Button(T("abortDeletion")).css({
margin: "0.5em"
}).tap(cancelDeletion));
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/page/name/name.ls
(function(){
return function(d){
return Div({
marginTop: "0.5em",
fontWeight: "bold"
}).secureHtml(d.displayName);
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var onDone, e, ud, cancelDeletion, buttonsDiv, spinner;
onDone = function(){
return inc("../../_onExtraPageDone/on")();
};
e = log.findLast("markForDelete");
if (!e) {
onDone();
return;
}
ud = inc("/data/user/calcUserDescription/calc")();
cancelDeletion = function(){
if (e.reason === "dirAdminDelete") {
return startPage({
path: path("/pages/static/cancelDeletionDirAdmin/01_start/page"),
animation: "slideUp",
params: {
finishFunctionPath: path("../../_onExtraPageDone/on")
}
});
} else {
spinner.show();
buttonsDiv.hide();
return inc("../00_shared/cancel/cancel")(onDone, function(){
spinner.hide();
return buttonsDiv.show();
});
}
};
return page.html(Div({
maxWidth: "100%",
width: "35em",
margin: "0 auto"
}).html(inc("avatar/avatar")(ud), inc("name/name")(ud), inc("text/text")(e), buttonsDiv = inc("buttons/buttons")(onDone, cancelDeletion), spinner = inc("/lib/gui/spinner/spinner")().hide()));
}
};
};
})();
pages/start/startUser/07_extraPages/cancelDeletion/page/text/text.ls
(function(){
return function(e){
var dueDate, ref$, sd, schoolName;
dueDate = (ref$ = inc("/lib/util/formatDate2/format")(e.dueDate, {
ensureDate: true
})) != null ? ref$.formats.dateShort : void 8;
sd = inc("/data/school/calcSchoolDescription/calc")(e.schoolCode);
schoolName = (sd != null ? sd.name : void 8) || "";
return Div({
margin: "0.5em auto",
maxWidth: "90%",
width: "30em",
lineHeight: "1.5em"
}).html(e.reason === "dirAdminDelete"
? T("userWillBeDeletedBySchoolText", schoolName, dueDate)
: T("userWillBeDeletedText", dueDate));
};
})();
pages/start/startUser/07_extraPages/connectToOpenId/_t.ls
(function(){
return {
successMessage: "Dein Nutzerkonto wurde erfolgreich mit dem Berliner Schulportal verknüpft. Du kannst dich ab sofort direkt von dort bei ANTON einloggen."
};
})();
pages/start/startUser/07_extraPages/connectToOpenId/connect.ls
(function(){
return function(o){
var ref$;
if (!((ref$ = app.openIdData) != null && ref$.loginCode)) {
return false;
}
startPage({
path: path("page/page"),
history: 0,
params: _.omit(o, ["page", "progressBar"])
});
return true;
};
})();
pages/start/startUser/07_extraPages/connectToOpenId/page/finish/finish.ls
(function(){
return function(page){
return function(){
delete app.openIdData;
return inc("../../../_onExtraPageDone/on")();
};
};
})();
pages/start/startUser/07_extraPages/connectToOpenId/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")().hide();
},
start: function(){
page.submit = inc("submit/submit")(page);
page.finish = inc("finish/finish")(page);
page.html(page.spinner = inc("/lib/gui/spinner/spinner")());
return page.submit();
}
};
};
})();
pages/start/startUser/07_extraPages/connectToOpenId/page/submit/submit.ls
(function(){
return function(page){
return function(){
var onCompleted, onError, publicId;
onCompleted = function(result){
if (result.status !== "ok") {
onError(result.status);
return;
}
return inc("/lib/gui/infoPopup/popup")({
label: T("successMessage"),
onClose: page.finish
});
};
onError = function(error){
var errorMessage;
errorMessage = error === "error_offline"
? T("offlineError")
: T("errorMessage");
inc("/lib/gui/errorPopup/popup")({
label: errorMessage
});
page.spinner.remove();
return page.topbar.show();
};
publicId = inc("/data/user/calcUserDescription/calc")().publicId;
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/school/admin/combineUserWithPreparedUser/combine"),
params: {
userPublicId: publicId,
preparedUserLoginCode: app.openIdData.loginCode
},
onCompleted: onCompleted,
onError: onError,
onOffline: function(){
return onError("error_offline");
}
});
};
};
})();
pages/start/startUser/07_extraPages/connectToSesam/connect.ls
(function(){
return function(o){
if (!app.sesamData) {
return false;
}
startPage({
path: path("page/page"),
history: 0,
params: _.omit(o, ["page", "progressBar"])
});
return true;
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/_t.ls
(function(){
return {
text: "Dein Nutzerkonto ist noch nicht mit SESAM verknüpft. Klicke bitte auf den Button, um dich zu verknüpfen. Erst dann kannst du dich direkt über SESAM bei ANTON einloggen.",
connect: "Verknüpfen",
skip: "Überspringen",
successMessage: "Dein Nutzerkonto wurde erfolgreich mit SESAM verknüpft. Du kannst dich ab sofort direkt aus SESAM bei ANTON einloggen.",
errorInvalidToken: "Fehler, der SESAM-Token konnte nicht verifiziert werden. Bitte versuche es erneut.",
errorAlreadyConnected: "Fehler, diese SESAM-ID ist bereits mit einem bestehenden Nutzerkonto verknüpft. Bitte versuche dich erneut, mit SESAM einzuloggen.",
errorNotEligiblePupil: "Es können nur ANTON-Nutzerkonten von Lehrkräften mit einem SESAM-Nutzerkonto verknüpft werden.",
errorNotEligibleTeacherNoSchool: "Dein ANTON-Nutzerkonto ist noch nicht Mitglied im Schulverzeichnis deiner Schule. Bitte den ANTON-Admin deiner Schule, dich dort aufzunehmen. Danach kannst du dein Nutzerkonto mit deinem SESAM-Nutzerkonto verknüpfen. Falls deine Schule noch keine Schullizenz hat, könnt ihr euch für eine kostenfreie Lizenz registrieren unter https://lp.anton.app/lp/baden-wuerttemberg",
errorNotEligibleTeacherNoDirSchool: "Deine in ANTON hinterlegte Schule ist noch nicht für die Schullizenz freigeschaltet. Falls deine Schule noch keine Schullizenz hat, könnt ihr euch für eine kostenfreie Lizenz registrieren unter https://lp.anton.app/lp/baden-wuerttemberg",
errorNotEligibleTeacherNoDirTeacher: "Dein ANTON-Nutzerkonto ist noch nicht Mitglied im Schulverzeichnis deiner Schule. Bitte den ANTON-Admin deiner Schule, dich dort aufzunehmen. Danach kannst du dein Nutzerkonto mit deinem SESAM-Nutzerkonto verknüpfen."
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/buttonConnect/button.ls
(function(){
return function(page){
var tap;
tap = function(){
return page.submit();
};
return Button({
label: T("connect"),
icon: path("/lib/svg/icon/link.svg")
}).css({
marginTop: "1.5em"
}).tap(tap);
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/errorDiv/div.ls
(function(){
return function(page){
return Div({
color: Color.red[500],
margin: "0.5em"
}).hide();
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/finish/finish.ls
(function(){
return function(page){
return function(){
delete app.sesamData;
return inc("../../../_onExtraPageDone/on")();
};
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/linkSkip/link.ls
(function(){
return function(page){
return Div({
margin: "1em 0",
color: Color.grey[450]
}).html(inc("/lib/gui/link/link")({
label: T("skip"),
direction: "right"
}).css({
padding: "0.5em"
}).tap(page.finish));
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
page.submit = inc("submit/submit")(page);
page.finish = inc("finish/finish")(page);
return page.append(Div({
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).html(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("text")), page.errorDiv = inc("errorDiv/div")(page), page.buttonConnect = inc("buttonConnect/button")(page), page.linkSkip = inc("linkSkip/link")(page)));
}
};
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/submit/calcTeacherErrorMessage/calc.ls
(function(){
return function(){
var schoolDescriptions, schoolsWithDirectory;
schoolDescriptions = inc("/data/school/calcSchoolDescriptions/calc")();
if (schoolDescriptions.length === 0) {
return T("errorNotEligibleTeacherNoSchool");
}
schoolsWithDirectory = _.filter(schoolDescriptions, "hasDir");
if (schoolsWithDirectory.length === 0) {
return T("errorNotEligibleTeacherNoDirSchool");
}
if (!_.some(schoolsWithDirectory, function(sd){
return sd.dirRole === "teacher";
})) {
return T("errorNotEligibleTeacherNoDirTeacher");
}
return T("errorNotEligibleTeacherNoSchool");
};
})();
pages/start/startUser/07_extraPages/connectToSesam/page/submit/submit.ls
(function(){
return function(page){
return function(){
var onCompleted, onError;
onCompleted = function(result){
if (result.status !== "ok") {
onError(result.status);
return;
}
return inc("/lib/gui/infoPopup/popup")({
label: T("successMessage"),
onClose: page.finish
});
};
onError = function(error){
var errorMessage;
errorMessage = error === "error_blocked"
? T("errorBlocked")
: error === "error_captcha_failed"
? T("errorCaptchaFailed")
: error === "error_invalid_token"
? T("errorInvalidToken")
: error === "error_offline"
? T("offlineError")
: error === "error_already_connected"
? T("errorAlreadyConnected")
: error === "error_not_eligible"
? inc("/data/user/isTeacher/get")()
? inc("calcTeacherErrorMessage/calc")()
: T("errorNotEligiblePupil")
: T("errorMessage");
page.errorDiv.show().html(errorMessage);
return page.spinner.stop();
};
page.spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(page.buttonConnect);
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/sso/sesam/connectUser/query"),
params: {
data: app.sesamData
},
onCompleted: onCompleted,
onError: onError,
onOffline: function(){
return onError("error_offline");
}
});
};
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/00_shared/logEventAndFinish/logEventAndFinish.ls
(function(){
return function(type){
log.log({
event: "showDirTeacherSuggestSecureAccount",
type: type
});
inc("/lib/util/cache/del/del")("userHasPassword");
return inc("../../../_onExtraPageDone/on")();
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/_t.ls
(function(){
return {
setPassword: {
de: "Passwort setzen",
en: "Set password",
fr: "Établir un mot de passe",
es: "Establecer contraseña",
pt: "Definir senha"
},
saveAccount: {
de: "Sicheres Nutzerkonto",
en: "Secure account",
fr: "Sécurité du compte",
es: "Cuenta segura",
pt: "Segurança da conta"
}
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/shape/security.svg"),
size: "4em",
color: Color.blue[500]
}).css({
margin: "0.5em"
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
page.userHasPassword = (typeof log != 'undefined' && log !== null ? log.findLast("setPasswordSetAt") : void 8) != null;
inc("/lib/util/cache/set/set")("userHasPassword", page.userHasPassword);
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var ref$, finishType;
if (((ref$ = log.findLast("setLoginCodeNeedsPassword")) != null ? ref$.value : void 8) === true) {
finishType = inc("/lib/util/cache/get/get")("userHasPassword") ? "finishTopbar_userHasPassword" : "finishTopbar_newPassword";
inc("../00_shared/logEventAndFinish/logEventAndFinish")(finishType);
return;
}
return page.css({
margin: "1em 0"
}).append(inc("icon/icon")(page), inc("title/title")(page), inc("text/text")(page), !page.userHasPassword
? inc("setPasswordButton/button")()
: inc("setLoginCodeNeedsPasswordButton/button")(), inc("skipButton/button")(page));
}
};
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/setLoginCodeNeedsPasswordButton/button.ls
(function(){
return function(page){
return Button({
label: T("continueButton")
}).tap(function(){
return startPage({
path: path("../../02_page_setLoginCodeNeedsPassword/page"),
animation: "slideUp",
params: {
userHasPassword: true
}
});
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/setPasswordButton/button.ls
(function(){
return function(){
return Button({
label: T("setPassword")
}).tap(function(){
return startPage({
path: path("/pages/misc/password/set/page"),
animation: "slideUp",
params: {
finishFunctionPath: path("../../02_page_setLoginCodeNeedsPassword/start"),
firstTime: true,
context: "startUser"
}
});
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/skipButton/button.ls
(function(){
return function(page){
return Div({
margin: "0 auto"
}).html(inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: Color.grey[500]
}).css({
color: Color.grey[500],
marginTop: "0.5em",
padding: "0.5em"
}).tap(function(){
return inc("../../00_shared/logEventAndFinish/logEventAndFinish")("skipInfoPage");
}));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/text/text.ls
(function(){
return function(page){
var displayName;
displayName = page.userDescription.displayName;
return Div({
margin: "1em auto 1.5em",
width: "35em",
maxWidth: "90%",
lineHeight: "1.7em",
hyphens: "auto",
textAlign: "justify"
}).secureHtml(T("saveEmailText", displayName), Div({
height: "0.8em"
}), !page.userHasPassword
? T("saveEmailSubtext1")
: T("saveEmailSubtext2"), Div(), T("saveEmailText2"));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/01_page_info/title/title.ls
(function(){
return function(page){
return Div({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em",
fontWeight: "bold"
}).secureHtml(T("saveAccount"));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/_t.ls
(function(){
return {
enterPassword: {
de: "Um diese Funktion zu aktivieren, gib bitte dein Passwort ein:",
en: "Please enter your password to activate this feature.",
fr: "Tu dois entrer ton mot de passe pour activer cette fonction :",
es: "Ingresa tu contraseña para activar esta función:",
pt: "Por favor, insira sua senha para ativar esta função:"
},
infoTextPw: {
de: "Um deinen Anmelde-Code mit Passwort abzusichern, musst du zunächst dein Passwort eingeben. Falls du das vergessen haben solltest, kannst du es in deinen Einstellungen unter Passwort zurücksetzen. Die Funktion Anmelde-Code mit Passwort absichern findest du ebenfalls in den Einstellungen.",
en: "To secure your login code with your password, you must enter this password here. If you have forgotten your password, you can reset it in the settings under Password. You can also secure your login code later in the settings.",
fr: "Pour sécuriser ton code de connexion avec un mot de passe, tu dois d'abord entrer le mot de passe que tu as déjà établi.
Si tu l'as oublié tu peux le réinitialiser dans Mot de passe. Tu peux aussi trouver la fonction Sécuriser le code de connexion dans tes paramètres.",
es: "Para asegurar tu clave de acceso con contraseña, necesitarás ingresar tu contraseña. En caso de que la hayas olvidado, puedes restaurarla en los ajustes bajo el inciso Contraseña. La función Proteger clave de acceso con contraseña también está en los ajustes.",
pt: "Para proteger seu código de acesso com uma senha, você deve primeiro inserir sua senha. Se você a esqueceu, você pode redefini-la nas configurações em Senha. A função Proteger código de acesso com senha também pode ser encontrada nas configurações."
},
infoTextNoPw: {
de: "Aktiviere nun bitte die Funktion Anmelde-Code mit Passwort absichern. Dadurch ist der Zugriff zu deinem Nutzerkonto nur noch zusammen mit deinem Passwort möglich und dein Nutzerkonto ist besser geschützt.",
en: "Please activate the feature Secure login code with password. This step further protects your ANTON account as access can only be obtained with a password.",
fr: "Nous te demandons d'activer maintenant la fonction Sécuriser le code de connexion. L'accès à ton compte sera ainsi possible uniquement à l'aide de ton mot de passe et ton compte est mieux protégé.",
es: "Ahora, por favor, activa la función Proteger clave de acceso con contraseña De este modo sólo se podrá acceder a tu cuenta después de ingresar tu contraseña y tu cuenta estará mejor protegida. ",
pt: "Agora, por favor, ative a função Proteger código de acesso com senha. Desta forma, o acesso à sua conta de usuário só será possível com sua senha e, assim, sua conta estará mais protegida."
},
secureLoginCode: {
de: "Anmelde-Code mit Passwort absichern",
en: "Secure login code with password",
fr: "Sécuriser le code de connexion",
es: "Proteger clave de acceso con contraseña",
pt: "Proteger código de acesso com senha"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein.",
en: "The password cannot be left blank.",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
}
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/activateButton/button.ls
(function(){
return function(page){
return Button({
label: T("continueButton")
}).tap(function(){
return inc("../submit/submit")(page);
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/page.ls
(function(){
return function(page){
page.userHasPassword = inc("/lib/util/cache/get/get")("userHasPassword");
return {
top: function(){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("secureLoginCode")
});
},
start: function(){
return page.append(inc("text/text")(page), page.buttons = Div().html(page.buttonActivate = inc("activateButton/button")(page)));
}
};
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/skipButton/button.ls
(function(){
return function(page){
return Div({
margin: "0 auto"
}).html(inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: Color.grey[500]
}).css({
marginTop: "0.5em",
padding: "0.5em",
color: Color.grey[500]
}).tap(function(){
return inc("../../00_shared/logEventAndFinish/logEventAndFinish")("skipSetLoginCodeNeedsPassword");
}));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/start.ls
(function(){
return function(){
return log.sync(function(){
return startPage({
path: path("page"),
history: 0,
animation: "fadeIn",
params: {
userHasPassword: true
}
});
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/submit/submit.ls
(function(){
return function(page){
var spinner, showSpinner, hideSpinner, onOffline, onError, checkPassword, submit;
showSpinner = function(){
return spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(page.buttonActivate);
};
hideSpinner = function(){
return spinner != null ? spinner.stop() : void 8;
};
onOffline = function(){
page.buttons.css({
pointerEvents: ""
});
hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
onError = function(error){
var status, label;
page.buttons.css({
pointerEvents: ""
});
hideSpinner();
status = error.status;
label = status === "error_wrongPassword"
? T("errorPassword")
: status === "error_emptyPassword"
? T("emptyPassword")
: status === "error_captcha_failed" ? T("errorCaptchaFailed") : void 8;
return inc("/lib/gui/errorPopup/popup")({
label: label
});
};
checkPassword = function(){
page.buttons.css({
pointerEvents: "none"
});
return inc("/lib/gui/confirmPasswordPopup/popup")({
label: T("enterPassword"),
onDone: function(isCorrect, password){
if (!isCorrect) {
return onError({
status: "error_wrongPassword"
});
} else {
return submit(password);
}
},
onOffline: onOffline,
onError: onError,
onAborted: function(){
return page.buttons.css({
pointerEvents: ""
});
}
});
};
submit = function(password){
showSpinner();
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setLoginCodeNeedsPassword/set"),
params: {
logId: log.id(),
password: password,
value: true
},
requiredVisibleDiv: page,
onCompleted: function(){
return log.sync(function(){
return startPage({
path: path("../../03_done/page"),
history: 0
});
});
},
onError: onError,
onOffline: onOffline
});
};
return checkPassword();
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/02_page_setLoginCodeNeedsPassword/text/text.ls
(function(){
return function(page){
return Div({
margin: "1em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.7em",
hyphens: "auto",
textAlign: "justify"
}).html(page.userHasPassword
? T("infoTextPw")
: T("infoTextNoPw"));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/03_done/_t.ls
(function(){
return {
successText: {
de: "Dein Nutzerkonto ist nun erfolgreich abgesichert!",
en: "Your account has been successfully secured!",
fr: "Ton compte ANTON a bien été sécurisé !",
es: "¡Tu cuenta está protegida!",
pt: "Sua conta está protegida!"
},
accountSecure: {
de: "Nutzerkonto abgesichert",
en: "Account secured",
fr: "Compte sécurisé",
es: "Cuenta protegida",
pt: "Conta protegida"
}
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/03_done/finishButton/button.ls
(function(){
return function(page){
var finishType;
finishType = page.userHasPassword ? "finishButton_userHasPassword" : "finishButton_newPassword";
return Button({
label: T("closeButton")
}).css({
marginTop: "0.5em"
}).tap(function(){
return inc("../../00_shared/logEventAndFinish/logEventAndFinish")(finishType);
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/03_done/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/shape/security.svg"),
size: "4em",
color: Color.blue[500]
});
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/03_done/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
page.userHasPassword = inc("/lib/util/cache/get/get")("userHasPassword");
return {
top: function(){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("accountSecure")
});
},
start: function(){
return page.append(inc("icon/icon")(page), inc("text/text")(page), inc("finishButton/button")(page));
}
};
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/03_done/text/text.ls
(function(){
return function(page){
return Div({
margin: "1em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.7em"
}).html(T("successText"));
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
errorPassword: {
de: "Das Passwort ist nicht korrekt.",
en: "The password is not correct.",
fr: "Le mot de passe n'est pas correct.",
es: "La contraseña es incorrecta.",
pt: "A senha não está correta."
},
saveEmailText: {
de: "Hallo $1, als Schulverzeichnis-Lehrkraft hast du besondere Zugriffsrechte zu den Daten deiner Schüler/innen.",
en_gb: "Hello $1, as a school directory teacher you have special access to the data of your pupils.",
en: "Hello $1, as a school directory teacher you have special access to the data of your students.",
fr: "Bonjour $1, en tant que professeur·e du répertoire scolaire tu disposes de droits d'accès spéciaux aux données de tes élèves.",
es: "Hola $1, como docente del directorio escolar tienes acceso especial a los datos de tus estudiantes.",
pt: "Olá $1, como professor(a) do Diretório Escolar, você tem acesso especial aos dados de seus alunos."
},
saveEmailSubtext1: {
de: "Bitte schütze dein ANTON-Nutzerkonto mit einem Passwort und aktiviere die Funktion Anmelde-Code mit Passwort absichern.",
en: "Please protect your ANTON account with a password and activate the feature Secure login code with password.",
fr: "Nous te demandons de protéger ton compte ANTON avec un mot de passe et d'activer la fonction Sécuriser le code de connexion.",
es: "Por favor, protege tu cuenta en ANTON con una contraseña y activa la función Proteger clave de acceso con contraseña",
pt: "Por favor, proteja sua conta ANTON com uma senha e ative a função Proteger código de acesso com senha."
},
saveEmailSubtext2: {
de: "Aktiviere bitte die Funktion Anmelde-Code mit Passwort absichern.",
en: "Please activate the feature Secure login code with password.",
fr: "Merci d'activer la fonction Sécuriser le code de connexion.",
es: "Por favor, activa la función Proteger clave de acceso con contraseña. ",
pt: "Por favor, ative a função Proteger código de acesso com senha."
},
saveEmailText2: {
de: "Dadurch ist der Zugriff zu deinem Nutzerkonto nur noch zusammen mit deinem Passwort möglich und dein Nutzerkonto ist besser geschützt.",
en: "This step further protects your ANTON account as access can only be obtained with a password.",
fr: "L'accès à ton compte sera ainsi possible uniquement à l'aide de ton mot de passe et ton compte est mieux protégé.",
es: "De este modo el acceso a tu cuenta solo será posible tras ingresar tu contraseña y tu cuenta quedará mejor protegida. ",
pt: "Desta forma, o acesso à sua conta só será possível após inserir sua senha e sua conta ficará mais protegida."
}
};
})();
pages/start/startUser/07_extraPages/dirTeacherSuggestSecureAccount/suggest.ls
(function(){
return function(o){
var ref$, ref1$, ref2$, ud, lastEvent, d, now, oneWeek;
if (window.log == null) {
return false;
}
if (((ref$ = log.findLast("setLoginCodeNeedsPassword")) != null ? ref$.value : void 8) === true) {
return false;
}
if (!(((ref1$ = log.findLast("setEMail")) != null && ref1$.isVerified) || ((ref2$ = log.findLast("setPhoneNumber")) != null && ref2$.isVerified))) {
return false;
}
ud = inc("/data/user/calcUserDescription/calc")();
if (!ud.isDirTeacher) {
return false;
}
lastEvent = log.findLast("showDirTeacherSuggestSecureAccount");
d = new Date(lastEvent != null ? lastEvent.created : void 8);
now = new Date();
oneWeek = 1000 * 60 * 60 * 24 * 7;
if ((lastEvent != null ? lastEvent.type : void 8) === "skipInfoPage" && now - d < oneWeek) {
return false;
}
startPage({
path: path("01_page_info/page"),
history: 0
});
return true;
};
})();
pages/start/startUser/07_extraPages/extraPages.ls
(function(){
return function(o){
var calcShowDirTeacherDirCanceledWarning, extraPages, decide;
o == null && (o = {});
calcShowDirTeacherDirCanceledWarning = function(){
return inc("calcShowDirTeacherDirCanceledWarning/calc")(function(foundSchools){
o.canceledDirSchools = foundSchools;
return decide();
});
};
extraPages = [
function(){
return inc("connectToSesam/connect")(o);
}, function(){
return inc("connectToOpenId/connect")(o);
}, function(){
return inc("cancelDeletion/cancel")();
}, function(){
return inc("showDirTeacherDirCanceledWarning/show")(o);
}, function(){
return inc("showInfoMessagePopup/show")(o);
}, function(){
return inc("verifyPhoneNumber/verify")("phone");
}, function(){
return inc("verifyEmail/verify")("email");
}, function(){
return inc("showLoginCodeOnce/show")(o);
}, function(){
return inc("suggestRecoveryOption/suggest")(o);
}, function(){
return inc("dirTeacherSuggestSecureAccount/suggest")(o);
}
];
decide = function(){
var i$, ref$, len$, i, checkAndStartPage;
app.extraPageIndex == null && (app.extraPageIndex = -1);
for (i$ = 0, len$ = (ref$ = extraPages).length; i$ < len$; ++i$) {
i = i$;
checkAndStartPage = ref$[i$];
if (i <= app.extraPageIndex) {
continue;
}
if (checkAndStartPage()) {
app.extraPageIndex = i;
return;
}
}
return inc("_onFinish/on")(o);
};
return calcShowDirTeacherDirCanceledWarning();
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/_t.ls
(function(){
return {
infoText: {
de: "Hallo $1, die Schullizenz deiner Schule $2 wurde gekündigt und läuft noch bis zum $3. An diesem Datum werden aus Datenschutzgründen deine Gruppen gelöscht und können nicht wieder hergestellt werden. Gruppenmitglieder werden zur Löschung markiert und können entscheiden, ihr Nutzerkonto unabhängig von der Schule weiterzuführen.",
en_gb: "Hello $1, the School Licence for your school $2 has been cancelled and will run until $3. For data protection reasons, your groups will be deleted on this date and will not be able to be retrieved. Group members accounts will be marked for deletion and the users can decide whether to continue their account independently of the school.",
en: "Hello $1, the School License for your school $2 has been cancelled and will run until $3. For data protection reasons, your groups will be deleted on this date and will not be able to be retrieved. Group members will be marked for deletion and can decide whether tocontinue their accounts independently of the school.",
fr: "Bonjour $1, la licence scolaire de ton école $2 a été résiliée et s'arrêtera le $3. Pour des raisons de protection des données, les groupes seront supprimés à cette date et ne pourront pas être récupérés. La suppression des comptes des membres du groupe sera engagée et les utilisateur·rices pourront décider de continuer ou non à utiliser leur compte ANTON indépendamment de l'école.",
es: "Hola $1, la licencia escolar de tu escuela $2 ha sido cancelada y estará activa hasta el $3. A partir de esta fecha, por razones de protección de datos, se borrarán todos los grupos y no podrán ser recuperados. Las cuentas de los grupos se marcarán para su eliminación y los/as usuarios/as serán notificados/as. Estos/as podrán interrumpir la eliminación si desean continuar utilizando sus cuentas independientemente de la escuela.",
pt: "Olá $1, a Licença Escolar da sua escola $2 foi cancelada e estará ativa até $3. Nesta data, por razões de proteção de dados, seus grupos serão excluídos e não poderão ser restaurados. Os membros do grupo serão marcados para exclusão e podem decidir se desejam continuar sua conta de usuário independentemente da escola."
},
title: {
de: "Schullizenz gekündigt",
en_gb: "School Licence cancelled",
en: "School License cancelled",
fr: "Licence scolaire résiliée",
es: "Licencia escolar cancelada",
pt: "Licença escolar cancelada"
}
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/page/buttonDone/button.ls
(function(){
return function(page){
var click;
click = function(){
log.log({
event: "showDirTeacherDirCanceledWarning"
});
return inc("../../../_onExtraPageDone/on")();
};
return Button(T("continueButton")).css({
marginTop: "1em"
}).tap(click);
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/page/icon/icon.ls
(function(){
return function(page){
return SvgIcon({
svg: path("/lib/svg/illustration/school-license.svg"),
size: "4em"
}).css({
margin: "0.5em"
});
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/page/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
page.school = page.params.school;
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
return page.append(Div({
margin: "1em auto"
}).append(inc("icon/icon")(), inc("title/title")(), inc("text/text")(page), inc("buttonDone/button")(page)));
}
};
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/page/text/text.ls
(function(){
return function(page){
var displayName, date, schoolName;
displayName = page.userDescription.displayName;
date = inc("/lib/util/formatDate2/format")(page.school.validUntil);
schoolName = inc("/data/school/calcSchoolDescription/calc")(page.school.schoolCode).name;
return Div({
margin: "1em auto 1.5em",
width: "35em",
maxWidth: "90%",
lineHeight: "1.7em",
hyphens: "auto",
textAlign: "justify"
}).secureHtml(T("infoText", displayName, schoolName, date.formats.date));
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/page/title/title.ls
(function(){
return function(){
return Div({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em",
fontWeight: "bold"
}).html(T("title"));
};
})();
pages/start/startUser/07_extraPages/showDirTeacherDirCanceledWarning/show.ls
(function(){
return function(o){
var school, lastEvent, d, now, oneWeek, validUntil, isWithinLastWeek;
if (o.canceledDirSchools.length === 0) {
return false;
}
school = o.canceledDirSchools[0];
lastEvent = log.findLast("showDirTeacherDirCanceledWarning");
d = new Date(lastEvent != null ? lastEvent.created : void 8);
now = new Date();
oneWeek = 1000 * 60 * 60 * 24 * 7;
validUntil = school.validUntil;
isWithinLastWeek = new Date(validUntil) - now < oneWeek;
if (!isWithinLastWeek && lastEvent && now - d < oneWeek) {
return false;
}
startPage({
path: path("page/page"),
history: 0,
params: {
school: school
}
});
return true;
};
})();
pages/start/startUser/07_extraPages/showInfoMessagePopup/show.ls
(function(){
return function(o){
var events, ref$, event;
events = (ref$ = typeof log != 'undefined' && log !== null ? log.list("infoMessage") : void 8) != null
? ref$
: [];
events = _.filter(events, function(e){
return !e.readAt && e.type === "loginPopup";
});
if (events.length === 0) {
return false;
}
event = events[0];
inc("/lib/gui/infoPopup/popup")({
label: event.message,
buttonLabel: T("continueButton"),
onClose: function(){
var event2;
event2 = _.cloneDeep(event);
event2.event = "infoMessageRead";
event2.readAt = new Date().toISOString();
delete event2.created;
delete event2.inserted;
log.log(event2);
log.deleteEvent(event);
return inc("../_onExtraPageDone/on")(o);
}
});
return true;
};
})();
pages/start/startUser/07_extraPages/showLoginCodeOnce/_t.ls
(function(){
return {
text: {
de: "Dies ist dein Anmelde-Code. Bitte schreibe ihn auf oder drucke ihn aus, damit du den Zugang zu deinem Konto nicht verlieren kannst. Du kannst ihn auch jederzeit in den Einstellungen unter „Anmelde-Code“ nachschauen.",
en: "This is your login code. Please write it down or print it out so that you don’t lose access to your account. You can always find it in the settings under “login code”.",
fr: "Voici ton code de connexion. Nous te conseillons de l'écrire ou de l'imprimer pour ne pas perdre l'accès à ton compte. Tu peux à tout moment le trouver dans les paramètres à “Code de connexion”.",
es: "Esta es tu clave de acceso. Te aconsejamos apuntarla o imprimirla para que no pierdas el acceso a tu cuenta. Siempre podrás consultar tu clave en los ajustes bajo “clave de acceso”.",
pt: "Este é o seu código de acesso. Por favor, anote ou imprima-o para não perder o acesso à sua conta. Você também pode consultá-lo a qualquer momento nas configurações, em “código de acesso”."
},
loginCode: {
de: "Anmelde-Code:",
en: "Login code:",
fr: "Code de connexion :",
es: "Clave de acceso:",
pt: "Código de acesso:"
},
okDone: {
de: "Fertig",
en: "Done!",
fr: "OK",
es: "¡Listo!",
pt: "Pronto!"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
}
};
})();
pages/start/startUser/07_extraPages/showLoginCodeOnce/page/buttonDone/button.ls
(function(){
return function(page){
var click;
click = function(){
var o;
log.log({
event: "showLoginCodeOnce"
});
o = {
startNavCategory: page.params.startNavCategory
};
return inc("../../../_onExtraPageDone/on")(o);
};
return Button(T("okDone")).css({
marginTop: "1em"
}).tap(click);
};
})();
pages/start/startUser/07_extraPages/showLoginCodeOnce/page/buttonPrint/button.ls
(function(){
return function(loginCode){
var d, print;
d = inc("/data/user/calcUserDescription/calc")();
print = function(){
var userCard;
userCard = inc("/../qrcode/userCard/userCard")({
loginCode: loginCode,
name: d.displayName || d.name
});
return inc("/lib/util/print/print")({
div: userCard,
title: T("loginCode")
});
};
return Button({
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
marginTop: "1.5em",
marginRight: "1em"
}).tap(print);
};
})();
pages/start/startUser/07_extraPages/showLoginCodeOnce/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var loginCode;
loginCode = log.findLast("setLoginCode").value;
return page.html(Div({
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).html(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("text")), Div({
fontSize: "1.3em"
}).html(T("loginCode"), Span({
userSelect: "text",
marginLeft: "0.2em"
}).secureHtml(loginCode.toLowerCase())), inc("buttonPrint/button")(loginCode), inc("buttonDone/button")(page)));
}
};
};
})();
pages/start/startUser/07_extraPages/showLoginCodeOnce/show.ls
(function(){
return function(o){
var e, createdMethod;
if ((typeof log != 'undefined' && log !== null) && log.findLast("showLoginCodeOnce")) {
return false;
}
e = typeof log != 'undefined' && log !== null ? log.findLast("setNewUser") : void 8;
if (e && (e != null ? e.created : void 8) < new Date("2020-03-30")) {
return false;
}
createdMethod = e != null ? e.createdMethod : void 8;
if (createdMethod !== "funnel") {
return false;
}
startPage({
path: path("page/page"),
history: 0,
params: _.omit(o, ["page", "progressBar"])
});
return true;
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/00_shared/logEvent/log.ls
(function(){
return function(type){
return log.log({
event: "showSuggestRecoveryOption",
type: type
});
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/avatar/avatar.ls
(function(){
return function(page){
var avatar;
avatar = page.userDescription.avatar;
if (!avatar) {
return;
}
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "5em",
height: "5em",
borderRadius: "999px"
});
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
if (log.findLast("setEMail")) {
page.html(T("emailSet"), Div({
height: "1em"
}), Button(T("continueButton")).tap(function(){
inc("../00_shared/logEvent/log")("email set");
return inc("../../_onExtraPageDone/on")();
}));
return;
}
return page.append(inc("avatar/avatar")(page), inc("title/title")(page), inc("text/text")(page), inc("setEmailButton/button")(page), inc("skipButton/button")(page));
}
};
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/setEmailButton/button.ls
(function(){
return function(page){
return Button({
label: T("enterEmail")
}).tap(function(){
return startPage({
path: path("/pages/misc/email/edit/page"),
animation: "slideLeft",
params: {
context: "startUser",
finishFunctionPath: path("../../../verifyEmail/page/page")
}
});
});
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/skipButton/button.ls
(function(){
return function(page){
var isDirTeacher, tap;
isDirTeacher = page.userDescription.isDirTeacher;
tap = function(){
if (!isDirTeacher || ((typeof log != 'undefined' && log !== null ? log.findLast("showSuggestRecoveryOption") : void 8) == null && !((typeof log != 'undefined' && log !== null) && log.findLast("showLoginCodeOnce")))) {
return startPage({
path: path("../../02_page_loginCode/page"),
animation: "slideLeft"
});
} else {
return inc("../../../_onExtraPageDone/on")();
}
};
return Div({
margin: "0 auto"
}).html(inc("/lib/gui/link/link")({
label: T("notNow"),
iconColor: "black"
}).css({
marginTop: "1em",
padding: "0.5em"
}).tap(tap));
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/text/text.ls
(function(){
return function(page){
var text;
text = T("saveEmailText");
return Div({
margin: "1em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.7em"
}).html(text);
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/01_page_email/title/title.ls
(function(){
return function(page){
var displayName;
displayName = page.userDescription.displayName;
return Div({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em"
}).secureHtml(T("hello", displayName));
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/02_page_loginCode/buttonDone/button.ls
(function(){
return function(){
return Button({
label: T("okDone")
}).css({
marginTop: "1em"
}).tap(function(){
inc("../../00_shared/logEvent/log")("login code");
return inc("../../../_onExtraPageDone/on")();
});
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/02_page_loginCode/buttonPrintOrSave/button.ls
(function(){
return function(page, loginCode){
var ud, tap;
if (engine.isMobileApp) {
return;
}
ud = page.userDescription;
tap = function(){
var userCard;
userCard = inc("/../qrcode/userCard/userCard")({
loginCode: loginCode,
name: ud.displayName || ud.name
});
return inc("/lib/util/print/print")({
div: userCard,
title: T("myLoginCode")
});
};
return Button({
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
marginTop: "1.5em",
marginRight: "1em"
}).tap(tap);
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/02_page_loginCode/loginCode/loginCode.ls
(function(){
return function(loginCode){
return Div({
margin: "0.5em",
fontSize: "1.3em"
}).html(T("loginCode"), Span().css({
userSelect: "text"
}).secureHtml(loginCode.toLowerCase()));
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/02_page_loginCode/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var loginCode;
loginCode = log.findLast("setLoginCode").value;
page.userDescription = inc("/data/user/calcUserDescription/calc")();
return page.html(inc("text/text")(), inc("loginCode/loginCode")(loginCode), inc("buttonPrintOrSave/button")(page, loginCode), inc("buttonDone/button")());
}
};
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/02_page_loginCode/text/text.ls
(function(){
return function(){
return Div({
margin: "0 auto 1em",
width: "30em",
maxWidth: "90%"
}).html(T("writeDownCode"), engine.isMobileApp
? T("makeScreenshot")
: T("printIt"), T("dontLoseAccess"));
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
hello: {
de: "Hallo $1,",
en: "Hello $1,",
fr: "Bonjour $1,",
es: "Hola $1,",
pt: "Olá $1,"
},
email: {
de: "E-Mail:",
en: "email:",
fr: "e-mail :",
es: "correo electrónico:",
pt: "e-mail:"
},
save: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
myLoginCode: {
de: "Mein ANTON-Anmelde-Code",
en: "My ANTON login code",
fr: "Mon code de connexion ANTON",
es: "Mi clave de acceso ANTON",
pt: "Meu código de acesso ANTON"
},
saveEmailText: {
de: "Bitte speichere deine E-Mail-Adresse. Bei Verlust deiner Zugangsdaten behältst du so Zugriff auf dein Nutzerkonto und kannst weiterhin deinen Schüler/innen helfen, falls sie ihre Anmelde-Codes verlieren.",
en_gb: "Please save your email address so that you have secure access to your account and are always able to recover your pupils’ accounts.",
en: "Please save your email address so that you have secure access to your account and are always able to recover your students’ accounts.",
fr: "Nous te demandons d'enregistrer ton adresse e-mail. Ainsi tu auras un moyen d'accéder à ton compte d'utilisateur·rice même si tu perds tes autres données d'accès et tu pourras continuer à aider tes élèves s'ils·elles perdent leurs codes de connexion.",
es: "Por favor, guarda tu dirección de correo electrónico, para que tengasa un acceso seguro a tu cuenta y puedas recuperar las cuentas de tus estudiantes en todo momento. ",
pt: "Por favor, salve seu endereço de e-mail. Em caso de perda de seus dados de acesso, você poderá manter o acesso à sua conta. Assim, poderá continuar a ajudar seus alunos, caso eles percam seus códigos de acesso."
},
enterEmail: {
de: "Zur E-Mail-Eingabe",
en: "Enter email",
fr: "Entrer un e-mail",
es: "Ingresa un correo electrónico",
pt: "Inserir um e-mail"
},
okDone: {
de: "Ok, fertig!",
en: "OK, done!",
fr: "OK, terminé !",
es: "Ok, ¡listo!",
pt: "Ok, pronto!"
},
loginCode: {
de: "Anmelde-Code: ",
en: "Login code: ",
fr: "Code de connexion : ",
es: "Clave de acceso: ",
pt: "Código de acesso: "
},
writeDownCode: {
de: "Notiere dir bitte deinen Anmelde-Code oder ",
en: "Please write down your login code or ",
fr: "Merci de noter ton code de connexion quelque part ou ",
es: "Por favor, anota tu clave de acceso o ",
pt: "Por favor, anote seu código de acesso ou "
},
makeScreenshot: {
de: "mache dir einen Screenshot davon, ",
en: "take a screenshot of it ",
fr: "de faire une capture d'écran ",
es: "haz una captura de pantalla, ",
pt: "faça uma captura de tela. "
},
printIt: {
de: "drucke ihn dir aus, ",
en: "print it, ",
fr: "de l'imprimer ",
es: "imprímela, ",
pt: "imprima-o. "
},
dontLoseAccess: {
de: "damit du den Zugriff zu deinem Konto nicht verlierst!",
en: "so that you don’t lose access to your account!",
fr: "pour ne pas perdre l'accès à ton compte !",
es: "¡para que no pierdas el acceso a tu cuenta!",
pt: "Assim, você não perde o acesso à sua conta!"
},
emailSet: {
de: "E-Mail erfolgreich gesetzt!",
en: "Email successfully set!",
fr: "E-mail défini !",
es: "¡Correo electrónico establecido!",
pt: "Endereço de e-mail definido com sucesso!"
}
};
})();
pages/start/startUser/07_extraPages/suggestRecoveryOption/suggest.ls
(function(){
return function(o){
var show, decide;
show = function(){
return startPage({
path: path("01_page_email/page"),
history: 0
});
};
decide = function(){
var ud, createdMethod, ref$, groups, isGroupTeacher;
if ((typeof log != 'undefined' && log !== null) && log.findLast("setEMail")) {
return false;
}
ud = inc("/data/user/calcUserDescription/calc")();
if (ud.isDirTeacher) {
show();
return true;
}
if ((typeof log != 'undefined' && log !== null) && log.findLast("showSuggestRecoveryOption")) {
return false;
}
createdMethod = typeof log != 'undefined' && log !== null ? (ref$ = log.findLast("setNewUser")) != null ? ref$.createdMethod : void 8 : void 8;
if (createdMethod !== "funnel") {
return false;
}
groups = inc("/data/group/calcGroupDescriptions/calc")();
isGroupTeacher = inc("/data/user/isTeacher/get")() && _.find(groups, function(g){
return g.userRoles.teacher === true;
}) != null;
if (!isGroupTeacher) {
return false;
}
show();
return true;
};
return decide();
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isVerified/buttonContinue/button.ls
(function(){
return function(done){
return Div({
paddingTop: "1em"
}).html(Button(T("continueButton")).tap(done));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isVerified/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/validated.svg"),
color: Color.green[500],
size: "5em"
}).css({
margin: "1em"
});
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isVerified/isVerified.ls
(function(){
return function(done){
return Div().html(inc("icon/icon")(), inc("text/text")(), inc("buttonContinue/button")(done));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isVerified/text/text.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "90%",
margin: "0 auto"
}).html(T("emailConfirmed"));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/avatar/avatar.ls
(function(){
return function(o){
var avatar;
avatar = app.currentPage.userDescription.avatar;
if (!avatar) {
return;
}
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "5em",
height: "5em",
borderRadius: "999px"
});
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/buttonVerify/button.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/misc/email/verify/page"),
animation: "slideLeft"
});
};
return Div({
padding: "1em"
}).html(Button(T("confirmButton")).tap(tap));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/email/email.ls
(function(){
return function(mail){
return Div({
fontSize: "1.3em",
width: "20em",
maxWidth: "90%",
margin: "1em auto",
overflow: "hidden",
textOverflow: "ellipsis"
}).html(mail);
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/isntVerified.ls
(function(){
return function(mail, isVerified, done){
return Div().html(inc("avatar/avatar")(), inc("title/title")(), inc("email/email")(mail), inc("buttonVerify/button")(), Div().append(inc("linkEdit/linkEdit")(), inc("linkNotNow/linkNotNow")(done)));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/linkEdit/linkEdit.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/misc/email/edit/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")(T("changeButton")).css({
margin: 0,
padding: "0.5em"
}).tap(tap);
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/linkNotNow/linkNotNow.ls
(function(){
return function(done){
return inc("/lib/gui/link/link")(T("notNowButton")).css({
margin: 0,
padding: "0.5em"
}).tap(done);
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/isntVerified/title/title.ls
(function(){
return function(){
var displayName;
displayName = app.currentPage.userDescription.displayName;
return Div({
width: "30em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em"
}).secureHtml(T("confirmEmail", displayName));
};
})();
pages/start/startUser/07_extraPages/verifyEmail/page/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var e, mail, isVerified, done;
e = log.findLast("setEMail");
mail = e != null ? e.value : void 8;
isVerified = (e != null ? e.isVerified : void 8) || inc("/lib/util/cache/get/get")("verifiedEMail");
done = function(){
return inc("../../_onExtraPageDone/on")();
};
if (!(mail != null && mail.length) > 0) {
done();
return;
}
return page.append(isVerified
? inc("isVerified/isVerified")(done)
: inc("isntVerified/isntVerified")(mail, isVerified, done));
}
};
};
})();
pages/start/startUser/07_extraPages/verifyEmail/verify.ls
(function(){
return function(method){
var e;
e = typeof log != 'undefined' && log !== null ? log.findLast("setEMail") : void 8;
if (e == null || (e != null && e.isVerified)) {
return false;
}
startPage({
path: path("page/page"),
params: {
method: method
},
history: 0
});
return true;
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isVerified/buttonContinue/button.ls
(function(){
return function(done){
return Div().css({
paddingTop: "1em"
}).append(Button(T("continueButton")).tap(done));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isVerified/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/validated.svg"),
color: Color.green[500],
width: "5em",
height: "5em"
}).css({
margin: "1em"
});
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isVerified/isVerified.ls
(function(){
return function(done){
return Div().html(inc("icon/icon")(), inc("text/text")(), inc("buttonContinue/button")(done));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isVerified/text/text.ls
(function(){
return function(){
return Div({
width: "30em",
maxWidth: "90%",
margin: "0 auto"
}).html(T("phoneNumberConfirmed"));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/avatar/avatar.ls
(function(){
return function(o){
var avatar;
avatar = app.currentPage.userDescription.avatar;
if (!avatar) {
return;
}
return inc("/lib/gui/avatar/avatar")(avatar, "half").css({
marginBottom: "0.1em",
width: "5em",
height: "5em",
borderRadius: "999px"
});
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/buttonVerify/button.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/misc/phoneNumber/verify/page"),
animation: "slideUp"
});
};
return Div().css({
padding: "1em"
}).append(Button(T("confirmButton")).tap(click));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/isntVerified.ls
(function(){
return function(number, isVerified, done){
return Div().html(inc("avatar/avatar")(), inc("title/title")(), inc("number/number")(number), inc("buttonVerify/button")(), Div().html(inc("linkEdit/linkEdit")(), inc("linkNotNow/linkNotNow")(done)));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/linkEdit/linkEdit.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/misc/phoneNumber/edit/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")(T("changeButton")).css({
margin: 0,
padding: "0.5em"
}).tap(click);
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/linkNotNow/linkNotNow.ls
(function(){
return function(done){
return inc("/lib/gui/link/link")(T("notNowButton")).css({
margin: 0,
padding: "0.5em"
}).tap(done);
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/number/number.ls
(function(){
return function(number){
return Div().css({
fontSize: "1.3em",
padding: "1em 0",
overflow: "hidden",
textOverflow: "ellipsis"
}).html(inc("/lib/util/formatPhoneNumber/format")(number));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/isntVerified/title/title.ls
(function(){
return function(){
var displayName;
displayName = app.currentPage.userDescription.displayName;
return Div().css({
width: "20em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.4em"
}).secureHtml(T("confirmPhoneNumber", displayName));
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/page/page.ls
(function(){
return function(page){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var e, number, isVerified, done;
e = log.findLast("setPhoneNumber");
number = e != null ? e.value : void 8;
isVerified = (e != null ? e.isVerified : void 8) || inc("/lib/util/cache/get/get")("verifiedPhoneNumber");
done = function(){
return inc("../../_onExtraPageDone/on")();
};
if (!(number != null && number.length) > 0) {
done();
return;
}
return page.append(isVerified
? inc("isVerified/isVerified")(done)
: inc("isntVerified/isntVerified")(number, isVerified, done));
}
};
};
})();
pages/start/startUser/07_extraPages/verifyPhoneNumber/verify.ls
(function(){
return function(method){
var e;
e = typeof log != 'undefined' && log !== null ? log.findLast("setPhoneNumber") : void 8;
if (e == null || (e != null && e.isVerified)) {
return false;
}
startPage({
path: path("page/page"),
params: {
method: method
},
history: 0
});
return true;
};
})();
pages/start/startUser/08_start/start.ls
(function(){
return function(o){
var category, ref$, ref1$;
o == null && (o = {});
if (window.log == null) {
return;
}
if (window.PIXI == null) {
inc("/../pixi/init")();
}
category = (ref$ = o.startNavCategory) != null
? ref$
: (ref$ = (ref1$ = log.findLast("setLastNavCategory")) != null ? ref1$.value : void 8) != null ? ref$ : "content";
if ((typeof ClassKitPlugin != 'undefined' && ClassKitPlugin !== null ? ClassKitPlugin.lastIdentifierPath : void 8) != null && new Date() - new Date(typeof ClassKitPlugin != 'undefined' && ClassKitPlugin !== null ? ClassKitPlugin.lastIdentifierDate : void 8) < 20 * 60 * 1000) {
return inc("/lib/init/classKit/handleDeeplinks/startActivity/start")(ClassKitPlugin.lastIdentifierPath);
} else if (engine.contentDeeplink && new Date() - engine.contentDeeplink.setAt < 20 * 60 * 1000) {
if (!inc("/lib/init/startFirstPage/deepLinkContent/deepLinkContent")(engine.contentDeeplink.pageUrl)) {
inc("startLastCategory/start")(category);
}
return ref$ = engine.contentDeeplink, delete engine.contentDeeplink, ref$;
} else {
return inc("startLastCategory/start")(category);
}
};
})();
pages/start/startUser/08_start/startLastCategory/start.ls
(function(){
return function(category){
var backHistory;
backHistory = {
absolute: 2
};
if (category === "groups") {
return inc("/pages/group/group/start")({
history: backHistory
});
} else if (category === "games") {
return startPage({
path: path("/pages/games/01_gamesList/page"),
animation: "fadeIn",
history: backHistory
});
} else if (deviceLog['var']("enableLearnBetaTab")) {
return inc("/pages/learnBeta/start")({
history: backHistory
});
} else if (category === "learnList") {
return inc("/pages/learnList/start")({
history: backHistory
});
} else {
return inc("/pages/content/start")({
history: backHistory
});
}
};
})();
pages/start/startUser/_t.ls
(function(){
return {
subscribeError: {
de: "Ups, es gab ein Problem beim Anmelden. Bitte probier es nochmal und stell sicher, dass du online bist!",
en_gb: "Oops, an error occurred while logging in. Please try again and make sure you are connected to the internet!",
en: "Oops, an error occurred while logging in. Please try again and make sure you are online!",
fr: "Oups… Une erreur s'est produite pendant la connexion. Merci de réessayer en t'assurant que tu es en ligne !",
es: "¡Ups! Hubo un problema con tu registro. Por favor, inténtalo nuevamente y asegúrate de que estés conectado.",
pt: "Ops! Ocorreu um erro ao efetuar o login. Por favor, tente novamente e certifique-se de que você está online."
}
};
})();
pages/start/startUser/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
var p, o;
p = page.params;
if (Store("useAuthToken") && p.authToken) {
inc("/lib/util/storedAuthToken/set/set")(p.logId, p.authToken);
}
o = {
logId: p.logId,
loginType: p.loginType,
rememberUser: p.rememberUser,
startNavCategory: p.startNavCategory,
page: page
};
return inc("01_rememberUser/rememberUser")(o);
}
};
};
})();
pages/start/welcome/_calcSpecial/calc.ls
(function(){
return function(o){
var specialDescriptions, d, onDone, ref$;
specialDescriptions = inc("specials/specials")();
d = _.find(specialDescriptions, "isActive");
if (!d) {
o.onDone();
return;
}
onDone = function(){
var ref$, e;
if (!((ref$ = projects.info()[d.project]) != null && ref$.isLoaded)) {
o.onError("load_project_error", d);
return;
}
if (d.logo && inc(d.logo, {
silentError: true
}).includeError) {
o.onError("load_logo_error", d);
return;
}
if (d.logo) {
try {
d.logoDiv = inc(d.logo)();
} catch (e$) {
e = e$;
o.onError("include_logo_error", d);
return;
}
}
if (d.background && inc(d.background, {
silentError: true
}).includeError) {
o.onError("load_background_error", d);
return;
}
if (d.background) {
try {
d.backgroundDiv = inc(d.background)();
} catch (e$) {
e = e$;
debug(e);
o.onError("include_background_error", d);
return;
}
}
return o.onDone(d);
};
if ((ref$ = projects.info()[d.project]) != null && ref$.isLoaded) {
return onDone();
} else {
return inc("/lib/util/loadProjects/load")({
projectDescriptions: [{
project: d.project,
timeout: "12,7"
}],
onDone: onDone,
onProjectMissingError: onDone,
logResults: false
});
}
};
})();
pages/start/welcome/_calcSpecial/specials/specials.ls
(function(){
return function(){
var d, specialDescriptions;
d = inc("/lib/util/formatDate2/format")();
return specialDescriptions = [
{
id: "xmas",
logo: path("/../app01-welcome-specials/specials/xmas/logo/logo-xmas.ls"),
background: path("/../app01-welcome-specials/specials/xmas/background/background-xmas.ls"),
project: "app01-welcome-specials",
isActive: d.specialDays.isChristmasPeriod
}, {
id: "easter",
logo: path("/../app01-welcome-specials/specials/easter/logo/logo-easter.ls"),
background: null,
project: "app01-welcome-specials",
isActive: d.specialDays.isEaster
}, {
id: "newYear",
logo: path("/../app01-welcome-specials/specials/newYear/logo/logo-newYear.ls"),
background: path("/../app01-welcome-specials/specials/newYear/background/background-newYear.ls"),
project: "app01-welcome-specials",
isActive: d.specialDays.isNewYear
}, {
id: "halloween",
logo: path("/../app01-welcome-specials/specials/halloween/logo/logo-halloween.ls"),
background: null,
project: "app01-welcome-specials",
isActive: d.specialDays.isHalloween
}
];
};
})();
pages/start/welcome/_shared/_t.ls
(function(){
return {
loginWith: {
de: "Login mit Code, E-Mail...",
en: "Log in with code, email...",
fr: "Me connecter avec un code, un e-mail…",
es: "Iniciar sesión con clave, correo-e...",
pt: "Efetuar login com código de acesso, e-mail..."
},
createNewUser: {
de: "Neues Nutzerkonto erstellen",
en: "Create new account",
fr: "Créer un nouveau compte",
es: "Crear una cuenta nueva",
pt: "Criar nova conta"
},
wantToDo: {
de: "Was möchtest du machen?",
en: "What would you like to do?",
fr: "Que veux-tu faire ?",
es: "¿Qué es lo que quieres hacer?",
pt: "O que você gostaria de fazer?"
},
startOtherUser: {
de: "Anderes Nutzerkonto",
en: "Log in with another account",
fr: "Autre compte",
es: "Otra cuenta",
pt: "Outra conta"
},
antonTitleBot: {
de: "Lerne einfach mit Spaß für die Schule!",
en: "The free learning app for school",
fr: "Apprends en t'amusant !",
es: "¡Diviértete aprendiendo para la escuela!",
pt: "Divirta-se aprendendo!"
},
antonTitle: {
de: "Lerne einfach mit Spaß für die Schule!",
en: "The free learning app for school",
fr: "Apprends en t'amusant !",
es: "¡Diviértete aprendiendo para la escuela!",
pt: "Divirta-se aprendendo!"
}
};
})();
pages/start/welcome/_shared/background/background.ls
(function(){
return function(page){
var ref$;
if (!((ref$ = page.specialDescription) != null && ref$.backgroundDiv) || engine.isBotMode) {
return;
}
page.specialDescription.backgroundDiv.onDomAppend(function(){
var e;
try {
return page.specialDescription.backgroundDiv.start(page);
} catch (e$) {
e = e$;
deviceLog.log({
event: "debugShowWelcomePageSpecialError",
error: "start_background_div_error",
id: page.specialDescription.id,
project: page.specialDescription.project,
logo: page.specialDescription.logo,
background: page.specialDescription.background
});
return page.specialDescription.backgroundDiv.remove();
}
});
return page.specialDescription.backgroundDiv;
};
})();
pages/start/welcome/_shared/logo/logo.ls
(function(){
return function(page){
var ref$, logo;
if (((ref$ = page.specialDescription) != null && ref$.logoDiv) && !engine.isBotMode) {
logo = page.specialDescription.logoDiv;
} else if (window.lottie && !engine.isBotMode) {
logo = inc("/lib/gui/lottie/lottie")({
path: path("/lib/lottie/anton-logo.json"),
loop: false,
width: "3.7em"
}).css({
display: "inline-block",
fontSize: "2em",
marginBottom: "0.4em",
marginTop: "1em"
});
} else {
logo = SvgIcon({
svg: path("/lib/svg/logo/anton-logo.svg"),
width: "3.7em"
}).css({
display: "inline-block",
fontSize: "2em",
marginBottom: "0.4em",
marginTop: "1em"
});
}
return logo;
};
})();
pages/start/welcome/_shared/main/buttonsLogInOrNewUser/buttons.ls
(function(){
return function(){
var button;
button = function(label, pagePath){
return Button({
label: label,
labelAllowWrap: true
}).css({
display: "block",
padding: "0.8em",
textAlign: "center",
maxWidth: "90vw",
margin: "0 auto"
}).tap(!engine.isBotMode ? function(){
return startPage({
path: pagePath,
animation: "slideLeft"
});
} : void 8);
};
return Div({
display: "inline-block"
}).append(button(T("loginWith"), path("/pages/start/login/01_step1/page")), " ", button(T("createNewUser"), path("/pages/start/introFunnel/01_start/page")));
};
})();
pages/start/welcome/_shared/main/main.ls
(function(){
return function(){
var totalUsers, update, div;
totalUsers = _.keys(window.userLogs).length;
update = function(){
return div.replaceWith(inc(THISFILE)());
};
div = Div().addClass("onSubscribeLogsDone\nonNewLogEvents_setAvatar\nonNewLogEvents_setName").html(totalUsers === 0
? inc("buttonsLogInOrNewUser/buttons")()
: [inc("users/users")(), inc("otherUser/other")()]);
div.update = update;
div.onNewLogEvents = update;
return div;
};
})();
pages/start/welcome/_shared/main/otherUser/other.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("page/page"),
animation: "slideLeft"
});
};
return inc("/lib/gui/link/link")({
label: T("startOtherUser")
}).css({
marginTop: "0.6em"
}).tap(click);
};
})();
pages/start/welcome/_shared/main/otherUser/page/page.ls
(function(){
return function(page){
return {
statusBarColor: Color.white,
top: function(){
return inc("/addons/topbarWhiteBack/topbar")();
},
start: function(){
return page.append(inc("text/text")(), inc("../../buttonsLogInOrNewUser/buttons")());
}
};
};
})();
pages/start/welcome/_shared/main/otherUser/page/text/text.ls
(function(){
return function(){
return Div().css({
padding: "0 2em 2em",
lineHeight: "1.5em"
}).html(T("wantToDo"));
};
})();
pages/start/welcome/_shared/main/users/_shared/avatar/avatar.ls
(function(){
return function(description){
return inc("/lib/gui/avatar/avatar")(description, "half").css({
flex: "0 0 auto",
borderRadius: "999px",
overflow: "hidden",
marginTop: "-0.1em"
});
};
})();
pages/start/welcome/_shared/main/users/_shared/button/button.ls
(function(){
return function(avatar, displayName){
var updateLayout, div, that, nameDiv;
updateLayout = function(smallCards){
div.css({
width: smallCards ? "8em" : "10em",
height: smallCards ? "4.2em" : "4.7em"
});
return typeof nameDiv != 'undefined' && nameDiv !== null ? nameDiv.css({
fontSize: smallCards ? "0.9em" : "1em"
}) : void 8;
};
div = Div({
display: "inline-flex",
padding: "0.6em",
margin: "0.4em",
overflow: "hidden",
backgroundColor: Color.grey[300],
textAlign: "left",
verticalAlign: "top"
}).html((that = avatar) ? inc("../avatar/avatar")(that) : void 8, (that = displayName) ? nameDiv = inc("../displayName/name")(that) : void 8);
div.updateLayout = updateLayout;
return div;
};
})();
pages/start/welcome/_shared/main/users/_shared/displayName/name.ls
(function(){
return function(name){
return Div({
display: "-webkit-box",
flex: "1 1 auto",
marginLeft: "0.2em",
webkitLineClamp: 3,
webkitBoxOrient: "vertical",
maxHeight: "3.6em",
lineHeight: "1.2em",
overflow: "hidden",
wordWrap: "break-word"
}).secureHtml(name);
};
})();
pages/start/welcome/_shared/main/users/_shared/startUser/start.ls
(function(){
return function(logId){
return startPage({
path: path("/pages/start/startUser/page"),
params: {
logId: logId,
loginType: "rememberedUser",
rememberUser: "yes"
}
});
};
})();
pages/start/welcome/_shared/main/users/authTokenInvalid/authTokenInvalid.ls
(function(){
return function(log){
var n, tap;
n = log.authToken || "";
n = n.split("[[displayName: ")[1] || "???";
n = n.split("]]")[0];
tap = function(){
return startPage({
path: path("/pages/start/login/relogin/01_choose/page"),
animation: "slideLeft",
params: {
logId: log.id()
}
});
};
return inc("../_shared/button/button")({}, n).append(inc("iconLock/icon")()).tap(tap);
};
})();
pages/start/welcome/_shared/main/users/authTokenInvalid/iconLock/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/lock.svg"),
color: Color.grey[800],
size: "0.8em"
}).css({
position: "absolute",
right: "0.2em",
top: "0.2em"
});
};
})();
pages/start/welcome/_shared/main/users/spinner/spinner.ls
(function(){
return function(log){
return inc("../_shared/button/button")().css({
background: Color.grey[200]
}).html(inc("/lib/gui/spinner/spinner")()).tap(engine.isDebug ? function(){
return inc("../_shared/startUser/start")(log.id());
} : void 8);
};
})();
pages/start/welcome/_shared/main/users/user/iconMarkForDelete/icon.ls
(function(){
return function(){
return SvgIcon(path("/lib/svg/illustration/alert.svg")).css({
position: "absolute",
left: "0.5em",
bottom: "0.5em"
});
};
})();
pages/start/welcome/_shared/main/users/user/user.ls
(function(){
return function(log){
var ud, tap, tapLongDebug;
ud = inc("/data/user/calcUserDescription/calc")(log);
tap = function(){
return inc("../_shared/startUser/start")(log.id());
};
tapLongDebug = function(){
debug("debug longClick: showing relogin page");
return startPage({
path: path("/pages/start/login/relogin/01_choose/page"),
animation: "slideLeft",
params: {
logId: log.id()
}
});
};
return inc("../_shared/button/button")(ud.avatar, ud.displayName).append(ud.markForDelete ? inc("iconMarkForDelete/icon")() : void 8).tap({
up: tap,
longDown: engine.isDebug && Store("useAuthToken") ? tapLongDebug : void 8
});
};
})();
pages/start/welcome/_shared/main/users/users.ls
(function(){
return function(){
var updateLayout, div, userButtons, log, f;
updateLayout = function(){
var smallCards, i$, ref$, len$, button, results$ = [];
smallCards = _.keys(window.userLogs).length > 1 && body.width() < 520;
for (i$ = 0, len$ = (ref$ = userButtons).length; i$ < len$; ++i$) {
button = ref$[i$];
results$.push(button.updateLayout(smallCards));
}
return results$;
};
div = Div({
width: "35em",
maxWidth: "95%",
margin: "0 auto 0.3em"
}).html(userButtons = (function(){
var i$, ref$, results$ = [];
for (i$ in ref$ = window.userLogs) {
log = ref$[i$];
f = Store("useAuthToken") && _.startsWith(log.authToken, "T-invalid")
? inc("authTokenInvalid/authTokenInvalid")
: !log.findLast("setName")
? inc("spinner/spinner")
: inc("user/user");
results$.push(f(log));
}
return results$;
}())).onWindowResize(_.throttle(updateLayout, 50));
updateLayout();
return div;
};
})();
pages/start/welcome/_shared/title/title.ls
(function(){
return function(){
return Div().css({
padding: "0 1em 1.5em"
}).append(inc("/lib/seo/element/h1/h1")().html(engine.isBotMode
? T("antonTitleBot")
: T("antonTitle")));
};
})();
pages/start/welcome/_topbar/branchInfo/branchInfo.ls
(function(){
return function(){
var branch, ref$;
if (!engine.isDebug) {
return;
}
branch = (ref$ = projects.info()) != null ? ref$.app01.branch : void 8;
return Div({
fontSize: "0.6em",
color: Color.grey[400],
paddingTop: "0.3em",
pointerEvents: "none",
textAlign: "center"
}).append(branch);
};
})();
pages/start/welcome/_topbar/engineVersion/engineVersion.ls
(function(){
return function(){
if (!engine.isDebug) {
return;
}
return Div({
fontSize: "0.6em",
color: Color.grey[400],
paddingTop: "0.3em",
textAlign: "center"
}).append(engine.clientVersion).tap({
tapZone: "2em",
up: function(){
var e;
e = deviceLog.findLast("deviceDebugLoadProjects");
return debug(e != null ? e.projectsByStatus : void 8);
}
});
};
})();
pages/start/welcome/_topbar/guiLanguage/changeDeviceLanguagePopup/_t.ls
(function(){
return {
change: {
de: "Sprache ändern",
en: "Change language",
fr: "Changer de langue",
es: "Cambiar de idioma",
pt: "Mudar idioma"
},
info1: {
de: "Wähle die Sprache der ANTON-Startseite aus:",
en: "Choose the language of the ANTON homepage:",
fr: "Choisis la langue de la page d'accueil d'ANTON :",
es: "Elige el idioma para la página de inicio de ANTON: ",
pt: "Escolha o idioma para a página inicial de ANTON:"
},
info2: {
de: "Beachte: Für dein Nutzerkonto stellst du die Sprachversion in deinen Einstellungen um.",
en_gb: "Note: you can change the language version for your account in your settings.",
en: "Note: for your account you can change the language version in your settings.",
fr: "À noter : pour ton compte tu peux changer la langue d'affichage dans tes paramètres.",
es: "Nota: puedes cambiar la versión, según el idioma que prefieras, en los ajustes de tu cuenta.",
pt: "Nota: você pode mudar o idioma da sua conta em configurações."
}
};
})();
pages/start/welcome/_topbar/guiLanguage/changeDeviceLanguagePopup/popup.ls
(function(){
return function(){
var o, change, div, popup;
o = {
guiLanguage: engine.guiLanguage
};
change = function(){
if (o.guiLanguage === engine.guiLanguage) {
return popup.close();
} else {
inc("/lib/util/setGuiLanguageDevice/set")(o.guiLanguage);
return startPage({
history: 0
});
}
};
o.update = function(){
return div.html(T("info1"), Div({
height: "0.5em"
}), inc("row/row")(o, "de"), inc("row/row")(o, "en_us"), inc("row/row")(o, "en_gb"), inc("row/row")(o, "fr"), inc("row/row")(o, "es"), inc("row/row")(o, "pt"), T("info2"), Div({
height: "1em"
}), Div({
textAlign: "center"
}).html(Button().html(T("change")).tap(function(){
popup.close();
return change();
})));
};
div = Div({
margin: "1em",
textAlign: "left",
lineHeight: "1.5em"
});
o.update();
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/start/welcome/_topbar/guiLanguage/changeDeviceLanguagePopup/row/checkIcon/icon.ls
(function(){
return function(o, guiLanguage){
return SvgIcon({
svg: o.guiLanguage === guiLanguage
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg")
}).css({
marginRight: "0.2em",
flex: "0 0 auto"
});
};
})();
pages/start/welcome/_topbar/guiLanguage/changeDeviceLanguagePopup/row/language/language.ls
(function(){
return function(lang){
return Div().css({
marginTop: "-0.05em"
}).append(lang === "de"
? "Deutsch"
: lang === "fr"
? "Français"
: lang === "es"
? "Español"
: lang === "pt"
? "Português (BR)"
: lang === "en_gb" ? "English (UK)" : "English (US)");
};
})();
pages/start/welcome/_topbar/guiLanguage/changeDeviceLanguagePopup/row/row.ls
(function(){
return function(o, guiLanguage){
return Div({
display: "flex",
alignItems: "flex-start",
marginBottom: "0.5em",
padding: "0.3em 0"
}).html(Div({
display: "flex",
flexDirection: "column",
flex: "1 1 auto",
textAlign: "left",
alignItems: "flex-start",
marginLeft: "0.3em"
}).html(Div({
display: "flex",
verticalAlign: "top"
}).html(inc("checkIcon/icon")(o, guiLanguage), inc("language/language")(guiLanguage)))).tap(function(){
o.guiLanguage = guiLanguage;
return o.update();
});
};
})();
pages/start/welcome/_topbar/guiLanguage/guiLanguage.ls
(function(){
return function(){
return Div({
display: "flex",
position: "absolute",
top: 0,
right: 0,
padding: "0.5em",
margin: "0 0.4em",
zIndex: 999
}).append(Div().html(twitch({
de: "DE",
en_us: "EN (US)",
en_gb: "EN (UK)",
fr: "FR",
es: "ES",
pt: "PT (BR)"
})).css({
fontSize: "0.7em",
color: Color.grey[450]
}), SvgIcon({
svg: path("/lib/svg/icon/arrow-down-mini.svg"),
color: Color.grey[400]
})).tap(function(){
return inc("changeDeviceLanguagePopup/popup")();
});
};
})();
pages/start/welcome/_topbar/loggerReadOnlyInfo/loggerReadOnlyInfo.ls
(function(){
return function(){
var readOnly, ref$;
readOnly = (ref$ = Store("debugLoggerReadOnly")) != null ? ref$ : false;
if (readOnly !== true) {
return;
}
return Div().css({
fontSize: "0.6em",
color: Color.red[500],
textAlign: "center",
pointerEvents: "none"
}).append("Logger read only");
};
})();
pages/start/welcome/_topbar/topbar.ls
(function(){
return function(){
app.currentPage.top.css({
boxShadow: ""
});
return Div({
height: 0
}).addClass("debugTopbar androidBackCloseApp").html(inc("engineVersion/engineVersion")(), inc("branchInfo/branchInfo")(), inc("loggerReadOnlyInfo/loggerReadOnlyInfo")(), inc("guiLanguage/guiLanguage")());
};
})();
pages/start/welcome/_urlDescription/_t.ls
(function(){
return {
title: {
de: "Lerne kostenlos mit Übungen für Mathe, Deutsch, Grundschule bis Gymnasium",
en_gb: "Learn for free with lessons in English, maths, science, languages, geography, music and PSHE - from Reception to KS3.",
en: "Learn for free with lessons in English language arts, math, science, biology, physics, geography, social studies, music, Spanish and other languages, Pre-K to Grade 8",
fr: "Apprends gratuitement en t'amusant avec des exercices de français, maths, anglais, allemand, espagnol, italien, sciences et musique, de la maternelle jusqu'au CM2.",
es: "Aprende gratuitamente Matemáticas, Español, Ciencias Naturales, Inglés, Alemán y Música desde preescolar hasta secundaria.",
pt: "Aprenda gratuitamente com exercícios de matemática, língua portuguesa, ciências e inglês para o Ensino Fundamental I, uma seção só para a Educação Infantil, além de alemão, espanhol, francês e italiano como línguas estrangeiras. Em breve outras disciplinas e séries estarão disponíveis."
},
meta: {
de: "ANTON ist die Lern-App für die Schule. Deutsch und Mathematik Übungen, kostenlos und ohne Werbung für fremde Produkte. Lerne online oder mit der iOS-App oder Android-App alle Inhalte des 1. Klasse - 13. Klasse Lehrplans.",
en_gb: "ANTON is the learning app for school. English, maths, science, languages, geography, music and PSHE.Free and with no ads. All subjects match the national curriculum. Learn online or with the iOS app or Android app.",
en: "ANTON is the learning app for school. English language arts, math, science, biology, physics, social studies, music, Spanish and other languages. Free and no ads. All subjects meeting State Standards. Learn online or with the iOS app or Android app.",
fr: "ANTON est la nouvelle application éducative pour l'école maternelle et élémentaire. Des exercices de français, maths, anglais, allemand, espagnol, italien, sciences et musique conformes aux programmes scolaires, gratuits et sans publicité. Apprends en ligne et en t'amusant avec l'app iOS ou l'app Android. ",
es: "ANTON es la nueva aplicación para preescolar, primaria y secundaria. Matemáticas, Español, Ciencias Naturales, Conocimiento del Medio, Historia, Música, Inglés, Alemán, Francés, Italiano, Portugués y Náhuatl. Gratis y sin publicidad. Asignaturas adecuadas al plan de estudios nacional. Aprende en línea de forma divertida con iOS-App o con Android-App",
pt: "O ANTON é o novo aplicativo de aprendizagem para o Ensino Fundamental I e para a Educação Infantil. Matemática, língua portuguesa, ciências e inglês, além de alemão, espanhol, francês e italiano como línguas estrangeiras. Grátis e sem anúncios. Em conformidade com a Base Nacional Comum Curricular (BNCC). Aprenda online e se divertindo com iOS-App ou com Android-App."
}
};
})();
pages/start/welcome/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: "",
title: T("title"),
metaDescription: T("meta")
};
};
})();
pages/start/welcome/app/_t.ls
(function(){
return {
whatIsAnton: {
de: "Was ist ANTON?",
en: "What is ANTON?",
fr: "ANTON, c'est quoi ?",
es: "¿Qué es ANTON?",
pt: "O que é o ANTON?"
}
};
})();
pages/start/welcome/app/app.ls
(function(){
return function(page){
var divs;
return divs = [
inc("../_shared/background/background")(page), Div({
padding: "0.4em 0"
}).append(inc("../_shared/logo/logo")(page), inc("../_shared/title/title")(), inc("/lib/gui/maintenanceMessage/message")("showOnWelcomePage"), inc("../_shared/main/main")(), inc("whatIsAntonLink/link")())
];
};
})();
pages/start/welcome/app/whatIsAntonLink/link.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/static/tour/page"),
animation: "slideUp"
});
};
return Div({
margin: "1em 0"
}).html(inc("/lib/gui/link/link")(T("whatIsAnton")).css({
marginLeft: "0.8em"
}).tap({
up: tap,
tapZone: "0.8em 2em"
}));
};
})();
pages/start/welcome/browser/0_above/above.ls
(function(){
return function(page){
return Div({
display: "flex",
flexDirection: "column",
alignItems: "stretch",
minHeight: engine.isBotMode ? "600px" : "var(--screenHeight)"
}).html(Div({
flex: "1 1 auto",
display: "flex"
}).html(Div({
flex: "1 1 auto"
}).html(inc("../../_shared/logo/logo")(page), inc("../../_shared/title/title")(), inc("/lib/gui/maintenanceMessage/message")("showOnWelcomePage"), inc("../../_shared/main/main")())));
};
})();
pages/start/welcome/browser/1_whatIsAnton/arrows/arrows.ls
(function(){
return function(){
var i;
return Div({
padding: "1em 0.3em 0.3em"
}).html((function(){
var i$, results$ = [];
for (i$ = 1; i$ <= 3; ++i$) {
i = i$;
results$.push(SvgIcon(path("/lib/svg/icon/arrow-down-mini.svg")).css({
display: "block",
marginTop: "-0.7em"
}));
}
return results$;
}()));
};
})();
pages/start/welcome/browser/1_whatIsAnton/label/label.ls
(function(){
return function(){
return Div().html(T("whatIsAnton"));
};
})();
pages/start/welcome/browser/1_whatIsAnton/whatIsAnton.ls
(function(){
return function(){
var tap;
tap = function(){
return app.currentPage.scrollElementIntoView(this, {
top: true
});
};
return Div({
flex: "0 0 auto",
display: "flex",
paddingTop: "2em",
borderBottom: "2px solid " + Color.grey[100]
}).html(Div({
padding: "0.4em 0.1em 0.2em 0.7em",
backgroundColor: Color.grey[100],
display: "flex"
}).html(inc("label/label")(), inc("arrows/arrows")()).tap({
up: tap,
animation: "hover",
longDown: engine.isDebug ? function(){
debug("debug long click: starting static/tour");
return startPage({
path: path("/pages/static/tour/page"),
animation: "slideUp"
});
} : void 8
}));
};
})();
pages/start/welcome/browser/2_below/below.ls
(function(){
return function(){
var i, b;
i = inc("image/image");
b = inc("block/block");
return Div({
width: "35em",
maxWidth: "90%",
margin: "0 auto",
paddingTop: "5em"
}).html(Style().html("a {text-decoration: none; color: rgb(25, 118, 210)}"), twitch({
de: inc("circles/de/circles")(i, b),
en: inc("circles/en_us/circles")(i, b),
en_gb: inc("circles/en_gb/circles")(i, b),
fr: inc("circles/fr/circles")(i, b),
es: inc("circles/es/circles")(i, b),
pt: inc("circles/pt/circles")(i, b)
}));
};
})();
pages/start/welcome/browser/2_below/block/block.ls
(function(){
return function(visible, h2, p){
if (!visible) {
return;
}
return Div({
display: "flex",
padding: "1em 0 4em",
flexDirection: "column",
alignItems: "stretch",
lineHeight: "1.5em"
}).html(inc("/lib/seo/element/h2/h2")().css({
padding: "0.5em 0",
fontWeight: "bold",
fontSize: "1.2em"
}).html(h2), document.createElement("p").css({
padding: 0,
margin: 0,
fontSize: "1em"
}).html(p));
};
})();
pages/start/welcome/browser/2_below/circles/de/circles.ls
(function(){
return function(i, b){
var all, gb, u, circles;
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 1), b(u, T("appForSchool"), T("allDevices2")), b(gb, T("easyLearningBot"), T("marketingText2Bot")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 3), b(all, T("free1"), T("free2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 7), b(all, T("flagText"), T("flagText2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 10), b(u, T("eng1"), T("eng2")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/circles/en_gb/circles.ls
(function(){
return function(i, b){
var all, gb, u, circles;
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 3), b(all, T("free1"), T("free2")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 1), b(all, T("allDevices"), T("allDevices2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 7), b(all, T("flagText"), T("flagText2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/circles/en_us/circles.ls
(function(){
return function(i, b){
var standardButton, all, gb, u, circles;
standardButton = Div().html(Button({
label: T("seeMore"),
icon: path("/lib/svg/icon/arrow-right-small.svg"),
iconColor: Color.grey[700],
iconPosition: "right"
}).css({
marginTop: "1em"
}).tap(function(){
return startPage({
path: path("/pages/standards/loadingPage/page"),
animation: "slideUp"
});
}));
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 3), b(all, T("free1"), T("free2")), i(u, 7), b(u, T("flagText"), Span().html(T("flagText2"), standardButton)), b(gb, T("flagText"), T("flagText2")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 1), b(all, T("allDevices"), T("allDevices2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/circles/es/circles.ls
(function(){
return function(i, b){
var all, gb, u, circles;
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 3), b(all, T("free1"), T("free2")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 1), b(all, T("allDevices"), T("allDevices2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 7), b(all, T("flagText"), T("flagText2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 10), b(u, T("eng1"), T("eng2")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/circles/fr/circles.ls
(function(){
return function(i, b){
var all, gb, u, circles;
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 3), b(all, T("free1"), T("free2")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 1), b(all, T("allDevices"), T("allDevices2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 7), b(all, T("flagText"), T("flagText2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 10), b(u, T("eng1"), T("eng2")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/circles/pt/circles.ls
(function(){
return function(i, b){
var all, gb, u, circles;
all = true;
gb = engine.isBotMode;
u = !gb;
circles = [i(u, 3), b(all, T("free1"), T("free2")), i(u, 2), b(u, T("topics"), T("topics2")), b(gb, T("topicsBot"), T("topics2Bot")), i(u, 1), b(all, T("allDevices"), T("allDevices2")), i(u, 4), b(u, T("funLearning"), T("muchContent")), b(gb, T("funBot"), T("muchContentBot")), i(u, 5), b(all, T("teacherAndClass"), T("teacherAndClass2")), i(u, 6), b(all, T("rewards1"), T("rewards2")), i(u, 7), b(all, T("flagText"), T("flagText2")), i(u, 8), b(u, T("math1"), T("math2")), b(gb, T("math1Bot"), T("math2Bot")), i(u, 9), b(u, T("german1"), T("german2")), b(gb, T("german1Bot"), T("german2Bot")), i(u, 10), b(u, T("eng1"), T("eng2")), i(u, 11), b(u, T("sci1"), T("sci2")), i(u, 12), b(u, T("mus1"), T("mus2"))];
if (gb) {
circles = circles.concat(inc("../../plans/plans")());
}
return circles;
};
})();
pages/start/welcome/browser/2_below/image/ids/ids.ls
(function(){
return function(){
var ids;
return ids = {
1: {
x: -0.3,
y: -0.3,
s: 1,
id: "solocode_devices"
},
2: {
x: 0,
y: 0,
s: 1.3,
id: twitch({
de: "solocode_190411-001",
en: "solocode_what-is-anton-content-en",
en_gb: "solocode_what-is-anton-content-en-gb_crop-36-0-512-512",
fr: "solocode_screen-math-1-fr_crop-0-292-746-746",
es: "solocode_welcome-screen-math-es_crop-0-283-768-768",
pt: "solocode_welcome_screen_pt_content"
})
},
3: {
x: -2.2,
y: -1,
s: 1.5,
id: "solocode_170823-01"
},
4: {
x: -0.8,
y: -1.8,
s: 0.9,
id: "solocode_170823-08"
},
5: {
x: 0,
y: 0,
s: 1,
id: twitch({
en: "solocode_about-anton-welcome-page-en",
fr: "solocode_about-anton-welcome-page-fr",
de: "solocode_about-anton-welcome-page-de",
es: "solocode_about-anton-welcome-page-es",
pt: "solocode_about-anton-welcome-page-pt"
})
},
6: {
x: 0,
y: 0,
s: 1.1,
id: "solocode_190411-002"
},
7: twitch({
en_us: {
x: -3,
y: 0,
s: 1.9,
id: "solocode_533"
},
en_gb: {
x: -2.6,
y: 0,
s: 1.6,
id: "solocode_234"
},
'default': {
x: -2.2,
y: -0.2,
s: 1.5,
id: "pixabay_2313980"
}
}),
8: {
x: twitch({
en_us: 0.5,
def: -0.3
}),
y: twitch({
en_us: 0.5,
def: -0.3
}),
s: twitch({
en_us: 0.8,
def: 1
}),
id: twitch({
de: "solocode_190411-003",
en_us: "solocode_c7a40ac517",
def: "solocode_screenshot-mat-2"
})
},
9: {
x: twitch({
pt: -0.3,
def: 0
}),
y: twitch({
pt: -1.8,
def: 0
}),
s: 1,
id: twitch({
de: "solocode_170823-05",
en: "solocode_170823-05",
fr: "solocode_screenshot-alphabet",
es: "solocode_welcome-mama-es",
pt: "solocode_welcome_screen_pt_language_arts"
})
},
10: {
x: -0.2,
y: 0.1,
s: 0.95,
id: "solocode_17092021-1"
},
11: {
x: -0.3,
y: -0.3,
s: 1,
id: "solocode_00001"
},
12: {
x: 0.3,
y: 0.4,
s: 0.9,
id: "solocode_190409-01"
}
};
};
})();
pages/start/welcome/browser/2_below/image/image.ls
(function(){
return function(visible, id){
var ids, i;
if (!visible) {
return;
}
ids = inc("ids/ids")();
i = ids[id];
return inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: i.id,
x: i.x + "em",
y: i.y + "em",
scale: i.s,
size: "8em",
fileFolder: "media/tour/_images",
onScopeRender: true,
etag: "any"
});
};
})();
pages/start/welcome/browser/2_below/plans/plan/plan.ls
(function(){
return function(pd){
var click;
click = function(){
return startPage({
path: path("/pages/content/plan/page"),
params: {
planPath: pd.planPath,
planTitle: pd.displayName
}
});
};
return Div({
display: "inline-block",
backgroundColor: Color.grey[200],
margin: "0.3em",
padding: "0.6em 0.5em"
}).html(inc("/lib/seo/element/a2/a")({
html: pd.displayName,
pageUrl: pd.pageUrl
})).tap(click);
};
})();
pages/start/welcome/browser/2_below/plans/plans.ls
(function(){
return function(){
var pds, pd;
pds = inc("/data/content/calcPlanDescriptions/calc")();
pds = _.filter(pds, function(pd){
return pd.subject !== "debug" && !_.startsWith(pd.project, "c-preschool-shapes");
});
return Div().html(inc("/lib/seo/element/h2/h2")().css({
padding: "0.5em 0",
fontWeight: "bold",
fontSize: "1.2em"
}).html(T("topicsToLearn")), document.createElement("p").css({
padding: "1em",
margin: 0,
fontSize: "1em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = pds).length; i$ < len$; ++i$) {
pd = ref$[i$];
results$.push(inc("plan/plan")(pd));
}
return results$;
}())));
};
})();
pages/start/welcome/browser/3_bottomLinks/_t.ls
(function(){
return {
terms: {
de: "Nutzungsbedingungen",
en: "Terms of use",
fr: "Conditions d'utilisation",
es: "Condiciones de uso",
pt: "Termos de uso"
},
imprint: {
de: "Impressum",
en: "Legal Notice",
fr: "Mentions légales",
es: "Menciones legales",
pt: "Informações legais"
},
privacy: {
de: "Datenschutz",
en: "Privacy",
fr: "Protection des données",
es: "Privacidad",
pt: "Privacidade"
},
faqs: {
de: "Häufige Fragen",
en: "FAQs",
fr: "Aide/FAQ",
es: "Preguntas frecuentes",
pt: "Perguntas Frequentes"
},
schoolLicense: {
de: "Schullizenz",
en_gb: "School Licence",
en: "School License",
fr: "Licence scolaire",
es: "Licencia Escolar",
pt: "Licença Escolar"
},
jobs: "Jobs"
};
})();
pages/start/welcome/browser/3_bottomLinks/about/about.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/static/about/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: "Impressum2",
pageUrl: inc("/pages/static/about/_urlDescription/description")().pageUrl
}).html(T("imprint"))
}).css({
marginLeft: "0.4em"
}).tap(click);
};
})();
pages/start/welcome/browser/3_bottomLinks/faq/faq.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/support/help/faqList/page"),
animation: "slideUp",
params: {
isStandaloneFaqPage: true
}
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: T("faqs"),
pageUrl: inc("/pages/support/help/_faqUrlDescription/description")().pageUrl
})
}).css({
marginLeft: "0.4em"
}).tap(click);
};
})();
pages/start/welcome/browser/3_bottomLinks/jobs/jobs.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/static/jobs/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: T("jobs"),
pageUrl: inc("/pages/static/jobs/_urlDescription/description")().pageUrl
})
}).css({
marginLeft: "0.8em"
}).tap(click);
};
})();
pages/start/welcome/browser/3_bottomLinks/links.ls
(function(){
return function(){
return Div({
marginTop: "1em",
padding: "0.5em 0",
borderTop: "1px solid " + Color.grey[150],
backgroundColor: Color.grey[75],
textAlign: "center"
}).html(inc("faq/faq")(), inc("schoolLicense/schoolLicense")(), engine.guiLanguage === "de" ? inc("jobs/jobs")() : void 8, " ", inc("terms/terms")(), inc("privacy/privacy")(), inc("about/about")());
};
})();
pages/start/welcome/browser/3_bottomLinks/privacy/privacy.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/static/privacy/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: T("privacy"),
pageUrl: inc("/pages/static/privacy/_urlDescription/description")().pageUrl
})
}).css({
marginLeft: "0.4em"
}).tap(click);
};
})();
pages/start/welcome/browser/3_bottomLinks/schoolLicense/schoolLicense.ls
(function(){
return function(){
var click;
click = function(){
return startPage({
path: path("/pages/static/schoolLicense/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: T("schoolLicense"),
pageUrl: inc("/pages/static/schoolLicense/_urlDescription/description")().pageUrl
})
}).css({
marginLeft: "0.4em"
}).tap(click);
};
})();
pages/start/welcome/browser/3_bottomLinks/terms/terms.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/static/terms/page"),
animation: "slideUp"
});
};
return inc("/lib/gui/link/link")({
label: inc("/lib/seo/element/a2/a")({
html: T("terms"),
pageUrl: inc("/pages/static/terms/_urlDescription/description")().pageUrl
})
}).css({
marginLeft: "0.4em"
}).tap(tap);
};
})();
pages/start/welcome/browser/_t.ls
(function(){
return {
whatIsAnton: {
de: "Was ist ANTON?",
en: "What is ANTON?",
fr: "ANTON, c'est quoi ?",
es: "¿Qué es ANTON?",
pt: "O que é o ANTON?"
},
topicsToLearn: {
de: "Diese Fächer kann man mit ANTON lernen:",
en: "These are the subjects that can be studied with ANTON:",
fr: "Voici les matières que tu peux étudier avec ANTON :",
es: "Estas son las materias que se pueden estudiar con ANTON:",
pt: "Estas são as disciplinas que você pode aprender com o ANTON:"
},
appForSchool: {
de: "Die Lern-App für die Schule.",
en_gb: "The free learning app for school",
en: "The free learning app for school.",
fr: "L'appli éducative pour l'école",
es: "La aplicación educativa para la escuela",
pt: "O App educativo para a escola"
},
allDevices: {
de: "Auf allen Geräten verfügbar",
en: "Available on all devices",
fr: "Disponible sur tous les appareils",
es: "Funciona en todos los dispositivos",
pt: "Disponível em todos os dispositivos"
},
allDevices2: {
de: "Funktioniert im Browser und auf Tablets, Smartphones, Computern und interaktiven Tafeln. Klicke Neues Nutzerkonto erstellen oben oder lade die App im Apple App Store, Google Play Store, oder Amazon App Store herunter.",
en_gb: "Works in the browser and on tablets, phones, chromebooks and interactive panels. Select “Create new account” above or download in the Apple App Store, Google Play Store, or Amazon App Store.",
en: "Works in the browser and on tablets, phones, Chromebooks and interactive panels. Select “Create new account” above or download in the Apple App Store, Google Play Store, or Amazon App Store.",
fr: "Fonctionne dans le navigateur et sur tablettes, téléphones, chromebooks et tableaux interactifs. Appuie sur « Créer un nouveau compte » ci-dessus ou télécharge l'appli dans ton App Store d'Apple, ton Google Play Store, ou ton Amazon App Store.",
es: "Funciona en cualquier navegador y en tablets, teléfonos, chromebooks y paneles interactivos. Presiona «Crear una cuenta nueva» en la parte superior o descárgalo en Apple App Store, Google Play Store, o Amazon App Store.",
pt: "Funciona em qualquer navegador, em tablets, telefones, chromebooks e em telas interativas. Clique em «Criar nova conta» aqui acima ou baixe o aplicativo na Apple App Store, Google Play Store ou Amazon App Store."
},
easyLearningBot: {
de: "Einfach für die Schule lernen.",
en: "Easy learning for school",
fr: "Apprendre facilement pour l'école ",
es: "Aprende fácilmente para la escuela",
pt: "Aprenda facilmente para a escola"
},
marketingText2Bot: {
de: "Für alle Klassen, Fächer und Schulformen: Vorschule, Grundschule, Volksschule und Primarschule, Förderschule, Hauptschule, Gemeinschaftsschule, Integrierte Sekundarschule, Realschule und Gymnasium. Funktioniert im Browser und auf Tablets, Smartphones, Computern und interaktiven Tafeln. Kostenlos und ohne Werbung für fremde Produkte. Lade die App im Apple App Store, Google Play Store, oder Amazon App Store herunter.",
en: "On smartphones, tablets and computers. Free and without ads. For all grades, subjects and schools.",
fr: "Sur smartphone, tablette et ordinateur. Gratuit et sans publicité. Français, maths, anglais, allemand, espagnol, italien, sciences et musique de la maternelle au CM2.",
es: "Para dispositivos móviles y computadoras. Gratis y sin publicidad. Matemáticas, Español, Ciencias Naturales, Física, Química, Historia, Música, Lengua Extranjera e Indígena, desde preescolar hasta secundaria.",
pt: "Disponível para smartphones, tablets e computadores. Gratuito e sem anúncios. Matemática, língua portuguesa, ciências, inglês, uma seção só para a Educação Infantil, assim como alemão, francês, espanhol e italiano como línguas estrangeiras."
},
topics: {
de: "Deutsch, Mathe, Englisch, Sachunterricht, Geographie, Biologie, Chemie, Physik, Geschichte, DaZ, weitere Sprachen und Musik von der Vorschule bis zum Abitur.",
en_gb: "English, maths, science, languages, geography, music and PSHE - from Reception to KS3",
en: "English language arts, math, science, biology, physics, geography, social studies, music, Spanish and other languages from Pre-K to Grade 8.",
fr: "Français, maths, anglais, allemand, espagnol, italien, sciences et musique pour la maternelle, le CP, le CE1, le CE2, le CM1 et le CM2…",
es: "Matemáticas, Español, Ciencias Naturales, Física, Química, Inglés, Historia, Música y muchos idiomas más desde preescolar hasta secundaria.",
pt: "Matemática, língua portuguesa, ciências, inglês, uma seção só para a Educação Infantil, assim como alemão, francês, espanhol e italiano como línguas estrangeiras"
},
topics2: {
de: "Alle wichtigen Themen aus der Schule passend zum Lehrplan.",
en_gb: "Many more subjects are coming soon.",
en: "Many more subjects will follow.",
fr: "Et très prochainement : beaucoup plus de matières et de thèmes conformément aux programmes scolaires.",
es: "Muy pronto habrá más materias y ejercicios adecuados al plan de estudios.",
pt: "Em breve, mais disciplinas e exercícios alinhados à Base Nacional Comum Curricular (BNCC) estarão disponíveis."
},
topicsBot: {
de: "Deutsch, Mathe, Englisch, Sachunterricht, Geographie, Biologie, Chemie, Physik, Geschichte, DaZ und Musik von der Vorschule bis zum Abitur.",
en_gb: "English, maths, science, languages, geography, music and PSHE - from Reception to KS3",
en: "English language arts, math, science, biology, physics, social studies, music, Spanish and other languages from Pre-K to Grade 8. ",
fr: "Français, maths, anglais, allemand, espagnol, italien, sciences et musique. ",
es: "Matemáticas, Español, Ciencias Naturales, Física, Química, Historia, Música, Inglés, Alemán, Francés, Italiano, Portugués, Catalán y Náhuatl.",
pt: "Matemática, língua portuguesa, ciências, inglês, uma seção só para a Educação Infantil, assim como alemão, francês, espanhol e italiano como línguas estrangeiras"
},
topics2Bot: {
de: "Deutsch und Mathe für Klasse 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 und Oberstufe. Deutsch als Zweitsprache für die Grundschule. Interaktive Arbeitsblätter und individuelles Lernmaterial nach Montessori. Finde Matheaufgaben, Deutschaufgaben und Rechenaufgaben. Übe Bruchrechnen und Textaufgaben.",
en_gb: "We currently offer English and maths for Reception to KS3. We have interactive worksheets and individual learning materials modelled on Montessori teaching styles. ",
en: "We currently offer English and Math from Pre-K to Grade 8. We have interactive worksheets and individual learning materials modeled after Montessori teaching styles. Practice arithmetic and English language arts assignments with word problems and fractions. ",
fr: " Nous offrons actuellement des activités pour les classes de maternelle et des exercices de français, de maths, d'anglais, d'allemand, de sciences et de musique pour les classes de CP, CE1, CE2, CM1 et CM2. Nos activités interactives et notre matériel d'apprentissage individuel suivent la pédagogie Montessori. Découvre ou révise le français, les mathématiques, l'anglais, l'allemand, l'espagnol, l'italien, les sciences et la musique avec des exercices ludiques pour apprendre en t'amusant. ",
es: "Ofrecemos ejercicios y hojas de trabajo interactivas para preescolar, primaria y secundaria. Aprende Matemáticas, Lenguaje, Ciencias, Historia, Música, Lenguas extranjeras e indígenas. Nuestras actividades se basan en la pedagogía Montessori y están alineadas con el currículo. ¡Aprende a sumar, multiplicar, ecuaciones, inglés, ritmos y notas, sobre las plantas y animales, sobre las culturas antiguas y muchos temas más a través de actividades lúdicas y divertidas! ",
pt: "Atualmente, oferecemos exercícios de matemática, língua portuguesa, ciências, inglês, uma seção só para a Educação Infantil, assim como alemão, francês, espanhol e italiano como línguas estrangeiras. Outras séries e disciplinas estão em constante desenvolvimento e estarão disponíveis em breve. Nossas atividades interativas e nosso conteúdo acadêmico são baseados na pedagogia Montessori. Pratique soma, subtração, multiplicação, aprenda o som das letras e muitos temas de ciências com nossos exercícios divertidos e lúdicos."
},
free1: {
de: "Kostenlos für alle.",
en: "Free for everyone",
fr: "Gratuit pour tous",
es: "Gratis para todos",
pt: "Grátis para todos"
},
free2: {
de: "Alle Lerninhalte sind kostenlos und es gibt keine Werbung für fremde Produkte.",
en_gb: "All learning material is free, with no adverts for other products.",
en: "All learning material is free to use, safely accessible for children and free of advertising.",
fr: "Tout le contenu d'apprentissage est accessible gratuitement et sans publicité.",
es: "El contenido académico es gratuito y sin publicidad.",
pt: "Todos os conteúdos são gratuitos e sem anúncios."
},
funLearning: {
de: "Interaktives Schulbuch und Arbeitsheft.",
en_gb: "Engaging learning with fun activities",
en: "Have fun learning with our educational games.",
fr: "Apprends en t'amusant avec nos jeux éducatifs.",
es: "Diviértete aprendiendo con nuestros juegos educativos",
pt: "Divirta-se aprendendo com nossos jogos educativos"
},
muchContent: {
de: "Über 100 000 Aufgaben, mehr als 200 Übungstypen, Lernspiele und interaktive Erklärungen. ",
en_gb: "Learn with over 100,000 exercises, 200 exercise types, interactive explanations and educational games.",
en: "Over 100,000 exercises, 200 interactive exercise types, explanations and learning games.",
fr: "Plus de 5 000 exercices conçus à partir de 200 types d'activités, de leçons interactives et de jeux éducatifs.",
es: "Más de 100 000 ejercicios basados en 200 tipos diferentes de actividades, textos interactivos y juegos educativos.",
pt: "Mais de 5 000 exercícios baseados em 200 modelos diferentes de atividades, textos interativos e jogos educativos."
},
funBot: {
de: "Lernen mit Spaß und vielen Lernspielen.",
en: "Have fun learning with our educational games.",
fr: "Apprends en t'amusant avec nos jeux éducatifs.",
es: "Diviértete aprendiendo con nuestros juegos educativos.",
pt: "Aprenda se divertindo com nossos jogos educativos."
},
muchContentBot: {
de: "Deine Lernplattform online: über 100.000 Aufgaben, mehr als 200 Übungstypen, Lernspiele und interaktive Erklärungen. Online die Uhr lernen, Buchstaben lernen und das ABC lernen.",
en: "Your online learning platform: over 100,000 exercises, 200 exercise types,interactive explanations and educational games.",
fr: "Ta plateforme d'apprentissage en ligne : plus de 5 000 exercices, plus de 200 types d'activités, de leçons interactives et de jeux éducatifs.",
es: "Tu plataforma de aprendizaje en línea. Más de 100 000 ejercicios, en más de 200 tipos distintos de actividades, textos interactivos y juegos educativos.",
pt: "Sua plataforma de aprendizagem online: mais de 5000 exercícios, 200 modelos de atividades, jogos e textos interativos."
},
teacherAndClass: {
de: "Ideal für Lehrkräfte und Schulklassen.",
en_gb: "Perfect for teachers and classes",
en: "Perfect for teachers and classes.",
fr: "Idéal pour les professeurs et les élèves ",
es: "Ideal para docentes y estudiantes",
pt: "Ideal para professores e alunos"
},
teacherAndClass2: {
de: "Ganz einfach Schulklassen anlegen, Aufgaben zuweisen und den Lernfortschritt verfolgen. Mit der Tabletklasse, im Computerraum oder als Hausaufgabe.",
en_gb: "Easily create class groups, assign homework and follow your pupils’ learning progress, both in the classroom and at home. ",
en: "Easily create class groups, assign homework and follow your students’ learning progress both in the classroom and at home. ",
fr: "Une solution simple pour organiser des groupes, attribuer des exercices et suivre les progrès des élèves en classe et à la maison. ",
es: "Crea grupos fácilmente, asigna tareas y monitorea el proceso de aprendizaje de cada estudiante tanto en el salón de clases como en casa.",
pt: "Crie grupos facilmente, atribua exercícios e monitore o progresso de aprendizagem de cada aluno(a), tanto na sala de aula quanto em casa."
},
rewards1: {
de: "Motivierend durch Belohnungen für gutes Lernen. ",
en_gb: "Educational games to motivate learning",
en: "Motivation through rewards for good work.",
fr: "Motivant grâce à ses récompenses",
es: "Motivación a través de recompensas",
pt: "Motivação através de recompensas"
},
rewards2: {
de: "Sammle Sterne und Pokale und spiele spannende Spiele.",
en_gb: "Collect stars and trophies to play exciting games.",
en: "Collect stars and trophies and play exciting games.",
fr: "Collectionne des étoiles et des trophées et amuse-toi avec nos jeux intégrés",
es: "Colecciona estrellas, trofeos y diviértete con juegos interactivos. ",
pt: "Colecione estrelas, troféus e divirta-se com jogos divertidos."
},
flagText: {
de: "ANTON wird unterstützt von der EU.",
en_gb: "National curriculum aligned",
en: "Aligned to US State Standards.",
fr: "ANTON reçoit le soutien de l'UE",
es: "Apoyado por la Unión Europea",
pt: "O ANTON é apoiado pela União Europeia"
},
flagText2: {
de: "Das Projekt „ANTON – Lernplattform für die Schule“ wird kofinanziert durch den Europäischen Fonds für regionale Entwicklung (EFRE).",
en_gb: "All learning material corresponds to the national curriculum for England.",
en: "All learning material meets US State Standards.",
fr: "Le projet “ANTON - la plateforme d'apprentissage pour l'école” est co-financé par le Fonds européen de développement régional (FEDER).",
es: "“ANTON - La plataforma de aprendizaje para la escuela” es un proyecto cofinanciado por el Fondo Europeo de Desarrollo Regional (FEDER).",
pt: "O projeto ANTON - A plataforma de aprendizagem para a escola é co-financiado pelo Fundo Europeu de Desenvolvimento Regional (FEDER)."
},
math1: {
de: "Matheaufgaben zu allen Themen des Lehrplans.",
en_gb: "Maths exercises for all topics in the curriculum",
en: "Math exercises on all topics in the curriculum.",
fr: "Exercices de maths classés par thèmes",
es: "Ejercicios de Matemáticas adaptados al plan de estudio nacional",
pt: "Exercícios de Matemática alinhados aos currículos escolares"
},
math2: {
de: "Matheübungen wie z.B. Zählen lernen, Kopfrechnen, Bruchrechnen, Sachaufgaben, Einmaleins, Gleichungen, Rechenspiele, Dezimalzahlen, geometrische Figuren, Dreisatz, Funktionen und vieles mehr. ",
en_gb: "Complete exercises on numbers, shapes, times tables, fractions and more.",
en: "Math lessons on number operations from addition to division, fractions, geometry and algebra.",
fr: "Des activités pour apprendre les nombres, le calcul mental, les additions, les soustractions, les multiplications, les divisions, la géométrie et bien plus.",
es: "Ejercicios de Matemáticas para: contar, sumar, restar, multiplicar, dividir y aprender geometría, pesos y medidas.",
pt: "Adição, subtração, contagem, multiplicação, divisão, geometria, pesos e medidas e muito mais."
},
math1Bot: {
de: "Matheaufgaben zu allen Themen des Lehrplans.",
en_gb: "Maths lessons for all topics in the curriculum",
en: "Math lessons on all topics in the curriculum.",
fr: "Des exercices de maths conformes aux programmes scolaires.",
es: " Ejercicios de Matemáticas basados en el plan de estudios de primaria.",
pt: "Exercícios de Matemática alinhados aos currículos escolares."
},
math2Bot: {
de: "Matheübungen wie z.B. Zählen lernen, Kopfrechnen, Parabeln, Gleichungen, Bruchrechnen, Sachaufgaben, Einmaleins, Gleichungen, Rechenspiele, Dezimalzahlen, geometrische Figuren, Dreisatz, Funktionen und vieles mehr. ",
en_gb: "Complete exercises on numbers, shapes, times tables, fractions and more.",
en: "Math lessons on numbers, counting, addition, subtraction, multiplication, division and geometry.",
fr: "Des activités pour apprendre les nombres, le calcul mental, les additions, les soustractions, les multiplications, les divisions, la géométrie et bien plus.",
es: "Actividades de conteo, suma y resta, multiplicación, división, geometría, pesos y medidas y muchas más.",
pt: "Adição, subtração, contagem, multiplicação, divisão, geometria, pesos e medidas e muito mais."
},
german1: {
de: "Alle Themen für den Deutschunterricht.",
en_gb: "All English topics covered",
en: "All topics for English language arts are covered.",
fr: "L'apprentissage du français selon les programmes scolaires ",
es: "Todos los temas de Lenguaje y Literatura",
pt: "Atividades lúdicas de língua portuguesa"
},
german2: {
de: "Lesen lernen, ABC und Buchstaben lernen, Fabeln, wörtliche Rede, Rechtschreibung üben, Kommasetzung, Grammatik, Wortarten, Satzglieder bestimmen, Gedichte und vieles mehr.",
en_gb: "Practise skills in phonics, reading, spelling, grammar, punctuation and more.",
en: "Reading, phonics, the alphabet, grammar and much more.",
fr: "Découverte du code, lecture et compréhension, écriture, grammaire, orthographe, conjugaison pour toutes les classes de l'école primaire.",
es: "Las letras del alfabeto, fábulas y leyendas, ejercicios de ortografía, puntuación, gramática y mucho más.",
pt: "Alfabetização, o som das letras, leitura, ortografia, pontuação, gramática e muito mais."
},
german1Bot: {
de: "Alle Themen für den Deutschunterricht.",
en_gb: "All literacy topics are covered.",
en: "All topics for English language arts are covered.",
fr: "Le français conformément aux programmes scolaires.",
es: "Todos los temas de Lenguaje y Comunicación",
pt: "Atividades lúdicas de língua portuguesa."
},
german2Bot: {
de: "Lesen lernen, ABC und Buchstaben lernen, Fabeln, wörtliche Rede, Grundschule, Rechtschreibung üben, Kommasetzung, Grammatik, Wortarten, Satzglieder bestimmen, Gedichte und vieles mehr. ",
en: "Reading, phonics, the alphabet, grammar and much more.",
fr: "Découverte du code, lecture, écriture, grammaire, orthographe et bien plus.",
es: "Las letras del alfabeto, fábulas y leyendas, ejercicios de ortografía, puntuación, gramática y mucho más.",
pt: "O alfabeto, o som das letras, leitura, ortografia, pontuação, gramática e muito mais."
},
sci1: {
de: "Sachunterricht (HSU) für Klasse 1 bis 4.",
en_gb: "Science for primary school",
en: "Science from K-8.",
fr: "Les sciences pour l'école primaire",
es: "Ciencias Naturales, Física y Química",
pt: "Ciências para o Ensino Fundamental I"
},
sci2: {
de: "Pflanzen, Tiere, Wetter, das Sonnensystem, Strom, Radfahrprüfung und Verkehrserziehung, Ritter, Geschichte und vieles mehr.",
en_gb: "Learn about plants, animals, the solar system and more.",
en: "Learn about plants, animals, the solar system, magnetism and much more.",
fr: "Apprends à questionner le monde, le temps, l'espace, le vivant et la matière.",
es: "Estudia las plantas, los animales, el sistema solar, ",
pt: "Aprenda sobre o corpo humano, os sentidos, a alimentação, os materiais, as plantas e muito mais."
},
mus1: {
de: "Erste Themen für den Musikunterricht.",
en_gb: "Lots more subjects for primary school",
en: "We offer music topics for beginners.",
fr: "La musique pour les débutants",
es: "También ofrecemos Música para principiantes",
pt: "Em breve, música para iniciantes"
},
mus2: {
de: "Instrumente kennenlernen, Noten lesen, Töne unterscheiden, Rhythmus kennenlernen und mehr.",
en_gb: "Study topics in languages, geography, music, PSHE and more.",
en: "Learn about instruments, melody, rhythm and reading music.",
fr: "Enrichis tes connaissances avec nos activités sur les instruments, les mélodies, les rythmes et les notes de musique.",
es: "Conoce los instrumentos, las melodías, los ritmos y aprende a leer música.",
pt: "Conheça os instrumentos, as melodias, os ritmos e aprenda a ler notas."
},
eng1: {
de: "Englisch für Klasse 1 bis 10.",
en: false,
fr: "L'anglais en s'amusant",
es: "Inglés para todos los grados",
pt: "Inglês dos níveis 1 ao 4"
},
eng2: {
de: "Vokabeln lernen, Grammatik üben, Farben, Zahlen, Hobbies, Essen, Jahreszeiten, Wetter und Tiere auf Englisch kennenlernen.",
en: false,
fr: "Découvre tout le vocabulaire à connaitre niveau débutant : les couleurs, les nombres, les animaux, les vêtements, les parties du corps, la famille et bien plus.",
es: "Aprende vocabulario y gramática en inglés: colores, números, animales, partes del cuerpo, tiempos verbales, escritura y muchos temas más.",
pt: "Aprenda vocabulário em inglês: cores, números, animais, partes do corpo, membros da família e muito mais."
},
seeMore: "See more"
};
})();
pages/start/welcome/browser/browser.ls
(function(){
return function(page){
var divs;
return divs = [inc("../_shared/background/background")(page), Div().html(inc("0_above/above")(page).append(inc("1_whatIsAnton/whatIsAnton")()), inc("2_below/below")(), inc("3_bottomLinks/links")())];
};
})();
pages/start/welcome/logSpecialEvents/log.ls
(function(){
return function(page, error, errorDescription, t){
if (deviceLog) {
if (error) {
return deviceLog.log({
event: "debugShowWelcomePageSpecialError",
error: error,
id: errorDescription.id,
project: errorDescription.project,
logo: errorDescription.logo,
background: errorDescription.background,
loadingDuration: new Date() - t
});
} else if (page.specialDescription) {
return deviceLog.log({
event: "debugShowWelcomePageSpecial",
id: page.specialDescription.id,
project: page.specialDescription.project,
logo: page.specialDescription.logo,
background: page.specialDescription.background,
loadingDuration: new Date() - t
});
}
}
};
})();
pages/start/welcome/page.ls
(function(){
return function(page){
delete app.sesamData;
delete app.openIdData;
inc("resetLogs/reset")();
return {
statusBarColor: Color.white,
top: function(){
return inc("_topbar/topbar")();
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
var t, start;
t = new Date();
start = function(error, errorDescription){
inc("logSpecialEvents/log")(page, error, errorDescription, t);
return page.html(engine.isMobileApp
? inc("app/app")(page)
: inc("browser/browser")(page));
};
page.scopeRender({
enabled: true,
nearScopeSize: 0.3
});
page.append(inc("/lib/gui/spinner/spinner")());
if (engine.isBotMode) {
start();
return;
}
return inc("_calcSpecial/calc")({
onDone: function(specialDescription){
page.specialDescription = specialDescription;
return start();
},
onError: function(error, errorDescription){
return start(error, errorDescription);
}
});
}
};
};
})();
pages/start/welcome/resetLogs/reset.ls
(function(){
return function(){
inc("resetGroupAndSchoolLogs/reset")();
return inc("resetUserLogs/reset")();
};
})();
pages/start/welcome/resetLogs/resetGroupAndSchoolLogs/reset.ls
(function(){
return function(){
var logs, i$, len$, _log;
logs = _.concat(_.values(window.groupLogs), _.values(window.schoolLogs));
for (i$ = 0, len$ = logs.length; i$ < len$; ++i$) {
_log = logs[i$];
_log.unsubscribe();
}
window.groupLogs = {};
return window.schoolLogs = {};
};
})();
pages/start/welcome/resetLogs/resetUserLogs/removeLogFiles/remove.ls
(function(){
return function(logId){
var f1, f2;
f1 = "logger/events_" + logId + ".json";
f2 = "logger/events_" + logId + "_unsent.json";
app.fileSystem.removeFile(f1);
return app.fileSystem.removeFile(f2);
};
})();
pages/start/welcome/resetLogs/resetUserLogs/reset.ls
(function(){
return function(){
var storedUsers, subscribedUnstoredUsers, i$;
storedUsers = _.map(inc("/lib/util/storedUsers/users/users")(), "l");
subscribedUnstoredUsers = _.pickBy(Logger.info(), function(v, id){
return _.isString(id) && !id.match(/^(D-|SCHOOL-|GROUP-)/) && !in$(id, storedUsers);
});
for (i$ in subscribedUnstoredUsers) {
(fn$.call(this, i$, subscribedUnstoredUsers[i$]));
}
return window.log = undefined;
function fn$(id, _log){
_log.unsubscribe(function(){
if (engine.isMobileApp) {
return inc("removeLogFiles/remove")(id);
}
});
}
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/static/_shared/_t.ls
(function(){
return {
errorText: {
de: "Ups, es ist ein Fehler aufgetreten.",
en: "Oops, an error occurred.",
fr: "Oups… une erreur s'est produite.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Ocorreu um erro."
},
startPageBack: {
de: "Zur ANTON-Startseite",
en: "To the ANTON homepage",
fr: "Aller à la page d'accueil d'ANTON",
es: "Ir a la página de inicio de ANTON",
pt: "Ir para a página inicial de ANTON"
},
settings: {
de: "Einstellungen",
en: "Settings",
fr: "Paramètres",
es: "Ajustes",
pt: "Configurações"
},
close: {
de: "Schließen",
en: "Close",
fr: "Fermer",
es: "Cerrar",
pt: "Fechar"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
},
imageNotFound: {
de: "Das Bild konnte nicht gefunden werden.",
en: "This image could not be found.",
fr: "Cette image est introuvable.",
es: "No se encontró la imagen.",
pt: "Não foi possível encontrar a imagem."
}
};
})();
pages/static/_shared/iconError/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/alert.svg"),
width: '5em',
height: '5em'
});
};
})();
pages/static/_shared/linkToStart/link.ls
(function(){
return function(){
var isAfterLogin;
isAfterLogin = !engine.isBotMode && window.log != null;
return Div().html(inc("/lib/gui/link/link")(isAfterLogin
? T("continueButton")
: T("startPageBack")).css({
marginTop: "1em",
color: Color.grey[600]
}).tap(function(){
if (isAfterLogin) {
return inc("/pages/content/start")({
history: 0
});
} else {
return startPage({
path: path("/pages/start/welcome/page"),
history: 0,
animation: "slideDown"
});
}
}));
};
})();
pages/static/_shared/section/content/content.ls
(function(){
return function(o){
if (o.isExpanded) {
return Div().css({
marginLeft: "1em"
}).append(o.content);
}
};
})();
pages/static/_shared/section/header/arrowIcon/icon.ls
(function(){
return function(o){
return SvgIcon({
svg: o.isExpanded
? path("/lib/svg/icon/arrow-down-small.svg")
: path("/lib/svg/icon/arrow-right-small.svg")
}).css({
width: "0.8em",
height: "0.8em",
flex: "0 0 auto",
marginTop: "0.25em",
marginRight: "0.1em"
});
};
})();
pages/static/_shared/section/header/header.ls
(function(){
return function(o, toggle){
return Div({
display: "flex",
padding: "0.7em 0",
alignItems: "flex-start"
}).html(inc("arrowIcon/icon")(o), inc("text/text")(o)).tap(o.toggle);
};
})();
pages/static/_shared/section/header/text/text.ls
(function(){
return function(o){
return Div({
flex: "1 1 auto"
}).html(o.header);
};
})();
pages/static/_shared/section/section.ls
(function(){
return function(o){
var div;
o.isExpanded == null && (o.isExpanded = false);
o.toggle = function(){
var scroller;
o.isExpanded = !o.isExpanded;
scroller = body.findFirst(".popupContent") || body.findFirst(".pageScrollWrapper");
body.findFirst(".privacyDiv").css({
minHeight: scroller.scrollTop + scroller.height() + "px"
});
return div.replaceWith(inc(THISFILE)(o));
};
return div = Div().html(inc("header/header")(o), inc("content/content")(o));
};
})();
pages/static/_shared/styles/styles.ls
(function(){
return function(){
return {
title: function(text){
return Div({
fontSize: "1.2em",
marginBottom: "1em"
}).html(text);
},
headline: function(text){
return Div({
marginBottom: "0.3em"
}).html(text);
},
paragraph: function(text){
return Div({
marginBottom: "1.2em"
}).html(text);
},
bullet: function(text){
return Div({
paddingLeft: "1em"
}).append(Div({
position: "absolute",
top: "-0.05em",
left: "0.1em"
}).html("•"), text);
},
mail: function(text){
return Div({
display: "inline-block",
textDecoration: "underline",
cursor: "pointer",
padding: "0.1em 0.5em 0.2em",
borderRadius: "0.3em",
marginLeft: "-0.5em",
marginTop: "-0.1em"
}).html(text).tap(function(){
return window.location.href = "mailto:" + text;
});
}
};
};
})();
pages/static/_shared/textError/text.ls
(function(){
return function(error){
return Div({
margin: "2em 1em 1em 1em"
}).html(error === "pixelPaint_not_found"
? T("imageNotFound")
: T("errorText"));
};
})();
pages/static/_shared/topbarDeeplink/topbar.ls
(function(){
return function(page, title, onPrint){
var actions;
if (onPrint) {
actions = [{
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
click: onPrint
}];
}
return inc("/addons/topbar2/topbar")(page.params.isDeepLink
? {
title: title,
back: true,
backLabel: T("startPageBack"),
actions: actions,
backDeepLink: function(){
if (!engine.isBotMode && window.log != null) {
return inc("/pages/content/start")({
history: 0
});
} else {
return startPage({
path: path("/pages/start/welcome/page"),
history: 0,
animation: "slideRight"
});
}
}
}
: page.params.isSettingsLink
? {
title: title,
back: true,
backLabel: T("settings"),
actions: actions
}
: {
title: title,
close: true,
actions: actions
});
};
})();
pages/static/about/_t.ls
(function(){
return {
imprint: {
de: "Impressum",
en: "Legal Notice",
fr: "Mentions légales",
es: "Menciones legales",
pt: "Informações legais"
},
metaDescription: {
de: "Solocode GmbH, Mehringdamm 61, 10961 Berlin, ANTON wird kofinanziert durch den Europäischen Fonds für regionale Entwicklung.",
en: "Solocode GmbH, Mehringdamm 61, 10961 Berlin, ANTON is cofinanced by the European Regional Development Fund.",
fr: "Solocode GmbH, Mehringdamm 61, 10961 Berlin, ANTON est cofinancé par le Fonds européen de développement régional.",
es: "Solocode GmbH, Mehringdamm 61, 10961 Berlin, ANTON es cofinanciado por el Fondo Europeo de Desarrollo Regional.",
pt: "Solocode GmbH, Mehringdamm 61, 10961 Berlim, ANTON é co-financiado pelo Fundo Europeu de Desenvolvimento Regional."
},
antonIs: {
de: "ANTON ist eine universelle Lern‐Plattform (Web & Mobile) für Schule und Schüler/innen, die sowohl zum eigenständigen Selbstlernen als auch zum interaktiven Lernen im Klassenraum‐Kontext eingesetzt werden kann. ",
en_gb: "ANTON is a universal learning platform (web & mobile) for both independent learning and for pupils and schools who want to learn interactively in a classroom setting. ",
en: "ANTON is a universal learning platform (web & mobile) for both independent learning and for students and schools who want to learn interactively in a classroom setting. ",
fr: "ANTON est une plateforme d'apprentissage universelle (web & mobile) conçue à la fois pour les élèves qui souhaitent apprendre de façon indépendante et pour les professeurs qui veulent offrir un apprentissage interactif dans leur classe. ",
es: "ANTON es una plataforma de aprendizaje universal (web & mobile) tanto para estudiantes que quieran aprender de manera independiente y autodidacta, como para docentes que quieran implementar el aprendizaje interactivo en el salón de clases. ",
pt: "ANTON é uma plataforma de aprendizagem universal (web e móvel) tanto para alunos que desejam aprender de forma independente e autodidata, quanto para professores que desejam implementar o aprendizado interativo em sala de aula. "
},
coronaInfo: {
de: "Wir erhalten zurzeit täglich sehr viele Anfragen und können deshalb im Moment nicht jede Anfrage zeitnah bearbeiten. Wenn du eine Frage hast, bitte versuche zunächst, eine Lösung in den Häufigen Fragen zu finden. Wenn du dort keine Antwort findest, bitte beschreibe uns möglichst detailliert, wie dein Problem zustande kam und was du beobachten kannst. ",
en: "We are currently receiving many inquiries every day and therefore cannot process every inquiry as quickly as normal. If you have a question, please try to find a solution in our FAQs first. If you can't find an answer there, please send us a message describing the problem with as much detail as possible. ",
fr: "Nous recevons actuellement énormément de demandes et ne pouvons pas répondre aussi rapidement que nous le souhaiterions. Pour toute question, merci de commencer par consulter notre section Aide/FAQ. Si aucune réponse satisfaisante n'est disponible, merci de nous écrire en décrivant le problème en détail. ",
es: "Actualmente, nos están llegando muchos mensajes al día y no podemos procesarlos todos a la velocidad que quisiéramos. Ayúdanos consultando primero las preguntas frecuentes. Si no encuentras una solución ahí, descríbenos tu problema lo más detalladamente posible. ",
pt: "Atualmente, estamos recebendo muitas mensagens por dia e não podemos respondê-las tão rapidamente quanto gostaríamos. Se você tiver alguma dúvida, por favor, tente primeiro encontrar uma solução nas perguntas frequentes. Caso não encontre uma resposta lá, descreva seu problema com o máximo de detalhes possível. "
},
solocodeAdress: {
de: "solocode GmbH Mehringdamm 61 10961 Berlin support@anton.app 030-549091885 Geschäftsführer: Lorenz Heine, David Hörmeyer Amtsgericht Berlin-Charlottenburg: HRB 179956 B UST ID: DE308493342 Berlin ",
en: "solocode GmbH Mehringdamm 61 10961 Berlin support@anton.app Managing Directors: Lorenz Heine, David Hörmeyer District Court Berlin-Charlottenburg: HRB 179956 B VAT ID: DE308493342 Berlin ",
fr: "solocode GmbH Mehringdamm 61 10961 Berlin support@anton.app Dirigeants : Lorenz Heine, David Hörmeyer Registre du commerce Berlin-Charlottenburg : HRB 179956 B N° de TVA : DE308493342 Berlin ",
es: "solocode GmbH Mehringdamm 61 10961 Berlin support@anton.app Directores ejecutivos: Lorenz Heine, David Hörmeyer Registro mercantil/Amtsgericht Berlin-Charlottenburg: HRB 179956 B VAT ID: DE308493342 Berlin ",
pt: "solocode GmbH Mehringdamm 61 10961 Berlim support@anton.app Diretores executivos: Lorenz Heine, David Hörmeyer Registro mercantil/Amtsgericht Berlin-Charlottenburg: HRB 179956 B VAT ID: DE308493342 Berlin "
},
antonProjectDescription: {
de: "Das Projekt „ANTON – Lernplattform für die Schule“ wird kofinanziert durch den Europäischen Fonds für regionale Entwicklung (EFRE).",
en: "The project “ANTON - the learning platform for school” is cofinanced by the European Regional Development Fund (ERDF).",
fr: "Le projet “ANTON - la plateforme d'apprentissage pour l'école” est co-financé par le Fonds européen de développement régional (FEDER).",
es: "“ANTON - La plataforma de aprendizaje para la escuela” es un proyecto cofinanciado por el Fondo Europeo de Desarrollo Regional (FEDER).",
pt: "O projeto “ANTON - A plataforma de aprendizagem para a escola” é co-financiado pelo Fundo Europeu de Desenvolvimento Regional (FEDER)."
},
imprintUrl: {
de: "impressum",
en: "legal-notice",
fr: "mentions-legales",
es: "menciones-legales",
pt: "informacoes-legais"
},
euInfo1: {
de: "Die Europäische Kommission stellt eine Plattform für die außergerichtliche Online-Streitbeilegung (OS-Plattform) bereit, aufrufbar unter ",
en: "The EU-Commission offers a platform for online dispute resolution (ODR) at ",
fr: "La Commission européenne offre une plateforme européenne de règlement en ligne des litiges (RLL) à ",
es: "La Comisión Europea ofrece una plataforma de resolución de litigios en línea (RLL) en ",
pt: "A Comissão Europeia fornece uma plataforma para resolução de litígios online (plataforma RLL), disponível em "
},
euInfo2: {
de: "Der Anbieter nimmt an keinem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle im Sinne des Verbraucherstreitbeilegungsgesetzes teil.",
en: "The provider does not take part in any dispute settlement proceedings before a consumer arbitration board within the meaning of the Consumer Dispute Settlement Act.",
fr: "Le fournisseur ne participe à aucune procédure de règlement des différends devant un conseil d'arbitrage de consommation au sens de la loi sur le règlement des différends de consommation.",
es: "El proveedor no participará en ningún procedimiento de resolución de disputas ante una audiencia de consumidores, conforme a la Ley de resolución de disputas de consumidores.",
pt: "O provedor não participa de nenhum procedimento de solução de controvérsias perante o conselho de arbitragem de consumidores, de acordo com a Lei de Solução de Controvérsias do Consumidor."
}
};
})();
pages/static/about/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, T("imprint"));
};
})();
pages/static/about/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("imprintUrl"),
title: T("imprint"),
metaDescription: T("metaDescription"),
noIndex: true
};
};
})();
pages/static/about/aboutDiv/div.ls
(function(){
return function(){
return Div({
lineHeight: "1.5em"
}).html(T("antonIs"), Div({
height: "1em"
}), T("coronaInfo"), Div({
height: "1em"
}), T("solocodeAdress"), Div({
height: "1em"
}), inc("/lib/gui/image/image")({
id: twitch({
de: "eu_efre-logo-de",
en: "eu_efre-logo-en",
fr: "eu_efre-logo-fr",
es: "eu_efre-logo-es",
pt: "eu_efre-logo-pt"
}),
fileFolder: "media/about/_images"
}).css({
width: "16em",
height: twitch({
de: "2.3em",
en: "2.7em",
fr: "2.4em",
es: "2.3em",
pt: "2.3em"
}),
marginBottom: "1em"
}), Div(), T("antonProjectDescription"), Div({
height: "0.8em"
}), T("euInfo1"), Div({
textDecoration: "underline",
display: "inline-block"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("/lib/gui/parentalGate/parentalGate")(function(){
return window.open("https://ec.europa.eu/consumers/odr", "_system");
});
}), Div({
height: "0.8em"
}), T("euInfo2"));
};
})();
pages/static/about/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
return page.html(Div({
margin: "1em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("aboutDiv/div")()));
}
};
};
})();
pages/static/antonPlus/0_stopDownloadPopup/_t.ls
(function(){
return {
contineToPlusButton: {
de: "Weiter zu ANTON-Plus",
en: "Continue to ANTON Plus",
fr: "Découvrir ANTON-Plus",
es: "Descubre ANTON-Plus",
pt: "Descubra ANTON-Plus"
},
antonPlusNeeded: {
de: "Für diese Funktion wird ANTON-Plus benötigt.",
en: "You need ANTON Plus to use this feature.",
fr: "Cette fonction est disponible avec-Plus",
es: "Para esta función necesitas tener ANTON-Plus",
pt: "Para utilizar esta função, você precisa ter ANTON-Plus."
}
};
})();
pages/static/antonPlus/0_stopDownloadPopup/button/button.ls
(function(){
return function(){
var tap;
tap = function(){
app.currentPopup.close();
inc("/lib/util/logPromo/log")({
event: "promoPlus_popupStopDownload_click"
});
return startPage({
path: path("../../1_products/page"),
animation: "slideUp",
params: {
referrer: "stopDownloadPopup"
}
});
};
return Button({
label: T("contineToPlusButton"),
labelAllowWrap: true
}).tap(tap);
};
})();
pages/static/antonPlus/0_stopDownloadPopup/icon/icon.ls
(function(){
return function(){
return Div().css({
display: "inline-block",
marginBottom: "0.5em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/arrow-download.svg"),
width: "4em",
height: "4em",
color: Color.green[500]
}), SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
height: "1.2em",
width: "1.2em"
}).css({
position: "absolute",
top: "2.5em",
right: "0.2em"
}));
};
})();
pages/static/antonPlus/0_stopDownloadPopup/logPromo/log.ls
(function(){
return function(){
var a;
a = app.currentPagePath.split("/").reverse();
return inc("/lib/util/logPromo/log")({
event: "promoPlus_popupStopDownload",
isReferrer: true,
page: a[2] + "/" + a[1]
});
};
})();
pages/static/antonPlus/0_stopDownloadPopup/popup.ls
(function(){
return function(){
var div;
inc("logPromo/log")();
div = Div().css({
padding: "1em"
}).html(inc("icon/icon")(), inc("text/text")(), inc("button/button")());
return inc("/lib/gui/popup/popup")({
html: div,
onClose: function(type){
if (type === "outside" || type === "icon") {
return inc("/lib/util/logPromo/log")({
event: "promoPlus_popupStopDownload_close"
});
}
}
});
};
})();
pages/static/antonPlus/0_stopDownloadPopup/text/text.ls
(function(){
return function(){
return Div().css({
margin: "0 0 1em"
}).html(T("antonPlusNeeded"));
};
})();
pages/static/antonPlus/1_products/_t.ls
(function(){
return {
antonPlusNoBreak: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
buttonContinue: {
de: "Weiter",
en: "Select",
fr: "Choisir",
es: "Siguiente",
pt: "Continuar"
},
buttonUpgrade: {
de: "Upgrade",
en: "Upgrade",
fr: "Modifier mon abonnement",
es: "Contratar",
pt: "Contratar"
},
text: {
de: "Wir garantieren, dass wir 100 % eures Beitrags für die Verbesserung und Weiterentwicklung von ANTON verwenden!",
en: "ANTON Plus comes with more features and allows us to develop ANTON even further.
We guarantee that 100% of your contribution goes towards the improvement of ANTON!",
fr: "ANTON-Plus t'offre plus de fonctions et ta contribution nous permet de continuer à développer ANTON.
Nous garantissons que 100 % du montant est consacré à l'amélioration d'ANTON !",
es: "¡ANTON-Plus te ofrece más funciones y tu contribución nos permite seguir desarrollando la aplicación!
¡Te garantizamos que el 100% de tu contribución será destinada al mejoramiento y desarrollo de ANTON!",
pt: "ANTON-Plus te oferece mais funções e também nos permite continuar desenvolvendo o aplicativo!
Nós garantimos que 100% da sua contribuição será destinada à melhoria do ANTON!"
},
antonPlusTitle: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
paymentInfoPopup: {
de: "Die Zahlung von $1 inkl. MwSt. erfolgt alle 12 Monate. Du kannst jederzeit mit einer Frist von 24 Stunden zum Ende der Laufzeit kündigen.",
en: "The payment of $1 incl. VAT is made every 12 months. Your $2 automatically renews every 12 months unless you cancel it at least 24 hours before the end of the current period.",
fr: "Le paiement de $1 TTC est effectué tous les 12 mois et peut être résilié à tout moment avec un délai de 24 heures jusqu'à la fin du terme.",
es: "El pago de $1 incluye IVA/VAT. El cargo se hará cada 12 meses. Puedes cancelar tu suscripción en cualquier momento y hasta 24 horas antes de que se renueve automáticamente.",
pt: "O pagamento de $1 incluindo o IVA é feito a cada 12 meses. Você pode cancelar a qualquer momento, avisando até 24 horas antes da renovação automática."
},
'new': {
de: "NEU",
en: "NEW",
fr: "NOUVEAU",
es: "NUEVO",
pt: "NOVO"
},
price: {
de: "$1 inkl. MwSt. für 12 Monate",
en: "$1 incl. VAT for 12 months",
fr: "$1 TTC pour 12 mois",
es: "$1 IVA/VAT incluido por 12 meses",
pt: "$1 com IVA incluído por 12 meses"
},
singleTitle: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
single2: {
de: "Du kannst mit der ANTON-App auf Mobilgeräten offline lernen.",
en: "Learn offline on mobile devices with ANTON.",
fr: "Avec l'appli ANTON tu peux apprendre hors ligne sur tes appareils mobiles.",
es: "Descarga contenidos y aprende sin conexión en dispositivos móviles.",
pt: "Você pode baixar conteúdos no seu celular e aprender offline."
},
single3: {
de: "Du kannst deinen Avatar mit Tieren, Robotern und mehr gestalten.",
en: "New designs for your avatar: animals, robots and many more.",
fr: "Découvre de nouvelles options pour ton avatar : des animaux, des robots et bien plus.",
es: "Descubre los nuevos diseños para tu avatar: animales, robots y muchos más.",
pt: "Descubra novos designs para seu avatar: animais, robôs e muito mais."
},
popupTitle: {
de: "$1 für:",
en: "$1 for:",
fr: "$1 pour :",
es: "$1 por:",
pt: "$1 por:"
},
familyTitle: {
de: "ANTON-Plus Familie",
en: "ANTON Plus Family",
fr: "ANTON-Plus Famille",
es: "ANTON-Plus Familia",
pt: "ANTON-Plus Família"
},
family2: {
de: "Eltern können eine Familiengruppe mit bis zu 5 Mitgliedern anlegen. Alle erhalten ANTON-Plus.",
en: "Parents can create a family group with up to 5 members. All members receive ANTON Plus.",
fr: "Les parents peuvent créer un groupe familial comptant jusqu'à 5 membres qui bénéficient tous d'ANTON-Plus.",
es: "El padre y la madre pueden crear grupos familiares de hasta 5 integrantes. Todos/as adquieren ANTON-Plus.",
pt: "Os pais podem criar um grupo familiar contendo até 5 membros, onde todos adquirem ANTON-Plus."
},
family3: {
de: "In der Familiengruppe kann der Report eingesehen werden und Pins können für die einzelnen Kinder gesetzt werden.",
en: "In the family group, parents can view the report and pin individual learning material for their children.",
fr: "Dans le groupe familial, les parents peuvent voir le rapport d'apprentissage et épingler des exercices pour leurs enfants.",
es: "En el grupo familiar se puede ver el progreso de aprendizaje y se pueden asignar ejercicios particularmente para cada integrante.",
pt: "No grupo familiar é possível visualizar o progresso de aprendizagem e também marcar exercícios individualmente para cada integrante."
},
family4: {
de: "Spiele und Münzbelohnungen können in der Familiengruppe gesperrt werden.",
en: "Access to games and coins can be restricted in the family group.",
fr: "Il est possible de limiter l'accès aux jeux et aux pièces dans le groupe familial.",
es: "Dentro del grupo familiar se pueden restringir las fichas y el acceso a los juegos.",
pt: "Dentro do grupo familiar é possível restringir as moedas e o acesso aos jogos."
},
teacherTitle: {
de: "ANTON-Plus Lehrer",
en: "ANTON Plus Teacher",
fr: "ANTON-Plus Prof",
es: "ANTON-Plus Docente",
pt: "ANTON-Plus Professores"
},
teacher2: {
de: "Lehrkräfte können bis zu 5 Gruppen für ihre Schulklassen erstellen und dort alle erweiterten Gruppen-Funktionen nutzen.",
en: "Teachers can create up to 5 groups for their school classes and use the advanced group features.",
fr: "Les professeur·es peuvent créer jusqu'à 5 groupes pour leurs classes et les gérer grâce à des fonctions avancées.",
es: "Los y las docentes pueden crear hasta 5 grupos para sus clases, y utilizar funciones avanzadas.",
pt: "Professores podem criar até 5 grupos para suas turmas e utilizar funções avançadas."
},
teacher3: {
de: "In diesen Gruppen kann der Report eingesehen werden und Pins für einzelne Schüler/innen und Untergruppen gesetzt werden.",
en_gb: "Teachers can access the report feature in these groups and pin material for individual pupils and subgroups.",
en: "Teachers can access the report feature in these groups and pin material for individual students and subgroups.",
fr: "Les professeur·es peuvent utiliser les fonctions de rapport d'apprentissage dans ces groupes et attribuer des exercices à des élèves en particulier ou à des sous-groupes.",
es: "En estos grupos es posible ver el progreso de aprendizaje. Además se pueden asignar ejercicios a estudiantes en particular y a los distintos subgrupos.",
pt: "Nestes grupos é possível visualizar o progresso de aprendizagem, marcar exercícios para alunos em particular e também para subgrupos."
},
teacher4: {
de: "Zusätzlich bekommen Lehrkräfte ANTON-Plus Familie und können eine Familiengruppe mit bis zu 5 Mitgliedern erstellen, von denen alle ANTON-Plus erhalten.",
en: "Additionally, teachers get ANTON Plus Family and can create a family group with up to 5 members. All members receive ANTON Plus.",
fr: "Les professeur·es reçoivent également ANTON-Plus Famille et peuvent créer un groupe familial comptant jusqu'à 5 membres qui bénéficient tous d'ANTON-Plus.",
es: "Adicionalmente, los y las docentes adquieren ANTON-Plus Familia y pueden crear un grupo familiar de hasta 5 integrantes. Todos/as los integrantes adquieren ANTON-Plus.",
pt: "Adicionalmente, os professores adquirem ANTON-Plus Família e podem criar um grupo familiar de até 5 membros, onde todos os membros adquirem ANTON-Plus."
},
schoolLicence1: {
de: "Für Schulen gibt es auch eine ",
en: "For schools, we also offer an ",
fr: "Pour les écoles, nous proposons aussi une ",
es: "Para las escuelas también ofrecemos una ",
pt: "Para escolas também oferecemos uma "
},
schoolLicence2: {
de: "ANTON-Schullizenz",
en_gb: "ANTON School Licence",
en: "ANTON School License",
fr: "licence scolaire ANTON",
es: "Licencia Escolar ANTON",
pt: "Licença Escolar ANTON"
},
payAntonPlus: {
de: "ANTON-Plus bezahlen",
en: "Buy ANTON Plus",
fr: "Acheter ANTON-PLUS",
es: "Comprar ANTON-Plus",
pt: "Comprar ANTON-Plus"
},
productAndPrice: {
de: "$1 für $2",
en: "$1 for $2",
fr: "$1 pour $2",
es: "$1 por $2",
pt: "$1 por $2"
},
paypalErrorText: {
de: "Ups, hier ist ein Fehler aufgetreten. Bitte wende dich an unseren Hilfe-Chat.",
en: "Oops, an error occurred. Please contact us on our support chat.",
fr: "Oups… une erreur s'est produite. Merci de nous contacter sur notre chat d'assistance.",
es: "¡Ups! Algo salió mal. Por favor, contáctanos en el chat de ayuda.",
pt: "Ops! Ocorreu um erro aqui. Por favor, entre em contato através do nosso chat de ajuda."
},
purchased: {
de: "Der Kauf wurde dir gutgeschrieben.",
en: "Purchase successful.",
fr: "L'achat a bien été effectué.",
es: "Se realizó la compra.",
pt: "Compra realizada."
},
alreadyPurchased: {
de: "Dieser Kauf wurde dir bereits gutgeschrieben.",
en: "You have already purchased this item.",
fr: "Tu as déjà acheté ce produit.",
es: "Ya has adquirido este producto.",
pt: "Você já adquiriu este produto."
},
alreadyPurchasedByAnother: {
de: "Dieser Kauf wurde bereits einem anderen Nutzerkonto gutgeschrieben.",
en: "This purchase has already been made by another account.",
fr: "Cet achat a déjà été effectué par un autre compte.",
es: "Esta compra ya se ha realizado a través de otra cuenta.",
pt: "Esta compra já foi realizada através de outra conta."
},
appstoreError: {
de: "Fehler beim Kaufvorgang im $1:
",
en: "Purchasing error in the $1:
",
fr: "Erreur lors de l'achat dans le $1 :
",
es: "Error en el proceso de compra en $1:
",
pt: "Erro ao processar compra em $1:
"
},
validUntil: {
de: "gültig bis $1",
en: "valid until $1",
fr: "valable jusqu'au $1",
es: "válido hasta $1",
pt: "válido até $1"
},
antonPlusUrl: {
de: "anton-plus",
en: "anton-plus",
fr: "anton-plus",
es: "anton-plus",
pt: "anton-plus"
}
};
})();
pages/static/antonPlus/1_products/_topbar/_t.ls
(function(){
return {
textDPA: {
de: "Du kannst mit diesem Nutzerkonto nicht ANTON-Plus kaufen.",
en: "You cannot purchase ANTON Plus with this account.",
fr: "Tu ne peux pas acheter ANTON-Plus avec ce compte.",
es: "No puedes comprar ANTON-Plus con esta cuenta.",
pt: "Você não pode comprar ANTON-Plus com esta conta."
},
textPlusSchool: {
de: "Dein Nutzerkonto hat schon ANTON-Plus über deine Schule.",
en: "Your account already has ANTON Plus through your school.",
fr: "Ton compte a déjà ANTON-Plus grâce à ton école.",
es: "Tu cuenta ya ha adquirido ANTON-Plus a través de tu escuela.",
pt: "Sua conta já adquiriu ANTON-Plus através da sua escola."
}
};
})();
pages/static/antonPlus/1_products/_topbar/info/info.ls
(function(){
return function(value){
return Div().css({
borderTop: "1px solid " + Color.grey[250],
textAlign: "center",
background: Color.blue[50],
padding: "0.4em 1em"
}).html(Div().css({
width: "35em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.5em"
}).html(value));
};
})();
pages/static/antonPlus/1_products/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
close: true,
title: T("antonPlusNoBreak")
}).append(page.userDescription.isPlusSchoolMember
? inc("info/info")(T("textPlusSchool"))
: page.userDescription.isDPASchoolMember ? inc("info/info")(T("textDPA")) : void 8);
};
})();
pages/static/antonPlus/1_products/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("antonPlusUrl"),
title: T("antonPlusTitle"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/antonPlus/1_products/calcActiveProduct/calc.ls
(function(){
return function(page){
var d, name, e, date, activeProduct;
d = page.userDescription;
name = d.isPlusTeacher
? "plusTeacher"
: d.isPlusFamily
? "plusFamily"
: d.isPlus ? "plus" : void 8;
if (!name) {
return {};
}
e = log.findLast({
event: "setProduct",
productName: name
});
date = inc("/lib/util/formatDate2/format")(e != null ? e.validUntil : void 8);
return activeProduct = {
name: name,
validUntil: date != null ? date.formats.dateShort : void 8
};
};
})();
pages/static/antonPlus/1_products/calcProducts/calc.ls
(function(){
return function(){
var products, plus, plusFamily, plusTeacher, getProducts, problem, ref$, i$, ref1$, len$, p, storeData, fallbackPrice, c;
getProducts = function(storeIdentifier){
var products;
products = inc("/lib/init/setupAppstore/products/products")(storeIdentifier);
plus = _.find(products, {
alias: "plus.12months.sub4"
});
plusFamily = _.find(products, {
alias: "plusFamily.12months.sub1"
});
return plusTeacher = _.find(products, {
alias: "plusTeacher.12months.sub1"
});
};
getProducts();
if (engine.isAmazonDevice && window.amazonStore == null) {
problem = "isAmazonDevice";
} else if (engine.isMobileApp && !engine.isAmazonDevice && (typeof store != 'undefined' && store !== null ? store.CONSUMABLE : void 8) == null) {
problem = "noStorePlugin";
} else if (engine.isAmazonDevice && !amazonStore.ready()) {
problem = "storeNotReady";
} else if (engine.isMobileApp && !engine.isAmazonDevice && !store.ready()) {
if (((ref$ = window.device) != null ? ref$.manufacturer : void 8) === "HUAWEI") {
getProducts("paypal");
} else {
problem = "storeNotReady";
}
} else if (engine.isMobileApp) {
if (engine.isAmazonDevice && window.amazonStore != null) {
for (i$ = 0, len$ = (ref1$ = _.compact([plus, plusFamily, plusTeacher])).length; i$ < len$; ++i$) {
p = ref1$[i$];
storeData = amazonStore.get(p.sku);
if (storeData) {
p.price = storeData.price;
p.title = storeData.title;
p.description = storeData.description;
}
}
} else {
plus = store.get(plus.alias);
plusFamily = store.get(plusFamily.alias);
plusTeacher = store.get(plusTeacher.alias);
}
}
if (problem == null && (!(plus != null && plus.price) || !(plusFamily != null && plusFamily.price) || !(plusTeacher != null && plusTeacher.price))) {
problem = "productsMissing";
}
if (problem) {
fallbackPrice = function(price){
var ref$;
if ((ref$ = engine.guiLanguage) === "de" || ref$ === "fr") {
return price + " €";
} else if (engine.guiLanguage === "en_gb") {
return "£" + price;
} else {
return "$" + price;
}
};
plus = {
displayPrice: fallbackPrice(10)
};
plusFamily = {
displayPrice: fallbackPrice(20)
};
plusTeacher = {
displayPrice: fallbackPrice(40)
};
} else {
c = inc("calcDisplayPrice/calc");
plus.displayPrice = c(plus);
plusFamily.displayPrice = c(plusFamily);
plusTeacher.displayPrice = c(plusTeacher);
}
return {
plus: plus,
plusFamily: plusFamily,
plusTeacher: plusTeacher,
problem: problem
};
};
})();
pages/static/antonPlus/1_products/calcProducts/calcDisplayPrice/calc.ls
(function(){
return function(product){
var price, ref$;
price = product.paypal
? product.currency === "EUR"
? product.price.replace(".", ",") + " €"
: product.currency === "GBP"
? "£" + product.price
: product.currency + " " + product.price
: product.price;
return price = price != null ? (ref$ = price.replace(",00", "")) != null ? ref$.replace(".00", "") : void 8 : void 8;
};
})();
pages/static/antonPlus/1_products/debugShowProductsLink/link.ls
(function(){
return function(page){
var d, ref$;
d = page.userDescription;
if (((ref$ = page.activeProduct) != null && ref$.name) || d.isDPASchoolMember || d.isPlusSchoolMember) {
return inc("/lib/gui/link/link")("Debug: Show all products").css({
color: Color.grey[400],
fontSize: "0.9em",
padding: "0.5em"
}).tap(function(){
page.params.debugShowAllProducts = true;
return startPage({
history: 0
});
});
}
};
})();
pages/static/antonPlus/1_products/openDebugAfterPurchasePopup/popup.ls
(function(){
return function(product){
var b, div, popup;
b = function(l){
return Button(l).css({
minWidth: "6em",
margin: "0.3em"
});
};
div = Div({
margin: "0.8em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
marginRight: "0.3em"
}), "Start afterPurchase page:
Bitte benutze deinen Browser, um ANTON-Plus zu kaufen.",
en: "ANTON Plus is new and can't be purchased on Amazon Fire devices yet.
Please use your browser to purchase ANTON-Plus.",
fr: "ANTON-Plus est nouveau et ne peut pas encore être acheté sur les appareils Amazon Fire.
Merci d'utiliser ton navigateur pour acheter ANTON-Plus.",
es: "ANTON-Plus es todavía muy nuevo y aún no se puede adquirir en los dispositivos de Amazon Fire.
Por favor, utiliza tu navegador para comprar ANTON-Plus. ",
pt: "ANTON-Plus ainda é muito novo e não pode ser adquirido pelos dispositivos do Amazon-Fire.
Por favor, utilize seu navegador para comprar ANTON-Plus. "
},
noStorePlugin: {
de: "Bitte aktualisiere deine App, um ANTON-Plus zu kaufen.",
en: "Please update your app to purchase ANTON Plus.",
fr: "Tu dois mettre ton application à jour pour acheter ANTON-Plus.",
es: "Por favor, actualiza tu aplicación para comprar ANTON-Plus.",
pt: "Por favor, atualize seu aplicativo para comprar ANTON-Plus."
},
productsMissing: {
de: "Unerwarteter Fehler: $1",
en: "Unexpected error: $1",
fr: "Erreur inattendue : $1",
es: "Error inesperado: $1",
pt: "Erro inesperado: $1"
},
storeNotReady: {
de: "Du kannst ANTON-Plus auf diesem Gerät nicht kaufen.
Die Verbindung mit dem $1 funktioniert nicht, weil keine Zahlungsdaten hinterlegt wurden oder nicht darauf zugegriffen werden darf.",
en: "You can't buy ANTON Plus on this device.
The connection with the $1 isn't working because no payment details have been given or the payment details cannot be accessed.",
fr: "Tu ne peux pas acheter ANTON-Plus sur cet appareil.
La connexion avec $1 ne fonctionne pas car aucun détails de paiement n'ont été fournis ou que les détails de paiement ne sont pas accessibles.",
es: "No es posible comprar ANTON-Plus en este dispositivo.
La conexión con $1 no está funcionando porque no se han registrado los datos de pago o no puedes acceder a ellos.",
pt: "Não é possível comprar ANTON-Plus com este dispositivo.
A conexão com o $1 não funciona porque nenhum dado de pagamento foi registrado ou não pôde ser acessado."
}
};
})();
pages/static/antonPlus/1_products/productBlock/_checkOnlineOrProblem/popupProblem/popup.ls
(function(){
return function(p){
var storeName;
storeName = engine.isiOsApp ? "App Store" : "Play Store";
return inc("/lib/gui/errorPopup/popup")({
label: p === "isAmazonDevice"
? T("isAmazonDevice")
: p === "noStorePlugin"
? T("noStorePlugin")
: p === "productsMissing"
? T("productsMissing", storeName)
: p === "storeNotReady" ? T("storeNotReady", storeName) : void 8
});
};
})();
pages/static/antonPlus/1_products/productBlock/_logPromoClick/log.ls
(function(){
return function(product){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_products_click",
sku: product.sku,
price: product.displayPrice
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/_shared/text/text.ls
(function(){
return function(t){
if (!t) {
return;
}
return Div().css({
padding: "0.6em 0",
borderBottom: "1px solid " + Color.grey[200],
lineHeight: "1.5em",
fontSize: "0.95em"
}).html(t);
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/_t.ls
(function(){
return {
textParents: {
de: "$1 darf nur von Erwachsenen gekauft werden. Trage hier das Geburtsjahr des Käufers oder der Käuferin ein.",
en: "$1 can only be purchased by adults. Please enter the buyer's year of birth.",
fr: "$1 ne peut être acheté que par des adultes. Merci d'entrer l'année de naissance de la personne qui va effectuer le paiement.",
es: "$1 solo puede ser adquirido por adultos. Por favor, ingresa la fecha de nacimiento de la persona que va a efectuar el pago.",
pt: "$1 só pode ser adquirido por adultos. Por favor, digite aqui o ano de nascimento da pessoa que vai efetuar o pagamento."
},
invalidBirthYear: {
de: "Dieses Geburtsjahr ist nicht zulässig.",
en: "This birth year is not accepted.",
fr: "Cette année de naissance n'est pas acceptée.",
es: "No se acepta esta fecha de nacimiento.",
pt: "Este ano de nascimento não é aceito."
},
buttonBuy: {
de: "Jetzt kaufen",
en: "Buy now",
fr: "Acheter maintenant",
es: "Comprar ahora",
pt: "Comprar agora"
},
birthYear: {
de: "Geburtsjahr: ",
en: "Year of birth: ",
fr: "Année de naissance : ",
es: "Año de nacimiento: ",
pt: "Ano de nascimento:"
}
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popup.ls
(function(){
return function(p, animationOnShow){
return inc("popupParentalGate/popup")(p);
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupParentalGate/button/button.ls
(function(){
return function(p){
return Div().append(Button(T("continueButton")).css({
marginTop: "0.5em"
}).tap(p.submit));
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupParentalGate/input/input.ls
(function(){
return function(p){
return Div().css({
display: "flex",
padding: "0.2em 0 0.4em",
fontSize: "0.95em"
}).append(T("birthYear"), p.input = inc("/lib/gui/input2/input")({
keyboardParentDiv: app.currentPage.popupBottom,
keyboardLayout: "numbers",
onSubmit: p.submit,
keyboardSubmitLabel: T("continueButton"),
fixedLength: 4
}).css({
width: "5em"
})).onDomAppend(function(){
return p.input.start();
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupParentalGate/popup.ls
(function(){
return function(p){
var div;
p.submit = function(){
var year;
year = +p.input.getValue().trim();
p.input.stop();
return inc("validate/validate")(year, function(){
return inc("../popupPurchase/popup")(p);
});
};
div = Div().css({
padding: "0.2em 0.6em 0.6em 0.6em"
}).append(inc("../_shared/text/text")(T("textParents", p.productName)).css({
borderBottom: "",
paddingBottom: "0.2em"
}), inc("input/input")(p), inc("button/button")(p));
return inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: true,
animationOnClose: false,
animationDisableBackground: true
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupParentalGate/validate/validate.ls
(function(){
var lp;
lp = inc("/lib/util/logPromo/log");
return function(year, onSuccess){
var minAge, currentYear, ref$;
minAge = 18;
currentYear = new Date().getFullYear();
if (_.isNaN(year) || year < 1900 || year > currentYear || year > currentYear - (minAge + 1)) {
lp("promoPlus_birthYearInvalid");
return inc("/lib/gui/errorPopup/popup")({
label: T("invalidBirthYear"),
animationDisableBackground: true,
animationOnShow: false
});
} else {
lp("promoPlus_birthYearOk");
if ((ref$ = app.currentPopup) != null) {
ref$.close();
}
return onSuccess();
}
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/buttonBuy/button.ls
(function(){
return function(p){
return Div().append(Button(T("buttonBuy")).tap(p.onSuccess));
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/popup.ls
(function(){
return function(p, animationOnShow){
var div;
div = Div().css({
padding: "0.6em"
}).append(inc("title/title")(p.title), inc("user/user")(), inc("../_shared/text/text")(p.text1), inc("../_shared/text/text")(p.text2), inc("termsAndPrivacyDiv/div")(p), inc("buttonBuy/button")(p));
return inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: animationOnShow,
animationOnClose: false,
animationDisableBackground: true
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/_t.ls
(function(){
return {
antonPrivacy: {
de: "ANTON-Datenschutzbestimmungen",
en: "ANTON privacy policy",
fr: "Politique de protection des données personnelles d'ANTON",
es: "Política de privacidad de ANTON",
pt: "Política de privacidade de ANTON"
},
antonTerms: {
de: "ANTON-Nutzungsbedingungen",
en: "ANTON terms of use",
fr: "Conditions générales d'utilisation d'ANTON",
es: "ANTON condiciones de uso",
pt: "ANTON termos de uso"
},
iAgree: {
de: "Durch Klick auf „$1“ stimmst du den",
en: "By clicking on “$1”, you agree to the",
fr: "En appuyant sur “$1”, tu acceptes",
es: "Al presionar “$1”, aceptas la",
pt: "Ao presionar “$1”, você aceita os"
},
privacyPolicy: {
de: "Datenschutzbestimmungen",
en: "privacy policy",
fr: "la politique de protection des données personnelles",
es: "política de privacidad",
pt: "política de privacidade"
},
to: {
de: " zu.",
en: ".",
fr: ".",
es: ".",
pt: "."
},
andThe: {
de: "und den",
en: "and the",
fr: "et",
es: "y las",
pt: "e a"
},
terms: {
de: "Nutzungsbedingungen",
en: "terms of use",
fr: "les conditions d'utilisation",
es: "condiciones de uso",
pt: "termos de uso"
}
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/div.ls
(function(){
return function(p){
var div;
return div = Div().css({
display: "inline-block",
lineHeight: "1.6em",
maxWidth: "90%",
width: "30em",
fontSize: "0.95em",
margin: "0.5em 0 0.8em 0"
}).html(T("iAgree", T("buttonBuy")) + " ", inc("termsLink/link")(p, T("terms")), " " + T("andThe") + " ", inc("privacyLink/link")(p, T("privacyPolicy")), T("to"));
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/link/link.ls
(function(){
return function(label, click){
return Span().css({
textDecoration: "underline",
padding: "0.2em 0"
}).html(label).tap({
animation: "none",
down: function(){
return this.css({
backgroundColor: Color.grey[150]
});
},
up: function(){
this.css({
backgroundColor: ""
});
return click();
},
cancel: function(){
return this.css({
backgroundColor: ""
});
}
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/privacyLink/link.ls
(function(){
return function(p, label){
var click;
click = function(){
return inc("popupPrivacy/popup")(p);
};
return inc("../link/link")(label, click);
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/privacyLink/popupPrivacy/popup.ls
(function(){
return function(p){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("antonPrivacy")), inc("/pages/static/privacy/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: true,
animationOnClose: false,
onClose: function(){
return inc("../../../popup")(p, false);
}
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/termsLink/link.ls
(function(){
return function(p, label){
var click;
click = function(){
return inc("popupTerms/popup")(p);
};
return inc("../link/link")(label, click);
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/termsAndPrivacyDiv/termsLink/popupTerms/popup.ls
(function(){
return function(p){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("antonTerms")), inc("/pages/static/terms/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div,
animationOnShow: true,
animationOnClose: false,
onClose: function(){
return inc("../../../popup")(p, false);
}
});
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/title/title.ls
(function(){
return function(t){
return Div().css({
fontWeight: "bold"
}).html(t);
};
})();
pages/static/antonPlus/1_products/productBlock/_popupDetailsAndParentalGate/popupPurchase/user/user.ls
(function(){
return function(){
var d;
d = inc("/data/user/calcUserDescription/calc")();
return Div().css({
display: "flex",
padding: "0.1em 0 0.3em",
borderBottom: "1px solid " + Color.grey[200]
}).append(Div().css({
width: "3em",
flex: "0 0 auto"
}).append(inc("/lib/gui/avatar/avatar")(d.avatar).css({
width: "2em",
height: "2em",
marginBottom: "0.1em"
}), SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
size: "0.8em"
}).css({
position: "absolute",
bottom: "0.3em",
right: "0.3em"
})), Div().css({
flex: "0 1 auto",
fontSize: "1.1em",
marginRight: "1.3em"
}).secureHtml(d.displayName));
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/_shared/logPaymentTrackingEvent/log.ls
(function(){
return function(o){
var n, event;
n = {
"initiated": "internalPurchaseInitiated",
"cancelled": "internalPurchaseCancelled",
"success": "internalPurchaseSuccess",
"restored": "internalPurchaseRestored",
"error": "internalPurchaseError"
};
event = n[o.event];
if (event == null) {
return;
}
o.event = event;
o.store = engine.isiOsApp
? "appstore"
: engine.isAndroidApp ? "playstore" : "paypal";
return log.log(o);
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/_shared/validationResultPopup/popup.ls
(function(){
return function(o){
var message, div, popup;
if (!o.validationResult) {
return;
}
message = o.validationResult.isNewPurchase
? T("purchased")
: o.validationResult.user.isBuyingUser
? T("alreadyPurchased")
: T("alreadyPurchasedByAnother");
div = Div({
margin: "1em 0"
}).append(Div({
padding: "0 1em",
lineHeight: "1.6em"
}).html(message), o.validationResult.user ? Div({
display: "flex"
}).append(Div({
width: "3em",
flex: "0 0 auto"
}).append(inc("/lib/gui/avatar/avatar")(o.validationResult.user.avatar).css({
width: "2.5em",
height: "2.5em",
marginBottom: "0.1em",
borderRadius: "999px"
}), SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
size: "0.8em"
}).css({
position: "absolute",
bottom: "0.3em",
right: "0.3em"
})), Div({
fontSize: "1.5em",
flex: "0 1 auto",
marginRight: "1.3em"
}).secureHtml(o.validationResult.user.name)) : void 8, Button({
label: T("closeButton"),
action: function(){
return popup.close();
}
}).css({
marginTop: "1em"
}));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/amazonStore/amazonStore.ls
(function(){
return function(product, referrer, onProductPurchased){
var spinnerOverlay, hideSpinner, showSpinner, onSuccess, onError;
hideSpinner = function(){
if (spinnerOverlay != null) {
spinnerOverlay.close();
}
return spinnerOverlay = undefined;
};
showSpinner = function(){
return spinnerOverlay = inc("/lib/gui/spinnerOverlay/overlay")(void 8, false, true);
};
onSuccess = function(purchase){
var data;
if (purchase.status === "FAILED") {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "cancelled",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
details: purchase,
referrer: referrer
});
return;
}
if (purchase.status !== "SUCCESSFUL") {
onError({});
return;
}
showSpinner();
return helpers.httpRequest.post(inc("/lib/util/serverUrl/serverUrl")("payment") + "/purchase", data = {
logId: log.id(),
transactionId: purchase.purchaseReceipt.receiptId,
receipt64: {
receipt: purchase.purchaseReceipt,
userData: purchase.amazonUserData
},
store: "amazon-appstore",
product: product.sku,
priceMicros: product.priceMicros,
currency: product.currency
}, function(error, result){
if (error != null) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: error.message,
details: purchase,
referrer: referrer
});
hideSpinner();
inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
return debug("error", error);
} else {
if (result.status === "ok") {
amazonStore.notifyFulfillment(function(res){}, function(err){}, purchase.purchaseReceipt.receiptId);
if (!result.isValid) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: "purchase couldn't be validated",
details: purchase,
referrer: referrer
});
hideSpinner();
return inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
} else {
if (result.isNewPurchase) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "success",
sku: product.sku,
transactionId: purchase.purchaseReceipt.receiptId,
price: product.price,
title: product.title,
referrer: referrer
});
} else {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "restored",
sku: product.sku,
transactionId: purchase.purchaseReceipt.receiptId,
price: product.price,
title: product.title,
referrer: referrer
});
}
product.validationResult = result;
return log.sync(function(error){
hideSpinner();
return onProductPurchased(product);
});
}
} else {
hideSpinner();
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: "non ok status received from purchase api",
details: purchase,
referrer: referrer
});
inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
return debug("error inserting payment", result);
}
}
});
};
onError = function(e){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
message: e.message,
code: e.code,
step: "beforebuy",
referrer: referrer
});
return inc("/lib/gui/errorPopup/popup")({
label: e.message
});
};
inc("../_shared/logPaymentTrackingEvent/log")({
event: "initiated",
type: "buy",
sku: product.sku,
price: product.price,
title: product.title,
referrer: referrer
});
return amazonStore.purchase(onSuccess, onError, product.sku);
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/appstore/appstore.ls
(function(){
return function(product, referrer, onProductPurchased){
var spinnerOverlay, logEvent, unRegister, onSuccess, onError, onUnverified, onCancelled, hideSpinner, showSpinner, additionalData, products, ref$;
logEvent = inc("../_shared/logPaymentTrackingEvent/log");
unRegister = function(){
store.off(onSuccess);
store.off(onUnverified);
store.off(onCancelled);
return store.off(onError);
};
onSuccess = function(p){
var ref$, ref1$, ref2$;
p.sku = p.id;
unRegister();
if (((ref$ = p.validationResult) != null && ref$.isValid) && ((ref1$ = p.validationResult) != null && ref1$.isNewPurchase)) {
logEvent({
event: "success",
sku: p.sku,
price: p.price,
title: p.title,
referrer: referrer
});
hideSpinner();
return onProductPurchased(p);
} else {
logEvent({
event: "error",
message: (ref2$ = p.validationResult) != null ? ref2$.message : void 8,
sku: p.sku,
price: p.price,
title: p.title,
referrer: referrer,
validationResult: p.validationResult
});
inc("../_shared/validationResultPopup/popup")({
validationResult: p.validationResult
});
return hideSpinner();
}
};
onError = function(e){
var store;
debug("buy_error: " + e.message);
debug("code: " + e.code);
logEvent({
event: "error",
message: e.message,
code: e.code,
referrer: referrer
});
unRegister();
hideSpinner();
store = engine.isAndroidApp
? T("playStore")
: T("appStore");
return inc("/lib/gui/errorPopup/popup")({
label: T("appstoreError", store) + e.message
});
};
onUnverified = function(p){
p.sku = p.id;
logEvent({
event: "error",
message: "unverified",
sku: p.sku,
price: p.price,
title: p.title,
referrer: referrer
});
unRegister();
return hideSpinner();
};
onCancelled = function(p){
p.sku = p.id;
logEvent({
event: "cancelled",
sku: p.sku,
price: p.price,
title: p.title,
owned: p.owned,
referrer: referrer
});
unRegister();
return hideSpinner();
};
hideSpinner = function(){
if (spinnerOverlay != null) {
spinnerOverlay.close();
}
return spinnerOverlay = undefined;
};
showSpinner = function(){
return spinnerOverlay = inc("/lib/gui/spinnerOverlay/overlay")(void 8, false, true);
};
logEvent({
event: "initiated",
type: "buy",
sku: product.id,
price: product.price,
title: product.title,
referrer: referrer
});
showSpinner();
store.when(product.alias).verified(onSuccess).unverified(onUnverified).cancelled(onCancelled);
store.error(onError);
additionalData = engine.isAndroidApp && product.type !== store.CONSUMABLE ? (products = inc("/lib/init/setupAppstore/products/products")(), {
oldPurchasedSkus: _.flatMap(products, function(p){
var productInfo;
productInfo = store.get(p.alias);
if (productInfo.type === product.type && productInfo.valid && (productInfo.owned || !productInfo.canPurchase && productInfo.state === store.APPROVED)) {
return productInfo.id;
} else {
return [];
}
})
}) : void 8;
if ((additionalData != null ? (ref$ = additionalData.oldPurchasedSkus) != null ? ref$.length : void 8 : void 8) > 1) {
additionalData.oldPurchasedSkus = [additionalData.oldPurchasedSkus[0]];
}
return store.order(product.alias, additionalData);
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/paypalPopup/popup.ls
(function(){
return function(product, referrer, onProductPurchased){
var environment, isConsumable, clientId, s, currentSubscriptionID, div, buttonContainer, spinner, renderButtons, popup;
environment = deviceLog['var']("usePayPalSandbox") ? "sandbox" : "live";
isConsumable = product.type.toLowerCase() === "consumable";
clientId = {
sandbox: "AQ0f5cn7ZJn6QNlJLl7eJ69xh_JLs0QnyLx3GgKFM0H4fOl4RCfAglVv3qZbFhrob6lM3UAmhpphr5XK",
live: "AVjYBfFTxSLyDcrpdpT6qzNV9Z6OKCp_91mRmIwIOukJ1eqhR-fUtOZqamsxOB1ucpB1dXkBelxgZ_on"
};
if (window.paypal == null) {
s = document.createElement("script").attr({
src: "https://www.paypal.com/sdk/js?currency=" + (product.currency || "EUR") + "&client-id=" + clientId[environment] + "&disable-funding=credit&vault=true"
});
body.append(s);
}
currentSubscriptionID = undefined;
div = Div().css({
padding: "1.3em"
}).append(Div().css({
marginBottom: "1em",
fontWeight: "bold"
}).html(T("payAntonPlus")), Div().css({
marginBottom: "1.3em"
}).html(T("productAndPrice", product.title, product.displayPrice)), buttonContainer = Div().append(spinner = inc("/lib/gui/spinner/spinner")()));
buttonContainer.setAttribute("id", "paypal-button-container");
renderButtons = function(){
if (!div.isVisible()) {
return;
}
if (window.paypal == null) {
requestAnimationFrame(renderButtons);
return;
}
buttonContainer.empty();
return paypal.Buttons({
createOrder: isConsumable ? function(data, actions){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "initiated",
type: "buy",
sku: product.sku,
price: product.price,
title: product.title,
referrer: referrer
});
return new Promise(function(resolve, reject){
var data;
return helpers.httpRequest.post(inc("/lib/util/serverUrl/serverUrl")("payment") + "/createPaypalOrder", data = {
environment: environment,
sku: product.sku
}, function(error, response){
if (error != null) {
return reject(error);
} else {
return resolve(response);
}
});
}).then(function(result){
return result.result.orderId;
}, function(error){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "createOrder",
message: error.message,
referrer: referrer
});
inc("/lib/gui/errorPopup/popup")({
label: error != null ? error.message : void 8
});
return debug(error);
});
} : void 8,
createSubscription: !isConsumable ? function(data, actions){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "initiated",
type: "buy",
sku: product.sku,
price: product.price,
title: product.title,
referrer: referrer
});
return new Promise(function(resolve, reject){
var data;
return helpers.httpRequest.post(inc("/lib/util/serverUrl/serverUrl")("payment") + "/paypalSubscriptionCreate", data = {
environment: environment,
sku: product.sku
}, function(error, response){
if (error != null) {
return reject(error);
} else {
return resolve(response);
}
});
}).then(function(result){
currentSubscriptionID = result.result.subscriptionId;
return currentSubscriptionID;
}, function(error){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "createOrder",
message: error.message,
referrer: referrer
});
inc("/lib/gui/errorPopup/popup")({
label: error != null ? error.message : void 8
});
return debug(error);
});
} : void 8,
onCancel: function(data){
return inc("../_shared/logPaymentTrackingEvent/log")({
event: "cancelled",
sku: product.sku,
price: product.price,
title: product.title,
referrer: referrer,
subscriptionID: currentSubscriptionID
});
},
onError: function(error){
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onError",
message: error.message,
referrer: referrer,
subscriptionID: currentSubscriptionID
});
inc("/lib/gui/errorPopup/popup")({
label: error != null ? error.message : void 8
});
return debug(error);
},
onApprove: function(data, actions){
var getPurchaseDetails;
buttonContainer.css({
opacity: 0
});
popup.append(inc("/lib/gui/spinner/spinner")().css({
position: "absolute",
top: "50%",
left: "50%",
marginLeft: "-0.5em",
marginTop: "1.3em"
}));
getPurchaseDetails = function(data, callback){
if (isConsumable) {
return actions.order.capture().then(callback);
} else {
return callback(data);
}
};
return getPurchaseDetails(data, function(details){
var data;
return helpers.httpRequest.post(inc("/lib/util/serverUrl/serverUrl")("payment") + "/purchase", data = {
logId: log.id(),
transactionId: isConsumable
? details.id
: details.subscriptionID,
receipt64: JSON.stringify(details),
store: environment === "sandbox" ? "paypal_sandbox" : "paypal",
product: isConsumable
? details.purchase_units[0].custom_id
: product.sku,
priceMicros: isConsumable
? (+details.purchase_units[0].amount.value) * 1000000
: (+product.price) * 1000000,
currency: isConsumable
? details.purchase_units[0].amount.currency_code
: product.currency
}, function(error, result){
if (error != null) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: error.message,
details: details,
referrer: referrer
});
inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
debug("error");
return debug(error);
} else {
if (result.status === "ok") {
if (!result.isValid) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: "purchase couldn't be validated",
details: details,
referrer: referrer
});
return inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
} else {
if (result.isNewPurchase) {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "success",
sku: product.sku,
transactionId: isConsumable
? details.id
: details.subscriptionID,
price: product.price,
title: product.title,
referrer: referrer
});
} else {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "restored",
sku: product.sku,
transactionId: isConsumable
? details.id
: details.subscriptionID,
price: product.price,
title: product.title,
referrer: referrer
});
}
product.validationResult = result;
return log.sync(function(error){
return onProductPurchased(product);
});
}
} else {
inc("../_shared/logPaymentTrackingEvent/log")({
event: "error",
sku: product.sku,
price: product.price,
title: product.title,
step: "onApprove",
message: "non ok status received from purchase api",
details: details,
referrer: referrer
});
inc("/lib/gui/errorPopup/popup")({
label: T("paypalErrorText")
});
return debug("error inserting payment", result);
}
}
});
});
}
}).render('#paypal-button-container');
};
setTimeout(renderButtons, 1000);
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/antonPlus/1_products/productBlock/_purchase/purchase.ls
(function(){
return function(product, referrer){
var onProductPurchased;
onProductPurchased = function(product){
var ref$;
return startPage({
path: path("../../../3_thanks/page"),
history: 0,
params: {
sku: (ref$ = product != null ? product.id : void 8) != null
? ref$
: product != null ? product.sku : void 8,
alias: product != null ? product.alias : void 8
}
});
};
if (product.paypal) {
return inc("paypalPopup/popup")(product, referrer, onProductPurchased);
} else {
if (engine.isAmazonDevice && window.amazonStore != null) {
return inc("amazonStore/amazonStore")(product, referrer, onProductPurchased);
} else {
return inc("appstore/appstore")(product, referrer, onProductPurchased);
}
}
};
})();
pages/static/antonPlus/1_products/productBlock/plus/plus.ls
(function(){
return function(page){
var product, referrer, activeProduct, userDescription, ref$;
product = page.products.plus;
referrer = page.params.referrer;
activeProduct = page.activeProduct;
userDescription = page.userDescription;
return inc("../_block/block")({
title: T("singleTitle"),
list: [
{
text: T("price", product.displayPrice)
}, {
text: T("single2"),
icon: "download"
}, {
text: T("single3"),
icon: "avatar"
}
],
isDisabled: !page.params.debugShowAllProducts && (userDescription.isDPASchoolMember || userDescription.isPlusSchoolMember || ((ref$ = activeProduct.name) === "plusFamily" || ref$ === "plusTeacher")),
isUpgrade: false,
validUntil: activeProduct.name === "plus" ? activeProduct.validUntil : void 8,
onButtonTap: function(){
inc("../_logPromoClick/log")(product);
if (inc("../_checkOnlineOrProblem/check")(page)) {
return;
}
return inc("../_popupDetailsAndParentalGate/popup")({
title: T("popupTitle", T("singleTitle")),
productName: T("singleTitle"),
text1: T("paymentInfoPopup", product.displayPrice, T("singleTitle")),
onSuccess: function(){
return inc("../_purchase/purchase")(product, referrer);
}
});
},
onButtonLongTap: engine.isDebug ? function(){
return inc("../../openDebugAfterPurchasePopup/popup")(product);
} : void 8
});
};
})();
pages/static/antonPlus/1_products/productBlock/plusFamily/plusFamily.ls
(function(){
return function(page){
var product, referrer, activeProduct, userDescription, block;
product = page.products.plusFamily;
referrer = page.params.referrer;
activeProduct = page.activeProduct;
userDescription = page.userDescription;
block = inc("../_block/block")({
title: T("familyTitle"),
list: [
{
text: T("price", product.displayPrice)
}, {
text: T("family2"),
icon: "family-plus"
}, {
text: T("family3"),
icon: "pin-report"
}, {
text: T("family4"),
icon: "disable"
}
],
isDisabled: !page.params.debugShowAllProducts && (userDescription.isDPASchoolMember || userDescription.isPlusSchoolMember || activeProduct.name === "plusTeacher"),
isUpgrade: activeProduct.name === "plus",
validUntil: activeProduct.name === "plusFamily" ? activeProduct.validUntil : void 8,
onButtonTap: function(){
inc("../_logPromoClick/log")(product);
if (inc("../_checkOnlineOrProblem/check")(page)) {
return;
}
return inc("../_popupDetailsAndParentalGate/popup")({
title: T("popupTitle", T("familyTitle")),
productName: T("familyTitle"),
text1: T("paymentInfoPopup", product.displayPrice, T("familyTitle")),
onSuccess: function(){
return inc("../_purchase/purchase")(product, referrer);
}
});
},
onButtonLongTap: engine.isDebug ? function(){
return inc("../../openDebugAfterPurchasePopup/popup")(product);
} : void 8
});
if (page.params.highlight === "plusFamily") {
block.highlight();
}
return block;
};
})();
pages/static/antonPlus/1_products/productBlock/plusTeacher/plusTeacher.ls
(function(){
return function(page){
var product, referrer, activeProduct, userDescription, list, block, ref$;
product = page.products.plusTeacher;
referrer = page.params.referrer;
activeProduct = page.activeProduct;
userDescription = page.userDescription;
list = [
{
text: T("price", product.displayPrice)
}, {
text: T("teacher2"),
icon: "group"
}, {
text: T("teacher3"),
icon: "pin-report"
}
];
list.push({
text: T("teacher4"),
icon: "family-plus"
});
block = inc("../_block/block")({
title: T("teacherTitle"),
list: list,
isDisabled: !page.params.debugShowAllProducts && (userDescription.isDPASchoolMember || userDescription.isPlusSchoolMember),
isUpgrade: (ref$ = activeProduct.name) === "plus" || ref$ === "plusFamily",
validUntil: activeProduct.name === "plusTeacher" ? activeProduct.validUntil : void 8,
onButtonTap: function(){
inc("../_logPromoClick/log")(product);
if (inc("../_checkOnlineOrProblem/check")(page)) {
return;
}
return inc("../_popupDetailsAndParentalGate/popup")({
title: T("popupTitle", T("teacherTitle")),
productName: T("teacherTitle"),
text1: T("paymentInfoPopup", product.displayPrice, T("teacherTitle")),
onSuccess: function(){
return inc("../_purchase/purchase")(product, referrer);
}
});
},
onButtonLongTap: engine.isDebug ? function(){
return inc("../../openDebugAfterPurchasePopup/popup")(product);
} : void 8
});
if (page.params.highlight === "plusTeacher") {
block.highlight();
}
return block;
};
})();
pages/static/antonPlus/1_products/schoolLicence/schoolLicence.ls
(function(){
return function(){
var tap;
tap = function(){
return startPage({
path: path("/pages/static/schoolLicense/page"),
history: 0,
animation: "fadeIn"
});
};
return Div().css({
padding: "1.5em 0",
textAlign: "left",
borderTop: "1px solid " + Color.grey[200]
}).html(T("schoolLicence1"), Div().css({
display: "inline-block",
textDecoration: "underline",
color: Color.blue[800]
}).html(T("schoolLicence2")).tap(tap), ".");
};
})();
pages/static/antonPlus/1_products/text/text.ls
(function(){
return function(){
return Div().css({
padding: "0 0 1.5em",
textAlign: "left"
}).html(T("text"));
};
})();
pages/static/antonPlus/3_thanks/_t.ls
(function(){
return {
antonPlusTitleNoBreak: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
antonPlusTitle: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
antonPlusFamilyNoBreak: {
de: "ANTON-Plus Familie",
en: "ANTON Plus Family",
fr: "ANTON-Plus Famille",
es: "ANTON-Plus Familia",
pt: "ANTON-Plus Familia"
},
subscribedUntil: {
de: "Dein $1 läuft bis zum $2.",
en: "Your $1 lasts until $2.",
fr: "Ton $1 dure jusqu'au $2.",
es: "Tu $1 está activo hasta el $2.",
pt: "Seu $1 está ativo até o $2."
},
thanksForYourSupport: {
de: "Vielen Dank, dass du ANTON unterstützt!",
en: "Thanks for your support!",
fr: "Merci de ton aide !",
es: "¡Gracias por tu apoyo!",
pt: "Agradecemos por contribuir com ANTON!"
},
activationSuccess: {
de: "$1 wurde erfolgreich aktiviert!",
en: "$1 was successfully activated!",
fr: "$1 a bien été activé !",
es: "¡$1 ha sido activado!",
pt: "$1 foi ativado com sucesso!"
},
antonPlusTeacherNoBreak: {
de: "ANTON-Plus Lehrer",
en: "ANTON Plus Teacher",
fr: "ANTON-Plus Prof",
es: "ANTON-Plus Docente",
pt: "ANTON-Plus Professor"
},
antonPlusUrl: {
de: "anton-plus",
en: "anton-plus",
fr: "anton-plus",
es: "anton-plus",
pt: "anton-plus"
}
};
})();
pages/static/antonPlus/3_thanks/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: page.productName
});
};
})();
pages/static/antonPlus/3_thanks/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("antonPlusUrl"),
title: T("antonPlusTitle"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/antonPlus/3_thanks/button/button.ls
(function(){
return function(page){
var startPageParams;
startPageParams = page.product === "plus"
? {
path: path("../../4_thanksWhy/page"),
history: 0,
animation: "fadeIn",
params: {
product: page.product,
productName: page.productName
}
}
: page.product === "plusFamily"
? {
path: path("../../5_productInfo/page"),
history: 0,
animation: "fadeIn",
params: {
product: page.product,
productName: page.productName
}
}
: {
history: -1,
animation: "slideDown"
};
return Button(T("continueButton")).tap(function(){
return startPage(startPageParams);
});
};
})();
pages/static/antonPlus/3_thanks/calcProduct/calc.ls
(function(){
return function(page){
var ref$, ref1$, ref2$;
return (ref$ = (ref1$ = page.params.alias) != null ? (ref2$ = ref1$.split(".")) != null ? ref2$[0] : void 8 : void 8) != null ? ref$ : "plus";
};
})();
pages/static/antonPlus/3_thanks/calcProductName/calc.ls
(function(){
return function(page){
var name;
return name = page.product === "plusFamily"
? T("antonPlusFamilyNoBreak")
: page.product === "plusTeacher"
? T("antonPlusTeacherNoBreak")
: T("antonPlusTitleNoBreak");
};
})();
pages/static/antonPlus/3_thanks/calcValidUntil/calc.ls
(function(){
return function(page){
var e, now, inOneYear, validUntil;
e = log.findLast({
event: "setProduct",
productName: page.productName
});
now = new Date();
inOneYear = new Date(now.setYear(now.getFullYear() + 1));
return validUntil = e != null && e.validUntil ? new Date(e != null ? e.validUntil : void 8) : inOneYear;
};
})();
pages/static/antonPlus/3_thanks/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/illustration/anton-plus.svg"),
width: "5em",
height: "5em"
}).css({
verticalAlign: "0.5em"
});
};
})();
pages/static/antonPlus/3_thanks/logPromo/log.ls
(function(){
return function(page){
return inc("/lib/util/logPromo/log")({
event: "promoPlus_thanks",
sku: page.params.sku
});
};
})();
pages/static/antonPlus/3_thanks/page.ls
(function(){
return function(page){
page.product = inc("calcProduct/calc")(page);
page.productName = inc("calcProductName/calc")(page);
page.validUntil = inc("calcValidUntil/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
inc("logPromo/log")(page);
return page.css({
margin: "0 auto",
width: "30em",
maxWidth: "95%",
padding: "1em"
}).append(inc("icon/icon")(), inc("title/title")(page), inc("textDuration/text")(page), inc("textThanks/text")(), inc("button/button")(page));
}
};
};
})();
pages/static/antonPlus/3_thanks/textDuration/text.ls
(function(){
return function(page){
var d;
d = inc("/lib/util/formatDate2/format")(page.validUntil);
return Div().css({
marginBottom: "1em"
}).html(T("subscribedUntil", page.productName, d.formats.date));
};
})();
pages/static/antonPlus/3_thanks/textThanks/text.ls
(function(){
return function(){
return Div().css({
marginBottom: "1.5em"
}).html(T("thanksForYourSupport"));
};
})();
pages/static/antonPlus/3_thanks/title/title.ls
(function(){
return function(page){
return Div().css({
marginBottom: "1em",
fontWeight: "bold"
}).html(T("activationSuccess", page.productName));
};
})();
pages/static/antonPlus/4_thanksWhy/_t.ls
(function(){
return {
antonPlusTitleNoBreak: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
antonPlusTitle: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
helpWhatsImportantText: {
de: "Deine Angabe hilft uns, besser zu verstehen, was dir wichtig ist.",
en: "Your information helps us to understand what's important to you.",
fr: "Ces informations nous permettent de comprendre ce qui est important pour toi.",
es: "Tu información nos ayuda a entender mejor lo que es importante para ti.",
pt: "Sua informação nos ajuda a compreender melhor o que é importante para você."
},
whyBought: {
de: "Was war dein Hauptgrund, warum du gekauft hast?",
en: "What was the main reason for your purchase?",
fr: "Quelle était la raison principale de ton achat ?",
es: "¿Cuál fue el motivo principal de tu compra?",
pt: "Qual foi o motivo principal da sua compra?"
},
optionOffline: {
de: "Download/Offline-Funktion",
en: "Download/offline features",
fr: "Fonction hors ligne/téléchargement",
es: "Descarga/Funciones fuera de línea",
pt: "Baixar/Função offline"
},
optionBetterAvatar: {
de: "Bessere Avatar-Funktionen",
en: "Better avatar features",
fr: "Options pour l'avatar",
es: "Más opciones par el avatar",
pt: "Mais funções para o avatar"
},
optionSupportAnton: {
de: "ANTON unterstützen",
en: "Support ANTON",
fr: "Aider ANTON",
es: "Ayuda ANTON",
pt: "Ajuda ANTON"
},
antonPlusUrl: {
de: "anton-plus",
en: "anton-plus",
fr: "anton-plus",
es: "anton-plus",
pt: "anton-plus"
}
};
})();
pages/static/antonPlus/4_thanksWhy/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: page.productName
});
};
})();
pages/static/antonPlus/4_thanksWhy/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("antonPlusUrl"),
title: T("antonPlusTitle"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/antonPlus/4_thanksWhy/linkContinue/link.ls
(function(){
return function(page){
var tap;
tap = function(){
var result, i$, ref$, len$, o;
result = {};
for (i$ = 0, len$ = (ref$ = page.options).length; i$ < len$; ++i$) {
o = ref$[i$];
result[o.name] = o.selected;
}
inc("/lib/util/logPromo/log")({
event: "promoPlus_thanksWhy",
result: result
});
return startPage(page.product === "plus"
? {
path: path("../../5_productInfo/page"),
history: 0,
animation: "fadeIn",
params: {
product: page.product,
productName: page.productName
}
}
: {
history: -1,
animation: "slideDown"
});
};
return inc("/lib/gui/link/link")(T("continueButton")).css({
fontSize: "1em",
padding: "0.6em",
marginTop: "0.5em"
}).tap(tap);
};
})();
pages/static/antonPlus/4_thanksWhy/options/option/check/check.ls
(function(){
return function(){
var s;
return Div().css({
padding: "0.5em 0.4em 0.4em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/checkbox.svg"),
color: Color.grey[650],
width: s = "0.85em",
height: s
}).addClass("select").hide(), SvgIcon({
svg: path("/lib/svg/shape/square.svg"),
color: Color.grey[650],
width: s,
height: s
}).addClass("unselect").show());
};
})();
pages/static/antonPlus/4_thanksWhy/options/option/name/name.ls
(function(){
return function(option){
return Div().css({
flex: "1 1 auto",
padding: "0 1em 0 0.4em",
textAlign: "left"
}).html(option.name);
};
})();
pages/static/antonPlus/4_thanksWhy/options/option/option.ls
(function(){
return function(option){
var tap, div;
option.selected = false;
tap = function(){
option.selected = !option.selected;
if (option.selected) {
div.findFirst(".select").show();
return div.findFirst(".unselect").hide();
} else {
div.findFirst(".select").hide();
return div.findFirst(".unselect").show();
}
};
return div = Div().css({
display: "flex",
padding: "0.5em",
background: Color.grey[150],
margin: "0.2em",
minHeight: "2.5em"
}).append(inc("check/check")(option), inc("name/name")(option)).tap({
down: tap
});
};
})();
pages/static/antonPlus/4_thanksWhy/options/options.ls
(function(){
return function(page){
var o;
return Div().append(Div().css({
display: "inline-block"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = _.shuffle(page.options)).length; i$ < len$; ++i$) {
o = ref$[i$];
results$.push(inc("option/option")(o));
}
return results$;
}())));
};
})();
pages/static/antonPlus/4_thanksWhy/page.ls
(function(){
return function(page){
page.product = page.params.product;
page.productName = page.params.productName;
page.options = [
{
name: T("optionOffline")
}, {
name: T("optionBetterAvatar")
}, {
name: T("optionSupportAnton")
}
];
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
return page.css({
margin: "0 auto",
width: "30em",
maxWidth: "95%",
padding: "1em"
}).append(inc("title/title")(), inc("textHelp/text")(), inc("options/options")(page), inc("linkContinue/link")(page));
}
};
};
})();
pages/static/antonPlus/4_thanksWhy/textHelp/text.ls
(function(){
return function(page){
return Div().css({
marginBottom: "1em",
lineHeight: "1.5em",
fontSize: "0.9em"
}).html(T("helpWhatsImportantText"));
};
})();
pages/static/antonPlus/4_thanksWhy/title/title.ls
(function(){
return function(page){
return Div().css({
marginBottom: "1em",
fontWeight: "bold",
lineHeight: "1.5em"
}).html(T("whyBought"));
};
})();
pages/static/antonPlus/5_productInfo/_t.ls
(function(){
return {
hint: {
de: "Tipp:",
en: "Info:",
fr: "À noter :",
es: "Nota:",
pt: "Nota:"
},
antonPlusTitle: {
de: "ANTON-Plus",
en: "ANTON Plus",
fr: "ANTON-Plus",
es: "ANTON-Plus",
pt: "ANTON-Plus"
},
plusInfoText1: {
de: "Um offline zu lernen, lade zunächst die gewünschten Lerninhalte herunter. Gehe dafür auf Fächer und klicke oben rechts auf den Pfeil.",
en: "In order to learn offline, first download the desired learning material. In order to do this go to subjects and click on the arrow in the upper right-hand corner.",
fr: "Pour apprendre hors ligne, télécharge d'abord le contenu qui t'intéresse. Pour le faire, tu dois aller dans Matières et appuyer sur la flèche située en haut à droite.",
es: "Para poder aprender fuera de línea necesitas descargar primero el contenido que te interese. Esto lo logras en Materias presionando la flecha que está en la esquina superior izquierda.",
pt: "Para poder aprender offline, você precisa primeiro baixar o conteúdo desejado. Para fazer isso, vá até Disciplinas e clique na seta que está no canto superior esquerdo."
},
plusFamilyInfoTextNoGroups: {
de: "Um deine Familienmitglieder für ANTON-Plus freizuschalten, gehe auf Gruppen und erstelle dann eine Familiengruppe. Zu dieser kannst du deine Familienmitglieder dann hinzufügen.",
en: "In order to give your family access to ANTON Plus, go to Groups and create a family group. You will then be able to add members to your family group.",
fr: "Pour que ta famille ait accès à ANTON-Plus, va dans Groupes et crée un groupe familial. Tu pourras ensuite ajouter des membres à ce groupe.",
es: "Para darle acceso de ANTON-Plus a los miembros de tu familia, debes ir a Grupos y crear un grupo familiar. Después podrás agregar a los miembros de tu familia a ese grupo.",
pt: "Para liberar o acesso ao ANTON-Plus aos membros da sua família,vá até Grupos e crie um grupo familiar.Você poderá então agregar os membros da sua família a esse grupo."
},
plusFamilyInfoTextExistingGroups: {
de: "Um deine Familienmitglieder für ANTON-Plus freizuschalten, gehe auf Gruppen, klicke oben links auf Gruppe wechseln und erstelle dann eine Familiengruppe. Zu dieser kannst du deine Familienmitglieder dann hinzufügen.",
en: "In order to give your family access to ANTON Plus, go to Groups, click in the upper left-hand corner on Change group and create a family group. You will then be able to add members to your family group.",
fr: "Pour que ta famille ait accès à ANTON-Plus, va dans Groupes, appuie sur Changer de groupe en haut à gauche et crée un groupe familial. Tu pourras ensuite ajouter des membres à ce groupe.",
es: "Para darle acceso de ANTON-Plus a los miembros de tu familia, debes ir a Grupos, luego presionar Cambiar de grupo y crear un grupo familiar. Después podrás agregar a los miembros de tu familia a ese grupo.",
pt: "Para liberar o acesso ao ANTON-Plus aos membros da sua família,vá até Grupos e crie um grupo familiar.Você poderá, então, adicionar os membros da sua família a esse grupo."
},
antonPlusUrl: {
de: "anton-plus",
en: "anton-plus",
fr: "anton-plus",
es: "anton-plus",
pt: "anton-plus"
}
};
})();
pages/static/antonPlus/5_productInfo/_topbar/topbar.ls
(function(){
return function(page){
return inc("/addons/topbar2/topbar")({
title: page.productName
});
};
})();
pages/static/antonPlus/5_productInfo/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("antonPlusUrl"),
title: T("antonPlusTitle"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/antonPlus/5_productInfo/button/button.ls
(function(){
return function(page){
return Button(T("continueButton")).css({
minWidth: "5em"
}).tap(function(){
return startPage({
history: -1,
animation: "slideDown"
});
});
};
})();
pages/static/antonPlus/5_productInfo/icon/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/bulb.svg"),
width: "4em",
height: "4em",
color: Color.yellow[600]
}).css({
marginBottom: "0.5em"
});
};
})();
pages/static/antonPlus/5_productInfo/info/info.ls
(function(){
return function(page){
var p;
p = page.product;
if (p === "plus") {
return inc("plus/plus")(page);
} else if (p === "plusFamily") {
return inc("plusFamily/plusFamily")(page);
}
};
})();
pages/static/antonPlus/5_productInfo/info/plus/icon/icon.ls
(function(){
return function(){
return Div().css({
padding: "1em",
marginBottom: "0.3em"
}).append(Div().css({
display: "inline-flex",
backgroundColor: Color.grey[100],
width: "4em",
height: "2.7em",
borderRadius: "1.5em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/arrow-download.svg"),
width: "1.5em",
height: "1.3em"
})));
};
})();
pages/static/antonPlus/5_productInfo/info/plus/plus.ls
(function(){
return function(page){
return Div().css({
width: "30em",
maxWidth: "90%",
margin: "0 auto",
lineHeight: "1.5em"
}).html(T("plusInfoText1"), inc("icon/icon")());
};
})();
pages/static/antonPlus/5_productInfo/info/plusFamily/icon/icon.ls
(function(){
return function(){
return Div().css({
padding: "1em",
marginBottom: "0.3em"
}).append(Div().css({
display: "inline-flex",
backgroundColor: Color.grey[100],
width: "4em",
height: "2.7em",
borderRadius: "1.5em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/plus.svg"),
width: "1.5em",
height: "1.3em"
})));
};
})();
pages/static/antonPlus/5_productInfo/info/plusFamily/plusFamily.ls
(function(){
return function(page){
var groupCodes;
groupCodes = inc("/data/group/calcGroupCodes/calc")();
return Div().css({
width: "30em",
maxWidth: "90%",
margin: "0 auto 1em",
lineHeight: "1.5em"
}).html(groupCodes.length === 0
? T("plusFamilyInfoTextNoGroups")
: T("plusFamilyInfoTextExistingGroups"));
};
})();
pages/static/antonPlus/5_productInfo/page.ls
(function(){
return function(page){
page.product = page.params.product;
page.productName = page.params.productName;
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
return page.css({
margin: "0 auto",
width: "30em",
maxWidth: "95%",
padding: "1em"
}).append(inc("icon/icon")(), inc("title/title")(page), inc("info/info")(page), inc("button/button")(page));
}
};
};
})();
pages/static/antonPlus/5_productInfo/title/title.ls
(function(){
return function(page){
return Div().css({
marginBottom: "0.8em",
fontWeight: "bold"
}).html(T("hint"));
};
})();
pages/static/cancelDeletionDirAdmin/00_shared/linkBack/link.ls
(function(){
return function(){
return Div().html(inc("/lib/gui/link/link")({
label: T("back"),
direction: "left"
}).tap(function(){
return startPage({
history: -1,
animation: "slideRight"
});
}).css({
margin: "0.2em",
padding: "0.4em"
}));
};
})();
pages/static/cancelDeletionDirAdmin/00_shared/topbar/topbar.ls
(function(){
return function(){
return inc("/addons/topbar2/topbar")({
title: T("abortDeletion"),
close: function(){
return startPage({
history: function(path){
return !_.includes(path, "cancelDeletionDirAdmin");
},
animation: "slideDown"
});
}
});
};
})();
pages/static/cancelDeletionDirAdmin/01_start/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var tap, onDone;
inc("/lib/util/cache/set/set")("finishFunctionPath", page.params.finishFunctionPath);
tap = function(){
if (!inc("/lib/util/isOnline/isOnline")()) {
inc("/lib/offline/offlinePopup/popup")();
return;
}
return inc("../01b_askAge/popup")(onDone);
};
onDone = function(){
return inc("../02_termsAndPrivacy/start")();
};
return page.html(Div({
margin: "0 auto 1em",
width: "30em",
maxWidth: "90%",
lineHeight: "1.7em",
textAlign: "justify",
hyphens: "auto",
whiteSpace: "normal"
}).html(T("cancelInfo")), Button(T("begin")).tap(tap));
}
};
};
})();
pages/static/cancelDeletionDirAdmin/01b_askAge/button/button.ls
(function(){
return function(label, tap){
return Button(label).css({
margin: "0.3em",
minWidth: "5em"
}).tap(tap);
};
})();
pages/static/cancelDeletionDirAdmin/01b_askAge/popup.ls
(function(){
return function(onYes){
var logAndClose, clickYes, clickNo, div, popup;
logAndClose = function(is16){
log.log({
event: "clickConfirmAge16",
value: is16
});
return popup.close();
};
clickYes = function(){
logAndClose(true);
return onYes();
};
clickNo = function(){
logAndClose(false);
return inc("/lib/gui/infoPopup/popup")({
label: T("askParents")
});
};
div = Div().css({
margin: "1em 0"
}).append(inc("text/text")(), inc("button/button")(T("yes"), clickYes), inc("button/button")(T("no"), clickNo));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/cancelDeletionDirAdmin/01b_askAge/text/text.ls
(function(){
return function(){
return Div().css({
padding: "0 1em 1em 1em",
lineHeight: "1.5em"
}).html(T("min16Years"));
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/_t.ls
(function(){
return {
iAgree: {
de: "Ich stimme den",
en: "I agree to the",
fr: "J'accepte la",
es: "Acepto la",
pt: "Eu aceito a"
},
privacyPolicy: {
de: "Datenschutzbestimmungen",
en: "privacy policy",
fr: "politique de protection des données personnelles",
es: "política de privacidad",
pt: "política de privacidade"
},
to: {
de: "zu.",
en: ".",
fr: ".",
es: ".",
pt: "."
},
agreeToTermsAndPrivacyPolicy: {
de: "Bitte stimme den Nutzungsbedingungen und den Datenschutzbestimmungen zu.",
en: "Please agree to the terms of use and to the privacy policy.",
fr: "Merci d'accepter nos conditions d'utilisation et notre politique de protection des données personnelles.",
es: "Por favor, acepta nuestras condiciones de uso y nuestra política de privacidad.",
pt: "Por favor, aceite nossos termos de uso e nossa política de privacidade."
},
andThe: {
de: "und den",
en: "and the",
fr: "et les",
es: "y las",
pt: "e os"
},
terms: {
de: "Nutzungsbedingungen",
en: "terms of use",
fr: "conditions d'utilisation",
es: "condiciones de uso",
pt: "termos de uso"
},
antonPrivacy: {
de: "ANTON-Datenschutzbestimmungen",
en: "ANTON privacy policy",
fr: "politique de protection des données personnelles d'ANTON",
es: "política de privacidad de ANTON",
pt: "política de privacidade de ANTON"
},
antonTerms: {
de: "ANTON-Nutzungsbedingungen",
en: "ANTON terms of use",
fr: "conditions d'utilisation d'ANTON",
es: "condiciones de uso de ANTON",
pt: "termos de uso de ANTON"
},
alreadyAccepted: {
de: "Bereits zugestimmt",
en: "Already accepted",
fr: "Déjà acceptées",
es: "Ya han sido aceptadas",
pt: "Já foram aceitas"
}
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/checkIcon/icon.ls
(function(){
return function(acceptPrivacy){
return SvgIcon({
svg: acceptPrivacy
? path("/lib/svg/icon/check-on.svg")
: path("/lib/svg/icon/check-off.svg")
}).css({
marginRight: "0.4em",
verticalAlign: "-0.18em"
});
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/checkbox.ls
(function(){
return function(page){
var click, div;
click = function(){
page.params.acceptPrivacy = !page.params.acceptPrivacy;
return div.replaceWith(inc(THISFILE)(page));
};
return div = Div({
display: "inline-block",
marginBottom: "2em",
lineHeight: "1.6em",
maxWidth: "90%",
width: "30em"
}).append(inc("checkIcon/icon")(page.params.acceptPrivacy), T("iAgree"), inc("termsLink/link")(T("terms")), T("andThe"), inc("privacyLink/link")(T("privacyPolicy")), T("to")).tap(click);
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/link/link.ls
(function(){
return function(label, click){
return Span().css({
textDecoration: "underline",
padding: "0.2em",
margin: "0 0.1em"
}).html(label).tap({
animation: "none",
down: function(){
return this.css({
backgroundColor: Color.grey[150]
});
},
up: function(){
this.css({
backgroundColor: ""
});
return click();
},
cancel: function(){
return this.css({
backgroundColor: ""
});
}
});
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/privacyLink/link.ls
(function(){
return function(label){
var click;
click = function(){
return inc("popupPrivacy/popup")();
};
return inc("../link/link")(label, click);
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/privacyLink/popupPrivacy/popup.ls
(function(){
return function(onYes){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("antonPrivacy")), inc("/pages/static/privacy/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/termsLink/link.ls
(function(){
return function(label){
var click;
click = function(){
return inc("popupTerms/popup")();
};
return inc("../link/link")(label, click);
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/checkboxTeacherPrivacy/termsLink/popupTerms/popup.ls
(function(){
return function(onYes){
var div, popup;
div = Div().css({
width: "35em",
margin: "1em 0",
textAlign: "left"
}).append(Div().css({
fontWeight: "bold",
textAlign: "center"
}).html(T("antonTerms")), inc("/pages/static/terms/div/div")());
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/logEvents/log.ls
(function(){
return function(){
var i$, ref$, len$, event, results$ = [];
for (i$ = 0, len$ = (ref$ = ["setAcceptPrivacy", "setAcceptTerms"]).length; i$ < len$; ++i$) {
event = ref$[i$];
if (!log.findLast(event)) {
results$.push(log.log({
event: event,
value: true
}));
}
}
return results$;
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var click, checkbox, button;
page.params.acceptPrivacy = log.findLast("setAcceptPrivacy") && log.findLast("setAcceptTerms");
click = function(){
if (page.params.acceptPrivacy) {
inc("logEvents/log")();
return inc("../03_email/start")();
} else {
return inc("popupCheckMissing/popup")();
}
};
page.append(checkbox = inc("checkboxTeacherPrivacy/checkbox")(page), " ", button = Button(T("continue")).tap(click), inc("../00_shared/linkBack/link")());
if (page.params.acceptPrivacy) {
return checkbox.css({
opacity: 0.5,
pointerEvents: "none"
}).append(Div().css({
marginTop: "0.5em"
}).html(T("alreadyAccepted")));
}
}
};
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/popupCheckMissing/popup.ls
(function(){
return function(){
var div, popup;
div = Div().css({
padding: "1em",
lineHeight: "1.5em"
}).append(T("agreeToTermsAndPrivacyPolicy"));
return popup = inc("/lib/gui/popup/popup")({
html: div
});
};
})();
pages/static/cancelDeletionDirAdmin/02_termsAndPrivacy/start.ls
(function(){
return function(){
if (log.findLast("setAcceptPrivacy") && log.findLast("setAcceptTerms")) {
inc("../03_email/start")();
return;
}
return startPage({
path: path("page"),
animation: "fadeIn"
});
};
})();
pages/static/cancelDeletionDirAdmin/03_email/_t.ls
(function(){
return {
emptyEmail: {
de: "Die E-Mail darf nicht leer sein!",
en: "The email cannot be left blank!",
fr: "L'e-mail ne peut pas rester vide.",
es: "El correo electrónico no puede quedar vacío.",
pt: "O endereço de e-mail não pode ficar vazio."
},
errorMessage: {
de: "Ups, hier ist etwas schief gelaufen.",
en: "Oops, something went wrong here.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Algo no salió bien.",
pt: "Ops! Algo deu errado aqui."
},
invalidEmail: {
de: "Diese E-Mail-Adresse ist ungültig.",
en: "This email address is invalid.",
fr: "Cette adresse e-mail n'est pas valide.",
es: "Esta dirección de correo no es válida.",
pt: "Este endereço de e-mail não é válido."
},
unavailableEmail: {
de: "Diese E-Mail-Adresse ist bereits vergeben.",
en: "This email address has already been taken.",
fr: "Cette adresse e-mail est déjà prise.",
es: "Esta dirección de correo ya está en uso.",
pt: "Este endereço de e-mail já está sendo utilizado."
},
enterEmail: {
de: "Damit du dein Konto stets wiederherstellen kannst, gib bitte deine E-Mail-Adresse ein:",
en: "So that your account can always be recovered, please enter your email:",
fr: "Merci d'entrer ton adresse e-mail pour t'assurer de toujours pouvoir retrouver ton compte.",
es: "Por favor, ingresa tu correo electrónico para que eventualmente puedas restaurar tu cuenta.",
pt: "Por favor, digite seu endereço de e-mail para que você possa eventualmente restaurar sua conta."
},
save: {
de: "Speichern",
en: "Save",
fr: "Enregistrer",
es: "Guardar",
pt: "Salvar"
},
notNow: {
de: "Nicht jetzt",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
}
};
})();
pages/static/cancelDeletionDirAdmin/03_email/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var mail, ref$, onDone, onSkip, submit, form;
mail = (ref$ = log.findLast("setEMail")) != null ? ref$.value : void 8;
onDone = function(){
return inc("../03b_password/start")();
};
onSkip = function(){
return inc("../04_cancelDeletion/start")();
};
submit = function(){
return inc("submit/submit")(page, mail, form, onDone);
};
return page.append(form = inc("/lib/gui/inputForm/inputForm")({
label: T("enterEmail"),
submitLabel: T("save"),
submit: submit,
cancel: false,
forceShowButtons: true
}), !mail ? inc("skipLink/link")(onSkip) : void 8, inc("../00_shared/linkBack/link")());
}
};
};
})();
pages/static/cancelDeletionDirAdmin/03_email/skipLink/link.ls
(function(){
return function(onDone){
return inc("/lib/gui/link/link")({
label: T("notNow")
}).css({
marginLeft: "0.5em",
marginTop: "1em"
}).tap(onDone);
};
})();
pages/static/cancelDeletionDirAdmin/03_email/start.ls
(function(){
return function(){
if (log.findLast("setEMail")) {
inc("../04_cancelDeletion/start")();
return;
}
return startPage({
path: path("page"),
animation: "slideLeft"
});
};
})();
pages/static/cancelDeletionDirAdmin/03_email/submit/onCompleted/onCompleted.ls
(function(){
return function(result, form, onDone, onError){
if (result.status !== "ok") {
return onError(result);
} else {
form.hideSpinner();
return onDone();
}
};
})();
pages/static/cancelDeletionDirAdmin/03_email/submit/submit.ls
(function(){
return function(page, oldMail, form, onDone){
var mail, onError, onOffline;
mail = form.input.getValue();
if (mail === oldMail) {
onDone();
return;
}
if (mail === "") {
form.error.html(T("emptyEmail"));
form.input.start();
return;
}
form.error.html(" ");
form.showSpinner();
onError = function(error){
var message;
form.hideSpinner();
message = error.status === "error_invalid"
? T("invalidEmail")
: error.status === "error_unavailable"
? T("unavailableEmail")
: T("errorMessage");
return form.error.html(message);
};
onOffline = function(){
form.hideSpinner();
form.input.start();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setEmail/set"),
params: {
email: mail,
logId: log.id()
},
onCompleted: function(result){
return inc("onCompleted/onCompleted")(result, form, onDone, onError);
},
onError: onError,
onOffline: onOffline
});
};
})();
pages/static/cancelDeletionDirAdmin/03b_password/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein!",
en: "The password cannot be left blank!",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen.",
en: "Oops, something has gone wrong.",
fr: "Oups… il y a eu un problème.",
es: "¡Ups! Algo no funcionó.",
pt: "Ops! Algo deu errado aqui."
},
errorInvalidLength: {
de: "Das Passwort muss mindestens ((ein | $1)) Zeichen beinhalten.",
en: "The password must contain at least ((one character | $1 characters)).",
fr: "Le mot de passe doit contenir au moins ((un caractère | $1 caractères)).",
es: "La contraseña debe contener por lo menos ((un carácter | $1 caracteres)).",
pt: "A senha deve conter pelo menos ((um caractere | $1 caracteres))."
},
errorInvalidCharacter: {
de: "Das Passwort enthält ein ungültiges Zeichen: '$1'",
en: "The password contains an invalid character: '$1'",
fr: "Le mot de passe contient un caractère non valide : “$1”",
es: "La contraseña contiene un carácter no válido: '$1'",
pt: "A senha deve conter um caractere válido: '$1'"
},
inputPassword: {
de: "Wie soll das Passwort für diese E-Mail-Adresse lauten?",
en: "What should be the password for this email address?",
fr: "Quel mot de passe veux-tu pour aller avec cette adresse e-mail ?",
es: "¿Cuál quieres que sea la contraseña para este correo electrónico?",
pt: "Qual deve ser a senha para este endereço de e-mail?"
},
password: {
de: "Passwort",
en: "Password",
fr: "Mot de passe",
es: "Contraseña",
pt: "Senha"
}
};
})();
pages/static/cancelDeletionDirAdmin/03b_password/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var onDone, submit, form;
onDone = function(){
return inc("../04_cancelDeletion/start")();
};
submit = function(){
return inc("submit/submit")(form, onDone);
};
page.html(form = inc("/lib/gui/inputForm/inputForm")({
label: T("inputPassword"),
isPassword: true,
submitLabel: T("continueButton"),
submit: submit,
cancel: false,
forceShowButtons: true
}), inc("../00_shared/linkBack/link")());
return form.input.start();
}
};
};
})();
pages/static/cancelDeletionDirAdmin/03b_password/start.ls
(function(){
return function(){
if (log.findLast("setPasswordSetAt")) {
inc("../04_cancelDeletion/start")();
return;
}
return startPage({
path: path("page"),
animation: "slideLeft"
});
};
})();
pages/static/cancelDeletionDirAdmin/03b_password/submit/submit.ls
(function(){
return function(form, onPageComplete){
var password, onOffline;
password = form.input.getValue();
if (password === "") {
form.error.html(T("emptyPassword"));
form.input.start();
return;
}
form.showSpinner();
onOffline = function(){
form.input.start();
form.hideSpinner();
return inc("/lib/offline/offlinePopup/popup")();
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/setPassword/set"),
params: {
password: password,
logId: log.id()
},
onCompleted: function(result){
var message;
if (result.status !== "ok") {
form.hideSpinner();
message = result.status === "error_invalid_length"
? T("errorInvalidLength", result.count)
: result.status === "error_invalid_length"
? T("errorInvalidCharacter", result.character)
: T("errorMessage");
return form.error.html(message);
} else {
return log.sync(function(error){
if (error) {
return onOffline();
} else {
return onPageComplete();
}
});
}
},
onError: function(error){
form.error.html(T("errorMessage"));
return form.hideSpinner();
},
onOffline: onOffline
});
};
})();
pages/static/cancelDeletionDirAdmin/04_cancelDeletion/_t.ls
(function(){
return {
notNow: {
de: "Jetzt nicht",
en: "Not now",
fr: "Pas maintenant",
es: "En otro momento",
pt: "Agora não"
},
emptyPassword: {
de: "Das Passwort darf nicht leer sein!",
en: "The password cannot be left blank!",
fr: "Le mot de passe ne peut pas rester vide.",
es: "La contraseña no puede quedar en blanco.",
pt: "A senha não pode ficar em branco."
},
errorMessage: {
de: "Ups, etwas ist schief gegangen.",
en: "Oops, something has gone wrong.",
fr: "Oups… il y a eu une erreur.",
es: "¡Ups! Algo salió mal.",
pt: "Ops! Algo deu errado aqui."
},
errorInvalidLength: {
de: "Das Passwort muss mindestens ((ein | $1)) Zeichen beinhalten.",
en: "The password must contain at least ((one character | $1 characters)).",
fr: "Le mot de passe doit contenir au moins ((un caractère | $1 caractères)).",
es: "La contraseña debe de contener por lo menos ((un carácter | $1 caracteres)).",
pt: "A senha deve conter pelo menos ((um caractere | $1 caracteres))."
},
errorInvalidCharacter: {
de: "Das Passwort enthält ein ungültiges Zeichen: '$1'",
en: "The password contains an invalid character: '$1'",
fr: "Le mot de passe contient un caractère non valide : “$1”",
es: "La contraseña contiene un carácter no válido: '$1'",
pt: "A senha contém um caractere inválido: '$1'"
},
inputPassword: {
de: "Wie soll das Passwort für diese E-Mail-Adresse lauten?",
en: "What should be the password for this email address?",
fr: "Quel mot de passe veux-tu pour aller avec cette adresse e-mail ?",
es: "¿Qué contraseña quieres que se le asigne a este correo electrónico?",
pt: "Qual deve ser a senha para este endereço de e-mail?"
},
password: {
de: "Passwort",
en: "Password",
fr: "Mot de passe",
es: "Contraseña",
pt: "Senha"
},
exportAndDeleteNow: {
de: "Klicke auf Fertig, um den Prozess jetzt abzuschließen und die Löschung abzubrechen.",
en: "Click on Done to finish the process and cancel the deletion.",
fr: "Appuie sur Fini pour terminer le processus et annuler la suppression.",
es: "Presiona Listo para terminar el proceso y cancelar la eliminación.",
pt: "Clique em Pronto para terminar o processo e cancelar sua exclusão."
},
yesComplete: {
de: "Fertig",
en: "Done",
fr: "Fini",
es: "Listo",
pt: "Pronto"
}
};
})();
pages/static/cancelDeletionDirAdmin/04_cancelDeletion/cancelDeletion/cancel.ls
(function(){
return function(onDone, onError){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/user/cancelDeletionDirAdmin/cancel"),
params: {
logId: log.id(),
deviceId: deviceLog.id()
},
onCompleted: function(result){
if (result.status === "ok") {
return log.sync(function(){
return onDone(result.loginCode);
});
} else {
debug(result);
return onError(result);
}
},
onError: onError,
onOffline: function(){
return onError("offline");
}
});
};
})();
pages/static/cancelDeletionDirAdmin/04_cancelDeletion/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var spinner, cancelDeletion, onDone, onError;
spinner = null;
cancelDeletion = function(){
spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(this);
return inc("cancelDeletion/cancel")(onDone, onError);
};
onDone = function(loginCode){
return inc("../04_showLoginCodeAndFinish/start")(loginCode);
};
onError = function(error){
spinner.stop();
if (error.message === "no markForDelete found") {
return onDone();
} else if (error === "offline") {
return inc("/lib/offline/offlinePopup/popup")();
} else {
return inc("/lib/gui/errorPopup/popup")();
}
};
return page.html(Div({
maxWidth: "25em",
lineHeight: "1.7em",
margin: "0 auto 1em"
}).html(T("exportAndDeleteNow")), Button(T("yesComplete")).tap(cancelDeletion));
}
};
};
})();
pages/static/cancelDeletionDirAdmin/04_cancelDeletion/start.ls
(function(){
return function(){
if (!log.findLast("markForDelete")) {
inc("../04_showLoginCodeAndFinish/start")();
return;
}
return startPage({
path: path("page"),
animation: "slideLeft"
});
};
})();
pages/static/cancelDeletionDirAdmin/04_showLoginCodeAndFinish/_t.ls
(function(){
return {
text: {
de: "Dies ist dein neuer Anmelde-Code. Bitte schreibe ihn auf oder drucke ihn aus, damit du den Zugang zu deinem Konto nicht verlieren kannst. Du kannst ihn auch jederzeit in den Einstellungen unter Anmelde-Code nachschauen.",
en: "This is your new login code. Please write it down or print it out so that you don’t lose access to your account. You can always find it in the settings under Login code.",
fr: "Voici ton nouveau code de connexion. Nous te conseillons de le noter quelque part ou de l'imprimer pour ne pas perdre l'accès à ton compte. Tu peux toujours le trouver dans tes paramètres à Code de connexion.",
es: "Esta es tu nueva clave de acceso. Te aconsejamos anotarla o imprimirla para que no pierdas el acceso a tu cuenta. Puedes consultar tu clave en cualquier momento en los ajustes bajo clave de acceso.",
pt: "Este é o seu novo código de acesso. Anote ou imprima-o para não perder o acesso à sua conta. Vocêtambém pode consultá-lo a qualquer momento nas configurações, em código de acesso."
},
loginCode: {
de: "Anmelde-Code:",
en: "Login code:",
fr: "Code de connexion :",
es: "Clave de acceso",
pt: "Código de acesso:"
},
okDone: {
de: "Fertig",
en: "Done",
fr: "OK",
es: "Listo",
pt: "Pronto"
},
print: {
de: "Drucken",
en: "Print",
fr: "Imprimer",
es: "Imprimir",
pt: "Imprimir"
}
};
})();
pages/static/cancelDeletionDirAdmin/04_showLoginCodeAndFinish/buttonDone/button.ls
(function(){
return function(onClick){
return Button(T("okDone")).css({
marginTop: "1em"
}).tap(onClick);
};
})();
pages/static/cancelDeletionDirAdmin/04_showLoginCodeAndFinish/buttonPrint/button.ls
(function(){
return function(loginCode){
var d, print;
d = inc("/data/user/calcUserDescription/calc")();
print = function(){
var userCard;
userCard = inc("/../qrcode/userCard/userCard")({
loginCode: loginCode,
name: d.displayName || d.name
});
return inc("/lib/util/print/print")({
div: userCard,
title: T("loginCode")
});
};
return Button({
label: T("print"),
icon: path("/lib/svg/shape/print.svg"),
iconColor: Color.grey[600]
}).css({
marginTop: "1.5em",
marginRight: "1em"
}).tap(print);
};
})();
pages/static/cancelDeletionDirAdmin/04_showLoginCodeAndFinish/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../00_shared/topbar/topbar")();
},
start: function(){
var onPageFinished, loginCode;
onPageFinished = function(){
var finishFunctionPath;
finishFunctionPath = inc("/lib/util/cache/get/get")("finishFunctionPath");
return inc(finishFunctionPath)();
};
loginCode = page.params.loginCode;
if (loginCode == null) {
onPageFinished();
return;
}
return page.append(Div({
margin: "0 auto",
width: "30em",
maxWidth: "90%"
}).append(Div({
marginBottom: "1em",
lineHeight: "1.5em"
}).html(T("text")), Div({
fontSize: "1.3em"
}).html(T("loginCode"), Span().css({
userSelect: "text",
marginLeft: "0.2em"
}).html(loginCode.toLowerCase())), inc("buttonPrint/button")(loginCode), inc("buttonDone/button")(onPageFinished)));
}
};
};
})();
pages/static/cancelDeletionDirAdmin/04_showLoginCodeAndFinish/start.ls
(function(){
return function(loginCode){
return startPage({
path: path("page"),
animation: "slideLeft",
params: {
loginCode: loginCode
}
});
};
})();
pages/static/cancelDeletionDirAdmin/_t.ls
(function(){
return {
cancelInfo: {
de: "Um die Löschung abzubrechen, musst du mindestens 16 Jahre alt sein oder deine Eltern bitten, die folgenden Schritte durchzuführen. Wenn du fertig bist, erhältst du einen neuen Anmelde-Code und kannst dein Nutzerkonto unabhängig von der Schule weiternutzen.",
en: "To stop the deletion process, you have to be at least 16 years old or ask your parents to go through the following steps for you. When you are done, you will receive a new login code and you will be able to use ANTON separately from your school.",
fr: "Pour arrêter le processus de suppression, tu dois avoir 16 ans ou plus. Si ce n'est pas le cas, tu dois demander à tes parents de suivre les étapes suivantes pour toi. Quand c'est fait, tu recevras un nouveau code de connexion et tu pourras utiliser ANTON indépendamment de ton école.",
es: "Para suspender el proceso de eliminación debes tener por lo menos 16 años o preguntarle a algún adulto responsable, que lleve a cabo los siguientes pasos. Cuando hayas terminado, recibirás una nueva clave de acceso y podrás utilizar tu cuenta independientemente de la escuela.",
pt: "Para cancelar a exclusão, você deve ter pelo menos 16 anos ou pedir a seus pais que concluam as etapas a seguir. Ao terminar, você receberá um novo código de acesso e poderá continuar como usuário(a), independentemente da escola."
},
begin: {
de: "Beginnen",
en: "Begin",
fr: "Commencer",
es: "Comenzar",
pt: "Começar"
},
min16Years: {
de: "Bist du mindestens 16 Jahre alt?",
en: "Are you at least 16 years old?",
fr: "Est-ce que tu as 16 ans ou plus ?",
es: "¿Tienes por lo menos 16 años de edad?",
pt: "Você tem pelo menos 16 anos?"
},
pleaseAcceptPrivacyPolicy: {
de: "Bitte stimme noch unseren Datenschutzbestimmungen zu.",
en: "Please agree to our privacy policy.",
fr: "Merci d'accepter notre politique de protection des données personnelles.",
es: "Por favor, acepta nuestra política de privacidad.",
pt: "Por favor, aceite nossa política de privacidade."
},
showPolicy: {
de: "Bestimmungen ansehen",
en: "View terms",
fr: "Voir les conditions",
es: "Ver condiciones",
pt: "Ver condições"
},
accept: {
de: "Zustimmen",
en: "Agree",
fr: "Accepter",
es: "Aceptar",
pt: "Aceitar"
},
pleaseAcceptTerms: {
de: "Bitte stimme noch unseren Nutzungsbedingungen zu.",
en: "Please agree to our terms.",
fr: "Merci d'accepter nos conditions.",
es: "Por favor, acepta nuestras condiciones.",
pt: "Por favor, aceite nossos termos de uso."
},
emailPrompt: {
de: "Bitte trage deine E-Mail-Adresse ein:",
en: "Please enter your email address:",
fr: "Merci d'entrer ton adresse e-mail :",
es: "Por favor, ingresa tu correo electrónico:",
pt: "Por favor, digite seu endereço de e-mail:"
},
'continue': {
de: "Weiter",
en: "Continue",
fr: "Continuer",
es: "Continuar",
pt: "Continuar"
},
askParents: {
de: "Bitte frage deine Eltern, ob sie die nächsten Schritte für dich durchführen können.",
en: "Please ask your parents to go through the following steps for you.",
fr: "Merci de demander à tes parents de suivre les étapes suivantes pour toi.",
es: "Por favor, pídele a tu padre o a tu madre que lleven a cabo los siguientes pasos por ti.",
pt: "Por favor, pergunte aos seus pais se eles podem fazer as próximas etapas para você."
},
abortDeletion: {
de: "Löschung abbrechen",
en: "Cancel deletion",
fr: "Annuler la suppression",
es: "Cancelar la eliminación",
pt: "Cancelar exclusão"
},
back: {
de: "Zurück",
en: "Back",
fr: "Retour",
es: "Anterior",
pt: "Voltar"
}
};
})();
pages/static/download/_t.ls
(function(){
return {
downloadAnton: {
de: "Download ANTON",
en: "Download ANTON",
fr: "Télécharger ANTON",
es: "Descargar ANTON",
pt: "Baixar ANTON"
},
appStore: {
de: "App Store",
en: "App Store",
fr: "App Store",
es: "App Store",
pt: "App Store"
},
amazonAppStore: {
de: "Amazon App Store",
en: "Amazon App Store",
fr: "Amazon Appstore",
es: "Amazon Appstore",
pt: "Amazon Appstore"
},
playStore: {
de: "Play Store",
en: "Play Store",
fr: "Play Store",
es: "Play Store",
pt: "Play Store"
},
openStoreAgain: {
de: "$1 nochmal öffnen",
en: "Reopen $1",
fr: "Rouvrir $1",
es: "Abrir $1 nuevamente",
pt: "Abrir $1 novamente"
},
youCanUseAntonInBrowser: {
de: "Du kannst ANTON natürlich auch hier im Browser nutzen.",
en: "You can also use ANTON here in the browser.",
fr: "Tu peux aussi utiliser ANTON ici dans le navigateur.",
es: "También puedes usar ANTON aquí en el navegador.",
pt: "Você também pode usar ANTON aqui no seu navegador."
},
downloadUrl: {
de: "download",
en: "download",
fr: "telecharger",
es: "descargar",
pt: "baixar"
}
};
})();
pages/static/download/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, T("downloadAnton"));
};
})();
pages/static/download/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: T("downloadUrl") + "/" + (page.shareId || ""),
title: T("downloadAnton"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/download/calcDeviceType/calc.ls
(function(){
return function(){
var p, isAmazonFire;
p = inc("/lib/util/calcAppType/calcPlatform/calc")();
if (p === "Android") {
isAmazonFire = navigator.userAgent.indexOf("Silk") !== -1;
if (isAmazonFire) {
return "amazon";
} else {
return "android";
}
} else if (p === "iOS") {
return "iOS";
} else {
return "other";
}
};
})();
pages/static/download/calcShareId/calc.ls
(function(){
return function(page){
var pageUrl, shareId;
pageUrl = inc("/lib/util/browser/getPageUrl/get")();
shareId = pageUrl.split("/")[1] || inc("/lib/util/browser/getPageUrlParam/get")("shareId");
inc("/lib/util/browser/removePageUrlParam/remove")("shareId");
return shareId;
};
})();
pages/static/download/linkToStore/link.ls
(function(){
return function(type, onClick){
var store;
if (type === "other") {
return;
}
store = type === "iOS"
? T("appStore")
: type === "amazon"
? T("amazonAppStore")
: type === "android" ? T("playStore") : void 8;
return inc("/lib/gui/link/link")(T("openStoreAgain", store)).css({
margin: "1em 0.5em 0.5em 0.5em",
color: Color.grey[600]
}).tap(onClick);
};
})();
pages/static/download/page.ls
(function(){
return function(page){
page.shareId = inc("calcShareId/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var deviceType, redirect;
deviceType = inc("calcDeviceType/calc")();
redirect = inc("redirectToStore/redirect")(page, deviceType);
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("text/text")(), inc("../_shared/linkToStart/link")(), inc("linkToStore/link")(deviceType, redirect));
return redirect();
}
};
};
})();
pages/static/download/redirectToStore/log/log.ls
(function(){
return function(page){
return typeof deviceLog != 'undefined' && deviceLog !== null ? deviceLog.log({
event: "deviceDebugClickShareLink",
shareId: page.shareId,
userAgent: navigator.userAgent,
screenSize: body.width() + "x" + body.height()
}) : void 8;
};
})();
pages/static/download/redirectToStore/redirect.ls
(function(){
return function(page, type){
return function(){
var url;
inc("log/log")(page);
url = type === "amazon"
? "amzn://apps/android?p=com.solocode.anton"
: type === "android"
? "https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.solocode.anton"
: type === "iOS" ? "itms-apps://itunes.apple.com/app/id1180554775" : void 8;
if (!url) {
return;
}
return window.open(url, "_self");
};
};
})();
pages/static/download/text/text.ls
(function(){
return function(){
return Div({
margin: "0.5em",
marginTop: "2em"
}).html(T("youCanUseAntonInBrowser"));
};
})();
pages/static/jobs/_t.ls
(function(){
return {
jobs: {
de: "Jobs",
en: "Jobs",
fr: "Emploi",
es: "Ofertas de trabajo",
pt: "Vagas"
},
urlTitle: {
de: "Jobs, Stellenangebote und Praktikumsplätze",
en: "Jobs, vacancies and internships",
fr: "Offres d'emploi et stages",
es: "Empleos, trabajos y pasantías",
pt: "Empregos e estágios"
},
metaDescr: {
de: "Erfinde und entwickle die Zukunft des digitalen Lernens und bewirb dich bei uns. Wir sind ein kleines, modernes und motiviertes Team mit vielen Freiheiten und hoher Professionalität.",
en: "Create and develop the future of digital learning by applying to work with us. We are a small, modern and motivated team with a lot of freedom and a high level of professionalism.",
fr: "Invente et développe le futur de l’apprentissage numérique avec nous. Nous sommes une petite équipe moderne, motivée, très flexible et qui fait preuve d'un grand professionnalisme. Nous attendons ta candidature !",
es: "Inventa y diseña el futuro del aprendizaje digital con nosotros. Somos un equipo pequeño, moderno, motivado, muy flexible y altamente profesional. ¡Envíanos tu solicitud!",
pt: "Invente e projete o futuro da aprendizagem digital conosco. Somos uma equipe pequena, moderna, motivada, muito flexível e altamente profissional. Candidate-se!"
},
jobOffer: {
de: "Stellenausschreibung",
en: "Job listing",
fr: "Description du poste",
es: "Descripción del puesto",
pt: "Descrição da vaga"
},
title: {
de: "Hilf uns, mit ANTON das Lernen für die Schule noch einfacher zu machen.",
en: "Help us make learning for school even easier with ANTON.",
fr: "Aide-nous à rendre l'apprentissage encore plus facile et amusant avec ANTON.",
es: "Ayúdanos a que aprender para la escuela con ANTON sea aún más fácil y divertido.",
pt: "Ajude-nos a tornar o aprendizado nas escolas ainda mais fácil com ANTON."
},
openExternalJobsPage: {
de: "Zu den Stellenangeboten",
en: "Go to vacancies",
fr: "Voir les offres d'emploi",
es: "Ver ofertas de trabajo",
pt: "Ver ofertas de trabalho"
}
};
})();
pages/static/jobs/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, T("jobs"));
};
})();
pages/static/jobs/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: "jobs",
title: T("urlTitle"),
metaDescription: T("metaDescr"),
noIndex: true
};
};
})();
pages/static/jobs/image/image.ls
(function(){
return function(){
return inc("/lib/gui/image/image")({
id: "solocode_anton-employees4",
fileFolder: "media/static/_images"
}).css({
width: "15em",
height: "15em",
marginBottom: "0.8em"
});
};
})();
pages/static/jobs/page.ls
(function(){
return function(page){
return {
urlDescription: function(){
return inc("_urlDescription/description")();
},
top: function(){
return inc("_topbar/topbar")(page);
},
start: function(){
return page.html(Div({
margin: "2em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.5em"
}).html(inc("image/image")(), Div({
margin: "0 auto 1.3em",
maxWidth: "20em"
}).html(T("title")), Div({
display: "inline-block",
textAlign: "left",
marginLeft: "1em"
}).html(Button(T("openExternalJobsPage")).tap(function(){
return window.open("https://anton.jobs.personio.com/", "_system");
}))));
}
};
};
})();
pages/static/jobs/row/row.ls
(function(){
return function(o){
return Div({
margin: "0 auto 0.5em",
padding: "0.1em 0.5em 0.2em"
}).html(inc("/lib/seo/element/a2/a")({
html: o.label,
pageUrl: o.pageUrl
})).tap(function(){
return startPage({
path: o.pagePath,
animation: "slideLeft"
});
});
};
})();
pages/static/messageCategory/_shared/calcMessageCategory/calc.ls
(function(){
return function(page){
var pageUrl, messageCategory;
pageUrl = inc("/lib/util/browser/getPageUrl/get")();
messageCategory = page.params.messageCategory || pageUrl.split("/")[1] || inc("/lib/util/browser/getPageUrlParam/get")("messageCategory");
inc("/lib/util/browser/removePageUrlParam/remove")("messageCategory");
return messageCategory;
};
})();
pages/static/messageCategory/_shared/calcPublicId/calc.ls
(function(){
return function(page){
var pageUrl, publicId;
pageUrl = inc("/lib/util/browser/getPageUrl/get")();
publicId = page.params.publicId || pageUrl.split("/")[2] || inc("/lib/util/browser/getPageUrlParam/get")("publicId");
inc("/lib/util/browser/removePageUrlParam/remove")("publicId");
return publicId;
};
})();
pages/static/messageCategory/_shared/iconCheck/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/check.svg"),
width: '5em',
height: '5em'
});
};
})();
pages/static/messageCategory/_shared/iconCross/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/cross.svg"),
width: '5em',
height: '5em'
});
};
})();
pages/static/messageCategory/_t.ls
(function(){
return {
messageCategoryOff: {
de: "Mail-Benachrichtigungen abbestellen",
en: "Unsubscribe from notifications",
fr: "Désactiver les notifications",
es: "Desactivar notificaciones",
pt: "Desativar as notificações"
},
messageCategoryOn: {
de: "Mail-Benachrichtigungen abonnieren",
en: "Subscribe to notifications",
fr: "S’abonner aux notifications",
es: "Desactivar notificaciones",
pt: "Ativar as notificações"
},
resubscribe: {
de: "Ich möchte mich wieder anmelden",
en: "I would like to resubscribe.",
fr: "Je veux me réabonner.",
es: "Quiero volver a suscribirme.",
pt: "Quero me inscrever novamente."
},
youHaveUnsubscribed: {
de: "Diese Mail-Benachrichtigungen wurden erfolgreich abbestellt.",
en: "You have unsubscribed from these email notifications.",
fr: "L’abonnement à ces notifications par e-mail est confirmé.",
es: "Desactivaste exitosamente este tipo de notificaciones.",
pt: "As notificações por e-mail foram desativadas com sucesso."
},
youHaveSubscribed: {
de: "Diese Mail-Benachrichtigungen wurden erfolgreich abonniert.",
en: "You have subscribed to these email notifications.",
fr: "Ces notifications par e-mail ont bien été désactivées.",
es: "Activaste exitosamente este tipo de notificaciones.",
pt: "Você se inscreveu para receber as notificações por e-mail."
},
hello: {
de: "Hallo $1",
en: "Hello $1",
fr: "Bonjour $1",
es: "Hola $1",
pt: "Olá $1"
}
};
})();
pages/static/messageCategory/disable/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../../_shared/topbarDeeplink/topbar")(page, T("messageCategoryOff"));
};
})();
pages/static/messageCategory/disable/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "disableMessageCategory/" + page.messageCategory + "/" + page.publicId,
title: T("messageCategoryOff"),
metaDescription: ""
};
};
})();
pages/static/messageCategory/disable/linkEnableAgain/link.ls
(function(){
return function(page){
return Button(T("resubscribe")).css({
margin: "1em auto"
}).tap(function(){
return startPage({
path: path("../../enable/page"),
history: 0,
params: {
publicId: page.publicId,
messageCategory: page.messageCategory,
isDeepLink: page.params.isDeepLink
},
animation: "fadeIn"
});
});
};
})();
pages/static/messageCategory/disable/page.ls
(function(){
return function(page){
page.publicId = inc("../_shared/calcPublicId/calc")(page);
page.messageCategory = inc("../_shared/calcMessageCategory/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var submit, onSuccess, onError;
submit = function(){
return inc("submit/submit")(page, onSuccess, onError);
};
onSuccess = function(displayName){
return page.html(inc("../_shared/iconCross/icon")(), inc("title/title")(displayName), inc("text/text")(), inc("linkEnableAgain/link")(page), inc("../../_shared/linkToStart/link")());
};
onError = function(){
return page.html(inc("../../_shared/iconError/icon")(), inc("../../_shared/textError/text")(), inc("../../_shared/linkToStart/link")());
};
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("/lib/gui/spinner/spinner")());
return submit();
}
};
};
})();
pages/static/messageCategory/disable/submit/submit.ls
(function(){
return function(page, onSuccess, onError){
var publicId, messageCategory;
publicId = page.publicId;
messageCategory = page.messageCategory;
if (!publicId || !messageCategory) {
onError();
return;
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/messageCategory/disable/disable"),
params: {
publicId: publicId,
messageCategory: messageCategory
},
onCompleted: function(result){
if (result.status === "ok") {
return onSuccess(result.displayName);
} else {
debug(result);
return onError();
}
},
onError: function(error){
debug(error);
return onError();
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
};
})();
pages/static/messageCategory/disable/text/text.ls
(function(){
return function(){
return Div().css({
margin: "1em",
lineHeight: "1.5em"
}).html(T("youHaveUnsubscribed"));
};
})();
pages/static/messageCategory/disable/title/title.ls
(function(){
return function(displayName){
return Div().css({
fontSize: "1.5em"
}).secureHtml(T("hello", displayName));
};
})();
pages/static/messageCategory/enable/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../../_shared/topbarDeeplink/topbar")(page, T("messageCategoryOn"));
};
})();
pages/static/messageCategory/enable/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "enableMessageCategory/" + page.messageCategory + "/" + page.publicId,
title: T("messageCategoryOn"),
metaDescription: ""
};
};
})();
pages/static/messageCategory/enable/page.ls
(function(){
return function(page){
page.publicId = inc("../_shared/calcPublicId/calc")(page);
page.messageCategory = inc("../_shared/calcMessageCategory/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var submit, onSuccess, onError;
submit = function(){
return inc("submit/submit")(page, onSuccess, onError);
};
onSuccess = function(displayName){
return page.html(inc("../_shared/iconCheck/icon")(), inc("title/title")(displayName), inc("text/text")(), inc("../../_shared/linkToStart/link")());
};
onError = function(){
return page.html(inc("../../_shared/iconError/icon")(), inc("../../_shared/textError/text")(), inc("../../_shared/linkToStart/link")());
};
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("/lib/gui/spinner/spinner")());
return submit();
}
};
};
})();
pages/static/messageCategory/enable/submit/submit.ls
(function(){
return function(page, onSuccess, onError){
var publicId, messageCategory;
publicId = page.publicId;
messageCategory = page.messageCategory;
if (!publicId || !messageCategory) {
onError();
return;
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/messageCategory/enable/enable"),
params: {
publicId: publicId,
messageCategory: messageCategory
},
onCompleted: function(result){
if (result.status === "ok") {
return onSuccess(result.displayName);
} else {
debug(result);
return onError();
}
},
onError: function(error){
debug(error);
return onError();
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
};
})();
pages/static/messageCategory/enable/text/text.ls
(function(){
return function(){
return Div().css({
margin: "1em",
lineHeight: "1.5em"
}).html(T("youHaveSubscribed"));
};
})();
pages/static/messageCategory/enable/title/title.ls
(function(){
return function(displayName){
return Div().css({
fontSize: "1.5em"
}).secureHtml(T("hello", displayName));
};
})();
pages/static/newsletter/_shared/calcPublicId/calc.ls
(function(){
return function(page){
var pageUrl, publicId;
pageUrl = inc("/lib/util/browser/getPageUrl/get")();
publicId = page.params.publicId || pageUrl.split("/")[1] || inc("/lib/util/browser/getPageUrlParam/get")("publicId");
inc("/lib/util/browser/removePageUrlParam/remove")("publicId");
return publicId;
};
})();
pages/static/newsletter/_shared/iconNews/icon.ls
(function(){
return function(){
return SvgIcon({
svg: path("/lib/svg/shape/news.svg"),
width: '5em',
height: '5em'
});
};
})();
pages/static/newsletter/_t.ls
(function(){
return {
antonNewsMailOff: {
de: "ANTON-News per Mail - Abgemeldet",
en: "ANTON News by email - disabled",
fr: "ANTON-News par e-mail - désactivé",
es: "ANTON-Noticias por correo electrónico - desactivado",
pt: "ANTON-Notícias por e-mail - desativado"
},
resubscribe: {
de: "Ich möchte mich wieder anmelden",
en: "I would like to resubscribe.",
fr: "Je veux me réabonner.",
es: "Quiero volver a suscribirme.",
pt: "Quero me inscrever novamente."
},
youHaveUnsubscribed: {
de: "Du hast deine E-Mail-Adresse hiermit vom ANTON Lehrer-Newsletter abgemeldet.",
en: "You have unsubscribed from the ANTON teacher newsletter.",
fr: "Tu t'es désabonné·e de la Newsletter des profs d'ANTON.",
es: "Has cancelado tu suscripción al Boletín de docentes de ANTON.",
pt: "Você cancelou sua assinatura da Newsletter de professores ANTON."
},
antonNewsMailOn: {
de: "ANTON-News per Mail - Angemeldet",
en: "ANTON News by email - enabled",
fr: "ANTON-News par e-mail - activé",
es: "ANTON-Noticias por correo-e - activado",
pt: "ANTON-Notícias por e-mail - ativado"
},
youHaveSubscribed: {
de: "Du hast nun deine E-Mail-Adresse beim ANTON Lehrer-Newsletter angemeldet.",
en: "You have subscribed to the ANTON teacher newsletter.",
fr: "Tu t'es abonné·e à la Newsletter des profs d'ANTON.",
es: "Te suscribiste al Boletin de docentes de ANTON. ",
pt: "Você se inscreveu para receber a Newsletter de professores ANTON"
},
hello: {
de: "Hallo $1",
en: "Hello $1",
fr: "Bonjour $1",
es: "Hola $1",
pt: "Olá $1"
},
bummer: {
de: "Schade, $1!",
en_gb: "That’s a shame, $1!",
en: "That’s too bad, $1!",
fr: "Quel dommage, $1 !",
es: "¡Lástima, $1!",
pt: "Que pena, $1!"
}
};
})();
pages/static/newsletter/disable/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../../_shared/topbarDeeplink/topbar")(page, T("antonNewsMailOff"));
};
})();
pages/static/newsletter/disable/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "disableNewsletter/" + page.publicId,
title: T("antonNewsMailOff"),
metaDescription: ""
};
};
})();
pages/static/newsletter/disable/linkEnableAgain/link.ls
(function(){
return function(page){
return Button(T("resubscribe")).css({
margin: "1em auto"
}).tap(function(){
return startPage({
path: path("../../enable/page"),
history: 0,
params: {
publicId: page.publicId,
isDeepLink: page.params.isDeepLink
},
animation: "fadeIn"
});
});
};
})();
pages/static/newsletter/disable/page.ls
(function(){
return function(page){
page.publicId = inc("../_shared/calcPublicId/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var submit, onSuccess, onError;
submit = function(){
return inc("submit/submit")({
publicId: page.publicId,
onSuccess: onSuccess,
onError: onError
});
};
onSuccess = function(displayName){
return page.empty().append(inc("../_shared/iconNews/icon")(), inc("title/title")(displayName), inc("text/text")(), inc("linkEnableAgain/link")(page), inc("../../_shared/linkToStart/link")());
};
onError = function(){
return page.empty().append(inc("../_shared/iconNews/icon")(), inc("../../_shared/textError/text")(), inc("../../_shared/linkToStart/link")());
};
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).append(inc("/lib/gui/spinner/spinner")());
return submit();
}
};
};
})();
pages/static/newsletter/disable/submit/submit.ls
(function(){
return function(o){
if (!o.publicId) {
o.onError();
return;
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/newsletter/disable/disable"),
params: {
publicId: o.publicId
},
onCompleted: function(result){
if (result.status === "ok") {
return o.onSuccess(result.displayName);
} else {
debug(result);
return o.onError();
}
},
onError: function(error){
debug(error);
return o.onError();
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(page);
}
});
};
})();
pages/static/newsletter/disable/text/text.ls
(function(){
return function(){
return Div().css({
margin: "1em",
lineHeight: "1.5em"
}).html(T("youHaveUnsubscribed"));
};
})();
pages/static/newsletter/disable/title/title.ls
(function(){
return function(displayName){
return Div().css({
fontSize: "1.5em"
}).secureHtml(T("bummer", displayName));
};
})();
pages/static/newsletter/enable/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../../_shared/topbarDeeplink/topbar")(page, T("antonNewsMailOn"));
};
})();
pages/static/newsletter/enable/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "enableNewsletter/" + page.publicId,
title: T("antonNewsMailOn"),
metaDescription: ""
};
};
})();
pages/static/newsletter/enable/page.ls
(function(){
return function(page){
page.publicId = inc("../_shared/calcPublicId/calc")(page);
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var submit, onSuccess, onError;
submit = function(){
return inc("submit/submit")({
publicId: page.publicId,
onSuccess: onSuccess,
onError: onError,
page: page
});
};
onSuccess = function(displayName){
return page.html(inc("../_shared/iconNews/icon")(), inc("title/title")(displayName), inc("text/text")(), inc("../../_shared/linkToStart/link")());
};
onError = function(){
return page.html(inc("../_shared/iconNews/icon")(), inc("../../_shared/textError/text")(), inc("../../_shared/linkToStart/link")());
};
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).append(inc("/lib/gui/spinner/spinner")());
return submit();
}
};
};
})();
pages/static/newsletter/enable/submit/submit.ls
(function(){
return function(o){
if (!o.publicId) {
o.onError();
return;
}
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/newsletter/enable/enable"),
params: {
publicId: o.publicId
},
onCompleted: function(result){
if (result.status === "ok") {
return o.onSuccess(result.displayName);
} else {
debug(result);
return o.onError();
}
},
onError: function(error){
debug(error);
return o.onError();
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(o.page);
}
});
};
})();
pages/static/newsletter/enable/text/text.ls
(function(){
return function(){
return Div().css({
margin: "1em",
lineHeight: "1.5em"
}).html(T("youHaveSubscribed"));
};
})();
pages/static/newsletter/enable/title/title.ls
(function(){
return function(displayName){
return Div().css({
fontSize: "1.5em"
}).secureHtml(T("hello", displayName));
};
})();
pages/static/pixelPaintImageShared/_t.ls
(function(){
return {
pixelpaintImage: {
de: "PixelPaint-Bild",
en: "PixelPaint picture",
fr: "Dessin PixelPaint",
es: "Dessin PixelPaint",
pt: "Imagem Pixel-Paint"
}
};
})();
pages/static/pixelPaintImageShared/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, T("pixelpaintImage"));
};
})();
pages/static/pixelPaintImageShared/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: "pixelPaintImage/" + page.imageId,
title: T("pixelpaintImage"),
metaDescription: "",
noIndex: true
};
};
})();
pages/static/pixelPaintImageShared/calcImageId/calc.ls
(function(){
return function(){
var pageUrl, imageId;
pageUrl = inc("/lib/util/browser/getPageUrl/get")();
return imageId = pageUrl.split("/")[1] || "jBgU";
};
})();
pages/static/pixelPaintImageShared/image/image.ls
(function(){
return function(image){
return Div().html(inc("/lib/gui/image/image")({
id: "pixelPaint_" + image.uid,
fileFolder: "media/pixelPaint"
}).css({
width: "22em",
height: "22em",
boxShadow: "0px 2px 5px 0px rgba(0,0,0,0.2)",
margin: "0.5em"
}));
};
})();
pages/static/pixelPaintImageShared/info/avatar/avatar.ls
(function(){
return function(image){
return inc("/lib/gui/avatar/avatar")(image.userAvatar).css({
width: "1.5em",
height: "1.5em"
});
};
})();
pages/static/pixelPaintImageShared/info/heartIcon/icon.ls
(function(){
return function(image){
return SvgIcon({
svg: path("/lib/svg/shape/heart.svg"),
color: image.likes
? Color.pink[500]
: Color.grey[400]
});
};
})();
pages/static/pixelPaintImageShared/info/info.ls
(function(){
return function(image){
return Div({
display: "inline-flex",
margin: "1em 0 0.5em"
}).html(inc("avatar/avatar")(image), inc("name/name")(image), inc("likes/likes")(image), inc("heartIcon/icon")(image));
};
})();
pages/static/pixelPaintImageShared/info/likes/likes.ls
(function(){
return function(image){
return Div({
color: image.likes
? Color.pink[500]
: Color.grey[400],
marginRight: "0.3em"
}).html(image.likes);
};
})();
pages/static/pixelPaintImageShared/info/name/name.ls
(function(){
return function(image){
return Div({
marginRight: "0.5em"
}).html(image.userName);
};
})();
pages/static/pixelPaintImageShared/loadImage/load.ls
(function(){
return function(p){
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/pixelPaint/getMetaData/get"),
params: {
imageId: p.imageId
},
onCompleted: function(result){
if (typeof deviceLog != 'undefined' && deviceLog !== null) {
deviceLog.log({
event: "deviceDebugSharePixelPaintImageClickSuccess",
imageId: p.imageId
});
}
if (result.images[0]) {
return p.onLoaded(result.images[0]);
} else {
return p.onError("pixelPaint_not_found");
}
},
onOffline: function(){
return inc("/lib/offline/offlinePage/offlinePage")(p.page);
},
onError: function(error){
if (typeof deviceLog != 'undefined' && deviceLog !== null) {
deviceLog.log({
event: "deviceDebugSharePixelPaintImageClickError",
imageId: p.imageId
});
}
return p.onError();
}
});
};
})();
pages/static/pixelPaintImageShared/page.ls
(function(){
return function(page){
page.imageId = inc("calcImageId/calc")();
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
var loadImage, onLoaded, onError;
loadImage = function(){
return inc("loadImage/load")({
imageId: page.imageId,
onLoaded: onLoaded,
onError: onError,
page: page
});
};
onLoaded = function(image){
return page.html(inc("info/info")(image), inc("image/image")(image), inc("../_shared/linkToStart/link")());
};
onError = function(error){
return page.html(inc("../_shared/textError/text")(error), inc("../_shared/linkToStart/link")());
};
page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).append(inc("/lib/gui/spinner/spinner")());
return loadImage();
}
};
};
})();
pages/static/privacy/_t.ls
(function(){
return {
privacy: {
de: "Datenschutz",
en: "Privacy",
fr: "Politique de protection des données personnelles",
es: "Privacidad",
pt: "Privacidade"
},
privacyPolicy: {
de: "Datenschutzbestimmungen",
en: "Privacy policy",
fr: "Politique de protection des données personnelles",
es: "Política de privacidad",
pt: "Política de privacidade"
},
privacyTitle: {
de: "Datenschutz",
en: "Privacy",
fr: "Données personnelles",
es: "Privacidad",
pt: "Privacidade"
},
privacyDescription: {
de: "Alle personenbezogenen Daten werden mit größter Sorgfalt behandelt.",
en_gb: "All personal data are treated with great care.",
en: "All personal data are treated with the utmost care.",
fr: "Toutes les données personnelles sont traitées avec le plus grand soin.",
es: "Todos los datos proporcionados son tratados con absoluta precaución.",
pt: "Todos os dados pessoais são tratados com o absoluta precaução."
},
acceptPrivacy: {
de: "Datenschutzbestimmungen zustimmen",
en: "Agree to the privacy policy",
fr: "Accepter la politique de protection des données personnelles",
es: "Aceptar la politica de privacidad",
pt: "Aceitar a política de privacidade"
},
privacyAccepted: {
de: "Datenschutzbestimmungen zugestimmt",
en: "Agreed to the privacy policy",
fr: "Politique de protection des données personnelles acceptée",
es: "Politica de privacidad aceptada",
pt: "Política de privacidade aceita"
},
privacyUrl: {
de: "datenschutz",
en: "privacy",
fr: "donnees-personnelles",
es: "privacidad",
pt: "privacidade"
}
};
})();
pages/static/privacy/_topbar/topbar.ls
(function(){
return function(page){
var onPrint;
onPrint = function(){
var printPage;
printPage = inc("../div/div")({
isPrint: true
}).css({
fontFamily: "sans-serif"
});
return inc("/lib/util/print/print")({
div: printPage,
title: T("privacyPolicy")
});
};
return inc("../../_shared/topbarDeeplink/topbar")(page, T("privacyPolicy"), onPrint);
};
})();
pages/static/privacy/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("privacyUrl"),
title: T("privacyTitle"),
metaDescription: T("privacyDescription"),
noIndex: true
};
};
})();
pages/static/privacy/acceptPrivacyDiv/div.ls
(function(){
return function(){
var e;
e = log.findLast("setAcceptPrivacy");
return Div().css({
textAlign: "center"
}).append(e
? Div().css({
display: "inline-block",
color: Color.grey[600],
fontStyle: "italic",
margin: "1em"
}).html(T("privacyAccepted"))
: inc("/lib/gui/link/link")({
label: T("acceptPrivacy"),
iconColor: "black"
}).css({
margin: "1em"
})).tap(!e ? function(){
return inc("/pages/misc/_shared/confirmAge16AndPrivacy/confirm")(function(){
return startPage({
history: 0
});
});
} : void 8);
};
})();
pages/static/privacy/div/div.ls
(function(){
return function(options){
return twitch({
de: inc("divDe/div")(options),
en: inc("divEn/div")(options),
en_gb: inc("divEnGb/div")(options),
fr: inc("divFr/div")(options),
es: inc("divEs/div")(options),
pt: inc("divPt/div")(options)
});
};
})();
pages/static/privacy/div/divDe/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").append(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div().css({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Allgemeines",
content: [p("ANTON ist eine digitale Lern-App, die man herunterladen oder auf https://anton.app verwenden kann."), p("Betreiber und Verantwortlicher im Sinne des Datenschutzes ist die solocode GmbH, Mehringdamm 61, 10961 Berlin. "), p("Bei Fragen zum Datenschutz kannst du uns unter privacy@anton.app schreiben."), p("Unseren Datenschutzbeauftragten kannst du unter folgenden Kontaktdaten erreichen: E-Mail: dsb@anton.app Herting Oberbeck Datenschutz GmbH https://www.datenschutzkanzlei.de"), p("Der Schutz deiner Daten ist uns besonders wichtig."), p("Wir sammeln so wenig Daten wie möglich, löschen diese automatisch bei Inaktivität, speichern diese nur auf sicheren Servern in Europa und geben sie nicht an Dritte weiter.")]
}), section({
isExpanded: isPrint,
header: "2. Welche Daten speichert ANTON?",
content: [
section({
isExpanded: isPrint,
header: "2.1. Daten, die du uns mitteilst",
content: [p("Wenn du Schüler/in bist, fragen wir dich nach deinem Spitznamen, deiner Schule (freiwillig) und mit welchem Fach in welcher Klassenstufe du beginnen möchtest. Wenn du dich einer Schule zuordnest, kann der Schul-Administrator deinen Nutzer ins Schulverzeichnis aufnehmen und Daten zu deiner Person wie z.B. Name und Klasse ergänzen."), p("Wenn du Lehrer/in bist, fragen wir dich nach deinem Vornamen, Nachnamen, Anrede und freiwillig nach deiner Schule und E-Mail-Adresse."), p("Wenn du als Lehrer/in oder Mitarbeiter/in einer Schule eine Gruppe und Anmelde-Codes für deine Schüler/innen und/oder Lehrer/innen anlegst, bist du bzw. deine Schule für den Datenschutz verantwortlich. Bitte verwende nur Spitznamen, mit denen ein Dritter die Schüler/innen nicht identifizieren könnte oder hole die Zustimmung der Eltern ein."), p("Wenn du Lehrer/in bist und dich einer Schule zuordnest, erlaubst du dem Administrator dieser Schule, deinen Nutzer ins Schulverzeichnis aufzunehmen, deinen Nutzer und Nutzer mit den durch dich erstellten Anmelde-Codes zu verwalten, Daten zur Person zu ergänzen, den Anmelde-Code einzusehen und Nutzer zur Löschung vorzumerken."), p("Wenn du entscheidest, dass dein/e Nutzer/in auf deinem Gerät gespeichert werden soll, speichern wir diese Information auf deinem Gerät."), p("Wir fragen dich gelegentlich, wie gut dir ANTON und die Lerninhalte gefallen, und wie wir diese verbessern können."), p("Du hast die Möglichkeit, unter Einstellungen deine E-Mail-Adresse oder Handynummer anzugeben, wenn du mindestens 16 Jahre alt bist. Dann können wir dir deinen Zugang wiederherstellen, falls du deine Zugangsdaten verlierst."), p("Wenn du mit uns per Hilfe-Chat oder per E-Mail Kontakt aufnimmst, werden diese Nachrichten und das Datum und die Uhrzeit der Nachrichten gespeichert, damit wir mit dir kommunizieren können.")]
}), section({
isExpanded: isPrint,
header: "2.2. Informationen, die wir durch deine Nutzung von ANTON automatisch erhalten",
content: [p("Wenn du ANTON verwendest, speichert ANTON Daten über deine Nutzung auf deinem Gerät und gleicht diese bei bestehender Internetverbindung mit unserem Server ab. So kannst du ANTON mit deinem Nutzer auf mehreren Geräten verwenden."), p("Dies beinhaltet: gestartete App-Seiten und deinen Lernfortschritt, deine Spiel-Ergebnisse, deine Mitgliedschaft in Gruppen, von dir erstellte Inhalte wie z.B. Bilder und Lernlisten, dein Gerätetyp, Betriebssystem und Internetbrowser sowie deine anonymisierte IP-Adresse."), p("Wir speichern die letzten drei Ziffern deiner IP-Adresse nicht in unserem System, damit du anonym bleiben kannst.")]
})
]
}), section({
isExpanded: isPrint,
header: "3. Wofür werden diese Daten verwendet?",
content: p("Die gespeicherten Daten werden ausschließlich dazu verwendet, um dir ANTON anbieten zu können, um dir bei Problemen mit ANTON helfen zu können, und um ANTON nach den Bedürfnissen unserer Nutzer/innen weiterzuentwickeln.")
}), section({
isExpanded: isPrint,
header: "4. Wie lange werden die Daten gespeichert?",
content: [p("Deine Nutzerdaten werden solange gespeichert, wie du ANTON nutzt. Wenn du ANTON nicht mehr verwendest und kein Mitglied eines von einer Schule verwalteten Schulverzeichnisses bist, löschen wir deine Nutzerdaten 12 Monate nachdem du dich das letzte Mal eingeloggt hast bzw. nachdem deine ANTON-Plus-Mitgliedschaft endet, automatisch."), p("Deine personenbezogenen Daten werden gelöscht oder gesperrt, sobald der Zweck der Speicherung entfällt. Eine Speicherung kann darüber hinaus erfolgen, wenn dies durch den europäischen oder nationalen Gesetzgeber in unionsrechtlichen Verordnungen, Gesetzen oder sonstigen Vorschriften, denen der Verantwortliche unterliegt, vorgesehen wurde. Eine Sperrung oder Löschung der Daten erfolgt auch dann, wenn eine durch die genannten Normen vorgeschriebene Speicherfrist abläuft, es sei denn, dass eine Erforderlichkeit zur weiteren Speicherung der Daten für einen Vertragsabschluss oder eine Vertragserfüllung besteht.")]
}), section({
isExpanded: isPrint,
header: "5. Gibt ANTON Daten an Dritte weiter?",
content: [p("Nein, wir geben deine Daten nicht an Dritte weiter, es sei denn, der/die Nutzer/in hat vorher seine ausdrückliche Einwilligung erklärt oder es besteht eine gesetzliche Verpflichtung zur Datenweitergabe."), p("Wir benutzen keine Google, Facebook, Amazon oder sonstige Produkt-Integrationen in ANTON, d.h. deine Daten bleiben wirklich nur auf unseren Servern.")]
}), section({
isExpanded: isPrint,
header: "6. Wie wird die Sicherheit der Daten gewährleistet?",
content: [p("Sämtliche Daten werden ausschließlich auf Servern in der EU gespeichert und verschlüsselt übertragen. Die Rechenzentren erfüllen höchste Sicherheitsstandards und sind nach DIN ISO/IEC 27001 zertifiziert."), p("Zugleich sollte sich der/die Nutzer/in der Tatsache bewusst sein, dass aufgrund ständig neu auftauchender Viren und anderer Mittel zum Angriff auf gesicherte Datensysteme von Internet-Diensten ein hundertprozentiger Schutz vor Angriffen nicht gewährleistet werden kann."), p("Wir werden jeden entdeckten Angriff durch Hacker u.ä. zivilrechtlich und strafrechtlich verfolgen und den/die Nutzer/in über eine Kompromittierung seiner Daten informieren.")]
}), section({
isExpanded: isPrint,
header: "7. Welche Daten können andere Nutzer/innen sehen?",
content: [p("Andere Nutzer können deinen Spitznamen, deinen Avatar und deine Punktzahl bei Spielen sehen. Falls du selbst Inhalte wie z.B. Bilder oder Lernlisten generierst, kannst du entscheiden, ob du diese für andere Nutzer veröffentlichen möchtest."), p("Dein/e Gruppen-Lehrer/in und - falls deine Schule das Schulverzeichnis nutzt - der Schuladministrator und die durch ihn berechtigten Lehrer/innen deiner Schule können deinen Namen und deinen Lernfortschritt einsehen und deinen Anmelde-Code für dich nachsehen."), p("Wenn du dich als Lehrer/in anmeldest und eine Schule auswählst, kann der Administrator des Schulverzeichnisses dieser Schule deine Daten und deinen Anmelde-Code einsehen und dich dem Schulverzeichnis hinzufügen. Dies gilt auch falls du falsche Angaben zu deiner Person oder deiner Zugehörigkeit zu der Schule gemacht haben solltest.")]
}), section({
isExpanded: isPrint,
header: "8. Deine Rechte",
content: [
section({
isExpanded: isPrint,
header: "8.1. Auskunftsrecht",
content: p("Jede/r Nutzer/in hat das Recht, kostenlos Auskunft über die zu seiner Person gespeicherten personenbezogenen Daten zu erhalten. Schicke uns bitte eine E-Mail an privacy@anton.app mit folgenden Angaben zu deiner Identifizierung: Benutzername, Anmelde-Code, Name, E-Mail-Adresse, Postanschrift und Geburtsdatum.")
}), section({
isExpanded: isPrint,
header: "8.2. Recht auf Berichtigung",
content: p("Du hast ein Recht auf Berichtigung und/oder Vervollständigung, sofern die verarbeiteten personenbezogenen Daten, die dich betreffen, unrichtig oder unvollständig sind.")
}), section({
isExpanded: isPrint,
header: "8.3. Recht auf Einschränkung der Verarbeitung",
content: [p("Unter den folgenden Voraussetzungen kannst du die Einschränkung der Verarbeitung der dich betreffenden personenbezogenen Daten verlangen:"), p("a. Wenn du die Richtigkeit der dich betreffenden personenbezogenen Daten für eine Dauer bestreitest, die es uns ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen."), p("b. Die Verarbeitung unrechtmäßig ist und du die Löschung der personenbezogenen Daten ablehnen und stattdessen die Einschränkung der Nutzung der personenbezogenen Daten verlangst."), p("c. Wir die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger benötigen, du diese jedoch zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigst."), p("d. Wenn du Widerspruch gegen die Verarbeitung gemäß Art. 21 Abs. 1 DSGVO eingelegt hast und noch nicht feststeht, ob die berechtigten Gründe des Verantwortlichen gegenüber deinen Gründen überwiegen."), p("e. Wurde die Verarbeitung der dich betreffenden personenbezogenen Daten eingeschränkt, dürfen diese Daten – von ihrer Speicherung abgesehen – nur mit deiner Einwilligung oder zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen oder zum Schutz der Rechte einer anderen natürlichen oder juristischen Person oder aus Gründen eines wichtigen öffentlichen Interesses der Union oder eines Mitgliedstaats verarbeitet werden. Wurde die Einschränkung der Verarbeitung nach den o.g. Voraussetzungen eingeschränkt, wirst du von uns unterrichtet, bevor die Einschränkung aufgehoben wird.")]
}), section({
isExpanded: isPrint,
header: "8.4. Recht auf Löschung",
content: [p("Auf Wunsch löschen wir deine Nutzerdaten. Schicke uns dazu bitte eine E-Mail an privacy@anton.app mit folgenden Angaben zu deiner Identifizierung: Benutzername, Anmelde-Code, Vor- und Zuname."), p("Um deine auf deinen Geräten gespeicherten Nutzerdaten zu löschen, kannst du ANTON deinstallieren oder in der App unter Einstellungen auf Abmelden klicken und dort das zu löschende Nutzerprofil auswählen.")]
}), section({
isExpanded: isPrint,
header: "8.5. Recht auf Datenübertragbarkeit",
content: [p("Schulen können Nutzeraccounts, die sie erstellt haben oder deren Verwaltung in ihre Verantwortung fällt, zur Löschung nach Ablauf einer Übergangsfrist von 60 Tagen vormerken. Die Nutzer - und falls notwendig deren Erziehungsberechtigte - sind durch die Schule zu informieren. Die Nutzer erhalten die Möglichkeit, innerhalb einer Frist von 60 Tagen die in dem Nutzeraccount gespeicherten Daten in einen neuen Account zu überführen und eigenständig weiter zu verwenden. Nach Ablauf der Frist werden die Nutzerkonten automatisch gelöscht."), p("Du hast das Recht, eine Kopie deiner personenbezogenen Daten im elektronischen Format zu verlangen und das Recht, diese personenbezogenen Daten für die Nutzung in dem Dienst eines anderen zu übertragen. Auf Wunsch senden wir dir eine Datei mit deinen personenbezogenen Daten. Schicke uns dazu bitte eine E-Mail an privacy@anton.app mit folgenden Angaben zu deiner Identifizierung: Benutzername, Anmelde-Code, Vor- und Zuname, evtl. Geburtsname, E-Mail-Adresse, Postanschrift und Geburtsdatum.")]
}), section({
isExpanded: isPrint,
header: "8.6. Widerspruchsrecht",
content: p("Du hast das Recht, aus Gründen, die sich aus deiner besonderen Situation ergeben, jederzeit gegen die Verarbeitung der dich betreffenden personenbezogenen Daten, die aufgrund von Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, Widerspruch einzulegen.")
}), section({
isExpanded: isPrint,
header: "8.7. Recht auf Widerruf der datenschutzrechtlichen Einwilligungserklärung",
content: p("Du hast das Recht, deine datenschutzrechtliche Einwilligungserklärung jederzeit zu widerrufen. Durch den Widerruf der Einwilligung wird die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt.")
}), section({
isExpanded: isPrint,
header: "8.8. Recht auf Beschwerde bei einer Aufsichtsbehörde",
content: p("Unbeschadet eines anderweitigen verwaltungsrechtlichen oder gerichtlichen Rechtsbehelfs steht dir das Recht auf Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat deines Aufenthaltsorts, Arbeitsplatzes oder des Ortes des mutmaßlichen Verstoßes, zu, wenn du der Ansicht bist, dass die Verarbeitung der dich betreffenden personenbezogenen Daten gegen die DSGVO verstößt. Die Aufsichtsbehörde, bei der die Beschwerde eingereicht wurde, unterrichtet den Beschwerdeführer über den Stand und die Ergebnisse der Beschwerde einschließlich der Möglichkeit eines gerichtlichen Rechtsbehelfs nach Art. 78 DSGVO.")
})
]
}), section({
isExpanded: isPrint,
header: "9. Was ist die Rechtsgrundlage für die Verarbeitung?",
content: [p("Soweit wir für Verarbeitungsvorgänge personenbezogener Daten eine Einwilligung der betroffenen Person einholen, dient Art. 6 Abs. 1 lit. a EU-Datenschutzgrundverordnung (DSGVO) als Rechtsgrundlage."), p("Bei der Verarbeitung von personenbezogenen Daten, die zur Erfüllung eines Vertrages, dessen Vertragspartei die betroffene Person ist, erforderlich ist, dient Art. 6 Abs. 1 lit. b DSGVO als Rechtsgrundlage. Dies gilt auch für Verarbeitungsvorgänge, die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind."), p("Soweit eine Verarbeitung personenbezogener Daten zur Erfüllung einer rechtlichen Verpflichtung erforderlich ist, der unser Unternehmen unterliegt, dient Art. 6 Abs. 1 lit. c DSGVO als Rechtsgrundlage."), p("Ist die Verarbeitung zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich und überwiegen die Interessen, Grundrechte und Grundfreiheiten des Betroffenen das erstgenannte Interesse nicht, so dient Art. 6 Abs. 1 lit. f DSGVO als Rechtsgrundlage für die Verarbeitung.")]
}), section({
isExpanded: isPrint,
header: "10. Begriffserläuterung",
content: [p("EU-DSGVO: Die Verordnung (EU) 2016/679 des Europäischen Parlaments und des Rates vom 27. April 2016 zum Schutz natürlicher Personen bei der Verarbeitung personenbezogener Daten, zum freien Datenverkehr und zur Aufhebung der Richtlinie 95/46/EG (Datenschutz-Grundverordnung)."), p("Personenbezogene Daten: Gemäß Art. 4 Ziffer 1 EU-DSGVO alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind.")]
}));
};
})();
pages/static/privacy/div/divEn/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("Last updated: July 27th, 2023."), p("ANTON is a digital learning app that can be downloaded or used in the browser."), p("ANTON is developed and operated by solocode GmbH, Mehringdamm 61, 10961 Berlin, Germany (”Solocode”, ”we”, “us”, “our”, and our subsidiaries or affiliates)."), p("This Privacy Policy applies whether you log-in to ANTON in the browser at https://anton.app (the “Web-App”) and our mobile applications (the “Apps”), or any of our other products or services that link to this Privacy Policy that we may provide now or in the future (collectively, the “Service(s)”)."), p("This Privacy Policy does not apply to websites with information about ANTON that are not located at https://anton.app and that do not link to this Privacy Policy."), p("This Privacy Policy does not apply to websites or services or practices of companies that We do not own or control, such as third-party services you might access through links or other features (e.g. e-mails or notifications) on ANTON. Please note that such other services may have their own privacy policies. We recommend reviewing their policies before sharing any personal information with them."), p("By using ANTON, you acknowledge that you accept and agree to this Privacy Policy and our Terms of Service (”Terms”) that can be found at http://anton.app/en_us/terms."), p("ANTON is COPPA-compliant, and our policies and practices help schools meet their FERPA obligations."), p("If you have any questions regarding this Privacy Policy or data protection in general, please send us an e-mail at privacy@anton.app.")]
}), section({
isExpanded: isPrint,
header: "2. What is ANTON and how can it be used?",
content: [p("ANTON is a digital learning app. It can be used as a mobile app or as a web-app in the browser. "), p("ANTON can be used in two ways:"), p("a) On your own outside of school: you can download the ANTON mobile app or visit anton.app in the browser and create your own account. In this case, Solocode will generally act as the data controller for the user data."), p("b) With a teacher as a member of a group and/or school: a teacher or a school prepares an access code for you and you use that code to sign in. In this case, the data controller is the school. We act as a data processor (or service provider as defined under CCPA) on behalf of the school and will process such data only at the direction and control of the school. Additionally, we will only delete records per the school’s specific instructions and will request that users make any requests for access, correction or deletion of personal information through the school. We will assist the school in responding to such requests as needed. We offer a Data Privacy Addendum (DPA), an agreement we enter into with schools or districts that further describes our duties, responsibilities, and commitments with respect to user data that we collect or receive."), p("In both cases, it is possible to use ANTON without entering any personally identifiable information. "), p("More information on how the Service operates can be found in our frequently asked questions at anton.app/faq, and your taking part and use of the Service is governed by our Terms of Service at http://anton.app/en_us/terms.")]
}), section({
isExpanded: isPrint,
header: "3. What data does ANTON store?",
content: [p("3.1 Data that you or your school provide us with"), p("If you are a student, we will ask you for a nickname, your school (optional) and which subject and grade level you would like to start with."), p("If you are a teacher, we will ask you for your first name, surname, salutation and, optionally, your school and e-mail address."), p("If you are a teacher or an employee of a school, when you create a group and login-codes for your students and/or co-teachers, your school is responsible for privacy. You should get parental consent first and we provide informational resources that you can use to inform parents and request their consent. When creating accounts, we recommend that you only use nicknames that cannot be used to identify the students."), p("If you are a teacher and you assign your account to a school, you allow the administrator of that school to add your user to the school directory, manage your user and users with the login-codes you create, add your first name, last name and class to your directory entry, view the login-code and mark your user account(s) for deletion."), p("If you decide that your user should be stored on your device, we will store this information on your device."), p("We will occasionally ask you how much you like ANTON and the learning content and how we can improve it."), p("If you are at least 16 years old, you may enter your e-mail address or mobile phone number under Settings. We can then restore your access in case you lose your credentials."), p("If you contact us via help chat or e-mail, these messages and the date and time of the messages will be stored so that we can communicate with you."), p("3.2 Information that we automatically receive through your use of ANTON"), p("When you use ANTON, we will store data about your use on your device and sync it with our server when an internet connection is available. This enables you to use ANTON with your user account on multiple devices."), p("This data includes: app pages launched and your learning progress, your game results, your membership in groups and schools if provided, content created by you such as pictures and learning lists, your device type, operating system and internet browser as well as your pseudonymized IP-address."), p("We do not store the last three digits of your IP-address in our system, so it cannot be used to identify you."), p("We will not store or track your device location. Because we do not store your full IP-address, it can also not be used to identify your precise location. We use your pseudonymized IP-address to get a very broad approximation of your location that is reliable on the country level but not on a city level.")]
}), section({
isExpanded: isPrint,
header: "4. What is this data used for?",
content: [p("We do not sell or rent any of your, or your child’s, personal information to any third-party for any purpose - including for advertising or marketing purposes. Third-party advertising is not permitted in ANTON and student-data is never used for behaviorally-targeted advertising. "), p("We use the personal information we collect only to provide and improve ANTON, for educational purposes, security, and safety purposes, to answer your requests and questions send to our customer service or as allowed or required by law.")]
}), section({
isExpanded: isPrint,
header: "5. How long is the data stored?",
content: [p("Your personal data will be deleted as soon as the purpose for which it was stored ceases to apply. "), p("Your user data will be stored for as long as you have an active user account at ANTON. If you no longer use ANTON and are not a member of a school directory administered by a school, we will automatically delete your user data 12 months after you last logged in or after your ANTON Plus membership ends."), p("If you are a member of a school directory, the school is responsible for deleting your user account via our user interface when the purpose for which it was stored ceases to apply (e.g. when you leave the school). "), p("We do not retain a user’s personal information for any longer than is necessary for educational purposes or legal obligations, or to provide the Service for which we receive or collect the user’s personal information. Additionally, we only keep a user’s personal information for as long as her or his user account is active, unless we are required by law or the user’s school to retain it, need it to ensure the security of our community or our Service, or to enforce our Terms.")]
}), section({
isExpanded: isPrint,
header: "6. Does ANTON share data with third parties?",
content: [p("We do not sell or rent any of your, or your child’s, personal information to any third-party for any purpose - including for advertising or marketing purposes. Third-party advertising is not permitted in ANTON and student-data is never used for behaviorally-targeted advertising. "), p("Moreover, we do not share personal information with any third-parties except in the limited circumstances described in this Privacy Policy and as stated below:"), p("a) Other Users You Interact with on ANTON: "), p("No student, teacher or parent profiles are made available to the general public through ANTON. "), p("Other users can see your nickname, avatar and score in the high score list of the games in the games section. If you generate content such as painting a picture or creating a learning lists yourself, you can decide whether you want to share this content with other users (the default setting is “no”)."), p("Your group teacher(s) and - if your school uses the school directory - the school administrator and the teachers at your school who have been authorized by him/her can see your name and learning progress and look up your login-code for you."), p("When you register as a teacher and select a school, the school directory administrator of that school can view your name and registration code and add you to the school directory. "), p("Please remember that information (including personal Information) or content that you voluntarily share with others - including with other ANTON users - can be viewed, copied, saved, and used by the people you share it with. We cannot control what people do with the information you choose to share with them and we are not responsible for how others collect, use, or share that information or content."), p("b) Trusted Service Providers: We work with vendors, service providers, and other partners to help us provide ANTON by performing tasks on our behalf. These companies have only limited access to data and are contractually bound to process the data solely on our behalf and only for the purpose for which it was disclosed. They are not third parties as defined in the GDPR but data processors (or service providers as defined under CCPA) on our behalf. We may need to share or provide information (including personal information) to them to help them perform these functions, for example sending e-mails on our behalf, hosting, and security. We may also authorize these companies to collect information on our behalf. These service providers must adhere to strict confidentiality and security obligations in a way that is consistent with this Privacy Policy. "), p("c) Legal Requirements: We may disclose information if we have a good faith belief that doing so is necessary to comply with the law, such as complying with a subpoena or other legal process. We may need to disclose personal information if, in good faith, we believe it is necessary to protect the rights, property, or safety of ANTON, our employees, our community, or others, or to prevent violations of our Terms of Service or other agreements. This can include, without limitation, responding to law enforcement and requests by the government. Where appropriate, we notify users about the legal requests, unless providing notice is prohibited by the legal process itself, by court order, or by applicable law; or if we believe that providing notice would be ineffective, create a risk of injury or bodily harm to an individual or group, or create or increase a risk of fraud upon ANTON, or its users. In cases where we have to comply with legal requests without notice for these reasons, we will attempt to notify the user about the request after the fact where appropriate and where we believe in good faith that we are no longer prevented from doing so."), p("d) Sharing with Solocode companies: In the future, Solocode may grow and reorganize. We may need to share your personal information with our affiliated companies, such as our parent company, subsidiaries, joint venture partners, or other companies that we control or that are under common control with us. If we do so, we will require these companies to agree to use your personal information in accordance with this Privacy Policy."), p("e) Change of control: The Student Privacy Pledge requires us (and all other signatories) to ensure that successor entities that may acquire part or all of our organization in the future will act in accordance with the pledge principles or allow users a choice whether to share information with the future entity or have their information deleted. In accordance with the Student Privacy Pledge and applicable state and federal laws, and in connection with such a change to our organization, this Privacy Policy will continue to apply to your information, and any acquirer would only be able to handle your personal information as stated in this policy (unless the school, parent or eligible user consent to a new policy). We will inform you of an acquisition within 30 days following the completion of such a transaction, by posting on our homepage, or by e-mail to your e-mail address if you provided one to us. If you do not consent to the use of your personal information by such a successor company, subject to applicable law, you may request its deletion. We may also make information, including personal information, available to a potential investor or acquirer (or their advisors) in advance of any such transaction completion."), p("f) In the unlikely event that Solocode goes out of business, or files for bankruptcy, we will protect your personal information, and will not sell it to any third-party. "), p("g) With your consent: Other than in the cases above, we won’t disclose any personal information for any purpose other than with parental or eligible user consent, or in cases where we process the data on behalf of a school with agreement or under the direction of the school.")]
}), section({
isExpanded: isPrint,
header: "7. How is the security of the data guaranteed?",
content: [p("Your ANTON account is protected by a password and/or a login-code. To protect against unauthorized access to your account, keep your password and login-code secret at all times. The security of your personal information is important to us. We are committed to protecting your data and have implemented technical, physical and administrative security measures to prevent unauthorized use, disclosure, or access to personal information, in particular:"), p("Privacy by design and default: Our engineering team is committed to ensuring the security of your personal information. When we develop new features, we do this with privacy and security in mind from the outset."), p("We perform security testing; penetration testing; conduct risk assessments, and ensure compliance with our security policies."), p("We periodically review our data processing practices to guard against unauthorized access to systems."), p("When you enter any information anywhere on ANTON, we encrypt the transmission of that information using secure socket layer technology (SSL/TLS) by default."), p("We make sure passwords are stored and transferred securely using salted hashing and encryption."), p("Data centers meet the highest security standards and are certified according to DIN ISO/IEC 27001."), p("We automatically delete inactive accounts and user data 12 months after you last logged in or after your ANTON Plus membership ends and you are not a member of a school directory administered by a school."), p("We limit access to personal information to employees and independent contractors who are authorized to process it for us. These individuals are bound by strict confidentiality obligations and may face disciplinary action or termination if they fail to meet these obligations. "), p("While we strive to maintain the security of personal information and work hard to ensure the integrity and security of our systems, no system is 100% immune and we cannot guarantee the security of information. User information may be compromised due to outages, attacks, human error, system failure, unauthorized use, or other factors beyond our control. We have an incident response management in place that ensures that we can respond in an adequate and timely manner to mitigate risks and inform users. "), p("If we learn of a security breach, we will attempt to notify you electronically (subject to any applicable laws and school reporting requirements) so that you can take appropriate protective steps; e.g., we may post a notice on our homepage (anton.app) or elsewhere on the Service, and may send e-mail to you at the e-mail address you have provided to us. Depending on where you live, you may have a legal right to receive notice of a security breach in writing.")]
}), section({
isExpanded: isPrint,
header: "8. Our commitments to transparency and your rights",
content: [p("You have control over the personal information you share with us, and you can access or correct this information at any time. You can also delete your account. "), p("We provide ways to object, restrict or withdraw consent (where applicable) for the use of personal information you have provided to us. We make it easy for you to contact us and to transfer the personal information you have shared through the Service."), p("To exercise any of these rights, send an e-mail to privacy@anton.app. Please note that we may ask you to verify your identity before taking any further action on your request and we may require acceptable forms of personal identification.")]
}), section({
isExpanded: isPrint,
header: "9. Canada",
content: p("We strive to provide privacy protection that is consistent with Canada’s private sector privacy laws, including the Personal Information Protection and Electronic Documents Act (“PIPEDA”). For any questions regarding how we comply with PIPEDA, please contact us at privacy@anton.app")
}), section({
isExpanded: isPrint,
header: "10. California Privacy Disclosures",
content: [p("As a California resident, you have the right to request information about how we collected and used your personal information in the last 12 months. If you are a resident of California, you have certain rights regarding your personal information under the CCPA. You can request that we disclose the specific pieces of information that we have collected about you, and you can also request that we delete your personal information that we have collected or maintained. We provide these rights to all of our users and you can find more information on your rights and how to exercise them in 8 Our commitments to transparency and your rights"), p("We will not discriminate against you for exercising any of your rights under CCPA. Unless in accordance with the CCPA, we will not do any of the following: deny you goods or services, charge you different prices or rates for goods or services, including granting discounts or other benefits, or imposing penalties, suggest that you may receive a different price or rate for goods or services or a different level or quality of goods or services.")]
}), section({
isExpanded: isPrint,
header: "11. General Data Protection Regulation (GDPR)",
content: [p("Residents in the European Union or in the United Kingdom are entitled to certain rights with respect to personal information that we hold about them under the General Data Protection Regulation (GDPR) or in the UK under the Data Protection Act 2018 respectively:"), p("11.1 Right to information"), p("Every user has the right to receive free information about the personal data stored about him/her. Please send us an e-mail to privacy@anton.app with the following information for your identification: user name, registration code, name, e-mail address, postal address and date of birth."), p("11.2 Right to correction"), p("You have the right to rectification and/or integration if the personal data processed concerning you is incorrect or incomplete."), p("11.3 Right to limit processing"), p("Under the following conditions, you may request the restriction of the processing of personal data concerning you:"), p("a) If you dispute the accuracy of the personal data concerning you for a period of time that allows us to verify the accuracy of the personal data."), p("b) If the processing is unlawful and you object to the deletion of the personal data and instead demand the restriction of the use of the personal data."), p("c) We no longer need the personal data for the purposes of the processing, but you need the personal data to assert, exercise or defend legal claims."), p("d) If you have lodged an objection to the processing in accordance with Art. 21 GDPR and it has not yet been established whether the legitimate reasons of the controller in relation to your reasons outweigh the others."), p("e) If the processing of personal data relating to you has been restricted, such data may be processed, with the exception of storage, only with your consent or for the purpose of asserting, exercising or defending legal claims or protecting the rights of another natural or legal person or on grounds of an important public interest of the Union or a Member State. If the restriction on processing has been restricted under the above conditions, you will be informed by us before the restriction is lifted."), p("11.4 Right of deletion"), p("You can delete your user data by clicking the “delete user” button in the settings. We will delete all your user data stored on our servers after a safety period of 30 days."), p("To delete the user data stored on your devices, you may uninstall ANTON or click on Logout in the app under Settings and select the user profile to be deleted."), p("11.5 Right to data transferability"), p("Schools can mark user accounts that they have created or for which they are responsible for administration for deletion after a transition period of 60 days. The users - and if necessary their legal guardians - must be informed by the school. The users are given the opportunity to transfer the data stored in the user account to a new account and to continue using it independently within a period of 60 days. After this period the user accounts will be automatically deleted."), p("You have the right to request a copy of your personal data in electronic format and the right to transfer this personal data for use in another's service. Upon request, we will send you a file containing your personal data. To do so, please send us an e-mail to privacy@anton.app with the following information for your identification: user name, registration code, first and last name, possibly maiden name, e-mail address, postal address and date of birth."), p("11.6 Right of objection"), p("You have the right to object at any time, for reasons arising from your particular situation, to the processing of personal data concerning you, which is carried out on the basis of Art. 6, paragraph 1, letter e or f GDPR."), p("11.7 Right to revoke the declaration of consent under data protection law"), p("You have the right to revoke your data protection declaration of consent at any time. Revocation of your consent does not affect the legality of the processing that has taken place on the basis of your consent until revocation."), p("11.8 Right of appeal to a supervisory authority"), p("Without prejudice to any other administrative or judicial remedy, you have the right to appeal to a supervisory authority, in particular in the Member State of your residence, workplace or the location of the probable offense if you believe that the processing of personal data concerning you is in breach of the GDPR. The supervisory authority to which the complaint has been submitted will inform the complainant of the status and the results of the complaint, including the possibility of a judicial remedy under Art. 78 GDPR.")]
}), section({
isExpanded: isPrint,
header: "12. What is the legal basis for the processing under GDPR?",
content: [p("Insofar as we obtain the consent of the data subject for the processing of personal data, Art. 6 (1) (a) of the Basic Data Protection Regulation (GDPR) serves as the legal basis."), p("When processing personal data which is necessary for the performance of a contract to which the data subject is a party, Article 6 (1) lit. b GDPR serves as the legal basis. This also applies to processing operations which are necessary to carry out pre-contractual measures."), p("Insofar as processing of personal data is necessary to fulfil a legal obligation to which our company is subject, Art. 6 para. 1 lit. c GDPR serves as the legal basis."), p("If the processing is necessary to safeguard a legitimate interest of our company or of a third party and if the interests, fundamental rights and freedoms of the data subject do not outweigh the former interest, Art. 6 para. 1 lit. f GDPR serves as the legal basis for the processing.")]
}), section({
isExpanded: isPrint,
header: "13. How will I be notified about changes to this policy?",
content: [p("We may occasionally update this Privacy Policy as our practices and legal requirements evolve or to further protect our users. Please see “last updated” at the top of this page for the date it was last updated. We will not reduce your rights under this Privacy Policy without your explicit consent. If we make any significant changes, we will notify you by posting a notice on the Service and/or sending an e-mail (using the e-mail address you provided), so you can review any edits and make sure you are informed about them."), p("Furthermore, if we ever make material changes to the types of personal information we collect from children, or how we use it, we will notify parents in order to obtain parental consent or notice for those new practices and provide schools with the necessary information about these changes where they have obtained parental consent (or acted as the agent of the parent and provided consent on their behalf)."), p("We encourage you to review this Privacy Policy from regularly, to stay informed about our processing of personal information through the Service. If you don’t agree with any changes to the Privacy Policy, you may delete your account. By continuing to use the Service after the updated Privacy Policy has become effective, you acknowledge that you accept and agree to the current version of the Privacy Policy.")]
}), section({
isExpanded: isPrint,
header: "14. How can I contact ANTON with questions?",
content: [p("If you have any questions or concerns about this Privacy Policy or how we protect user data, please contact us at privacy@anton.app"), p("You may also write to us at:"), p("solocode GmbH, Mehringdamm 61, 10961 Berlin")]
}), section({
isExpanded: isPrint,
header: "15. Explanation of terms",
content: [p("GDPR: Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of individuals with regard to the processing of personal data and on the free movement of such data and repealing Directive 95/46/EC (basic data protection regulation)."), p("UK DPA 2018: The Data Protection Act 2018 controls how your personal information is used by organisations, businesses or the government. It is the UK's implementation of the GDPR."), p("CCPA: The California Consumer Privacy Act is a state statute with the aim to enhance privacy rights and consumer protection for residents of the state of California in the United States."), p("Personal data: According to Art. 4(1) GDPR, any information relating to an identified or identifiable natural person; an identifiable person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier, or one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person.")]
}));
};
})();
pages/static/privacy/div/divEnGb/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("Last updated: July 27th, 2023."), p("ANTON is a digital learning app that can be downloaded or used in the browser."), p("ANTON is developed and operated by solocode GmbH, Mehringdamm 61, 10961 Berlin, Germany (”Solocode”, ”we”, “us”, “our”, and our subsidiaries or affiliates)."), p("This Privacy Policy applies whether you log-in to ANTON in the browser at https://anton.app (the “Web-App”) and our mobile applications (the “Apps”), or any of our other products or services that link to this Privacy Policy that we may provide now or in the future (collectively, the “Service(s)”)."), p("This Privacy Policy does not apply to websites with information about ANTON that are not located at https://anton.app and that do not link to this Privacy Policy."), p("This Privacy Policy does not apply to websites or services or practices of companies that We do not own or control, such as third-party services you might access through links or other features (e.g. e-mails or notifications) on ANTON. Please note that such other services may have their own privacy policies. We recommend reviewing their policies before sharing any personal information with them."), p("By using ANTON, you acknowledge that you accept and agree to this Privacy Policy and our Terms of Service (”Terms”) that can be found at http://anton.app/en_us/terms."), p("ANTON is COPPA-compliant, and our policies and practices help schools meet their FERPA obligations."), p("If you have any questions regarding this Privacy Policy or data protection in general, please send us an e-mail at privacy@anton.app.")]
}), section({
isExpanded: isPrint,
header: "2. What is ANTON and how can it be used?",
content: [p("ANTON is a digital learning app. It can be used as a mobile app or as a web-app in the browser. "), p("ANTON can be used in two ways:"), p("a) On your own outside of school: you can download the ANTON mobile app or visit anton.app in the browser and create your own account. In this case, Solocode will generally act as the data controller for the user data."), p("b) With a teacher as a member of a group and/or school: a teacher or a school prepares an access code for you and you use that code to sign in. In this case, the data controller is the school. We act as a data processor (or service provider as defined under CCPA) on behalf of the school and will process such data only at the direction and control of the school. Additionally, we will only delete records per the school’s specific instructions and will request that users make any requests for access, correction or deletion of personal information through the school. We will assist the school in responding to such requests as needed. We offer a Data Privacy Addendum (DPA), an agreement we enter into with schools or districts that further describes our duties, responsibilities, and commitments with respect to user data that we collect or receive."), p("In both cases, it is possible to use ANTON without entering any personally identifiable information. "), p("More information on how the Service operates can be found in our frequently asked questions at anton.app/faq, and your taking part and use of the Service is governed by our Terms of Service at http://anton.app/en_us/terms.")]
}), section({
isExpanded: isPrint,
header: "3. What data does ANTON store?",
content: [p("3.1 Data that you or your school provide us with"), p("If you are a student, we will ask you for a nickname, your school (optional) and which subject and grade level you would like to start with."), p("If you are a teacher, we will ask you for your first name, surname, salutation and, optionally, your school and e-mail address."), p("If you are a teacher or an employee of a school, when you create a group and login-codes for your students and/or co-teachers, your school is responsible for privacy. You should get parental consent first and we provide informational resources that you can use to inform parents and request their consent. When creating accounts, we recommend that you only use nicknames that cannot be used to identify the students."), p("If you are a teacher and you assign your account to a school, you allow the administrator of that school to add your user to the school directory, manage your user and users with the login-codes you create, add your first name, last name and class to your directory entry, view the login-code and mark your user account(s) for deletion."), p("If you decide that your user should be stored on your device, we will store this information on your device."), p("We will occasionally ask you how much you like ANTON and the learning content and how we can improve it."), p("If you are at least 16 years old, you may enter your e-mail address or mobile phone number under Settings. We can then restore your access in case you lose your credentials."), p("If you contact us via help chat or e-mail, these messages and the date and time of the messages will be stored so that we can communicate with you."), p("3.2 Information that we automatically receive through your use of ANTON"), p("When you use ANTON, we will store data about your use on your device and sync it with our server when an internet connection is available. This enables you to use ANTON with your user account on multiple devices."), p("This data includes: app pages launched and your learning progress, your game results, your membership in groups and schools if provided, content created by you such as pictures and learning lists, your device type, operating system and internet browser as well as your pseudonymized IP-address."), p("We do not store the last three digits of your IP-address in our system, so it cannot be used to identify you."), p("We will not store or track your device location. Because we do not store your full IP-address, it can also not be used to identify your precise location. We use your pseudonymized IP-address to get a very broad approximation of your location that is reliable on the country level but not on a city level.")]
}), section({
isExpanded: isPrint,
header: "4. What is this data used for?",
content: [p("We do not sell or rent any of your, or your child’s, personal information to any third-party for any purpose - including for advertising or marketing purposes. Third-party advertising is not permitted in ANTON and student-data is never used for behaviorally-targeted advertising. "), p("We use the personal information we collect only to provide and improve ANTON, for educational purposes, security, and safety purposes, to answer your requests and questions send to our customer service or as allowed or required by law.")]
}), section({
isExpanded: isPrint,
header: "5. How long is the data stored?",
content: [p("Your personal data will be deleted as soon as the purpose for which it was stored ceases to apply. "), p("Your user data will be stored for as long as you have an active user account at ANTON. If you no longer use ANTON and are not a member of a school directory administered by a school, we will automatically delete your user data 12 months after you last logged in or after your ANTON Plus membership ends."), p("If you are a member of a school directory, the school is responsible for deleting your user account via our user interface when the purpose for which it was stored ceases to apply (e.g. when you leave the school). "), p("We do not retain a user’s personal information for any longer than is necessary for educational purposes or legal obligations, or to provide the Service for which we receive or collect the user’s personal information. Additionally, we only keep a user’s personal information for as long as her or his user account is active, unless we are required by law or the user’s school to retain it, need it to ensure the security of our community or our Service, or to enforce our Terms.")]
}), section({
isExpanded: isPrint,
header: "6. Does ANTON share data with third parties?",
content: [p("We do not sell or rent any of your, or your child’s, personal information to any third-party for any purpose - including for advertising or marketing purposes. Third-party advertising is not permitted in ANTON and student-data is never used for behaviorally-targeted advertising. "), p("Moreover, we do not share personal information with any third-parties except in the limited circumstances described in this Privacy Policy and as stated below:"), p("a) Other Users You Interact with on ANTON: "), p("No student, teacher or parent profiles are made available to the general public through ANTON. "), p("Other users can see your nickname, avatar and score in the high score list of the games in the games section. If you generate content such as painting a picture or creating a learning lists yourself, you can decide whether you want to share this content with other users (the default setting is “no”)."), p("Your group teacher(s) and - if your school uses the school directory - the school administrator and the teachers at your school who have been authorized by him/her can see your name and learning progress and look up your login-code for you."), p("When you register as a teacher and select a school, the school directory administrator of that school can view your name and registration code and add you to the school directory. "), p("Please remember that information (including personal Information) or content that you voluntarily share with others - including with other ANTON users - can be viewed, copied, saved, and used by the people you share it with. We cannot control what people do with the information you choose to share with them and we are not responsible for how others collect, use, or share that information or content."), p("b) Trusted Service Providers: We work with vendors, service providers, and other partners to help us provide ANTON by performing tasks on our behalf. These companies have only limited access to data and are contractually bound to process the data solely on our behalf and only for the purpose for which it was disclosed. They are not third parties as defined in the GDPR but data processors (or service providers as defined under CCPA) on our behalf. We may need to share or provide information (including personal information) to them to help them perform these functions, for example sending e-mails on our behalf, hosting, and security. We may also authorize these companies to collect information on our behalf. These service providers must adhere to strict confidentiality and security obligations in a way that is consistent with this Privacy Policy. "), p("c) Legal Requirements: We may disclose information if we have a good faith belief that doing so is necessary to comply with the law, such as complying with a subpoena or other legal process. We may need to disclose personal information if, in good faith, we believe it is necessary to protect the rights, property, or safety of ANTON, our employees, our community, or others, or to prevent violations of our Terms of Service or other agreements. This can include, without limitation, responding to law enforcement and requests by the government. Where appropriate, we notify users about the legal requests, unless providing notice is prohibited by the legal process itself, by court order, or by applicable law; or if we believe that providing notice would be ineffective, create a risk of injury or bodily harm to an individual or group, or create or increase a risk of fraud upon ANTON, or its users. In cases where we have to comply with legal requests without notice for these reasons, we will attempt to notify the user about the request after the fact where appropriate and where we believe in good faith that we are no longer prevented from doing so."), p("d) Sharing with Solocode companies: In the future, Solocode may grow and reorganize. We may need to share your personal information with our affiliated companies, such as our parent company, subsidiaries, joint venture partners, or other companies that we control or that are under common control with us. If we do so, we will require these companies to agree to use your personal information in accordance with this Privacy Policy."), p("e) Change of control: The Student Privacy Pledge requires us (and all other signatories) to ensure that successor entities that may acquire part or all of our organization in the future will act in accordance with the pledge principles or allow users a choice whether to share information with the future entity or have their information deleted. In accordance with the Student Privacy Pledge and applicable state and federal laws, and in connection with such a change to our organization, this Privacy Policy will continue to apply to your information, and any acquirer would only be able to handle your personal information as stated in this policy (unless the school, parent or eligible user consent to a new policy). We will inform you of an acquisition within 30 days following the completion of such a transaction, by posting on our homepage, or by e-mail to your e-mail address if you provided one to us. If you do not consent to the use of your personal information by such a successor company, subject to applicable law, you may request its deletion. We may also make information, including personal information, available to a potential investor or acquirer (or their advisors) in advance of any such transaction completion."), p("f) In the unlikely event that Solocode goes out of business, or files for bankruptcy, we will protect your personal information, and will not sell it to any third-party. "), p("g) With your consent: Other than in the cases above, we won’t disclose any personal information for any purpose other than with parental or eligible user consent, or in cases where we process the data on behalf of a school with agreement or under the direction of the school.")]
}), section({
isExpanded: isPrint,
header: "7. How is the security of the data guaranteed?",
content: [p("Your ANTON account is protected by a password and/or a login-code. To protect against unauthorized access to your account, keep your password and login-code secret at all times. The security of your personal information is important to us. We are committed to protecting your data and have implemented technical, physical and administrative security measures to prevent unauthorized use, disclosure, or access to personal information, in particular:"), p("Privacy by design and default: Our engineering team is committed to ensuring the security of your personal information. When we develop new features, we do this with privacy and security in mind from the outset."), p("We perform security testing; penetration testing; conduct risk assessments, and ensure compliance with our security policies."), p("We periodically review our data processing practices to guard against unauthorized access to systems."), p("When you enter any information anywhere on ANTON, we encrypt the transmission of that information using secure socket layer technology (SSL/TLS) by default."), p("We make sure passwords are stored and transferred securely using salted hashing and encryption."), p("Data centers meet the highest security standards and are certified according to DIN ISO/IEC 27001."), p("We automatically delete inactive accounts and user data 12 months after you last logged in or after your ANTON Plus membership ends and you are not a member of a school directory administered by a school."), p("We limit access to personal information to employees and independent contractors who are authorized to process it for us. These individuals are bound by strict confidentiality obligations and may face disciplinary action or termination if they fail to meet these obligations. "), p("While we strive to maintain the security of personal information and work hard to ensure the integrity and security of our systems, no system is 100% immune and we cannot guarantee the security of information. User information may be compromised due to outages, attacks, human error, system failure, unauthorized use, or other factors beyond our control. We have an incident response management in place that ensures that we can respond in an adequate and timely manner to mitigate risks and inform users. "), p("If we learn of a security breach, we will attempt to notify you electronically (subject to any applicable laws and school reporting requirements) so that you can take appropriate protective steps; e.g., we may post a notice on our homepage (anton.app) or elsewhere on the Service, and may send e-mail to you at the e-mail address you have provided to us. Depending on where you live, you may have a legal right to receive notice of a security breach in writing.")]
}), section({
isExpanded: isPrint,
header: "8. Our commitments to transparency and your rights",
content: [p("You have control over the personal information you share with us, and you can access or correct this information at any time. You can also delete your account. "), p("We provide ways to object, restrict or withdraw consent (where applicable) for the use of personal information you have provided to us. We make it easy for you to contact us and to transfer the personal information you have shared through the Service."), p("To exercise any of these rights, send an e-mail to privacy@anton.app. Please note that we may ask you to verify your identity before taking any further action on your request and we may require acceptable forms of personal identification.")]
}), section({
isExpanded: isPrint,
header: "9. Canada",
content: p("We strive to provide privacy protection that is consistent with Canada’s private sector privacy laws, including the Personal Information Protection and Electronic Documents Act (“PIPEDA”). For any questions regarding how we comply with PIPEDA, please contact us at privacy@anton.app")
}), section({
isExpanded: isPrint,
header: "10. California Privacy Disclosures",
content: [p("As a California resident, you have the right to request information about how we collected and used your personal information in the last 12 months. If you are a resident of California, you have certain rights regarding your personal information under the CCPA. You can request that we disclose the specific pieces of information that we have collected about you, and you can also request that we delete your personal information that we have collected or maintained. We provide these rights to all of our users and you can find more information on your rights and how to exercise them in 8 Our commitments to transparency and your rights"), p("We will not discriminate against you for exercising any of your rights under CCPA. Unless in accordance with the CCPA, we will not do any of the following: deny you goods or services, charge you different prices or rates for goods or services, including granting discounts or other benefits, or imposing penalties, suggest that you may receive a different price or rate for goods or services or a different level or quality of goods or services.")]
}), section({
isExpanded: isPrint,
header: "11. General Data Protection Regulation",
content: [p("Residents in the European Union or in the United Kingdom are entitled to certain rights with respect to personal information that we hold about them under the General Data Protection Regulation (GDPR) or in the UK under the Data Protection Act 2018 respectively:"), p("11.1 Right to information"), p("Every user has the right to receive free information about the personal data stored about him/her. Please send us an e-mail to privacy@anton.app with the following information for your identification: user name, registration code, name, e-mail address, postal address and date of birth."), p("11.2 Right to correction"), p("You have the right to rectification and/or integration if the personal data processed concerning you is incorrect or incomplete."), p("11.3 Right to limit processing"), p("Under the following conditions, you may request the restriction of the processing of personal data concerning you:"), p("a) If you dispute the accuracy of the personal data concerning you for a period of time that allows us to verify the accuracy of the personal data."), p("b) If the processing is unlawful and you object to the deletion of the personal data and instead demand the restriction of the use of the personal data."), p("c) We no longer need the personal data for the purposes of the processing, but you need the personal data to assert, exercise or defend legal claims."), p("d) If you have lodged an objection to the processing in accordance with Art. 21 GDPR and it has not yet been established whether the legitimate reasons of the controller in relation to your reasons outweigh the others."), p("e) If the processing of personal data relating to you has been restricted, such data may be processed, with the exception of storage, only with your consent or for the purpose of asserting, exercising or defending legal claims or protecting the rights of another natural or legal person or on grounds of an important public interest of the Union or a Member State. If the restriction on processing has been restricted under the above conditions, you will be informed by us before the restriction is lifted."), p("11.4 Right of deletion"), p("You can delete your user data by clicking the “delete user” button in the settings. We will delete all your user data stored on our servers after a safety period of 30 days."), p("To delete the user data stored on your devices, you may uninstall ANTON or click on Logout in the app under Settings and select the user profile to be deleted."), p("11.5 Right to data transferability"), p("Schools can mark user accounts that they have created or for which they are responsible for administration for deletion after a transition period of 60 days. The users - and if necessary their legal guardians - must be informed by the school. The users are given the opportunity to transfer the data stored in the user account to a new account and to continue using it independently within a period of 60 days. After this period the user accounts will be automatically deleted."), p("You have the right to request a copy of your personal data in electronic format and the right to transfer this personal data for use in another's service. Upon request, we will send you a file containing your personal data. To do so, please send us an e-mail to privacy@anton.app with the following information for your identification: user name, registration code, first and last name, possibly maiden name, e-mail address, postal address and date of birth."), p("11.6 Right of objection"), p("You have the right to object at any time, for reasons arising from your particular situation, to the processing of personal data concerning you, which is carried out on the basis of Art. 6, paragraph 1, letter e or f GDPR."), p("11.7 Right to revoke the declaration of consent under data protection law"), p("You have the right to revoke your data protection declaration of consent at any time. Revocation of your consent does not affect the legality of the processing that has taken place on the basis of your consent until revocation."), p("11.8 Right of appeal to a supervisory authority"), p("Without prejudice to any other administrative or judicial remedy, you have the right to appeal to a supervisory authority, in particular in the Member State of your residence, workplace or the location of the probable offense if you believe that the processing of personal data concerning you is in breach of the GDPR. The supervisory authority to which the complaint has been submitted will inform the complainant of the status and the results of the complaint, including the possibility of a judicial remedy under Art. 78 GDPR.")]
}), section({
isExpanded: isPrint,
header: "12. What is the legal basis for the processing under GDPR?",
content: [p("Insofar as we obtain the consent of the data subject for the processing of personal data, Art. 6 (1) (a) of the Basic Data Protection Regulation (GDPR) serves as the legal basis."), p("When processing personal data which is necessary for the performance of a contract to which the data subject is a party, Article 6 (1) lit. b GDPR serves as the legal basis. This also applies to processing operations which are necessary to carry out pre-contractual measures."), p("Insofar as processing of personal data is necessary to fulfil a legal obligation to which our company is subject, Art. 6 para. 1 lit. c GDPR serves as the legal basis."), p("If the processing is necessary to safeguard a legitimate interest of our company or of a third party and if the interests, fundamental rights and freedoms of the data subject do not outweigh the former interest, Art. 6 para. 1 lit. f GDPR serves as the legal basis for the processing.")]
}), section({
isExpanded: isPrint,
header: "13. How will I be notified about changes to this policy?",
content: [p("We may occasionally update this Privacy Policy as our practices and legal requirements evolve or to further protect our users. Please see “last updated” at the top of this page for the date it was last updated. We will not reduce your rights under this Privacy Policy without your explicit consent. If we make any significant changes, we will notify you by posting a notice on the Service and/or sending an e-mail (using the e-mail address you provided), so you can review any edits and make sure you are informed about them."), p("Furthermore, if we ever make material changes to the types of personal information we collect from children, or how we use it, we will notify parents in order to obtain parental consent or notice for those new practices and provide schools with the necessary information about these changes where they have obtained parental consent (or acted as the agent of the parent and provided consent on their behalf)."), p("We encourage you to review this Privacy Policy from regularly, to stay informed about our processing of personal information through the Service. If you don’t agree with any changes to the Privacy Policy, you may delete your account. By continuing to use the Service after the updated Privacy Policy has become effective, you acknowledge that you accept and agree to the current version of the Privacy Policy.")]
}), section({
isExpanded: isPrint,
header: "14. How can I contact ANTON with questions?",
content: [p("If you have any questions or concerns about this Privacy Policy or how we protect user data, please contact us at privacy@anton.app"), p("You may also write to us at:"), p("solocode GmbH, Mehringdamm 61, 10961 Berlin"), p("Our representative under the UK GDPR is:"), p("GRCI Law Limited, Unit 3, Clive Court, Bartholomew’s Walk, Cambridgeshire Business Park, Ely, CB7 4EA, UK"), p("ukrep@grcilaw.com")]
}), section({
isExpanded: isPrint,
header: "15. Explanation of terms",
content: [p("GDPR: Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of individuals with regard to the processing of personal data and on the free movement of such data and repealing Directive 95/46/EC (basic data protection regulation)."), p("UK DPA 2018: The Data Protection Act 2018 controls how your personal information is used by organisations, businesses or the government. It is the UK's implementation of the GDPR."), p("CCPA: The California Consumer Privacy Act is a state statute with the aim to enhance privacy rights and consumer protection for residents of the state of California in the United States."), p("Personal data: According to Art. 4(1) GDPR, any information relating to an identified or identifiable natural person; an identifiable person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier, or one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person.")]
}));
};
})();
pages/static/privacy/div/divEs/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").append(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div().css({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("ANTON es una aplicación de aprendizaje digital que puede ser descargada o utilizada en https://anton.app."), p("El operador y responsable en términos de protección de datos es solocode GmbH, Mehringdamm 61, 10961 Berlín. "), p("Si tienes alguna pregunta sobre la privacidad, puedes escribirnos a privacy@anton.app."), p("La protección de tus datos es particularmente importante para nosotros."), p("Recopilamos la menor cantidad de datos posible, los borramos automáticamente en caso de inactividad, los almacenamos sólo en servidores seguros en Europa y no los compartimos con terceros.")]
}), section({
isExpanded: isPrint,
header: "2. ¿Qué datos almacena ANTON?",
content: [
section({
isExpanded: isPrint,
header: "2.1. Los datos que compartes con nosotros",
content: [p("Si eres estudiante, te pediremos tu apodo, tu escuela (opcional) y la asignatura con la que te gustaría empezar en cada curso. Si te asignas a una escuela, el administrador de la escuela puede añadir tu usuario al directorio de la escuela y añadir datos sobre ti, como el nombre y la clase."), p("Si eres docente, te pediremos tu nombre, apellido, título y voluntariamente tu escuela y tu dirección de correo electrónico."), p("Si eres docente o miembro del personal de una escuela y creas un grupo y claves de acceso para sus estudiantes y/o docentes, tu o tu escuela son responsables de la protección de datos. Por favor, utiliza únicamente apodos que no permitan a un tercero identificar a los estudiantes u obtener el consentimiento de los padres."), p("Si eres docente y te asignas a una escuela, permites que el administrador de esta escuela añada tu usuario al directorio de la escuela, que gestione tu usuario y los usuarios con las claves de acceso creados por ti, que añada datos personales, que vea la clave de acceso y que marque a los usuarios para su eliminación."), p("Si eliges que tu información de usuario se almacene en tu dispositivo, nosotros la almacenaremos en él."), p("De vez en cuando te preguntamos cuánto te gusta ANTON y el contenido de aprendizaje, y cómo podemos mejorarlo."), p("Tienes la opción de introducir tu dirección de correo electrónico o número de teléfono móvil en la configuración si tienes al menos 16 años. Entonces podemos restaurar tu acceso en caso de que pierdas tus datos de acceso."), p("Si te pones en contacto con nosotros a través del chat de ayuda o del correo electrónico, almacenaremos estos mensajes y la fecha y la hora de los mismos para poder comunicarnos contigo.")]
}), section({
isExpanded: isPrint,
header: "2.2. La información que recibimos automáticamente a través de tu uso de ANTON",
content: [p("Cuando utilizas ANTON, ANTON almacena datos sobre tu uso en el dispositivo y los sincroniza con nuestro servidor cuando se conecta a Internet. Esto te permite usar ANTON con tu usuario en múltiples dispositivos."), p("Esto incluye: páginas de aplicaciones que has lanzado y tu progreso de aprendizaje, los resultados de tus juegos, tu membresía en grupos, contenido que has creado, como imágenes y listas de aprendizaje, tu tipo de dispositivo, sistema operativo y navegador de Internet y tu dirección IP anónima."), p("No guardamos los últimos tres dígitos de tu dirección IP en nuestro sistema para que puedas permanecer en el anonimato.")]
})
]
}), section({
isExpanded: isPrint,
header: "3. ¿Para qué se utilizan estos datos?",
content: p("Los datos almacenados serán utilizados exclusivamente, para ayudarte en caso de problemas con ANTON, y para desarrollar ANTON según las necesidades de nuestros usuarios.")
}), section({
isExpanded: isPrint,
header: "4. ¿Cuánto tiempo se almacenarán los datos?",
content: [p("Tus datos de usuario serán almacenados mientras uses ANTON. Si dejas de utilizar ANTON y no eres miembro de un directorio gestionado por la escuela, borraremos automáticamente tus datos de usuario 12 meses después de tu última conexión o después de que termine tu afiliación a ANTON Plus."), p("Tus datos personales serán eliminados o bloqueados tan pronto como el propósito del almacenamiento deje de ser aplicable. Los datos también pueden almacenarse si así lo ha dispuesto el legislador europeo o nacional en los reglamentos, leyes u otras disposiciones de la Unión a las que esté sujeto el responsable del tratamiento. También se bloquearán o suprimirán los datos si expira el período de almacenamiento prescrito por las normas mencionadas, a menos que haya necesidad de seguir almacenando los datos para la conclusión o el cumplimiento de un contrato.")]
}), section({
isExpanded: isPrint,
header: "5. ¿Comparte ANTON datos con terceros?",
content: [p("No, no compartimos tus datos con terceros a menos que el usuario haya dado previamente su consentimiento expreso o exista una obligación legal de transmitir los datos."), p("No usamos Google, Facebook, Amazon o cualquier otra integración de productos en ANTON, lo que significa que tus datos realmente sólo se quedan en nuestros servidores.")]
}), section({
isExpanded: isPrint,
header: "6. ¿Cómo se garantiza la seguridad de los datos?",
content: [p("Todos los datos se almacenan exclusivamente en servidores físicos en la Union Europea y se transmiten en forma cifrada. Los centros de datos cumplen con los más altos estándares de seguridad y están certificados de acuerdo a ISO/IEC 27001."), p("Al mismo tiempo, el usuario debe ser consciente de que, debido a la constante aparición de nuevos virus y otros medios de atacar los sistemas de datos seguros de los servicios de Internet, no se puede garantizar una protección al cien por cien contra los ataques."), p("Perseguiremos cualquier ataque descubierto por hackers y similares bajo el derecho civil y penal e informaremos al usuario sobre cualquier compromiso de sus datos.")]
}), section({
isExpanded: isPrint,
header: "7. ¿Qué datos pueden ver otros usuarios?",
content: [p("Otros usuarios pueden ver tu apodo, avatar y puntuación en los juegos. Si tu mismo generas el contenido, como imágenes o listas de aprendizaje, puedes decidir si deseas hacerlo público para otros usuarios."), p("Tu docente de grupo y, en caso de que tu escuela utilice el directorio escolar, el administrador de la escuela y los docentes autorizados por él en tu escuela pueden ver tu nombre y tu progreso de aprendizaje y buscar tu clave de acceso por ti."), p("Cuando te registras como docente y seleccionas una escuela, el administrador del directorio de esa escuela podrá ver tus datos y la clave de acceso y añadirte al directorio de la escuela. Esto también se aplica si has dado información falsa sobre ti o tu afiliación a la escuela.")]
}), section({
isExpanded: isPrint,
header: "8. Tus derechos",
content: [
section({
isExpanded: isPrint,
header: "8.1. Derecho a la información",
content: p("Todo usuario tiene derecho a recibir información gratuita sobre los datos personales almacenados sobre él. Por favor, envíanos un correo electrónico a privacy@anton.app con la siguiente información de identificación: apodo, clave de acceso, nombre, dirección de correo electrónico, dirección postal y fecha de nacimiento.")
}), section({
isExpanded: isPrint,
header: "8.2. Derecho de rectificación",
content: p("Tienes derecho a rectificar y/o completar si los datos personales procesados que te conciernen son inexactos o están incompletos.")
}), section({
isExpanded: isPrint,
header: "8.3. Derecho a restringir el procesamiento",
content: [p("Puedes solicitar la restricción del tratamiento de los datos personales que te conciernen en las siguientes condiciones:"), p("a. Si disputas la exactitud de los datos personales relacionados contigo durante un período de tiempo que nos permita verificar la exactitud de los datos personales."), p("b. El procesamiento es ilegal y te opones al borrado de los datos personales para solicitar en su lugar la restricción del uso de los datos personales."), p("c. Ya no necesitamos los datos personales para el procesamiento, pero tu los necesitas para hacer valer, ejercer o defender tus derechos legales."), p("d. Si te has opuesto a la tramitación de conformidad con el artículo 21 1) de la DSGVO y todavía no está claro si los motivos legítimos del controlador prevalecen sobre tus motivos."), p("e. Cuando se haya restringido el tratamiento de los datos personales que te conciernen, éstos sólo podrán tratarse, con excepción de su almacenamiento, con tu consentimiento o para el establecimiento, ejercicio o defensa de demandas judiciales o para la protección de los derechos de otra persona física o jurídica o por razones de interés público sustancial de la Unión o de un Estado miembro. Si la restricción del procesamiento ha sido restringida de acuerdo con las condiciones anteriores, te informaremos antes de que se levante la restricción.")]
}), section({
isExpanded: isPrint,
header: "8.4. Derecho de eliminación",
content: [p("Si lo deseas, podemos eliminar tus datos de usuario. Por favor, envíanos un correo electrónico a privacy@anton.app con la siguiente información para identificarlo: nombre de usuario, clave de acceso, nombre y apellido."), p("Para eliminar los datos de usuario almacenados en tus dispositivos, puedes desinstalar ANTON o hacer clic en cerrar sesión, en los ajustes de la aplicación, y seleccionar el perfil del usuario que deseas eliminar.")]
}), section({
isExpanded: isPrint,
header: "8.5. Derecho a la portabilidad de los datos",
content: [p("Las escuelas pueden marcar las cuentas de usuario que han creado o cuya administración es su responsabilidad de suprimir después de un período de transición de 60 días. Los usuarios, y si es necesario sus tutores legales, deben ser informados por la escuela. Los usuarios tendrán la oportunidad de transferir los datos almacenados en la cuenta del usuario a una nueva cuenta en un plazo de 60 días y de seguir utilizándola de forma independiente. Después de este período, las cuentas de usuario se eliminarán automáticamente."), p("Tienes derecho a solicitar una copia de tus datos personales en formato electrónico y el derecho a transferir esos datos personales para utilizarlos al servicio de otra persona. Si lo solicitas, te enviaremos un archivo con tus datos personales. Para ello, envíanos un correo electrónico a privacy@anton.app con la siguiente información de identificación: nombre de usuario, clave de acceso, nombre y apellido, posiblemente apellido de soltero, dirección de correo electrónico, dirección postal y fecha de nacimiento.")]
}), section({
isExpanded: isPrint,
header: "8.6. Derecho de objeción",
content: p("Tienes derecho a oponerte en cualquier momento, por motivos derivados de tu situación particular, al tratamiento de los datos personales que te conciernen y que se efectúe sobre la base del artículo 6 1) e) o f) de la DSGVO.")
}), section({
isExpanded: isPrint,
header: "8.7. Derecho a revocar la declaración de consentimiento en virtud de la ley de protección de datos",
content: p("Tienes derecho a revocar tu consentimiento de protección de datos en cualquier momento. La revocación del consentimiento no afecta a la legalidad del tratamiento realizado sobre la base del consentimiento hasta la revocación.")
}), section({
isExpanded: isPrint,
header: "8.8. Derecho a quejarse ante una autoridad de supervisión",
content: p("Sin perjuicio de cualquier otro recurso administrativo o judicial, tienes derecho a presentar una denuncia ante una autoridad de supervisión, en particular en el Estado miembro de tu residencia, lugar de trabajo o lugar de la presunta infracción, si consideras que el tratamiento de los datos personales que te conciernen infringe la RPI. La autoridad de supervisión a la que se haya presentado la denuncia informará al denunciante sobre la situación y el resultado de la misma, incluida la posibilidad de un recurso judicial en virtud del artículo 78 de la RDPI.")
})
]
}), section({
isExpanded: isPrint,
header: "9. ¿Cuál es la base jurídica de la tramitación?",
content: [p("En la medida en que obtengamos el consentimiento del interesado para las operaciones de tratamiento de datos personales, el artículo 6 1) a) del Reglamento general de protección de datos de la UE (DSGVO) sirve de base jurídica."), p("En el tratamiento de los datos personales necesarios para la ejecución de un contrato en el que el interesado sea parte, el artículo 6 1) lit. b DSGVO sirve de base jurídica. Esto también se aplica a las operaciones de procesamiento necesarias para la ejecución de medidas precontractuales."), p("En la medida en que el tratamiento de los datos personales sea necesario para el cumplimiento de una obligación legal a la que nuestra empresa esté sujeta, el artículo 6 (1) lit. c DSGVO sirve de base legal."), p("Si el tratamiento es necesario para proteger un interés legítimo de nuestra empresa o de un tercero y los intereses, los derechos y las libertades fundamentales del interesado no prevalecen sobre el primer interés mencionado, el apartado 1 del artículo 6, letra f), de la DSGVO sirve de base jurídica para el tratamiento.")]
}), section({
isExpanded: isPrint,
header: "10. Explicación de los términos",
content: [p("EU GDPR: Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo, de 27 de abril de 2016, relativo a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos, y por el que se deroga la Directiva 95/46/CE (Reglamento general sobre protección de datos)."), p("Datos personales: De conformidad con el artículo 4 1) del Reglamento sobre el PIB de la UE, toda información relativa a una persona física identificada o identificable; una persona física identificable es aquella que puede ser identificada, directa o indirectamente, en particular mediante referencia a un identificador, como un nombre, un número de identificación, datos de localización, un identificador en línea o a uno o más factores específicos de la identidad física, fisiológica, genética, mental, económica, cultural o social de esa persona física.")]
}));
};
})();
pages/static/privacy/div/divFr/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").append(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div().css({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Généralités",
content: [p("ANTON est une application d'apprentissage numérique qui peut être téléchargée ou utilisée à l'adresse https://anton.app."), p("L'opérateur et responsable en matière de protection des données est la société Solocode GmbH, Mehringdamm 61, 10961 Berlin."), p("Si vous avez des questions concernant la protection des données, veuillez nous écrire à l'adresse privacy@anton.app."), p("La protection de vos données est particulièrement importante pour nous."), p("Nous recueillons le moins de données possible, les supprimons automatiquement lorsqu'elles sont inactives, les stockons uniquement sur des serveurs sécurisés en Europe et ne les transmettons pas à des tiers.")]
}), section({
isExpanded: isPrint,
header: "2. Quelles sont les données stockées par ANTON ?",
content: [
section({
isExpanded: isPrint,
header: "2.1 Données que vous nous fournissez",
content: [p("Si vous êtes élève, nous vous demanderons votre surnom, votre école (facultative), la matière par laquelle vous souhaitez commencer, dans quel niveau scolaire. Lorsque vous sélectionnez une école, l'administrateur·rice de l'école peut ajouter votre utilisateur·rice au répertoire de l'école et ajouter des informations personnelles vous concernant telles que votre nom et votre classe."), p("Si vous êtes enseignant·e, nous vous demanderons votre prénom, votre nom, votre titre et, uniquement si vous souhaitez les communiquer, votre école et votre adresse électronique."), p("Si vous êtes enseignant·e ou employé·e d'une école, si vous créez un groupe et des codes de connexion pour vos élèves et/ou vos enseignant·es, vous ou votre école êtes responsables de la protection de ces données. Veuillez n'utiliser que des surnoms qu'un tiers ne pourrait pas utiliser pour identifier les élèves ou obtenir l'autorisation des parents."), p("Si vous êtes enseignant·e et que vous êtes affecté·e à une école, vous autorisez l'administrateur·rice de cette école à ajouter votre utilisateur·rice au répertoire de l'école, à gérer votre utilisateur·rice et les utilisateur·rices avec les codes de connexion que vous créez, à ajouter des informations personnelles, à consulter le code de connexion et à engager la suppression des utilisateur·rices."), p("Si vous décidez que votre utilisateur·rice doit être stocké·e sur votre appareil, nous stockerons ces informations sur votre appareil."), p("Nous vous demanderons de temps en temps si vous aimez ANTON et le contenu d'apprentissage et comment nous pouvons l'améliorer."), p("Si vous avez 16 ans ou plus, vous pouvez saisir votre adresse électronique ou votre numéro de téléphone portable sous la rubrique “Paramètres”. Nous serons alors en mesure de rétablir votre accès si vous perdez vos données d'accès."), p("Si vous nous contactez via le chat d’assistance ou par e-mail, ces messages ainsi que la date et l'heure des messages seront stockés afin que nous puissions communiquer avec vous.")]
}), section({
isExpanded: isPrint,
header: "2.2 Informations que nous recevons automatiquement par le biais de votre utilisation d'ANTON",
content: [p("Si vous utilisez ANTON, ANTON enregistre les données relatives à votre utilisation sur votre appareil et les compare avec notre serveur lorsqu'une connexion Internet est disponible. Cela vous permet d'utiliser ANTON avec votre utilisateur·rice sur plusieurs appareils."), p("Cela comprend : les pages d'application lancées et vos progrès d'apprentissage, vos résultats de jeu, votre appartenance à des groupes, le contenu que vous avez créé comme des images et des listes d'apprentissage, votre type d'appareil, votre système d'exploitation et votre navigateur Internet ainsi que votre adresse IP anonyme."), p("Nous ne conservons pas les trois derniers chiffres de votre adresse IP dans notre système, vous pouvez donc rester anonyme.")]
})
]
}), section({
isExpanded: isPrint,
header: "3. À quoi servent ces données ?",
content: p("Les données stockées seront utilisées uniquement pour vous proposer ANTON, pour vous aider à résoudre les problèmes que vous pourriez rencontrer avec ANTON et pour développer ANTON en fonction des besoins de nos utilisateur·rices.")
}), section({
isExpanded: isPrint,
header: "4. Combien de temps les données sont-elles conservées ?",
content: [p("Vos données d'utilisateur·rice seront conservées aussi longtemps que vous utiliserez ANTON. Si vous n'utilisez plus ANTON et n'êtes pas membre d'un répertoire scolaire géré par une école, nous supprimerons automatiquement vos données d'utilisateur·rice 12 mois après votre dernière connexion ou après la fin de votre adhésion à ANTON Plus."), p("Vos données personnelles seront supprimées ou bloquées dès que la finalité pour laquelle elles ont été stockées cessera d'être applicable. En outre, le stockage peut être effectué s'il est prévu par le législateur européen ou national dans les ordonnances, lois ou autres règlements de l'UE auxquels la personne responsable est soumise. Les données seront également bloquées ou effacées si une période de conservation prescrite par les normes susmentionnées expire, à moins qu'il ne soit nécessaire de les conserver plus longtemps pour conclure ou exécuter un contrat.")]
}), section({
isExpanded: isPrint,
header: "5. ANTON transmet-elle des données à des tiers ?",
content: [p("Non, nous ne transmettrons pas vos données à des tiers, sauf si l'utilisateur·rice a donné son consentement préalable explicite ou s'il existe une obligation légale de transmettre des données."), p("Nous n'utilisons pas Google, Facebook, Amazon ou d'autres intégrations de produits dans ANTON, c'est-à-dire que vos données ne resteront réellement que sur nos serveurs.")]
}), section({
isExpanded: isPrint,
header: "6. Comment la sécurité des données est-elle garantie ?",
content: [p("Toutes les données sont stockées exclusivement sur des serveurs situés dans l'Union Européenne et transmises sous forme cryptée. Les centres de données répondent aux normes de sécurité les plus strictes et sont certifiés selon la norme DIN ISO/IEC 27001."), p("Dans le même temps, l'utilisateur·rice doit être conscient·e qu'en raison de l'émergence constante de nouveaux virus et d'autres moyens d'attaquer les systèmes de données sécurisés des services Internet, une protection à 100 % contre les attaques ne peut être garantie."), p("Nous poursuivrons toute attaque découverte par des pirates informatiques et autres en vertu du droit civil et pénal et informerons l'utilisateur·rice de toute compromission de ses données.")]
}), section({
isExpanded: isPrint,
header: "7. Quelles données les autres utilisateur·rices peuvent-ils consulter ?",
content: [p("Les autres utilisateur·rices peuvent voir votre surnom, votre avatar et votre score dans les jeux. Si vous générez vous-même des contenus tels que des images ou des listes d'apprentissage, vous pouvez décider de les publier pour d'autres utilisateur·rices."), p("Le(s) enseignant·e(s) de votre groupe et - si votre école utilise le répertoire scolaire - l'administrateur·rice de l'école et les enseignant·es de votre école qui ont été autorisé·es par lui·elle peuvent voir votre nom et vos progrès d'apprentissage et rechercher votre code de connexion pour vous."), p("Lorsque vous vous inscrivez en tant qu'enseignant·e et que vous sélectionnez une école, l'administrateur·rice du répertoire de cette école peut consulter vos coordonnées et votre code de connexion et vous ajouter au répertoire de l'école. Cela vaut également si vous avez donné de fausses informations sur vous-même ou sur votre affiliation à l'école.")]
}), section({
isExpanded: isPrint,
header: "8. Vos droits",
content: [
section({
isExpanded: isPrint,
header: "8.1 Droit à l'information",
content: p("Chaque utilisateur·rice a le droit de recevoir gratuitement des informations sur les données personnelles stockées à son sujet. Veuillez nous envoyer un e-mail à privacy@anton.app en indiquant les informations suivantes pour votre identification : nom d'utilisateur·rice, code de connexion, nom, adresse e-mail, adresse postale et date de naissance.")
}), section({
isExpanded: isPrint,
header: "8.2 Droit de rectification",
content: p("Vous disposez d'un droit de rectification et/ou d'intégration si les données à caractère personnel traitées vous concernant sont incorrectes ou incomplètes.")
}), section({
isExpanded: isPrint,
header: "8.3 Droit de limiter le traitement",
content: [p("Dans les conditions suivantes, vous pouvez demander la limitation du traitement des données à caractère personnel vous concernant :"), p("a. Si vous contestez l'exactitude des données à caractère personnel vous concernant pendant une période de temps qui nous permet de vérifier l'exactitude des données à caractère personnel."), p("b. Si le traitement est illégal et que vous vous opposez à la suppression des données à caractère personnel et que vous demandez à la place la limitation de l'utilisation des données à caractère personnel."), p("c. Nous n'avons plus besoin des données personnelles pour les besoins du traitement, mais vous avez besoin des données personnelles pour faire valoir, exercer ou défendre vos droits en justice."), p("d. Si vous avez formulé une objection au traitement conformément à l'article 21, paragraphe 1, du RGPD et qu'il n'est pas encore clair si les raisons légitimes du responsable du traitement l'emportent sur vos motifs."), p("e. Si le traitement des données à caractère personnel vous concernant a été restreint, ces données ne peuvent être traitées - hormis leur stockage - qu'avec votre consentement ou dans le but de faire valoir, d'exercer ou de défendre des droits légaux ou de protéger les droits d'une autre personne physique ou morale ou pour des raisons d'intérêt public important de l'Union ou d'un État membre. Si la limitation du traitement a été restreinte dans les conditions susmentionnées, nous vous en informerons avant que la limitation ne soit levée.")]
}), section({
isExpanded: isPrint,
header: "8.4 Droit de suppression",
content: [p("Nous supprimerons vos données d'utilisateur·rice sur demande. Pour ce faire, veuillez nous envoyer un e-mail à privacy@anton.app avec les informations suivantes pour vous identifier : nom d'utilisateur·rice, code de connexion, prénom et nom de famille."), p("Pour supprimer les données utilisateur·rice stockées sur vos appareils, vous pouvez désinstaller ANTON ou cliquer sur “Supprimer le compte” dans l'application sous Paramètres et sélectionner le profil utilisateur·rice à supprimer.")]
}), section({
isExpanded: isPrint,
header: "8.5 Droit à la transférabilité des données",
content: [p("Les écoles peuvent engager la suppression des comptes d'utilisateur·rices qu'elles ont créés ou dont elles sont responsables de l'administration après une période de transition de 60 jours. Les utilisateur·rices - et si nécessaire leurs tuteur·rices légaux·ales - doivent être informé·es par l'école. Les utilisateur·rices ont la possibilité de transférer les données stockées dans le compte d'utilisateur·rice vers un nouveau compte et de continuer à les utiliser de manière indépendante dans un délai de 60 jours. Après cette période, les comptes seront automatiquement supprimés."), p("Vous avez le droit de demander une copie de vos données personnelles sous format électronique et le droit de transférer ces données personnelles pour les utiliser dans un autre service. Sur demande, nous vous enverrons un fichier contenant vos données personnelles. Pour ce faire, veuillez nous envoyer un courrier électronique à privacy@anton.app avec les informations suivantes pour votre identification : nom d'utilisateur·rice, code de connexion, prénom et nom, éventuellement nom de jeune fille, adresse électronique, adresse postale et date de naissance.")]
}), section({
isExpanded: isPrint,
header: "8.6 Droit d'opposition",
content: p("Vous avez le droit de vous opposer à tout moment, pour des raisons découlant de votre situation particulière, au traitement des données à caractère personnel vous concernant, qui est effectué sur la base de l'article 6, paragraphe 1, lettre e ou f du RGPD.")
}), section({
isExpanded: isPrint,
header: "8.7 Droit de révoquer la déclaration de consentement en vertu de la loi sur la protection des données",
content: p("Vous avez le droit de révoquer votre déclaration de consentement à la protection des données à tout moment. La révocation de votre consentement n'affecte pas la légalité du traitement qui a eu lieu sur la base de votre consentement jusqu'à la révocation.")
}), section({
isExpanded: isPrint,
header: "8.8 Droit de porter plainte auprès d'une autorité de contrôle",
content: p("Sans préjudice de tout autre recours administratif ou judiciaire, vous avez le droit de porter plainte auprès d'une autorité de contrôle, notamment dans l'État membre dans lequel vous résidez, travaillez ou sur le lieu de l'infraction présumée, si vous estimez que le traitement des données à caractère personnel vous concernant est contraire au RGPD. L'autorité de contrôle saisie de la plainte informe le plaignant de l'état et des résultats de la plainte, y compris de la possibilité d'un recours judiciaire en vertu de l'article 78 du RGPD.")
})
]
}), section({
isExpanded: isPrint,
header: "9. Quelle est la base juridique du traitement ?",
content: [p("Dans la mesure où nous obtenons le consentement de la personne concernée pour le traitement des données à caractère personnel, l'article 6, paragraphe 1, point a), du règlement de base de l'UE sur la protection des données (RGPD) sert de base juridique."), p("Lorsque le traitement de données à caractère personnel est nécessaire à l'exécution d'un contrat auquel la personne concernée est partie, l'article 6, paragraphe 1, point b), du RGPD sert de base juridique. Cela s'applique également aux traitements nécessaires à l'exécution des mesures précontractuelles."), p("Dans la mesure où le traitement des données personnelles est nécessaire pour remplir une obligation légale à laquelle notre entreprise est soumise, l'art. 6 al. 1 lit. c du RGPD sert de base légale."), p("Si le traitement est nécessaire à la sauvegarde d'un intérêt légitime de notre entreprise ou d'un tiers et si les intérêts, les droits et les libertés fondamentaux de la personne concernée ne l'emportent pas sur le premier intérêt, l'art. 6 al. 1 lit. f du RGPD sert de base légale au traitement.")]
}), section({
isExpanded: isPrint,
header: "10. Explication des termes",
content: [p("RGPD : Règlement (UE) 2016/679 du Parlement européen et du Conseil du 27 avril 2016 relatif à la protection des personnes physiques à l'égard du traitement des données à caractère personnel et à la libre circulation de ces données et abrogeant la directive 95/46/CE (règlement de base sur la protection des données)."), p("Données personnelles : Conformément à l'article 4, paragraphe 1, du RGPD, toute information concernant une personne physique identifiée ou identifiable ; est réputée identifiable une personne qui peut être identifiée, directement ou indirectement, notamment par référence à un élément d'identification tel qu'un nom, un numéro d'identification, des données de localisation, un identifiant en ligne ou une ou plusieurs caractéristiques particulières qui expriment les caractéristiques physiques, physiologiques, mentales ou physiques d'une personne, l'identité génétique, psychologique, économique, culturelle ou sociale de cette personne physique.")]
}));
};
})();
pages/static/privacy/div/divPt/div.ls
(function(){
return function(options){
var isPrint, ref$, s, p, section;
isPrint = (ref$ = options != null ? options.isPrint : void 8) != null ? ref$ : false;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div().addClass("privacyDiv").append(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3em"
}) : void 8, isPrint ? Div().css({
fontSize: "1.4em"
}).html(T("privacy")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Geral",
content: [p("ANTON é um aplicativo digital de aprendizagem que pode ser baixado ou utilizado em https://anton.app."), p("O operador e responsável pela proteção de dados é a solocode GmbH, Mehringdamm 61, 10961 Berlin. "), p("Se você tiver alguma dúvida sobre privacidade, pode nos escrever em privacy@anton.app."), p("A proteção de seus dados é particularmente importante para nós."), p("Coletamos o mínimo possível de dados, apagamos automaticamente em caso de inatividade, armazenamos apenas em servidores seguros na Europa e não os compartilhamos com terceiros.")]
}), section({
isExpanded: isPrint,
header: "2. Quais dados a ANTON armazena?",
content: [
section({
isExpanded: isPrint,
header: "2.1. Os dados que você compartilha conosco",
content: [p("Se você é estudante, pediremos seu apelido, o nome da sua escola (opcional) e a disciplina com a qual você gostaria de começar. Quando você seleciona uma escola, a pessoa administradora desta escola poderá adicionar sua conta ao Diretório Escolar e adicionar informações sobre você, como seu nome e turma."), p("Se você é professor(a), pediremos seu primeiro nome, sobrenome, título e, somente se você quiser fornecer, sua escola e seu endereço de e-mail."), p("Se você é professor(a) ou funcionário(a) de uma escola e criar grupos e códigos de acesso para seus alunos e/ou professores, você ou sua escola são responsáveis pela proteção desses dados. Por favor, utilize somente apelidos que não permitam que terceiros identifiquem os alunos ou obter a autorização dos pais."), p("Se você é um(a) professor(a) e foi atrubuído(a) a uma escola, você autoriza que a pessoa administradora desta escola adicione sua conta ao Diretório Escolar, gerencie seu usuário e também outros usuários que tiveram os códigos de acesso gerados por você, adicione dados pessoais, visualize o código de acesso e marque usuários para exclusão."), p("Se você optar por ter suas informações de usuário armazenadas em seu dispositivo, armazenaremos essas informações em seu dispositivo."), p("Pediremos ocasionalmente sua opinião sobre o ANTON e o conteúdo de aprendizado, e como podemos melhorá-lo."), p("Se você tiver 16 anos ou mais, poderá inserir seu endereço de e-mail ou número de telefone nas 'Configurações'. Isso nos permitirá recuperar seu acesso se você perder seus dados de login."), p("Se você entrar em contato conosco via chat de suporte ou por e-mail, essas mensagens, juntamente com a data e hora das mensagens, serão armazenadas para que possamos nos comunicar com você.")]
}), section({
isExpanded: isPrint,
header: "2.2. As informações que recebemos automaticamente através de seu uso de ANTON",
content: [p("Quando você usa o ANTON, ANTON armazena dados sobre seu uso no dispositivo e os sincroniza com nosso servidor quando conectado à Internet. Isto permite utilizar ANTON com sua conta de usuário em múltiplos dispositivos."), p("Isto inclui: páginas de aplicativos que você lançou e seu progresso de aprendizagem, os resultados de seus jogos, sua participação em grupos, conteúdo que você criou, como imagens e listas de aprendizagem, seu tipo de dispositivo, sistema operacional e navegador de Internet e seu endereço IP anônimo."), p("Não armazenamos os últimos três dígitos de seu endereço IP em nosso sistema para que você possa permanecer anônimo.")]
})
]
}), section({
isExpanded: isPrint,
header: "3. Para que são utilizados estes dados?",
content: p("Os dados armazenados serão utilizados exclusivamente para ajudá-lo(a) em caso de problemas com ANTON e para desenvolver ANTON de acordo com as necessidades de nossos usuários.")
}), section({
isExpanded: isPrint,
header: "4. Por quanto tempo os dados serão armazenados?",
content: [p("Seus dados de usuário serão armazenados enquanto você usar ANTON. Se você deixar de usar ANTON e não for membro de um diretório administrado pela escola, apagaremos automaticamente seus dados de usuário 12 meses após seu último login ou após o término de sua adesão ao ANTON Plus."), p("Seus dados pessoais serão excluídos ou bloqueados assim que a finalidade do armazenamento não for mais aplicável. Os dados também podem ser armazenados se isso tiver sido previsto pelo legislador europeu ou nacional em regulamentos, leis ou outras disposições da União às quais o controlador está sujeito. Os dados também serão bloqueados ou apagados se o período de armazenamento prescrito pelas regras acima mencionadas expirar, a menos que haja necessidade de armazenamento adicional dos dados para a conclusão ou execução de um contrato.")]
}), section({
isExpanded: isPrint,
header: "5. ANTON compartilha dados com terceiros?",
content: [p("Não, não compartilhamos seus dados com terceiros a menos que você tenha dado seu consentimento expresso previamente ou que exista uma obrigação legal de transferir os dados."), p("Não utilizamos o Google, Facebook, Amazon ou qualquer outra integração de produtos no ANTON, o que significa que seus dados realmente só ficam em nossos servidores.")]
}), section({
isExpanded: isPrint,
header: "6. Como é garantida a segurança dos dados?",
content: [p("Todos os dados são armazenados exclusivamente em servidores físicos na União Européia e transmitidos de forma criptografada. Os centros de dados atendem aos mais altos padrões de segurança e são certificados de acordo com a ISO/IEC 27001."), p("Ao mesmo tempo, o usuário deve estar ciente de que, devido ao constante surgimento de novos vírus e outros meios de ataque aos sistemas de dados seguros dos serviços de Internet, não é possível garantir uma proteção cem por cento contra ataques."), p("Perseguiremos qualquer ataque descoberto por hackers e similares sob o direito civil e criminal e informaremos o usuário sobre qualquer comprometimento de seus dados.")]
}), section({
isExpanded: isPrint,
header: "7. Que dados os outros usuários podem ver?",
content: [p("Outros usuários podem ver seu apelido, avatar e pontuação do jogo. Se você mesmo gera conteúdo, como imagens ou listas de aprendizagem, você pode decidir se quer torná-lo público para outros usuários."), p("Seu professor de grupo, caso sua escola utilize o Diretório Escolar, o administrador da escola e os professores autorizados por ele em sua escola podem ver seu nome e seu progresso no aprendizado e procurar sua senha para você."), p("Quando você se registrar como professor(a) e selecionar uma escola, a pessoa administradora do diretório dessa escola poderá ver seus dados e senha e adicioná-los ao Diretório Escolar. Isto também se aplica se você tiver dado informações falsas sobre você ou sua filiação à escola.")]
}), section({
isExpanded: isPrint,
header: "8. Seus direitos",
content: [
section({
isExpanded: isPrint,
header: "8.1. Direito à informação",
content: p("Todo usuário tem o direito de receber gratuitamente informações sobre os dados pessoais armazenados a seu respeito. Favor nos enviar um e-mail para privacy@anton.app com as seguintes informações de identificação: apelido, senha, nome, endereço de e-mail, endereço postal e data de nascimento.")
}), section({
isExpanded: isPrint,
header: "8.2. Direito de retificação",
content: p("Você tem o direito de retificar e/ou completar se os dados pessoais processados a seu respeito estiverem imprecisos ou incompletos.")
}), section({
isExpanded: isPrint,
header: "8.3. Direito de restringir o processamento",
content: [p("Você pode solicitar a restrição do processamento dos dados pessoais que lhe dizem respeito sob as seguintes condições:"), p("a. Se você contestar a exatidão dos dados pessoais relativos a você por um período de tempo que nos permita verificar a exatidão dos dados pessoais."), p("b. O processamento é ilegal e você se opõe ao apagamento dos dados pessoais e solicita, em seu lugar, a restrição do uso dos dados pessoais."), p("c. Não precisamos mais dos dados pessoais para o processamento, mas você precisa deles para fazer valer, exercer ou defender seus direitos legais."), p("d. Se você se opôs ao processamento de acordo com § 21(1) DSGVO e ainda não está claro se as razões legítimas do controlador se sobrepõem às suas razões."), p("e. Quando o processamento dos dados pessoais que lhe dizem respeito tiver sido restrito, os dados pessoais somente poderão ser processados, com exceção do seu armazenamento, com seu consentimento ou para o estabelecimento, exercício ou defesa de ações judiciais ou para a proteção dos direitos de outra pessoa física ou jurídica ou por razões de interesse público substancial da União ou de um Estado Membro. Se a restrição ao processamento tiver sido restringida de acordo com as condições acima, nós o informaremos antes que a restrição seja levantada.")]
}), section({
isExpanded: isPrint,
header: "8.4. Direito de exclusão",
content: [p("Se você desejar, podemos apagar seus dados de usuário. Favor nos enviar um e-mail para privacy@anton.app com as seguintes informações para identificá-lo: nome de usuário, senha, primeiro nome e sobrenome."), p("Para excluir os dados de usuário armazenados em seus dispositivos, você pode desinstalar o ANTON ou clicar em log out nas configurações do aplicativo e selecionar o perfil de usuário que deseja excluir.")]
}), section({
isExpanded: isPrint,
header: "8.5. Direito à portabilidade dos dados",
content: [p("As escolas podem marcar as contas de usuários que criaram ou cuja administração é de sua responsabilidade de apagar após um período de transição de 60 dias. Os usuários, e se necessário seus tutores legais, devem ser informados pela escola. Os usuários terão a oportunidade de transferir os dados armazenados na conta do usuário para uma nova conta dentro de 60 dias e de continuar a usá-la independentemente. Após este período, as contas de usuário serão automaticamente apagadas."), p("Você tem o direito de solicitar uma cópia de seus dados pessoais em formato eletrônico e o direito de transferir esses dados pessoais para uso ao serviço de outra pessoa. Mediante solicitação, nós lhe enviaremos um arquivo contendo seus dados pessoais. Para isso, favor nos enviar um e-mail para privacy@anton.app com as seguintes informações de identificação: nome de usuário, senha, primeiro e último nome, possivelmente nome de solteiro(a), endereço de e-mail, endereço postal e data de nascimento.")]
}), section({
isExpanded: isPrint,
header: "8.6. Direito de objeção",
content: p("Você tem o direito de se opor a qualquer momento, por motivos relacionados à sua situação particular, ao processamento de dados pessoais que lhe digam respeito que seja realizado com base na Seção 6(1)(e) ou (f) do DSGVO.")
}), section({
isExpanded: isPrint,
header: "8.7. Direito de revogar a declaração de consentimento nos termos da lei de proteção de dados.",
content: p("Você tem o direito de revogar seu consentimento de proteção de dados a qualquer momento. A revogação do consentimento não afeta a legalidade do processamento realizado com base no consentimento até a revogação.")
}), section({
isExpanded: isPrint,
header: "8.8. Direito de reclamar a uma autoridade de supervisão.",
content: p("Sem prejuízo de qualquer outro recurso administrativo ou judicial, você tem o direito de apresentar queixa a uma autoridade de supervisão, em particular no Estado-Membro de sua residência, local de trabalho ou local da suposta infração, se considerar que o processamento de dados pessoais que lhe dizem respeito viola o GDPR. A autoridade de supervisão à qual a reclamação foi apresentada informará o reclamante sobre a situação e o resultado da reclamação, incluindo a possibilidade de um recurso judicial nos termos do artigo 78 do GDPR.")
})
]
}), section({
isExpanded: isPrint,
header: "9. Qual é a base legal para o processamento?",
content: [p("Na medida em que obtivermos o consentimento da pessoa interessada para operações de processamento de dados pessoais, o Artigo 6(1)(a) do Regulamento Geral de Proteção de Dados da UE (GDPR) serve como base legal."), p("No processamento de dados pessoais necessários para a execução de um contrato do qual o envolvido é parte, a Seção 6 (1) lit. b DSGVO serve como base legal. Isto também se aplica às operações de processamento necessárias para a execução de medidas pré-contratuais."), p("Na medida em que o processamento de dados pessoais é necessário para o cumprimento de uma obrigação legal à qual nossa empresa está sujeita, § 6 (1) lit. c DSGVO serve como base legal."), p("Se o processamento for necessário para proteger um interesse legítimo de nossa empresa ou de terceiros e os interesses, direitos e liberdades fundamentais do envolvido não se sobrepuserem ao primeiro interesse mencionado, a Seção 6(f)(1) da GDPR serve como base legal para o processamento.")]
}), section({
isExpanded: isPrint,
header: "10. Explicação dos termos",
content: [p("PIBR da UE: Regulamento (UE) 2016/679 do Parlamento Europeu e do Conselho de 27 de abril de 2016 relativo à proteção das pessoas físicas no que diz respeito ao processamento de dados pessoais e à livre circulação desses dados, e que revoga a Diretiva 95/46/CE (Regulamento Geral de Proteção de Dados)."), p("Dados pessoais: De acordo com o Artigo 4(1) do PIBR da UE, qualquer informação relativa a uma pessoa natural identificada ou identificável; uma pessoa natural identificável é aquela que pode ser identificada, direta ou indiretamente, em particular por referência a um identificador, como um nome, um número de identificação, dados de localização, um identificador on-line, ou a um ou mais fatores específicos da identidade física, fisiológica, genética, mental, econômica, cultural ou social dessa pessoa natural.")]
}));
};
})();
pages/static/privacy/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
bottom: function(){
if (window.log != null) {
return inc("acceptPrivacyDiv/div")();
}
},
start: function(){
return page.css({
minHeight: "var(--centerHeight)"
}).html(Div({
margin: "0em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.5em",
textAlign: "left"
}).html(inc("div/div")()));
}
};
};
})();
pages/static/schoolLicense/_bottombar/bottombar.ls
(function(){
return function(page){
var startFunnel, button;
startFunnel = function(){
return inc("startSchoolLicenseFunnel/start")(button);
};
return Div({
display: "flex",
flexWrap: "wrap",
padding: "0.4em 0"
}).html(button = Button({
label: T("onlineOrder")
}).css({
margin: "0.5em",
minWidth: "2.5em",
textAlign: "center"
}).tap(function(){
return inc("/lib/gui/parentalGate/parentalGate")(startFunnel, {
omitParentMention: true
});
}), inc("brochureButtons/buttons")());
};
})();
pages/static/schoolLicense/_bottombar/brochureButtons/button/button.ls
(function(){
return function(p){
var openPdf, tap;
openPdf = function(){
if (typeof log != 'undefined' && log !== null) {
log.log({
event: "debugSchoolLicenceDownloadOrderPdf",
id: p.id
});
}
return window.open(p.file, "_system");
};
tap = function(){
return inc("/lib/gui/parentalGate/parentalGate")(openPdf, {
omitParentMention: true
});
};
return Button({
label: p.label,
labelAllowWrap: true
}).css({
margin: "0.5em",
minWidth: "2.5em",
textAlign: "center"
}).tap(tap);
};
})();
pages/static/schoolLicense/_bottombar/brochureButtons/buttons.ls
(function(){
return function(){
var b;
b = inc("button/button");
if (engine.guiLanguage === "de") {
return [
Div({
flex: "1 0 100%",
margin: "0.3em 0",
textAlign: "center"
}).html(T("infoBrochure") + ":"), b({
id: "DE",
label: "DE",
file: "https://files.anton.app/files/ANTON-Schullizenz-Broschuere-DE.pdf"
}), b({
id: "AT",
label: "AT",
file: "https://files.anton.app/files/ANTON-Schullizenz-Broschuere-DE_AT.pdf"
}), b({
id: "CH",
label: "CH",
file: "https://files.anton.app/files/ANTON-Schullizenz-Broschuere-DE_CH.pdf"
}), b({
id: "Other",
label: T("other"),
file: "https://files.anton.app/files/ANTON-Schullizenz-Broschuere-DE.pdf"
})
];
} else if (engine.guiLanguage === "en_gb") {
return b({
id: "info",
label: T("infoBrochure"),
file: "https://files.anton.app/files/ANTON-school-licence-brochure-EN_GB.pdf"
});
} else if (engine.guiLanguage === "fr") {
return b({
id: "info",
label: T("infoBrochure"),
file: "https://files.anton.app/files/ANTON-licence-scolaire-brochure-FR.pdf"
});
} else if (engine.guiLanguage === "es") {
return b({
id: "info",
label: T("infoBrochure"),
file: "https://files.anton.app/files/ANTON-licencia-escolar-brochure-ES_MX.pdf"
});
} else if (engine.guiLanguage === "pt") {
return b({
id: "info",
label: T("infoBrochure"),
file: "https://files.anton.app/files/ANTON-licenca-escolar-brochure-PT_BR.pdf"
});
} else {
return b({
id: "info",
label: T("infoBrochure"),
file: "https://files.anton.app/files/ANTON-school-license-brochure-EN_US.pdf"
});
}
};
})();
pages/static/schoolLicense/_bottombar/startSchoolLicenseFunnel/start.ls
(function(){
return function(button){
var start;
start = function(){
var spinner;
spinner = inc("/lib/gui/spinnerDivOverlay/overlay")(button);
return inc("/lib/util/loadProjects/load")({
projectDescriptions: [{
project: "app01-school-license-funnel"
}],
timeout: "15,10",
logResults: true,
onDone: function(){
spinner.stop();
return inc("/../app01-school-license-funnel/start")();
},
onProjectMissingError: function(){
spinner.stop();
return inc("/lib/offline/offlinePopup/popup")();
}
});
};
if (!inc("/lib/util/isDesktop/isDesktop")()) {
return inc("/lib/gui/confirmPopup/popup")({
label: T("mobilePrintInfo"),
yesLabel: T("continueButton"),
noLabel: T("cancelButton"),
onConfirm: start
});
} else {
return start();
}
};
})();
pages/static/schoolLicense/_t.ls
(function(){
return {
antonLicense: {
de: "ANTON-Schullizenz",
en_gb: "ANTON School Licence",
en: "ANTON School License",
fr: "Licence scolaire ANTON",
es: "Licencia Escolar ANTON",
pt: "Licença Escolar ANTON"
},
license: {
de: "Schullizenz",
en_gb: "School Licence",
en: "School License",
fr: "Licence scolaire",
es: "Licencia Escolar",
pt: "Licença Escolar"
},
info: {
de: "Viele zusätzliche Funktionen für Lehrkräfte, Schüler/innen und Verwaltung",
en_gb: "The ANTON School Licence gives your school access to many new features",
en: "The ANTON School License gives your school access to many new features",
fr: "La licence scolaire ANTON permet à ton école d'avoir accès à de nombreuses nouvelles fonctions.",
es: "La Licencia Escolar ANTON le da acceso a tu escuela a muchas funciones adicionales.",
pt: "A Licença Escolar ANTON dá à sua escola acesso a muitas funções adicionais."
},
f1: {
de: "Schulverwaltung: ANTON einfach für die ganze Schule einrichten",
en: "School admin: set up ANTON for the whole school easily",
fr: "Administration de l'école : pour mettre en place ANTON facilement pour toute l'école.",
es: "Administración de la escuela: activa ANTON para toda la comunidad educativa sin complicaciones.",
pt: "Administração da escola: configure o ANTON para toda a comunidade escolar, sem complicações."
},
f2: {
de: "Schulverzeichnis: erleichtert den Einstieg für alle Lehrkräfte",
en: "School directory: find all users and add them to groups easily",
fr: "Répertoire scolaire : pour constituer rapidement des groupes d'élèves.",
es: "Directorio escolar: encuentra fácilmente a los y las usuarias para formar grupos.",
pt: "Diretório Escolar: encontre usuários facilmente para formar grupos."
},
f3: {
de: "Pinnen: für einzelne Schüler/innen und Untergruppen",
en_gb: "Pins: assign exercises to individual pupils and subgroups",
en: "Pins: assign exercises to individual students and subgroups",
fr: "Épingles : pour attribuer des exercices à des élèves en particulier ou à des sous-groupes.",
es: "Asignar: asigna contenidos a grupos o estudiantes en particular.",
pt: "Marcação de exercícios: para grupos, subgrupos e alunos individualmente."
},
f4: {
de: "Report: Lernerfolg aller Schüler/innen auf einen Blick",
en_gb: "Reports: detailed reports on the progress of all pupils",
en: "Reports: detailed reports on the progress of all students",
fr: "Rapports : pour suivre de près l'apprentissage de chaque élève.",
es: "Progreso: informe detallado del aprendizaje de cada estudiante.",
pt: "Progresso de aprendizagem: informação detalhada do aprendizado de todos os alunos."
},
f5: {
de: "Schullizenz-Plus: ANTON-Plus für alle Schulmitglieder",
en_gb: "School Licence Plus: ANTON Plus for all pupils and teachers at your school",
en: "ANTON Plus for all students and teachers at your school",
fr: "Licence scolaire Plus : ANTON-Plus pour tous les membres de l'école.",
es: "Licencia Escolar Plus: ANTON-Plus para todos los miembros de la escuela.",
pt: "ANTON-Plus para todos os professores e alunos da escola."
},
f6: {
de: "ANTON-Urkunden: Erstellen, herunterladen, drucken und teilen.",
en_gb: "ANTON certificates: create, download, print and share",
en: "ANTON certificates: Create, download, print and share.",
fr: "Certificats ANTON : à créer, télécharger, imprimer et partager.",
es: "Certificados ANTON: diseña, descarga, comparte e imprime certificados para los estudiantes.",
pt: "Certificados ANTON: crie, baixe, imprima e compartilhe."
},
price: {
de: "Preis: ab 250 € inkl. MwSt. pro Jahr (siehe Info-Broschüre)",
en_gb: "Price: from £250 incl. VAT per year (see info brochure)",
en: "Price per year for the entire school: up to 500 students = 500 USD over 500 students = 1000 USD ",
fr: "Prix : à partir de 250 € TTC par an (voir notre brochure).",
es: "Precio: desde 250 € / US$ 250 al año IVA/VAT incluido (ver folleto informativo).",
pt: "Preço por ano para toda a escola: até 500 alunos = R$2.000 mais de 500 alunos = R$4.000 (consulte o Folheto informativo)"
},
orderPdf: {
de: "Infos & Bestellformular herunterladen:",
en: "Download further information and the order form:",
fr: "Télécharger les informations et le formulaire de commande :",
es: "Descargar información y formulario de pedido:",
pt: "Baixar informações e formulário de pedido:"
},
infoBrochure: {
de: "Info-Broschüre (PDF)",
en: "Info brochure (PDF)",
fr: "Brochure (PDF)",
es: "Folleto informativo (PDF)",
pt: "Folheto informativo (PDF)"
},
onlineOrder: {
de: "Online bestellen",
en: "Order online",
fr: "Commander en ligne",
es: "Pedido en línea",
pt: "Pedido on-line"
},
activationInfo: {
de: "Bestellungen werden im Moment innerhalb von 2 bis 5 Tagen (auch am Wochenende) bearbeitet. Wenn deine Schule freigeschaltet ist, erhältst du von uns eine E-Mail mit einer Startanleitung. Eine Eingangsbestätigung deiner Bestellung können wir dir derzeit leider nicht zukommen lassen.",
en: "At the moment, orders will be processed within 2 to 5 days (including weekends). When your school is activated, you will receive an email from us with an instruction manual. Unfortunately, we can't provide a confirmation of receipt at the moment.",
fr: "En ce moment, il nous faut entre 2 et 5 jours (week-ends inclus) pour traiter les commandes. Quand ton école sera activée, tu recevras de notre part un e-mail contenant un guide d'utilisation. Nous ne sommes malheureusement pas en mesure de fournir de reçu pour le moment.",
es: "Los pedidos son procesados, por el momento, en un periodo de 2 a 5 días (incluyendo el fin de semana). Cuando tu escuela sea activada, recibirás un correo electrónico con el manual de instrucciones. Desafortunadamente, por el momento, no nos es posible efectuar una confirmación del pedido.",
pt: "No momento, os pedidos são processados num período de 2 a 5 dias (incluindo finais de semana). Quando sua escola for ativada, você receberá um e-mail com um manual de instruções para começar. Infelizmente, no momento, não podemos enviar uma confirmação de recebimento do seu pedido."
},
other: {
de: "Anderes Land",
en: "Other",
fr: "Autre",
es: "Otro",
pt: "Outro"
},
licenseUrl: {
de: "schullizenz",
en_gb: "school-licence",
en: "school-license",
fr: "licence-scolaire",
es: "licencia-escolar",
pt: "licenca-escolar"
},
mobilePrintInfo: {
de: "Am Ende der Online-Bestellung wirst du gebeten, das fertig ausgefüllte Formular zu drucken.
Hast du mit diesem Gerät Verbindung zu einem Drucker?
Falls nicht, nutze bitte stattdessen ein anderes Gerät.",
en: "At the end of your online order, you will be asked to print the completed form.
Is your device connected to a printer?
If not, please use another device instead.",
fr: "À la fin de ta commande en ligne, tu devras imprimer le formulaire complété.
Ton appareil est-il connecté à une imprimante ?
Si ce n'est pas le cas, merci d'utiliser un autre appareil.",
es: "Al finalizar tu pedido en línea, se te pedirá que imprimas el formulario lleno.
¿Estás conectado a una impresora con este dispositivo?
De no ser así, favor de utilizar otro dispositivo.",
pt: "Ao finalizar o seu pedido online, será pedido que você imprima o formulário preenchido.
Este dispositivo está conectado a alguma impressora?
Se não estiver, por favor, utilize um outro dispositivo."
},
continueButton: {
de: "Fortfahren",
en: "Continue",
fr: "Continuer",
es: "Continuar",
pt: "Continuar"
},
cancelButton: {
de: "Abbrechen",
en: "Cancel",
fr: "Annuler",
es: "Interrumpir",
pt: "Cancelar"
}
};
})();
pages/static/schoolLicense/_topbar/title/title.ls
(function(){
return function(){
return Div().css({
display: "flex"
}).append(SvgIcon({
svg: path("/lib/svg/shape/school.svg"),
color: Color.grey[700]
}).css({
marginRight: "0.4em",
marginBottom: "0.25em"
}), inc("/lib/seo/element/h1/h1")(T("antonLicense")));
};
})();
pages/static/schoolLicense/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, inc("title/title")());
};
})();
pages/static/schoolLicense/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("licenseUrl"),
title: T("license"),
metaDescription: T("info")
};
};
})();
pages/static/schoolLicense/feature/feature.ls
(function(){
return function(o){
var ref$;
return Div().css({
display: "flex",
alignItems: "flex-start",
marginBottom: "1.5em"
}).append(SvgIcon({
svg: o.icon,
color: (ref$ = o.iconColor) != null
? ref$
: Color.grey[650],
size: "1.3em"
}).css({
marginRight: "0.7em"
}), Div().css({
flex: "1 1 auto",
textAlign: "left"
}).html(o.text));
};
})();
pages/static/schoolLicense/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
bottom: function(){
return inc("_bottombar/bottombar")(page);
},
start: function(){
var f, b;
f = inc("feature/feature");
if (typeof log != 'undefined' && log !== null) {
log.log({
event: "debugSchoolLicenceShowPage"
});
}
return page.css({
margin: "1em auto",
maxWidth: "90%",
width: "30em"
}).append(inc("/lib/seo/element/h2/h2")().css({
textAlign: "center",
fontWeight: "bold",
lineHeight: "1.5em",
borderBottom: b = "1px solid " + Color.grey[200],
marginBottom: "1.5em",
paddingBottom: "0.8em"
}).html(T("info")), f({
icon: path("/lib/svg/shape/school.svg"),
text: T("f1")
}), f({
icon: path("/lib/svg/shape/user-admin.svg"),
text: T("f2")
}), f({
icon: path("/lib/svg/shape/pin.svg"),
text: T("f3")
}), f({
icon: path("/lib/svg/shape/stats.svg"),
text: T("f4")
}), f({
icon: path("/lib/svg/shape/certificate.svg"),
text: T("f6")
}), f({
icon: path("/lib/svg/illustration/anton-plus.svg"),
text: T("f5"),
iconColor: ""
}), Div({
marginTop: "1em",
paddingTop: "1em",
marginBottom: "1em",
lineHeight: "1.5em",
borderTop: b
}).html(T("price")), Div({
margin: "0 auto",
textAlign: "justify",
hyphens: "auto",
padding: "0.7em",
borderRadius: "0.7em",
backgroundColor: Color.grey[75],
border: "1px solid " + Color.grey[150],
marginTop: "2em"
}).html(T("activationInfo")));
}
};
};
})();
pages/static/security/_t.ls
(function(){
return {
securityUrl: "sicherheit",
security: "Status und Sicherheit"
};
})();
pages/static/security/_topbar/title/title.ls
(function(){
return function(){
return Div().css({
display: "flex"
}).append(SvgIcon({
svg: path("/lib/svg/shape/security.svg"),
color: Color.grey[700]
}).css({
marginRight: "0.4em"
}), inc("/lib/seo/element/h1/h1")(T("security")));
};
})();
pages/static/security/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../_shared/topbarDeeplink/topbar")(page, inc("title/title")());
};
})();
pages/static/security/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("securityUrl"),
title: T("security"),
metaDescription: T("security")
};
};
})();
pages/static/security/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
var h, p;
h = function(t){
return Div({
padding: "1em 0 0.3em",
fontWeight: "bold",
lineHeight: "1.5em",
userSelect: "text"
}).html(t);
};
p = function(t){
return Div({
padding: "0.5em 0",
lineHeight: "1.5em",
userSelect: "text"
}).html(t);
};
return page.css({
margin: "1em auto",
maxWidth: "90%",
width: "30em",
textAlign: "left"
}).append(h("Informationen zu geschlossener Sicherheitslücke bei ANTON"), p("Am 03. März 2021 um 18:01 erhielten wir einen Hinweis auf eine Sicherheitslücke bei Programmierschnittstellen unserer App ANTON. Die Sicherheitslücke wurde von uns am 03. März 2021 um 20:41 geschlossen. Das wurde vom Hinweisgeber bestätigt."), p("Wir haben keinerlei Anzeichen dafür, dass die Sicherheitslücke vor der Meldung und ihrer Beseitigung ausgenutzt wurde. Nach derzeitigem Kenntnisstand ist kein unberechtigter Zugriff auf personenbezogene Daten erfolgt."), p("Da diese aber mindestens durch den Hinweisgeber abgerufen werden konnten, handelt es sich um einen meldepflichtigen Vorfall. Wir haben den Vorfall bei der zuständigen Datenschutzbehörde gemeldet."), p("Wir untersuchen, ob es in der Vergangenheit Versuche gegeben hat, die Sicherheitslücke auszunutzen. Sollten wir Anzeichen für einen Missbrauch finden, werden wir betroffene Schulen, Nutzer/innen und die Datenschutzbeauftragten umgehend informieren."), p("ANTON ist weiterhin für alle Nutzer/innen sicher und uneingeschränkt nutzbar."), h("Welche Sicherheitslücke hat bestanden und wie wurde diese durch das ANTON-Team beseitigt?"), p("Es wäre einem potenziellen Angreifer möglich gewesen, durch Modifikation der Anfragen an Programmierschnittstellen den Authentifizierungsmechanismus zu umgehen und unautorisiert einzelne Datensätze abzurufen."), p("Die Ausnutzung der Lücke hätte nicht einfach per menschlicher Interaktion mit der App erfolgen können, weder gezielt noch zufällig. Es hätte einer geschickten Vorgehensweise mithilfe von Programmiercode bedurft, für die man Kenntnisse von Webtechnologie, gute analytische Fähigkeiten sowie Programmierkenntnisse benötigt."), p("Es wäre theoretisch möglich gewesen, für bestimmte Nutzerkonten den Spitznamen, die Schulzugehörigkeit und die Gruppen- bzw. Klassenzugehörigkeit einzusehen. Sofern angegeben, hätte man auch Vor- und Nachnamen einsehen können."), p("In Einzelfällen wäre es möglich gewesen, die Daten von vorbereiteten, aber noch nicht aktiven Gruppenmitgliedern durch manuell modifizierte Anfragen an die Programmierschnittstellen abzufragen. Es handelte sich hierbei um vorbereite Mitglieder, die sich aber bisher noch nie als ANTON-Nutzer angemeldet haben und nicht Mitglied einer Schullizenz-Schule sind."), p("In dem sehr seltenen Fall von Gruppen mit mind. 2 Lehrkräften, bei denen die zweite Lehrkraft noch kein/e aktive/r ANTON-Nutzer/in war und der Angreifer Mitglied der Gruppe selbst sein muss, konnte die vorbereitete Lehrkraft unberechtigt aktiviert werden. Damit konnten die erweiterten Funktionen dieses Lehrkraft-Nutzers ausgenutzt werden, um etwa den Lernfortschritt einzelner Schüler/innen einzusehen, Aufgaben zu pinnen und eine Gruppennachricht als Text in die Gruppe einzustellen."), h("Was bedeuten die potenziellen Sicherheitslücken für die Nutzer/innen?"), p("Wir gehen davon aus, dass die Sicherheitslücke nur vom Hinweisgeber zu Testzwecken ausgenutzt wurde und keine Nutzer/innen von einem Missbrauch betroffen sind."), p("Nutzer/innen und Schulen müssen nichts unternehmen. Es ist kein Update der App und keine Neuinstallation notwendig. Bei Fragen schreiben Sie uns gerne an support@anton.app"), h("Wie stellt das ANTON-Team den Schutz der Daten von Nutzer/innen sicher?"), p("Der Datenschutz und die Sicherheit von Nutzerdaten ist uns ein wichtiges Anliegen. Wir verwenden daher u.a. kein Performance-Marketing, keine Trackinganbieter und ermöglichen die Nutzung von ANTON ohne die Angabe persönlicher Daten. Das Datenschutzkonzept von ANTON wurde in Zusammenarbeit mit schulischen Datenschutzbeauftragten entwickelt."), p("Nutzer/innen können ANTON verwenden, ohne ihren Namen, ihre E-Mail-Adresse oder ihre Telefonnummer anzugeben. Nutzer/innen und Schulen können selbst entscheiden, ob sie weitere Daten anlegen und haben immer die Möglichkeit, vollständig mit Pseudonymen zu arbeiten."), p("Zur Sicherstellung der IT-Sicherheit und frühzeitigen Erkennung möglicher Schwachstellen arbeiten wir eng mit externen IT-Sicherheitsexperten zusammen und führen regelmäßige Tests unserer Systeme durch."), p("Bei komplexen IT-Systemen lassen sich Schwachstellen leider nie zu 100% ausschließen. Deshalb haben wir eigens hierfür entwickelte Technologie und klare Prozesse, mit denen wir mögliche Fehler und Probleme – wie auch in diesem Fall – sehr schnell erkennen und beheben können."), p("Wir entwickeln die Lerninhalte, Funktionen und Technologie von ANTON ständig mit viel Einsatz weiter und bemühen uns, ANTON noch zuverlässiger für alle Schüler/innen und Lehrer/innen zu machen."));
}
};
};
})();
pages/static/start/berlin/_t.ls
(function(){
return {
title: "Berlin",
pageUrl: "start/berlin"
};
})();
pages/static/start/berlin/_topbar/title/title.ls
(function(){
return function(){
return Div({
display: "flex"
}).append(inc("/lib/seo/element/h1/h1")(T("title")));
};
})();
pages/static/start/berlin/_topbar/topbar.ls
(function(){
return function(page){
return inc("../../../_shared/topbarDeeplink/topbar")(page, inc("title/title")());
};
})();
pages/static/start/berlin/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("pageUrl"),
title: T("title"),
metaDescription: T("title"),
noIndex: true
};
};
})();
pages/static/start/berlin/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page).hide();
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
var onError;
if (!engine.isDebug) {
startPage({
path: path("/pages/start/welcome/page"),
history: 0
});
return;
}
onError = function(error){
page.topbar.show();
if (error === "offline") {
return inc("/lib/offline/offlinePopup/popup")();
} else {
return inc("/lib/gui/errorPopup/popup")();
}
};
return inc("/lib/util/pllsCall/call")({
path: path("/../server-apis-db2/apis/sso/openId/berlin/getAuthorizationUrl/query"),
params: {
environment: "test"
},
onCompleted: function(result){
if (result.status === "ok") {
return location.href = result.url;
} else {
debug("non-ok received", result);
return onError(result);
}
},
onError: function(error){
debug(error);
return onError(error);
},
onOffline: function(){
return onError("offline");
}
});
}
};
};
})();
pages/static/template/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: inc("/lib/util/browser/getPageUrl/get")(),
title: "Anton.app",
metaDescription: "",
noIndex: true,
responseStatusCode: 200,
pageReady: false
};
};
})();
pages/static/template/page.ls
(function(){
return function(page){
return {
top: function(){
return undefined;
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
return inc("/lib/util/loadProject/load")("app01-template-pages", function(){
return inc("/../app01-template-pages/start")();
});
}
};
};
})();
pages/static/terms/_shared/openUrl/open.ls
(function(){
return function(url){
return inc("/lib/gui/parentalGate/parentalGate")(function(){
return window.open(url, "_system");
});
};
})();
pages/static/terms/_t.ls
(function(){
return {
termsOfService: {
de: "Allgemeine Nutzungs- und Geschäftsbedingungen",
en: "General terms and conditions of use",
fr: "Conditions générales d'utilisation",
es: "Condiciones generales de uso",
pt: "Condições gerais de uso"
},
termsUrl: {
de: "agb",
en: "terms",
fr: "cgu",
es: "cgu",
pt: "cgu"
}
};
})();
pages/static/terms/_topbar/topbar.ls
(function(){
return function(page){
var onPrint;
onPrint = function(){
var printPage;
printPage = inc("../div/div")({
isExpanded: true,
showLogo: true
}).css({
fontFamily: "sans-serif"
});
return inc("/lib/util/print/print")({
div: printPage,
title: T("termsOfService")
});
};
return inc("../../_shared/topbarDeeplink/topbar")(page, T("termsOfService"), onPrint);
};
})();
pages/static/terms/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("termsUrl"),
title: T("termsOfService"),
metaDescription: T("termsOfService"),
noIndex: true
};
};
})();
pages/static/terms/div/div.ls
(function(){
return function(isPrint){
return twitch({
de: inc("divDe/div")(isPrint),
en: inc("divEn/div")(isPrint),
en_gb: inc("divEnGb/div")(isPrint),
fr: inc("divFr/div")(isPrint),
es: inc("divEs/div")(isPrint),
pt: inc("divPt/div")(isPrint)
});
};
})();
pages/static/terms/div/divDe/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div().css({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Allgemeines",
content: [p("Willkommen bei ANTON - schön, dass du dabei bist! ANTON ist eine Lern-App für Schüler, Lehrer und Eltern. ANTON wird entwickelt und bereitgestellt von der solocode GmbH, Mehringdamm 61, 10961 Berlin (im Folgenden: der Anbieter)."), p("Du kannst ANTON unter www.anton.app und auch über die mobilen Apps für Android, iOS und Amazon Fire nutzen."), p("Diese allgemeinen Nutzungs- und Geschäftsbedingungen (im Folgenden: “AGB”) stellen den abschließenden rechtlichen Rahmen für alle ANTON – Dienste, die für Verbraucher oder Schulen bestimmt sind (im Folgenden: “der Dienst”), dar. Mündliche Nebenabreden oder Vertragsänderungen sind nur wirksam, wenn sie vom Anbieter schriftlich oder per E-Mail bestätigt werden."), p("Diese AGB sind auf das kostenlose Angebot und auf die kostenpflichtigen Zusatzangebote gleichermaßen anwendbar.")]
}), section({
isExpanded: isPrint,
header: "2. Angebotene Dienste, Geltungsbereich",
content: [p("2.1. ANTON ist ein Online-Lernsystem, mit dem Schüler auf einfache, moderne und effiziente Art für die Schule lernen können."), p("2.2. Lehrer und Eltern können ANTON verwenden, um Schüler beim Lernen zu begleiten und zu unterstützen."), p("2.3. Schulen können ANTON im Rahmen des Unterrichts, als Hausaufgabe oder als zusätzliches Lern-Angebot einsetzen."), p("2.4. Viele Funktionen stehen dem Nutzer kostenlos zur Verfügung. Kostenpflichtige Dienste sind eindeutig als solche ausgewiesen und können gegen Zahlung der jeweils vorgesehenen Entgelte oder Preise in Anspruch genommen werden."), p("2.5. Der Anbieter behält sich vor, Teile seines Angebotes nur für Lehrer bzw. andere mit pädagogischen Aufgaben betraute Nutzer zugänglich zu machen."), p("2.6. Der Nutzer ist verpflichtet, bei seiner Online-Anmeldung keine nicht-wahrheitsgemäßen Angaben, insbesondere zu seiner Rolle als Schüler oder Lehrer und der Schulzugehörigkeit zu machen. Gibt der Nutzer falsche Daten an, so kann der Anbieter, soweit ein Vertrag zustande gekommen ist, vom Vertrag zurückzutreten. Der Rücktritt wird - sofern möglich - schriftlich erklärt. Die Schriftform ist auch durch Absenden einer E-Mail gewahrt. Bei Angabe falscher Daten kann ein Schul-Administrator das Recht erhalten, diesen unter falschen Angaben angelegten Nutzeraccount zu verwalten, den Anmelde-Code einzusehen und den Nutzer zur Löschung vorzumerken."), p("2.7. Zusätzlich zum kostenlosen Angebot können Verbraucher auch ANTON-Plus, einen kostenpflichtigen Dienst mit Zusatzfunktionen, freischalten."), p("2.8. Schulen können eine ANTON-Schullizenz abschließen und damit weitere Funktionen, die den Einsatz in der Schule verbessern, freischalten. Schulen können zusätzlich zur ANTON-Schullizenz auch ANTON-Plus für alle Schüler und Lehrer der Schule freischalten.")]
}), section({
isExpanded: isPrint,
header: "3. Kostenloses Angebot und ANTON-Plus",
content: [p("3.1. Der Nutzer kann bei ANTON kostenlos ein Nutzerkonto anlegen."), p("3.2. Nach Erstellung eines Nutzerkontos ist die Nutzung der kostenlosen Basisfunktionen verfügbar („Basisvertrag“). Der Nutzer hat jedoch keinen rechtlichen Anspruch auf die kostenlose Verfügbarkeit solcher Inhalte und Funktionen."), p("3.3. Basisverträge können jederzeit mit einer Frist von 14 Tagen ordentlich gekündigt werden."), p("3.4. Der Anbieter bietet Verbrauchern darüber hinaus den kostenpflichtigen Dienst ANTON-Plus („Premiumvertrag“) nach verschiedenen Preismodellen an. Sofern Preise bei ANTON angegeben sind, verstehen sich diese einschließlich der jeweils gültigen gesetzlichen Umsatzsteuer."), p("3.5. Durch Buchung eines Premiumvertrags erhält der Nutzer Zugriff auf zusätzliche Funktionen im Rahmen des jeweiligen Premiumvertrages für die gesamte Vertragslaufzeit."), p("3.6. Abrechnungsart, Preis und Laufzeit sind jeweils im Rahmen des Bestellprozesses aufgeführt und werden vor Abschluss der Bestellung vollständig zusammengefasst. Der Premiumvertrag kommt mit Klick auf den Button „kaufen“ (o.ä.) zu Stande."), p("3.7. Premiumverträge werden für die jeweils vom Nutzer gewählte feste Laufzeit geschlossen. Preise für die gesamte Laufzeit sind bei Vertragsschluss fällig."), p("3.8. Der Anbieter wird mit dem Nutzer vorrangig über den in der App befindlichen Support-Chat oder – falls eine Email-Adresse angegeben wurde – auch über diese kommunizieren, und kann ihm insbesondere vertragsrelevante Willenserklärungen (z.B. Kündigungen) auf diesem Wege mitteilen. Der Nutzer kann dem Anbieter jederzeit eine aktuelle E-Mail Adresse mitteilen.")]
}), section({
isExpanded: isPrint,
header: "4. Laufzeit, Verlängerung und Kündigung der Verträge für Verbraucher",
content: [p("4.1. Solange kein kostenpflichtiger Premiumvertrag abgeschlossen wurde, kann der Nutzer den Basisvertrag jederzeit gemäß Ziffer 3.3 kündigen."), p("4.2. Sofern nicht anders bei Vertragsschluss angegeben, sind die ANTON-Plus-Premiumverträge fortlaufende Abonnements, die sich automatisch wiederkehrend um die jeweils vertraglich vereinbarte Laufzeit verlängern, sofern der Nutzer oder der Anbieter den jeweiligen Premiumvertrag nicht bis 24 Stunden vor Ablauf der jeweiligen Laufzeit kündigt. Entgelte für Verlängerungslaufzeiten werden ebenfalls vorschüssig in Rechnung gestellt. Alle Verträge sind zum Ablauf der jeweiligen Laufzeit kündbar."), p("4.3. Premiumverträge, die durch „Einmal-Zahlung“ erworben werden, sind ausdrücklich als befristet oder unbefristet ausgewiesen. Sind sie befristet, so endet der Vertrag mit Ablauf der Laufzeit, ohne dass es einer Kündigung bedarf. Sind sie unbefristet, gelten für sie die folgenden Absätze entsprechend."), p("4.4. Die Kündigung bei Premiumverträgen, die über den Apple App Store, den Google Play Store oder über Paypal erworben wurden, erfolgt nach den jeweils gültigen Bedingungen des jeweiligen Dienstleisters. Die genaue Vorgehensweise ist auf der Webseite des Apple App Stores, des Google Play Stores oder Paypal beschrieben."), p("4.5. Das Recht auf Kündigung aus wichtigem Grund bleibt unberührt.")]
}), section({
isExpanded: isPrint,
header: "5. Widerrufsrecht für Verbraucher",
content: [
p("5.1. Verbraucher haben das Recht, diesen Vertrag binnen 14 Tagen ohne Angabe von Gründen zu widerrufen. Die Widerrufsfrist beträgt 14 Tage ab dem Tag des Vertragsschlusses. Um das Widerrufsrecht auszuüben, müssen Verbraucher dem Anbieter (solocode GmbH, Mehringdamm 61, 10961 Berlin, Deutschland, E-Mail: support@anton.app) mittels einer eindeutigen Erklärung (z.B. ein mit der Post versandter Brief oder E-Mail) über den Entschluss, diesen Vertrag zu widerrufen, informieren. Hierfür können Verbraucher das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist."), p("5.2. Zur Wahrung der Widerrufsfrist reicht es aus, dass die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist abgesendet wird."), Button("Muster-Widerrufsformular").tap(function(){
return inc("../../_shared/openUrl/open")("https://files.anton.app/files/ANTON-Muster-Widerruf.pdf");
}).css({
marginBottom: "1em",
marginTop: "-0.5em"
}), p("5.3. Folgen des Widerrufs: Wenn Verbraucher diesen Vertrag widerrufen, hat der Anbieter alle Zahlungen, die er vom Verbraucher erhalten hat, einschließlich der Lieferkosten (mit Ausnahme der zusätzlichen Kosten, die sich daraus ergeben, dass der Verbraucher eine andere Art der Lieferung als die vom Anbieter angebotene, günstigste Standardlieferung gewählt hat) unverzüglich und spätestens binnen 14 Tagen ab dem Tag zurückzuzahlen, an dem die Mitteilung über den Widerruf dieses Vertrages beim Anbieter eingegangen ist. Für diese Rückzahlung verwendet der Anbieter dasselbe Zahlungsmittel, das der Verbraucher bei der ursprünglichen Transaktion eingesetzt hat, es sei denn, es wurde ausdrücklich etwas anderes vereinbart; in keinem Fall werden wegen dieser Rückzahlung Entgelte berechnet.")
]
}), section({
isExpanded: isPrint,
header: "6. Zahlungsmodalitäten",
content: [p("6.1. Sofern nicht anders im Bestellprozess angegeben, sind Entgelte für Premiumverträge jeweils im Voraus für die gesamte Vertragslaufzeit zur Zahlung fällig."), p("6.2. Die Zahlung kann über alle auf der Webseite im Einzelnen aufgeführten Zahlungsmethoden ohne zusätzliche Entgelte durchgeführt werden. Der Anbieter beauftragt im Rahmen des Bezahlprozesses einen externen Zahlungsdienstleister mit der Verarbeitung der vom Nutzer eingegebenen Zahldaten."), p("6.3. Nach Auswahl des gewünschten Bezahlsystems trägt der Nutzer seine erforderlichen Daten in die entsprechend vorgesehenen Datenfelder ein. Der beauftragte Zahlungsdienstleister ist berechtigt, Zahlungen für den Anbieter entgegen zu nehmen. Der Anbieter behält sich das Recht vor, angebotene Bezahlsysteme zu beschränken.")]
}), section({
isExpanded: isPrint,
header: "7. Kostenpflichtige Angebote für Schulen: ANTON-Schullizenz",
content: [p("7.1. Schulen können durch den Kauf eines Premiumangebots weitere Funktionen für Mitarbeiter, Lehrer und Schüler der Schule freischalten."), p("7.2. Erst mit der Absendung der Bestellung gibt die Schule bzw. der Kunde ein verbindliches Angebot zum Abschluss eines Vertrages an den Anbieter ab. Der Anbieter kann das Angebot innerhalb einer Frist von 2 Werktagen annehmen durch Zusendung einer Auftragsbestätigung, einer Rechnung oder durch Freischaltung des Angebotes."), p("7.3. Maßgeblich sind ausschließlich die Preisangaben des Anbieters im Zeitpunkt des Vertragsschlusses."), p("7.4. Die Laufzeit wird dem Kunden beim Kauf angezeigt. Die Lizenz kann nach Vertragsschluss von beiden Parteien jederzeit zum Ablauf des Leistungszeitraumes gekündigt werden. Wird sie nicht vor Ende des Leistungszeitraumes gekündigt, verlängert sie sich um ein weiteres Jahr. Die Kündigung ist per E-Mail oder schriftlich mitzuteilen."), p("7.5. Der Leistungsumfang richtet sich nach der Produktbeschreibung und wird ebenfalls Bestandteil des Vertrages."), p("7.6. Der Rechnungsbetrag ist ohne Abzüge 14 Tage nach Rechnungsdatum zur Zahlung fällig."), p("7.7. Der Kunde kommt in Zahlungsverzug, wenn er auf eine nach Fälligkeit erfolgende Mahnung des Anbieters nicht leistet. Auch ohne Mahnung tritt der Verzug spätestens 30 Tage nach Fälligkeit und Rechnungszugang ein."), p("7.8. Bei Abschluss einer ANTON-Schullizenz arbeitet der Anbieter als Auftragsverarbeiter für die Schule. Die Schule erhält mit Freischaltung des Angebotes einen Vertrag über die Auftragsverarbeitung (AV-Vertrag)."), p("7.9. Schulen und Institutionen dürfen nur den bei ihr beschäftigten Lehrern bzw. pädagogischen Mitarbeitern den Zugang zu den Lehrer- und Adminfunktionen der Schullizenz ermöglichen. Ein Schulträger darf nur Schulen unter seiner Trägerschaft zur Nutzung einer Schulträgerlizenz anmelden."), p("7.10. Schulen und Institutionen sind verpflichtet wahrheitsgemäße Angaben zu der Zahl der Schüler, Lehrer und Mitarbeiter der Schule zu machen und dürfen nur den aktiven Mitgliedern den Zugang zum Premiumangebot oder Teilen dessen ermöglichen."), p("7.11. Der Anbieter ist berechtigt, den Zugang von Nutzern zu ANTON ganz oder teilweise vorübergehend zu sperren und den Schullizenz-Vertrag fristlos mit sofortiger Wirkung zu kündigen, wenn der begründete Verdacht besteht, dass Nutzer nicht zu dem zur Nutzung zugelassenen Kreis von Personen gehören oder die Angebote missbräuchlich, zur Begehung rechtswidriger Handlungen oder unter Verletzung der Rechte Dritter, oder vertragswidrig genutzt wurden oder eine solche Nutzung zugelassen wurde, nichtberechtigte Dritte von den Zugangsdaten, insbesondere vom Kennwort eines Administrator-Nutzers oder anderer Nutzer Kenntnis erlangt haben, weil die notwendige Sorgfalt im Umgang mit diesen Daten, insbesondere die anerkannten Grundsätze der Datensicherheit nicht eingehalten wurden. Der Anbieter wird von diesem Recht nur unter Berücksichtigung der berechtigten Interessen des Nutzers Gebrauch machen und die Schule schriftlich oder per E-Mail über die Sperrung benachrichtigen."), p("7.12. Schulen können Nutzeraccounts, die sie erstellt haben oder deren Verwaltung in ihre Verantwortung fällt, zur Löschung nach Ablauf einer Übergangsfrist von 60 Tagen vormerken. Die Nutzer - und falls notwendig deren Erziehungsberechtigte - sind durch die Schule zu informieren. Sie erhalten die Möglichkeit, innerhalb einer Frist von 60 Tagen die in dem Nutzeraccount gespeicherten Daten in einen neuen Account zu überführen und eigenständig weiter zu verwenden. Nach Ablauf der Frist werden die Nutzerkonten automatisch gelöscht.")]
}), section({
isExpanded: isPrint,
header: "8. Erreichbarkeit des Angebots, Haftungsbeschränkung",
content: [p("8.1. Der Anbieter setzt für seine Dienste die aktuell und allgemein verwendeten Technologien ein. Um ANTON in vollem Umfang nutzen zu können, müssen Nutzer ebenfalls diese Technologien (z.B. aktuelle Browsertechnologie, Websockets) verwenden oder deren Verwendung auf seinem Computer oder mobilen Endgerät ermöglichen (z.B. Aktivierung von JavaScript). Bei Benutzung älterer oder nicht allgemein gebräuchlicher Technologien kann es sein, dass der Nutzer ANTON nur eingeschränkt nutzen kann."), p("8.2. Die für die Nutzung von ANTON erforderlichen Internetdienste und die dazu notwendige Ausstattung obliegt hinsichtlich der anfallenden Kosten, der Verfügbarkeit und der Sicherheit der Datenverbindung einzig dem Nutzer und - falls zutreffend - der Schule."), p("8.3. Der Anbieter garantiert ausdrücklich nicht, dass sich die angebotenen Dienste für die vom einzelnen Nutzer konkret verfolgten Ziele eignen."), p("8.4. Ansprüche von Nutzern und Kunden auf Schadensersatz sind ausgeschlossen. Hiervon ausgenommen sind Schadensersatzansprüche aus der Verletzung des Lebens, des Körpers, der Gesundheit oder aus der Verletzung wesentlicher Vertragspflichten (Kardinalpflichten) sowie die Haftung für sonstige Schäden, die auf einer vorsätzlichen oder grob fahrlässigen Pflichtverletzung seitens des Anbieters, seiner gesetzlichen Vertreter oder Erfüllungsgehilfen beruhen. Wesentliche Vertragspflichten sind solche, deren Erfüllung zur Erreichung des Ziels des Vertrages notwendig ist. Eine „Kardinalpflicht“ bzw. „wesentliche Vertragspflichten“ sind Pflichten, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages überhaupt erst ermöglichen und auf deren Einhaltung der Vertragspartner regelmäßig vertraut und vertrauen darf. Bei Datenverlust haftet der Anbieter maximal für den Aufwand, der bei ordnungsgemäßer Datensicherung durch Nutzer und Kunden für die Rekonstruktion erforderlich ist."), p("8.5. Bei der Verletzung wesentlicher Vertragspflichten haftet der Anbieter nur für den vertragstypischen, vorhersehbaren Schaden, wenn dieser einfach fahrlässig verursacht wurde, es sei denn, es handelt sich um Schadensersatzansprüche aus einer Verletzung des Lebens, des Körpers oder der Gesundheit."), p("8.6. Die Einschränkungen der Absätze 8.4 und 8.5 gelten auch zugunsten der gesetzlichen Vertreter und Erfüllungsgehilfen des Anbieters, wenn Ansprüche direkt gegen diese geltend gemacht werden."), p("8.7. Verfügbarkeit: Die Online-Produkte des Anbieters sind in der Regel 24 Stunden am Tag verfügbar. Aufgrund von notwendigen Servicearbeiten am Informationssystem kann es jedoch zeitweise zur Nichterreichbarkeit kommen."), p("8.8. Störungen des Zugangs zum Internet und des Datenverkehrs im Internet aufgrund von Ereignissen, die der Anbieter nicht zu vertreten hat und die den Zugang erschweren oder unmöglich machen (z.B. durch Firewall-Konfiguration), lassen den Vergütungsanspruch des Anbieters unberührt. Eine Haftung des Anbieters wegen der Nichtverfügbarkeit in den Fällen der Ziffer 8.1 und Ziffer 8.2 ist ausgeschlossen. Das Recht der Nutzer und Kunden zur außerordentlichen Kündigung bleibt unberührt."), p("8.9. Eine weitergehende Haftung auf Schadensersatz als in Ziffern 8.4 und 8.5 vorgesehen, ist - ohne Rücksicht auf die Rechtsnatur des geltend gemachten Anspruchs - ausgeschlossen. Insoweit haftet der Anbieter insbesondere nicht für mittelbare Schäden, wie z. B. entgangener Gewinn und sonstige Vermögensschäden der Nutzers und Kunden. Die zwingenden Bestimmungen des Produkthaftungsgesetzes bleiben unberührt."), p("8.10. Aufwendungsersatzansprüche der Nutzer und Kunden sind beschränkt auf den Betrag des Interesses, welches diese an der Erfüllung des Vertrages haben."), p("8.11. Nutzer und Kunden stellen den Anbieter von sämtlichen Ansprüchen frei, die andere Nutzer und Kunden oder sonstige Dritte gegenüber dem Anbieter wegen Verletzung ihrer Rechte durch die Nutzung von Angeboten durch den betreffenden Nutzer bzw. Kunden oder die von diesem zugelassenen Nutzer geltend machen. Der Nutzer bzw. Kunde übernimmt hierbei auch die Kosten der notwendigen Rechtsverteidigung des Anbieters einschließlich sämtlicher Gerichts- und Anwaltskosten. Dies gilt nicht, soweit die Rechtsverletzung von dem Nutzer bzw. Kunden nicht zu vertreten ist.")]
}), section({
isExpanded: isPrint,
header: "9. Schadloshaltung",
content: [p("9.1. Das Angebot darf nur in Übereinstimmung mit diesen AGB verwendet werden. Nutzer sind insbesondere nicht befugt, ANTON oder Teile hiervon zurückzuentwickeln, zu dekompilieren, disassemblieren, modifizieren oder abgeleitete Werke auf ihrer Grundlage zu entwickeln; Schutzmaßnahmen zu umgehen, die der Anbieter oder ihre Lizenzgeber einsetzen, um Inhalte zu schützen, auf die über ANTON zugegriffen werden kann; über ANTON bereitgestellte Inhalte zu kopieren, speichern, bearbeiten, abgeleitete Werke auf ihrer Grundlage zu entwickeln oder sie auf irgendeine Weise zu verändern; das eigene Nutzerkonto zu vermieten oder Unterlizenzen zu vergeben; das eigene Nutzerkonto mit anderen Personen zu teilen und/oder anderen Personen Zugang zu den kostenpflichtigen Diensten von ANTON zu gewähren; ANTON auf irgendeine andere nicht ordnungsgemäße Weise, die gegen diese AGB verstößt, zu nutzen."), p("9.2. In den unter Ziff. 9.1 beschriebenen Fällen, sowie in allen anderen Fällen unsachgemäßer Nutzung verpflichtet sich der Nutzer, den Anbieter schadlos zu halten. In jedem Fall behält sich der Anbieter das Recht vor, Nutzerkonten ohne Ankündigung zu sperren, sobald ein Hinweis auf unsachgemäße bzw. missbräuchliche Nutzung besteht und der Anbieter ein berechtigtes Interesse an der Sperrung hat.")]
}), section({
isExpanded: isPrint,
header: "10. Rechte an geistigem Eigentum",
content: [p("10.1. Sämtliche im Rahmen von ANTON zur Verfügung gestellte Texte, Bilder und sonstige urheberrechtsfähigen Inhalte und Werke sind urheberrechtlich geschützt. Jegliche nicht vertragsgegenständliche Nutzung, insbesondere zu gewerblichen oder betrieblichen Zwecke, bedarf einer vorherigen Zustimmung des Anbieters in Textform."), p("10.2. Für Inhalte, die ausdrücklich über eine Creative Commons Lizenz zur Verfügung gestellt werden, gelten die Bedingungen der jeweils anwendbaren Creative Commons Lizenz."), p("10.3. Eine Nutzung sämtlicher im Rahmen des Angebots durch den Anbieter genutzter Kennzeichen, Marken, Designs und Geschäftsbezeichnungen bedarf ebenfalls einer vorherigen Zustimmung des Anbieters in Textform.")]
}), section({
isExpanded: isPrint,
header: "11. Von Nutzern generierte Inhalte",
content: [p("11.1. Wenn Nutzer selbst Inhalte generieren, z.B. eine Lernliste anlegen, ein Bild erstellen oder anderweitig Materialien via ANTON zur Verfügung stellen, sind sie in vollem Umfang für die Beschaffenheit dieser Inhalte und jegliche daraus resultierenden Schäden verantwortlich. Dies ist ungeachtet dessen der Fall, ob die fraglichen Inhalte aus Text, Grafiken, Audiodateien, Computer-Software oder irgendwelchen anderen Formaten bestehen."), p("11.2. Nutzer dürfen nur zu Lern- und Studienzwecken geeignete Inhalte bei ANTON speichern. Der Anbieter behält sich das Recht vor, gegen Nutzer vorzugehen, die gegen diese Bestimmung verstoßen. Diese Maßnahmen können beispielsweise die Entfernung der betreffenden Inhalte, die Kündigung der Konten der betreffenden Personen oder die Ergreifung weiterer Rechtsmittel umfassen, ohne aber darauf beschränkt zu sein. Unzulässige Inhalte sind u.a. Inhalte, die die Rechte des Anbieters oder Dritter verletzen, anstößig oder kommerzieller Natur sind oder gegen geltende Gesetze und Vorschriften verstoßen."), p("11.3. Wenn Nutzer Inhalte oder irgendwelche anderen Materialien bei ANTON erstellen oder hochladen, gewähren sie dem Anbieter eine weltweite, unbefristete und gebührenfreie Lizenz (mit dem Recht auf Unterlizenzierung) zur Nutzung, Vervielfältigung, Reproduktion, Verarbeitung, Anpassung, Veränderung, Publikation, Übermittlung, Darstellung und Verbreitung derartiger Inhalte oder Materialien in bzw. mithilfe von jeglichen und sämtlichen (bereits vorhandenen oder zu einem späteren Zeitpunkt entwickelten) Medien oder Verbreitungsverfahren. Zusätzliche Nutzungen durch den Anbieter oder andere Unternehmen oder Einzelpersonen, die als Partner des Anbieters agieren, sind möglich, ohne dass Nutzer eine Vergütung für die von ihnen eingereichten, eingesendeten oder anderweitig über den Dienst zur Verfügung gestellten Inhalte erhalten."), p("11.4. Indem Nutzer Inhalte via ANTON verfügbar machen, erklären und gewährleisten sie, dass sie nicht die Rechte Dritter verletzen und dass der Inhalt keine Schadsoftware oder anstößiges Material enthält oder installiert."), p("11.5. Der Anbieter überprüft nicht alle an den Dienst gesendeten Inhalte, hat auch nicht die Möglichkeit zu einer solchen Überprüfung und kann daher nicht für den Inhalt, die Nutzung oder die Auswirkungen dieses Materials verantwortlich sein. Dass der Anbieter den Dienst betreibt, bedeutet nicht und impliziert auch nicht, dass der Anbieter das an den Dienst gesendete Material befürwortet oder der Meinung ist, dieses Material sei fehlerfrei, nützlich oder unschädlich."), p("11.6. Nutzergenerierte Inhalte wie z.B. Lernlisten können möglicherweise anstößiges, ungehöriges oder anderweitig zu beanstandendes Material, sowie Inhalte, in denen technische, sachliche, orthographische oder anderweitige Fehler auftreten können, beinhalten."), p("11.7. Der Dienst kann Material enthalten, welches das geistige Eigentumsrecht und andere Eigentumsrechte Dritter missachtet oder verletzt, oder bei dem das Herunterladen, die Vervielfältigung oder die Nutzung möglicherweise zusätzlichen geschriebenen oder ungeschriebenen Geschäftsbedingungen unterworfen sind. Der Anbieter lehnt jegliche Haftung für irgendwelche Schäden ab, die dadurch entstehen, dass Besucher den Dienst nutzen oder dort irgendwelche geposteten Inhalte herunterladen. Sollten Nutzer Inhalte oder andere Materialien entdecken, die gegen diese Bedingungen verstoßen, so gibt es auf der Webseite des Dienstes entsprechende Funktionen, mit denen sie beim Anbieter Meldung erstatten können."), p("11.8. Der Anbieter respektiert das geistige Eigentum anderer. Wenn du der Ansicht bist, dass auf der Webseite oder in den mobilen Apps von ANTON veröffentlichtes oder verlinktes Material dein Urheberrecht verletzt, bitten wir dich, um Benachrichtigung. Der Anbieter wird - falls erforderlich - , die beanstandeten Inhalte entfernen oder sämtliche Links zu den diesen Inhalten deaktivieren. Sollte ein Nutzer einmalig oder wiederholt die Urheberrechte oder sonstige geistige Eigentumsrechte von ANTON oder anderen verletzen, kann der Anbieter in eigenem Ermessen den Zugriff auf den Dienst oder die Nutzung des Dienstes kündigen oder verweigern. Im Fall einer derartigen Kündigung ist der Anbieter in keiner Weise zur Rückerstattung irgendwelcher von dem betreffenden Nutzer im Voraus gezahlter Beträge verpflichtet.")]
}), section({
isExpanded: isPrint,
header: "12. Schlussbestimmungen",
content: [
p("12.1. Das Vertragsverhältnis zwischen dem Anbieter und dem Nutzer bzw. Kunden unterliegt, soweit gesetzlich zulässig, deutschem Recht. Falls das Recht des Landes, in dem der Verbraucher seinen Wohnsitz hat, einen höheren Verbraucherschutz vorsieht, bleibt dieser unberührt."), p("12.2. Der Anbieter nimmt an keinem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle im Sinne des Verbraucherstreitbeilegungsgesetzes teil."), p("12.3. Die Europäische Kommission stellt eine Plattform für die außergerichtliche Online-Streitbeilegung (OS-Plattform) bereit, aufrufbar unter: "), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=DE");
}), p("12.4. Der Vertrag bleibt auch bei rechtlicher Unwirksamkeit einzelner Punkte in seinen übrigen Teilen verbindlich. Anstelle der unwirksamen Punkte treten, soweit vorhanden, die gesetzlichen Vorschriften. Soweit dies für eine Vertragspartei eine unzumutbare Härte darstellen würde, wird der Vertrag jedoch im Ganzen unwirksam."), p("12.5. Der Anbieter behält sich vor, diese AGB aus sachlichem Grund zu ändern (z. B. wegen Änderungen der Rechtslage oder des eigenen Angebots, technischer Fortentwicklungen u. Ä.). Dies gilt insbesondere dann, wenn neue Angebote des Anbieters neue Regelungen erfordern."), p("12.6. Die geänderten AGB werden dem Nutzer bzw. Kunden vorab per E-Mail oder mittels einer anderen geeigneten Form zugesandt oder auf der Webseite und in den mobilen Apps angezeigt. Widerspricht der Nutzer den geänderten AGB nicht innerhalb von sechs Wochen, gelten sie als angenommen. Im Fall eines Widerspruchs kann der Anbieter das Nutzerkonto des Nutzers sperren, wobei bereits geleistete Zahlungen anteilig im Verhältnis zur Restlaufzeit erstattet werden. Auf diese Rechtsfolgen wird der Anbieter in der Nachricht mit den geänderten AGB gesondert hinweisen.")
]
}));
};
})();
pages/static/terms/div/divEn/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("Welcome to ANTON - nice that you are there! ANTON is a free learning app for students, teachers and parents. ANTON is developed and provided by solocode GmbH, Mehringdamm 61, 10961 Berlin (hereinafter: the provider)."), p("You can use ANTON at https://anton.app and also via the mobile apps for Android, iOS and Amazon Fire."), p("These general terms and conditions of use (hereinafter: “GTC”) provide the final legal framework for all ANTON services intended for consumers or schools (hereinafter: “the service”). Verbal side agreements or contract changes are only effective if they are confirmed by the provider in writing or by email."), p("These general terms and conditions apply equally to the free offer and the additional offers subject to charges.")]
}), section({
isExpanded: isPrint,
header: "2. Services offered, scope",
content: [p("2.1. ANTON is an online learning system that enables students to learn for school in a simple, modern and efficient way."), p("2.2. Teachers and parents can use ANTON to guide and support students in learning."), p("2.3. Schools can use ANTON as part of their lessons, as homework or as an additional learning option."), p("2.4. Many functions are available to the user free of charge. Paid services are clearly identified as such and can be used against payment of the respective fees or prices."), p("2.5. The provider reserves the right to make parts of its offer accessible only to teachers or other users entrusted with educational tasks."), p("2.6. When registering online, the user is obliged not to provide any non-truthful information, in particular regarding his role as a pupil or teacher and school affiliation. If the user enters incorrect data, the provider can, as far as a contract has been concluded, withdraw from the contract. If possible, the withdrawal will be declared in writing. The written form is also preserved by sending an email. If incorrect data is entered, a school administrator can be given the right to manage the user account created under incorrect information, to view the registration code and to mark the user for deletion."), p("2.7. In addition to the free offer, consumers can also activate ANTON-Plus, a paid service with additional functions."), p("2.8. Schools can purchase an ANTON school license and thus unlock additional functions that improve their use in school. In addition to the ANTON school license, schools can also activate ANTON-Plus for all school students and teachers.")]
}), section({
isExpanded: isPrint,
header: "3. Free offer and ANTON-Plus",
content: [p("3.1. The user can create a user account with ANTON free of charge."), p("3.2. After creating a user account, the use of the free basic functions is available (\"basic contract\"). However, the user has no legal right to the free availability of such content and functions."), p("3.3. Basic contracts can be terminated properly at any time with a notice period of 14 days."), p("3.4. The provider also offers consumers the paid service ANTON-Plus (\"premium contract\") according to various price models. If prices are given at ANTON, they include the applicable statutory sales tax."), p("3.5. By booking a premium contract, the user has access to additional functions within the framework of the respective premium contract for the entire contract term."), p("3.6. Settlement type, price and duration are listed in the course of the ordering process and are fully summarized before the order is completed. The premium contract is concluded by clicking on the \"pay now\" button (or similar)."), p("3.7. Premium contracts are concluded for the fixed term chosen by the user. Prices for the entire term are due upon conclusion of the contract."), p("3.8. The provider will primarily communicate with the user via the support chat in the app or - if an email address has been specified - and via this, and can in particular inform him of contractually relevant declarations of intent (e.g. terminations). The user can provide the provider with a current email address at any time.")]
}), section({
isExpanded: isPrint,
header: "4. Term, extension and termination of contracts for consumers",
content: [p("4.1. As long as no premium contract has been concluded, the user can terminate the basic contract at any time in accordance with section 3.3."), p("4.2. Unless otherwise stated when the contract is concluded, the ANTON-Plus premium contracts are ongoing subscriptions, which are automatically extended by the contractually agreed term, provided the user or the provider does not cancel the respective premium contract up to 24 hours before the end of the respective term. Fees for extension periods are also invoiced in advance. All contracts can be terminated at the end of the respective term."), p("4.3. Premium contracts, which are acquired by \"one-off payment\", are expressly shown as limited or unlimited. If they are limited, the contract ends at the end of the term without the need for termination. If they are unlimited, the following paragraphs apply accordingly."), p("4.4. The termination of premium contracts that were purchased via the Apple App Store, the Google Play Store or via Paypal takes place according to the applicable conditions of the respective Service provider. The exact procedure is described on the website of the Apple App Store, the Google Play Store or Paypal."), p("4.5. The right to terminate the contract for an important reason remains unaffected.")]
}), section({
isExpanded: isPrint,
header: "5. Right of withdrawal for consumers",
content: [
p("5.1. Consumers have the right to cancel this contract within 14 days without giving a reason. The cancellation period is 14 days from the day the contract is concluded. In order to exercise the right of withdrawal, consumers must provide the provider (solocode GmbH, Mehringdamm 61, 10961 Berlin, Germany, email: support@anton.app) with a clear statement (e.g. a letter sent by post or email) that they wish to cancel this contract. For this purpose, consumers can use the attached model withdrawal form, but this is not mandatory."), p("5.2. To meet the cancellation deadline, it is sufficient that the notification of the exercise of the right of cancellation is sent before the cancellation period expires."), Button("Model withdrawal form").tap(function(){
return inc("../../_shared/openUrl/open")("https://files.anton.app/files/ANTON-model-withdrawal-form.pdf");
}).css({
marginBottom: "1em",
marginTop: "-0.5em"
}), p("5.3. If you withdraw from this contract, we will repay all payments we have received from you, including delivery charges (except for the additional costs arising from choosing a different delivery method than the best standard delivery we offer have) immediately and at the latest within 14 days from the date on which the notification of your cancellation of this contract was received by us. For this repayment, we use the same means of payment that you used in the original transaction, unless otherwise agreed with you; in no case will you be charged for this repayment of fees.")
]
}), section({
isExpanded: isPrint,
header: "6. Payment arrangements",
content: [p("6.1. Unless otherwise stated in the ordering process, fees for premium contracts are payable in advance for the entire term of the contract."), p("6.2. Payment can be made using any of the payment methods detailed on the website without additional fees. As part of the payment process, the provider commissions an external payment service provider to process the payment data entered by the user."), p("6.3. After selecting the desired payment system, the user enters the required data in the corresponding data fields. The commissioned payment service provider is entitled to accept payments for the provider. The provider reserves the right to restrict the payment systems offered.")]
}), section({
isExpanded: isPrint,
header: "7. Paid offers for schools: ANTON-school-license",
content: [p("7.1. Schools can unlock additional functions for school staff, teachers and students by purchasing a premium offer."), p("7.2. Only when the order is sent does the school or the customer make a binding offer to conclude a contract with the provider. The provider can accept the offer within a period of 10 working days by sending an order confirmation, an invoice or by activating the product offered."), p("7.3. Only the price information of the provider at the time of the conclusion of the contract is decisive."), p("7.4. The term is shown to the customer when buying. After the contract has been concluded, both parties can terminate the license at any time at the end of the service period. If it is not canceled before the end of the service period, it will be extended for another year. Notice of termination must be given by email or in writing."), p("7.5. The scope of services is based on the product description and also becomes part of the contract."), p("7.6. The invoice amount is payable without deductions 14 days after the invoice date."), p("7.7. If the provider does not receive payment within 30 days, the invoice is past due and the provider reserves the right to suspend access to the affected school account(s) and take collection action. Suspension of an account does not relieve the account-holder of its obligation to pay for the account. The provider reserves the right to charge a late fee in the amount of 1% per month or the maximum permitted by law and its reasonable attorney's fees in securing payment of past due amounts."), p("7.8. Schools and institutions may only give teachers or pedagogical staff employed by them access to the teacher and admin functions of the school license. A school authority may only register schools under its responsibility to use a school authority license."), p("7.9 Schools and institutions are obliged to provide truthful information about the number of students, teachers and staff of the school and may only allow active members to access the Premium Offer or parts of it."), p("7.10. The Provider shall be entitled to temporarily block Users' access to ANTON in whole or in part and to terminate the School License Agreement without notice and with immediate effect if there are reasonable grounds to suspect that users do not belong to the group of persons permitted to use the premium offer or that the offerings are being abused, used to commit unlawful acts or in violation of the rights of third parties, or were used in breach of contract or such use was permitted or unauthorised third parties have obtained knowledge of the access data, in particular the password of an administrator user or other users, because the necessary care in handling this data, in particular the recognised principles of data security, was not observed. The provider will only make use of this right in consideration of the legitimate interests of the user and will inform the school in writing or by email about the blocking."), p("7.11. Schools can mark user accounts that they have created or for which they are responsible for administration for deletion after a transitional period of 60 days. The users - and if necessary their legal guardians - must be informed by the school. Within a period of 60 days, they will be given the opportunity to transfer the data stored in the user account to a new account and to continue using it independently. After this period the user accounts will be automatically deleted.")]
}), section({
isExpanded: isPrint,
header: "8. Accessibility of the offer, limitation of liability",
content: [p("8.1 The provider shall use the current and generally used technologies for its services. In order to be able to use ANTON to the full extent, users must also use these technologies (e.g. current browser technology, web sockets) or use them on their computer or mobile device (e.g. activation of JavaScript). If older technologies or technologies that are not generally in use are used, users may only be able to use ANTON to a limited extent."), p("8.2 With regard to the costs incurred, availability and security of the data connection, the internet services required for the use of ANTON and the equipment necessary for such use shall be the sole responsibility of the user and - if applicable - the school."), p("8.3 The Provider expressly does not warrant that the services offered are suitable for the objectives specifically pursued by the individual user."), p("8.4 Claims of users and customers for damages are excluded. Excluded from this are claims for damages from injury to life, body, health or from the violation of essential contractual obligations (cardinal obligations) as well as the liability for other damages, which are based on an intentional or grossly negligent breach of duty on the part of the provider, his legal representatives or vicarious agents. Material contractual obligations are those whose fulfilment is necessary to achieve the objective of the contract. A \"cardinal obligation\" or \"essential contractual obligations\" are obligations, the fulfilment of which makes the proper execution of the contract possible in the first place and on the observance of which the contractual partner regularly relies and may rely. In the event of data loss, the provider shall be liable at most for the effort required for reconstruction in the event of proper data backup by users and customers."), p("8.5 In case of violation of essential contractual obligations, the provider is only liable for the contract-typical, foreseeable damage if this was caused by simple negligence, unless it is a matter of claims for damages from an injury to life, body or health."), p("8.6 The restrictions of paragraphs 8.4 and 8.5 also apply in favour of the legal representatives and vicarious agents of the provider if claims are made directly against them."), p("8.7 Availability: The online products of the provider are generally available 24 hours a day. However, due to necessary service work on the information system, it may be temporarily unavailable."), p("8.8 Disruptions to access to the internet and data traffic on the internet due to events for which the provider is not responsible and which make access difficult or impossible (e.g. due to firewall configuration) do not affect the provider's claim for remuneration. Any liability of the provider due to unavailability in the cases of clause 8.1 and clause 8.2 is excluded. The right of users and customers to extraordinary termination remains unaffected."), p("8.9 Any further liability for damages other than that provided for in sections 8.4 and 8.5 is excluded, irrespective of the legal nature of the claim asserted. In this respect, the provider is in particular not liable for indirect damages, such as loss of profit and other financial losses of users and customers. The mandatory provisions of the product liability act remain unaffected."), p("8.10. Claims for reimbursement of expenses by users and customers are limited to the amount of interest they have in the fulfilment of the contract.")]
}), section({
isExpanded: isPrint,
header: "9. Indemnification",
content: [p("9.1 The offer may only be used in accordance with these GTC. Users shall in particular not be entitled to reverse engineer, decompile, disassemble, modify or create derivative works based on ANTON or parts thereof; to circumvent protective measures used by the provider or its licensors to protect content that can be accessed via ANTON; copy, store, edit, develop derivative works based on, or in any way modify, any content provided via ANTON; rent out or grant sublicenses for its own user account; share its own user account with other persons and/or grant other persons access to ANTON's fee-based services; use ANTON in any other improper manner that violates these GTC."), p("9.2 In the cases described in Section 9.1 above, as well as in all other cases of improper use or violation of this agreement, user agrees to indemnify and hold provider harmless to the extent permitted by applicable law, including reasonable attorneys' fees. In any case, the provider reserves the right to block user accounts without notice, as soon as there is an indication of improper or abusive use and the provider has a legitimate interest in blocking.")]
}), section({
isExpanded: isPrint,
header: "10. Intellectual property rights",
content: [p("10.1 All texts, images and other copyrighted content and works provided by ANTON shall be protected by copyright. Any use not covered by this agreement, in particular for commercial or operational purposes, shall require the prior written consent of the provider."), p("10.2 For content that is expressly made available through a Creative Commons license, the terms of the applicable Creative Commons license apply."), p("10.3 The use of all trademarks, brands, designs and business names used by the provider within the scope of the offer also requires the prior consent of the provider in text form.")]
}), section({
isExpanded: isPrint,
header: "11. Content generated by users",
content: [p("11.1 If users generate content themselves, e.g. by creating a learning list, creating a picture or otherwise making materials available via ANTON, they shall be fully responsible for the quality of such content and for any damage resulting therefrom. This shall apply regardless of whether the content in question consists of text, graphics, audio files, computer software or any other format."), p("11.2 Users may only store content suitable for learning and study purposes at ANTON. The provider reserves the right to take action against users who violate this provision. Such action may include, but is not limited to, removal of the content in question, termination of the accounts of the persons concerned, or the taking of further legal action. Prohibited content includes, but is not limited to, content that violates the rights of the provider or third parties, is offensive or commercial in nature, or violates applicable laws and regulations."), p("11.3 When users create or upload content or any other materials to ANTON, they shall grant the provider a worldwide, perpetual, royalty-free license (with the right to sublicense) to use, copy, reproduce, process, adapt, modify, modify, publish, transmit, display and distribute such content or materials in or by means of any and all media or distribution methods (whether existing or developed at a later date). Additional uses by the provider or other companies or individuals acting as partners of the provider may be made without compensation to users for any content they submit, post or otherwise make available through the service."), p("11.4 By making content available via ANTON, users represent and warrant that such content does not infringe the rights of third parties and that such content does not contain or install any malicious software or offensive material."), p("11.5 The provider does not review all content sent to the service, does not have the opportunity to do so and therefore cannot be responsible for the content, use or effects of such material. The fact that the provider operates the service does not mean, and does not imply, that the provider endorses the material sent to the service or believes that such material is accurate, useful or harmless."), p("11.6 User-generated content, such as learning lists, pictures, writings, etc. may include material that is potentially offensive, indecent or otherwise objectionable, as well as content that may contain technical, factual, spelling or other errors."), p("11.7 The service may contain material that violates or infringes the intellectual property rights or other proprietary rights of others, or where the downloading, copying or use may be subject to additional terms and conditions, written or unwritten. The provider disclaims any liability for any damages resulting from visitors using the service or downloading any posted content from the service. If users discover content or other materials that violate these terms and conditions, there are appropriate features on the service's website that allow users to report such violations to the provider."), p("11.8 The provider respects the intellectual property of others. If you are of the opinion that material published or linked on the website or in ANTON's mobile apps infringes your copyright, please notify us. If necessary, the provider will remove the content in question or deactivate all links to such content. In the event that a user should infringe upon the copyrights or other intellectual property rights of ANTON or others on one or more occasions, the provider may, at its sole discretion, terminate or deny access to or use of the service. In the event of such termination, the provider shall not be obliged in any way to refund any amounts paid in advance by the user concerned.")]
}), section({
isExpanded: isPrint,
header: "12. Final clauses",
content: [
p("12.1 The contractual relationship between the provider and the user or customer is subject to German law as far as legally permissible. If the law of the country in which the consumer has his residence provides for a higher level of consumer protection, this shall remain unaffected."), p("12.2 The provider does not take part in any dispute settlement proceedings before a consumer arbitration board within the meaning of the Consumer Dispute Settlement Act."), p("12.3 The EU-Commission offers a platform for online dispute resolution (ODR) at:"), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=EN");
}).css({
marginBottom: "1em",
marginTop: "0em"
}), p("12.4 The contract remains binding in its remaining parts even if individual points are legally ineffective. In place of the ineffective points, the legal regulations, if any, shall apply. However, if this would represent an unreasonable hardship for one of the contracting parties, the contract as a whole shall become invalid."), p("12.5 The provider reserves the right to change these general terms and conditions for objective reasons (e.g. due to changes in the legal situation or the provider's own offer, technical developments, etc.). This applies in particular if new offers of the provider require new regulations."), p("12.6 The amended GTC will be sent to the user or customer in advance by email or by another suitable form or displayed on the website and in the mobile apps. If the user does not object to the amended GTC within six weeks, they shall be deemed accepted. In the event of an objection, the provider may block the user's user account, in which case any payments already made will be refunded pro rata in relation to the remaining term. The provider will point out these legal consequences separately in the message with the amended GTC.")
]
}), section({
isExpanded: isPrint,
header: "13. Additional Provisions Applicable for Residents of the United States of America",
content: [p("13.1 If the user is a resident of the United States of America the provisions of this section 13 shall be applicable in addition to the provisions above or where in conflict with the provisions above, the user may choose which provisions shall be applicable."), p("13.2 Creation of a User Account and Conclusion of the Contract"), p("The following additional provisions shall apply to Section 3 of the GTC:"), p("3.9 The user agrees and acknowledges that the user will never access or use another person’s account without permission."), p("3.10 The user agrees and acknowledges that the user will not transfer their account to another person or entity without the provider’s prior written approval."), p("3.11 If the user selects a username or similar identifier for their account, the provider reserves the right to remove or reclaim it if the provider, in its sole discretion, believes it is inappropriate or violates the rights of a third party (including, but not limited to any applicable trademarks)."), p("13.3 Content and Accessibility of the Service and Liability"), p("The following shall replace and supersede Section 8 of the GTC:"), p("8.1 For providing its service, the provider uses the technologies currently and commonly used in the field. To be able to make full use of the services offered by the provider, the user must likewise use these technologies (e.g. up-to-date browser technologies, web sockets) or enable their use on its computer (e.g. activate Java Script). If older or not commonly used technologies are used, the user might only be able to make limited use of the services provided by the provider. The user is solely liable for any loss or damage incurred by the user, the provider or any third party caused by the user’s failure to use up-to-date technologies when accessing ANTON."), p("13.4 Indemnification"), p("The following additional provisions shall apply to Section 9 of the GTC:"), p("9.1 The offer may only be used in accordance with these GTC. Users shall in particular not be entitled to reverse engineer, decompile, disassemble, modify or create derivative works based on ANTON or parts thereof; to circumvent protective measures used by the provider or its licensors to protect content that can be accessed via ANTON; copy, store, edit, develop derivative works based on, or in any way modify, any content provided via ANTON; rent out or grant sublicenses for its own user account; share its own user account with other persons and/or grant other persons access to ANTON's fee-based services; not to download or copy any account information for the benefit of any other party; not to collect or make any use of any product listings, descriptions or prices; not to resell or make any commercial use of ANTON or its contents; not to reproduce, duplicate, copy, sell, resell or otherwise exploit ANTON for any commercial purpose without express written consent of the provider; not to use any meta tags or any other “hidden tag” utilizing the ANTON name or any of the provider’s trademarks without the express written consent of the provider or use ANTON in any other improper manner that violates these GTC."), p("9.3 The user agrees not to circumvent, disable or otherwise interfere with security-related features of ANTON or any associated websites and/or tablet and/or mobile applications or features that prevent or restrict use or copying of any content or enforce limitations on ANTON’s use."), p("9.4 The user agrees not to use or launch any automated system, including without limitation, “robots,” “spiders,” or “offline readers,” that accesses ANTON in a manner that sends more request messages to the provider’s servers in a given period of time than a human can reasonably produce in the same period by using a conventional on-line web browser. Notwithstanding the foregoing, the provider grants the operators of public search engines permission to use spiders to copy materials from the site for the sole purpose of and solely to the extent necessary for creating publicly available searchable indices of the materials, but not caches or archives of such materials. The provider reserves the right to revoke these exceptions either generally or in specific cases. The user agrees not to collect or harvest any personally identifiable information, including account names, from ANTON, nor to use the communication systems provided by ANTON (e.g., comments, email) for any commercial solicitation purposes. The user agrees not to solicit, for commercial purposes, any ANTON users with respect to their content. In all use of ANTON and all associated services, website and mobile and/or tablet applications, the user agrees to comply with all applicable laws and regulations."), p("13.5 Final Clauses"), p("The following shall replace and supersede Section 12 of the GTC and any contradictory provisions elsewhere in the GTC:"), p("12.1 Agreements between the provider and the user shall be subject to the laws of the Federal Republic of Germany. The UN Convention on Contracts for the International Sale of Goods (CISG) shall not apply. The parties agree to exclude those provisions of the German international civil law, that may cause the exclusive application of any other jurisdiction."), p("12.4 and 12.5 The provider may, in its sole discretion, modify or revise the GTC at any time, and the user agrees to be bound by all such modifications or revisions. The modified GTC will be posted at this address and so we encourage users to periodically check these GTC. If the user does not agree to any of these terms, the user should immediately stop accessing and/or using this website or any of the other ANTON services or mobile and/or tablet applications. If the user has paid for premium services and objects to the GTC, please notify the provider immediately and we will close the applicable account and issue the applicable user a full refund for the remainder of the applicable term."), p("The following additional provisions shall apply to Section 12 of the GTC:"), p("12.6 Any failure of the provider to exercise or enforce any right or provision of the GTC or the privacy statement shall not constitute a waiver of such right or provision. Should individual points of these GTC or the privacy statement be legally invalid, the remaining portions hereof shall be unaffected and remain binding."), p("12.7 The user and the provider acknowledge and agree that these GTC and any other legal notices published by the provider and incorporated herein shall constitute the entire agreement between the user and the provider."), p("12.8 The parties agree on the exclusive jurisdiction of the courts at the place of business of the provider, if the user does not have a residence in Germany."), p("12.9 These GTC and any rights and licenses granted hereunder, may not be transferred or assigned by the user, but may be assigned by the provider without restriction."), p("12.10 The user agrees that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the GTC must be filed within one (1) year after such claim or cause of action arose or be forever barred.")]
}));
};
})();
pages/static/terms/div/divEnGb/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("Welcome to ANTON - great to have you here! ANTON is a free learning app for pupils, teachers and parents. ANTON is developed and provided by solocode GmbH, Mehringdamm 61, 10961 Berlin (hereinafter: the provider)."), p("You can use ANTON at https://anton.app and also via the mobile apps for Android, iOS and Amazon Fire."), p("These general terms and conditions of use (hereinafter: “GTC”) provide the final legal framework for all ANTON services intended for consumers or schools (hereinafter: “the service”). Verbal side agreements or contract changes are only effective if they are confirmed by the provider in writing or by email."), p("These general terms and conditions apply equally to the free offer and the additional offers subject to charges.")]
}), section({
isExpanded: isPrint,
header: "2. Services offered, scope",
content: [p("2.1. ANTON is an online learning system that enables pupils to learn for school in a simple, modern and efficient way."), p("2.2. Teachers and parents can use ANTON to guide and support pupils in learning."), p("2.3. Schools can use ANTON as part of their lessons, as homework or as an additional learning option."), p("2.4. Many functions are available to the user free of charge. Paid services are clearly identified as such and can be used against payment of the respective fees or prices."), p("2.5. The provider reserves the right to make parts of its offer accessible only to teachers or other users entrusted with educational tasks."), p("2.6. When registering online, the user is obliged not to provide any non-truthful information, in particular regarding his role as a pupil or teacher and school affiliation. If the user enters incorrect data, the provider can, as far as a contract has been concluded, withdraw from the contract. If possible, the withdrawal will be declared in writing. The written form is also preserved by sending an email. If incorrect data is entered, a school administrator can be given the right to manage the user account created under incorrect information, to view the registration code and to mark the user for deletion."), p("2.7. In addition to the free offer, consumers can also activate ANTON-Plus, a paid service with additional functions."), p("2.8. Schools can purchase an ANTON School Licence and thus unlock additional functions that improve their use in school. In addition to the ANTON School Licence, schools can also activate ANTON-Plus for all school pupils and teachers.")]
}), section({
isExpanded: isPrint,
header: "3. Free offer and ANTON-Plus",
content: [p("3.1. The user can create a user account with ANTON free of charge."), p("3.2. After creating a user account, the use of the free basic functions is available (\"basic contract\"). However, the user has no legal right to the free availability of such content and functions."), p("3.3. Basic contracts can be terminated properly at any time with a notice period of 14 days."), p("3.4. The provider also offers consumers the paid service ANTON-Plus (\"premium contract\") according to various price models. If prices are given at ANTON, they include the applicable statutory sales tax."), p("3.5. By booking a premium contract, the user has access to additional functions within the framework of the respective premium contract for the entire contract term."), p("3.6. Settlement type, price and duration are listed in the course of the ordering process and are fully summarised before the order is completed. The premium contract is concluded by clicking on the \"pay now\" button (or similar)."), p("3.7. Premium contracts are concluded for the fixed term chosen by the user. Prices for the entire term are due upon conclusion of the contract."), p("3.8. The provider will primarily communicate with the user via the support chat in the app or - if an email address has been specified - and via this, and can in particular inform him of contractually relevant declarations of intent (e.g. terminations). The user can provide the provider with a current email address at any time.")]
}), section({
isExpanded: isPrint,
header: "4. Term, extension and termination of contracts for consumers",
content: [p("4.1. As long as no premium contract has been concluded, the user can terminate the basic contract at any time in accordance with section 3.3."), p("4.2. Unless otherwise stated when the contract is concluded, the ANTON-Plus premium contracts are ongoing subscriptions, which are automatically extended by the contractually agreed term, provided the user or the provider does not cancel the respective premium contract up to 24 hours before the end of the respective term. Fees for extension periods are also invoiced in advance. All contracts can be terminated at the end of the respective term."), p("4.3. Premium contracts, which are acquired by \"one-off payment\", are expressly shown as limited or unlimited. If they are limited, the contract ends at the end of the term without the need for termination. If they are unlimited, the following paragraphs apply accordingly."), p("4.4. The termination of premium contracts that were purchased via the Apple App Store, the Google Play Store or via Paypal takes place according to the applicable conditions of the respective Service provider. The exact procedure is described on the website of the Apple App Store, the Google Play Store or Paypal."), p("4.5. The right to terminate the contract for an important reason remains unaffected.")]
}), section({
isExpanded: isPrint,
header: "5. Right of withdrawal for consumers",
content: [
p("5.1. Consumers have the right to cancel this contract within 14 days without giving a reason. The cancellation period is 14 days from the day the contract is concluded. In order to exercise the right of withdrawal, consumers must provide the provider (solocode GmbH, Mehringdamm 61, 10961 Berlin, Germany, email: support@anton.app) with a clear statement (e.g. a letter sent by post or email) that they wish to cancel this contract. For this purpose, consumers can use the attached model withdrawal form, but this is not mandatory."), p("5.2. To meet the cancellation deadline, it is sufficient that the notification of the exercise of the right of cancellation is sent before the cancellation period expires."), Button("Model withdrawal form").tap(function(){
return inc("../../_shared/openUrl/open")("https://files.anton.app/files/ANTON-model-withdrawal-form.pdf");
}).css({
marginBottom: "1em",
marginTop: "-0.5em"
}), p("5.3. If you withdraw from this contract, we will repay all payments we have received from you, including delivery charges (except for the additional costs arising from choosing a different delivery method than the best standard delivery we offer) immediately and at the latest within 14 days from the date on which the notification of your cancellation of this contract was received by us. For this repayment, we use the same means of payment that you used in the original transaction, unless otherwise agreed with you; in no case will you be charged for this repayment of fees.")
]
}), section({
isExpanded: isPrint,
header: "6. Payment arrangements",
content: [p("6.1. Unless otherwise stated in the ordering process, fees for premium contracts are payable in advance for the entire term of the contract."), p("6.2. Payment can be made using any of the payment methods detailed on the website without additional fees. As part of the payment process, the provider commissions an external payment service provider to process the payment data entered by the user."), p("6.3. After selecting the desired payment system, the user enters the required data in the corresponding data fields. The commissioned payment service provider is entitled to accept payments for the provider. The provider reserves the right to restrict the payment systems offered.")]
}), section({
isExpanded: isPrint,
header: "7. Paid offers for schools: ANTON-school-licence",
content: [p("7.1. Schools can unlock additional functions for school staff, teachers and pupils by purchasing a premium offer."), p("7.2. Only when the order is sent does the school or the customer make a binding offer to conclude a contract with the provider. The provider can accept the offer within a period of 10 working days by sending an order confirmation, an invoice or by activating the product offered."), p("7.3. Only the price information of the provider at the time of the conclusion of the contract is decisive."), p("7.4. The term is shown to the customer when buying. After the contract has been concluded, both parties can terminate the licence at any time at the end of the service period. If it is not cancelled before the end of the service period, it will be extended for another year. Notice of termination must be given by email or in writing."), p("7.5. The scope of services is based on the product description and also becomes part of the contract."), p("7.6. The invoice amount is payable without deductions 14 days after the invoice date."), p("7.7. If the provider does not receive payment within 30 days, the invoice is past due and the provider reserves the right to suspend access to the affected school account(s) and take collection action. Suspension of an account does not relieve the account-holder of its obligation to pay for the account. The provider reserves the right to charge a late fee in the amount of 1% per month or the maximum permitted by law and its reasonable attorney's fees in securing payment of past due amounts."), p("7.8. Schools and institutions may only give teachers or pedagogical staff employed by them access to the teacher and admin functions of the School Licence. A school authority may only register schools under its responsibility to use a school authority licence."), p("7.9 Schools and institutions are obliged to provide truthful information about the number of pupils, teachers and staff of the school and may only allow active members to access the Premium Offer or parts of it."), p("7.10. The Provider shall be entitled to temporarily block Users' access to ANTON in whole or in part and to terminate the School Licence Agreement without notice and with immediate effect if there are reasonable grounds to suspect that users do not belong to the group of persons permitted to use the premium offer or that the offerings are being abused, used to commit unlawful acts or in violation of the rights of third parties, or were used in breach of contract or such use was permitted or unauthorised third parties have obtained knowledge of the access data, in particular the password of an administrator user or other users, because the necessary care in handling this data, in particular the recognised principles of data security, was not observed. The provider will only make use of this right in consideration of the legitimate interests of the user and will inform the school in writing or by email about the blocking."), p("7.11. Schools can mark user accounts that they have created or for which they are responsible for administration for deletion after a transitional period of 60 days. The users - and if necessary their legal guardians - must be informed by the school. Within a period of 60 days, they will be given the opportunity to transfer the data stored in the user account to a new account and to continue using it independently. After this period the user accounts will be automatically deleted.")]
}), section({
isExpanded: isPrint,
header: "8. Accessibility of the offer, limitation of liability",
content: [p("8.1 The provider shall use the current and generally used technologies for its services. In order to be able to use ANTON to the full extent, users must also use these technologies (e.g. current browser technology, web sockets) or use them on their computer or mobile device (e.g. activation of JavaScript). If older technologies or technologies that are not generally in use are used, users may only be able to use ANTON to a limited extent."), p("8.2 With regard to the costs incurred, availability and security of the data connection, the internet services required for the use of ANTON and the equipment necessary for such use shall be the sole responsibility of the user and - if applicable - the school."), p("8.3 The Provider expressly does not warrant that the services offered are suitable for the objectives specifically pursued by the individual user."), p("8.4 Claims of users and customers for damages are excluded. Excluded from this are claims for damages from injury to life, body, health or from the violation of essential contractual obligations (cardinal obligations) as well as the liability for other damages, which are based on an intentional or grossly negligent breach of duty on the part of the provider, his legal representatives or vicarious agents. Material contractual obligations are those whose fulfilment is necessary to achieve the objective of the contract. A \"cardinal obligation\" or \"essential contractual obligations\" are obligations, the fulfilment of which makes the proper execution of the contract possible in the first place and on the observance of which the contractual partner regularly relies and may rely. In the event of data loss, the provider shall be liable at most for the effort required for reconstruction in the event of proper data backup by users and customers."), p("8.5 In case of violation of essential contractual obligations, the provider is only liable for the contract-typical, foreseeable damage if this was caused by simple negligence, unless it is a matter of claims for damages from an injury to life, body or health."), p("8.6 The restrictions of paragraphs 8.4 and 8.5 also apply in favour of the legal representatives and vicarious agents of the provider if claims are made directly against them."), p("8.7 Availability: The online products of the provider are generally available 24 hours a day. However, due to necessary service work on the information system, it may be temporarily unavailable."), p("8.8 Disruptions to access to the internet and data traffic on the internet due to events for which the provider is not responsible and which make access difficult or impossible (e.g. due to firewall configuration) do not affect the provider's claim for remuneration. Any liability of the provider due to unavailability in the cases of clause 8.1 and clause 8.2 is excluded. The right of users and customers to extraordinary termination remains unaffected."), p("8.9 Any further liability for damages other than that provided for in sections 8.4 and 8.5 is excluded, irrespective of the legal nature of the claim asserted. In this respect, the provider is in particular not liable for indirect damages, such as loss of profit and other financial losses of users and customers. The mandatory provisions of the product liability act remain unaffected."), p("8.10. Claims for reimbursement of expenses by users and customers are limited to the amount of interest they have in the fulfilment of the contract.")]
}), section({
isExpanded: isPrint,
header: "9. Indemnification",
content: [p("9.1 The offer may only be used in accordance with these GTC. Users shall in particular not be entitled to reverse engineer, decompile, disassemble, modify or create derivative works based on ANTON or parts thereof; to circumvent protective measures used by the provider or its licensors to protect content that can be accessed via ANTON; copy, store, edit, develop derivative works based on, or in any way modify, any content provided via ANTON; rent out or grant sublicences for its own user account; share its own user account with other persons and/or grant other persons access to ANTON's fee-based services; use ANTON in any other improper manner that violates these GTC."), p("9.2 In the cases described in Section 9.1 above, as well as in all other cases of improper use or violation of this agreement, user agrees to indemnify and hold provider harmless to the extent permitted by applicable law, including reasonable attorneys' fees. In any case, the provider reserves the right to block user accounts without notice, as soon as there is an indication of improper or abusive use and the provider has a legitimate interest in blocking.")]
}), section({
isExpanded: isPrint,
header: "10. Intellectual property rights",
content: [p("10.1 All texts, images and other copyrighted content and works provided by ANTON shall be protected by copyright. Any use not covered by this agreement, in particular for commercial or operational purposes, shall require the prior written consent of the provider."), p("10.2 For content that is expressly made available through a Creative Commons licence, the terms of the applicable Creative Commons licence apply."), p("10.3 The use of all trademarks, brands, designs and business names used by the provider within the scope of the offer also requires the prior consent of the provider in text form.")]
}), section({
isExpanded: isPrint,
header: "11. Content generated by users",
content: [p("11.1 If users generate content themselves, e.g. by creating a learning list, creating a picture or otherwise making materials available via ANTON, they shall be fully responsible for the quality of such content and for any damage resulting therefrom. This shall apply regardless of whether the content in question consists of text, graphics, audio files, computer software or any other format."), p("11.2 Users may only store content suitable for learning and study purposes at ANTON. The provider reserves the right to take action against users who violate this provision. Such action may include, but is not limited to, removal of the content in question, termination of the accounts of the persons concerned, or the taking of further legal action. Prohibited content includes, but is not limited to, content that violates the rights of the provider or third parties, is offensive or commercial in nature, or violates applicable laws and regulations."), p("11.3 When users create or upload content or any other materials to ANTON, they shall grant the provider a worldwide, perpetual, royalty-free licence (with the right to sublicence) to use, copy, reproduce, process, adapt, modify, modify, publish, transmit, display and distribute such content or materials in or by means of any and all media or distribution methods (whether existing or developed at a later date). Additional uses by the provider or other companies or individuals acting as partners of the provider may be made without compensation to users for any content they submit, post or otherwise make available through the service."), p("11.4 By making content available via ANTON, users represent and warrant that such content does not infringe the rights of third parties and that such content does not contain or install any malicious software or offensive material."), p("11.5 The provider does not review all content sent to the service, does not have the opportunity to do so and therefore cannot be responsible for the content, use or effects of such material. The fact that the provider operates the service does not mean, and does not imply, that the provider endorses the material sent to the service or believes that such material is accurate, useful or harmless."), p("11.6 User-generated content, such as learning lists, pictures, writings, etc. may include material that is potentially offensive, indecent or otherwise objectionable, as well as content that may contain technical, factual, spelling or other errors."), p("11.7 The service may contain material that violates or infringes the intellectual property rights or other proprietary rights of others, or where the downloading, copying or use may be subject to additional terms and conditions, written or unwritten. The provider disclaims any liability for any damages resulting from visitors using the service or downloading any posted content from the service. If users discover content or other materials that violate these terms and conditions, there are appropriate features on the service's website that allow users to report such violations to the provider."), p("11.8 The provider respects the intellectual property of others. If you are of the opinion that material published or linked on the website or in ANTON's mobile apps infringes your copyright, please notify us. If necessary, the provider will remove the content in question or deactivate all links to such content. In the event that a user should infringe upon the copyrights or other intellectual property rights of ANTON or others on one or more occasions, the provider may, at its sole discretion, terminate or deny access to or use of the service. In the event of such termination, the provider shall not be obliged in any way to refund any amounts paid in advance by the user concerned.")]
}), section({
isExpanded: isPrint,
header: "12. Final clauses",
content: [
p("12.1 The contractual relationship between the provider and the user or customer is subject to German law as far as legally permissible. If the law of the country in which the consumer has his residence provides for a higher level of consumer protection, this shall remain unaffected."), p("12.2 The provider does not take part in any dispute settlement proceedings before a consumer arbitration board within the meaning of the Consumer Dispute Settlement Act."), p("12.3 The EU-Commission offers a platform for online dispute resolution (ODR) at:"), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=EN");
}).css({
marginBottom: "1em",
marginTop: "0em"
}), p("12.4 The contract remains binding in its remaining parts even if individual points are legally ineffective. In place of the ineffective points, the legal regulations, if any, shall apply. However, if this would represent an unreasonable hardship for one of the contracting parties, the contract as a whole shall become invalid."), p("12.5 The provider reserves the right to change these general terms and conditions for objective reasons (e.g. due to changes in the legal situation or the provider's own offer, technical developments, etc.). This applies in particular if new offers of the provider require new regulations."), p("12.6 The amended GTC will be sent to the user or customer in advance by email or by another suitable form or displayed on the website and in the mobile apps. If the user does not object to the amended GTC within six weeks, they shall be deemed accepted. In the event of an objection, the provider may block the user's user account, in which case any payments already made will be refunded pro rata in relation to the remaining term. The provider will point out these legal consequences separately in the message with the amended GTC.")
]
}), section({
isExpanded: isPrint,
header: "13. Additional Provisions Applicable for Residents of the United States of America",
content: [p("13.1 If the user is a resident of the United States of America the provisions of this section 13 shall be applicable in addition to the provisions above or where in conflict with the provisions above, the user may choose which provisions shall be applicable."), p("13.2 Creation of a User Account and Conclusion of the Contract"), p("The following additional provisions shall apply to Section 3 of the GTC:"), p("3.9 The user agrees and acknowledges that the user will never access or use another person’s account without permission."), p("3.10 The user agrees and acknowledges that the user will not transfer their account to another person or entity without the provider’s prior written approval."), p("3.11 If the user selects a username or similar identifier for their account, the provider reserves the right to remove or reclaim it if the provider, in its sole discretion, believes it is inappropriate or violates the rights of a third party (including, but not limited to any applicable trademarks)."), p("13.3 Content and Accessibility of the Service and Liability"), p("The following shall replace and supersede Section 8 of the GTC:"), p("8.1 For providing its service, the provider uses the technologies currently and commonly used in the field. To be able to make full use of the services offered by the provider, the user must likewise use these technologies (e.g. up-to-date browser technologies, web sockets) or enable their use on its computer (e.g. activate Java Script). If older or not commonly used technologies are used, the user might only be able to make limited use of the services provided by the provider. The user is solely liable for any loss or damage incurred by the user, the provider or any third party caused by the user’s failure to use up-to-date technologies when accessing ANTON."), p("13.4 Indemnification"), p("The following additional provisions shall apply to Section 9 of the GTC:"), p("9.1 The offer may only be used in accordance with these GTC. Users shall in particular not be entitled to reverse engineer, decompile, disassemble, modify or create derivative works based on ANTON or parts thereof; to circumvent protective measures used by the provider or its licensors to protect content that can be accessed via ANTON; copy, store, edit, develop derivative works based on, or in any way modify, any content provided via ANTON; rent out or grant sublicences for its own user account; share its own user account with other persons and/or grant other persons access to ANTON's fee-based services; not to download or copy any account information for the benefit of any other party; not to collect or make any use of any product listings, descriptions or prices; not to resell or make any commercial use of ANTON or its contents; not to reproduce, duplicate, copy, sell, resell or otherwise exploit ANTON for any commercial purpose without express written consent of the provider; not to use any meta tags or any other “hidden tag” utilizing the ANTON name or any of the provider’s trademarks without the express written consent of the provider or use ANTON in any other improper manner that violates these GTC."), p("9.3 The user agrees not to circumvent, disable or otherwise interfere with security-related features of ANTON or any associated websites and/or tablet and/or mobile applications or features that prevent or restrict use or copying of any content or enforce limitations on ANTON’s use."), p("9.4 The user agrees not to use or launch any automated system, including without limitation, “robots,” “spiders,” or “offline readers,” that accesses ANTON in a manner that sends more request messages to the provider’s servers in a given period of time than a human can reasonably produce in the same period by using a conventional on-line web browser. Notwithstanding the foregoing, the provider grants the operators of public search engines permission to use spiders to copy materials from the site for the sole purpose of and solely to the extent necessary for creating publicly available searchable indices of the materials, but not caches or archives of such materials. The provider reserves the right to revoke these exceptions either generally or in specific cases. The user agrees not to collect or harvest any personally identifiable information, including account names, from ANTON, nor to use the communication systems provided by ANTON (e.g., comments, email) for any commercial solicitation purposes. The user agrees not to solicit, for commercial purposes, any ANTON users with respect to their content. In all use of ANTON and all associated services, website and mobile and/or tablet applications, the user agrees to comply with all applicable laws and regulations."), p("13.5 Final Clauses"), p("The following shall replace and supersede Section 12 of the GTC and any contradictory provisions elsewhere in the GTC:"), p("12.1 Agreements between the provider and the user shall be subject to the laws of the Federal Republic of Germany. The UN Convention on Contracts for the International Sale of Goods (CISG) shall not apply. The parties agree to exclude those provisions of the German international civil law, that may cause the exclusive application of any other jurisdiction."), p("12.4 and 12.5 The provider may, in its sole discretion, modify or revise the GTC at any time, and the user agrees to be bound by all such modifications or revisions. The modified GTC will be posted at this address and so we encourage users to periodically check these GTC. If the user does not agree to any of these terms, the user should immediately stop accessing and/or using this website or any of the other ANTON services or mobile and/or tablet applications. If the user has paid for premium services and objects to the GTC, please notify the provider immediately and we will close the applicable account and issue the applicable user a full refund for the remainder of the applicable term."), p("The following additional provisions shall apply to Section 12 of the GTC:"), p("12.6 Any failure of the provider to exercise or enforce any right or provision of the GTC or the privacy statement shall not constitute a waiver of such right or provision. Should individual points of these GTC or the privacy statement be legally invalid, the remaining portions hereof shall be unaffected and remain binding."), p("12.7 The user and the provider acknowledge and agree that these GTC and any other legal notices published by the provider and incorporated herein shall constitute the entire agreement between the user and the provider."), p("12.8 The parties agree on the exclusive jurisdiction of the courts at the place of business of the provider, if the user does not have a residence in Germany."), p("12.9 These GTC and any rights and licences granted hereunder, may not be transferred or assigned by the user, but may be assigned by the provider without restriction."), p("12.10 The user agrees that regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to the GTC must be filed within one (1) year after such claim or cause of action arose or be forever barred.")]
}));
};
})();
pages/static/terms/div/divEs/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. General",
content: [p("ANTON te da la bienvenida - ¡Que alegría que estés aquí! ANTON es una aplicación de aprendizaje para estudiantes, docentes y familias. ANTON es desarrollado y proporcionado por solocode GmbH, Mehringdamm 61, 10961 Berlín (en adelante: el Proveedor)."), p("Puedes usar ANTON en www.anton.app y también a través de las aplicaciones móviles para Android, iOS y Amazon Fire."), p("Las presentes condiciones generales de uso y de negocio (en adelante: “CGC”) constituyen el marco legal definitivo de todos los servicios de ANTON destinados a los consumidores o a las escuelas (en adelante: “el servicio”). Los acuerdos subsidiarios verbales o las enmiendas al contrato sólo son efectivos si son confirmados por el proveedor por escrito o por correo electrónico."), p("Estas condiciones generales se aplican por igual a la oferta gratuita y a las ofertas adicionales sujetas a un cargo.")]
}), section({
isExpanded: isPrint,
header: "2. Servicios ofrecidos, ámbito de aplicación",
content: [p("2.1. ANTON es un sistema de aprendizaje en línea que permite a los estudiantes estudiar para la escuela de una manera simple, moderna y eficiente."), p("2.2. Los docentes y tutores de la familia pueden usar ANTON para guiar y apoyar a los y las estudiantes en su aprendizaje."), p("2.3. Las escuelas pueden usar ANTON como parte de sus lecciones, como tarea o como una oportunidad de aprendizaje adicional."), p("2.4. Muchas funciones están disponibles para el usuario de forma gratuita. Los servicios que están sujetos a un cargo están claramente indicados como tales y pueden utilizarse después de hacer el pago de los respectivos honorarios o precios."), p("2.5. El proveedor se reserva el derecho de hacer accesibles partes de su oferta únicamente a los docentes u otros usuarios encargados de tareas educativas."), p("2.6 El usuario está obligado a no proporcionar ninguna información no veraz al registrarse en línea, en particular en lo que respecta a su función como estudiante o docente y a su afiliación escolar. Si el usuario proporciona datos falsos, el proveedor puede, en la medida en que se haya celebrado un contrato, retirarse del mismo. La retirada es - si es posible - declarada por escrito. La forma escrita también se cumple enviando un correo electrónico. Si se proporcionan datos falsos, se puede conceder a un administrador de la escuela el derecho a gestionar la cuenta de usuario creada con datos falsos, a ver la clave de acceso y a avtivar el proveso de eliminación del usuario."), p("2.7. Además del servicio gratuito, los consumidores también pueden activar ANTON-Plus, un servicio de pago con funciones adicionales."), p("2.8. Las escuelas pueden sacar una Licencia Escolar ANTON y así activar más funciones que mejoren el uso en la escuela. Además de la Licencia Escolar ANTON, las escuelas pueden activar ANTON-Plus para todos los alumnos y profesores de la escuela.")]
}), section({
isExpanded: isPrint,
header: "3. Oferta gratuita y ANTON-Plus",
content: [p("3.1. El usuario puede crear una cuenta de usuario con ANTON de forma gratuita."), p("3.2. Después de crear una cuenta de usuario, se puede hacer uso de las funciones básicas gratuitas (“contrato básico”). Sin embargo, el usuario no tiene ningún derecho legal a la libre disponibilidad de esos contenidos y funciones."), p("3.3. Los contratos básicos se pueden rescindir en cualquier momento con un preaviso de 14 días."), p("3.4. El proveedor también ofrece a los consumidores el servicio facturable ANTON-Plus (“contrato premium”) según varios modelos de precios. En la medida en que los precios se indican en ANTON, éstos incluyen el impuesto sobre el valor añadido legal aplicable en ese momento."), p("3.5. Al reservar un contrato de prima, el usuario recibe acceso a funciones adicionales dentro del ámbito del respectivo contrato de prima para todo el período del contrato."), p("3.6. El tipo de facturación, el precio y el plazo se enumeran en cada caso como parte del proceso de pedido y se resumen en su totalidad antes de completar el pedido. El contrato de prima entra en vigor con un clic en el botón “comprar” (o similar)."), p("3.7. Los contratos de prima se celebran por el plazo fijo elegido por el usuario. Los precios para todo el período deben ser pagados al concluir el contrato."), p("3.8. El Proveedor se comunicará con el Usuario principalmente a través del chat de soporte localizado en la aplicación o - si se ha proporcionado una dirección de correo electrónico - también a través de ésta, y puede en particular notificar al Usuario las declaraciones de intención relevantes para el contrato (por ejemplo, avisos de terminación) por este medio. El usuario puede proporcionar al Proveedor una dirección de correo electrónico actual en cualquier momento.")]
}), section({
isExpanded: isPrint,
header: "4. Duración, renovación y terminación de los contratos para los consumidores",
content: [p("4.1. Mientras no se haya celebrado ningún contrato de prima con gastos, el usuario podrá rescindir el contrato básico en cualquier momento de conformidad con el apartado 3.3."), p("4.2. Salvo que se indique lo contrario en el momento de la celebración del contrato, los contratos de prima de ANTON Plus son suscripciones continuas que se prorrogan automáticamente de forma recurrente por el plazo convenido contractualmente en cada caso, a menos que el usuario o el proveedor rescinda el respectivo contrato de prima hasta 24 horas antes del vencimiento del plazo correspondiente. Los honorarios por los plazos de renovación también se facturarán por adelantado. Todos los contratos pueden ser rescindidos al final del respectivo período."), p("4.3. Los contratos de prima que se adquieren mediante “pago único” se designan expresamente como de duración limitada o ilimitada. Si están limitados en el tiempo, el contrato termina al final del plazo sin necesidad de rescindirlo. Si son ilimitados, los siguientes párrafos se aplican a ellos en consecuencia."), p("4.4. La cancelación de los contratos Premium adquiridos a través de la Apple App Store, la Google Play Store o a través de Paypal se lleva a cabo de acuerdo con los términos y condiciones aplicables del proveedor de servicios respectivo. El procedimiento exacto se describe en la página web de la Apple App Store, la Google Play Store o Paypal."), p("4.5. El derecho de rescisión por causa justificada no se ve afectado.")]
}), section({
isExpanded: isPrint,
header: "5. Derecho de desistimiento de los consumidores",
content: [
p("5.1. Los consumidores tienen derecho a cancelar este contrato dentro de los 14 días sin dar ninguna razón. El período de revocación es de 14 días a partir del día de la conclusión del contrato. Para ejercer el derecho de rescisión, el consumidor debe informar al proveedor (solocode GmbH, Mehringdamm 61, 10961 Berlín, Alemania, correo electrónico: support@anton.app) de su decisión de rescindir el presente contrato mediante una declaración clara (por ejemplo, una carta o un correo electrónico enviado por correo). A tal fin, los consumidores pueden utilizar el formulario modelo de retiro adjunto, que, sin embargo, no es obligatorio."), p("5.2. Para cumplir con el plazo de revocación, basta con que la notificación del ejercicio del derecho de revocación se envíe antes de que expire el plazo de revocación."), Button("Formulario para revocación").tap(function(){
return inc("../../_shared/openUrl/open")("https://files.anton.app/files/ANTON-formulario-para-revocacion.pdf");
}).css({
marginBottom: "1em",
marginTop: "-0.5em"
}), p("5.3. Consecuencias de la rescisión: Si los consumidores se retiran de este contrato, el proveedor deberá reembolsar todos los pagos recibidos del consumidor, incluidos los gastos de entrega (con excepción de los gastos adicionales derivados del hecho de que el consumidor haya elegido un tipo de entrega distinto de la entrega estándar más barata ofrecida por el proveedor) sin demora y, a más tardar, en un plazo de 14 días a partir de la fecha en que el proveedor haya recibido la notificación de la rescisión de este contrato. Para este reembolso, el Proveedor utilizará el mismo medio de pago que el consumidor utilizó para la transacción original, a menos que se acuerde expresamente lo contrario; en ningún caso se cobrarán derechos por este reembolso.")
]
}), section({
isExpanded: isPrint,
header: "6. Modalidades de pago",
content: [p("6.1. A menos que se indique lo contrario en el proceso de pedido, los honorarios de los contratos de prima deben pagarse por adelantado durante todo el período de vigencia del contrato."), p("6.2. El pago se puede realizar a través de todos los métodos de pago que se detallan en el sitio web sin cargos adicionales. Como parte del proceso de pago, el Proveedor encarga a un proveedor de servicios de pago externo que procese los datos de pago introducidos por el Usuario."), p("6.3. Después de seleccionar el sistema de pago deseado, el usuario introduce los datos necesarios en los campos de datos correspondientes. El proveedor de servicios de pago encargado está autorizado a aceptar pagos en nombre del proveedor. El proveedor se reserva el derecho de restringir los sistemas de pago ofrecidos.")]
}), section({
isExpanded: isPrint,
header: "7. Ofertas de pago para las escuelas: Licencia escolar ANTON",
content: [p("7.1. Las escuelas pueden desbloquear características adicionales para el personal de la escuela, los docentes y los estudiantes mediante la compra de una oferta premium."), p("7.2. Sólo con el envío del pedido, la escuela o el cliente hace una oferta vinculante para concluir un contrato con el proveedor. El proveedor puede aceptar la oferta en un plazo de 2 días hábiles enviando una confirmación de pedido, una factura o activando la oferta."), p("7.3. Las cotizaciones del proveedor en el momento de la celebración del contrato son exclusivamente decisivas."), p("7.4. El término se muestra al cliente en el momento de la compra. La licencia puede ser rescindida por cualquiera de las partes en cualquier momento después de la conclusión del contrato al final del período de ejecución. Si no se termina antes del final del período de ejecución, se prorrogará un año más. La notificación de la terminación debe hacerse por correo electrónico o por escrito."), p("7.5. El alcance de los servicios se basa en la descripción del producto y también forma parte del contrato."), p("7.6. El importe de la factura debe pagarse sin deducciones 14 días después de la fecha de la factura."), p("7.7. El cliente se encuentra en mora si no realiza el pago en respuesta a un recordatorio enviado por el proveedor después de la fecha de vencimiento. Incluso sin un recordatorio, el incumplimiento se producirá a más tardar 30 días después de la fecha de vencimiento y la recepción de la factura."), p("7.8. Las escuelas e instituciones sólo pueden permitir que los profesores o el personal pedagógico empleado por ellos accedan a las funciones de profesor y administrador de la Licencia Escolar. La junta escolar sólo puede registrar escuelas bajo su patrocinio para el uso de una licencia de la junta escolar."), p("7.9. Las escuelas e instituciones están obligadas a proporcionar información veraz sobre el número de estudiantes, profesores y personal de la escuela y sólo pueden permitir que los miembros activos accedan a la oferta de la prima o a partes de ella."), p("7.10. El proveedor tiene derecho a bloquear temporalmente el acceso de los usuarios a ANTON, en su totalidad o en parte, y a rescindir el acuerdo de licencia escolar sin previo aviso con efecto inmediato si existe una sospecha razonable de que los usuarios no pertenecen al grupo de personas autorizadas a utilizar el servicio, o que el servicio ha sido mal utilizado, utilizado para cometer actos ilegales o en violación de los derechos de terceros, o se han utilizado en incumplimiento de contrato o se ha permitido ese uso, terceros no autorizados han tenido conocimiento de los datos de acceso, en particular de la contraseña de un usuario administrador o de otros usuarios, porque no se ha observado el cuidado necesario en el manejo de esos datos, en particular los principios reconocidos de seguridad de los datos. El proveedor sólo ejercerá este derecho teniendo en cuenta los intereses legítimos del usuario y notificará a la escuela el bloqueo, ya sea por escrito, o por correo electrónico."), p("7.11. Las escuelas pueden marcar las cuentas de usuario que han creado, o que son responsables de administrar, para que sean suprimidas después de un período de transición de 60 días. Los usuarios, y si es necesario sus tutores legales, deben ser informados por las escuelas. Se les dará la oportunidad de transferir los datos almacenados en la cuenta del usuario a una nueva cuenta en un plazo de 60 días y de seguir utilizándolas de manera independiente. Después de este período, las cuentas de usuario se eliminarán automáticamente.")]
}), section({
isExpanded: isPrint,
header: "8. Accesibilidad de la oferta, limitación de la responsabilidad",
content: [p("8.1. El proveedor utiliza para sus servicios las tecnologías actuales y de uso general. Para poder utilizar ANTON en toda su extensión, los usuarios también deben utilizar estas tecnologías (por ejemplo, la tecnología actual de los navegadores, los webckets) o permitir su uso en su ordenador o dispositivo móvil (por ejemplo, la activación de JavaScript). Si se utilizan tecnologías más antiguas o tecnologías que no son de uso general, el usuario sólo podrá utilizar ANTON de forma limitada."), p("8.2. Los servicios de Internet necesarios para el uso de ANTON y el equipo requerido para este fin son responsabilidad exclusiva del usuario y, en su caso, de la escuela, en lo que respecta a los costos incurridos, la disponibilidad y la seguridad de la conexión de datos."), p("8.3. El proveedor no garantiza expresamente que los servicios ofrecidos sean adecuados para los objetivos específicamente perseguidos por el usuario individual."), p("8.4. Quedan excluidas las reclamaciones de los usuarios y clientes por daños y perjuicios. Quedan excluidas las reclamaciones por daños y perjuicios derivados de lesiones a la vida, la integridad física o la salud o del incumplimiento de obligaciones contractuales esenciales (obligaciones cardinales), así como la responsabilidad por otros daños y perjuicios basados en el incumplimiento intencional o por negligencia grave de las obligaciones por parte del proveedor, sus representantes legales o agentes indirectos. Las obligaciones contractuales materiales son aquellas cuyo cumplimiento es necesario para alcanzar el objetivo del contrato. Una “obligación cardinal” u “obligaciones contractuales esenciales” son obligaciones cuyo cumplimiento hace posible, en primer lugar, la correcta ejecución del contrato y en cuya observancia se basa y puede confiar regularmente la parte contractual. En caso de pérdida de datos, el Proveedor será responsable, como máximo, del esfuerzo necesario para la reconstrucción en caso de que los usuarios y clientes hagan una copia de seguridad adecuada de los datos."), p("8.5. En caso de incumplimiento de obligaciones contractuales importantes, el proveedor sólo será responsable de los daños previsibles típicos del contrato si dichos daños fueron causados por simple negligencia, a menos que las reclamaciones por daños se basen en lesiones a la vida, el cuerpo o la salud."), p("8.6. Las restricciones de los párrafos 8.4 y 8.5 se aplicarán también a favor de los representantes legales y agentes indirectos del proveedor si se presentan reclamaciones directamente contra ellos."), p("8.7. Disponibilidad: Los productos en línea del proveedor están generalmente disponibles las 24 horas del día. Sin embargo, debido a la labor de servicio necesaria en el sistema de información, puede haber períodos de no disponibilidad."), p("8.8. Las perturbaciones del acceso a Internet y del tráfico de datos en Internet debidas a hechos de los que el proveedor no es responsable y que dificultan o imposibilitan el acceso (por ejemplo, debido a la configuración de un cortafuegos) no afectarán a la reclamación de remuneración del Proveedor. Queda excluida la responsabilidad del proveedor por falta de disponibilidad en los casos de la sección 8.1 y la sección 8.2. El derecho de los usuarios y clientes a una terminación extraordinaria no se ve afectado."), p("8.9. Queda excluida cualquier otra responsabilidad por daños que no esté prevista en las secciones 8.4 y 8.5, independientemente de la naturaleza jurídica de la reclamación presentada. A este respecto, el proveedor no será responsable, en particular, de los daños indirectos, como el lucro cesante y otras pérdidas financieras de los usuarios y clientes. Las disposiciones obligatorias de la Ley de responsabilidad por productos defectuosos no se ven afectadas."), p("8.10. Las reclamaciones de reembolso de los gastos de los usuarios y clientes se limitan al importe del interés que tienen en el cumplimiento del contrato."), p("8.11. Los usuarios y clientes indemnizan al proveedor por todas las reclamaciones presentadas por otros usuarios y clientes u otros terceros contra el proveedor debido a la violación de sus derechos por el uso de las ofertas del usuario o cliente respectivo o de los usuarios admitidos por el proveedor. En este contexto, el usuario o cliente también asume los costos de la defensa legal necesaria del proveedor, incluyendo todos los honorarios del tribunal y del abogado. Esto no se aplica si el usuario o cliente no es responsable de la infracción.")]
}), section({
isExpanded: isPrint,
header: "9. Indemnización",
content: [p("9.1. La oferta sólo puede ser utilizada de acuerdo con estos TCG. En particular, los usuarios no están autorizados a realizar ingeniería inversa, descompilar, desensamblar, modificar o desarrollar obras derivadas basadas en ANTON o cualquier parte de ella; a eludir las medidas de protección utilizadas por el proveedor o sus licenciatarios para proteger el contenido al que se puede acceder a través de ANTON; Copiar, almacenar, editar, desarrollar trabajos derivados basados en, o modificar de cualquier forma, cualquier contenido puesto a disposición a través de ANTON; Alquilar o sublicenciar la cuenta de usuario; Compartir la cuenta de usuario con otras personas y/o conceder a otras personas el acceso a los servicios de pago de ANTON; Utilizar ANTON de cualquier otra forma impropia que viole estas TAS."), p("9.2. En los casos descritos en la sección 9.1, así como en todos los demás casos de uso indebido, el usuario se compromete a mantener indemne al proveedor. En cualquier caso, el proveedor se reserva el derecho de bloquear las cuentas de los usuarios sin previo aviso en cuanto haya indicios de uso indebido o abusivo y el proveedor tenga un interés legítimo en el bloqueo.")]
}), section({
isExpanded: isPrint,
header: "10. Derechos de propiedad intelectual",
content: [p("10.1. Todos los textos, imágenes y otros contenidos y obras con derechos de autor que se ponen a disposición en el marco de ANTON están protegidos por derechos de autor. Toda utilización no prevista en el contrato, en particular con fines comerciales u operativos, requiere el consentimiento previo del proveedor en forma de texto."), p("10.2. En el caso de los contenidos que se ponen a disposición de forma expresa a través de una licencia Creative Commons, se aplican los términos de la licencia Creative Commons aplicable."), p("10.3. Todo uso de todas las marcas, diseños y nombres comerciales utilizados por el proveedor en el marco de la oferta requiere también el consentimiento previo del proveedor por escrito")]
}), section({
isExpanded: isPrint,
header: "11. Contenido generado por el usuario",
content: [p("11.1. Si los usuarios generan contenidos por sí mismos, por ejemplo, crean una lista de aprendizaje, crean una imagen o ponen a disposición materiales a través de ANTON, son totalmente responsables de la naturaleza de estos contenidos y de cualquier daño resultante. Esto es así independientemente de que el contenido en cuestión consista en texto, gráficos, archivos de audio, programas informáticos o cualquier otro formato."), p("11.2. Los usuarios sólo pueden almacenar en ANTON contenidos que sean adecuados para el aprendizaje y el estudio. El proveedor se reserva el derecho de tomar medidas contra los usuarios que violen esta disposición. Esas medidas pueden incluir, entre otras, la eliminación del contenido en cuestión, la cancelación de las cuentas de las personas en cuestión o la adopción de otras medidas legales. El Contenido prohibido incluye, pero no se limita a, el contenido que viola los derechos del proveedor o de terceros, es de naturaleza ofensiva o comercial, o viola las leyes y reglamentos aplicables."), p("11.3. Cuando los usuarios crean o cargan contenido o cualquier otro material a ANTON, conceden al proveedor una licencia mundial, perpetua y libre de regalías (con derecho a sublicenciar) para utilizar, copiar, reproducir, procesar, adaptar, modificar, publicar, transmitir, mostrar y distribuir dicho contenido o material en o a través de todos los medios o métodos de distribución (existentes o desarrollados posteriormente). Se permiten usos adicionales por parte del proveedor u otras compañías o individuos que actúen como afiliados del proveedor sin compensación a los usuarios por el contenido que envíen, publiquen o pongan a disposición de cualquier otro modo a través del Servicio."), p("11.4. Al poner a disposición contenidos a través de ANTON, los usuarios declaran y garantizan que no están infringiendo los derechos de terceros y que los contenidos no contienen ni instalan malware o material censurable."), p("11.5. El proveedor no revisa ni puede revisar todo el material publicado en el servicio y, por lo tanto, no puede ser responsable del contenido, el uso o los efectos de dicho material. El hecho de que el proveedor opere el servicio no significa, ni implica, que el proveedor respalde el material publicado en el servicio, o que considere que dicho material no contiene errores, es útil o no es perjudicial."), p("11.6. El contenido generado por el usuario, como las listas de aprendizaje, puede contener material potencialmente ofensivo, indecente o de otro modo objetable, así como contenido en el que pueden producirse errores técnicos, de hecho, ortográficos o de otro tipo."), p("11.7. El Servicio puede contener material que viole o infrinja la propiedad intelectual y otros derechos de propiedad de terceros, o en el que la descarga, la copia o el uso puedan estar sujetos a términos y condiciones adicionales escritos o no escritos. El proveedor renuncia a toda responsabilidad por cualquier daño que resulte del uso del servicio por parte de los visitantes, o de la descarga de cualquier contenido allí publicado. Si los usuarios descubren contenidos u otros materiales que violan estos términos y condiciones, el sitio web del provedor tinen funciones que les permiten informar al proveedor."), p("11.8. El Proveedor respeta la propiedad intelectual de los demás. Si cree que el material publicado o enlazado en el sitio web de ANTON o en las aplicaciones para móviles infringe sus derechos de autor, por favor notifíquenoslo. El proveedor, si es necesario, eliminará el contenido ofensivo o desactivará todos los enlaces al contenido. Si un usuario comete una infracción única o repetida de los derechos de autor u otros derechos de propiedad intelectual de ANTON u otros, el Proveedor podrá, a su entera discreción, cancelar o denegar el acceso o el uso del Servicio. En el caso de dicha terminación, el Proveedor no estará obligado en modo alguno a reembolsar las cantidades pagadas por adelantado por el usuario en cuestión.")]
}), section({
isExpanded: isPrint,
header: "12. Disposiciones finales",
content: [
p("12.1. La relación contractual entre el proveedor y el usuario o cliente está sujeta a la ley alemana, en la medida en que sea legalmente permisible. Si la ley del país en el que está domiciliado el consumidor prevé una mayor protección del consumidor, ésta no se verá afectada."), p("12.2. El proveedor no participa en ningún procedimiento de resolución de controversias ante una junta de arbitraje de consumidores en el sentido de la Ley de resolución de controversias de consumidores."), p("12.3. La Comisión Europea ofrece una plataforma para la solución extrajudicial de controversias en línea (plataforma ODR), a la que se puede acceder en:"), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=ES");
}).css({
marginBottom: "1em"
}), p("12.4. El contrato seguirá siendo vinculante en sus partes restantes, incluso si algunos puntos son jurídicamente inválidos. Los puntos inválidos serán sustituidos por las disposiciones legales, si las hubiera. Sin embargo, en la medida en que esto represente una dificultad excesiva para una de las partes contratantes, el contrato en su conjunto quedará sin efecto."), p("12.5. El proveedor se reserva el derecho de modificar estos TCG por razones objetivas (por ejemplo, debido a cambios en la situación jurídica o en la propia oferta del proveedor, avances técnicos, etc.). Esto se aplica en particular si las nuevas ofertas del proveedor requieren nuevas regulaciones."), p("12.6. Los TCG enmendados se enviarán al usuario o cliente por adelantado por correo electrónico o por medio de otro formulario adecuado o se mostrarán en el sitio web y en las aplicaciones móviles. Si el usuario no se opone a los TCG modificados en el plazo de seis semanas, se considerarán aceptados. En caso de objeción, el Proveedor puede bloquear la cuenta del usuario, por lo que los pagos ya efectuados se reembolsarán proporcionalmente al plazo restante. El proveedor se referirá a estas consecuencias jurídicas por separado en el mensaje con el TGC modificado.")
]
}));
};
})();
pages/static/terms/div/divFr/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Généralités",
content: [p("Bienvenue sur ANTON ! ANTON est une application d'apprentissage gratuite pour les élèves, les enseignant·es et les parents. ANTON est développée et fournie par solocode GmbH, Mehringdamm 61, 10961 Berlin (ci-après dénommé le fournisseur)."), p("Vous pouvez utiliser ANTON sur www.anton.app et aussi via les applications mobiles pour Android, iOS et Amazon Fire."), p("Les présentes Conditions Générales de Vente et d'Utilisation (ci-après dénommées “CGU”) constituent le cadre juridique définitif de l'ensemble des services ANTON destinés aux consommateurs ou aux écoles (ci-après dénommé “le Service”). Les accords collatéraux oraux ou les modifications contractuelles ne sont efficaces que s'ils sont confirmés par le fournisseur par écrit ou par courrier électronique. En cas de différence entre la version allemande et une version traduite des Conditions générales d’utilisation, la version allemande prévaut."), p("Les présentes CGU s'appliquent aussi bien à l'offre gratuite qu'aux offres supplémentaires payantes.")]
}), section({
isExpanded: isPrint,
header: "2. Services offerts, champ d'application",
content: [p("2.1 ANTON est un système d'apprentissage en ligne qui permet aux élèves d'apprendre pour l'école d'une manière simple, moderne et efficace."), p("2.2 Les enseignant·es et les parents peuvent utiliser ANTON pour guider et soutenir les élèves dans leur apprentissage."), p("2.3 Les écoles peuvent utiliser ANTON dans le cadre de leurs cours, comme devoir ou comme outil d'apprentissage supplémentaire."), p("2.4 De nombreuses fonctions sont mises gratuitement à la disposition des utilisateur·rices. Les services payants sont clairement identifiés comme tels et peuvent être utilisés contre le paiement des frais ou prix respectifs prévus."), p("2.5 Le fournisseur se réserve le droit de rendre certaines parties de son offre accessibles uniquement aux enseignant·es ou aux autres utilisateur·rices chargé·es de tâches éducatives."), p("2.6 L'utilisateur·rice est tenu·e de ne pas donner d'informations mensongères lors de son inscription en ligne, notamment en ce qui concerne son rôle d'élève ou d'enseignant·e et son affiliation scolaire. Si l'utilisateur·rice fournit de fausses données, le fournisseur peut se retirer du contrat, si un contrat a été conclu. Le retrait est - si possible - déclaré par écrit. La forme écrite est également valable par l'envoi d'un courrier électronique. Si des données erronées sont fournies, un·e administrateur·rice de l'école peut être autorisé·e à gérer ce compte d'utilisateur·rice créé sous de fausses données, à consulter le code d'enregistrement et à engager la suppression du compte."), p("2.7 En plus de l'offre gratuite, les consommateur·rices peuvent également activer ANTON-Plus, un service payant doté de fonctions supplémentaires."), p("2.8 Les écoles peuvent conclure une licence scolaire ANTON et ainsi activer des fonctions supplémentaires qui améliorent l'utilisation du service dans les écoles. En plus de la licence scolaire ANTON, les écoles peuvent également débloquer ANTON-Plus pour tou·tes les élèves et enseignant·es de l'école.")]
}), section({
isExpanded: isPrint,
header: "3. Offre gratuite et ANTON-Plus",
content: [p("3.1 L'utilisateur·rice peut créer gratuitement un compte sur ANTON."), p("3.2 Une fois qu'un compte d'utilisateur·rice a été créé, l'utilisation des fonctions de base gratuites est disponible (“contrat de base”). Toutefois, l'utilisateur·rice ne peut prétendre à la libre disponibilité de ces contenus et fonctions."), p("3.3 Les contrats de base peuvent être résiliés à tout moment avec un préavis de 14 jours."), p("3.4 En outre, le fournisseur doit proposer aux consommateur·rices le service ANTON-Plus (“Contrat Premium”), qui est payant, selon différents modèles de prix. Les prix indiqués par ANTON comprennent la taxe applicable sur la valeur ajoutée légale."), p("3.5 En concluant un contrat Premium, l'utilisateur·rice a accès à des fonctions supplémentaires dans le cadre du contrat Premium correspondant pendant toute la durée du contrat."), p("3.6 Le type de règlement, le prix et le délai sont précisés dans chaque cas au cours du processus de commande et sont entièrement résumés avant que la commande ne soit terminée. Le contrat Premium est conclu en cliquant sur le bouton “Payer maintenant” (ou similaire)."), p("3.7 Les contrats Premium sont conclus pour la durée déterminée choisie par l'utilisateur·rice. Les prix pour toute la durée sont dus à la conclusion du contrat."), p("3.8 Le fournisseur communiquera avec l'utilisateur·rice principalement par le biais du chat d'assistance contenu dans l'application ou - si une adresse électronique a été fournie - également par cette adresse et peut notamment communiquer à l'utilisateur·rice des déclarations d'intention pertinentes pour le contrat (par exemple, des annulations) de cette manière. L'utilisateur·rice peut transmettre au fournisseur une adresse électronique actuelle à tout moment.")]
}), section({
isExpanded: isPrint,
header: "4. Durée, renouvellement et résiliation des contrats pour les consommateur·rices",
content: [p("4.1 Tant qu'aucun contrat Premium payant n'a été conclu, l'utilisateur·rice peut résilier le contrat de base à tout moment conformément au point 3.3."), p("4.2 Sauf indication contraire lors de la conclusion du contrat, les contrats Premium ANTON-Plus sont des abonnements continus qui sont automatiquement renouvelés de manière récurrente pour la durée contractuelle convenue, à moins que l'utilisateur·rice ou le fournisseur ne résilie le contrat Premium respectif au moins 48 heures avant la fin de la durée respective. Les frais pour les périodes de renouvellement sont également facturés à l'avance. Tous les contrats peuvent être résiliés à la fin de leur durée respective."), p("4.3 Les contrats Premium acquis par “paiement unique” sont expressément désignés comme étant limités ou illimités dans le temps. S'ils sont limités dans le temps, le contrat se termine à la fin du terme sans qu'il soit nécessaire de le résilier. S'ils sont illimités dans le temps, les paragraphes suivants s'appliquent en conséquence."), p("4.4 La résiliation des contrats Premium achetés sur l'Apple App Store, le Google Play Store ou Paypal est soumise aux conditions générales de vente du prestataire de services respectif. La procédure exacte est décrite sur le site web de l'Apple App Store, du Google Play Store ou de Paypal."), p("4.5 Le droit de résiliation pour motif valable reste inchangé.")]
}), section({
isExpanded: isPrint,
header: "5. Droit de rétractation des consommateur·rices",
content: [p("5.1 Les consommateur·rices ont le droit de résilier le présent contrat dans un délai de 14 jours sans avoir à en indiquer les raisons. Le délai de révocation est de 14 jours à compter de la date de conclusion du contrat. Pour exercer son droit de révocation, le·la consommateur·rice doit informer le fournisseur (solocode GmbH, Mehringdamm 61, 10961 Berlin, Allemagne, e-mail : support@anton.app) de sa décision de révoquer ce contrat au moyen d'une déclaration claire (par exemple, un e-mail ou une lettre envoyé par la poste)."), p("5.2 Pour respecter le délai de révocation, il suffit que la notification de l'exercice du droit de révocation soit envoyée avant la fin du délai de révocation."), p("5.3 Conséquences de la rétractation : Si le·la consommateur·rice se rétracte du présent contrat, le fournisseur doit rembourser tous les paiements reçus du·de la consommateur·rice, y compris les frais de livraison (à l'exception des coûts supplémentaires résultant du choix par le·la consommateur·rice d'un mode de livraison autre que la livraison standard la moins chère proposée par le fournisseur), sans délai et au plus tard dans les 14 jours suivant la date à laquelle le fournisseur a reçu la notification de la rétractation du présent contrat. Pour ce remboursement, le fournisseur utilise le même moyen de paiement que celui utilisé par le·la consommateur·rice pour la transaction initiale, sauf convention contraire expresse ; en aucun cas, ce remboursement ne donne lieu à des frais.")]
}), section({
isExpanded: isPrint,
header: "6. Modes de paiement",
content: [p("6.1 Sauf indication contraire dans la procédure de commande, les honoraires pour les contrats Premium sont dus pour un paiement anticipé pendant toute la durée du contrat."), p("6.2 Le paiement peut être effectué en utilisant l'un des modes de paiement énumérés en détail sur le site web sans frais supplémentaires. Dans le cadre de la procédure de paiement, le fournisseur charge un prestataire de services de paiement externe de traiter les données de paiement saisies par l'utilisateur·rice."), p("6.3 Après avoir sélectionné le système de paiement souhaité, l'utilisateur·rice saisit les données requises dans les champs de données correspondants. Le prestataire de services de paiement mandaté est autorisé à accepter des paiements au nom du fournisseur. Le fournisseur se réserve le droit de restreindre les systèmes de paiement proposés.")]
}), section({
isExpanded: isPrint,
header: "7. Offres avec frais pour les écoles : Licence scolaire ANTON",
content: [p("7.1 Les écoles peuvent débloquer des fonctionnalités supplémentaires pour le personnel scolaire, les enseignant·es et les élèves en achetant une offre Premium."), p("7.2 L'école ou le·la client·e ne soumet une offre ferme de conclusion de contrat au fournisseur qu'au moment de l'envoi de la commande. Le fournisseur peut envoyer l'offre dans un délai de 2 jours ouvrables en envoyant une confirmation de commande, une facture ou en activant l'offre."), p("7.3 Seuls les prix proposés par le fournisseur au moment de la conclusion du contrat sont déterminants."), p("7.4 La durée du contrat est indiquée au·à la client·e au moment de l'achat. La licence peut être résiliée par les deux parties à tout moment après la conclusion du contrat jusqu'à la fin de la période d'exécution. S'il n'est pas résilié avant la fin de la période de prestation, il est prolongé d'une année supplémentaire. L'annulation doit être communiquée par courrier électronique ou par écrit."), p("7.5 L'étendue des services dépend de la description du produit et fait également partie du contrat."), p("7.6 Le montant de la facture est dû sans déduction 14 jours après la date de la facture."), p("7.7 Le·La client·e est en défaut de paiement s'il·elle ne paie pas en réponse à un rappel du fournisseur après la date d'échéance. Même sans rappel, la défaillance intervient au plus tard 30 jours après la date d'échéance et la réception de la facture."), p("7.8 Les écoles et les établissements ne peuvent autoriser l'accès aux fonctions d'enseignement et d'administration de la licence scolaire qu'aux enseignant·es ou au personnel éducatif qu'ils emploient. Une autorité scolaire ne peut enregistrer des écoles que sous son autorité pour utiliser une licence d'autorité scolaire."), p("7.9 Les écoles et les institutions sont tenues de fournir des informations véridiques sur le nombre d'étudiant·es, d'enseignant·es et d'employé·es de l'école et peuvent autoriser uniquement les membres actifs à accéder à l'offre Premium ou à des parties de celle-ci."), p("7.10. Le fournisseur est autorisé à bloquer temporairement l'accès des utilisateur·rices à ANTON, en tout ou en partie et à résilier le contrat de licence scolaire sans préavis et avec effet immédiat s'il existe des motifs raisonnables de soupçonner que les utilisateur·rices n'appartiennent pas au groupe de personnes autorisées à utiliser l'offre Premium ou que les offres sont abusées, utilisées pour commettre des actes illégaux ou en violation des droits de tiers, ou ont été utilisées en violation du contrat et de l’utilisation autorisée, que des tiers non autorisés ont eu connaissance des données d'accès, en particulier du mot de passe d'un·e utilisateur·rice administrateur·rice ou d'autres utilisateur·rices, parce que le soin nécessaire au traitement de ces données, en particulier les principes reconnus de la sécurité des données, n'a pas été respecté. Le fournisseur ne fera usage de ce droit qu'en tenant compte des intérêts légitimes de l'utilisateur·rice et informera l'école par écrit ou par courrier électronique du blocage."), p("7.11. Les écoles peuvent engager la suppression des comptes d'utilisateur·rices qu'elles ont créés ou dont elles sont responsables de l'administration après une période transitoire de 60 jours. Les utilisateur·rices - et si nécessaire leurs tuteur·rices légaux·ales - doivent être informé·es par l'école. Dans un délai de 60 jours, ils·elles auront la possibilité de transférer les données stockées dans le compte d'utilisateur·rice vers un nouveau compte et de continuer à les utiliser de manière indépendante. Après cette période, les comptes des utilisateur·rices seront automatiquement supprimés.")]
}), section({
isExpanded: isPrint,
header: "8. Accessibilité de l'offre, limitation de la responsabilité",
content: [p("8.1 Le fournisseur doit utiliser les technologies actuelles et généralement utilisées pour ses services. Afin de pouvoir utiliser ANTON dans toute son étendue, les utilisateur·rices doivent également utiliser ces technologies (par exemple, la technologie actuelle des navigateurs, les websockets) ou les utiliser sur leur ordinateur ou appareil mobile (par exemple, activation de JavaScript). Si des technologies plus anciennes ou des technologies qui ne sont pas généralement utilisées sont utilisées, l'utilisateur·rice peut ne pouvoir utiliser ANTON que dans une mesure limitée."), p("8.2 En ce qui concerne les frais encourus, la disponibilité et la sécurité de la connexion de données, les services Internet nécessaires à l'utilisation d'ANTON et les équipements nécessaires à cette utilisation sont sous la seule responsabilité de l'utilisateur·rice et - le cas échéant - de l'école."), p("8.3 Le fournisseur ne garantit pas expressément que les services offerts sont adaptés aux objectifs spécifiquement poursuivis par l'utilisateur·rice individuel·le."), p("8.4 Les demandes de dommages et intérêts des utilisateur·rices et des client·es sont exclues. Sont exclues les demandes de dommages-intérêts pour atteinte à la vie, au corps, à la santé ou pour violation d'obligations contractuelles essentielles (obligations cardinales) ainsi que la responsabilité pour d'autres dommages, qui reposent sur une violation intentionnelle ou par négligence grave d'une obligation de la part du fournisseur, de ses représentants légaux ou de ses auxiliaires d'exécution. Les obligations contractuelles matérielles sont celles dont l'exécution est nécessaire pour atteindre l'objectif du contrat. Les “obligations cardinales” ou “obligations contractuelles essentielles” sont des obligations dont l'exécution rend possible la bonne exécution du contrat et dont le partenaire contractuel dépend et peut compter sur le respect. En cas de perte de données, le fournisseur est responsable au maximum de l'effort nécessaire à la reconstruction en cas de sauvegarde correcte des données par les utilisateur·rices et les client·es."), p("8.5 En cas de violation d'obligations contractuelles essentielles, le fournisseur n'est responsable du dommage prévisible et typique du contrat que s'il a été causé par une simple négligence, sauf s'il s'agit de demandes de dommages-intérêts pour atteinte à la vie, au corps ou à la santé."), p("8.6 Les restrictions des paragraphes 8.4 et 8.5 s'appliquent également en faveur des représentants légaux et des agents d'exécution du fournisseur si les réclamations sont faites directement à leur encontre."), p("8.7 Disponibilité : les produits en ligne du fournisseur sont généralement disponibles 24 heures sur 24. Toutefois, en raison de travaux de maintenance nécessaires sur le système d'information, celui-ci peut être temporairement indisponible."), p("8.8 Les perturbations de l'accès à Internet et du trafic de données sur Internet dues à des événements dont le fournisseur n'est pas responsable et qui rendent l'accès difficile ou impossible (par exemple en raison de la configuration du pare-feu) n'affectent pas la demande de rémunération du fournisseur. Toute responsabilité du fournisseur pour cause d'indisponibilité dans les cas de la clause 8.1 et de la clause 8.2 est exclue. Le droit des utilisateur·rices et des client·es à une résiliation extraordinaire reste inchangé."), p("8.9 Toute autre responsabilité en matière de dommages-intérêts que celle prévue aux paragraphes 8.4 et 8.5 est exclue, quelle que soit la nature juridique de la demande. À cet égard, le fournisseur n'est notamment pas responsable des dommages indirects, tels que le manque à gagner et autres pertes financières des utilisateur·rices et des client·es. Les dispositions obligatoires de la loi sur la responsabilité du fait des produits restent inchangées."), p("8.10. Les demandes de remboursement des frais par les utilisateur·rices et les client·es sont limitées au montant de l'intérêt qu'ils·elles ont dans l'exécution du contrat."), p("8.11. Les utilisateur·rices et les client·es indemnisent le fournisseur de toutes les réclamations que d'autres utilisateur·rices et client·es ou d'autres tiers pourraient avoir à l'encontre du fournisseur en raison de la violation de leurs droits par l'utilisation des offres de l'utilisateur·rice ou du·de la client·e en question ou des utilisateur·rices autorisés par l'utilisateur·rice. L'utilisateur·rice ou le·la client·e assume également les coûts de la défense juridique nécessaire du fournisseur, y compris tous les frais de justice et d'avocat. Cela ne s'applique pas si l'utilisateur·rice ou le·la client·e n'est pas responsable de la violation des droits.")]
}), section({
isExpanded: isPrint,
header: "9. Indemnisation",
content: [p("9.1 L'Offre ne peut être utilisée que conformément aux présentes CGU. Les utilisateur·rices ne sont notamment pas autorisé·es à faire de l'ingénierie inverse, à décompiler, à désassembler, à modifier ou à créer des œuvres dérivées basées sur ANTON ou sur des parties de celui-ci ; à contourner les mesures de protection utilisées par le fournisseur ou ses concédants pour protéger les contenus accessibles via ANTON ; copier, stocker, éditer, développer des travaux dérivés basés sur, ou modifier de quelque manière que ce soit, tout contenu fourni via ANTON ; louer ou accorder des sous-licences pour son propre compte d'utilisateur·rice ; partager son propre compte d'utilisateur·rice avec d'autres personnes et/ou accorder à d'autres personnes l'accès aux services payants d'ANTON ; utiliser ANTON de toute autre manière inappropriée qui enfreint les présentes CGU."), p("9.2 Dans les cas décrits à la section 9.1 ci-dessus, ainsi que dans tous les autres cas d'utilisation inappropriée, l'utilisateur·rice s'engage à indemniser et à dégager le fournisseur de toute responsabilité. Dans tous les cas, le fournisseur se réserve le droit de bloquer les comptes d'utilisateur·rices sans préavis, dès qu'il y a une indication d'utilisation abusive ou inappropriée et que le fournisseur a un intérêt légitime à bloquer.")]
}), section({
isExpanded: isPrint,
header: "10. Droits de propriété intellectuelle",
content: [p("10.1 Tous les textes, images et autres contenus et œuvres protégés par le droit d'auteur fournis par ANTON sont protégés par le droit d'auteur. Toute utilisation non couverte par le présent accord, en particulier à des fins commerciales ou opérationnelles, nécessite le consentement écrit préalable du prestataire."), p("10.2 Pour le contenu qui est expressément mis à disposition par le biais d'une licence Creative Commons, les conditions de la licence Creative Commons applicable s'appliquent."), p("10.3 L'utilisation de toutes les marques déposées, marques, dessins et noms commerciaux utilisés par le fournisseur dans le cadre de l'offre requiert également le consentement préalable du fournisseur sous forme de texte.")]
}), section({
isExpanded: isPrint,
header: "11. Contenus générés par les utilisateur·rices",
content: [p("11.1 Si les utilisateur·rices génèrent eux·elles-mêmes des contenus, par exemple en créant une liste d'apprentissage, en créant une image ou en mettant d'une autre manière des matériaux à disposition via ANTON, ils·elles sont entièrement responsables de la qualité de ces contenus et de tout dommage en résultant. Cette disposition s'applique indépendamment du fait que le contenu en question consiste en du texte, des graphiques, des fichiers audio, des logiciels informatiques ou tout autre format."), p("11.2 Les utilisateur·rices ne peuvent stocker sur ANTON que des contenus adaptés à des fins d'apprentissage et d'étude. Le fournisseur se réserve le droit de prendre des mesures à l'encontre des utilisateur·rices qui enfreignent cette disposition. Ces mesures peuvent comprendre, sans s'y limiter, le retrait du contenu en question, la résiliation des comptes des personnes concernées ou l'engagement d'une nouvelle action en justice. Les contenus interdits comprennent, sans s'y limiter, les contenus qui violent les droits du fournisseur ou de tiers, qui sont de nature offensive ou commerciale, ou qui violent les lois et règlements applicables."), p("11.3 Lorsque les utilisateur·rices créent ou téléchargent un contenu ou tout autre matériel sur ANTON, ils·elles doivent accorder au fournisseur une licence mondiale, perpétuelle et libre de droits (avec le droit de sous-licence) pour utiliser, copier, reproduire, traiter, adapter, modifier, publier, transmettre, afficher et distribuer ce contenu ou ce matériel dans ou par le biais de tous les médias ou méthodes de distribution (qu'ils existent ou soient développés ultérieurement). Des utilisations supplémentaires par le fournisseur ou d'autres sociétés ou individus agissant en tant que partenaires du fournisseur peuvent être faites sans compensation aux utilisateur·rices pour tout contenu qu'ils·elles soumettent, publient ou rendent disponible de toute autre manière par le biais du service."), p("11.4 En rendant le contenu disponible via ANTON, les utilisateur·rices déclarent et garantissent que ce contenu ne porte pas atteinte aux droits de tiers et qu'il ne contient ni n'installe aucun logiciel malveillant ou matériel offensant."), p("11.5 Le fournisseur n'examine pas tout le contenu envoyé au service, n'a pas la possibilité de le faire et ne peut donc pas être responsable du contenu, de l'utilisation ou des effets de ce matériel. Le fait que le fournisseur exploite le service ne signifie pas, et n'implique pas, que le fournisseur approuve le matériel envoyé au service ou qu'il croit que ce matériel est exact, utile ou inoffensif."), p("11.6 Le contenu généré par l'utilisateur·rice, tel que les listes d'apprentissage, peut inclure du matériel potentiellement offensant, indécent ou autrement répréhensible, ainsi que du contenu pouvant contenir des erreurs techniques, factuelles, orthographiques ou autres."), p("11.7 Le service peut contenir du matériel qui viole ou enfreint les droits de propriété intellectuelle ou autres droits de propriété d'autrui, ou dont le téléchargement, la copie ou l'utilisation peuvent être soumis à des conditions supplémentaires, écrites ou non. Le fournisseur décline toute responsabilité pour tout dommage résultant de l'utilisation du service par les visiteurs ou du téléchargement de tout contenu affiché sur le service. Si les utilisateur·rices découvrent un contenu ou d'autres matériels qui violent ces conditions générales, il existe des fonctionnalités appropriées sur le site web du service qui permettent aux utilisateur·rices de signaler ces violations au fournisseur."), p("11.8 Le fournisseur respecte la propriété intellectuelle d'autrui. Si vous estimez que le matériel publié ou lié sur le site web ou dans les applications mobiles d'ANTON enfreint votre droit d'auteur, veuillez nous en informer. Le cas échéant, le fournisseur supprimera le contenu en question ou désactivera tous les liens vers ce contenu. Dans le cas où un·e utilisateur·rice enfreindrait les droits d'auteur ou autres droits de propriété intellectuelle d'ANTON ou d'autres parties en une ou plusieurs occasions, le fournisseur peut, à sa seule discrétion, mettre fin ou refuser l'accès ou l'utilisation du service. Dans le cas d'une telle résiliation, le fournisseur n'est en aucun cas tenu de rembourser les montants payés à l'avance par l'utilisateur·rice concerné·e.")]
}), section({
isExpanded: isPrint,
header: "12. Clauses finales",
content: [
p("12.1 La relation contractuelle entre le fournisseur et l'utilisateur·rice ou le·la client·e est soumise au droit allemand dans la mesure où la loi le permet. Si la législation du pays dans lequel le·la consommateur·rice a sa résidence prévoit un niveau de protection plus élevé du·de la consommateur·rice, cela n'est pas affecté."), p("12.2 Le fournisseur ne prend part à aucune procédure de règlement des litiges devant une commission d'arbitrage des consommateur·rices au sens de la loi sur le règlement des litiges de consommation."), p("12.3 La Commission européenne offre une plateforme européenne de règlement en ligne des litiges (RLL) à:"), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=FR");
}).css({
marginBottom: "1em",
marginTop: "0em"
}), p("12.4 Le contrat reste contraignant dans ses autres clauses même si certaines clauses sont juridiquement nulles. Au lieu des clauses juridiquement nulles, les dispositions légales, s'il y en a, s'appliquent. Toutefois, si cela représente une difficulté déraisonnable pour l'une des parties contractantes, le contrat dans son intégralité devient nul."), p("12.5 Le fournisseur se réserve le droit de modifier les présentes conditions générales pour des raisons objectives (par exemple, en raison de modifications de la situation juridique ou de la propre offre du fournisseur, de développements techniques, etc.) Cela s'applique en particulier si de nouvelles offres du fournisseur nécessitent de nouvelles réglementations."), p("12.6 Les CGU modifiées seront préalablement envoyées à l'utilisateur·rice ou au·à la client·e par courrier électronique ou par un autre formulaire approprié ou affichées sur le site web et dans les applications mobiles. Si l'utilisateur·rice ne s'oppose pas aux CGU modifiées dans un délai de six semaines, celles-ci sont réputées acceptées. En cas d'objection, le fournisseur peut bloquer le compte de l'utilisateur·rice, auquel cas les paiements déjà effectués seront remboursés au prorata de la durée restante. Le fournisseur indiquera ces conséquences juridiques séparément dans le message avec les CGU modifiées.")
]
}));
};
})();
pages/static/terms/div/divPt/div.ls
(function(){
return function(isPrint){
var s, p, section;
s = inc("../../../_shared/styles/styles")();
p = s.paragraph;
section = inc("../../../_shared/section/section");
return Div({
minHeight: "var(--centerHeight)"
}).addClass("privacyDiv").html(isPrint ? SvgIcon({
svg: path("/lib/svg/logo/anton-logo-vertical.svg"),
width: "10em",
height: "3.5em"
}) : void 8, isPrint ? Div({
fontSize: "1.4em"
}).html(T("termsOfService")) : void 8, " ", section({
isExpanded: isPrint,
header: "1. Geral",
content: [p("ANTON lhe dá as boas-vindas - Estamos felizes por você estar aqui! ANTON é um aplicativo de aprendizagem para alunos, professores e famílias. ANTON é desenvolvido e fornecido por solocode GmbH, Mehringdamm 61, 10961 Berlin (doravante: o Provedor)."), p("Você pode usar ANTON em www.anton.app e também através dos aplicativos móveis para Android, iOS e Amazon Fire."), p("Estes termos e condições gerais de uso e comerciais (doravante: \"TCG\") constituem o quadro legal definitivo para todos os serviços ANTON destinados a consumidores ou escolas (doravante: \"o serviço\"). Os acordos subsidiários verbais ou emendas ao contrato só são efetivos se confirmados pelo provedor por escrito ou por e-mail."), p("Estes termos e condições gerais aplicam-se igualmente à oferta gratuita e às ofertas adicionais sujeitas a uma taxa.")]
}), section({
isExpanded: isPrint,
header: "2. Serviços oferecidos, âmbito de aplicação",
content: [p("2.1. ANTON é um sistema de aprendizagem on-line que permite aos alunos estudarem para a escola de uma maneira simples, moderna e eficiente."), p("2.2. Os professores e tutores familiares podem usar ANTON para orientar e apoiar os alunos em seu aprendizado."), p("2.3. As escolas podem usar ANTON como parte de suas lições, como lição de casa ou como uma oportunidade adicional de aprendizado."), p("2.4. Muitas funções estão disponíveis para o usuário gratuitamente. Os serviços que estão sujeitos a uma taxa são claramente indicados como tal e podem ser utilizados após o pagamento das respectivas taxas ou preços."), p("2.5. O provedor se reserva o direito de tornar partes de sua oferta acessíveis somente a professores ou outros usuários encarregados de tarefas educacionais."), p("2.6 O usuário é obrigado a não fornecer qualquer informação inverídica ao se registrar on-line, em particular no que diz respeito ao seu papel como estudante ou professor e sua afiliação escolar. Se o usuário fornecer dados falsos, o provedor poderá, na medida em que um contrato tenha sido celebrado, rescindir o contrato. A retirada é - se possível - declarada por escrito. O formulário escrito também é preenchido com o envio de um e-mail. Se forem fornecidos dados falsos, um administrador da escola pode ter o direito de gerenciar a conta de usuário criada com dados falsos, visualizar a senha e ativar o procedimento de exclusão do usuário."), p("2.7. Além do serviço gratuito, os consumidores também podem ativar o ANTON-Plus, um serviço pago com características adicionais."), p("2.8. As escolas podem adquirir uma Licença Escolar ANTON e, assim, ativar mais recursos que melhoram o uso na escola. Além da licença escolar ANTON, as escolas podem ativar o ANTON-Plus para todos os alunos e professores da escola.")]
}), section({
isExpanded: isPrint,
header: "3. Oferta gratuita e ANTON-Plus",
content: [p("3.1. O usuário pode criar uma conta de usuário em ANTON gratuitamente."), p("3.2. Após criar uma conta de usuário, é possível fazer uso das funções básicas gratuitas (\"contrato básico\"). Entretanto, o usuário não tem direito legal à livre disponibilidade desses conteúdos e funções."), p("3.3. Os contratos básicos podem ser rescindidos a qualquer momento com 14 dias de aviso prévio."), p("3.4. O provedor também oferece aos consumidores o serviço ANTON-Plus (\"contrato premium\") cobrável de acordo com vários modelos de preços. Na medida em que os preços são indicados na ANTON, eles incluem o imposto sobre o valor agregado estatutário aplicável naquele momento."), p("3.5. Ao reservar um contrato premium, o usuário recebe acesso a funções adicionais dentro do escopo do respectivo contrato premium por todo o período do contrato."), p("3.6. O tipo de faturamento, preço e prazo são listados em cada caso como parte do processo de pedido e são resumidos por completo antes de o pedido ser concluído. O contrato premium entra em vigor com um clique no botão \"comprar\" (ou similar)."), p("3.7. Os contratos Premium são celebrados pelo prazo fixo escolhido pelo usuário. Os preços para todo o período devem ser pagos na conclusão do contrato."), p("3.8. O Provedor deverá se comunicar com o Usuário principalmente através do chat de suporte localizado no aplicativo ou - se um endereço de e-mail tiver sido fornecido - também via e-mail, e poderá, em particular, notificar o Usuário sobre declarações de intenção relevantes ao contrato (por exemplo, avisos de rescisão) por este meio. O Usuário pode fornecer ao Provedor um endereço de e-mail atual a qualquer momento.")]
}), section({
isExpanded: isPrint,
header: "4. Duração, renovação e rescisão de contratos para os consumidores.",
content: [p("4.1. Desde que não tenha sido celebrado um contrato de prêmio com custos, o usuário pode rescindir o contrato básico a qualquer momento, de acordo com a Seção 3.3."), p("4.2. Salvo que se indique o contrário no momento da conclusão do contrato, os contratos Premium ANTON Plus são assinaturas contínuas que são renovadas automaticamente em base recorrente para o prazo contratualmente acordado em cada caso, a menos que o usuário ou o provedor rescinda o respectivo contrato de prêmio até 24 horas antes do vencimento do respectivo prazo. As taxas para períodos de renovação também devem ser faturadas antecipadamente. Todos os contratos podem ser rescindidos no final do respectivo período."), p("4.3. Os contratos Premium que são comprados em uma base de \"montante fixo\" são expressamente designados como sendo de duração limitada ou ilimitada. Se eles forem limitados no tempo, o contrato termina no final do prazo sem necessidade de rescisão. Se forem ilimitados, os parágrafos seguintes se aplicam a eles de acordo."), p("4.4. O cancelamento de Contratos Premium adquiridos via Apple App Store, Google Play Store ou via Paypal é realizado de acordo com os termos e condições aplicáveis do respectivo prestador de serviços. O procedimento exato está descrito no site da Apple App Store, da Google Play Store ou do Paypal."), p("4.5. O direito de rescisão por justa causa permanece inalterado.")]
}), section({
isExpanded: isPrint,
header: "5. Direito de rescisão do consumidor.",
content: [
p("5.1. Os consumidores têm o direito de cancelar este contrato dentro de 14 dias sem dar nenhum motivo. O período de revogação é de 14 dias a partir do dia da conclusão do contrato. Para exercer o direito de rescisão, o consumidor deve informar o provedor (solocode GmbH, Mehringdamm 61, 10961 Berlin, Alemanha, e-mail: support@anton.app) de sua decisão de rescindir este contrato por meio de uma declaração clara (por exemplo, um e-mail ou uma carta ou enviada pelo correio). Para este fim, os consumidores podem utilizar o modelo de formulário de retirada anexo, que, no entanto, não é obrigatório."), p("5.2. Para cumprir o período de revogação, basta que a notificação do exercício do direito de revogação seja enviada antes da expiração do período de revogação."), Button("Formulário de revogação").tap(function(){
return inc("../../_shared/openUrl/open")("https://files.anton.app/files/ANTON-formulario-para-revocacion.pdf");
}).css({
marginBottom: "1em",
marginTop: "-0.5em"
}), p("5.3. Consequências da rescisão: Se o consumidor rescindir este contrato, o provedor deverá reembolsar todos os pagamentos recebidos do consumidor, incluindo os custos de entrega (com exceção dos custos adicionais resultantes do fato de o consumidor ter escolhido um tipo de entrega diferente da entrega padrão mais barata oferecida pelo provedor) sem demora e no prazo máximo de 14 dias a partir da data em que o provedor tiver recebido a notificação de rescisão deste contrato. Para este reembolso, o Fornecedor deverá utilizar o mesmo meio de pagamento que o consumidor utilizou para a transação original, salvo acordo expresso em contrário; em nenhum caso serão cobradas taxas por este reembolso.")
]
}), section({
isExpanded: isPrint,
header: "6. Formas de pagamento",
content: [p("6.1. Ao menos que se indique o contrário no processo de pedido, as taxas para contratos premium devem ser pagas antecipadamente por toda a duração do contrato."), p("6.2. O pagamento pode ser feito através de todas as formas de pagamento listadas no site sem custos adicionais. Como parte do processo de pagamento, o provedor comissiona um prestador de serviços de pagamento externo para processar os dados de pagamento inseridos pelo Usuário."), p("6.3. Após selecionar o sistema de pagamento desejado, o usuário insere os dados necessários nos campos de dados correspondentes. O prestador de serviços de pagamento comissionado está autorizado a aceitar pagamentos em nome do provedor. O provedor se reserva o direito de restringir os sistemas de pagamento oferecidos.")]
}), section({
isExpanded: isPrint,
header: "7. Ofertas de pagamento para escolas: Licença escolar ANTON",
content: [p("7.1. As escolas podem desbloquear recursos adicionais para o pessoal escolar, professores e alunos, comprando uma oferta premium."), p("7.2. Somente com o envio do pedido, a escola ou o cliente faz uma oferta vinculativa para celebrar um contrato com o provedor. O provedor pode aceitar a oferta dentro de 2 dias úteis enviando uma confirmação de pedido, uma fatura ou ativando a oferta."), p("7.3. As cotações do provedor no momento da conclusão do contrato são exclusivamente decisivas."), p("7.4. O termo é mostrado ao cliente no momento da compra. A licença pode ser rescindida por qualquer uma das partes a qualquer momento após a conclusão do contrato, no final do período de execução. Se não for encerrado antes do final do período de desempenho, será prorrogado por mais um ano. O aviso de rescisão deve ser feito por e-mail ou por escrito."), p("7.5. O alcance dos serviços é baseado na descrição do produto e também faz parte do contrato."), p("7.6. O valor da fatura deve ser pago sem deduções 14 dias após a data da fatura."), p("7.7. O cliente está em inadimplência se ele não fizer o pagamento em resposta a um lembrete enviado pelo provedor após a data de vencimento. Mesmo sem um lembrete, a inadimplência deve ocorrer no máximo 30 dias após a data de vencimento e o recebimento da fatura."), p("7.8. As escolas e instituições só podem permitir que professores ou pessoal pedagógico empregado por eles tenham acesso às funções de professor e administrador da Licença Escolar. A diretoria da escola só pode registrar escolas sob seu patrocínio para o uso de uma licença da diretoria escolar."), p("7.9. As escolas e instituições são obrigadas a fornecer informações verdadeiras sobre o número de alunos, professores e funcionários da escola e só podem permitir que os membros ativos tenham acesso à oferta de premium ou a partes dela."), p("7.10. O provedor tem o direito de bloquear temporariamente o acesso dos usuários à ANTON, no todo ou em parte, e de rescindir o contrato de licença escolar sem aviso prévio com efeito imediato se houver suspeita razoável de que os usuários não pertencem ao grupo de pessoas autorizadas a utilizar o serviço, ou que o serviço foi mal utilizado, utilizado para cometer atos ilegais ou em violação dos direitos de terceiros, ou foi utilizada em violação de contrato ou foi permitida a sua utilização por terceiros não autorizados a tomaram conhecimento dos dados de acesso, em particular a senha de um usuário administrador ou outros usuários, porque o cuidado necessário não foi observado no manuseio de tais dados, em particular os princípios reconhecidos de segurança de dados. O provedor somente exercerá este direito levando em conta os interesses legítimos do usuário e notificará a escola sobre o bloqueio, por escrito ou por e-mail."), p("7.11. As escolas podem marcar as contas de usuários que criaram, ou são responsáveis pela administração, para eliminação após um período de transição de 60 dias. Os usuários, e se necessário seus tutores legais, devem ser informados pelas escolas. Eles terão a oportunidade de transferir os dados armazenados na conta do usuário para uma nova conta dentro de 60 dias e de continuar a usá-los independentemente. Após este período, as contas de usuário serão automaticamente apagadas.")]
}), section({
isExpanded: isPrint,
header: "8. Acessibilidade da oferta, limitação da responsabilidade.",
content: [p("8.1. O provedor utiliza tecnologias atuais e comumente utilizadas para seus serviços. Para poder utilizar ANTON em toda a sua extensão, os usuários também devem utilizar estas tecnologias (por exemplo, a tecnologia atual do navegador, websockets) ou permitir seu uso em seu computador ou dispositivo móvel (por exemplo, ativação do JavaScript). Se forem utilizadas tecnologias mais antigas ou tecnologias que não são de uso geral, o usuário só poderá utilizar ANTON de forma limitada."), p("8.2. Os serviços de Internet necessários para o uso da ANTON e os equipamentos necessários para este fim são de responsabilidade exclusiva do usuário e, quando aplicável, da escola, no que diz respeito aos custos incorridos, à disponibilidade e segurança da conexão de dados."), p("8.3. O prestador não garante expressamente que os serviços oferecidos sejam adequados para os fins específicos perseguidos pelo usuário individual."), p("8.4. Estão excluídos os pedidos de indenização por danos por parte de usuários e clientes. Estão excluídos os pedidos de indenização por danos resultantes de danos à vida, ao corpo ou à saúde ou do descumprimento de obrigações contratuais essenciais (obrigações cardinais), bem como a responsabilidade por outros danos baseados no descumprimento intencional ou por negligência grosseira das obrigações por parte do provedor, seus representantes legais ou agentes indiretos. As obrigações contratuais materiais são aquelas cujo cumprimento é necessário para atingir o objetivo do contrato. Uma \"obrigação cardinal\" ou \"obrigações contratuais essenciais\" são obrigações cujo cumprimento torna possível a boa execução do contrato em primeiro lugar e em cujo cumprimento a parte contratual depende e pode confiar regularmente. Em caso de perda de dados, o Fornecedor será responsável, no máximo, pelo esforço necessário para a reconstrução no caso de usuários e clientes fazerem uma cópia de segurança adequada dos dados."), p("8.5. Em caso de violação de obrigações contratuais materiais, o Fornecedor só será responsável pelos danos previsíveis típicos do contrato se tais danos forem causados por simples negligência, a menos que as reclamações de danos sejam baseadas em danos à vida, ao corpo ou à saúde."), p("8.6. As restrições dos parágrafos 8.4 e 8.5 também se aplicam a favor dos representantes legais e agentes indiretos do provedor, caso sejam apresentadas reclamações diretamente contra eles."), p("8.7. Disponibilidade: Os produtos on-line do provedor estão geralmente disponíveis 24 horas por dia. Entretanto, devido ao trabalho de serviço necessário no sistema de informação, pode haver períodos de indisponibilidade."), p("8.8. As interrupções no acesso à Internet e no tráfego de dados na Internet devido a eventos pelos quais o Provedor não é responsável e que tornam o acesso difícil ou impossível (por exemplo, devido à configuração de um firewall) não afetarão a reivindicação de remuneração por parte do Provedor. A responsabilidade do Provedor por indisponibilidade nos casos da seção 8.1 e seção 8.2 está excluída. O direito dos usuários e clientes à rescisão extraordinária permanece inalterado."), p("8.9. Qualquer outra responsabilidade por danos que não esteja prevista nas seções 8.4 e 8.5 está excluída, independentemente da natureza jurídica da reclamação reivindicada. Neste sentido, o Fornecedor não será responsável, em particular, por danos indiretos, tais como lucros cessantes e outras perdas financeiras dos usuários e clientes. As disposições obrigatórias da Lei de Responsabilidade pelo Produto permanecem inalteradas."), p("8.10. Os pedidos de reembolso de custos pelos usuários e clientes são limitados ao valor do interesse que eles têm na execução do contrato."), p("8.11. Os usuários e clientes indenizam o provedor por todas as reclamações apresentadas por outros usuários e clientes ou outros terceiros contra o provedor devido à violação de seus direitos pelo uso das ofertas do respectivo usuário ou cliente ou dos usuários admitidos pelo provedor. Neste contexto, o usuário ou cliente também assume os custos da defesa legal necessária do provedor, incluindo todos os honorários advocatícios e judiciais. Isto não se aplica se o usuário ou cliente não for responsável pela infração.")]
}), section({
isExpanded: isPrint,
header: "9. Indenização",
content: [p("9.1. A oferta só pode ser utilizada de acordo com estes TCG. Em particular, os usuários não estão autorizados a fazer engenharia reversa, descompilar, desmontar, modificar ou desenvolver trabalhos derivados baseados na ANTON ou qualquer parte dela; para contornar qualquer medida de proteção utilizada pelo provedor ou seus licenciadores para proteger o conteúdo acessível através da ANTON; Copiar, armazenar, editar, desenvolver trabalhos derivados baseados em, ou modificar de qualquer forma, qualquer conteúdo disponibilizado através da ANTON; Alugar ou sublicenciar a conta de usuário; Compartilhar a conta de usuário com outros e/ou conceder a outros acesso aos serviços pagos da ANTON; Usar a ANTON de qualquer outra forma inadequada que viole estes Termos de Serviço."), p("9.2. Nos casos descritos na seção 9.1, bem como em todos os outros casos de mau uso, o usuário se compromete a manter o provedor inofensivo. Em qualquer caso, o provedor se reserva o direito de bloquear contas de usuários sem aviso prévio assim que houver indícios de mau uso ou abuso e o provedor tiver um interesse legítimo no bloqueio.")]
}), section({
isExpanded: isPrint,
header: "10. Direitos de propriedade intelectual",
content: [p("10.1. Todos os textos, imagens e outros conteúdos e obras protegidas por direitos autorais disponibilizados no âmbito da ANTON são protegidos por direitos autorais. Qualquer uso não previsto no contrato, em particular para fins comerciais ou operacionais, requer o consentimento prévio do provedor em forma de texto."), p("10.2. No caso de conteúdo que é expressamente disponibilizado através de uma licença Creative Commons, aplicam-se os termos da licença Creative Commons aplicáveis."), p("10.3. Qualquer uso de todas as marcas, desenhos e nomes comerciais utilizados pelo provedor no âmbito da oferta também requer o consentimento prévio por escrito do provedor.")]
}), section({
isExpanded: isPrint,
header: "11. Conteúdo gerado pelo usuário.",
content: [p("11.1. Se os próprios usuários gerarem conteúdo, por exemplo, criar uma lista de aprendizagem, criar uma imagem ou disponibilizar materiais via ANTON, eles são totalmente responsáveis pela natureza desse conteúdo e por qualquer dano resultante. Isto é verdade independentemente de o conteúdo em questão consistir de texto, gráficos, arquivos de áudio, software ou qualquer outro formato."), p("11.2. Os usuários só podem armazenar conteúdo em ANTON que seja adequado para o aprendizado e estudo. O provedor se reserva o direito de tomar medidas contra os usuários que violarem esta disposição. Tal ação pode incluir, mas não está limitada a, remoção do conteúdo em questão, encerramento das contas das pessoas envolvidas ou outra ação legal. Conteúdo proibido inclui, mas não está limitado a, conteúdo que viola os direitos do provedor ou de terceiros, é ofensivo ou de natureza comercial, ou viola as leis e regulamentos aplicáveis."), p("11.3. Quando os usuários criam ou carregam conteúdo ou outro material para a ANTON, eles concedem ao fornecedor uma licença mundial, perpétua e livre de royalties (com o direito de sublicenciar) para usar, copiar, reproduzir, processar, adaptar, modificar, publicar, transmitir, exibir e distribuir tal conteúdo ou material em ou através de todas as mídias ou métodos de distribuição (seja agora existente ou desenvolvida posteriormente). Usos adicionais pelo provedor ou outras empresas ou indivíduos agindo como afiliados do provedor são permitidos sem compensação aos usuários pelo conteúdo que eles enviam, postam ou de outra forma disponibilizam através do Serviço."), p("11.4. Ao disponibilizar conteúdo através da ANTON, os usuários representam e garantem que não estão infringindo os direitos de terceiros e que o conteúdo não contém ou instala malware ou material censurável."), p("11.5. O fornecedor não revisa nem pode revisar todo o material postado no serviço e, portanto, não pode ser responsável pelo conteúdo, uso ou efeitos desse material. A operação do serviço não significa ou implica que o fornecedor endossa o material lá postado, ou que ele acredita que tal material esteja livre de erros, útil ou não prejudicial."), p("11.6. O conteúdo gerado pelo usuário, como listas de aprendizagem, pode conter material potencialmente ofensivo, indecente ou de outra forma censurável, bem como conteúdo no qual podem ocorrer erros técnicos, factuais, ortográficos ou outros erros."), p("11.7. O Serviço pode conter material que viole ou infrinja a propriedade intelectual e outros direitos de propriedade de terceiros, ou onde o download, cópia ou uso possa estar sujeito a termos e condições adicionais escritos ou não escritos. O provedor se isenta de qualquer responsabilidade por qualquer dano resultante do uso do serviço pelos visitantes, ou de qualquer download feito por aqueles visitantes do conteúdo ali publicado. Se os usuários descobrirem conteúdo ou outros materiais que violem estes termos e condições, o website do provedor tem características que lhes permitem relatá-lo ao provedor."), p("11.8. O Provedor respeita a propriedade intelectual dos outros. Se você acredita que o material postado ou vinculado no site do ANTON ou em aplicativos móveis infringe seus direitos autorais, favor nos notificar. O provedor removerá, se necessário, o conteúdo ofensivo ou desativará todos os links para o conteúdo. Se um usuário cometer uma violação única ou repetida dos direitos autorais ou outros direitos de propriedade intelectual da ANTON ou de terceiros, o Provedor poderá, a seu critério exclusivo, terminar ou negar o acesso ou uso do Serviço. No caso de tal rescisão, o Provedor não será de forma alguma obrigado a reembolsar quaisquer valores pagos antecipadamente pelo usuário em questão.")]
}), section({
isExpanded: isPrint,
header: "12. Disposições finais",
content: [
p("12.1. A relação contratual entre o fornecedor e o usuário ou cliente está sujeita à lei alemã, na medida em que isso seja legalmente permitido. Se a lei do país em que o consumidor está domiciliado prevê uma maior proteção ao consumidor, esta não será afetada."), p("12.2. O fornecedor não participa de nenhum processo de resolução de disputas perante um conselho de arbitragem do consumidor, no sentido da Lei de Resolução de Disputas do Consumidor."), p("12.3. A Comissão Européia oferece uma plataforma para resolução extrajudicial de disputas on-line (plataforma ODR), que pode ser acessada em:"), Div({
textDecoration: "underline",
marginBottom: "1.2em"
}).html("https://ec.europa.eu/consumers/odr").tap(function(){
return inc("../../_shared/openUrl/open")("https://ec.europa.eu/consumers/odr/main/index.cfm?lng=ES");
}).css({
marginBottom: "1em"
}), p("12.4. O contrato permanecerá obrigatório em suas partes restantes, mesmo que alguns pontos sejam legalmente inválidos. Os pontos inválidos devem ser substituídos pelas disposições estatutárias, se houver. Entretanto, na medida em que isso represente uma dificuldade indevida para uma das partes contratantes, o contrato como um todo ficará sem efeito."), p("12.5. O fornecedor se reserva o direito de alterar estes TCG por razões objetivas (por exemplo, devido a mudanças na situação legal ou na própria oferta do fornecedor, desenvolvimentos técnicos, etc.). Isto se aplica especialmente se novas ofertas do fornecedor exigirem novas regulamentações."), p("12.6. Os TCG alterados serão enviados ao usuário ou cliente antecipadamente por e-mail ou outro formulário adequado ou serão exibidos no website e nas aplicações móveis. Se o usuário não se opuser às TCG emendadas dentro de seis semanas, elas serão consideradas aceitas. Em caso de objeção, o Provedor poderá bloquear a conta do usuário, sendo que os pagamentos já efetuados serão reembolsados proporcionalmente ao prazo restante. O Provedor deverá se referir a essas conseqüências legais separadamente na mensagem com os TCG emendados.")
]
}));
};
})();
pages/static/terms/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
start: function(){
return page.append(Div({
margin: "0em auto",
width: "35em",
maxWidth: "90%",
lineHeight: "1.5em",
textAlign: 'left'
}).html(inc("div/div")()));
}
};
};
})();
pages/static/tour/_t.ls
(function(){
return {
learnEasy: {
de: "Einfach für die Schule lernen.",
en: "Learning for school made simple.",
fr: "Apprendre facilement pour l'école",
es: "Estudia fácilmente para la escuela",
pt: "Aprendizado simples para a escola"
},
allDevicesFree: {
de: "Auf allen Smartphones, Tablets und dem Computer (unter www.anton.app). Für viele Klassen und Fächer. Kostenlos und ohne Werbung für fremde Produkte.",
en_gb: "On all smartphones, tablets and the computer (at www.anton.app). For all years and subjects. Free and without ads for other products.",
en: "On all smartphones, tablets and the computer (at www.anton.app). For all grades and subjects. Free and without ads for other products.",
fr: "Sur tous les smartphones, tablettes et ordinateurs (sur www.anton.app). Pour toutes les classes et les matières. Gratuit et sans publicité pour d'autres produits.",
es: "En cualquier dispositivo: smartphone, tablet o computadora (en www.anton.app). Para todos los grados y todas las materias. Gratis y sin anuncios publicitarios.",
pt: "Disponível para smartphones, tablets e computadores (em www.anton.app). Da Educação Infantil ao Ensino Fundamental I. Gratuito e sem anúncios."
},
manyLessons: {
de: "Über 100 000 Aufgaben mit mehr als 200 Übungstypen, Lernspielen und interaktiven Erklärungen.",
en: "Over 100,000 lessons with more than 200 exercise types, educational games and interactive explanations.",
en_gb: "Over 50,000 lessons with more than 200 exercise types, educational games and interactive explanations.",
fr: "Plus de 5 000 exercices conçus à partir de 200 types d'activités, de leçons intéractives et de jeux éducatifs.",
es: "Más de 5 000 ejercicios, juegos educativos y explicaciones interactivas.",
pt: "Mais de 5 000 exercícios, jogos educativos e explicações interativas."
},
matchesCurriculum: {
de: "Passend zum Lehrplan.",
en: "Follows the curriculum.",
fr: "Conformément aux programmes scolaires",
es: "Adecuado al plan de estudio escolar",
pt: "Baseado na Base Nacional Comum Curricular (BNCC)"
},
allTopicsFromSchool: {
de: "Finde alle Themen, die in der Schule drankommen.",
en: "Find all topics that come up in school.",
en_gb: "Find all topics that come up in school.",
fr: "Très prochainement : retrouve toutes les matières scolaires.",
es: "Muy pronto: con todas las materias escolares.",
pt: "Encontre rapidamente todas as disciplinas dadas na escola."
},
learnAtHome: {
de: "Selbst zu Hause lernen.",
en: "Learn by yourself at home.",
fr: "Apprends à ton rythme à la maison",
es: "Estudia y aprende en casa",
pt: "Aprenda no seu ritmo e em casa"
},
learnWithfun: {
de: "Lerne selbständig und mit Spaß. Sammle Sterne und Pokale und spiele spannende Spiele.",
en: "Learn independently and have fun. Collect stars and trophies and play exciting games.",
fr: "Apprends chez toi en t'amusant. Collectionne des étoiles et des trophées et joue à nos jeux intégrés.",
es: "Estudia y aprende de forma independiente. Colecciona estrellas, trofeos y juega divertidos juegos.",
pt: "Aprenda se divertindo e de forma independente. Colecione estrelas, troféus e jogue jogos divertidos."
},
idealForPupilsAndTeacher: {
de: "Ideal für Lehrkräfte und Schulklassen.",
en: "Perfect for teachers and classes.",
fr: "Idéal pour les professeur·es et les élèves",
es: "Ideal para docentes y estudiantes",
pt: "Ideal para professores e turmas escolares"
},
createClasses: {
de: "Ganz einfach Schulklassen anlegen, Aufgaben zuweisen und den Lernfortschritt verfolgen.",
en: "Easily create classes, assign lessons and track progress.",
fr: "Une solution simple pour organiser des groupes, attribuer des exercices et suivre les progrès des élèves.",
es: "Crea grupos fácilmente, asigna tareas y da seguimiento al proceso de aprendizaje.",
pt: "Crie grupos facilmente, marque exercícios e acompanhe o progresso de aprendizagem."
},
euSupport: {
de: "Das Projekt „ANTON – Lernplattform für die Schule“ wird kofinanziert durch den Europäischen Fonds für regionale Entwicklung (EFRE).",
en: "The project “ANTON - the learning platform for school” is cofinanced by the European Regional Development Fund (ERDF).",
fr: "Le projet “ANTON - la plateforme d'apprentissage pour l'école” est co-financé par le Fonds européen de développement régional (FEDER).",
es: "“ANTON - La plataforma de aprendizaje para la escuela” es un proyecto cofinanciado por el Fondo Europeo de Desarrolle Regional (FEDER).",
pt: "O projeto “ANTON - O aplicativo de aprendizagem gratuito para a escola” é co-financiado pelo Fundo Europeu de Desenvolvimento Regional (FEDER)."
},
participate: {
de: "Mach mit!",
en: "Join in!",
fr: "On y va ?",
es: "¡Únete!",
pt: "Participe!"
},
registerAndStart: {
de: "Melde dich an und lerne mit ANTON.",
en: "Register and learn with ANTON.",
fr: "Inscris-toi et apprends avec ANTON !",
es: "Regístrate y aprende con ANTON.",
pt: "Crie sua conta e aprenda com ANTON."
},
whatIsAnton: {
de: "Was ist ANTON?",
en: "What is ANTON?",
fr: "ANTON, c'est quoi ?",
es: "¿Qué es ANTON?",
pt: "O que é o ANTON?"
},
learnWithFun: {
de: "Interaktives Schulbuch und Arbeitsheft.",
en: "Have fun learning!",
fr: "Apprends en t'amusant !",
es: "¡Aprende divirtiéndote!",
pt: "Divirta-se aprendendo!"
},
supportedByTheEU: {
de: "Gefördert von der EU.",
en: "Supported by the EU.",
fr: "Avec le soutien de l'UE",
es: "Apoyado por la UE",
pt: "Apoiado pela UE"
},
terms: {
de: "Nutzungsbedingungen",
en: "Terms of use",
fr: "Conditions d'utilisation",
es: "Condiciones de uso",
pt: "Termos de uso"
},
imprint: {
de: "Impressum",
en: "Legal Notice",
fr: "Mentions légales",
es: "Menciones legales",
pt: "Informações legais"
},
privacy: {
de: "Datenschutz",
en: "Privacy",
fr: "Protection des données",
es: "Privacidad",
pt: "Privacidade"
},
faqs: {
de: "Häufige Fragen",
en: "FAQs",
fr: "Aide/FAQ",
es: "Preguntas frecuentes",
pt: "Perguntas Frequentes"
},
schoolLicense: {
de: "Schullizenz",
en_gb: "School Licence",
en: "School License",
fr: "Licence scolaire",
es: "Licencia Escolar",
pt: "Licença Escolar"
},
jobs: "Jobs",
moreInfo: {
de: "Weitere Informationen",
en: "More information",
fr: "Plus d'informations",
es: "Más información",
pt: "Mais informações"
},
seeMore: "See more"
};
})();
pages/static/tour/bottomSlideDots/bottomSlideDots.ls
(function(){
return function(o){
var totalPages, currentIndex, update, div;
totalPages = o.totalPages;
currentIndex = 0;
update = function(){
var index, current;
div.empty();
return div.append((function(){
var i$, to$, results$ = [];
for (i$ = 0, to$ = totalPages - 1; i$ <= to$; ++i$) {
index = i$;
current = index === currentIndex;
results$.push(inc("iconDot/icon")(index, current, o.onPageClicked));
}
return results$;
}()));
};
div = Div({
display: "flex",
alignItems: "stretch",
height: "2.5em"
});
div.setCurrentPage = function(index){
inc("/lib/util/cache/set/set")("currentTourPage", index);
currentIndex = index;
return update();
};
update();
return div;
};
})();
pages/static/tour/bottomSlideDots/iconDot/icon.ls
(function(){
return function(index, current, onClick){
var tap;
tap = function(){
return onClick(index);
};
return Div({
flex: "0 1 auto",
display: "flex",
width: "1.5em"
}).html(SvgIcon({
svg: current
? path("/lib/svg/icon/dot-active.svg")
: path("/lib/svg/icon/dot.svg")
})).tap(!current ? tap : void 8);
};
})();
pages/static/tour/page.ls
(function(){
return function(page){
var pager, scrollToPage, dots;
pager = null;
scrollToPage = function(p, animated){
animated == null && (animated = true);
return pager.scrollToPage(p, animated);
};
dots = inc("bottomSlideDots/bottomSlideDots")({
totalPages: 8,
onPageClicked: function(p){
return scrollToPage(p, false);
}
});
return {
top: function(){
return inc("topbar/topbar")();
},
bottom: function(){
return dots;
},
start: function(){
var that;
page.bottom.css({
backgroundColor: "white",
borderTop: ""
});
page.append(pager = inc("/lib/gui/pager/pager")({
elements: inc("pages/pages")(scrollToPage),
onIndexChanged: function(index){
return dots.setCurrentPage(index);
}
}).css({
width: "100%",
height: "var(--centerHeight)"
}));
if (that = inc("/lib/util/cache/get/get")("currentTourPage")) {
return scrollToPage(that, false);
}
}
};
};
})();
pages/static/tour/pages/00_shared/buttonContinue/button.ls
(function(){
return function(onClick){
return Button({
label: T("continueButton")
}).tap(onClick).addClass("keyManager-enter").bind("keyManager", onClick);
};
})();
pages/static/tour/pages/01/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).html(inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: "solocode_devices",
fileFolder: "media/tour/_images",
size: "12em",
imagePositionX: "-0.3em",
imagePositionY: "-0.3em",
imageScale: 1,
lineSize: 3
}).css({
margin: "1em auto"
}), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("learnEasy")), Div({
margin: "0 auto 1.5em",
lineHeight: "1.5em"
}).html(T("allDevicesFree")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/02/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
width: isPhone ? "12em" : "20em",
height: "12em",
margin: "1em auto"
}).html(!isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170823-05",
en: "solocode_screenshot-alphabet",
fr: "solocode_screenshot-alphabet",
es: "solocode_170823-05",
pt: "solocode_welcome-tour-house-pt"
}),
fileFolder: "media/tour/_images",
size: "8em",
x: "-0.1em",
y: twitch({
pt: "-1.6em",
def: "0.7em"
}),
scale: 1
}).css({
position: "absolute",
top: "4em",
left: 0
}) : void 8, inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: "solocode_170823-08",
fileFolder: "media/tour/_images",
size: "12em",
x: "-1.7em",
y: "-3.1em",
scale: 1
}).css({
position: "absolute",
top: 0,
left: isPhone ? 0 : "4em"
}), !isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170823-07",
en: "solcode_screen-math-en-fr",
fr: "solcode_screen-math-en-fr",
es: "solocode_170823-07",
pt: "solocode_welcome-tour-house-pt-2"
}),
fileFolder: "media/tour/_images",
size: "8em",
x: twitch({
pt: "-0.4em",
def: "-3.3em"
}),
y: twitch({
pt: "-2.7em",
def: "-1.1em"
}),
scale: twitch({
pt: 1.1,
def: 2.1
})
}).css({
position: "absolute",
top: "4em",
left: "12em"
}) : void 8), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("learnWithFun")), Div({
margin: "0 auto 1.5em"
}).html(T("manyLessons")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/03/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
width: isPhone ? "12em" : "20em",
height: "12em",
margin: "1em auto"
}).append(!isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170821-10",
en: "solocode_screen-math-en",
fr: "solocode_screen-mat-1",
es: "solocode_screen-math-en",
pt: "solocode_welcome-tour-house-pt-3"
}),
fileFolder: "media/tour/_images",
size: "8em",
x: "-0.5em",
y: twitch({
de: "2.5em",
pt: "-2.4em",
def: "0.5em"
}),
scale: 1
}).css({
position: "absolute",
top: "4em",
left: 0
}) : void 8, !isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170821-15",
en: "solocode_what-is-anton-content-en",
fr: "solocode_screen-math-1-fr_crop-0-292-746-746",
es: "solocode_welcome-screen-math-es_crop-0-283-768-768",
pt: "solocode_welcome_screen_pt_content"
}),
fileFolder: "media/tour/_images",
size: "12em",
x: "0em",
y: "0.5em",
scale: 1.3
}).css({
position: "absolute",
top: 0,
left: isPhone ? 0 : "4em"
}) : void 8, !isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170821-9",
en: "solocode_170821-9",
fr: "solocode_170821-9",
es: "solocode_170821-9",
pt: "solocode_welcome-tour-flowers-pt"
}),
fileFolder: "media/tour/_images",
size: "8em",
x: "-1em",
y: "-2em",
scale: twitch({
pt: 1,
def: 1.5
})
}).css({
position: "absolute",
top: "4em",
left: "12em"
}) : void 8, isPhone ? inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
de: "solocode_170821-15",
en: "solocode_what-is-anton-content-en",
fr: "solocode_screen-math-1-fr_crop-0-292-746-746",
es: "solocode_welcome-screen-math-es_crop-0-283-768-768",
pt: "solocode_welcome_screen_pt_content"
}),
fileFolder: "media/tour/_images",
size: "12em",
x: "0em",
y: "-2.5em",
scale: 1.2
}).css({
position: "absolute",
top: 0,
left: isPhone ? 0 : "4em"
}) : void 8), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("matchesCurriculum")), Div({
margin: "0 auto 1.5em"
}).html(T("allTopicsFromSchool"), engine.guiLanguage === "en_us" ? inc("standardLink/link")() : void 8), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/03/standardLink/link.ls
(function(){
return function(){
return Div({
textDecoration: "underline",
marginLeft: "0.3em",
display: "inline-block",
color: Color.blue[700]
}).html(T("seeMore")).tap(function(){
return window.open("https://anton.app/en_us/standards", "_system");
});
};
})();
pages/static/tour/pages/04/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
width: isPhone ? "12em" : "14em",
height: isPhone ? "12em" : "14em",
margin: "1em auto"
}).append(inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: "solocode_190411-002",
fileFolder: "media/tour/_images",
size: isPhone ? "12em" : "14em",
x: "0em",
y: "0em",
scale: 1
}).css({
position: "absolute",
top: 0,
left: 0
})), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("learnAtHome")), Div({
margin: "0 auto 1.5em"
}).html(T("learnWithfun")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/05/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
width: isPhone ? "12em" : "20em",
height: "12em",
margin: "1em auto"
}).append(inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: twitch({
en: "solocode_about-anton-welcome-page-en",
fr: "solocode_about-anton-welcome-page-fr",
de: "solocode_about-anton-welcome-page-de",
es: "solocode_about-anton-welcome-page-es",
pt: "solocode_about-anton-welcome-page-pt"
}),
fileFolder: "media/tour/_images",
size: "12em",
x: 0,
y: 0,
scale: 1
}).css({
position: "absolute",
top: 0,
left: isPhone ? 0 : "4em"
})), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("idealForPupilsAndTeacher")), Div({
margin: "0 auto 1.5em"
}).html(T("createClasses")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/06/div.ls
(function(){
return function(nextPage){
var isPhone;
isPhone = body.width() < 380;
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
width: isPhone ? "12em" : "20em",
height: "12em",
margin: "1em auto"
}).append(inc("/lib/gui/maskedImageCircle/maskedImageCircle")({
id: "pixabay_2313980",
fileFolder: "media/tour/_images",
size: "12em",
x: "-3.2em",
y: "-0.3em",
scale: 1.5
}).css({
position: "absolute",
top: 0,
left: isPhone ? 0 : "4em"
})), Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("supportedByTheEU")), Div({
margin: "0 auto 1.5em"
}).html(T("euSupport")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage) : void 8);
};
})();
pages/static/tour/pages/07/div.ls
(function(){
return function(nextPage){
var isPhone, link;
isPhone = body.width() < 380;
link = function(label, pagePath, params){
return Div().html(inc("/lib/gui/link/link")({
label: label
}).tap(function(){
return startPage({
path: pagePath,
animation: "slideUp",
params: params
});
}));
};
return Div({
width: "30em",
maxWidth: "90%"
}).html(Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("moreInfo")), link(T("faqs"), path("/pages/support/help/faqList/page"), {
isStandaloneFaqPage: true
}), link(T("schoolLicense"), path("/pages/static/schoolLicense/page")), engine.guiLanguage === "de" ? link(T("jobs"), path("/pages/static/jobs/page")) : void 8, link(T("terms"), path("/pages/static/terms/page")), link(T("privacy"), path("/pages/static/privacy/page")), link(T("imprint"), path("/pages/static/about/page")), !isPhone ? inc("../00_shared/buttonContinue/button")(nextPage).css({
marginTop: "1em"
}) : void 8);
};
})();
pages/static/tour/pages/08/div.ls
(function(){
return function(page){
var tap;
tap = function(){
inc("/lib/util/cache/del/del")("currentTourPage");
return setTimeout(function(){
return startPage({
history: -1,
animation: "slideDown"
});
}, 300);
};
return Div({
width: "30em",
maxWidth: "90%"
}).append(Div({
fontSize: "1.6em",
lineHeight: "1.1em",
fontWeight: "300",
padding: "0.1em 0.5em 0.5em"
}).html(T("participate")), Div({
marginBottom: "1.2em",
padding: "0 1em"
}).html(T("registerAndStart")), Button({
label: T("continueButton")
}).tap(tap).addClass("keyManager-enter").bind("keyManager", tap));
};
})();
pages/static/tour/pages/pages.ls
(function(){
return function(scrollToPage){
var i$, results$ = [];
for (i$ = 1; i$ <= 8; ++i$) {
results$.push((fn$.call(this, i$)));
}
return results$;
function fn$(i){
return inc("0" + i + "/div")(function(){
return scrollToPage(i);
});
}
};
})();
pages/static/tour/topbar/topbar.ls
(function(){
return function(o){
return inc("/addons/topbar2/topbar")({
close: function(){
inc("/lib/util/cache/del/del")("currentTourPage");
return startPage({
history: -1,
animation: "slideDown"
});
},
closeLabel: T("closeButton"),
title: T("whatIsAnton")
});
};
})();
pages/static/unknownUrl/_t.ls
(function(){
return {
unknownPage: {
de: "Unbekannte Seite",
en: "Unknown page",
fr: "Page inconnue",
es: "Página desconocida",
pt: "Página desconhecida"
},
pageDoesNotExist: {
de: "Diese Seite gibt es leider nicht.",
en: "This page doesn't exist.",
fr: "Cette page n'existe pas.",
es: "Esta página no existe.",
pt: "Esta página não existe."
}
};
})();
pages/static/unknownUrl/_topbar/topbar.ls
(function(){
return function(page){
if (!engine.isBotMode && window.log != null) {
return inc("/addons/topbar2/topbar")({
title: T("unknownPage"),
close: function(){
return inc("/pages/content/start")({
history: 0
});
}
});
} else {
return inc("../../_shared/topbarDeeplink/topbar")(page, T("unknownPage"));
}
};
})();
pages/static/unknownUrl/_urlDescription/description.ls
(function(){
return function(page){
return {
pageUrl: inc("/lib/util/browser/getPageUrl/get")(),
title: T("unknownPage"),
metaDescription: "",
noIndex: true,
responseStatusCode: 404
};
};
})();
pages/static/unknownUrl/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")(page);
},
start: function(){
helpers.postEvent("INT-unkownUrl", {
event: "unknownUrl",
userAgent: navigator.userAgent,
url: location.href
});
deviceLog.log({
event: "deviceDebugUnknownUrl",
pageUrl: inc("/lib/util/browser/getPageUrl/get")()
});
return page.css({
margin: "2em auto",
width: "35em",
maxWidth: "90%"
}).html(inc("text/text")(), inc("../_shared/linkToStart/link")());
}
};
};
})();
pages/static/unknownUrl/text/text.ls
(function(){
return function(){
return Div({
padding: "1em",
fontSize: "1.2em"
}).html(T("pageDoesNotExist"));
};
})();
pages/support/help/_debugIcon/icon.ls
(function(){
return function(o){
if (o.isDebug !== true) {
return;
}
return SvgIcon({
svg: path("/lib/svg/shape/debug.svg")
}).css({
display: "inline-block",
marginLeft: "0.3em",
verticalAlign: "-0.2em"
});
};
})();
pages/support/help/_faqUrlDescription/description.ls
(function(){
return function(o){
var url, that;
url = T("faqUrl");
if (o != null && o.question) {
if (that = o.question.uid) {
url += "/" + that;
}
if (that = o.question.urlTitle) {
url += "/" + that.toLowerCase().replace(/ /g, "");
}
}
return {
pageUrl: url,
title: T("faq"),
metaDescription: ""
};
};
})();
pages/support/help/_t.ls
(function(){
return {
faq: {
de: "Häufige Fragen",
en: "FAQ",
fr: "FAQ",
es: "Preguntas frecuentes",
pt: "Perguntas Frequentes"
},
lastSeen: {
de: "Zuletzt angesehen",
en: "Last viewed",
fr: "Vu en dernier",
es: "Visto por última vez",
pt: "Visto por último"
},
informationNotFound: {
de: "Welche Informationen hast du vermisst?",
en: "What information is missing?",
fr: "Quelles informations te manquent ?",
es: "¿Qué información te hizo falta?",
pt: "Qual informação te fez falta?"
},
sendButton: {
de: "Abschicken",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
},
thanksForGoodRating: {
de: "Danke für deine gute Bewertung!",
en: "Thank you for your positive rating!",
fr: "Merci pour cette évaluation positive !",
es: "¡Gracias por tu evaluación!",
pt: "Agradecemos pela sua avaliação positiva!"
},
thanksForRating: {
de: "Danke für deine Bewertung!",
en: "Thank you for your rating!",
fr: "Merci pour cette évaluation !",
es: "¡Gracias por tu evaluación!",
pt: "Agradecemos pela sua avaliação!"
},
helpful: {
de: "Hilfreich",
en: "Helpful",
fr: "Utile",
es: "Útil",
pt: "Útil"
},
notHelpful: {
de: "Wenig hilfreich",
en: "Not helpful",
fr: "Pas utile",
es: "No muy útil",
pt: "Não muito útil"
},
help: {
de: "Hilfe",
en: "Help",
fr: "Aide/FAQ",
es: "Ayuda",
pt: "Ajuda"
},
chat: {
de: "Nachrichten",
en: "Messages",
fr: "Messages",
es: "Mensajes",
pt: "Mensagens"
},
helpChatDescription: {
de: "Die Nachrichten-Funktion ist nur für Erwachsene.",
en: "Messaging is for adults only.",
fr: "La fonction chat est seulement accessible aux adultes.",
es: "La función de chat es sólo para adultos.",
pt: "A função de chat é somente para adultos."
},
sendMessage: {
de: "Nachricht schicken",
en: "write us a message",
fr: "nous écrire un message",
es: "enviarnos un mensaje",
pt: "enviar-nos uma mensagem"
},
noAnswerFoundA: {
de: "Dein Suchbegriff wurde leider nicht gefunden.",
en: "Unfortunately, your search was not successful.",
fr: "Malheureusement, ta recherche n'a pas abouti.",
es: "Desgraciadamente, tu búsqueda no ha dado resultados.",
pt: "Infelizmente, não houve resultados para sua busca."
},
noAnswerFoundB: {
de: "Falls du keine Antwort auf deine Frage findest, kannst du uns auch eine ",
en: "If you don’t find an answer to your question, you can also ",
fr: "Si tu ne trouves pas de réponse à ta question, tu peux aussi ",
es: "Si no encontraste la respuesta a tu pregunta, también puedes ",
pt: "Caso você não encontre uma resposta para sua dúvida, você também pode"
},
startPageBack: {
de: "Zur ANTON-Startseite",
en: "To the ANTON homepage",
fr: "Retour à l'accueil d'ANTON",
es: "Volver a la página de Inicio de ANTON",
pt: "Voltar à página inicial de ANTON"
},
faqUrl: {
de: "faq",
en: "faq",
fr: "faq",
es: "faq",
pt: "faq"
},
searchPlaceholder: {
de: "Suche nach Frage oder Text",
en: "Search by question or text",
fr: "Rechercher par question ou mot",
es: "Busca por pregunta o por término",
pt: "Buscar por pergunta ou texto"
},
backToFaqList: {
de: "Zurück zu den Häufigen Fragen",
en: "Back to the FAQs",
fr: "Retour à la page FAQ",
es: "Volver a Preguntas frecuentes",
pt: "Voltar para Perguntas Frequentes"
},
faqNotFound: {
de: "Diese Frage konnte nicht gefunden werden.",
en: "This question could not be found.",
fr: "Nous n'avons pas de réponse pour cette question.",
es: "No se obtuvieron resultados para esta pregunta.",
pt: "Não foram encontrados resultados para esta pergunta."
}
};
})();
pages/support/help/_topbar/tabMenuItems/chatLabel/badge/badge.ls
(function(){
return function(){
var badgeNumber, div;
badgeNumber = inc("/data/user/chat/calcUnreadMessagesCount/calc")();
div = Div({
display: "flex"
}).addClass("onNewLogEvents_supportChat");
div.onNewLogEvents = function(){
return div.replaceWith(inc(THISFILE)());
};
if (badgeNumber === 0) {
return div;
} else {
return div.css({
position: "absolute",
top: "-8px",
right: "-7px",
backgroundColor: Color.red[600],
color: "white",
fontSize: "0.6em",
width: "1.4em",
height: "1.4em",
borderRadius: "8px",
filter: "drop-shadow(1px 1px 1px rgba(0, 0, 0, 0.4))"
}).html(badgeNumber).onDomAppend(function(){
return div.closest(".tab").css({
overflow: ""
});
});
}
};
})();
pages/support/help/_topbar/tabMenuItems/chatLabel/label.ls
(function(){
return function(){
var chatLabel;
return chatLabel = Div({
display: "inline-block"
}).html(T("chat"), inc("badge/badge")());
};
})();
pages/support/help/_topbar/tabMenuItems/tabMenuItems.ls
(function(){
return function(page){
var isBannedFromChat, ref$, items;
isBannedFromChat = (typeof log != 'undefined' && log !== null ? (ref$ = log.findLast("isBannedFromChat")) != null ? ref$.value : void 8 : void 8) === true;
return items = [
{
label: T("faq"),
selected: _.includes(app.currentPagePath, "faqList"),
click: function(){
return startPage({
path: path("/pages/support/help/faqList/page"),
replace: true
});
}
}, !isBannedFromChat ? {
label: inc("chatLabel/label")(),
selected: _.includes(app.currentPagePath, "chat"),
click: function(){
return page.clickOpenChat();
}
} : void 8
];
};
})();
pages/support/help/_topbar/topbar.ls
(function(){
return function(page, onSearch, searchPlaceholder){
return inc("/addons/topbar2/topbar")({
close: true,
closeLabel: T("closeButton"),
title: !page.params.isStandaloneFaqPage
? T("help")
: T("faq"),
tabMenuItems: !page.params.isStandaloneFaqPage ? function(){
return inc("tabMenuItems/tabMenuItems")(page);
} : void 8,
onSearch: onSearch,
searchPlaceholder: searchPlaceholder
});
};
})();
pages/support/help/chat/_t.ls
(function(){
return {
helpChat: {
de: "Hilfe-Chat",
en: "Support Chat",
fr: "Chat d'assistance",
es: "Chat de ayuda",
pt: "Chat de ajuda"
},
youAreOffline: {
de: "Du bist gerade offline. Deine Nachricht wird gesendet, sobald du wieder online bist.",
en_gb: "You are currently offline. Your message will be sent when you go online again.",
en: "You are currently offline. Your message will be sent when you get back online.",
fr: "Tu n'es pas en ligne actuellement. Ton message sera envoyé quand tu seras en ligne.",
es: "Estás desconectado. Tu mensaje se enviará en cuanto tengas conexión a internet.",
pt: "Você está desconectado. Sua mensagem será enviada assim que sua conexão for reestabelecida."
},
sendButton: {
de: "Senden",
en: "Send",
fr: "Envoyer",
es: "Enviar",
pt: "Enviar"
},
writeHerePlaceholder: {
de: "Schreibe hier ...",
en: "Write here ...",
fr: "Écris ici…",
es: "Escribir aquí...",
pt: "Escreva aqui..."
},
welcomeToHelpChat: {
de: "Willkommen $1!
Hier kannst du dem Team von ANTON schreiben, wenn du Probleme in der App oder Verbesserungsvorschläge hast.
",
en: "Welcome $1!
You can write to the ANTON team here if you have problems with the app or suggestions for improvement.
",
fr: "Bienvenue $1 !
Ici tu peux écrire à l'équipe ANTON si tu as des problèmes dans l'appli ou des idées d'amélioration.
",
es: "Te damos la bienvenida al chat de ayuda de ANTON.
Aquí puedes dejarle mensajes al equipo de ANTON si tienes alguna duda o algún problema con la aplicación.
",
pt: "Seja bem-vindo(a)!
Aqui você pode entrar em contato com a equipe do ANTON caso tenha problemas com o aplicativo ou sugestões de melhorias.
"
},
introMessage: {
de: "Wir erhalten viele Nachrichten und können deshalb nicht alle sofort beantworten. Schau doch mal in den Häufigen Fragen, vielleicht ist dein Problem dort bereits beschrieben. Wenn du keine Antwort findest, schreibe uns bitte möglichst detailliert, wie dein Problem zustande kam und was du beobachten kannst.",
en: "We receive many messages and therefore can not answer all of them immediately. Have a look at the Frequently Asked Questions; there might be a solution to your problem there. If you don't find an answer, please write us a detailed message, including how your problem came about and what you see on your screen.",
fr: "Nous recevons beaucoup de messages et ne pouvons pas toujours répondre immédiatement. Nous te conseillons de regarder d'abord notre section Aide/FAQ. Tu y trouveras peut-être une réponse à ta question. Si ce n'est pas le cas, tu peux nous écrire pour décrire ton problème en détail, expliquer comment il s'est produit et ce que tu vois sur ton écran.",
es: "Actualmente nos están llegando muchos mensajes al día y no podemos responderlos todos inmediatamente. ¿Ya buscaste tu problema en las preguntas frecuentes? Si no encontraste una solución, descríbenos tu problema lo más detalladamente posible.",
pt: "Nós recebemos muitas mensagens diariamente e, portanto, não podemos respondê-las imediatamente. Você já procurou sua dúvida nas Perguntas Frequentes? Se você não conseguir encontrar uma resposta por lá, por favor, escreva para nós com o máximo de detalhes possível."
},
christmasDaysDelay: {
de: "Es kann ein paar Tage dauern, bis wir auf deine Nachricht antworten. Das ANTON-Team ist gerade in den Weihnachtsferien. :)",
en_gb: "It might take a few days until we reply to your message. The ANTON Team is currently on their Christmas holidays. :)",
en: "It might take a few days until we reply to your message. The ANTON Team is currently on Christmas vacation. :)",
fr: "Nous aurons peut-être besoin de quelques jours pour répondre à ton message. L'équipe ANTON est en vacances. :)",
es: "Puede ser que tardemos un par de días en responderte. El equipo de ANTON está de vacaciones. :)",
pt: "Pode ser que demore alguns dias para respondermos à sua mensagem. A equipe ANTON está de férias. :)"
},
yesterday: {
de: "Gestern",
en: "Yesterday",
fr: "Hier",
es: "Ayer",
pt: "Ontem"
},
today: {
de: "Heute",
en: "Today",
fr: "Aujourd'hui",
es: "Hoy",
pt: "Hoje"
},
saveDraft: {
de: "Deine Nachricht ist noch nicht abgeschickt, möchtest du den Entwurf speichern?",
en: "Your message hasn’t been sent yet. Do you want to save it as a draft?",
fr: "Ton message n'a pas encore été envoyé. Veux-tu l'enregistrer comme brouillon ?",
es: "Tu mensaje aún no ha sido enviado. ¿Quieres guardar el borrador?",
pt: "Sua mensagem ainda não foi enviada. Gostaria de salvá-la como rascunho?"
},
helpChatUrl: {
de: "hilfe-chat",
en: "help-chat",
fr: "chat-dassistance",
es: "chat-de-ayuda",
pt: "chat-de-ajuda"
}
};
})();
pages/support/help/chat/_urlDescription/description.ls
(function(){
return function(){
return {
pageUrl: T("helpChatUrl"),
title: T("helpChat"),
metaDescription: ""
};
};
})();
pages/support/help/chat/bottom/_shared/sendButton/button.ls
(function(){
return function(page, isIos){
var tap, div;
tap = function(){
return inc("send/send")(page);
};
div = Div().css({
display: "flex",
padding: "0 0.5em"
}).append(Div().css({
flex: "0 1 auto",
margin: "0.1em 0.15em 0.1em 0.3em",
color: Color.blue[500]
}).html(T("sendButton")), SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.blue[500],
size: "0.9em"
}).css({
marginTop: "0.1em"
}));
if (isIos) {
div.bind("touchstart", tap);
} else {
div.tap(tap);
}
return div;
};
})();
pages/support/help/chat/bottom/_shared/sendButton/send/checkOnline/check.ls
(function(){
return function(){
if (!inc("/lib/util/isOnline/isOnline")()) {
return setTimeout(function(){
return inc("/lib/gui/toast/toast")({
label: T("youAreOffline")
});
}, 1000);
}
};
})();
pages/support/help/chat/bottom/_shared/sendButton/send/send.ls
(function(){
return function(page){
var message, e;
message = page.input.getValue();
message = _.trim(message);
if (message.length === 0) {
return;
}
inc("/lib/util/cache/set/set")("helpChatText", "");
e = {
event: "supportChat",
from: "user",
messageAt: new Date().toISOString(),
message: message
};
log.log(e);
inc("checkOnline/check")();
page.onNewLogEvents([e]);
return page.input.setValue("");
};
})();
pages/support/help/chat/bottom/bottom.ls
(function(){
return function(page){
var isMobile, div, iOSTooltipFix;
isMobile = !inc("/lib/util/isDesktop/isDesktop")() || deviceLog['var']("showScreenKeyboard");
div = Div().css({
background: Color.grey[100]
}).append(Div().css({
flex: "0 0 auto",
alignItems: "stretch",
display: "flex",
backgroundColor: Color.grey[100],
width: "35em",
maxWidth: "100%",
margin: "0 auto",
flexDirection: isMobile ? "column" : void 8
}).append(isMobile ? inc("buttonsMobileSendOrDown/buttons")(page).css({
zIndex: 1
}) : void 8, iOSTooltipFix = Div().css({
flex: "1 1 auto",
borderTop: "60px solid rgba(200,20,20, 0)",
transform: "translateY(-60px)",
marginBottom: "-60px"
}).append(inc("input/input")(page, isMobile)), !isMobile ? inc("buttonDesktopSend/button")(page) : void 8));
return div;
};
})();
pages/support/help/chat/bottom/buttonDesktopSend/button.ls
(function(){
return function(page){
return inc("../_shared/sendButton/button")(page);
};
})();
pages/support/help/chat/bottom/buttonsMobileSendOrDown/buttons.ls
(function(){
return function(page){
var isIos, b;
isIos = _.includes(inc("/lib/util/calcAppType/calc")().toLowerCase(), "ios");
return Div().css({
display: "flex",
borderBottom: b = "1px solid " + Color.grey[300],
borderLeft: b,
borderRight: b,
width: "100%",
alignItems: "stretch"
}).append(inc("downButton/button")(page, isIos), Div({
flex: "1 1 auto"
}), inc("sendButton/button")(page, isIos));
};
})();
pages/support/help/chat/bottom/buttonsMobileSendOrDown/downButton/button.ls
(function(){
return function(page, isIos){
var tap, div;
tap = function(){
return page.input.stop();
};
div = Div({
display: "flex",
alignSelf: "stretch",
padding: "0 1.5em 0 0.3em"
}).html(SvgIcon({
svg: path("/lib/svg/icon/arrow-down-small.svg"),
color: Color.blue[500],
size: "0.9em"
})).hide();
if (isIos) {
div.bind("touchstart", tap);
} else {
div.tap(tap);
}
return page.downButton = div;
};
})();
pages/support/help/chat/bottom/buttonsMobileSendOrDown/sendButton/button.ls
(function(){
return function(page, isIos){
return inc("../../_shared/sendButton/button")(page, isIos).css({
padding: "0.3em"
});
};
})();
pages/support/help/chat/bottom/input/input.ls
(function(){
return function(page, isMobile){
var value, onStart, onStop, cacheText, input, b;
value = inc("/lib/util/cache/get/get")("helpChatText") || "";
onStart = function(){
var ref$;
return (ref$ = page.downButton) != null ? ref$.show() : void 8;
};
onStop = function(){
var ref$;
return (ref$ = page.downButton) != null ? ref$.hide() : void 8;
};
cacheText = function(){
var v;
v = input.getValue();
return inc("/lib/util/cache/set/set")("helpChatText", v);
};
input = inc("/lib/gui/inputEditable/input")({
value: value,
multiline: true,
autoCapCorSpelCom: "sentences on false none",
placeholder: T("writeHerePlaceholder"),
lineHeight: "1.6em",
linePadding: "0 0.2em",
onStart: onStart,
onStop: onStop,
maxLength: 5000
}).css({
flex: "1 1 auto",
borderLeft: b = "1px solid " + Color.grey[300],
borderRight: b,
borderTop: !isMobile ? b : void 8,
backgroundColor: Color.grey[75],
minHeight: "4em",
maxHeight: "12em"
}).onElementClass("onPageFinish", cacheText);
page.input = input;
return input;
};
})();
pages/support/help/chat/calcMessages/calc.ls
(function(){
return function(page){
var events, messages;
events = log.list({
event: "supportChat"
});
events = _.filterLastInGroup(events, "messageAt");
events = _.orderBy(events, "messageAt", "asc");
return messages = _.concat(inc("introMessage/introMessage")(page), events);
};
})();
pages/support/help/chat/calcMessages/introMessage/introMessage.ls
(function(){
return function(page){
var now, message;
now = inc("/lib/util/formatDate2/format")();
message = T("welcomeToHelpChat", page.userDescription.displayName) + (now.specialDays.isChristmasDays || now.specialDays.isNewYear
? T("christmasDaysDelay")
: T("introMessage"));
return {
from: "support",
readAt: new Date(),
message: message
};
};
})();
pages/support/help/chat/list/calcData/calc.ls
(function(){
return function(page){
var data, lastDate, i$, ref$, len$, i, m, date, ref1$;
data = [];
lastDate = "";
data.push({
type: "space"
});
for (i$ = 0, len$ = (ref$ = page.messages).length; i$ < len$; ++i$) {
i = i$;
m = ref$[i$];
date = (ref1$ = m.messageAt) != null ? ref1$.substr(0, 10) : void 8;
if (date && date !== lastDate) {
lastDate = date;
data.push({
type: "date",
date: date
});
}
data.push(m);
}
data.push({
type: "space"
});
return data;
};
})();
pages/support/help/chat/list/list.ls
(function(){
return function(page){
page.data = inc("calcData/calc")(page);
return page.list = ListDiv({
data: page.data,
row: inc("row/row")(page),
nearScopeSize: 1,
nearScopeDelay: 1000,
debug: false,
scopeRender: {
enabled: true,
debug: false,
maxDurations: "200 5 5",
nearScopeSize: 1
},
listPosition: {
rowIndex: 10000,
bottomOffset: 0
}
}).css({
height: "var(--centerHeight)"
});
};
})();
pages/support/help/chat/list/row/date/row.ls
(function(){
return function(page, data){
var d;
d = inc("/lib/util/formatDate2/format")(data.date);
return Div({
width: "100%",
padding: "1.5em 0 0.5em",
fontWeight: "bold"
}).append(d.formats.date);
};
})();
pages/support/help/chat/list/row/message/avatar/avatar.ls
(function(){
return function(page, message){
return Div().css({
flex: "0 0 auto",
display: "flex",
width: "2em",
height: "2em"
}).onScopeRender(function(){
return this.append(message.from === "support"
? SvgIcon({
svg: path("/lib/svg/logo/anton-smiley.svg"),
width: "0.9em",
height: "0.9em"
})
: inc("/lib/gui/avatar/avatar")(page.userDescription).css({
width: "2em",
height: "2em"
}));
});
};
})();
pages/support/help/chat/list/row/message/center/center.ls
(function(){
return function(message){
return Div().css({
flex: "0 1 auto",
padding: "0.8em 0.4em",
paddingTop: message.messageAt ? "1em" : void 8,
lineHeight: "1.4em",
textAlign: "left",
hyphens: "wrap",
userSelect: "text",
wordWrap: "break-word",
minWidth: "10em",
borderRadius: "5px",
border: message.from === "support"
? "1px solid " + Color.grey[200]
: "1px solid " + Color.grey[300]
}).css(message.from === "support"
? {
backgroundColor: Color.grey[75],
marginRight: "1em"
}
: {
backgroundColor: Color.grey[150],
marginLeft: "1em"
}).append(inc("text/text")(message), inc("unreadStar/unreadStar")(message), inc("date/date")(message));
};
})();
pages/support/help/chat/list/row/message/center/date/date.ls
(function(){
return function(message){
var date;
if (!message.messageAt) {
return;
}
date = inc("/lib/util/formatDate2/format")(message.messageAt);
return Div().css({
position: "absolute",
right: message.from === "user" ? "7px" : void 8,
left: message.from !== "user" ? "7px" : void 8,
top: "2px",
fontSize: "0.7em",
color: Color.grey[500],
zIndex: 2
}).html(date.formats.time);
};
})();
pages/support/help/chat/list/row/message/center/text/text.ls
(function(){
return function(message){
return Div().secureHtml(message.message);
};
})();
pages/support/help/chat/list/row/message/center/unreadStar/setReadAt/set.ls
(function(){
return function(message){
var e;
e = message;
log.log({
event: "supportChat",
from: e.from,
fromShort: e.fromShort,
messageAt: e.messageAt,
message: e.message,
readAt: new Date().toISOString()
});
return log.deleteEvent(e);
};
})();
pages/support/help/chat/list/row/message/center/unreadStar/unreadStar.ls
(function(){
return function(message){
var setReadTimeout, div;
if (message.from === "user" || message.readAt) {
return;
}
setReadTimeout = function(){
return setTimeout(function(){
if (!div.isVisible()) {
return;
}
if (typeof document.hasFocus == 'function' && document.hasFocus()) {
return inc("setReadAt/set")(message);
} else {
return setReadTimeout();
}
}, 3000);
};
return div = Div().css({
position: "absolute",
right: "-0.25em",
top: "-0.25em",
pointerEvents: "none",
width: "1em",
height: "1em",
backgroundColor: Color.blue[400],
borderRadius: "0.5em"
}).append(SvgIcon({
svg: path("/lib/svg/shape/asteriks.svg"),
color: Color.white,
width: "0.6em",
height: "0.6em"
}).css({
position: "absolute",
top: "0.2em",
left: "0.2em"
})).onScopeRender(setReadTimeout);
};
})();
pages/support/help/chat/list/row/message/corner/corner.ls
(function(){
return function(message){
return Div().css({
flex: "0 0 auto",
width: "0.3em"
}).append(Div().css({
width: "0.7em",
height: "0.7em",
transform: "rotate(45deg)",
marginTop: "0.5em",
border: message.from === "support"
? "1px solid " + Color.grey[200]
: "1px solid " + Color.grey[300],
borderRadius: "3px"
}).css(message.from === "support"
? {
marginRight: "-0.4em",
backgroundColor: Color.grey[75]
}
: {
marginLeft: "-0.4em",
backgroundColor: Color.grey[150]
}), Div().css({
position: "absolute",
top: 0,
left: message.from === "support" ? "1px" : void 8,
right: message.from !== "support" ? "1px" : void 8,
width: "0.7em",
height: "0.7em",
transform: "rotate(45deg)",
marginTop: "0.5em",
borderRadius: "3px",
boxSizing: "content-box",
zIndex: 1
}).css(message.from === "support"
? {
marginRight: "-0.4em",
backgroundColor: Color.grey[75]
}
: {
marginLeft: "-0.4em",
backgroundColor: Color.grey[150]
}));
};
})();
pages/support/help/chat/list/row/message/row.ls
(function(){
return function(page, message){
return Div({
width: "100%"
}).append(Div({
display: "flex",
padding: "0.4em 0",
maxWidth: "35em",
margin: "0 auto",
alignItems: "flex-start",
justifyContent: "flex-start",
flexDirection: message.from === "support" ? "row" : "row-reverse"
}).html(inc("avatar/avatar")(page, message), inc("corner/corner")(message), inc("center/center")(message), inc("space/space")(message)));
};
})();
pages/support/help/chat/list/row/message/space/space.ls
(function(){
return function(){
return Div().css({
flex: "0 1 auto",
width: "3em",
minWidth: "3em"
});
};
})();
pages/support/help/chat/list/row/row.ls
(function(){
return function(page){
return function(data){
if (data.type === "date") {
return inc("date/row")(page, data);
} else if (data.type === "space") {
return inc("space/row")();
} else {
return inc("message/row")(page, data);
}
};
};
})();
pages/support/help/chat/list/row/space/row.ls
(function(){
return function(){
return Div({
width: "100%",
height: "2em"
});
};
})();
pages/support/help/chat/onNewLogEvents/calcInsertPosition/calc.ls
(function(){
return function(page, e){
var data, i$, i, d;
data = page.data;
if (data.length === 3) {
return 3;
}
for (i$ = data.length - 1; i$ >= 0; --i$) {
i = i$;
d = data[i];
if (d.messageAt === e.messageAt) {
page.list.removeRow(i);
return i;
}
if (d.messageAt < e.messageAt) {
return i + 1;
}
}
};
})();
pages/support/help/chat/onNewLogEvents/on.ls
(function(){
return function(page){
page.addClass("onNewLogEvents_supportChat");
return page.onNewLogEvents = function(events){
var dataLength, events2, i$, len$, e, insertPosition, dataLength2;
dataLength = page.data.length;
events2 = _.filter(events, function(e){
return !e.logId || e.logId === log.id();
});
for (i$ = 0, len$ = events2.length; i$ < len$; ++i$) {
e = events2[i$];
insertPosition = inc("calcInsertPosition/calc")(page, e);
if (insertPosition > 0) {
page.list.insertRow({
position: insertPosition,
data: e
});
}
}
dataLength2 = page.data.length;
if (dataLength2 > dataLength) {
return requestAnimationFrame(function(){
return page.list.scrollRowIntoView(dataLength2 - 1);
});
}
};
};
})();
pages/support/help/chat/page.ls
(function(){
return function(page){
return {
top: function(){
return inc("../_topbar/topbar")(page);
},
urlDescription: function(){
return inc("_urlDescription/description")();
},
bottom: function(){
return inc("bottom/bottom")(page);
},
start: function(){
page.userDescription = inc("/data/user/calcUserDescription/calc")();
page.messages = inc("calcMessages/calc")(page);
page.html(inc("list/list")(page));
return inc("onNewLogEvents/on")(page);
}
};
};
})();
pages/support/help/faqList/_topbar/topbar.ls
(function(){
return function(page){
var onSearch;
onSearch = function(query){
return page.onSearch(query);
};
if (page.params.isDeepLink) {
return inc("/addons/topbar2/topbar")({
title: T("faq"),
back: true,
backLabel: T("startPageBack"),
backDeepLink: function(){
return startPage({
path: path("/pages/start/welcome/page"),
history: 0,
animation: "slideRight"
});
},
onSearch: onSearch,
searchPlaceholder: T("searchPlaceholder")
});
} else {
return inc("../../_topbar/topbar")(page, onSearch, T("searchPlaceholder"));
}
};
})();
pages/support/help/faqList/category/category.ls
(function(){
return function(page, category){
if (category.isDebug && !engine.isDebug) {
return;
}
return Div().addClass("category_" + category.uid).css({
width: "35em",
maxWidth: "90%",
margin: "1em auto"
}).append(inc("name/name")(category), inc("questions/questions")(page, category));
};
})();
pages/support/help/faqList/category/name/name.ls
(function(){
return function(category){
return Div().css({
padding: "1em",
borderBottom: "1px solid " + Color.grey[200],
fontWeight: "bold"
}).append(category.name, inc("../../../_debugIcon/icon")(category));
};
})();
pages/support/help/faqList/category/questions/question/arrowIcon/arrowIcon.ls
(function(){
return function(){
return Div().css({
flex: "0 0 auto",
display: "flex"
}).append(SvgIcon({
svg: path("/lib/svg/icon/arrow-right-small.svg"),
color: Color.grey[400]
}));
};
})();
pages/support/help/faqList/category/questions/question/lastViewed/lastViewed.ls
(function(){
return function(lastPath, question){
if (lastPath !== question.path) {
return;
}
return Div().append(Div().css({
display: "inline-block",
backgroundColor: Color.grey[200],
padding: "0.2em 0.5em",
fontSize: "0.8em",
color: "black",
marginTop: "0.3em"
}).html(T("lastSeen")));
};
})();
pages/support/help/faqList/category/questions/question/question.ls
(function(){
var lastPath;
lastPath = null;
return function(page, category, question){
var click, setLastViewed, div, title;
if (question.isDebug && !engine.isDebug) {
return;
}
click = function(){
lastPath = question.path;
return startPage({
path: path("../../../../faqQuestion/page"),
animation: "slideLeft",
params: {
searchQuery: page.params.search,
questionPath: question.path,
categoryName: category.name,
isStandaloneFaqPage: page.params.isStandaloneFaqPage
}
});
};
setLastViewed = function(){
lastPath = question.path;
return title.append(inc("lastViewed/lastViewed")(lastPath, question));
};
div = Div().addClass("question").addClass("question_" + question.uid).css({
display: "flex",
alignItems: "stretch",
padding: "0.5em",
borderBottom: "1px solid " + Color.grey[200]
}).append(title = inc("title/title")(page, question).append(inc("lastViewed/lastViewed")(lastPath, question)), inc("arrowIcon/arrowIcon")()).tap(click);
div.path = question.path;
div.setLastViewed = setLastViewed;
return div;
};
})();
pages/support/help/faqList/category/questions/question/title/title.ls
(function(){
return function(page, question){
var label, q;
label = (q = page.params.search)
? inc("/lib/util/tagSearchInString/tagSearchInString")(question.title, q, "")
: question.title;
return Div().css({
flex: "1 1 auto",
padding: "0.5em 0",
textAlign: "left",
lineHeight: "1.5em"
}).append(label, inc("../../../../../_debugIcon/icon")(question));
};
})();
pages/support/help/faqList/category/questions/questions.ls
(function(){
return function(page, category){
var question;
return Div({
marginBottom: "1em"
}).append((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = category.questions).length; i$ < len$; ++i$) {
question = ref$[i$];
results$.push(inc("question/question")(page, category, question));
}
return results$;
}()));
};
})();
pages/support/help/faqList/clickOpenChat/click.ls
(function(){
return function(page){
return function(){
var openChat;
openChat = function(){
return startPage({
path: path("../../chat/page"),
animation: "fadeIn",
replace: true
});
};
if (inc("/lib/util/cache/get/get")("chatParentalGatePassed")) {
return openChat();
} else {
return inc("/lib/gui/parentalGate/parentalGate")(function(){
openChat();
return inc("/lib/util/cache/set/set")("chatParentalGatePassed", true);
}, {
title: T("helpChatDescription"),
forceShow: true
});
}
};
};
})();
pages/support/help/faqList/create/create.ls
(function(){
return function(page){
return function(categories){
var isStandalone, isBannedFromChat, ref$, category, that;
isStandalone = page.params.isStandaloneFaqPage;
isBannedFromChat = (typeof log != 'undefined' && log !== null ? (ref$ = log.findLast("isBannedFromChat")) != null ? ref$.value : void 8 : void 8) === true;
page.categories = categories;
if (page.categories.length === 0) {
inc("/lib/offline/offlinePage/offlinePage")(page);
return;
}
page.categories = inc("../filterCategories/filter")(page);
if (page.params.search && _.flatMap(page.categories, "questions").length === 0) {
inc("showNotFoundMessage/show")(page);
return;
}
page.html((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = page.categories).length; i$ < len$; ++i$) {
category = ref$[i$];
results$.push(inc("../category/category")(page, category));
}
return results$;
}()), !isStandalone && !isBannedFromChat ? inc("../notFoundMessage/message")(T("noAnswerFoundB"), page.clickOpenChat).css({
textAlign: "left",
margin: "1.5em auto"
}) : void 8);
if (that = page.params.questionUid) {
return inc("handleQuestionUid/handle")(page, that);
}
};
};
})();
pages/support/help/faqList/create/handleQuestionUid/handle.ls
(function(){
return function(page, questionUid){
var fromQuestion;
fromQuestion = page.findFirst(".question_" + questionUid);
delete page.params.questionUid;
if (fromQuestion) {
fromQuestion.setLastViewed();
return page.scrollElementIntoView(fromQuestion, {
center: true,
instant: true
});
}
};
})();
pages/support/help/faqList/create/showNotFoundMessage/show.ls
(function(){
return function(page){
var isStandalone, isBannedFromChat, ref$, label;
isStandalone = page.params.isStandaloneFaqPage;
isBannedFromChat = (typeof log != 'undefined' && log !== null ? (ref$ = log.findLast("isBannedFromChat")) != null ? ref$.value : void 8 : void 8) === true;
label = T("noAnswerFoundA");
if (isStandalone || isBannedFromChat) {
return page.html(inc("../../notFoundMessage/message")(label));
} else {
label += " " + T("noAnswerFoundB");
return page.html(inc("../../notFoundMessage/message")(label, page.clickOpenChat));
}
};
})();
pages/support/help/faqList/filterCategories/filter.ls
(function(){
return function(page){
var filteredCategories, query, ref$;
filteredCategories = _.clone(page.categories);
query = (ref$ = page.params.search) != null ? ref$.toLowerCase() : void 8;
filteredCategories = _.filter(filteredCategories, function(cat){
return cat.guiLanguages == null || _.includes(cat.guiLanguages, engine.guiLanguage);
});
inc("filterQuestions/filter")(query, filteredCategories);
filteredCategories = _.filter(filteredCategories, function(c){
return c.questions.length > 0;
});
if (query && page.params.history !== -1) {
inc("logSearch/log")(query, filteredCategories);
}
return filteredCategories;
};
})();
pages/support/help/faqList/filterCategories/filterQuestions/filter.ls
(function(){
return function(query, filteredCategories){
var i$, len$, i, category, filteredQuestions, question, results$ = [];
for (i$ = 0, len$ = filteredCategories.length; i$ < len$; ++i$) {
i = i$;
category = filteredCategories[i$];
filteredQuestions = query
? (fn$())
: category.questions;
filteredQuestions = _.compact(filteredQuestions);
filteredQuestions = _.filter(filteredQuestions, fn1$);
results$.push(category.questions = filteredQuestions);
}
return results$;
function fn$(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = category.questions).length; i$ < len$; ++i$) {
question = ref$[i$];
results$.push(inc("filterBySearchQuery/filter")(category, question, query));
}
return results$;
}
function fn1$(question){
return question.guiLanguages == null || in$(engine.guiLanguage, question.guiLanguages);
}
};
})();
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
pages/support/help/faqList/filterCategories/filterQuestions/filterBySearchQuery/filter.ls
(function(){
return function(category, question, query){
var categoryName, categoryTags, that, title, tags, faq, text, ref$;
query = _.deburr(query);
categoryName = category.name.toLowerCase();
categoryTags = (that = category.tags) ? _.ensureArray(that) : void 8;
if (_.includes(categoryName, query), _.some(categoryTags, function(t){
return _.includes(_.deburr(t.toLowerCase()), query);
})) {
return question;
}
title = question.title.toLowerCase();
title = _.deburr(title);
tags = _.ensureArray(question.tags);
faq = inc(question.path)();
text = engine.isiOsApp
? faq.ios
: engine.isAmazonDevice
? (ref$ = faq.amazon) != null
? ref$
: faq.android
: engine.isAndroidApp
? faq.android
: !engine.isMobileApp ? faq.web : void 8;
text == null && (text = faq.body);
if (that = text.outerText) {
text = that;
}
text = text != null ? typeof text.toLowerCase == 'function' ? text.toLowerCase() : void 8 : void 8;
text = _.deburr(text);
if (_.includes(title, query) || _.includes(text, query) || _.some(tags, function(t){
return _.includes(_.deburr(t.toLowerCase()), query);
})) {
return question;
}
};
})();
pages/support/help/faqList/filterCategories/logSearch/log.ls
(function(){
return function(query, filteredCategories){
var eventName, l;
if (typeof log != 'undefined' && log !== null) {
eventName = "debugFaqSearch";
l = log;
} else {
eventName = "deviceDebugFaqSearch";
l = deviceLog;
}
return l.log({
event: eventName,
query: query,
matches: _.flatMap(filteredCategories, "questions").length,
guiLanguage: engine.guiLanguage
});
};
})();
pages/support/help/faqList/loadCategories/_t.ls
(function(){
return {
restartError: {
de: "Ups, hier ist ein Problem aufgetreten. Wir kümmern uns darum.
ANTON wird neu gestartet.",
en: "Oops, an error occurred. We are taking care of it.
ANTON will be restarted.",
fr: "Oups… une erreur s'est produite. On s'en occupe !