new version
This commit is contained in:
parent
612aa8168f
commit
71bde38da4
1
.idea/wordRotator.iml
generated
1
.idea/wordRotator.iml
generated
@ -3,7 +3,6 @@
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/src" isTestSource="false" packagePrefix="Application\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/module/Application/pwa/public" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/public/js" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/publicTest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd $(dirname "$0")/..
|
||||
npm run build
|
||||
npm run build 1
|
||||
7661
public/js/app.js
7661
public/js/app.js
File diff suppressed because one or more lines are too long
@ -3403,16 +3403,41 @@ class GapiHandler {
|
||||
}
|
||||
|
||||
class MyDb {
|
||||
constructor(dbName, version, indexedDB) {
|
||||
indexedDB = indexedDB || window["myIndexedDB"] || window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
|
||||
console.log("MyDB", indexedDB);
|
||||
this._conn = indexedDB.open(dbName, version);
|
||||
constructor(dbName, version) {
|
||||
this.queryPromise = new Promise(async (resolve, reject) => {
|
||||
let indexedDB = null;
|
||||
if (window["sqlite"]){
|
||||
indexedDB = new Promise(sqliteResolve => {
|
||||
function testSqlLiteResolve(){
|
||||
if (window["sqliteIndexedDB"]){
|
||||
sqliteResolve(window["sqliteIndexedDB"]);
|
||||
}
|
||||
else {
|
||||
setTimeout(testSqlLiteResolve, 200);
|
||||
}
|
||||
console.log("t");
|
||||
}
|
||||
testSqlLiteResolve();
|
||||
});
|
||||
}
|
||||
else {
|
||||
indexedDB = Promise.resolve(window["myIndexedDB"] || window["indexedDB"] || window["mozIndexedDB"]|| window["webkitIndexedDB"]|| window["msIndexedDB"] || window["shimIndexedDB"]);
|
||||
}
|
||||
console.log("indexeddb 1");
|
||||
this.indexeddb = (await indexedDB);
|
||||
console.log("indexeddb 2");
|
||||
this._conn = this.indexeddb.open(dbName, version);
|
||||
|
||||
let myDB = this;
|
||||
this._conn.onupgradeneeded = function (upgradeEvent) {
|
||||
myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent);
|
||||
};
|
||||
this.queryPromise = new Promise(function (resolve) {
|
||||
let myDB = this;
|
||||
this._conn.onupgradeneeded = function (upgradeEvent) {
|
||||
try {
|
||||
myDB.upgrade(myDB._conn.result, upgradeEvent.oldVersion, upgradeEvent.newVersion, upgradeEvent);
|
||||
}
|
||||
catch(e){
|
||||
reject(e);
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
myDB._conn.onsuccess = function (e) {
|
||||
myDB._db = myDB._conn.result;
|
||||
resolve(e);
|
||||
@ -3446,7 +3471,6 @@ class MyDb {
|
||||
transactionMode = "readonly";
|
||||
}
|
||||
return this.openTransaction(name, transactionMode, function (t) {
|
||||
console.log("openStore", name, t);
|
||||
callback(t.objectStore(name));
|
||||
});
|
||||
}
|
||||
@ -3491,13 +3515,10 @@ class MyDb {
|
||||
|
||||
load(key, objectStore) {
|
||||
let self = this;
|
||||
return new Promise( (resolve, reject) => {
|
||||
console.log("load 1");
|
||||
return new Promise((resolve, reject) => {
|
||||
self.openStore(objectStore, function (store) {
|
||||
console.log("load 2");
|
||||
let request = store.get(key);
|
||||
request.onsuccess = function (e) {
|
||||
console.log("load 3");
|
||||
resolve(e.currentTarget.result);
|
||||
};
|
||||
request.onerror = function (e) {
|
||||
@ -3513,11 +3534,10 @@ class MyDb {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
loadAll(objectStore, query, count)
|
||||
{
|
||||
|
||||
loadAll(objectStore, query, count) {
|
||||
let self = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
self.openStore(objectStore, function (store) {
|
||||
let request = store.getAll(query, count);
|
||||
request.onsuccess = function (e) {
|
||||
@ -3647,13 +3667,13 @@ class MyDb {
|
||||
});
|
||||
}
|
||||
|
||||
removeAll(objectStore){
|
||||
removeAll(objectStore) {
|
||||
return new Promise((resolve) => {
|
||||
this.openStore(objectStore, "readwrite", (store) => {
|
||||
let req = store.clear();
|
||||
req.onerror = (e) => {
|
||||
throw {
|
||||
"type":"indexed-db-index-error",
|
||||
"type": "indexed-db-index-error",
|
||||
"event": e
|
||||
}
|
||||
};
|
||||
|
||||
@ -29,12 +29,12 @@ export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
}
|
||||
});
|
||||
|
||||
this.findBy("#reset-levels").addEventListener("click", () => {
|
||||
this.findBy("#reset-levels").addEventListener("click", async () => {
|
||||
localStorage.removeItem("currentLevel");
|
||||
localStorage.removeItem("date-last-sync");
|
||||
localStorage.removeItem("levelCounter");
|
||||
localStorage.removeItem("tutorial-step");
|
||||
WordRotatorDb.getInstance().removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
(await WordRotatorDb.getInstance()).removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
});
|
||||
|
||||
if (location.hostname.includes("beta") || location.hostname.includes("127.0.0.1")) {
|
||||
|
||||
@ -2,19 +2,21 @@ import {Helper, MyDb} from "../../../../js/lib/pwa-lib";
|
||||
|
||||
export class WordRotatorDb extends MyDb {
|
||||
|
||||
static getInstance() {
|
||||
static async getInstance() {
|
||||
if (Helper.isNull(WordRotatorDb.instance)) {
|
||||
WordRotatorDb.instance = new WordRotatorDb();
|
||||
}
|
||||
await WordRotatorDb.instance.queryPromise;
|
||||
return WordRotatorDb.instance;
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super("wordRotator", 3);
|
||||
super("wordRotator", 4);
|
||||
}
|
||||
|
||||
upgrade(db, oldVersion, newVersion, e) {
|
||||
console.log("upgrading!");
|
||||
|
||||
if (Helper.isNull(oldVersion) || oldVersion < 1 && newVersion >= 1) {
|
||||
let levelObjectStore = db.createObjectStore(WordRotatorDb.OBJECT_STORE.LEVEL, {"keyPath": "id"});
|
||||
}
|
||||
@ -22,10 +24,15 @@ export class WordRotatorDb extends MyDb {
|
||||
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
levelObjectStore.createIndex("played", ["deleted", "played", "difficulty", "id"], {"unique": false});
|
||||
}
|
||||
// xhklsfdbnk = 42;
|
||||
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 3) {
|
||||
let levelObjectStore = e.target.transaction.objectStore(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
levelObjectStore.createIndex("difficulty", "difficulty", {"unique": false});
|
||||
}
|
||||
|
||||
if (Helper.isNull(oldVersion) || oldVersion < 3 && newVersion >= 4) {
|
||||
let levelObjectStore = db.createObjectStore(WordRotatorDb.OBJECT_STORE.SYSTEM_VARS, {"keyPath": "name"});
|
||||
}
|
||||
};
|
||||
|
||||
async saveManyLevels(levels) {
|
||||
@ -35,7 +42,7 @@ export class WordRotatorDb extends MyDb {
|
||||
}
|
||||
|
||||
async loadLevel(levelId) {
|
||||
console.log("load Level", levelId);
|
||||
// console.log("load Level", levelId);
|
||||
return this.load(levelId, WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
}
|
||||
|
||||
@ -71,12 +78,21 @@ export class WordRotatorDb extends MyDb {
|
||||
return await this.saveObj(level, WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
}
|
||||
|
||||
async countLevels(){
|
||||
async loadDateLastSync(){
|
||||
let dateLastSync = await this.load("date-last-sync", WordRotatorDb.OBJECT_STORE.SYSTEM_VARS);
|
||||
if (dateLastSync){
|
||||
return dateLastSync["value"];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async saveDateLastSync(value){
|
||||
return await this.saveObj({"name": "date-last-sync", "value":value}, WordRotatorDb.OBJECT_STORE.SYSTEM_VARS)
|
||||
}
|
||||
}
|
||||
|
||||
WordRotatorDb.OBJECT_STORE = {
|
||||
LEVEL: "level",
|
||||
SYSTEM_VARS:"vars"
|
||||
};
|
||||
WordRotatorDb.instance = null;
|
||||
|
||||
@ -105,7 +105,7 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
if (Helper.isNotNull(currentLevelInfo)) {
|
||||
currentLevelInfo = JSON.parse(currentLevelInfo);
|
||||
|
||||
const db = WordRotatorDb.getInstance();
|
||||
const db = await WordRotatorDb.getInstance();
|
||||
const levelJson = await db.loadLevel(currentLevelInfo["id"]);
|
||||
|
||||
if (levelJson === null) {
|
||||
@ -144,18 +144,23 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
return this.nextLevel();
|
||||
}
|
||||
|
||||
startEndSite(){
|
||||
this.startSite(EndSite);
|
||||
this.finish();
|
||||
|
||||
}
|
||||
|
||||
async nextLevel() {
|
||||
try {
|
||||
this._siteContent.classList.remove('won');
|
||||
this.wonText.style.fontSize = "0";
|
||||
|
||||
const db = WordRotatorDb.getInstance();
|
||||
const db = await WordRotatorDb.getInstance();
|
||||
const nextLevelJson = await db.loadNextLevel(LevelSite.RENDERER_TYPES);
|
||||
|
||||
console.log("nextLevelJson", nextLevelJson);
|
||||
if (nextLevelJson === null) {
|
||||
this.startSite(EndSite);
|
||||
this.finish();
|
||||
this.startEndSite();
|
||||
return;
|
||||
}
|
||||
const level = LevelHelper.inflateLevel(nextLevelJson, this.templateContainer);
|
||||
@ -193,6 +198,7 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
catch (e) {
|
||||
console.log("Fehler!");
|
||||
console.error(e);
|
||||
this.startEndSite();
|
||||
}
|
||||
}
|
||||
|
||||
@ -225,7 +231,7 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
|
||||
async levelWon(level) {
|
||||
try {
|
||||
const db = WordRotatorDb.getInstance();
|
||||
const db = await WordRotatorDb.getInstance();
|
||||
const savePromise = db.saveLevelPlayed(level.getId());
|
||||
|
||||
this.levelCounter++;
|
||||
|
||||
@ -99,7 +99,7 @@ export class MenuSite extends WordRotatorBaseSite {
|
||||
async startLevelSite() {
|
||||
SoundManager.getInstance().resumeContext();
|
||||
this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {
|
||||
const db = WordRotatorDb.getInstance();
|
||||
const db = await WordRotatorDb.getInstance();
|
||||
let level = await db.loadNextLevel(LevelSite.RENDERER_TYPES);
|
||||
if (level !== null) {
|
||||
resolve();
|
||||
@ -147,7 +147,7 @@ export class MenuSite extends WordRotatorBaseSite {
|
||||
let playMusicButton = this.findBy("#play-music");
|
||||
playMusicButton.checked = (settingsManager.getSetting("play-music", "1") === "1");
|
||||
playMusicButton.addEventListener("change", () => {
|
||||
settingsManager.setSetting("play-music", (playMusicButton.checked)?"1":"0");
|
||||
settingsManager.setSetting("play-music", (playMusicButton.checked) ? "1" : "0");
|
||||
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);
|
||||
if (playMusicButton.checked) {
|
||||
soundManager.play(SoundManager.CHANNELS.MUSIC);
|
||||
@ -158,7 +158,7 @@ export class MenuSite extends WordRotatorBaseSite {
|
||||
let playSoundButton = this.findBy("#play-sound");
|
||||
playSoundButton.checked = (settingsManager.getSetting("play-sound", "1") === "1");
|
||||
playSoundButton.addEventListener("change", () => {
|
||||
settingsManager.setSetting("play-sound", (playSoundButton.checked)?"1":"0");
|
||||
settingsManager.setSetting("play-sound", (playSoundButton.checked) ? "1" : "0");
|
||||
soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);
|
||||
Matomo.push(["trackEvent", "MainMenu", "PlaySound", "Play Sound", (playSoundButton.checked) ? 1 : 0]);
|
||||
});
|
||||
@ -176,45 +176,53 @@ export class MenuSite extends WordRotatorBaseSite {
|
||||
}
|
||||
|
||||
async loadLevels() {
|
||||
const dateLastSync = Helper.nonNull(localStorage.getItem("date-last-sync"), 0);
|
||||
const db = WordRotatorDb.getInstance();
|
||||
try {
|
||||
const db = await WordRotatorDb.getInstance();
|
||||
const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);
|
||||
// const dateLastSync = Helper.nonNull(localStorage.getItem("date-last-sync"), 0);
|
||||
|
||||
// let numberLevels = db.countLevels();
|
||||
let newLastSync = null;
|
||||
let maxRuns = 1;
|
||||
let levelPromises = [];
|
||||
for (let run = 0; run < maxRuns; run++) {
|
||||
let res = await DataManager.load("wordRotator/levels" + DataManager.buildQuery({
|
||||
"currentRun": run,
|
||||
"dateLastSync": dateLastSync
|
||||
}));
|
||||
if (!res["success"]) {
|
||||
if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
|
||||
FlashMessenger.addMessage("sync-error", null, 6000);
|
||||
}
|
||||
newLastSync = null;
|
||||
break;
|
||||
}
|
||||
res = res["result"];
|
||||
newLastSync = Helper.nonNull(newLastSync, res["currentSyncDate"]);
|
||||
maxRuns = res["maxRuns"];
|
||||
|
||||
let levels = res["levels"];
|
||||
for (let i = 0; i < levels.length; i++) {
|
||||
let currentLevel = levels[i];
|
||||
levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => {
|
||||
currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));
|
||||
console.log("currentLevel", currentLevel);
|
||||
return currentLevel;
|
||||
// let numberLevels = db.countLevels();
|
||||
let newLastSync = null;
|
||||
let maxRuns = 1;
|
||||
let levelPromises = [];
|
||||
for (let run = 0; run < maxRuns; run++) {
|
||||
let res = await DataManager.load("wordRotator/levels" + DataManager.buildQuery({
|
||||
"currentRun": run,
|
||||
"dateLastSync": dateLastSync
|
||||
}));
|
||||
if (!res["success"]) {
|
||||
if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
|
||||
FlashMessenger.addMessage("sync-error", null, 6000);
|
||||
}
|
||||
newLastSync = null;
|
||||
break;
|
||||
}
|
||||
res = res["result"];
|
||||
newLastSync = Helper.nonNull(newLastSync, res["currentSyncDate"]);
|
||||
maxRuns = res["maxRuns"];
|
||||
|
||||
let levels = res["levels"];
|
||||
for (let i = 0; i < levels.length; i++) {
|
||||
let currentLevel = levels[i];
|
||||
levelPromises.push(db.loadLevel(levels[i]["id"]).then(level => {
|
||||
currentLevel["played"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));
|
||||
return currentLevel;
|
||||
}));
|
||||
}
|
||||
}
|
||||
let levels = await Promise.all(levelPromises);
|
||||
await db.saveManyLevels(levels);
|
||||
|
||||
if (newLastSync != null && newLastSync !== "null") {
|
||||
localStorage.setItem("date-last-sync", newLastSync);
|
||||
db.saveDateLastSync(newLastSync);
|
||||
}
|
||||
}
|
||||
let levels = await Promise.all(levelPromises);
|
||||
console.log("levels to save", levels);
|
||||
await db.saveManyLevels(levels);
|
||||
|
||||
if (newLastSync != null && newLastSync !== "null") {
|
||||
localStorage.setItem("date-last-sync", newLastSync);
|
||||
catch(e){
|
||||
// if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {
|
||||
FlashMessenger.addMessage("sync-error", null, 6000);
|
||||
// }
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -353,8 +353,8 @@ test('Play', async t => {
|
||||
.click(Selector('.segment-parent').nth(SEGMENT.SIXTEEN))
|
||||
.click(Selector('.segment-parent').nth(SEGMENT.FOURTEEN))
|
||||
.click(Selector('.segment-parent').nth(SEGMENT.NINETEEN))
|
||||
.click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE))
|
||||
.drag(Selector('.segment-parent').nth(SEGMENT.TEN).find('div').withText('P'), dragDimen, -3, {
|
||||
.click(Selector('.segment-parent').nth(SEGMENT.TWENTYONE)).debug()
|
||||
.drag(Selector('.segment-parent').nth(SEGMENT.TEN), dragDimen, -3, {
|
||||
offsetX: 10,
|
||||
offsetY: 10
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user