Compare commits

...

30 Commits

Author SHA1 Message Date
ostertun
e66f95ff50 Merge branch 'release/v_1.10.4' 2020-10-14 12:59:58 +02:00
ostertun
439679bbbe Release v_1.10.4 2020-10-14 12:59:35 +02:00
ostertun
9a8d6892f2 Merge branch 'feature/RA-29-runtime-analysis' into develop 2020-10-14 12:57:35 +02:00
ostertun
3b71f3d707 Better logging 2020-10-14 12:35:15 +02:00
ostertun
94c6a42106 RA-#29 remove unused code from scripts 2020-10-14 12:07:40 +02:00
ostertun
0c9eb9c013 RA-#27 back button on menu opened 2020-10-14 11:52:22 +02:00
ostertun
2034e8b659 RA-#24: dont show info after force resync 2020-10-14 11:24:36 +02:00
ostertun
e57bf4a426 RA-#25 Show loader after sync 2020-10-14 11:19:32 +02:00
ostertun
3c8289d11c index: Sort last regattas desc. 2020-10-14 11:08:27 +02:00
ostertun
63de725ebd Disable dark mode 2020-10-14 11:05:39 +02:00
ostertun
69efb93646 Merge branch 'hotfix/site_build_logging' 2020-10-11 17:01:23 +02:00
ostertun
6f302d6527 Merge branch 'hotfix/site_build_logging' into develop 2020-10-11 17:01:23 +02:00
ostertun
bfc2f84f0f Fix 2020-10-11 17:01:19 +02:00
ostertun
0660b2b6b3 Merge branch 'hotfix/site_build_logging' into develop 2020-10-11 16:57:55 +02:00
ostertun
3ee722f6c2 Merge branch 'hotfix/site_build_logging' 2020-10-11 16:57:17 +02:00
ostertun
0ce58aeacc Merge branch 'hotfix/site_build_logging' into develop 2020-10-11 16:57:17 +02:00
ostertun
28ba380cca gitflow-hotfix-stash: site_build_logging 2020-10-11 16:57:09 +02:00
ostertun
357449c1c6 Merge branch 'hotfix/update_subscription' 2020-10-09 12:59:35 +02:00
ostertun
e84eaa2562 Merge branch 'hotfix/update_subscription' into develop 2020-10-09 12:59:35 +02:00
ostertun
de70522850 gitflow-hotfix-stash: update_subscription 2020-10-09 12:59:20 +02:00
ostertun
cf5f71d14e Merge branch 'hotfix/hide_preloader_console_button' 2020-10-08 12:56:42 +02:00
ostertun
775a7bd27a Merge branch 'hotfix/hide_preloader_console_button' into develop 2020-10-08 12:56:41 +02:00
ostertun
34b47e40ab gitflow-hotfix-stash: hide_preloader_console_button 2020-10-08 12:56:19 +02:00
ostertun
32ea581437 Merge branch 'release/v_1.10.3' 2020-10-08 12:48:12 +02:00
ostertun
4106a177f8 Merge branch 'release/v_1.10.3' into develop 2020-10-08 12:48:11 +02:00
ostertun
16ccbca2af Release v_1.10.3 2020-10-08 12:47:53 +02:00
ostertun
3fd9beae1e Add last sync info 2020-10-06 00:21:23 +02:00
ostertun
01d0ae96f9 Fix no-db warning 2020-10-05 23:55:20 +02:00
ostertun
c211817f78 Added no-db warning 2020-10-05 23:52:09 +02:00
ostertun
7a3413b339 Merge branch 'release/v_1.10.2' into develop 2020-10-05 20:32:21 +02:00
16 changed files with 266 additions and 1226 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -20,11 +20,11 @@ var getJSON = function(url, callback) {
callback(xhr.status, xhr.response); callback(xhr.status, xhr.response);
}; };
xhr.ontimeout = function () { xhr.ontimeout = function () {
log("getJSON: timeout"); log("[db] getJSON: timeout");
callback(0, null); callback(0, null);
} }
xhr.onerror = function () { xhr.onerror = function () {
log("getJSON: error"); log("[db] getJSON: error");
callback(0, null); callback(0, null);
} }
if (USER_ID != null) { if (USER_ID != null) {
@@ -76,7 +76,7 @@ function dbGetData(table, id = null) {
if (code == 200) { if (code == 200) {
resolve(data.data); resolve(data.data);
} else { } else {
log("Something went wrong (HTTP " + code + ")"); log("[db] Something went wrong (HTTP " + code + ")");
fail(strings.error_network, 5000); fail(strings.error_network, 5000);
resolve([]); resolve([]);
} }
@@ -86,7 +86,7 @@ function dbGetData(table, id = null) {
if (code == 200) { if (code == 200) {
resolve(data.data); resolve(data.data);
} else { } else {
log("Something went wrong (HTTP " + code + ")"); log("[db] Something went wrong (HTTP " + code + ")");
fail(strings.error_network, 5000); fail(strings.error_network, 5000);
resolve(null); resolve(null);
} }
@@ -108,7 +108,7 @@ function dbGetDataIndex(table, indexName, value) {
if (code == 200) { if (code == 200) {
resolve(data.data); resolve(data.data);
} else { } else {
log("Something went wrong (HTTP " + code + ")"); log("[db] Something went wrong (HTTP " + code + ")");
fail(strings.error_network, 5000); fail(strings.error_network, 5000);
resolve([]); resolve([]);
} }
@@ -417,32 +417,35 @@ function dbSettingsSet(key, value) {
} }
} }
async function updateSyncStatus() { // TODO async function updateSyncStatus() {
// var syncStatus = document.getElementById('syncstatus'); var lastSync = await dbGetData('update_times', 'last_sync');
// var lastSync = await dbGetData('update_times', 'last_sync'); lastSync = new Date(lastSync.time * 1000);
// lastSync = new Date(lastSync.time * 1000); if (lastSync > 0) {
// var now = new Date(); var now = new Date();
// var diff = Math.round((now - lastSync) / 1000); var diff = Math.round((now - lastSync) / 1000);
// var txt = ''; var txt = '';
//
// if (diff < 30) { // 30 sec if (diff < 30) { // 30 sec
// txt = 'jetzt'; txt = 'jetzt';
// } else if (diff < 3600) { // 60 min } else if (diff < 3600) { // 60 min
// diff = Math.round(diff / 60); diff = Math.round(diff / 60);
// txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Minute' : 'Minuten'); txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Minute' : 'Minuten');
// } else if (diff < 86400) { // 24 std } else if (diff < 86400) { // 24 std
// diff = Math.round(diff / 3600); diff = Math.round(diff / 3600);
// txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Stunde' : 'Stunden'); txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Stunde' : 'Stunden');
// } else { } else {
// diff = Math.round(diff / 86400); diff = Math.round(diff / 86400);
// txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Tag' : 'Tagen'); txt = 'vor ' + diff + ' ' + (diff == 1 ? 'Tag' : 'Tagen');
// } }
// } else {
// var btn = '<a href="#" onclick="setLoading(true); sync(); return false;"><i class="fas fa-sync"></i> Sync</a>'; var txt = 'nie';
// syncStatus.innerHTML = 'Zuletzt aktualisiert: ' + txt + btn; }
$('#syncstatus').html('Zuletzt aktualisiert: ' + txt);
} }
async function runPageScript() { async function runPageScript() {
log('[db] running page script...')
if (canUseLocalDB) { if (canUseLocalDB) {
var osUpdateTimes = db.transaction('update_times').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times').objectStore('update_times');
osUpdateTimes.get('loggedin').onsuccess = function (event) { osUpdateTimes.get('loggedin').onsuccess = function (event) {
@@ -460,21 +463,21 @@ async function runPageScript() {
dbSettingsSet('myregattas_' + BOATCLASS, plannings); dbSettingsSet('myregattas_' + BOATCLASS, plannings);
} }
} }
if (typeof updateSyncStatusTimer == 'undefined') { // TODO if (typeof updateSyncStatusTimer == 'undefined') {
// var syncStatus = document.getElementById('syncstatus');
if (canUseLocalDB) { if (canUseLocalDB) {
updateSyncStatusTimer = window.setInterval(updateSyncStatus, 10000); updateSyncStatusTimer = window.setInterval(updateSyncStatus, 10000);
} else { } else {
// syncStatus.innerHTML = 'Keine Offline-Nutzung möglich.'; $('#syncstatus').html('Keine Offline-Nutzung möglich.');
$('#i-sync').parent().hide(); $('#i-sync').parent().hide();
updateSyncStatusTimer = null; updateSyncStatusTimer = null;
} }
// syncStatus.style.display = 'block';
} }
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
log('[db] loading site script');
siteScript(); siteScript();
} else { } else {
log('[db] no site script');
hideLoader(); hideLoader();
} }
} }
@@ -494,7 +497,7 @@ function sync() {
syncInProgress = 11; syncInProgress = 11;
var syncOkay = true; var syncOkay = true;
log("Sync Start"); log("[db] Sync Start");
$('#i-sync').addClass('fa-spin'); $('#i-sync').addClass('fa-spin');
var interval = window.setInterval(function () { var interval = window.setInterval(function () {
@@ -504,7 +507,7 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'last_sync', time: now }); osUpdateTimes.put({ table: 'last_sync', time: now });
} }
log("Sync Stop"); log("[db] Sync Stop");
setTimeout(function(){ setTimeout(function(){
$('#i-sync').removeClass('fa-spin'); $('#i-sync').removeClass('fa-spin');
}, 500); }, 500);
@@ -513,6 +516,7 @@ function sync() {
onAfterSync(); onAfterSync();
} }
removeSyncInfoToPreloader(); removeSyncInfoToPreloader();
showLoader();
runPageScript(); runPageScript();
resolve(); resolve();
} }
@@ -540,14 +544,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'clubs', time: serverTimes['clubs'] }); osUpdateTimes.put({ table: 'clubs', time: serverTimes['clubs'] });
syncInProgress --; syncInProgress --;
log('clubs synced, remaining:', syncInProgress); log('[db] clubs synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("clubs: Something went wrong (HTTP " + code + ")"); log("[db] clubs: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('clubs failed, remaining:', syncInProgress); log('[db] clubs failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -573,14 +577,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'boats', time: serverTimes['boats'] }); osUpdateTimes.put({ table: 'boats', time: serverTimes['boats'] });
syncInProgress --; syncInProgress --;
log('boats synced, remaining:', syncInProgress); log('[db] boats synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("boats: Something went wrong (HTTP " + code + ")"); log("[db] boats: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('boats failed, remaining:', syncInProgress); log('[db] boats failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -606,14 +610,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'sailors', time: serverTimes['sailors'] }); osUpdateTimes.put({ table: 'sailors', time: serverTimes['sailors'] });
syncInProgress --; syncInProgress --;
log('sailors synced, remaining:', syncInProgress); log('[db] sailors synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("sailors: Something went wrong (HTTP " + code + ")"); log("[db] sailors: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('sailors failed, remaining:', syncInProgress); log('[db] sailors failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -655,14 +659,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'regattas', time: serverTimes['regattas'] }); osUpdateTimes.put({ table: 'regattas', time: serverTimes['regattas'] });
syncInProgress --; syncInProgress --;
log('regattas synced, remaining:', syncInProgress); log('[db] regattas synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("regattas: Something went wrong (HTTP " + code + ")"); log("[db] regattas: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('regattas failed, remaining:', syncInProgress); log('[db] regattas failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -688,14 +692,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'results', time: serverTimes['results'] }); osUpdateTimes.put({ table: 'results', time: serverTimes['results'] });
syncInProgress --; syncInProgress --;
log('results synced, remaining:', syncInProgress); log('[db] results synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("results: Something went wrong (HTTP " + code + ")"); log("[db] results: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('results failed, remaining:', syncInProgress); log('[db] results failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -721,14 +725,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'plannings', time: serverTimes['plannings'] }); osUpdateTimes.put({ table: 'plannings', time: serverTimes['plannings'] });
syncInProgress --; syncInProgress --;
log('plannings synced, remaining:', syncInProgress); log('[db] plannings synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("plannings: Something went wrong (HTTP " + code + ")"); log("[db] plannings: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('plannings failed, remaining:', syncInProgress); log('[db] plannings failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -755,14 +759,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'trim_boats', time: serverTimes['trim_boats'] }); osUpdateTimes.put({ table: 'trim_boats', time: serverTimes['trim_boats'] });
syncInProgress --; syncInProgress --;
log('trim_boats synced, remaining:', syncInProgress); log('[db] trim_boats synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("trim_boats: Something went wrong (HTTP " + code + ")"); log("[db] trim_boats: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('trim_boats failed, remaining:', syncInProgress); log('[db] trim_boats failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -788,14 +792,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'trim_users', time: serverTimes['trim_users'] }); osUpdateTimes.put({ table: 'trim_users', time: serverTimes['trim_users'] });
syncInProgress --; syncInProgress --;
log('trim_users synced, remaining:', syncInProgress); log('[db] trim_users synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("trim_users: Something went wrong (HTTP " + code + ")"); log("[db] trim_users: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('trim_users failed, remaining:', syncInProgress); log('[db] trim_users failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -821,14 +825,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'trim_trims', time: serverTimes['trim_trims'] }); osUpdateTimes.put({ table: 'trim_trims', time: serverTimes['trim_trims'] });
syncInProgress --; syncInProgress --;
log('trim_trims synced, remaining:', syncInProgress); log('[db] trim_trims synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("trim_trims: Something went wrong (HTTP " + code + ")"); log("[db] trim_trims: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('trim_trims failed, remaining:', syncInProgress); log('[db] trim_trims failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -858,14 +862,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'news', time: serverTimes['news'] }); osUpdateTimes.put({ table: 'news', time: serverTimes['news'] });
syncInProgress --; syncInProgress --;
log('news synced, remaining:', syncInProgress); log('[db] news synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("news: Something went wrong (HTTP " + code + ")"); log("[db] news: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('news failed, remaining:', syncInProgress); log('[db] news failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -891,14 +895,14 @@ function sync() {
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'users', time: serverTimes['users'] }); osUpdateTimes.put({ table: 'users', time: serverTimes['users'] });
syncInProgress --; syncInProgress --;
log('users synced, remaining:', syncInProgress); log('[db] users synced, remaining:', syncInProgress);
} }
}; };
} else { } else {
log("users: Something went wrong (HTTP " + code + ")"); log("[db] users: Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress --; syncInProgress --;
log('users failed, remaining:', syncInProgress); log('[db] users failed, remaining:', syncInProgress);
} }
}); });
} else { } else {
@@ -906,7 +910,7 @@ function sync() {
} }
} else { } else {
log("Something went wrong (HTTP " + code + ")"); log("[db] Something went wrong (HTTP " + code + ")");
syncOkay = false; syncOkay = false;
syncInProgress = 0; syncInProgress = 0;
} }
@@ -928,15 +932,18 @@ function checkSync() {
} }
function initDatabase() { function initDatabase() {
log('[db] Initializing DB...');
if (window.indexedDB) { if (window.indexedDB) {
var request = window.indexedDB.open('regatten_app_db_' + BOATCLASS, DB_VERSION); var request = window.indexedDB.open('regatten_app_db_' + BOATCLASS, DB_VERSION);
request.onerror = function (event) { request.onerror = function (event) {
log("Cannot open DB: " + event.target); log("[db] Cannot open DB: " + event.target);
if (typeof onDatabaseLoaded == 'function') onDatabaseLoaded();
runPageScript(); runPageScript();
}; };
request.onsuccess = function (event) { request.onsuccess = function (event) {
log("Database loaded"); log("[db] Database loaded");
db = event.target.result; db = event.target.result;
db.onversionchange = function (event) { db.onversionchange = function (event) {
@@ -949,7 +956,7 @@ function initDatabase() {
} }
db.onerror = function (event) { db.onerror = function (event) {
log("DB Error: " + event.target); log("[db] DB Error: " + event.target);
}; };
canUseLocalDB = true; canUseLocalDB = true;
@@ -980,10 +987,10 @@ function initDatabase() {
var oldVersion = event.oldVersion; var oldVersion = event.oldVersion;
var newVersion = event.newVersion; var newVersion = event.newVersion;
log("Datenbank Version Upgrade von " + oldVersion + " auf " + newVersion); log("[db] DB Version Upgrade from " + oldVersion + " to " + newVersion);
if ((oldVersion < 1) && (newVersion >= 1)) { if ((oldVersion < 1) && (newVersion >= 1)) {
log('to version 1'); log('[db] to version 1');
var osClubs = db.createObjectStore('clubs', { keyPath: 'id' }); var osClubs = db.createObjectStore('clubs', { keyPath: 'id' });
var osBoats = db.createObjectStore('boats', { keyPath: 'id' }); var osBoats = db.createObjectStore('boats', { keyPath: 'id' });
var osSailors = db.createObjectStore('sailors', { keyPath: 'id' }); var osSailors = db.createObjectStore('sailors', { keyPath: 'id' });
@@ -1012,7 +1019,7 @@ function initDatabase() {
} }
if ((oldVersion < 2) && (newVersion >= 2)) { if ((oldVersion < 2) && (newVersion >= 2)) {
log('to version 2'); log('[db] to version 2');
var osUsers = db.createObjectStore('users', { keyPath: 'id' }); var osUsers = db.createObjectStore('users', { keyPath: 'id' });
osUsers.createIndex('username', 'username', { unique: true }); osUsers.createIndex('username', 'username', { unique: true });
var osUpdateTimes = upgradeTransaction.objectStore('update_times'); var osUpdateTimes = upgradeTransaction.objectStore('update_times');
@@ -1020,34 +1027,39 @@ function initDatabase() {
} }
if ((oldVersion < 3) && (newVersion >= 3)) { if ((oldVersion < 3) && (newVersion >= 3)) {
log('to version 3'); log('[db] to version 3');
var osYears = db.createObjectStore('years', { keyPath: 'year' }); var osYears = db.createObjectStore('years', { keyPath: 'year' });
var osUpdateTimes = upgradeTransaction.objectStore('update_times'); var osUpdateTimes = upgradeTransaction.objectStore('update_times');
osUpdateTimes.put({ table: 'regattas', time: 0 }); osUpdateTimes.put({ table: 'regattas', time: 0 });
} }
if ((oldVersion < 4) && (newVersion >= 4)) { if ((oldVersion < 4) && (newVersion >= 4)) {
log('to version 4'); log('[db] to version 4');
var osUpdateTimes = upgradeTransaction.objectStore('update_times'); var osUpdateTimes = upgradeTransaction.objectStore('update_times');
osUpdateTimes.add({ table: 'loggedin', status: isLoggedIn() }); osUpdateTimes.add({ table: 'loggedin', status: isLoggedIn() });
} }
if ((oldVersion < 5) && (newVersion >= 5)) { if ((oldVersion < 5) && (newVersion >= 5)) {
log('to version 5'); log('[db] to version 5');
var osPushes = db.createObjectStore('settings', { keyPath: 'key' }); var osPushes = db.createObjectStore('settings', { keyPath: 'key' });
} }
if ((oldVersion < 6) && (newVersion >= 6)) { if ((oldVersion < 6) && (newVersion >= 6)) {
log('to version 6'); log('[db] to version 6');
var osNews = db.createObjectStore('news', { keyPath: 'id' }); var osNews = db.createObjectStore('news', { keyPath: 'id' });
var osUpdateTimes = upgradeTransaction.objectStore('update_times'); var osUpdateTimes = upgradeTransaction.objectStore('update_times');
osUpdateTimes.add({ table: 'news', time: 0 }); osUpdateTimes.add({ table: 'news', time: 0 });
} }
var osUpdateTimes = upgradeTransaction.objectStore('update_times'); // Force resync after db update
osUpdateTimes.put({ table: 'last_sync', time: 0 }); if (oldVersion >= 1) {
var osUpdateTimes = upgradeTransaction.objectStore('update_times');
osUpdateTimes.put({ table: 'last_sync', time: 1 });
}
} }
} else { } else {
if (typeof onDatabaseLoaded == 'function') onDatabaseLoaded();
runPageScript(); runPageScript();
} }
} }
@@ -1056,7 +1068,7 @@ function resetDb() {
if (canUseLocalDB) { if (canUseLocalDB) {
showLoader(); showLoader();
var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times'); var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
osUpdateTimes.put({ table: 'last_sync', time: 0 }); osUpdateTimes.put({ table: 'last_sync', time: 1 });
osUpdateTimes.put({ table: 'clubs', time: 0 }); osUpdateTimes.put({ table: 'clubs', time: 0 });
osUpdateTimes.put({ table: 'boats', time: 0 }); osUpdateTimes.put({ table: 'boats', time: 0 });
osUpdateTimes.put({ table: 'sailors', time: 0 }); osUpdateTimes.put({ table: 'sailors', time: 0 });
@@ -1068,7 +1080,7 @@ function resetDb() {
osUpdateTimes.put({ table: 'trim_trims', time: 0 }); osUpdateTimes.put({ table: 'trim_trims', time: 0 });
osUpdateTimes.put({ table: 'news', time: 0 }); osUpdateTimes.put({ table: 'news', time: 0 });
osUpdateTimes.put({ table: 'users', time: 0 }); osUpdateTimes.put({ table: 'users', time: 0 });
log('DB update times reset'); log('[db] DB update times reset');
hideLoader(); hideLoader();
} }
} }

View File

@@ -20,8 +20,6 @@ $(document).ready(function(){
'use strict' 'use strict'
var pwaVersion = '<?php echo PWA_VERSION; ?>'; //must be identical to _manifest.json version. If not it will create update window loop var pwaVersion = '<?php echo PWA_VERSION; ?>'; //must be identical to _manifest.json version. If not it will create update window loop
var pwaCookie = true; // if set to false, the PWA prompt will appear even if the user selects "maybe later"
var pwaNoCache = false; // always keep the cache clear to serve the freshest possible content
$('[data-pwa-version]').data('pwa-version', pwaVersion); $('[data-pwa-version]').data('pwa-version', pwaVersion);
@@ -35,7 +33,7 @@ $(document).ready(function(){
//Enabling dismiss button //Enabling dismiss button
setTimeout(function(){ setTimeout(function(){
$('.pwa-dismiss').on('click',function(){ $('.pwa-dismiss').on('click',function(){
log('User Closed Add to Home / PWA Prompt') log('[pwa] User Closed Add to Home / PWA Prompt')
createCookie('Sticky_pwa_rejected_install', true, 1); createCookie('Sticky_pwa_rejected_install', true, 1);
$('body').find('#menu-install-pwa-android, #menu-install-pwa-ios, .menu-hider').removeClass('menu-active'); $('body').find('#menu-install-pwa-android, #menu-install-pwa-ios, .menu-hider').removeClass('menu-active');
}); });
@@ -52,10 +50,10 @@ $(document).ready(function(){
//Firing PWA prompts for specific versions and when not on home screen. //Firing PWA prompts for specific versions and when not on home screen.
if (isMobile.Android()) { if (isMobile.Android()) {
log('Android Detected'); log('[pwa] Android Detected');
function showInstallPromotion(){ function showInstallPromotion(){
if($('#menu-install-pwa-android, .add-to-home').length){ if($('#menu-install-pwa-android, .add-to-home').length){
log('Triggering PWA Menu for Android'); log('[pwa] Triggering PWA Menu for Android');
if (!readCookie('Sticky_pwa_rejected_install')) { if (!readCookie('Sticky_pwa_rejected_install')) {
setTimeout(function(){ setTimeout(function(){
$('.add-to-home').addClass('add-to-home-visible add-to-home-android'); $('.add-to-home').addClass('add-to-home-visible add-to-home-android');
@@ -80,9 +78,9 @@ $(document).ready(function(){
deferredPrompt.userChoice deferredPrompt.userChoice
.then((choiceResult) => { .then((choiceResult) => {
if (choiceResult.outcome === 'accepted') { if (choiceResult.outcome === 'accepted') {
log('User accepted the A2HS prompt'); log('[pwa] User accepted the A2HS prompt');
} else { } else {
log('User dismissed the A2HS prompt'); log('[pwa] User dismissed the A2HS prompt');
} }
deferredPrompt = null; deferredPrompt = null;
}); });
@@ -94,11 +92,11 @@ $(document).ready(function(){
if (isMobile.iOS()) { if (isMobile.iOS()) {
if(!isInWebAppiOS){ if(!isInWebAppiOS){
log('iOS Detected'); log('[pwa] iOS Detected');
if($('#menu-install-pwa-ios, .add-to-home').length){ if($('#menu-install-pwa-ios, .add-to-home').length){
if (!readCookie('Sticky_pwa_rejected_install')) { if (!readCookie('Sticky_pwa_rejected_install')) {
function triggerPwaInstallIos() { function triggerPwaInstallIos() {
log('Triggering PWA / Add to Home Screen Menu for iOS'); log('[pwa] Triggering PWA / Add to Home Screen Menu for iOS');
setTimeout(function(){ setTimeout(function(){
$('.add-to-home').addClass('add-to-home-visible add-to-home-ios'); $('.add-to-home').addClass('add-to-home-visible add-to-home-ios');
$('#menu-install-pwa-ios, .menu-hider').addClass('menu-active'); $('#menu-install-pwa-ios, .menu-hider').addClass('menu-active');
@@ -115,93 +113,11 @@ $(document).ready(function(){
} }
} }
//Creating Update Modal
function updateModal(){
var body = $('body');
var updateModal = $('#menu-update');
var mt = new Date();
var menuUpdate = mt.getHours() + ":" + mt.getMinutes() + ":" + mt.getSeconds();
if(!updateModal.length){
body.append('<div id="menu-update"></div>');
setTimeout(function(){
body.find('#menu-update').load('menu-update.html?ver='+menuUpdate);
},250);
}
};
//Update Version in 5 Seconds After New Version Detected
function updateButton(){
var counter = 3;
var interval = setInterval(function() {
counter--;
log(counter);
$('.page-update').html('Aktuallisierung in ... '+ counter + ' Sekunden');
if (counter == 0) {
clearInterval(interval);
window.location.reload(true)
}
}, 1000);
caches.delete('workbox-runtime').then(function() {
log('Content Updated - Cache Removed!');
});
//localStorage.clear();
sessionStorage.clear()
caches.keys().then(cacheNames => {
cacheNames.forEach(cacheName => {
caches.delete(cacheName);
});
});
};
//Check Version
function check_version(){
if($('link[data-pwa-version]').length){
function versionCheck(){
var dt = new Date();
var maniTimeVersion = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
var localVersionNumber = $('link[rel="manifest"]').data('pwa-version');
var onlineVersionJSON = "<?php echo SERVER_ADDR; ?>/manifest.json.php?ver=" + maniTimeVersion;
var onlineVersionNumber = "Connection Offline. Waiting to Reconect";
$.getJSON(onlineVersionJSON, function(onlineData) {onlineVersionNumber = onlineData.version;});
setTimeout(function(){
//console.log(' Checking PWA Content for updates...\n PWA Server Version: ' + onlineVersionNumber + '\n' + ' PWA Cached Version: ' + localVersionNumber);
if(onlineVersionNumber != localVersionNumber && onlineVersionNumber != "Connection Offline. Waiting to Reconect"){
updateModal();
log('New Version of Content Available. Refreshing. On Desktop Browsers a manual refresh maybe required.')
setTimeout(function(){
$('body').find('#menu-update').addClass('menu-active');
$('.menu-hider').addClass('menu-active-no-click');
updateButton();
},500);
}
if(onlineVersionNumber == localVersionNumber){/*No update required. Versions Identical*/}
if(onlineVersionNumber === "undefined"){/*Error Checking for Updates*/}
if(onlineVersionNumber === "Finding Online Version..."){
$('.reloadme').addClass('disabled');
$('body').find('#menu-update').removeClass('menu-active');
$('.menu-hider').removeClass('menu-active-no-click');
}
},3000);
}
//Checking for new version every 60 seconds
setInterval(function(){versionCheck()}, 50000);
//Initial Load Version Check in 10 Second After Load
setTimeout(function(){versionCheck();}, 10000);
}
}
if(pwaCookie == false){
eraseCookie('Sticky_pwa_rejected_install');
}
//Reload To Clear Button //Reload To Clear Button
$('body').on('click', '.page-update, .reloadme', function() { $('body').on('click', '.page-update, .reloadme', function() {
location.reload(); location.reload();
}); });
//Check for Version Change if Online If not Kill the Function
if (navigator.onLine) {check_version();} else {function check_version(){}}
//Adding Offline Alerts //Adding Offline Alerts
var offlineAlerts = $('.offline-message'); var offlineAlerts = $('.offline-message');
@@ -224,47 +140,19 @@ $(document).ready(function(){
setTimeout(function(){$('.online-message').removeClass('online-message-active');},2000); setTimeout(function(){$('.online-message').removeClass('online-message-active');},2000);
} }
$('.simulate-offline').on('click',function(){isOffline();})
$('.simulate-online').on('click',function(){isOnline();})
//Disable links to other pages if offline.
//Warning! Enabling offline for iOS can cause issues
//To allow offline functionality delete the next 7 lines
function returnFalse(){
var detectHREF = $(this).attr('href');
if(detectHREF.match(/.html/)){
isOffline();
return false;
}
}
//Check if Online / Offline //Check if Online / Offline
function updateOnlineStatus(event) { function updateOnlineStatus(event) {
var condition = navigator.onLine ? "online" : "offline"; var condition = navigator.onLine ? "online" : "offline";
isOnline(); isOnline();
log( 'Connection: Online'); log('[pwa] Connection: Online');
$("a").off( "click", returnFalse );
} }
function updateOfflineStatus(event) { function updateOfflineStatus(event) {
isOffline(); isOffline();
$("a").on( "click", returnFalse ); log('[pwa] Connection: Offline');
log( 'Connection: Offline');
} }
window.addEventListener('online', updateOnlineStatus); window.addEventListener('online', updateOnlineStatus);
window.addEventListener('offline', updateOfflineStatus); window.addEventListener('offline', updateOfflineStatus);
if(pwaNoCache == true){
caches.delete('workbox-runtime').then(function() {
});
localStorage.clear();
sessionStorage.clear()
caches.keys().then(cacheNames => {
cacheNames.forEach(cacheName => {
caches.delete(cacheName);
});
});
}
}); });

View File

@@ -153,7 +153,7 @@ var login = function() {
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um Dich anzumelden'); toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um Dich anzumelden');
$('#menu-login').hideMenu(); $('#menu-login').hideMenu();
} else { } else {
log('Login: unbekannter Fehler', status, error); log('[app] Login: unbekannter Fehler', status, error);
log(xhr); log(xhr);
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000); toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
} }
@@ -186,7 +186,7 @@ var logout = function() {
hash: localStorage.getItem('auth_hash') hash: localStorage.getItem('auth_hash')
} }
if ((auth.id === null) || (auth.hash === null)) { if ((auth.id === null) || (auth.hash === null)) {
log('Not logged in'); log('[app] Not logged in');
logoutClearStorage(); logoutClearStorage();
return; return;
} }
@@ -198,13 +198,13 @@ var logout = function() {
}, },
error: function (xhr, status, error) { error: function (xhr, status, error) {
if (xhr.status == 401) { if (xhr.status == 401) {
log('Not logged in'); log('[app] Not logged in');
logoutClearStorage(); logoutClearStorage();
} else if (xhr.status == 0) { } else if (xhr.status == 0) {
log('Could not delete auth from server'); log('[app] Could not delete auth from server');
logoutClearStorage(); logoutClearStorage();
} else { } else {
log('Logout: unbekannter Fehler', status, error); log('[app] Logout: unbekannter Fehler', status, error);
log(xhr); log(xhr);
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000); toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
hideLoader(); hideLoader();
@@ -222,12 +222,12 @@ function deleteDb() {
showLoader(); showLoader();
var request = window.indexedDB.deleteDatabase('regatten_app_db_' + BOATCLASS); var request = window.indexedDB.deleteDatabase('regatten_app_db_' + BOATCLASS);
request.onerror = function (event) { request.onerror = function (event) {
log('Cannot delete DB: ', event.target.errorCode); log('[app] Cannot delete DB: ', event.target.errorCode);
toastError('Beim Löschen der Datenbank ist ein Fehler aufgetreten.<br>Bitte melde diesen Fehler. (Dev-Menu => Problem melden)', 5000); toastError('Beim Löschen der Datenbank ist ein Fehler aufgetreten.<br>Bitte melde diesen Fehler. (Dev-Menu => Problem melden)', 5000);
hideLoader(); hideLoader();
} }
request.onsuccess = function (event) { request.onsuccess = function (event) {
log('DB deleted'); log('[app] DB deleted');
toastInfo('Die Datenbank wurde gelöscht. Die Seite lädt in wenigen Sekunden neu und erstellt damit eine neue Datenbank.', 10000); toastInfo('Die Datenbank wurde gelöscht. Die Seite lädt in wenigen Sekunden neu und erstellt damit eine neue Datenbank.', 10000);
hideLoader(); hideLoader();
setTimeout(function(){ location.reload(); }, 3000); setTimeout(function(){ location.reload(); }, 3000);
@@ -241,13 +241,13 @@ function deleteCache() {
$('#menu-developer').hideMenu(); $('#menu-developer').hideMenu();
navigator.serviceWorker.getRegistrations().then(function (registrations) { navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) { for (let registration of registrations) {
log('Unregister sW:', registration); log('[app] Unregister sW:', registration);
registration.unregister(); registration.unregister();
} }
}); });
caches.keys().then((keyList) => { caches.keys().then((keyList) => {
return Promise.all(keyList.map((key) => { return Promise.all(keyList.map((key) => {
log('Cache deleted:', key); log('[app] Cache deleted:', key);
return caches.delete(key); return caches.delete(key);
})); }));
}); });
@@ -273,7 +273,7 @@ function urlB64ToUint8Array(base64String) {
} }
function pushesSubscribe() { function pushesSubscribe() {
log('Subscribing'); log('[app] Subscribing');
const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY); const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY);
swRegistration.pushManager.subscribe({ swRegistration.pushManager.subscribe({
userVisibleOnly: true, userVisibleOnly: true,
@@ -285,14 +285,14 @@ function pushesSubscribe() {
updatePushBadge(); updatePushBadge();
}) })
.catch(function(err) { .catch(function(err) {
log('Failed to subscribe the user: ', err); log('[app] Failed to subscribe the user: ', err);
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000); toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
pushesUnSubscribe(true); pushesUnSubscribe(true);
}); });
} }
function pushesUnSubscribe(silent = false) { function pushesUnSubscribe(silent = false) {
log('Unsubscribing'); log('[app] Unsubscribing');
swRegistration.pushManager.getSubscription() swRegistration.pushManager.getSubscription()
.then(function(subscription) { .then(function(subscription) {
if (subscription) { if (subscription) {
@@ -304,7 +304,7 @@ function pushesUnSubscribe(silent = false) {
} }
}) })
.catch(function(error) { .catch(function(error) {
log('Error unsubscribing', error); log('[app] Error unsubscribing', error);
$('#menu-pushes').hideMenu(); $('#menu-pushes').hideMenu();
if (!silent) toastError('Da ist leider etwas schief gelaufen. Bitte versuche es erneut oder wende Dich an unseren Support.', 5000); if (!silent) toastError('Da ist leider etwas schief gelaufen. Bitte versuche es erneut oder wende Dich an unseren Support.', 5000);
updatePushBadge(); updatePushBadge();
@@ -313,7 +313,7 @@ function pushesUnSubscribe(silent = false) {
} }
function pushesUpdateServerSubscription(subscription, enabled) { function pushesUpdateServerSubscription(subscription, enabled) {
log('updateServer', enabled, subscription); log('[app] updateServer', enabled, subscription);
$.ajax({ $.ajax({
url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription', url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription',
type: 'POST', type: 'POST',
@@ -440,8 +440,12 @@ async function updateNewsBadge() {
var initRegatten = function() { var initRegatten = function() {
showLoader(); showLoader();
log('[app] Initializing DB...');
initDatabase(); initDatabase();
log('[app] Loading app specific code...');
if (isLoggedIn()) { if (isLoggedIn()) {
$('.show-loggedin').show(); $('.show-loggedin').show();
$('.show-notloggedin').hide(); $('.show-notloggedin').hide();
@@ -461,6 +465,7 @@ var initRegatten = function() {
} }
var onServiceWorkerLoaded = function() { var onServiceWorkerLoaded = function() {
log('[app] sW loaded');
if ((swRegistration !== null) && canUseLocalDB) { if ((swRegistration !== null) && canUseLocalDB) {
pushesPossible = true; pushesPossible = true;
updatePushBadge(); updatePushBadge();
@@ -470,6 +475,21 @@ var onServiceWorkerLoaded = function() {
} }
var onDatabaseLoaded = function() { var onDatabaseLoaded = function() {
log('[app] DB loaded');
if (!canUseLocalDB && !$('#menu-welcome').hasClass('menu-active')) {
function NoDbWarningOk() {
createCookie('regatten_nodb_banner', true, 1);
$('#menu-nodb-warning').hideMenu();
}
function showNoDbWarning() {
if (!readCookie('regatten_nodb_banner')) {
$('#menu-nodb-warning').showMenu();
}
}
$('#menu-nodb-warning-okay').click(NoDbWarningOk);
showNoDbWarning();
}
onServiceWorkerLoaded(); onServiceWorkerLoaded();
initPushSettings(); initPushSettings();
@@ -486,13 +506,13 @@ var addConsoleOpenerToPreloader = function() {
var preloader = document.getElementById('preloader'); var preloader = document.getElementById('preloader');
var button = document.createElement('a'); var button = document.createElement('a');
button.href = '#'; button.href = '#';
button.classList = 'btn btn-full rounded-s text-uppercase font-900 shadow-m bg-highlight m-3'; button.classList = 'btn rounded-s text-uppercase font-900 shadow-m m-3';
button.style.position = 'fixed'; button.style.position = 'fixed';
button.style.bottom = 0; button.style.bottom = 0;
button.style.left = 0;
button.style.right = 0; button.style.right = 0;
button.innerHTML = 'Show Console'; button.innerHTML = '&lt;/&gt;';
button.onclick = function(){ button.onclick = function(){
alert('CONSOLE OPENED\nDir werden jetzt einige Entwickler-Informationen angezeigt. Du kannst die Console über das X oben rechts wieder schließen.');
mobileConsole.displayConsole(); mobileConsole.displayConsole();
return false; return false;
} }

View File

@@ -1,5 +1,5 @@
<div id="menu-share" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="345" data-menu-effect="menu-over"> <div id="menu-share" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="345" data-menu-effect="menu-over">
<div class="menu-title mt-n1"><h1>Share the Love</h1><p class="color-highlight">Just Tap the Social Icon. We'll add the Link</p><a href="#" class="close-menu"><i class="fa fa-times"></i></a></div> <div class="menu-title mt-n1"><h1>Seite Teilen</h1><p class="color-highlight">Teile diese Seite mit Deinen Freunden!</p><a href="#" class="close-menu"><i class="fa fa-times"></i></a></div>
<div class="content mb-0"> <div class="content mb-0">
<div class="divider mb-0"></div> <div class="divider mb-0"></div>
<div class="list-group list-custom-small list-icon-0"> <div class="list-group list-custom-small list-icon-0">
@@ -92,11 +92,12 @@
</div> </div>
</div> </div>
<div id="menu-settings" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="310"> <div id="menu-settings" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="260">
<div class="menu-title"><h1>Einstellungen</h1><p class="color-highlight">&nbsp;</p><a href="#" class="close-menu"><i class="fa fa-times"></i></a></div> <div class="menu-title"><h1>Einstellungen</h1><p class="color-highlight">&nbsp;</p><a href="#" class="close-menu"><i class="fa fa-times"></i></a></div>
<div class="divider divider-margins mb-n2"></div> <div class="divider divider-margins mb-n2"></div>
<div class="content"> <div class="content">
<div class="list-group list-custom-small"> <div class="list-group list-custom-small">
<?php if (false) { /* DARK MODE DISABLED (set menu height to 310) */ ?>
<a href="#" data-toggle-theme data-trigger-switch="switch-dark" class="pb-2"> <a href="#" data-toggle-theme data-trigger-switch="switch-dark" class="pb-2">
<i class="fa font-14 fa-moon rounded-s bg-dark1-dark color-white"></i> <i class="fa font-14 fa-moon rounded-s bg-dark1-dark color-white"></i>
<span>Dark Mode</span> <span>Dark Mode</span>
@@ -105,6 +106,7 @@
<label class="custom-control-label" for="switch-dark"></label> <label class="custom-control-label" for="switch-dark"></label>
</div> </div>
</a> </a>
<?php } ?>
<a href="#" data-menu="menu-login" class="show-notloggedin"> <a href="#" data-menu="menu-login" class="show-notloggedin">
<i class="fa font-14 fa-sign-in-alt rounded-s bg-highlight color-white"></i> <i class="fa font-14 fa-sign-in-alt rounded-s bg-highlight color-white"></i>
<span>Login</span> <span>Login</span>
@@ -291,14 +293,17 @@
</div> </div>
</div> </div>
<div id="menu-update"> <div id="menu-nodb-warning" class="menu menu-box-bottom menu-box-detached rounded-m" data-height="500">
<div class="menu-title"><h1>Warnung</h1><p class="color-highlight">Datenbank nicht unterst&uuml;tzt</p><a href="#" class="close-menu"><i class="fa fa-times"></i></a></div>
<div class="divider divider-margins mb-n2"></div>
<div class="content bottom-0"> <div class="content bottom-0">
<p class="text-center mt-5"><i class="fa fa-sync-alt fa-7x color-highlight fa-spin"></i></p> <p>
<h1 class="text-center mt-5 font-900">Update Verfügbar</h1> Das Speichern der ben&ouml;tigten Daten wird von Deinem Ger&auml;t nicht unterst&uuml;tzt.<br>
<p class="text-center"> Da deshalb die Daten jedesmal direkt vom Server geladen werden m&uuml;ssen, kannst Du die App nicht offline nutzen.<br>
Eine neue Version unserer App ist verf&uuml;gbar. Keine Sorge, Du musst nichts machen. Wir aktuallisieren den Inhalt in wenigen Sekunden. Das Nachladen kann au&szlig;erdem gerade bei gro&szlig;en Datenmengen (wie Ranglisten) sehr lange dauern.
Wir empfehlen Dir daher, auf diesem Ger&auml;t unsere normale Website zu benutzen. Diese ist auch f&uuml;r Mobil-Ger&auml;te optimiert.
</p> </p>
<a href="#" class="page-update btn btn-center-xl btn-m shadow-xl rounded-s bg-highlight font-900 text-center">Update</a> <a class="btn btn-m mt-2 btn-full bg-highlight text-uppercase font-900" href="https://regatten.net/">Zur Website</a>
<p class="text-center font-10 bottom-0">Die App wird neu laden und das Update ist abgeschlossen.</p> <a id="menu-nodb-warning-okay" class="btn btn-m mt-2 mb-3 btn-full bg-highlight text-uppercase font-900" href="#">Nicht erneut anzeigen</a>
</div> </div>
</div> </div>

View File

@@ -18,7 +18,7 @@
<link rel="apple-touch-icon" sizes="180x180" href="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-192x192.png"> <link rel="apple-touch-icon" sizes="180x180" href="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-192x192.png">
</head> </head>
<body class="detect-theme" data-background="none" data-highlight="blue2"> <body class="theme-light" data-background="none" data-highlight="blue2"><?php /* DARK MODE DISABLED: set class to "detect-theme" */ ?>
<div id="preloader"><div class="spinner-border color-highlight" role="status"></div></div> <div id="preloader"><div class="spinner-border color-highlight" role="status"></div></div>
@@ -27,7 +27,8 @@
<?php include(__DIR__ . '/headerfooter.php'); ?> <?php include(__DIR__ . '/headerfooter.php'); ?>
<!--start of page content, add your stuff here--> <!--start of page content, add your stuff here-->
<div class="page-content header-clear-medium"> <div class="page-content header-clear">
<div id="syncstatus" class="text-right mr-2 mb-1">Zuletzt aktualisiert: nie</div>
<?php echo $sp['output']; ?> <?php echo $sp['output']; ?>
</div> </div>
<!--end of page content, off canvas elements here--> <!--end of page content, off canvas elements here-->

View File

@@ -279,6 +279,9 @@ var siteScript = async function() {
var results = await dbGetDataIndex('results', 'regatta', entry['id']); var results = await dbGetDataIndex('results', 'regatta', entry['id']);
regattaResults[entry['id']] = (results.length > 0); regattaResults[entry['id']] = (results.length > 0);
} }
regattas.sort(function(a,b){
return b.date.localeCompare(a.date);
});
if (regattas.length > 0) { if (regattas.length > 0) {
list = ''; list = '';
for (i in regattas) { for (i in regattas) {

View File

@@ -68,6 +68,7 @@ function selectChange() {
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
history.replaceState(null, '', '?year=' + val); history.replaceState(null, '', '?year=' + val);
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -261,6 +261,7 @@ function selectChange() {
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
history.replaceState(null, '', '?year=' + val); history.replaceState(null, '', '?year=' + val);
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -10,6 +10,7 @@ function selectChange() {
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
history.replaceState(null, '', '?year=' + val); history.replaceState(null, '', '?year=' + val);
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -3,6 +3,7 @@ function selectChange() {
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
history.replaceState(null, '', '?year=' + val); history.replaceState(null, '', '?year=' + val);
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -175,7 +175,8 @@ async function selectChange(callSiteScript = true) {
$('#input-jugstrict').prop('checked', jugstrict); $('#input-jugstrict').prop('checked', jugstrict);
if (callSiteScript && (typeof siteScript === 'function')) { if (callSiteScript && (typeof siteScript === 'function')) {
history.replaceState(null, '', '?type=' + type + '&year=' + year) history.replaceState(null, '', '?type=' + type + '&year=' + year);
showLoader();
siteScript(); siteScript();
} }
} }
@@ -187,6 +188,7 @@ function buttonShowPressed() {
if ($('#input-jugend').prop('checked')) chboxes += '&jugend=on' if ($('#input-jugend').prop('checked')) chboxes += '&jugend=on'
if ($('#input-jugstrict').prop('checked')) chboxes += '&jugstrict=on' if ($('#input-jugstrict').prop('checked')) chboxes += '&jugstrict=on'
history.replaceState(null, '', '?type=user&from=' + $('#input-from').val() + "&to=" + $('#input-to').val() + chboxes) history.replaceState(null, '', '?type=user&from=' + $('#input-from').val() + "&to=" + $('#input-to').val() + chboxes)
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -14,6 +14,7 @@ function selectChange(callSiteScript = true) {
if (callSiteScript && (typeof siteScript === 'function')) { if (callSiteScript && (typeof siteScript === 'function')) {
history.replaceState(null, '', '?year=' + val); history.replaceState(null, '', '?year=' + val);
showLoader();
siteScript(); siteScript();
} }
} }
@@ -21,7 +22,8 @@ function selectChange(callSiteScript = true) {
function buttonShowPressed() { function buttonShowPressed() {
if (typeof siteScript === 'function') { if (typeof siteScript === 'function') {
history.replaceState(null, '', '?year=user&from=' + $('#input-from').val() + "&to=" + $('#input-to').val()) history.replaceState(null, '', '?year=user&from=' + $('#input-from').val() + "&to=" + $('#input-to').val());
showLoader();
siteScript(); siteScript();
} }
} }

View File

@@ -1,5 +1,5 @@
<?php <?php
define('PWA_VERSION', '1.10.2'); define('PWA_VERSION', '1.10.4');
?> ?>

View File

@@ -233,11 +233,11 @@ self.addEventListener('push', async function(event) {
} }
break; break;
default: default:
console.log('Unknown channel:', data.channel); console.log('[sW] Unknown channel:', data.channel);
break; break;
} }
if (!okay) { if (!okay) {
console.log('Notification channel not subscribed'); console.log('[sW] Notification channel not subscribed');
return; return;
} }
@@ -256,7 +256,7 @@ self.addEventListener('push', async function(event) {
var db = await openDb(); var db = await openDb();
if (db != null) { if (db != null) {
var os = db.transaction('update_times', 'readwrite').objectStore('update_times'); var os = db.transaction('update_times', 'readwrite').objectStore('update_times');
var request = os.put({ table: 'last_sync', time: 0 }); var request = os.put({ table: 'last_sync', time: 1 });
request.onerror = function (event) { request.onerror = function (event) {
console.log('[sW] Error while saving data to DB:', e); console.log('[sW] Error while saving data to DB:', e);
db.close(); db.close();
@@ -268,7 +268,7 @@ self.addEventListener('push', async function(event) {
} }
} }
console.log('Showing notification'); console.log('[sW] Showing notification');
self.registration.showNotification(data.title, options); self.registration.showNotification(data.title, options);
break; break;
@@ -277,7 +277,7 @@ self.addEventListener('push', async function(event) {
var db = await openDb(); var db = await openDb();
if (db != null) { if (db != null) {
var os = db.transaction('update_times', 'readwrite').objectStore('update_times'); var os = db.transaction('update_times', 'readwrite').objectStore('update_times');
var request = os.put({ table: 'last_sync', time: 0 }); var request = os.put({ table: 'last_sync', time: 1 });
request.onerror = function (event) { request.onerror = function (event) {
console.log('[sW] Error while saving data to DB:', e); console.log('[sW] Error while saving data to DB:', e);
db.close(); db.close();
@@ -311,3 +311,16 @@ self.addEventListener('notificationclick', function(event) {
clients.openWindow(url) clients.openWindow(url)
); );
}); });
self.addEventListener('pushsubscriptionchange', function(event) {
var formData = new URLSearchParams();
formData.append('old', JSON.stringify(event.oldSubscription));
formData.append('new', JSON.stringify(event.newSubscription));
event.waitUntil(
fetch('<?php echo QUERY_URL; ?>update_subscription', {
method: 'POST',
cache: 'no-cache',
body: formData
})
);
});