Compare commits
25 Commits
no_regatta
...
v_1.11.6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
143755a50f | ||
|
|
13927fb769 | ||
|
|
90075ceb4f | ||
|
|
526b338e41 | ||
|
|
aa60df83db | ||
|
|
58505a0f53 | ||
|
|
37c584e525 | ||
|
|
1010e4ffdd | ||
|
|
c17c2b64cf | ||
|
|
0658a44516 | ||
|
|
2f2d94bab4 | ||
|
|
dd854b7df5 | ||
|
|
c91dc57736 | ||
|
|
c8cef6ee95 | ||
|
|
3f7d7a40ec | ||
|
|
19f561ffde | ||
|
|
84677ef4dd | ||
|
|
4dfa2d7bd5 | ||
|
|
1e0052f629 | ||
|
|
c983a1702f | ||
|
|
a1facbca85 | ||
|
|
fba8c8e958 | ||
|
|
c319e568b6 | ||
|
|
7083b46831 | ||
|
|
7da31729e9 |
@@ -223,7 +223,7 @@ $(document).ready(function(){
|
||||
//Disabling & Enabling Dark Transitions in Dark Mode to Speed up Performance.
|
||||
function allowTransitions(){$('body').find('#transitions-remove').remove();}
|
||||
function removeTransitions(){$('body').append('<style id="transitions-remove">.btn, .header, #footer-bar, .menu-box, .menu-active{transition:all 0ms ease!important;}</style>'); setTimeout(function(){allowTransitions();},10);}
|
||||
/* DARK MODE DISABLED
|
||||
|
||||
//Dark Mode
|
||||
var darkSwitch = $('[data-toggle-theme-switch], [data-toggle-theme], [data-toggle-theme-switch] input, [data-toggle-theme] input');
|
||||
$('[data-toggle-theme], [data-toggle-theme-switch]').on('click',function(){
|
||||
@@ -265,10 +265,6 @@ $(document).ready(function(){
|
||||
if($('body').hasClass('detect-theme')){setColorScheme();}
|
||||
$('.detect-dark-mode').on('click',function(){ $('body').addClass('detect-theme'); setColorScheme(); return false;});
|
||||
$('.disable-auto-dark-mode').on('click',function(){ $('body').removeClass('detect-theme'); $(this).remove(); return false;});
|
||||
*/
|
||||
eraseCookie('sticky_light_mode');
|
||||
eraseCookie('sticky_dark_mode');
|
||||
// END
|
||||
|
||||
log('[tpl] init other ui elements');
|
||||
|
||||
|
||||
@@ -145,9 +145,9 @@ var compareResultsRaceCount;
|
||||
function compareResults (a, b) {
|
||||
if (a['netto'] != b['netto']) return (a['netto'] < b['netto']) ? -1 : 1;
|
||||
var tempA = [...a['values']];
|
||||
tempA.sort();
|
||||
tempA.sort(function(a,b){return a-b;});
|
||||
var tempB = [...b['values']];
|
||||
tempB.sort();
|
||||
tempB.sort(function(a,b){return a-b;});
|
||||
for (var i = 0; i < compareResultsRaceCount; i ++) {
|
||||
if (tempA[i] != tempB[i]) return (tempA[i] < tempB[i]) ? -1 : 1;
|
||||
}
|
||||
@@ -191,6 +191,8 @@ function dbGetResultCalculated(regatta) {
|
||||
case 'DNF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Did not finish
|
||||
case 'RET': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired (Aufgegeben)
|
||||
case 'RAF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired after finish
|
||||
// Kursfehler
|
||||
case 'NSC': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Not sailed course
|
||||
// Disqualifizierun
|
||||
case 'DSQ': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Disqualified
|
||||
case 'DNE': results[id]['values'][i] = gemeldet + 1; copy[i] = -1; break; // Disqualified, not excludable (disqu. kann nach 90.3(b) nicht gestrichen werden)
|
||||
@@ -256,7 +258,7 @@ function dbGetResultCalculated(regatta) {
|
||||
});
|
||||
}
|
||||
|
||||
function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
||||
function dbGetRanking(minDate, maxDate, maxAge, ageStrict, altM = 9, ageCrew = false) {
|
||||
return new Promise(async function(resolve) {
|
||||
var rankNoResults = [];
|
||||
|
||||
@@ -275,10 +277,14 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
||||
|
||||
for (var i in regattas) {
|
||||
var regatta = regattas[i];
|
||||
var date = parseDate(regatta.date);
|
||||
|
||||
// regatta has to be min. 2 days to be ranking regatta
|
||||
if (regatta.length < 2) continue;
|
||||
|
||||
// regatta has to have rlf
|
||||
if (regatta.rlf == 0) continue;
|
||||
|
||||
var results = await dbGetDataIndex('results', 'regatta', regatta.id);
|
||||
if (results.length <= 0) {
|
||||
if (regatta.dateTo <= getToday()) {
|
||||
@@ -328,7 +334,20 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
||||
if (result.rlp == 0) continue;
|
||||
|
||||
// check if crew is youth
|
||||
// TODO: not used
|
||||
if ((maxAge != false) && ageCrew) {
|
||||
var crew = result.crew.split(',');
|
||||
var okay = true;
|
||||
for (var c in crew) {
|
||||
if ((c == '') || !(c in sailorIds)) continue;
|
||||
var sailor = sailors[sailorIds[c]];
|
||||
if (((sailor.year != null) && (sailor.year < (formatDate('Y', date) - maxAge))) ||
|
||||
((sailor.year == null) && (ageStrict))) {
|
||||
okay = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!okay) continue;
|
||||
}
|
||||
|
||||
sailors[sailorIds[result.steuermann]].regattas[regatta.id] = {
|
||||
regatta: regatta.id,
|
||||
@@ -350,9 +369,9 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
||||
for (var i = sailors.length - 1; i >= 0; i --) {
|
||||
if (sailors[i].german == '0') {
|
||||
sailors.splice(i, 1);
|
||||
} else if (jugend) {
|
||||
if (((sailors[i].year != null) && (sailors[i].year < (formatDate('Y', maxDate) - (await dbGetClassProp('youth-age'))))) ||
|
||||
((sailors[i].year == null) && (jugstrict))) {
|
||||
} else if (maxAge != false) {
|
||||
if (((sailors[i].year != null) && (sailors[i].year < (formatDate('Y', maxDate) - maxAge))) ||
|
||||
((sailors[i].year == null) && (ageStrict))) {
|
||||
sailors.splice(i, 1);
|
||||
}
|
||||
}
|
||||
@@ -372,7 +391,7 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
||||
sum += parseFloat(r[1]);
|
||||
sailors[i].regattas[r[0]].used ++;
|
||||
cnt ++;
|
||||
if (cnt >= 9) break;
|
||||
if (cnt >= altM) break;
|
||||
}
|
||||
delete sailors[i].tmp_rlp;
|
||||
if (cnt > 0) {
|
||||
|
||||
@@ -624,7 +624,7 @@ function sendErrorReport() {
|
||||
url: QUERY_URL + 'error_report',
|
||||
method: 'POST',
|
||||
data: {
|
||||
errors: consoleOutput,
|
||||
errors: JSON.stringify(consoleOutput),
|
||||
device: navigator.userAgent,
|
||||
version: '<?php echo PWA_VERSION; ?>'
|
||||
},
|
||||
@@ -664,24 +664,24 @@ var addConsoleOpenerToPreloader = function() {
|
||||
}
|
||||
addConsoleOpenerToPreloader();
|
||||
|
||||
function m2s_getLink(type, eventId) {
|
||||
function m2s_getLink(type, eventId, classId) {
|
||||
switch (type) {
|
||||
case 'entrylist':
|
||||
return 'https://manage2sail.com/de-DE/event/' + eventId + '#!/entries';
|
||||
return 'https://manage2sail.com/de-DE/event/' + eventId + '#!/entries?classId=' + classId;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
function ro_getLink(type, eventId) {
|
||||
function ro_getLink(type, eventId, classId) {
|
||||
switch (type) {
|
||||
case 'entrylist':
|
||||
return 'http://www.raceoffice.org/entrylist.php?eid=' + eventId;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
function extServiceGetLink(serviceName, type, eventId = '') {
|
||||
function extServiceGetLink(serviceName, type, eventId = '', classId = '') {
|
||||
switch (serviceName) {
|
||||
case 'm2s':
|
||||
return m2s_getLink(type, eventId);
|
||||
return m2s_getLink(type, eventId, classId);
|
||||
case 'ro':
|
||||
return ro_getLink(type, eventId);
|
||||
}
|
||||
|
||||
@@ -19,8 +19,13 @@
|
||||
|
||||
// Menu
|
||||
$items = $tpl->load('menu/item-switch', ['In die Saison-Planung aufnehmen', 'html-id' => 'switch-planning-include', 'icon' => 'fa-check']);
|
||||
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-boat']);
|
||||
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-steuermann']);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 320]);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 400]);
|
||||
|
||||
// Select boat
|
||||
$items = $tpl->load('input', ['html-id' => 'input-edit-boat-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||
$sp['menus'] .= $tpl->load('menu/modal', [$items, 'html-id' => 'menu-boat', 'height' => 500, 'width' => 350]);
|
||||
|
||||
// Select sailor
|
||||
$items = $tpl->load('input', ['html-id' => 'input-edit-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
// Plannings
|
||||
$content = '<p id="p-info" class="mb-0"></p>';
|
||||
$thead = '<tr><th>Benutzer</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
||||
$thead = '<tr><th>Benutzer</th><th>Boot</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
||||
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-plannings', 'css-class' => 'mb-0 text-nowrap']);
|
||||
|
||||
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-plannings']);
|
||||
|
||||
@@ -92,12 +92,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="menu-settings" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="260">
|
||||
<div id="menu-settings" class="menu menu-box-bottom menu-box-detached rounded-m" data-menu-height="310">
|
||||
<div class="menu-title"><h1>Einstellungen</h1><p class="color-highlight"> </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">
|
||||
<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">
|
||||
<i class="fa font-14 fa-moon rounded-s bg-dark1-dark color-white"></i>
|
||||
<span>Dark Mode</span>
|
||||
@@ -106,7 +105,6 @@
|
||||
<label class="custom-control-label" for="switch-dark"></label>
|
||||
</div>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<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>
|
||||
<span>Login</span>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-192x192.png">
|
||||
</head>
|
||||
|
||||
<body class="theme-light" data-background="none" data-highlight="blue2"><?php /* DARK MODE DISABLED: set class to "detect-theme" */ ?>
|
||||
<body class="detect-theme" data-background="none" data-highlight="blue2">
|
||||
|
||||
<div id="preloader"><div class="spinner-border color-highlight" role="status"></div></div>
|
||||
|
||||
|
||||
@@ -189,6 +189,23 @@ var siteScript = async function() {
|
||||
if (regatta.special.substr(0, 1) == '#') {
|
||||
regatta.special = '* ' + regatta.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = regatta.special.indexOf('$')) >= 0) {
|
||||
var pos2 = regatta.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = regatta.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
regatta.special = regatta.special.replace('$' + key + '$', value);
|
||||
}
|
||||
list += '<div>' + regatta['special'] + '</div>';
|
||||
|
||||
// Icons
|
||||
@@ -259,7 +276,7 @@ var siteScript = async function() {
|
||||
var regattas = await dbGetRegattasRange(minDate, maxDate);
|
||||
i = 0;
|
||||
while (i < regattas.length) {
|
||||
if (regattas.length < 1) {
|
||||
if (regattas[i].length < 1) {
|
||||
regattas.splice(i, 1);
|
||||
} else {
|
||||
i ++;
|
||||
@@ -297,6 +314,23 @@ var siteScript = async function() {
|
||||
if (regatta.special.substr(0, 1) == '#') {
|
||||
regatta.special = '* ' + regatta.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = regatta.special.indexOf('$')) >= 0) {
|
||||
var pos2 = regatta.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = regatta.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
regatta.special = regatta.special.replace('$' + key + '$', value);
|
||||
}
|
||||
list += '<div>' + regatta['special'] + '</div>';
|
||||
|
||||
// Icons
|
||||
@@ -371,7 +405,7 @@ var siteScript = async function() {
|
||||
var regattas = await dbGetRegattasRange(minDate, maxDate);
|
||||
i = 0;
|
||||
while (i < regattas.length) {
|
||||
if (regattas.length < 1) {
|
||||
if (regattas[i].length < 1) {
|
||||
regattas.splice(i, 1);
|
||||
} else {
|
||||
i ++;
|
||||
@@ -412,6 +446,23 @@ var siteScript = async function() {
|
||||
if (regatta.special.substr(0, 1) == '#') {
|
||||
regatta.special = '* ' + regatta.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = regatta.special.indexOf('$')) >= 0) {
|
||||
var pos2 = regatta.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = regatta.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
regatta.special = regatta.special.replace('$' + key + '$', value);
|
||||
}
|
||||
list += '<div>' + regatta['special'] + '</div>';
|
||||
|
||||
// Icons
|
||||
|
||||
@@ -6,15 +6,38 @@ async function onRegattaClicked(id) {
|
||||
var dateTo = parseDate(regatta['date']);
|
||||
dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0));
|
||||
|
||||
var text = [];
|
||||
var specialFields = await dbGetClassProp('special-fields');
|
||||
if (specialFields === null) specialFields = {};
|
||||
if (regatta.special.substr(0, 1) == '#') {
|
||||
regatta.special = regatta.special.substr(1);
|
||||
if (typeof specialFields[regatta.special] !== 'undefined') {
|
||||
$('#menu-item-special').text(specialFields[regatta.special]);
|
||||
} else {
|
||||
$('#menu-item-special').text('ERROR');
|
||||
text.push(specialFields[regatta.special]);
|
||||
}
|
||||
}
|
||||
var pos;
|
||||
while ((pos = regatta.special.indexOf('$')) >= 0) {
|
||||
var pos2 = regatta.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = regatta.special.substring(pos + 1, pos2);
|
||||
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
var year = parseDate(regatta.date).getFullYear();
|
||||
year = year - value + 1;
|
||||
text.push('Jahrgänge ' + year + ' und jünger');
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
regatta.special = regatta.special.replace('$' + key + '$', '');
|
||||
}
|
||||
if (text.length > 0) {
|
||||
text.sort();
|
||||
for (i in text) {
|
||||
text[i] = $('<div />').text(text[i]).html();
|
||||
}
|
||||
$('#menu-item-special').html(text.join('<br>'));
|
||||
$('#menu-item-special').show();
|
||||
} else {
|
||||
$('#menu-item-special').hide();
|
||||
@@ -34,11 +57,18 @@ async function onRegattaClicked(id) {
|
||||
// Your Planning
|
||||
if (planning != null) {
|
||||
$('#menu-item-yourplanning').show();
|
||||
var boat = null;
|
||||
if (planning.boat != null) {
|
||||
boat = (await dbGetData('boats', planning.boat)).sailnumber;
|
||||
}
|
||||
var steuermann = null;
|
||||
if (planning.steuermann != null) {
|
||||
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
|
||||
}
|
||||
var crew = [steuermann == null ? '[noch unklar]' : steuermann];
|
||||
var crew = [
|
||||
boat == null ? '[Boot unklar]' : boat,
|
||||
steuermann == null ? '[St.mann unklar]' : steuermann
|
||||
];
|
||||
crewA = planning.crew.split(',');
|
||||
for (i in crewA) {
|
||||
var sailor = await dbGetData('sailors', crewA[i]);
|
||||
@@ -84,7 +114,7 @@ async function onRegattaClicked(id) {
|
||||
}
|
||||
if ((regatta.extService !== null) && ('entryCount' in extServiceData)) {
|
||||
$('#badge-regatta-entrylist').text(extServiceData.entryCount);
|
||||
$('#menu-item-entrylist').attr('href', extServiceGetLink(regatta.extService, 'entrylist', extServiceData.eventId)); // TODO
|
||||
$('#menu-item-entrylist').attr('href', extServiceGetLink(regatta.extService, 'entrylist', extServiceData.eventId, extServiceData.classId)); // TODO
|
||||
$('#menu-item-entrylist').show();
|
||||
} else {
|
||||
$('#menu-item-entrylist').hide();
|
||||
@@ -164,7 +194,7 @@ async function onRegattaClicked(id) {
|
||||
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
||||
}
|
||||
} else {
|
||||
$('#badge-regatta-meldung').text('Meldeschluss abgelaufen');
|
||||
$('#badge-regatta-meldung').text('Meldeschluss abgelaufen, Nachmeldung möglich');
|
||||
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -178,6 +178,9 @@ var siteScript = async function() {
|
||||
var club = null;
|
||||
if (entry['club'] != null)
|
||||
club = await dbGetData('clubs', entry['club']);
|
||||
if (entry.planning.boat !== null) {
|
||||
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||
}
|
||||
if (entry.planning.steuermann !== null) {
|
||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||
}
|
||||
@@ -197,6 +200,7 @@ var siteScript = async function() {
|
||||
row.keywords.push(entry['name']);
|
||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||
|
||||
@@ -224,6 +228,23 @@ var siteScript = async function() {
|
||||
if (entry.special.substr(0, 1) == '#') {
|
||||
entry.special = '* ' + entry.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = entry.special.indexOf('$')) >= 0) {
|
||||
var pos2 = entry.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = entry.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
entry.special = entry.special.replace('$' + key + '$', value);
|
||||
}
|
||||
row.content += '<div>' + entry['special'] + '</div>';
|
||||
|
||||
// Icons
|
||||
|
||||
@@ -141,37 +141,6 @@ async function sailorsSearch() {
|
||||
}
|
||||
}
|
||||
|
||||
async function initSailors() {
|
||||
sailors = [];
|
||||
known = [];
|
||||
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
||||
knownIds = {};
|
||||
for (var p in plannings) {
|
||||
p = plannings[p];
|
||||
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
||||
var crew = p.crew.split(',');
|
||||
for (var c in crew) {
|
||||
c = crew[c];
|
||||
if (c != '') knownIds[c] = true;
|
||||
}
|
||||
}
|
||||
var dbSailors = await dbGetData('sailors');
|
||||
dbSailors.sort(function(a,b){
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
for (var s in dbSailors) {
|
||||
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
||||
item += '<span>' + dbSailors[s].name + '</span>';
|
||||
item += '<i class="fa fa-angle-right"></i>';
|
||||
item += '</a>';
|
||||
sailors.push({
|
||||
keywords: [dbSailors[s].name],
|
||||
content: item
|
||||
});
|
||||
if (dbSailors[s].id in knownIds) known.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
async function planningChangeCrew(sid = null) {
|
||||
if (sid !== null) {
|
||||
showLoader();
|
||||
@@ -230,6 +199,136 @@ async function planningChangeSteuermann() {
|
||||
$('#input-edit-search').focus();
|
||||
}
|
||||
|
||||
var boats = [];
|
||||
var boatKnownIds = [];
|
||||
var boatKnown = [];
|
||||
|
||||
async function boatSelected(bid) {
|
||||
$('#menu-boat').hideMenu();
|
||||
showLoader();
|
||||
var rid = $('#switch-planning-include').data('regatta');
|
||||
var action = 'planning_set_boat';
|
||||
// add boat
|
||||
var auth = {
|
||||
id: localStorage.getItem('auth_id'),
|
||||
hash: localStorage.getItem('auth_hash')
|
||||
}
|
||||
$.ajax({
|
||||
url: QUERY_URL + action,
|
||||
method: 'POST',
|
||||
data: {
|
||||
auth: auth,
|
||||
regatta: rid,
|
||||
boat: bid
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
if (xhr.status == 401) {
|
||||
log('authentification failed');
|
||||
toastError('Authentifizierung fehlgeschlagen. Versuche es erneut.');
|
||||
} else if (xhr.status == 0) {
|
||||
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um die Änderungen zu speichern');
|
||||
} else {
|
||||
log(action + ': unbekannter Fehler', status, error);
|
||||
log(xhr);
|
||||
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||
}
|
||||
hideLoader();
|
||||
},
|
||||
success: async function (data, status, xhr) {
|
||||
await sync();
|
||||
if ((bid === null) || (bid in boatKnownIds)) {
|
||||
planningEdit(rid);
|
||||
hideLoader();
|
||||
} else {
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function boatsSearch() {
|
||||
$('.item-boat-search').remove();
|
||||
var item = '<a class="item-boat-search" onclick="boatSelected(null)">';
|
||||
item += '<span style="font-style:italic;">noch unklar</span>';
|
||||
item += '<i class="fa fa-angle-right"></i>';
|
||||
item += '</a>';
|
||||
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||
if ($('#input-edit-boat-search').val().length == 0) {
|
||||
boatKnown.forEach(function (entry) {
|
||||
$('#menu-boat').find('.content').find('.list-group').append(entry);
|
||||
});
|
||||
}
|
||||
if ($('#input-edit-boat-search').val().length >= 3) {
|
||||
boats.forEach(function (entry) {
|
||||
if (search($('#input-edit-boat-search').val(), entry.keywords)) {
|
||||
$('#menu-boat').find('.content').find('.list-group').append(entry.content);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
var item = '<p class="item-boat-search">Zum Suchen mindestens 3 Zeichen eingeben</p>';
|
||||
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||
}
|
||||
}
|
||||
|
||||
async function planningChangeBoat() {
|
||||
$('#input-edit-boat-search').val('').trigger('focusin').trigger('focusout');
|
||||
boatsSearch();
|
||||
$('#menu-edit').hideMenu();
|
||||
$('#menu-boat').find('.menu-title').find('h1').text('Boot bearbeiten');
|
||||
$('#menu-boat').showMenu();
|
||||
$('#input-edit-boat-search').focus();
|
||||
}
|
||||
|
||||
async function initBoatsSailors() {
|
||||
boats = [];
|
||||
sailors = [];
|
||||
boatKnown = [];
|
||||
known = [];
|
||||
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
||||
boatKnownIds = {};
|
||||
knownIds = {};
|
||||
for (var p in plannings) {
|
||||
p = plannings[p];
|
||||
if (p.boat !== null) boatKnownIds[p.boat] = true;
|
||||
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
||||
var crew = p.crew.split(',');
|
||||
for (var c in crew) {
|
||||
c = crew[c];
|
||||
if (c != '') knownIds[c] = true;
|
||||
}
|
||||
}
|
||||
var dbBoats = await dbGetData('boats');
|
||||
dbBoats.sort(function(a,b){
|
||||
return a.sailnumber.localeCompare(b.sailnumber);
|
||||
});
|
||||
for (var b in dbBoats) {
|
||||
var item = '<a class="item-boat-search" onclick="boatSelected(' + dbBoats[b].id + ')">';
|
||||
item += '<span>' + dbBoats[b].sailnumber + ' - ' + dbBoats[b].name + '</span>';
|
||||
item += '<i class="fa fa-angle-right"></i>';
|
||||
item += '</a>';
|
||||
boats.push({
|
||||
keywords: [dbBoats[b].sailnumber, dbBoats[b].name],
|
||||
content: item
|
||||
});
|
||||
if (dbBoats[b].id in boatKnownIds) boatKnown.push(item);
|
||||
}
|
||||
var dbSailors = await dbGetData('sailors');
|
||||
dbSailors.sort(function(a,b){
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
for (var s in dbSailors) {
|
||||
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
||||
item += '<span>' + dbSailors[s].name + '</span>';
|
||||
item += '<i class="fa fa-angle-right"></i>';
|
||||
item += '</a>';
|
||||
sailors.push({
|
||||
keywords: [dbSailors[s].name],
|
||||
content: item
|
||||
});
|
||||
if (dbSailors[s].id in knownIds) known.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
async function planningEdit(id) {
|
||||
var regatta = await dbGetData('regattas', id);
|
||||
|
||||
@@ -249,7 +348,13 @@ async function planningEdit(id) {
|
||||
$('#switch-planning-include').data('regatta', id);
|
||||
if (planning !== null) {
|
||||
$('#switch-planning-include').prop('checked', true);
|
||||
$('#item-boat').show();
|
||||
$('#item-steuermann').show();
|
||||
if (planning.boat !== null) {
|
||||
$('#item-boat').find('span').text('Boot: ' + (await dbGetData('boats', planning.boat)).sailnumber);
|
||||
} else {
|
||||
$('#item-boat').find('span').html('Boot: <font style="font-style:italic;">noch unklar</font>');
|
||||
}
|
||||
if (planning.steuermann !== null) {
|
||||
$('#item-steuermann').find('span').text('Am Steuer: ' + (await dbGetData('sailors', planning.steuermann)).name);
|
||||
} else {
|
||||
@@ -274,6 +379,7 @@ async function planningEdit(id) {
|
||||
$('#menu-edit').find('.content').find('.list-group').append(item);
|
||||
} else {
|
||||
$('#switch-planning-include').prop('checked', false);
|
||||
$('#item-boat').hide();
|
||||
$('#item-steuermann').hide();
|
||||
$('.item-crew').remove();
|
||||
}
|
||||
@@ -332,9 +438,11 @@ var siteScript = async function() {
|
||||
$('#select-year').change(selectChange);
|
||||
$('#input-search').on('input', drawList);
|
||||
$('#switch-planning-include').parent().parent().click(planningSwitchChanged);
|
||||
$('#item-boat').click(planningChangeBoat);
|
||||
$('#item-steuermann').click(planningChangeSteuermann);
|
||||
$('#input-edit-search').on('input', sailorsSearch);
|
||||
initSailors();
|
||||
$('#input-edit-boat-search').on('input', boatsSearch);
|
||||
initBoatsSailors();
|
||||
}
|
||||
|
||||
today = getToday();
|
||||
@@ -393,6 +501,9 @@ var siteScript = async function() {
|
||||
if (entry['club'] != null)
|
||||
club = await dbGetData('clubs', entry['club']);
|
||||
if (entry.planning !== null) {
|
||||
if (entry.planning.boat !== null) {
|
||||
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||
}
|
||||
if (entry.planning.steuermann !== null) {
|
||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||
}
|
||||
@@ -439,6 +550,23 @@ var siteScript = async function() {
|
||||
if (entry.special.substr(0, 1) == '#') {
|
||||
entry.special = '* ' + entry.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = entry.special.indexOf('$')) >= 0) {
|
||||
var pos2 = entry.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = entry.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
entry.special = entry.special.replace('$' + key + '$', value);
|
||||
}
|
||||
row.content += '<div>' + entry['special'] + '</div>';
|
||||
|
||||
// Club
|
||||
@@ -471,10 +599,15 @@ var siteScript = async function() {
|
||||
|
||||
// ZEILE 5
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
||||
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||
row.content += '</div>';
|
||||
|
||||
// ZEILE 6...
|
||||
// ZEILE 6
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||
row.content += '</div>';
|
||||
|
||||
// ZEILE 7...
|
||||
for (var i in entry.planning.crew) {
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||
|
||||
@@ -124,6 +124,9 @@ var siteScript = async function() {
|
||||
var club = null;
|
||||
if (entry['club'] != null)
|
||||
club = await dbGetData('clubs', entry['club']);
|
||||
if (entry.planning.boat !== null) {
|
||||
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||
}
|
||||
if (entry.planning.steuermann !== null) {
|
||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||
}
|
||||
@@ -143,6 +146,7 @@ var siteScript = async function() {
|
||||
row.keywords.push(entry['name']);
|
||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||
|
||||
@@ -167,6 +171,23 @@ var siteScript = async function() {
|
||||
if (entry.special.substr(0, 1) == '#') {
|
||||
entry.special = '* ' + entry.special.substr(1);
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = entry.special.indexOf('$')) >= 0) {
|
||||
var pos2 = entry.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = entry.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
value = 'U-' + value;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
entry.special = entry.special.replace('$' + key + '$', value);
|
||||
}
|
||||
row.content += '<div>' + entry['special'] + '</div>';
|
||||
|
||||
// Club
|
||||
@@ -198,10 +219,15 @@ var siteScript = async function() {
|
||||
|
||||
// ZEILE 5
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
||||
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||
row.content += '</div>';
|
||||
|
||||
// ZEILE 6...
|
||||
// ZEILE 6
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||
row.content += '</div>';
|
||||
|
||||
// ZEILE 7...
|
||||
for (var i in entry.planning.crew) {
|
||||
row.content += '<div>';
|
||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||
|
||||
@@ -38,6 +38,12 @@ var siteScript = async function() {
|
||||
|
||||
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
||||
|
||||
if (planning.boat != null) {
|
||||
tbody += '<td>' + (await dbGetData('boats', planning.boat)).sailnumber + '</td>';
|
||||
} else {
|
||||
tbody += '<td>(noch unklar)</td>';
|
||||
}
|
||||
|
||||
if (planning.steuermann != null) {
|
||||
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
||||
} else {
|
||||
|
||||
@@ -162,6 +162,27 @@ var siteScript = async function() {
|
||||
entry.special = 'ERROR';
|
||||
}
|
||||
}
|
||||
// replace placeholders
|
||||
var pos;
|
||||
while ((pos = entry.special.indexOf('$')) >= 0) {
|
||||
var pos2 = entry.special.indexOf('$', pos + 1);
|
||||
if (pos2 < 0) break;
|
||||
var key = entry.special.substring(pos + 1, pos2);
|
||||
|
||||
var value = '';
|
||||
// age class
|
||||
if ((key.substr(0, 1) == 'U') && (!isNaN(value = parseInt(key.substr(1))))) {
|
||||
var year = parseDate(entry.date).getFullYear();
|
||||
year = year - value + 1;
|
||||
var text = 'Jahrgänge ' + year + ' und jünger';
|
||||
value = 'U-' + value;
|
||||
specialShown[value] = text;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
entry.special = entry.special.replace('$' + key + '$', value);
|
||||
}
|
||||
row.content += '<div>' + entry.special + '</div>';
|
||||
|
||||
// Icons
|
||||
@@ -239,9 +260,12 @@ var siteScript = async function() {
|
||||
rows.push(null);
|
||||
}
|
||||
|
||||
if (Object.keys(specialShown).length > 0) {
|
||||
var specialKeys = Object.keys(specialShown);
|
||||
if (specialKeys.length > 0) {
|
||||
specialKeys.sort();
|
||||
var specialText = '';
|
||||
for (key in specialShown) {
|
||||
for (i in specialKeys) {
|
||||
var key = specialKeys[i];
|
||||
specialText += '* ' + key + ': ' + specialShown[key] + '<br>';
|
||||
}
|
||||
$('#card-special').find('p').html(specialText);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
|
||||
define('PWA_VERSION', '1.11.4h2');
|
||||
define('PWA_VERSION', '1.11.6');
|
||||
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user