Compare commits

..

5 Commits
v_1.1 ... v_1.3

Author SHA1 Message Date
Timon Ostertun
641210e7f4 Release v_1.3 2020-09-25 23:42:31 +02:00
Timon Ostertun
c660fed9f0 Added lists (sailors, boats, clubs) 2020-09-25 23:39:49 +02:00
Timon Ostertun
5bc2d19800 Fix v_1.2 2020-09-25 19:02:52 +02:00
Timon Ostertun
89d53e0854 Release v_1.2 2020-09-25 18:51:10 +02:00
Timon Ostertun
9f16806179 New regattas list on index 2020-09-25 18:48:42 +02:00
24 changed files with 1039 additions and 318 deletions

View File

@@ -6,7 +6,6 @@ RewriteBase /projects/RegattenApp/
### RESTRICTED FOLDER ### RESTRICTED FOLDER
RewriteRule ^(.*)server(.*)$ / [R=301,L,NC] RewriteRule ^(.*)server(.*)$ / [R=301,L,NC]
RewriteRule ^(.*)content(.*)$ / [R=301,L,NC]

View File

@@ -2,6 +2,7 @@
header('Content-Type: text/javascript'); header('Content-Type: text/javascript');
require_once(__DIR__ . '/../../server/version.php');
require_once(__DIR__ . '/../../server/config.php'); require_once(__DIR__ . '/../../server/config.php');
?> ?>

View File

@@ -43,6 +43,35 @@
text-align: right; text-align: right;
} }
/*** NORMAL LIST ***/
.normal-list > div {
padding-top: 1rem;
padding-bottom: 1rem;
border-bottom: 1px solid #dee2e6;
cursor: pointer;
}
.normal-list > div:last-child {
border: 0;
padding-bottom: 0;
}
.normal-list div {
white-space: nowrap;
}
.normal-list > div > div > div {
display: inline-block;
}
.normal-list > div > div:nth-child(2) > div:nth-child(1) {
width: 50%;
}
.normal-list > div > div:nth-child(2) > div:nth-child(2) {
width: 50%;
text-align: right;
}
/*** BLINKING ICONS ***/ /*** BLINKING ICONS ***/
@keyframes fa-blink { @keyframes fa-blink {
0% { opacity: 1; } 0% { opacity: 1; }

View File

@@ -1220,6 +1220,7 @@ img.mx-auto {
bottom: 0px; bottom: 0px;
z-index: 99999; z-index: 99999;
transition: all 150ms ease; transition: all 150ms ease;
background-color: #0f1117;
} }
#preloader .spinner-border { #preloader .spinner-border {

View File

@@ -1,5 +1,6 @@
<?php <?php
require_once(__DIR__ . '/server/version.php');
require_once(__DIR__ . '/server/config.php'); require_once(__DIR__ . '/server/config.php');
require_once(__DIR__ . '/server/log.php'); require_once(__DIR__ . '/server/log.php');
require_once(__DIR__ . '/server/templates.php'); require_once(__DIR__ . '/server/templates.php');
@@ -24,7 +25,7 @@
exit; exit;
} }
if (!file_exists(__DIR__ . '/content/' . $site . '.php')) { if (!file_exists(__DIR__ . '/server/content/' . $site . '.php')) {
$site = '404'; $site = '404';
} }
@@ -40,7 +41,7 @@
$tpl = new Templates(__DIR__ . '/server/templates/'); $tpl = new Templates(__DIR__ . '/server/templates/');
$scripts = new Scripts(__DIR__ . '/server/scripts/'); $scripts = new Scripts(__DIR__ . '/server/scripts/');
require_once(__DIR__ . '/content/' . $site . '.php'); require_once(__DIR__ . '/server/content/' . $site . '.php');
require_once(__DIR__ . '/server/buildpage.php'); require_once(__DIR__ . '/server/buildpage.php');

View File

@@ -2,6 +2,7 @@
header('Content-Type: application/json'); header('Content-Type: application/json');
require_once(__DIR__ . '/server/version.php');
require_once(__DIR__ . '/server/config.php'); require_once(__DIR__ . '/server/config.php');
?> ?>

View File

@@ -9,8 +9,6 @@
define('SERVER_ADDR', 'https://' . $_SERVER['SERVER_NAME'] . SERVER_PATH); // path to root directory define('SERVER_ADDR', 'https://' . $_SERVER['SERVER_NAME'] . SERVER_PATH); // path to root directory
define('LOGGING_APIKEY', 'xxx'); // Apikey for Logging API -> get from ostertun.net/logging define('LOGGING_APIKEY', 'xxx'); // Apikey for Logging API -> get from ostertun.net/logging
define('PWA_VERSION', '1.0');
// PUSH SERVER // PUSH SERVER
define('PUSH_AUTH', 'xxxxxxx'); // auth string for push.ostertun.net define('PUSH_AUTH', 'xxxxxxx'); // auth string for push.ostertun.net
define('PUSH_SERVERKEY', 'xxxxxxx'); // server key from push.ostertun.net define('PUSH_SERVERKEY', 'xxxxxxx'); // server key from push.ostertun.net

View File

@@ -1,6 +1,6 @@
<?php <?php
$sp['title'] = 'Fehler 404 - Regatten.net Pirat'; $sp['title'] = 'Fehler 404 - Regatten.net ' . $_CLASS['name'];
$sp['backbutton'] = true; $sp['backbutton'] = true;
$content = $tpl->load('error', ['404', 'Seite nicht gefunden']); $content = $tpl->load('error', ['404', 'Seite nicht gefunden']);

42
server/content/boats.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
$sp['title'] = 'Boote - Regatten.net ' . $_CLASS['name'];
$sp['backbutton'] = 'index';
$sp['activenav'] = 4;
// Title
$content = "<h1>Boote</h1>";
$sp['output'] .= $tpl->load('card', [$content]);
// Info Years
$content = '<h2>Bootsnamen</h2>';
$content .= '<p>';
$content .= 'Genauso wie bei den Jahrg&auml;ngen der Segler fehlen uns auch viele Bootsnamen.<br>';
$content .= 'Kennst Du ein Boot, dessen Name hier noch nicht hinterlegt ist oder das vielleicht umgetauft wurde, <b>hilf uns bitte</b>, indem Du den Namen eintr&auml;gst!<br>';
$content .= 'Klicke dazu einfach auf das entsprechende Boot und w&auml;hle Bootsnamen bearbeiten aus.<br>';
$content .= 'Vielen Dank f&uuml;r Deine Unterst&uuml;tzung!';
$content .= '</p>';
$sp['output'] .= $tpl->load('card', [$content]);
// List
$content = '<p id="p-count" class="mb-0"></p>';
$content .= $tpl->load('input', ['html-id' => 'input-search', 'placeholder' => 'Suche', 'type' => 'text', 'css-class' => 'mt-2']);
$content .= '<div id="div-list" class="normal-list mb-0"></div>';
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-list']);
// Pagination
$sp['output'] .= $tpl->load('pagination', ['html-id' => 'pagination']);
// Menu
// TODO: add entries for jump2rank jump2club
$items = $tpl->load('menu/item-icon', ['', '#', 'html-id' => 'menu-item-boatname', 'icon' => 'fa-edit']);
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']);
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-boat', 'title' => 'Boots-Details', 'height' => 320]);
$sp['scripts'] .= $scripts->load('pagination', ['pageChange', 'page', 'pageCount', 'pagination']);
$sp['scripts'] .= $scripts->load('boats');
?>

30
server/content/clubs.php Normal file
View File

@@ -0,0 +1,30 @@
<?php
$sp['title'] = 'Vereine - Regatten.net ' . $_CLASS['name'];
$sp['backbutton'] = 'index';
$sp['activenav'] = 4;
// Title
$content = "<h1>Vereine</h1>";
$sp['output'] .= $tpl->load('card', [$content]);
// List
$content = '<p id="p-count" class="mb-0"></p>';
$content .= $tpl->load('input', ['html-id' => 'input-search', 'placeholder' => 'Suche', 'type' => 'text', 'css-class' => 'mt-2']);
$content .= '<div id="div-list" class="normal-list mb-0"></div>';
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-list']);
// Pagination
$sp['output'] .= $tpl->load('pagination', ['html-id' => 'pagination']);
// Menu
// TODO: add entries for jump2rank jump2club
$items = $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']);
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-club', 'title' => 'Vereins-Details', 'height' => 320]);
$sp['scripts'] .= $scripts->load('pagination', ['pageChange', 'page', 'pageCount', 'pagination']);
$sp['scripts'] .= $scripts->load('clubs');
?>

View File

@@ -1,6 +1,6 @@
<?php <?php
$sp['title'] = 'Startseite - Regatten.net Pirat'; $sp['title'] = 'Startseite - Regatten.net ' . $_CLASS['name'];
$sp['activenav'] = 1; $sp['activenav'] = 1;
// Title // Title
@@ -22,8 +22,7 @@
// Planning next // Planning next
$content = '<h2>Deine n&auml;chsten Regatten</h2>'; $content = '<h2>Deine n&auml;chsten Regatten</h2>';
$thead = '<tr><th>Datum</th><th>Regatta</th><th>Informationen</th><th>RLF</th><th>Segler</th></tr>'; $content .= '<div id="div-yournext" class="regattas-list mb-0"></div>';
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-yournext', 'css-class' => 'mb-0 mt-3']);
$content .= '<p id="p-yournext" class="mt-3">'; $content .= '<p id="p-yournext" class="mt-3">';
$content .= 'Du f&auml;hrst in den n&auml;chsten vier Wochen auf keine Regatta!'; $content .= 'Du f&auml;hrst in den n&auml;chsten vier Wochen auf keine Regatta!';
$content .= '</p>'; $content .= '</p>';
@@ -41,8 +40,7 @@
// Next // Next
$content = '<h2>N&auml;chste Regatten</h2>'; $content = '<h2>N&auml;chste Regatten</h2>';
$thead = '<tr><th>Datum</th><th>Regatta</th><th>Informationen</th><th>RLF</th></tr>'; $content .= '<div id="div-next" class="regattas-list mb-0"></div>';
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-next', 'css-class' => 'mb-0 mt-3']);
$content .= '<p id="p-next" class="mt-3">'; $content .= '<p id="p-next" class="mt-3">';
$content .= 'Keine Regatten in den n&auml;chsten zwei Wochen!'; $content .= 'Keine Regatten in den n&auml;chsten zwei Wochen!';
$content .= '</p>'; $content .= '</p>';
@@ -51,8 +49,7 @@
// Last // Last
$content = '<h2>Letzte Regatten</h2>'; $content = '<h2>Letzte Regatten</h2>';
$thead = '<tr><th>Datum</th><th>Regatta</th><th>Ergebnisse</th><th>RLF</th></tr>'; $content .= '<div id="div-last" class="regattas-list mb-0"></div>';
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-last', 'css-class' => 'mb-0 mt-3']);
$content .= '<p id="p-last" class="mt-3">'; $content .= '<p id="p-last" class="mt-3">';
$content .= 'Keine Regatten in den letzten zwei Wochen!'; $content .= 'Keine Regatten in den letzten zwei Wochen!';
$content .= '</p>'; $content .= '</p>';
@@ -71,6 +68,18 @@
$sp['output'] .= $tpl->load('card', [$content]); $sp['output'] .= $tpl->load('card', [$content]);
$sp['scripts'] = $scripts->load('index'); // Regattas Menu
$items = '<p id="menu-item-yourplanning" class="mb-2 mt-1" style="line-height: 1.5em;"></p>';
$items .= $tpl->load('menu/item-icon', ['Saison-Planungen', '', 'html-id' => 'menu-item-plannings', 'icon' => 'fa-calendar-alt']);
$items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']);
$items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']);
$items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']);
$items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']);
$items .= $tpl->load('menu/item-icon', ['offizielle Ergebnisse', '', 'html-id' => 'menu-item-oresults', 'icon' => 'fa-poll']);
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']);
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]);
$sp['scripts'] .= $scripts->load('onRegattaClicked');
$sp['scripts'] .= $scripts->load('index');
?> ?>

View File

@@ -1,6 +1,6 @@
<?php <?php
$sp['title'] = 'Regatten - Regatten.net Pirat'; $sp['title'] = 'Regatten - Regatten.net ' . $_CLASS['name'];
$sp['backbutton'] = 'index'; $sp['backbutton'] = 'index';
$sp['activenav'] = 2; $sp['activenav'] = 2;
@@ -22,7 +22,9 @@
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-regattas']); $sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-regattas']);
// Menu // Menu
$items = $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']); $items = '<p id="menu-item-yourplanning" class="mb-2 mt-1" style="line-height: 1.5em;"></p>';
$items .= $tpl->load('menu/item-icon', ['Saison-Planungen', '', 'html-id' => 'menu-item-plannings', 'icon' => 'fa-calendar-alt']);
$items .= $tpl->load('menu/item-icon', ['Ergebnisse', '', 'html-id' => 'menu-item-results', 'icon' => 'fa-poll']);
$items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']); $items .= $tpl->load('menu/item-icon', ['Bericht', '', 'html-id' => 'menu-item-bericht', 'icon' => 'fa-book']);
$items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']); $items .= $tpl->load('menu/item-icon', ['Informationen', '', 'html-id' => 'menu-item-info', 'icon' => 'fa-info']);
$items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']); $items .= $tpl->load('menu/item-icon-badge', ['Meldung', '', 'html-id' => 'menu-item-meldung', 'icon' => 'fa-file-signature', 'badge-id' => 'badge-regatta-meldung']);
@@ -30,6 +32,7 @@
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']); $items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']);
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]); $sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-regatta', 'title' => 'Regatta-Details', 'height' => 320]);
$sp['scripts'] .= $scripts->load('onRegattaClicked');
$sp['scripts'] .= $scripts->load('regattas'); $sp['scripts'] .= $scripts->load('regattas');
?> ?>

View File

@@ -0,0 +1,42 @@
<?php
$sp['title'] = 'Segler - Regatten.net ' . $_CLASS['name'];
$sp['backbutton'] = 'index';
$sp['activenav'] = 4;
// Title
$content = "<h1>Segler</h1>";
$sp['output'] .= $tpl->load('card', [$content]);
// Info Years
$content = '<h2>Jahrg&auml;nge</h2>';
$content .= '<p>';
$content .= 'Zu vielen Seglern fehlen uns leider noch die Jahrg&auml;nge. Diese ben&ouml;tigen wir jedoch, um die Ranglisten vern&uuml;nftig zu erstellen.<br>';
$content .= 'Solltest Du jemanden kennen, dessen Jahrgang hier in der Liste noch nicht hinterlegt ist oder der wom&ouml;glich falsch ist, <b>hilf uns bitte</b>, indem Du diesen eintr&auml;gst!<br>';
$content .= 'Klicke dazu einfach auf den entsprechenden Segler und w&auml;hle Jahrgang bearbeiten aus.<br>';
$content .= 'Vielen Dank f&uuml;r Deine Unterst&uuml;tzung!';
$content .= '</p>';
$sp['output'] .= $tpl->load('card', [$content]);
// List
$content = '<p id="p-count" class="mb-0"></p>';
$content .= $tpl->load('input', ['html-id' => 'input-search', 'placeholder' => 'Suche', 'type' => 'text', 'css-class' => 'mt-2']);
$content .= '<div id="div-list" class="normal-list mb-0"></div>';
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-list']);
// Pagination
$sp['output'] .= $tpl->load('pagination', ['html-id' => 'pagination']);
// Menu
// TODO: add entries for jump2rank jump2club
$items = $tpl->load('menu/item-icon', ['', '#', 'html-id' => 'menu-item-year', 'icon' => 'fa-edit']);
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe']);
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-sailor', 'title' => 'Segler-Details', 'height' => 320]);
$sp['scripts'] .= $scripts->load('pagination', ['pageChange', 'page', 'pageCount', 'pagination']);
$sp['scripts'] .= $scripts->load('sailors');
?>

View File

@@ -1,6 +1,6 @@
<!-- Install Prompt for Android --> <!-- Install Prompt for Android -->
<div id="menu-install-pwa-android" class="menu menu-box-bottom menu-box-detached rounded-l" <div id="menu-install-pwa-android" class="menu menu-box-bottom menu-box-detached rounded-l"
data-menu-height="350" data-menu-height="400"
data-menu-effect="menu-parallax"> data-menu-effect="menu-parallax">
<div class="boxed-text-l mt-4"> <div class="boxed-text-l mt-4">
<img class="rounded-l mb-3" src="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-128x128.png" alt="img" width="90"> <img class="rounded-l mb-3" src="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-128x128.png" alt="img" width="90">
@@ -17,7 +17,7 @@
<!-- Install instructions for iOS --> <!-- Install instructions for iOS -->
<div id="menu-install-pwa-ios" <div id="menu-install-pwa-ios"
class="menu menu-box-bottom menu-box-detached rounded-l" class="menu menu-box-bottom menu-box-detached rounded-l"
data-menu-height="320" data-menu-height="360"
data-menu-effect="menu-parallax"> data-menu-effect="menu-parallax">
<div class="boxed-text-xl mt-4"> <div class="boxed-text-xl mt-4">
<img class="rounded-l mb-3" src="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-128x128.png" alt="img" width="90"> <img class="rounded-l mb-3" src="<?php echo SERVER_ADDR; ?>/client/app/icons/icon-128x128.png" alt="img" width="90">
@@ -26,7 +26,6 @@
Installiere Regatten.net auf Deinem Startbildschirm und greife wie bei einer normalen App darauf zu. &Ouml;ffne Dein Safari-Men&uuml; und tippe auf &quot;Zum Startbildschirm hinzuf&uuml;gen&quot;. Installiere Regatten.net auf Deinem Startbildschirm und greife wie bei einer normalen App darauf zu. &Ouml;ffne Dein Safari-Men&uuml; und tippe auf &quot;Zum Startbildschirm hinzuf&uuml;gen&quot;.
</p> </p>
<div class="clear"></div> <div class="clear"></div>
<a href="#" class="pwa-dismiss close-menu color-highlight uppercase ultrabold opacity-80 top-25">Vielleicht sp&auml;ter</a> <a href="#" class="pwa-dismiss close-menu color-highlight text-uppercase font-900 opacity-60 font-10">Vielleicht sp&auml;ter</a>
<i class="fa-ios-arrow fa fa-caret-down font-40"></i>
</div> </div>
</div> </div>

149
server/scripts/boats.js Normal file
View File

@@ -0,0 +1,149 @@
var firstCall = true;
var rows = [];
var displayed = [];
var page = 1;
var pageCount = 0;
const showCount = 25;
async function onListClicked(id) {
var boat = await dbGetData('boats', id);
$('#menu-boat').find('.menu-title').find('p').text(boat.sailnumber);
// Edit Boatname
// TODO: create menu for edit boatname
if (boat['name'] == '') {
$('#menu-item-boatname').find('span').text('Bootsnamen hinzufügen');
} else {
$('#menu-item-boatname').find('span').text('Bootsnamen bearbeiten');
}
// club website
var clubwebsite = '';
if (boat['club'] != null) {
clubwebsite = (await dbGetData('clubs', boat['club'])).website;
}
if (clubwebsite != '') {
$('#menu-item-clubwebsite').show();
$('#menu-item-clubwebsite').attr('href', clubwebsite);
$('#menu-item-clubwebsite').attr('target', '_blank');
} else {
$('#menu-item-clubwebsite').hide();
}
$('#menu-boat').showMenu();
$('#menu-boat').scrollTop(0);
}
function pageChange() {
$('#p-count')[0].scrollIntoView({ behavior: "smooth" });
drawList();
}
async function drawList() {
window.setTimeout(function () {
var list = '';
if (displayed.length > 0) {
var offset = (page - 1) * showCount;
var count = (page == pageCount ? (displayed.length % showCount) : showCount);
if (count == 0) count = showCount;
for (i = 0; i < count; i ++) {
list += displayed[i + offset];
}
} else {
list = '<div><div>Keine Ergebnisse, die der Suche entsprechen</div></div>';
}
$('#div-list').html(list);
}, 0);
}
async function reSearch() {
window.setTimeout(function () {
displayed = [];
rows.forEach(function (entry) {
if (search($('#input-search').val(), entry.keywords)) {
displayed.push(entry.content);
}
});
pageCount = Math.ceil(displayed.length / showCount);
if ((page < 1) || (page > pageCount)) {
if (page < 1) {
page = 1;
} else {
page = pageCount;
}
}
drawPagination();
drawList();
}, 0);
}
var siteScript = async function() {
if (firstCall) {
firstCall = false;
initPagination();
$('#input-search').on('input', reSearch);
}
var results = await dbGetData('boats');
var count = results.length;
if (count > 0) {
if (count == 1) {
$('#p-count').html('Es wurde 1 Boot gefunden!');
} else {
$('#p-count').html('Es wurden ' + count + ' Boote gefunden!');
}
$('#div-list').show();
$('#input-search').parent().show();
results.sort(function (a, b) {
return a.sailnumber.localeCompare(b.sailnumber);
});
rows = [];
for (id in results) {
var entry = results[id];
var club = null;
if (entry['club'] != null)
club = await dbGetData('clubs', entry['club']);
var row = { keywords: [], content: '' };
row.keywords.push(entry['sailnumber']);
if (entry['name'] != '') row.keywords.push(entry['name']);
if (club != null) row.keywords.push(club['kurz'], club['name']);
row.content += '<div onclick="onListClicked(' + entry['id'] + ');">';
// ZEILE 1
// Sailnumber
row.content += '<div><b>' + entry['sailnumber'] + '</b></div>';
// ZEILE 2
row.content += '<div>';
// Name
row.content += '<div>' + entry['name'] + '</div>';
// Club
row.content += '<div>' + ((club != null) ? club['kurz'] : '') + '</div>';
row.content += '</div></div>';
rows.push(row);
}
reSearch();
} else {
$('#p-count').html('Keine Boote gefunden!');
$('#div-list').hide();
$('#input-search').parent().hide();
}
hideLoader();
}

136
server/scripts/clubs.js Normal file
View File

@@ -0,0 +1,136 @@
var firstCall = true;
var rows = [];
var displayed = [];
var page = 1;
var pageCount = 0;
const showCount = 25;
async function onListClicked(id) {
var club = await dbGetData('clubs', id);
$('#menu-club').find('.menu-title').find('p').text(club.name);
// club website
if (club.website != '') {
$('#menu-item-clubwebsite').show();
$('#menu-item-clubwebsite').attr('href', club.website);
$('#menu-item-clubwebsite').attr('target', '_blank');
} else {
$('#menu-item-clubwebsite').hide();
}
$('#menu-club').showMenu();
$('#menu-club').scrollTop(0);
}
function pageChange() {
$('#p-count')[0].scrollIntoView({ behavior: "smooth" });
drawList();
}
async function drawList() {
window.setTimeout(function () {
var list = '';
if (displayed.length > 0) {
var offset = (page - 1) * showCount;
var count = (page == pageCount ? (displayed.length % showCount) : showCount);
if (count == 0) count = showCount;
for (i = 0; i < count; i ++) {
list += displayed[i + offset];
}
} else {
list = '<div><div>Keine Ergebnisse, die der Suche entsprechen</div></div>';
}
$('#div-list').html(list);
}, 0);
}
async function reSearch() {
window.setTimeout(function () {
displayed = [];
rows.forEach(function (entry) {
if (search($('#input-search').val(), entry.keywords)) {
displayed.push(entry.content);
}
});
pageCount = Math.ceil(displayed.length / showCount);
if ((page < 1) || (page > pageCount)) {
if (page < 1) {
page = 1;
} else {
page = pageCount;
}
}
drawPagination();
drawList();
}, 0);
}
var siteScript = async function() {
if (firstCall) {
firstCall = false;
initPagination();
$('#input-search').on('input', reSearch);
}
var results = await dbGetData('clubs');
var count = results.length;
if (count > 0) {
if (count == 1) {
$('#p-count').html('Es wurde 1 Verein gefunden!');
} else {
$('#p-count').html('Es wurden ' + count + ' Vereine gefunden!');
}
$('#div-list').show();
$('#input-search').parent().show();
results.sort(function (a, b) {
var comp = a.kurz.localeCompare(b.kurz);
if (comp == 0)
comp = a.name.localeCompare(b.name);
return comp;
});
rows = [];
for (id in results) {
var entry = results[id];
var row = { keywords: [], content: '' };
row.keywords.push(entry['dsv'], entry['kurz'], entry['name']);
if (entry['website'] != '') row.keywords.push(entry['website']);
row.content += '<div onclick="onListClicked(' + entry['id'] + ');">';
// ZEILE 1
// Name
row.content += '<div><b>' + entry['name'] + '</b></div>';
// ZEILE 2
row.content += '<div>';
// DSV
row.content += '<div>' + entry['dsv'] + '</div>';
// Kurz
row.content += '<div>' + entry['kurz'] + '</div>';
row.content += '</div></div>';
rows.push(row);
}
reSearch();
} else {
$('#p-count').html('Keine Vereine gefunden!');
$('#div-list').hide();
$('#input-search').parent().hide();
}
hideLoader();
}

View File

@@ -1,9 +1,12 @@
var today;
var siteScript = async function() { var siteScript = async function() {
today = getToday();
if (isLoggedIn()) { if (isLoggedIn()) {
$('#card-notloggedin').hide(); $('#card-notloggedin').hide();
var user = await dbGetData('users', localStorage.getItem('auth_user')); var user = await dbGetData('users', localStorage.getItem('auth_user'));
var today = getToday();
// Favorites // Favorites
var watched = []; var watched = [];
@@ -59,100 +62,88 @@ var siteScript = async function() {
return 0; return 0;
}); });
if (plannings.length > 0) { if (plannings.length > 0) {
tbody = ''; list = '';
for (i in plannings) { for (i in plannings) {
var planning = plannings[i]; var planning = plannings[i];
var regatta = planning.regatta; var regatta = planning.regatta;
if (regatta['length'] < 1) continue;
var club = null; var club = null;
if (regatta['club'] != null) if (regatta['club'] != null)
club = await dbGetData('clubs', regatta['club']); club = await dbGetData('clubs', regatta['club']);
var dateFrom = regatta['dateFrom']; var dateFrom = regatta['dateFrom'];
var dateTo = regatta['dateTo']; var dateTo = regatta['dateTo'];
// TODO: get steuermann and crew
var steuermann = '<i>noch unklar</i>';
if (planning.steuermann !== null) {
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
}
var crew = [];
if (planning.crew !== '') {
crewIds = planning.crew.split(',');
for (j in crewIds) {
crew.push((await dbGetData('sailors', crewIds[j])).name);
}
}
// output // output
tbody += '<tr>';
tbody += '<td><span style="white-space:nowrap;">' + formatDate("j. M 'y", dateFrom) + '<br>' + formatDate("j. M 'y", dateTo) + '</span></td>'; list += '<div onclick="onRegattaClicked(' + regatta['id'] + ');">';
var content = ''; // ZEILE 1
if (club != null) { // Name
content = club['kurz']; list += '<div><b>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</b></div>';
if (club['website'] != '') {
content = '<a href="' + club['website'] + '" target="_blank">' + content + '</a>';
}
}
tbody += '<td>' + content + '<br>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</td>';
var buf = ''; // ZEILE 2
if (regatta['info'] != '') { list += '<div>';
buf += '<a target="_blank" href="' + regatta['info'] + '">Informationen</a>';
}
if ((regatta['meldung'] != '') && (dateTo >= today)) {
buf += '<br><a target="_blank" href="' + regatta['meldung'] + '">Meldung</a>';
if ((planning != null) && (planning['gemeldet'] == "1")) { // Number
buf += ' <i>(du hast gemeldet)</i>'; list += '<div>' + ((regatta['number'] != null) ? ('# ' + regatta['number']) : '') + '</div>';
} else if (regatta['meldungOffen'] == "0") {
buf += ' <i>(geschlossen)</i>'; // Club
} else if (regatta['meldungSchluss'] != null) { list += '<div>' + ((club != null) ? club['kurz'] : '') + '</div>';
early = false;
// Special
list += '<div>' + regatta['special'] + '</div>';
// Icons
var icons = [];
if (regatta['info'] != '')
icons.push('<i class="fas fa-info"></i>');
if ((regatta['meldung'] != '') && (dateTo >= today) && (regatta['meldungOffen'] == '1')) {
var color = '';
if (regatta['meldungSchluss'] != null) {
if (planning['gemeldet'] == '0') {
var ms = 0;
if (regatta['meldungEarly'] != null) { if (regatta['meldungEarly'] != null) {
ms = parseDate(regatta['meldungEarly']); ms = parseDate(regatta['meldungEarly']);
if (ms >= today) {
early = true;
} }
} if (ms < today) {
if (!early)
ms = parseDate(regatta['meldungSchluss']); ms = parseDate(regatta['meldungSchluss']);
if (ms >= today) {
diff = Math.round((ms - today) / 86400000);
red = (diff < 7);
if (diff <= 14) {
txt = 'noch ' + diff + ' Tag' + (diff != 1 ? 'e' : '');
} else if (diff < 35) {
diff = Math.floor(diff / 7);
txt = 'noch ' + diff + ' Woche' + (diff != 1 ? 'n' : '');
} else {
diff = Math.floor(diff / 30.5);
txt = 'noch ' + diff + ' Monat' + (diff != 1 ? 'e' : '');
} }
buf += ' <i>' + (red ? '<b><font style="color:red;">(' : '(') + txt + (early ? ' verg&uuml;nstigt' : '') + (red ? ')</font></b>' : ')') + '</i>'; var diff = Math.round((ms - today) / 86400000);
} else { if ((ms >= today) && (diff < 7)) {
buf += ' <i>(Meldeschluss abgelaufen)</i>'; color = ' color-red2-dark';
} }
} }
} }
if (regatta['bericht'] != '') { if (planning['gemeldet'] == '0') {
buf += '<br><a target="_blank" href="' + regatta['bericht'] + '">Bericht</a>'; color += ' fa-blink';
} }
if (regatta['oresults'] != '') { icons.push('<i class="fas fa-file-signature' + color + '"></i>');
buf += '<br><a target="_blank" href="' + regatta['oresults'] + '">off. Ergebnisse</a>';
} }
tbody += '<td>' + buf + '</td>'; if (regatta['canceled'] == '1') {
icons.push('<i class="fas fa-times color-red2-dark"></i>');
}
list += '<div class="color-green2-dark">' + icons.join('&ensp;') + '</div>';
tbody += '<td><span style="white-space:nowrap;">' + parseFloat(regatta['rlf']).toFixed(2) + '</span></td>'; list += '</div>';
tbody += '<td>' + steuermann + '<br>' + crew.join('<br>') + '</td>'; // ZEILE 3
list += '<div>';
tbody += '</tr>'; // Date
list += '<div>' + formatDate("d.m.Y", dateFrom) + ' - ' + formatDate("d.m.Y", dateTo) + '</div>';
// RLF
list += '<div>' + parseFloat(regatta['rlf']).toFixed(2) + '</div>';
list += '</div></div>';
} }
$('#table-yournext').find('tbody').html(tbody); $('#div-yournext').html(list);
$('#p-yournext').hide(); $('#p-yournext').hide();
$('#table_yournext').show(); $('#div-yournext').show();
} else { } else {
$('#table-yournext').hide(); $('#div-yournext').hide();
$('#p-yournext').show(); $('#p-yournext').show();
} }
$('#card-yournext').show(); $('#card-yournext').show();
@@ -169,9 +160,12 @@ var siteScript = async function() {
maxDate.setDate(maxDate.getDate() + 14); maxDate.setDate(maxDate.getDate() + 14);
var regattas = await dbGetRegattasRange(minDate, maxDate); var regattas = await dbGetRegattasRange(minDate, maxDate);
if (regattas.length > 0) { if (regattas.length > 0) {
tbody = ''; list = '';
for (i in regattas) { for (i in regattas) {
var regatta = regattas[i]; var regatta = regattas[i];
if (regatta['length'] < 1) continue;
var club = null; var club = null;
if (regatta['club'] != null) if (regatta['club'] != null)
club = await dbGetData('clubs', regatta['club']); club = await dbGetData('clubs', regatta['club']);
@@ -180,27 +174,33 @@ var siteScript = async function() {
var dateTo = regatta['dateTo']; var dateTo = regatta['dateTo'];
// output // output
tbody += '<tr>'; list += '<div onclick="onRegattaClicked(' + regatta['id'] + ');">';
tbody += '<td><span style="white-space:nowrap;">' + formatDate("j. M 'y", dateFrom) + '<br>' + formatDate("j. M 'y", dateTo) + '</span></td>'; // ZEILE 1
// Name
list += '<div><b>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</b></div>';
var content = ''; // ZEILE 2
if (club != null) { list += '<div>';
content = club['kurz'];
if (club['website'] != '') {
content = '<a href="' + club['website'] + '" target="_blank">' + content + '</a>';
}
}
tbody += '<td>' + content + '<br>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</td>';
var buf = ''; // Number
if (regatta['info'] != '') { list += '<div>' + ((regatta['number'] != null) ? ('# ' + regatta['number']) : '') + '</div>';
buf += '<a target="_blank" href="' + regatta['info'] + '">Informationen</a>';
} // Club
if ((regatta['meldung'] != '') && (dateTo >= today)) { list += '<div>' + ((club != null) ? club['kurz'] : '') + '</div>';
buf += '<br><a target="_blank" href="' + regatta['meldung'] + '">Meldung</a>';
// Special
list += '<div>' + regatta['special'] + '</div>';
// Icons
var icons = [];
if (regatta['info'] != '')
icons.push('<i class="fas fa-info"></i>');
if ((regatta['meldung'] != '') && (dateTo >= today) && (regatta['meldungOffen'] == '1')) {
var color = '';
var planning = null; var planning = null;
if (isLoggedIn()) { if (isLoggedIn()) {
var plannings = await dbGetDataIndex('plannings', 'regatta', regatta['id']);
for (id in plannings) { for (id in plannings) {
if (plannings[id]['user'] == USER_ID) { if (plannings[id]['user'] == USER_ID) {
planning = plannings[id]; planning = plannings[id];
@@ -208,56 +208,49 @@ var siteScript = async function() {
} }
} }
} }
if (regatta['meldungSchluss'] != null) {
if ((planning != null) && (planning['gemeldet'] == "1")) { if ((planning == null) || (planning['gemeldet'] == '0')) {
buf += ' <i>(du hast gemeldet)</i>'; var ms = 0;
} else if (regatta['meldungOffen'] == "0") {
buf += ' <i>(geschlossen)</i>';
} else if (regatta['meldungSchluss'] != null) {
early = false;
if (regatta['meldungEarly'] != null) { if (regatta['meldungEarly'] != null) {
ms = parseDate(regatta['meldungEarly']); ms = parseDate(regatta['meldungEarly']);
if (ms >= today) {
early = true;
} }
} if (ms < today) {
if (!early)
ms = parseDate(regatta['meldungSchluss']); ms = parseDate(regatta['meldungSchluss']);
if (ms >= today) {
diff = Math.round((ms - today) / 86400000);
red = (diff < 7);
if (diff <= 14) {
txt = 'noch ' + diff + ' Tag' + (diff != 1 ? 'e' : '');
} else if (diff < 35) {
diff = Math.floor(diff / 7);
txt = 'noch ' + diff + ' Woche' + (diff != 1 ? 'n' : '');
} else {
diff = Math.floor(diff / 30.5);
txt = 'noch ' + diff + ' Monat' + (diff != 1 ? 'e' : '');
} }
buf += ' <i>' + (red ? '<b><font style="color:red;">(' : '(') + txt + (early ? ' verg&uuml;nstigt' : '') + (red ? ')</font></b>' : ')') + '</i>'; var diff = Math.round((ms - today) / 86400000);
} else { if ((ms >= today) && (diff < 7)) {
buf += ' <i>(Meldeschluss abgelaufen)</i>'; color = ' color-red2-dark';
} }
} }
} }
if (regatta['bericht'] != '') { if ((planning != null) && (planning['gemeldet'] == '0')) {
buf += '<br><a target="_blank" href="' + regatta['bericht'] + '">Bericht</a>'; color += ' fa-blink';
} }
if (regatta['oresults'] != '') { icons.push('<i class="fas fa-file-signature' + color + '"></i>');
buf += '<br><a target="_blank" href="' + regatta['oresults'] + '">off. Ergebnisse</a>';
} }
tbody += '<td>' + buf + '</td>'; if (regatta['canceled'] == '1') {
icons.push('<i class="fas fa-times color-red2-dark"></i>');
}
list += '<div class="color-green2-dark">' + icons.join('&ensp;') + '</div>';
tbody += '<td><span style="white-space:nowrap;">' + parseFloat(regatta['rlf']).toFixed(2) + '</span></td>'; list += '</div>';
tbody += '</tr>'; // ZEILE 3
list += '<div>';
// Date
list += '<div>' + formatDate("d.m.Y", dateFrom) + ' - ' + formatDate("d.m.Y", dateTo) + '</div>';
// RLF
list += '<div>' + parseFloat(regatta['rlf']).toFixed(2) + '</div>';
list += '</div></div>';
} }
$('#table-next').find('tbody').html(tbody); $('#div-next').html(list);
$('#p-next').hide(); $('#p-next').hide();
$('#table-next').show(); $('#div-next').show();
} else { } else {
$('#table-next').hide(); $('#div-next').hide();
$('#p-next').show(); $('#p-next').show();
} }
@@ -274,9 +267,12 @@ var siteScript = async function() {
regattaResults[entry['id']] = (results.length > 0); regattaResults[entry['id']] = (results.length > 0);
} }
if (regattas.length > 0) { if (regattas.length > 0) {
tbody = ''; list = '';
for (i in regattas) { for (i in regattas) {
var regatta = regattas[i]; var regatta = regattas[i];
if (regatta['length'] < 1) continue;
var club = null; var club = null;
if (regatta['club'] != null) if (regatta['club'] != null)
club = await dbGetData('clubs', regatta['club']); club = await dbGetData('clubs', regatta['club']);
@@ -284,40 +280,56 @@ var siteScript = async function() {
var dateTo = regatta['dateTo']; var dateTo = regatta['dateTo'];
// output // output
tbody += '<tr>';
tbody += '<td><span style="white-space:nowrap;">' + formatDate("j. M 'y", dateFrom) + '<br>' + formatDate("j. M 'y", dateTo) + '</span></td>'; list += '<div onclick="onRegattaClicked(' + regatta['id'] + ');">';
var content = ''; // ZEILE 1
if (club != null) { // Name
content = club['kurz']; list += '<div><b>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</b></div>';
if (club['website'] != '') {
content = '<a href="' + club['website'] + '" target="_blank">' + content + '</a>';
}
}
tbody += '<td>' + content + '<br>' + (regatta['canceled'] == 1 ? '<s>' : '') + regatta['name'] + (regatta['canceled'] == 1 ? '</s>' : '') + '</td>';
var buf = ''; // ZEILE 2
if (regatta['canceled'] == "1") { list += '<div>';
buf = '<i style="color:red;" class="fas fa-times"></i> Ausgefallen</td>';
} else {
if (regattaResults[regatta['id']]) {
buf = '<i style="color:green;" class="fas fa-check"></i> <a href="' + LINK_PRE + 'result?regatta=' + regatta['id'] + '">Ergebnisse</a></td>';
} else {
buf = 'Nicht verf&uuml;gbar';
}
}
tbody += '<td>' + buf + '</td>';
tbody += '<td><span style="white-space:nowrap;">' + parseFloat(regatta['rlf']).toFixed(2) + '</span></td>'; // Number
list += '<div>' + ((regatta['number'] != null) ? ('# ' + regatta['number']) : '') + '</div>';
tbody += '</tr>'; // Club
list += '<div>' + ((club != null) ? club['kurz'] : '') + '</div>';
// Special
list += '<div>' + regatta['special'] + '</div>';
// Icons
var icons = [];
if (regatta['info'] != '')
icons.push('<i class="fas fa-info"></i>');
if (regatta['bericht'] != '')
icons.push('<i class="fas fa-book"></i>');
if (regatta['canceled'] == '1') {
icons.push('<i class="fas fa-times color-red2-dark"></i>');
} else if (regattaResults[regatta['id']]) {
icons.push('<i class="fas fa-poll"></i>');
} }
$('#table-last').find('tbody').html(tbody); list += '<div class="color-green2-dark">' + icons.join('&ensp;') + '</div>';
list += '</div>';
// ZEILE 3
list += '<div>';
// Date
list += '<div>' + formatDate("d.m.Y", dateFrom) + ' - ' + formatDate("d.m.Y", dateTo) + '</div>';
// RLF
list += '<div>' + parseFloat(regatta['rlf']).toFixed(2) + '</div>';
list += '</div></div>';
}
$('#div-last').html(list);
$('#p-last').hide(); $('#p-last').hide();
$('#table-last').show(); $('#div-last').show();
} else { } else {
$('#table-last').hide(); $('#div-last').hide();
$('#p-last').show(); $('#p-last').show();
} }

View File

@@ -0,0 +1,157 @@
async function onRegattaClicked(id) {
var regatta = await dbGetData('regattas', id);
$('#menu-regatta').find('.menu-title').find('p').text(regatta.name);
var dateTo = parseDate(regatta['date']);
dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0));
var plannings = await dbGetDataIndex('plannings', 'regatta', regatta['id']);
var planning = null;
if (isLoggedIn()) {
for (id in plannings) {
if (plannings[id]['user'] == USER_ID) {
planning = plannings[id];
break;
}
}
}
// Your Planning
if (planning != null) {
$('#menu-item-yourplanning').show();
var steuermann = null;
if (planning.steuermann != null) {
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
}
var crew = [steuermann == null ? '[noch unklar]' : steuermann];
crewA = planning.crew.split(',');
for (i in crewA) {
var sailor = await dbGetData('sailors', crewA[i]);
if (sailor != null) {
crew.push(sailor.name);
}
}
$('#menu-item-yourplanning').html(crew.join('<br>'));
} else {
$('#menu-item-yourplanning').hide();
}
// Planning
if ((plannings.length > 0) && (dateTo >= today)) {
$('#menu-item-plannings').show();
$('#menu-item-plannings').attr('href', LINK_PRE + 'regatta_plan?regatta=' + regatta['id']);
} else {
$('#menu-item-plannings').hide();
}
// Results
var results = await dbGetDataIndex('results', 'regatta', regatta['id']);
if (results.length > 0) {
$('#menu-item-results').show();
$('#menu-item-results').attr('href', LINK_PRE + 'result?regatta=' + regatta['id']);
} else {
$('#menu-item-results').hide();
}
// Bericht
if (regatta['bericht'] != '') {
$('#menu-item-bericht').show();
$('#menu-item-bericht').attr('href', regatta['bericht']);
$('#menu-item-bericht').attr('target', '_blank');
} else {
$('#menu-item-bericht').hide();
}
// Info
if (regatta['info'] != '') {
$('#menu-item-info').show();
$('#menu-item-info').attr('href', regatta['info']);
$('#menu-item-info').attr('target', '_blank');
} else {
$('#menu-item-info').hide();
}
// Meldung
if ((regatta['meldung'] != '') && (dateTo >= today)) {
$('#menu-item-meldung').show();
$('#menu-item-meldung').attr('href', regatta['meldung']);
$('#menu-item-meldung').attr('target', '_blank');
if ((planning != null) && (planning['gemeldet'] == '1')) {
$('#badge-regatta-meldung').text('schon gemeldet');
$('#badge-regatta-meldung').addClass('bg-green2-dark').removeClass('bg-highlight bg-red2-dark bg-yellow2-dark');
} else if (regatta['meldungOffen'] == '0') {
$('#badge-regatta-meldung').text('geschlossen');
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
} else if (regatta['meldungSchluss'] != null) {
var early = false;
var ms;
if (regatta['meldungEarly'] != null) {
ms = parseDate(regatta['meldungEarly']);
if (ms >= today) {
early = true;
}
}
if (!early)
ms = parseDate(regatta['meldungSchluss']);
if (ms >= today) {
var diff = Math.round((ms - today) / 86400000);
var red = (diff < 7);
var txt;
if (diff <= 14) {
txt = diff + ' Tag' + (diff != 1 ? 'e' : '');
} else if (diff < 35) {
diff = Math.floor(diff / 7);
txt = diff + ' Woche' + (diff != 1 ? 'n' : '');
} else {
diff = Math.floor(diff / 30.5);
txt = diff + ' Monat' + (diff != 1 ? 'e' : '');
}
if (early)
txt += ' vergünstigt';
$('#badge-regatta-meldung').text(txt);
if (red) {
if (early) {
$('#badge-regatta-meldung').addClass('bg-yellow2-dark').removeClass('bg-highlight bg-green2-dark bg-red2-dark');
} else {
$('#badge-regatta-meldung').addClass('bg-red2-dark').removeClass('bg-highlight bg-green2-dark bg-yellow2-dark');
}
} else {
$('#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').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
}
} else {
$('#badge-regatta-meldung').text('');
}
} else {
$('#menu-item-meldung').hide();
}
// off. results
if (regatta['oresults'] != '') {
$('#menu-item-oresults').show();
$('#menu-item-oresults').attr('href', regatta['oresults']);
$('#menu-item-oresults').attr('target', '_blank');
} else {
$('#menu-item-oresults').hide();
}
// club website
var clubwebsite = '';
if (regatta['club'] != null) {
clubwebsite = (await dbGetData('clubs', regatta['club'])).website;
}
if (clubwebsite != '') {
$('#menu-item-clubwebsite').show();
$('#menu-item-clubwebsite').attr('href', clubwebsite);
$('#menu-item-clubwebsite').attr('target', '_blank');
} else {
$('#menu-item-clubwebsite').hide();
}
$('#menu-regatta').showMenu();
$('#menu-regatta').scrollTop(0);
}

View File

@@ -0,0 +1,75 @@
// $$0; - site script for redraw content
// $$1; - current page
// $$2; - count of pages
// $$3; - pagination id
var paginationButtons = [];
function paginationSetActive() {
for (i = 1; i <= 7; i ++) {
if ($$1; == $('#$$3;-' + i).text()) {
$('#$$3;-' + i).addClass('active');
} else {
$('#$$3;-' + i).removeClass('active');
}
}
}
function drawPagination() {
if ($$2; > 1) {
$('#$$3;').show();
paginationButtons[6].text($$2;);
if ($$2; <= 7) {
for (i = 2; i <= $$2; - 1; i ++) {
paginationButtons[i-1].text(i);
$('#$$3;-' + i).show();
}
for (i = $$2;; i < 7; i ++) {
$('#$$3;-' + i).hide();
}
} else if ($$1; <= 4) {
for (i = 2; i <= 5; i ++) {
paginationButtons[i-1].text(i);
$('#$$3;-' + i).show();
}
paginationButtons[5].text('...');
$('#$$3;-6').show();
} else if ($$1; > $$2; - 4) {
paginationButtons[1].text('...');
$('#$$3;-2').show();
for (i = 3; i <= 6; i ++) {
paginationButtons[i-1].text($$2; + i - 7);
$('#$$3;-' + i).show();
}
} else {
paginationButtons[1].text('...');
$('#$$3;-2').show();
for (i = 3; i <= 5; i ++) {
paginationButtons[i-1].text($$1; + i - 4);
$('#$$3;-' + i).show();
}
paginationButtons[5].text('...');
$('#$$3;-6').show();
}
paginationSetActive();
} else {
$('#$$3;').hide();
}
}
function onPaginationClick(paginationButton) {
var newPage = parseInt($(paginationButton).text());
if (!isNaN(newPage)) {
$$1; = newPage;
drawPagination();
$$0;();
}
}
function initPagination() {
paginationButtons = [];
for (i = 1; i <= 7; i ++) {
paginationButtons.push($('#$$3;-' + i).find('a'));
}
drawPagination();
}

View File

@@ -31,7 +31,7 @@ var firstCall = true;
var rows = []; var rows = [];
var today; var today;
async function drawTable () { async function drawList () {
window.setTimeout(function () { window.setTimeout(function () {
var list = ''; var list = '';
rows.forEach(function (entry) { rows.forEach(function (entry) {
@@ -45,141 +45,13 @@ async function drawTable () {
}, 0); }, 0);
} }
async function regattaClicked(id) {
var regatta = await dbGetData('regattas', id);
$('#menu-regatta').find('.menu-title').find('p').text(regatta.name);
// Results
var results = await dbGetDataIndex('results', 'regatta', regatta['id']);
if (results.length > 0) {
$('#menu-item-results').show();
$('#menu-item-results').attr('href', LINK_PRE + 'result/' + regatta['id']);
} else {
$('#menu-item-results').hide();
}
// Bericht
if (regatta['bericht'] != '') {
$('#menu-item-bericht').show();
$('#menu-item-bericht').attr('href', regatta['bericht']);
$('#menu-item-bericht').attr('target', '_blank');
} else {
$('#menu-item-bericht').hide();
}
// Info
if (regatta['info'] != '') {
$('#menu-item-info').show();
$('#menu-item-info').attr('href', regatta['info']);
$('#menu-item-info').attr('target', '_blank');
} else {
$('#menu-item-info').hide();
}
// Meldung
var dateTo = parseDate(regatta['date']);
dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0));
if ((regatta['meldung'] != '') && (dateTo >= today)) {
$('#menu-item-meldung').show();
$('#menu-item-meldung').attr('href', regatta['meldung']);
$('#menu-item-meldung').attr('target', '_blank');
var planning = null;
if (isLoggedIn()) {
var plannings = await dbGetDataIndex('plannings', 'regatta', regatta['id']);
for (id in plannings) {
if (plannings[id]['user'] == USER_ID) {
planning = plannings[id];
break;
}
}
}
if ((planning != null) && (planning['gemeldet'] == '1')) {
$('#badge-regatta-meldung').text('schon gemeldet');
$('#badge-regatta-meldung').addClass('bg-green2-dark').removeClass('bg-highlight bg-red2-dark bg-yellow2-dark');
} else if (regatta['meldungOffen'] == '0') {
$('#badge-regatta-meldung').text('geschlossen');
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
} else if (regatta['meldungSchluss'] != null) {
var early = false;
var ms;
if (regatta['meldungEarly'] != null) {
ms = parseDate(regatta['meldungEarly']);
if (ms >= today) {
early = true;
}
}
if (!early)
ms = parseDate(regatta['meldungSchluss']);
if (ms >= today) {
var diff = Math.round((ms - today) / 86400000);
var red = (diff < 7);
var txt;
if (diff <= 14) {
txt = diff + ' Tag' + (diff != 1 ? 'e' : '');
} else if (diff < 35) {
diff = Math.floor(diff / 7);
txt = diff + ' Woche' + (diff != 1 ? 'n' : '');
} else {
diff = Math.floor(diff / 30.5);
txt = diff + ' Monat' + (diff != 1 ? 'e' : '');
}
if (early)
txt += ' vergünstigt';
$('#badge-regatta-meldung').text(txt);
if (red) {
if (early) {
$('#badge-regatta-meldung').addClass('bg-yellow2-dark').removeClass('bg-highlight bg-green2-dark bg-red2-dark');
} else {
$('#badge-regatta-meldung').addClass('bg-red2-dark').removeClass('bg-highlight bg-green2-dark bg-yellow2-dark');
}
} else {
$('#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').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
}
} else {
$('#badge-regatta-meldung').text('');
}
} else {
$('#menu-item-meldung').hide();
}
// off. results
if (regatta['oresults'] != '') {
$('#menu-item-oresults').show();
$('#menu-item-oresults').attr('href', regatta['oresults']);
$('#menu-item-oresults').attr('target', '_blank');
} else {
$('#menu-item-oresults').hide();
}
// club website
var clubwebsite = '';
if (regatta['club'] != null) {
clubwebsite = (await dbGetData('clubs', regatta['club'])).website;
}
if (clubwebsite != '') {
$('#menu-item-clubwebsite').show();
$('#menu-item-clubwebsite').attr('href', clubwebsite);
$('#menu-item-clubwebsite').attr('target', '_blank');
} else {
$('#menu-item-clubwebsite').hide();
}
$('#menu-regatta').showMenu();
$('#menu-regatta').scrollTop(0);
}
var siteScript = async function() { var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#button-show').click(siteScript); $('#button-show').click(siteScript);
$('#input-search').on('input', drawTable); $('#input-search').on('input', drawList);
} }
today = getToday(); today = getToday();
@@ -244,7 +116,7 @@ var siteScript = async function() {
heute = true; heute = true;
} }
row.content += '<div onclick="regattaClicked(' + entry['id'] + ');">'; row.content += '<div onclick="onRegattaClicked(' + entry['id'] + ');">';
// ZEILE 1 // ZEILE 1
// Name // Name
@@ -268,7 +140,6 @@ var siteScript = async function() {
icons.push('<i class="fas fa-info"></i>'); icons.push('<i class="fas fa-info"></i>');
if ((entry['meldung'] != '') && (dateTo >= today) && (entry['meldungOffen'] == '1')) { if ((entry['meldung'] != '') && (dateTo >= today) && (entry['meldungOffen'] == '1')) {
var color = ''; var color = '';
if (entry['meldungSchluss'] != null) {
var planning = null; var planning = null;
if (isLoggedIn()) { if (isLoggedIn()) {
var plannings = await dbGetDataIndex('plannings', 'regatta', entry['id']); var plannings = await dbGetDataIndex('plannings', 'regatta', entry['id']);
@@ -279,6 +150,7 @@ var siteScript = async function() {
} }
} }
} }
if (entry['meldungSchluss'] != null) {
if ((planning == null) || (planning['gemeldet'] == '0')) { if ((planning == null) || (planning['gemeldet'] == '0')) {
var ms = 0; var ms = 0;
if (entry['meldungEarly'] != null) { if (entry['meldungEarly'] != null) {
@@ -290,12 +162,12 @@ var siteScript = async function() {
var diff = Math.round((ms - today) / 86400000); var diff = Math.round((ms - today) / 86400000);
if ((ms >= today) && (diff < 7)) { if ((ms >= today) && (diff < 7)) {
color = ' color-red2-dark'; color = ' color-red2-dark';
if (planning != null) { }
}
}
if ((planning != null) && (planning['gemeldet'] == '0')) {
color += ' fa-blink'; color += ' fa-blink';
} }
}
}
}
icons.push('<i class="fas fa-file-signature' + color + '"></i>'); icons.push('<i class="fas fa-file-signature' + color + '"></i>');
} }
if (entry['bericht'] != '') if (entry['bericht'] != '')
@@ -335,7 +207,7 @@ var siteScript = async function() {
rows.push(null); rows.push(null);
} }
drawTable(); drawList();
} else { } else {
$('#p-count').html('Keine Regatten gefunden!'); $('#p-count').html('Keine Regatten gefunden!');

149
server/scripts/sailors.js Normal file
View File

@@ -0,0 +1,149 @@
var firstCall = true;
var rows = [];
var displayed = [];
var page = 1;
var pageCount = 0;
const showCount = 25;
async function onListClicked(id) {
var sailor = await dbGetData('sailors', id);
$('#menu-sailor').find('.menu-title').find('p').text(sailor.name);
// Edit Year
// TODO: create menu for edit year
if (sailor['year'] == null) {
$('#menu-item-year').find('span').text('Jahrgang hinzufügen');
} else {
$('#menu-item-year').find('span').text('Jahrgang bearbeiten');
}
// club website
var clubwebsite = '';
if (sailor['club'] != null) {
clubwebsite = (await dbGetData('clubs', sailor['club'])).website;
}
if (clubwebsite != '') {
$('#menu-item-clubwebsite').show();
$('#menu-item-clubwebsite').attr('href', clubwebsite);
$('#menu-item-clubwebsite').attr('target', '_blank');
} else {
$('#menu-item-clubwebsite').hide();
}
$('#menu-sailor').showMenu();
$('#menu-sailor').scrollTop(0);
}
function pageChange() {
$('#p-count')[0].scrollIntoView({ behavior: "smooth" });
drawList();
}
async function drawList() {
window.setTimeout(function () {
var list = '';
if (displayed.length > 0) {
var offset = (page - 1) * showCount;
var count = (page == pageCount ? (displayed.length % showCount) : showCount);
if (count == 0) count = showCount;
for (i = 0; i < count; i ++) {
list += displayed[i + offset];
}
} else {
list = '<div><div>Keine Ergebnisse, die der Suche entsprechen</div></div>';
}
$('#div-list').html(list);
}, 0);
}
async function reSearch() {
window.setTimeout(function () {
displayed = [];
rows.forEach(function (entry) {
if (search($('#input-search').val(), entry.keywords)) {
displayed.push(entry.content);
}
});
pageCount = Math.ceil(displayed.length / showCount);
if ((page < 1) || (page > pageCount)) {
if (page < 1) {
page = 1;
} else {
page = pageCount;
}
}
drawPagination();
drawList();
}, 0);
}
var siteScript = async function() {
if (firstCall) {
firstCall = false;
initPagination();
$('#input-search').on('input', reSearch);
}
var results = await dbGetData('sailors');
var count = results.length;
if (count > 0) {
if (count == 1) {
$('#p-count').html('Es wurde 1 Segler gefunden!');
} else {
$('#p-count').html('Es wurden ' + count + ' Segler gefunden!');
}
$('#div-list').show();
$('#input-search').parent().show();
results.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
rows = [];
for (id in results) {
var entry = results[id];
var club = null;
if (entry['club'] != null)
club = await dbGetData('clubs', entry['club']);
var row = { keywords: [], content: '' };
row.keywords.push(entry['name']);
if (entry['year'] != null) row.keywords.push(entry['year']);
if (club != null) row.keywords.push(club['kurz'], club['name']);
row.content += '<div onclick="onListClicked(' + entry['id'] + ');">';
// ZEILE 1
// Name
row.content += '<div><b>' + entry['name'] + '</b></div>';
// ZEILE 2
row.content += '<div>';
// Year
row.content += '<div>' + ((entry['year'] != null) ? (entry['year']) : '') + '</div>';
// Club
row.content += '<div>' + ((club != null) ? club['kurz'] : '') + '</div>';
row.content += '</div></div>';
rows.push(row);
}
reSearch();
} else {
$('#p-count').html('Keine Segler gefunden!');
$('#div-list').hide();
$('#input-search').parent().hide();
}
hideLoader();
}

View File

@@ -0,0 +1,11 @@
<nav id="$$html-id;">
<ul class="pagination justify-content-center">
<li id="$$html-id;-1" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">1</a></li>
<li id="$$html-id;-2" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">2</a></li>
<li id="$$html-id;-3" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">3</a></li>
<li id="$$html-id;-4" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">4</a></li>
<li id="$$html-id;-5" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">5</a></li>
<li id="$$html-id;-6" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">6</a></li>
<li id="$$html-id;-7" class="page-item"><a onclick="onPaginationClick(this)" class="page-link color-black bg-theme rounded-xs shadow-x1 border-0" style="cursor: pointer;">7</a></li>
</ul>
</nav>

5
server/version.php Normal file
View File

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

View File

@@ -42,7 +42,7 @@ workbox.precaching.precacheAndRoute([
} }
$hash = md5(getDirHash(__DIR__)); $hash = md5(getDirHash(__DIR__));
$path = __DIR__ . '/content/'; $path = __DIR__ . '/server/content/';
$dir = opendir($path); $dir = opendir($path);
while ($file = readdir($dir)) { while ($file = readdir($dir)) {
if (($file == '.') or ($file == '..') or (pathinfo($file, PATHINFO_EXTENSION) != 'php')) continue; if (($file == '.') or ($file == '..') or (pathinfo($file, PATHINFO_EXTENSION) != 'php')) continue;