übertrag zum PC
This commit is contained in:
254
public/js/app.js
254
public/js/app.js
@@ -3672,16 +3672,22 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
let settings = this.findBy(".setting", true);
|
||||
const settingsManager = SettingsManager.getInstance();
|
||||
|
||||
for (let i = 0; i < settings.length; i++) {
|
||||
for (let i = 0; i < settings.length; i++) {
|
||||
let setting = settings[i];
|
||||
const name = setting.name;
|
||||
let value = settingsManager.getSetting(name);
|
||||
let value;
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
value = settingsManager.getSetting(name);
|
||||
} else {
|
||||
value = localStorage.getItem(name);
|
||||
}
|
||||
|
||||
let isCheckable = false;
|
||||
if (setting instanceof HTMLInputElement && (setting.type === 'checkbox' || setting.type === 'radio')) {
|
||||
isCheckable = true;
|
||||
}
|
||||
if (!settingsManager.hasSetting(name) && Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
if (((!setting["dataset"]["raw"] && !settingsManager.hasSetting(name)) || (setting["dataset"]["raw"] && value === null))
|
||||
&& Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
value = setting["dataset"]["default"];
|
||||
if (Helper.isNotNull(setting["dataset"]["defaultTranslateable"])) {
|
||||
|
||||
@@ -3704,19 +3710,15 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
}
|
||||
|
||||
setting.addEventListener("change", function () {
|
||||
// console.log(setting);
|
||||
let value = this.value;
|
||||
if (isCheckable) {
|
||||
if (this.checked)
|
||||
{
|
||||
settingsManager.setSetting(name, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
settingsManager.setSetting(name, null);
|
||||
}
|
||||
if (isCheckable && !this.checked) {
|
||||
value = null;
|
||||
}
|
||||
else {
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
settingsManager.setSetting(name, value);
|
||||
} else {
|
||||
localStorage.setItem(name, value);
|
||||
}
|
||||
delete setting["dataset"]["translationValue"];
|
||||
delete setting["dataset"]["translation"];
|
||||
@@ -4599,6 +4601,88 @@ InitPromise.addPromise(function(app){
|
||||
app.addDeepLink("newPassword", SetNewPasswordSite);
|
||||
});
|
||||
|
||||
class Matomo {
|
||||
|
||||
static init() {
|
||||
Matomo.isTrackingPromise = new Promise(async (resolve) => {
|
||||
let shouldTrack = localStorage.getItem(Matomo.LOCAL_STORAGE_KEY);
|
||||
console.log(shouldTrack,Helper.isNull(shouldTrack));
|
||||
if (Helper.isNull(shouldTrack)) {
|
||||
shouldTrack = await Matomo._askIsTracking();
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);
|
||||
}
|
||||
else {
|
||||
console.log(shouldTrack, (shouldTrack === "1"));
|
||||
shouldTrack = (shouldTrack === "1");
|
||||
Matomo.setTrack(shouldTrack);
|
||||
}
|
||||
resolve(shouldTrack);
|
||||
});
|
||||
Matomo.isTrackingPromise.then(() => {
|
||||
Matomo.push(['trackPageView']);
|
||||
Matomo.push(['enableLinkTracking']);
|
||||
Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php']);
|
||||
Matomo.push(['setSiteId', '1']);
|
||||
|
||||
let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];
|
||||
g.type = 'text/javascript';
|
||||
g.async = true;
|
||||
g.defer = true;
|
||||
g.src = Matomo.TRACK_SITE + '/piwik.js';
|
||||
s.appendChild(g);
|
||||
});
|
||||
}
|
||||
|
||||
static async _askIsTracking() {
|
||||
console.log(Matomo.TRACK_SITE + Matomo.BASE_PATH + "isTracked");
|
||||
Matomo.isTrackingPromise = Matomo.query("isTracked")
|
||||
.then(xml => {
|
||||
let textContent = xml.firstChild.textContent;
|
||||
// localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, textContent);
|
||||
return (textContent === "1")
|
||||
});
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async query(method) {
|
||||
return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {
|
||||
// "method":"POST",
|
||||
"mode": "cors",
|
||||
"credentials": "include",
|
||||
// "headers": {
|
||||
// 'Access-Control-Allow-Origin': '*',
|
||||
// 'Access-Control-Allow-Credentials': 'true',
|
||||
// },
|
||||
}).then(res => res.text()).then(text => (new window.DOMParser()).parseFromString(text, "text/xml"));
|
||||
}
|
||||
|
||||
static getTrackingPromise() {
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async setTrack(shouldTrack) {
|
||||
Matomo.isTrackingPromise = Promise.resolve(shouldTrack);
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? "1" : "0");
|
||||
return await Matomo.query((shouldTrack) ? "doTrack" : "doIgnore");
|
||||
}
|
||||
|
||||
static async push(arr) {
|
||||
if (await Matomo.getTrackingPromise()) {
|
||||
window["_paq"].push(arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Matomo.LOCAL_STORAGE_KEY = "matomoShouldTrack";
|
||||
Matomo.TRACK_SITE = "//matomo.silas.link";
|
||||
Matomo.BASE_PATH = "/index.php?module=API&method=AjaxOptOut.";
|
||||
|
||||
InitPromise.addPromise(() => {
|
||||
window["_paq"] = window["_paq"] || [];
|
||||
|
||||
Matomo.init();
|
||||
});
|
||||
|
||||
class ScaleHelper {
|
||||
async scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {
|
||||
|
||||
@@ -5899,7 +5983,7 @@ class LevelSite extends WordRotatorBaseSite {
|
||||
let levelSegment = this.findBy("#level");
|
||||
levelSegment.removeAllChildren().appendChild(level.getRootSegment().getElement());
|
||||
let scaleHelper = new ScaleHelper();
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length*1.5 , null, 0);
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);
|
||||
|
||||
this.level = level;
|
||||
return this.tutorial();
|
||||
@@ -6003,14 +6087,9 @@ class LevelSite extends WordRotatorBaseSite {
|
||||
}).then(() => {
|
||||
return Promise.all([new Promise((r) => {
|
||||
setTimeout(() => {
|
||||
console.log("fadeIn");
|
||||
r(continueButton.fadeIn().then(() => {
|
||||
console.log("fade in ended!");
|
||||
}));
|
||||
r(continueButton.fadeIn());
|
||||
}, 500);
|
||||
}), audioOptions.loadedPromise.then(() => {
|
||||
console.log("audio loaded");
|
||||
}).catch(e => {
|
||||
}), audioOptions.loadedPromise.catch(e => {
|
||||
console.error(e);
|
||||
})]);
|
||||
});
|
||||
@@ -6406,34 +6485,98 @@ InitPromise.addPromise(app => {
|
||||
MenuSite.app = app;
|
||||
});
|
||||
|
||||
class PrivacyPolicySite extends WordRotatorBaseSite {
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/privacyPolicy.html", "privacyPolicy");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("privacyPolicy", PrivacyPolicySite);
|
||||
});
|
||||
|
||||
class CreditsSite extends WordRotatorBaseSite{
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/credits.html", "credits");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("credits", PrivacyPolicySite);
|
||||
});
|
||||
|
||||
class ChooseThemeDialog extends Dialog {
|
||||
|
||||
constructor() {
|
||||
let viewPromise = ViewInflater.inflate("html/application/dialog/chooseTheme.html").then(view => {
|
||||
let template = view.querySelector("#choose-theme-template");
|
||||
template.remove();
|
||||
template.id = null;
|
||||
|
||||
let themeTemplateContainer = template.querySelector("#theme-choose-container");
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(template);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.querySelector(".name").appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
themeElem["dataset"]["theme"] = theme._name;
|
||||
|
||||
themeElem.addEventListener("click", () => {
|
||||
this.result = themeElem["dataset"]["theme"];
|
||||
this.close();
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
return view;
|
||||
});
|
||||
|
||||
super(viewPromise, "choose-theme-dialog-title");
|
||||
}
|
||||
}
|
||||
|
||||
class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
constructor(site) {
|
||||
super(site, "html/application/fragment/settings.html");
|
||||
}
|
||||
|
||||
onFirstStart() {
|
||||
let themeTemplate = this.findBy("#theme-radio-template");
|
||||
delete themeTemplate["id"];
|
||||
let themeTemplateContainer = themeTemplate.parentNode;
|
||||
themeTemplateContainer.removeAllChildren();
|
||||
// let themeTemplate = this.findBy("#theme-radio-template");
|
||||
// delete themeTemplate["id"];
|
||||
// let themeTemplateContainer = themeTemplate.parentNode;
|
||||
// themeTemplateContainer.removeAllChildren();
|
||||
//
|
||||
// for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
// let themeElem = Helper.cloneNode(themeTemplate);
|
||||
// let theme = ThemeManager.themes[i];
|
||||
// themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
//
|
||||
// let inputElem = themeElem.querySelector("input");
|
||||
// inputElem.value = theme._className;
|
||||
//
|
||||
// inputElem.addEventListener("change", function() {
|
||||
// if (this.checked){
|
||||
// ThemeManager.changeCurrentTheme(theme)
|
||||
// }
|
||||
// });
|
||||
// themeTemplateContainer.appendChild(themeElem);
|
||||
// }
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(themeTemplate);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
let currentThemeName = ThemeManager.currentTheme._name;
|
||||
SettingsManager.getInstance().setSetting("theme", currentThemeName);
|
||||
|
||||
let inputElem = themeElem.querySelector("input");
|
||||
inputElem.value = theme._className;
|
||||
let themeNameElem = this.findBy("#theme-name");
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(currentThemeName));
|
||||
this.findBy("#theme-chooser").addEventListener("click", async () => {
|
||||
console.log("clicked");
|
||||
let newTheme = (new ChooseThemeDialog()).show();
|
||||
if (Helper.isNotNull(newTheme)){
|
||||
SettingsManager.getInstance().setSetting("theme", newTheme);
|
||||
ThemeManager.changeCurrentTheme(newTheme);
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(newTheme));
|
||||
}
|
||||
});
|
||||
|
||||
inputElem.addEventListener("change", function() {
|
||||
if (this.checked){
|
||||
ThemeManager.changeCurrentTheme(theme);
|
||||
}
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
SettingsManager.getInstance().setSetting("theme", ThemeManager.currentTheme._name);
|
||||
|
||||
this.findBy("#reset-levels").addEventListener("click", () => {
|
||||
localStorage.removeItem("currentLevel");
|
||||
@@ -6443,6 +6586,28 @@ class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
WordRotatorDb.getInstance().removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
});
|
||||
|
||||
let playMusicButton = this.findBy("#play-music");
|
||||
playMusicButton.addEventListener("change", () => {
|
||||
let soundManager = SoundManager.getInstance();
|
||||
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);
|
||||
if (playMusicButton.checked){
|
||||
soundManager.play(SoundManager.CHANNELS.MUSIC);
|
||||
}
|
||||
});
|
||||
|
||||
this.findBy("#track-switch").addEventListener("change", function(e) {
|
||||
Matomo.setTrack(this.checked === true);
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
this.findBy("#credits-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(CreditsSite);
|
||||
});
|
||||
this.findBy("#privacy-policy-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(PrivacyPolicySite);
|
||||
});
|
||||
|
||||
return super.onFirstStart();
|
||||
}
|
||||
}
|
||||
@@ -6452,7 +6617,7 @@ InitPromise.addPromise(function () {
|
||||
});
|
||||
|
||||
let basePath = "/pwa/wordRotator/public/";
|
||||
if (window.location.pathname.endsWith("publicTest/"))
|
||||
if (window.location.pathname.includes("publicTest/"))
|
||||
{
|
||||
basePath = "/pwa/wordRotator/publicTest/";
|
||||
}
|
||||
@@ -6477,8 +6642,6 @@ ShareManager.addShareButton(new TelegramShareButton('img/telegram.svg'));
|
||||
|
||||
let app = new App();
|
||||
// app.addDeepLink("policy", PrivatePolicySite.name);
|
||||
// app.setAddThemeAction(true);
|
||||
// app.addDefaultAction(Translator.generateChangeLanguageMenuAction());
|
||||
|
||||
// bridge für Android
|
||||
window["ThemeManager"] = ThemeManager;
|
||||
@@ -6494,7 +6657,7 @@ SettingsSite.setTemplate("html/application/setting-template.html");
|
||||
RegistrationSite.addAction = false;
|
||||
LoginSite.addLoginAction = false;
|
||||
|
||||
InitPromise.resolve(app).then(function(){
|
||||
InitPromise.resolve(app).then(async function(){
|
||||
SettingsSite.settingsAction.showFor = MenuAction.SHOW_ALWAYS;
|
||||
|
||||
let settingsManager = SettingsManager.getInstance();
|
||||
@@ -6504,4 +6667,7 @@ InitPromise.resolve(app).then(function(){
|
||||
|
||||
app.start(MenuSite);
|
||||
Translator.setLanguage("de");
|
||||
|
||||
// let matomo = new Matomo();
|
||||
// console.log(await matomo._askIsTracking());
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user