übertrag zum PC
This commit is contained in:
parent
ad1064ffd3
commit
ac32aa83dd
118
log/error.log
118
log/error.log
@ -34,3 +34,121 @@
|
||||
2018-09-28T23:32:54+02:00 ERR (3):
|
||||
2018-09-28T23:32:59+02:00 ERR (3):
|
||||
2018-09-28T23:33:05+02:00 ERR (3):
|
||||
2018-09-29T09:35:28+02:00 ERR (3):
|
||||
2018-09-29T09:42:41+02:00 ERR (3):
|
||||
2018-09-29T09:45:41+02:00 ERR (3):
|
||||
2018-09-29T09:45:46+02:00 ERR (3):
|
||||
2018-09-29T09:46:15+02:00 ERR (3):
|
||||
2018-09-29T09:46:27+02:00 ERR (3):
|
||||
2018-09-29T09:46:31+02:00 ERR (3):
|
||||
2018-09-29T09:46:59+02:00 ERR (3):
|
||||
2018-09-29T09:47:02+02:00 ERR (3):
|
||||
2018-09-29T09:51:15+02:00 ERR (3):
|
||||
2018-09-29T09:51:44+02:00 ERR (3):
|
||||
2018-09-29T10:11:47+02:00 ERR (3):
|
||||
2018-09-29T10:12:26+02:00 ERR (3):
|
||||
2018-09-29T10:12:52+02:00 ERR (3):
|
||||
2018-09-29T14:37:23+02:00 ERR (3):
|
||||
2018-09-29T15:00:40+02:00 ERR (3):
|
||||
2018-09-29T15:00:56+02:00 ERR (3):
|
||||
2018-09-29T15:01:13+02:00 ERR (3):
|
||||
2018-09-29T15:01:19+02:00 ERR (3):
|
||||
2018-09-29T15:01:25+02:00 ERR (3):
|
||||
2018-09-29T15:02:15+02:00 ERR (3):
|
||||
2018-09-29T17:15:23+02:00 ERR (3):
|
||||
2018-09-29T17:16:53+02:00 ERR (3):
|
||||
2018-09-29T17:24:09+02:00 ERR (3):
|
||||
2018-09-29T17:27:09+02:00 ERR (3):
|
||||
2018-09-29T17:30:58+02:00 ERR (3):
|
||||
2018-09-29T17:45:49+02:00 ERR (3):
|
||||
2018-09-29T17:48:13+02:00 ERR (3):
|
||||
2018-09-29T17:54:14+02:00 ERR (3):
|
||||
2018-09-29T17:56:12+02:00 ERR (3):
|
||||
2018-09-29T18:01:33+02:00 ERR (3):
|
||||
2018-09-29T18:06:05+02:00 ERR (3):
|
||||
2018-09-29T18:06:45+02:00 ERR (3):
|
||||
2018-09-29T18:09:20+02:00 ERR (3):
|
||||
2018-09-29T18:09:35+02:00 ERR (3):
|
||||
2018-09-29T18:11:43+02:00 ERR (3):
|
||||
2018-09-29T18:12:05+02:00 ERR (3):
|
||||
2018-09-29T18:12:46+02:00 ERR (3):
|
||||
2018-09-29T18:16:54+02:00 ERR (3):
|
||||
2018-09-29T18:18:28+02:00 ERR (3):
|
||||
2018-09-29T18:22:58+02:00 ERR (3):
|
||||
2018-09-29T18:25:34+02:00 ERR (3):
|
||||
2018-09-29T18:30:32+02:00 ERR (3):
|
||||
2018-09-29T18:34:35+02:00 ERR (3):
|
||||
2018-09-29T18:38:16+02:00 ERR (3):
|
||||
2018-09-29T18:40:06+02:00 ERR (3):
|
||||
2018-09-29T18:41:13+02:00 ERR (3):
|
||||
2018-09-29T18:42:51+02:00 ERR (3):
|
||||
2018-09-29T18:43:03+02:00 ERR (3):
|
||||
2018-09-29T18:45:17+02:00 ERR (3):
|
||||
2018-09-29T18:47:00+02:00 ERR (3):
|
||||
2018-09-29T18:49:12+02:00 ERR (3):
|
||||
2018-09-29T18:56:59+02:00 ERR (3):
|
||||
2018-09-29T18:58:07+02:00 ERR (3):
|
||||
2018-09-29T23:36:05+02:00 ERR (3):
|
||||
2018-09-29T23:36:50+02:00 ERR (3):
|
||||
2018-09-29T23:38:34+02:00 ERR (3):
|
||||
2018-09-29T23:45:18+02:00 ERR (3):
|
||||
2018-09-29T23:48:11+02:00 ERR (3):
|
||||
2018-09-29T23:49:48+02:00 ERR (3):
|
||||
2018-09-29T23:59:24+02:00 ERR (3):
|
||||
2018-09-30T00:01:00+02:00 ERR (3):
|
||||
2018-09-30T00:05:26+02:00 ERR (3):
|
||||
2018-09-30T00:07:11+02:00 ERR (3):
|
||||
2018-09-30T00:16:33+02:00 ERR (3):
|
||||
2018-09-30T00:17:50+02:00 ERR (3):
|
||||
2018-09-30T00:18:46+02:00 ERR (3):
|
||||
2018-09-30T00:20:06+02:00 ERR (3):
|
||||
2018-09-30T00:21:43+02:00 ERR (3):
|
||||
2018-09-30T00:24:30+02:00 ERR (3):
|
||||
2018-09-30T00:26:22+02:00 ERR (3):
|
||||
2018-09-30T00:26:38+02:00 ERR (3):
|
||||
2018-09-30T00:29:17+02:00 ERR (3):
|
||||
2018-09-30T00:31:20+02:00 ERR (3):
|
||||
2018-09-30T00:31:54+02:00 ERR (3):
|
||||
2018-09-30T00:36:31+02:00 ERR (3):
|
||||
2018-09-30T00:36:55+02:00 ERR (3):
|
||||
2018-09-30T00:37:57+02:00 ERR (3):
|
||||
2018-09-30T00:38:44+02:00 ERR (3):
|
||||
2018-09-30T00:39:31+02:00 ERR (3):
|
||||
2018-09-30T00:40:21+02:00 ERR (3):
|
||||
2018-09-30T00:42:53+02:00 ERR (3):
|
||||
2018-09-30T00:43:12+02:00 ERR (3):
|
||||
2018-09-30T00:43:31+02:00 ERR (3):
|
||||
2018-09-30T00:44:39+02:00 ERR (3):
|
||||
2018-09-30T00:45:10+02:00 ERR (3):
|
||||
2018-09-30T00:46:20+02:00 ERR (3):
|
||||
2018-09-30T00:48:22+02:00 ERR (3):
|
||||
2018-09-30T00:50:45+02:00 ERR (3):
|
||||
2018-09-30T00:51:44+02:00 ERR (3):
|
||||
2018-09-30T00:52:11+02:00 ERR (3):
|
||||
2018-09-30T00:53:07+02:00 ERR (3):
|
||||
2018-09-30T00:55:02+02:00 ERR (3):
|
||||
2018-09-30T00:56:40+02:00 ERR (3):
|
||||
2018-09-30T01:01:55+02:00 ERR (3):
|
||||
2018-09-30T01:06:06+02:00 ERR (3):
|
||||
2018-09-30T01:06:52+02:00 ERR (3):
|
||||
2018-09-30T01:07:44+02:00 ERR (3):
|
||||
2018-09-30T12:56:40+02:00 ERR (3):
|
||||
2018-09-30T13:18:27+02:00 ERR (3):
|
||||
2018-09-30T13:44:27+02:00 ERR (3):
|
||||
2018-09-30T13:44:53+02:00 ERR (3):
|
||||
2018-09-30T13:45:05+02:00 ERR (3):
|
||||
2018-09-30T13:49:21+02:00 ERR (3):
|
||||
2018-09-30T13:55:56+02:00 ERR (3):
|
||||
2018-09-30T13:59:45+02:00 ERR (3):
|
||||
2018-09-30T14:04:47+02:00 ERR (3):
|
||||
2018-09-30T14:05:07+02:00 ERR (3):
|
||||
2018-09-30T14:06:00+02:00 ERR (3):
|
||||
2018-09-30T14:07:50+02:00 ERR (3):
|
||||
2018-09-30T14:13:31+02:00 ERR (3):
|
||||
2018-09-30T14:16:40+02:00 ERR (3):
|
||||
2018-09-30T14:16:45+02:00 ERR (3):
|
||||
2018-09-30T14:17:42+02:00 ERR (3):
|
||||
2018-09-30T14:36:33+02:00 ERR (3):
|
||||
2018-09-30T14:37:37+02:00 ERR (3):
|
||||
2018-09-30T14:38:19+02:00 ERR (3):
|
||||
2018-09-30T14:39:33+02:00 ERR (3):
|
||||
|
||||
118
log/log.log
118
log/log.log
@ -34,3 +34,121 @@
|
||||
2018-09-28T23:32:54+02:00 ERR (3):
|
||||
2018-09-28T23:32:59+02:00 ERR (3):
|
||||
2018-09-28T23:33:05+02:00 ERR (3):
|
||||
2018-09-29T09:35:28+02:00 ERR (3):
|
||||
2018-09-29T09:42:41+02:00 ERR (3):
|
||||
2018-09-29T09:45:41+02:00 ERR (3):
|
||||
2018-09-29T09:45:46+02:00 ERR (3):
|
||||
2018-09-29T09:46:15+02:00 ERR (3):
|
||||
2018-09-29T09:46:27+02:00 ERR (3):
|
||||
2018-09-29T09:46:31+02:00 ERR (3):
|
||||
2018-09-29T09:46:59+02:00 ERR (3):
|
||||
2018-09-29T09:47:02+02:00 ERR (3):
|
||||
2018-09-29T09:51:15+02:00 ERR (3):
|
||||
2018-09-29T09:51:44+02:00 ERR (3):
|
||||
2018-09-29T10:11:47+02:00 ERR (3):
|
||||
2018-09-29T10:12:26+02:00 ERR (3):
|
||||
2018-09-29T10:12:52+02:00 ERR (3):
|
||||
2018-09-29T14:37:23+02:00 ERR (3):
|
||||
2018-09-29T15:00:40+02:00 ERR (3):
|
||||
2018-09-29T15:00:56+02:00 ERR (3):
|
||||
2018-09-29T15:01:13+02:00 ERR (3):
|
||||
2018-09-29T15:01:19+02:00 ERR (3):
|
||||
2018-09-29T15:01:25+02:00 ERR (3):
|
||||
2018-09-29T15:02:15+02:00 ERR (3):
|
||||
2018-09-29T17:15:23+02:00 ERR (3):
|
||||
2018-09-29T17:16:53+02:00 ERR (3):
|
||||
2018-09-29T17:24:09+02:00 ERR (3):
|
||||
2018-09-29T17:27:09+02:00 ERR (3):
|
||||
2018-09-29T17:30:58+02:00 ERR (3):
|
||||
2018-09-29T17:45:49+02:00 ERR (3):
|
||||
2018-09-29T17:48:13+02:00 ERR (3):
|
||||
2018-09-29T17:54:14+02:00 ERR (3):
|
||||
2018-09-29T17:56:12+02:00 ERR (3):
|
||||
2018-09-29T18:01:33+02:00 ERR (3):
|
||||
2018-09-29T18:06:05+02:00 ERR (3):
|
||||
2018-09-29T18:06:45+02:00 ERR (3):
|
||||
2018-09-29T18:09:20+02:00 ERR (3):
|
||||
2018-09-29T18:09:35+02:00 ERR (3):
|
||||
2018-09-29T18:11:43+02:00 ERR (3):
|
||||
2018-09-29T18:12:05+02:00 ERR (3):
|
||||
2018-09-29T18:12:46+02:00 ERR (3):
|
||||
2018-09-29T18:16:54+02:00 ERR (3):
|
||||
2018-09-29T18:18:28+02:00 ERR (3):
|
||||
2018-09-29T18:22:58+02:00 ERR (3):
|
||||
2018-09-29T18:25:34+02:00 ERR (3):
|
||||
2018-09-29T18:30:32+02:00 ERR (3):
|
||||
2018-09-29T18:34:35+02:00 ERR (3):
|
||||
2018-09-29T18:38:16+02:00 ERR (3):
|
||||
2018-09-29T18:40:06+02:00 ERR (3):
|
||||
2018-09-29T18:41:13+02:00 ERR (3):
|
||||
2018-09-29T18:42:51+02:00 ERR (3):
|
||||
2018-09-29T18:43:03+02:00 ERR (3):
|
||||
2018-09-29T18:45:17+02:00 ERR (3):
|
||||
2018-09-29T18:47:00+02:00 ERR (3):
|
||||
2018-09-29T18:49:12+02:00 ERR (3):
|
||||
2018-09-29T18:56:59+02:00 ERR (3):
|
||||
2018-09-29T18:58:07+02:00 ERR (3):
|
||||
2018-09-29T23:36:05+02:00 ERR (3):
|
||||
2018-09-29T23:36:50+02:00 ERR (3):
|
||||
2018-09-29T23:38:34+02:00 ERR (3):
|
||||
2018-09-29T23:45:18+02:00 ERR (3):
|
||||
2018-09-29T23:48:11+02:00 ERR (3):
|
||||
2018-09-29T23:49:48+02:00 ERR (3):
|
||||
2018-09-29T23:59:24+02:00 ERR (3):
|
||||
2018-09-30T00:01:00+02:00 ERR (3):
|
||||
2018-09-30T00:05:26+02:00 ERR (3):
|
||||
2018-09-30T00:07:11+02:00 ERR (3):
|
||||
2018-09-30T00:16:33+02:00 ERR (3):
|
||||
2018-09-30T00:17:50+02:00 ERR (3):
|
||||
2018-09-30T00:18:46+02:00 ERR (3):
|
||||
2018-09-30T00:20:06+02:00 ERR (3):
|
||||
2018-09-30T00:21:43+02:00 ERR (3):
|
||||
2018-09-30T00:24:30+02:00 ERR (3):
|
||||
2018-09-30T00:26:22+02:00 ERR (3):
|
||||
2018-09-30T00:26:38+02:00 ERR (3):
|
||||
2018-09-30T00:29:17+02:00 ERR (3):
|
||||
2018-09-30T00:31:20+02:00 ERR (3):
|
||||
2018-09-30T00:31:54+02:00 ERR (3):
|
||||
2018-09-30T00:36:31+02:00 ERR (3):
|
||||
2018-09-30T00:36:55+02:00 ERR (3):
|
||||
2018-09-30T00:37:57+02:00 ERR (3):
|
||||
2018-09-30T00:38:44+02:00 ERR (3):
|
||||
2018-09-30T00:39:31+02:00 ERR (3):
|
||||
2018-09-30T00:40:21+02:00 ERR (3):
|
||||
2018-09-30T00:42:53+02:00 ERR (3):
|
||||
2018-09-30T00:43:12+02:00 ERR (3):
|
||||
2018-09-30T00:43:31+02:00 ERR (3):
|
||||
2018-09-30T00:44:39+02:00 ERR (3):
|
||||
2018-09-30T00:45:10+02:00 ERR (3):
|
||||
2018-09-30T00:46:20+02:00 ERR (3):
|
||||
2018-09-30T00:48:22+02:00 ERR (3):
|
||||
2018-09-30T00:50:45+02:00 ERR (3):
|
||||
2018-09-30T00:51:44+02:00 ERR (3):
|
||||
2018-09-30T00:52:11+02:00 ERR (3):
|
||||
2018-09-30T00:53:07+02:00 ERR (3):
|
||||
2018-09-30T00:55:02+02:00 ERR (3):
|
||||
2018-09-30T00:56:40+02:00 ERR (3):
|
||||
2018-09-30T01:01:55+02:00 ERR (3):
|
||||
2018-09-30T01:06:06+02:00 ERR (3):
|
||||
2018-09-30T01:06:52+02:00 ERR (3):
|
||||
2018-09-30T01:07:44+02:00 ERR (3):
|
||||
2018-09-30T12:56:40+02:00 ERR (3):
|
||||
2018-09-30T13:18:27+02:00 ERR (3):
|
||||
2018-09-30T13:44:27+02:00 ERR (3):
|
||||
2018-09-30T13:44:53+02:00 ERR (3):
|
||||
2018-09-30T13:45:05+02:00 ERR (3):
|
||||
2018-09-30T13:49:21+02:00 ERR (3):
|
||||
2018-09-30T13:55:56+02:00 ERR (3):
|
||||
2018-09-30T13:59:45+02:00 ERR (3):
|
||||
2018-09-30T14:04:47+02:00 ERR (3):
|
||||
2018-09-30T14:05:07+02:00 ERR (3):
|
||||
2018-09-30T14:06:00+02:00 ERR (3):
|
||||
2018-09-30T14:07:50+02:00 ERR (3):
|
||||
2018-09-30T14:13:31+02:00 ERR (3):
|
||||
2018-09-30T14:16:40+02:00 ERR (3):
|
||||
2018-09-30T14:16:45+02:00 ERR (3):
|
||||
2018-09-30T14:17:42+02:00 ERR (3):
|
||||
2018-09-30T14:36:33+02:00 ERR (3):
|
||||
2018-09-30T14:37:37+02:00 ERR (3):
|
||||
2018-09-30T14:38:19+02:00 ERR (3):
|
||||
2018-09-30T14:39:33+02:00 ERR (3):
|
||||
|
||||
File diff suppressed because one or more lines are too long
1
public/html/application/credits.html
Normal file
1
public/html/application/credits.html
Normal file
@ -0,0 +1 @@
|
||||
<div></div>
|
||||
1
public/html/application/dialog/chooseTheme.html
Normal file
1
public/html/application/dialog/chooseTheme.html
Normal file
@ -0,0 +1 @@
|
||||
<div id=theme-choose-container><div id=choose-theme-template><div class=name></div></div></div>
|
||||
@ -1 +1 @@
|
||||
<div class="max-height fill-me"><div class="row max-width grow flex-center"><div class="columns small-centered small-12 smedium-9 medium-11 large-7"><div class=row><span class="columns small-6" data-translation=theme></span> <span class="columns small-6"><label id=theme-radio-template><input type=radio class=setting name=theme></label></span></div><button id=reset-levels class=button data-translation=reset-levels></button></div></div></div>
|
||||
<div class="max-height fill-me"><div class="row max-width grow flex-center"><div class="columns small-centered small-12 smedium-11 medium-9 large-7"><div class=row id=theme-chooser><span class="columns small-6" data-translation=theme></span> <span class="columns small-6 text-right"><div id=theme-name></div></span></div><div class=row><span class="columns small-6" data-translation=sound></span> <span class="columns small-6 text-right"><label class=switch><input type=checkbox class=setting id=play-sound name=play-sound value=1 data-default=1> <span class=slider></span></label></span></div><div class=row><span class="columns small-6" data-translation=music></span> <span class="columns small-6 text-right"><label class=switch><input type=checkbox class=setting id=play-music name=play-music value=1 data-default=1> <span class=slider></span></label></span></div><div class=row id=credits-button><span class="columns small-6" data-translation=credits></span> <span class="columns small-6 text-right" data-translation=">"></span></div><div class=row id=privacy-policy-button><span class="columns small-6" data-translation=privacy-policy></span> <span class="columns small-6 text-right" data-translation=">"></span></div><div class=row id=impressum-button><span class="columns small-6" data-translation=impressum></span> <span class="columns small-6 text-right" data-translation=">"></span></div><div class=row><span class="columns small-6" data-translation=track></span> <span class="columns small-6 text-right"><label class=switch><input type=checkbox class=setting id=track-switch name=matomoShouldTrack value=1 data-default=1 data-raw=1> <span class=slider></span></label></span></div><button id=reset-levels class=button data-translation=reset-levels></button></div></div></div>
|
||||
@ -1 +1 @@
|
||||
<div class="max-height overflow-hidden"><div id=segment-leaf-template class="segment segment-leaf"><div class=leaf-element></div></div><div id=segment-parent-template class="segment segment-parent"><div class=child-container></div></div><div id=segment-row-template class="segment segment-row"><div class=child-container></div></div><div id=segment-triangle-template class="segment segment-triangle"><div class=child-container></div></div><div id=tutorial-pointer></div><div class="max-height fill-me"><div class="text-right max-width"><button class="button show-while-playing" id=help-button data-translation=help></button></div><div class="height-20 no-transition tutorial-text center flex-center hidden"><div class="step-1 hidden" data-translation=tutorial-step-1></div><div class="step-2 hidden" data-translation=tutorial-step-2></div><div class="step-3 hidden" data-translation=tutorial-step-3></div><div class="step-4 hidden" data-translation=tutorial-step-4></div></div><div class="height-20 show-when-won center flex-center fill-me" style="min-height: 45px"><div class="grow max-width"><b data-translation=won id=won-text></b></div><div id=coin-container><div id=coin-template class=coin style="opacity: 0"><img src=img/coin.png></div></div></div><div class="flex-center level-container grow"><div id=level></div></div><div class="show-when-won flex-center height-20"><button class="button max-width" id=continue-button data-translation=continue></button></div></div><div class=tutorial-blanket></div></div>
|
||||
<div class="max-height overflow-hidden"><div id=segment-leaf-template class="segment segment-leaf"><div class=leaf-element></div></div><div id=segment-parent-template class="segment segment-parent"><div class=child-container></div></div><div id=segment-row-template class="segment segment-row"><div class=child-container></div></div><div id=segment-triangle-template class="segment segment-triangle"><div class=child-container></div></div><div id=tutorial-pointer></div><div class="max-height fill-me"><div class="text-right max-width"><button class="button show-while-playing" id=help-button><img src=img/help.png></button></div><div class="height-20 no-transition tutorial-text center flex-center hidden"><div class="step-1 hidden" data-translation=tutorial-step-1></div><div class="step-2 hidden" data-translation=tutorial-step-2></div><div class="step-3 hidden" data-translation=tutorial-step-3></div><div class="step-4 hidden" data-translation=tutorial-step-4></div></div><div class="height-20 show-when-won center flex-center fill-me" style="min-height: 45px"><div class="grow max-width"><b data-translation=won id=won-text></b></div><div id=coin-container><div id=coin-template class=coin style="opacity: 0"><img src=img/coin.png></div></div></div><div class="flex-center level-container grow"><div id=level></div></div><div class="show-when-won flex-center height-20"><button class="button max-width" id=continue-button data-translation=continue></button></div></div><div class=tutorial-blanket></div></div>
|
||||
1
public/html/application/privacyPolicy.html
Normal file
1
public/html/application/privacyPolicy.html
Normal file
@ -0,0 +1 @@
|
||||
<div></div>
|
||||
@ -1 +1 @@
|
||||
<div class="max-height fill-me"><ul class="menu vertical plain dropdown hidden" id=settings-fragment-list></ul><h2 data-translation=settings></h2><div id=settings-fragments></div></div>
|
||||
<div class="max-height fill-me overflow-y-scroll"><ul class="menu vertical plain dropdown hidden" id=settings-fragment-list></ul><h2 data-translation=settings></h2><div id=settings-fragments></div></div>
|
||||
BIN
public/img/help.png
Normal file
BIN
public/img/help.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 371 B |
@ -1,19 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/html" lang="de">
|
||||
<head>
|
||||
<!-- Global Site Tag (gtag.js) - Google Analytics -->
|
||||
<!--TODO Für Prod einkommentieren-->
|
||||
<!--<script async src="https://www.googletagmanager.com/gtag/js?id=UA-73144353-3"></script>-->
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
function gtag() {
|
||||
dataLayer.push(arguments)
|
||||
};
|
||||
gtag('js', new Date());
|
||||
|
||||
</script>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
|
||||
@ -33,7 +20,6 @@
|
||||
<!-- Le styles -->
|
||||
<link href="css/foundation.css" media="screen,print" rel="stylesheet" type="text/css">
|
||||
<link href="css/wordRotator.css" media="screen,print" rel="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class='blue'>
|
||||
|
||||
@ -98,11 +84,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<!--<a data-site-name='policy' class='deep-link' data-translation="policy-heading">Privacy Policy</a>-->
|
||||
<a data-site-name='privacyPolicy' class='deep-link' data-translation="policy-heading">Privacy Policy</a>
|
||||
<a href="https://apps.silas.link" target="_blank" rel = "noopener" data-translation="other-apps">Other Apps</a>
|
||||
</footer>
|
||||
<script>
|
||||
|
||||
var initPromise;
|
||||
try {
|
||||
function init() {
|
||||
|
||||
250
public/js/app.js
250
public/js/app.js
@ -3675,13 +3675,19 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
for (let i = 0; i < settings.length; i++) {
|
||||
let setting = settings[i];
|
||||
const name = setting.name;
|
||||
let value = settingsManager.getSetting(name);
|
||||
let value;
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
value = settingsManager.getSetting(name);
|
||||
} else {
|
||||
value = localStorage.getItem(name);
|
||||
}
|
||||
|
||||
let isCheckable = false;
|
||||
if (setting instanceof HTMLInputElement && (setting.type === 'checkbox' || setting.type === 'radio')) {
|
||||
isCheckable = true;
|
||||
}
|
||||
if (!settingsManager.hasSetting(name) && Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
if (((!setting["dataset"]["raw"] && !settingsManager.hasSetting(name)) || (setting["dataset"]["raw"] && value === null))
|
||||
&& Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
value = setting["dataset"]["default"];
|
||||
if (Helper.isNotNull(setting["dataset"]["defaultTranslateable"])) {
|
||||
|
||||
@ -3704,19 +3710,15 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
}
|
||||
|
||||
setting.addEventListener("change", function () {
|
||||
// console.log(setting);
|
||||
let value = this.value;
|
||||
if (isCheckable) {
|
||||
if (this.checked)
|
||||
{
|
||||
settingsManager.setSetting(name, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
settingsManager.setSetting(name, null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (isCheckable && !this.checked) {
|
||||
value = null;
|
||||
}
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
settingsManager.setSetting(name, value);
|
||||
} else {
|
||||
localStorage.setItem(name, value);
|
||||
}
|
||||
delete setting["dataset"]["translationValue"];
|
||||
delete setting["dataset"]["translation"];
|
||||
@ -4599,6 +4601,88 @@ InitPromise.addPromise(function(app){
|
||||
app.addDeepLink("newPassword", SetNewPasswordSite);
|
||||
});
|
||||
|
||||
class Matomo {
|
||||
|
||||
static init() {
|
||||
Matomo.isTrackingPromise = new Promise(async (resolve) => {
|
||||
let shouldTrack = localStorage.getItem(Matomo.LOCAL_STORAGE_KEY);
|
||||
console.log(shouldTrack,Helper.isNull(shouldTrack));
|
||||
if (Helper.isNull(shouldTrack)) {
|
||||
shouldTrack = await Matomo._askIsTracking();
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);
|
||||
}
|
||||
else {
|
||||
console.log(shouldTrack, (shouldTrack === "1"));
|
||||
shouldTrack = (shouldTrack === "1");
|
||||
Matomo.setTrack(shouldTrack);
|
||||
}
|
||||
resolve(shouldTrack);
|
||||
});
|
||||
Matomo.isTrackingPromise.then(() => {
|
||||
Matomo.push(['trackPageView']);
|
||||
Matomo.push(['enableLinkTracking']);
|
||||
Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php']);
|
||||
Matomo.push(['setSiteId', '1']);
|
||||
|
||||
let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];
|
||||
g.type = 'text/javascript';
|
||||
g.async = true;
|
||||
g.defer = true;
|
||||
g.src = Matomo.TRACK_SITE + '/piwik.js';
|
||||
s.appendChild(g);
|
||||
});
|
||||
}
|
||||
|
||||
static async _askIsTracking() {
|
||||
console.log(Matomo.TRACK_SITE + Matomo.BASE_PATH + "isTracked");
|
||||
Matomo.isTrackingPromise = Matomo.query("isTracked")
|
||||
.then(xml => {
|
||||
let textContent = xml.firstChild.textContent;
|
||||
// localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, textContent);
|
||||
return (textContent === "1")
|
||||
});
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async query(method) {
|
||||
return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {
|
||||
// "method":"POST",
|
||||
"mode": "cors",
|
||||
"credentials": "include",
|
||||
// "headers": {
|
||||
// 'Access-Control-Allow-Origin': '*',
|
||||
// 'Access-Control-Allow-Credentials': 'true',
|
||||
// },
|
||||
}).then(res => res.text()).then(text => (new window.DOMParser()).parseFromString(text, "text/xml"));
|
||||
}
|
||||
|
||||
static getTrackingPromise() {
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async setTrack(shouldTrack) {
|
||||
Matomo.isTrackingPromise = Promise.resolve(shouldTrack);
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? "1" : "0");
|
||||
return await Matomo.query((shouldTrack) ? "doTrack" : "doIgnore");
|
||||
}
|
||||
|
||||
static async push(arr) {
|
||||
if (await Matomo.getTrackingPromise()) {
|
||||
window["_paq"].push(arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Matomo.LOCAL_STORAGE_KEY = "matomoShouldTrack";
|
||||
Matomo.TRACK_SITE = "//matomo.silas.link";
|
||||
Matomo.BASE_PATH = "/index.php?module=API&method=AjaxOptOut.";
|
||||
|
||||
InitPromise.addPromise(() => {
|
||||
window["_paq"] = window["_paq"] || [];
|
||||
|
||||
Matomo.init();
|
||||
});
|
||||
|
||||
class ScaleHelper {
|
||||
async scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {
|
||||
|
||||
@ -5899,7 +5983,7 @@ class LevelSite extends WordRotatorBaseSite {
|
||||
let levelSegment = this.findBy("#level");
|
||||
levelSegment.removeAllChildren().appendChild(level.getRootSegment().getElement());
|
||||
let scaleHelper = new ScaleHelper();
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length*1.5 , null, 0);
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);
|
||||
|
||||
this.level = level;
|
||||
return this.tutorial();
|
||||
@ -6003,14 +6087,9 @@ class LevelSite extends WordRotatorBaseSite {
|
||||
}).then(() => {
|
||||
return Promise.all([new Promise((r) => {
|
||||
setTimeout(() => {
|
||||
console.log("fadeIn");
|
||||
r(continueButton.fadeIn().then(() => {
|
||||
console.log("fade in ended!");
|
||||
}));
|
||||
r(continueButton.fadeIn());
|
||||
}, 500);
|
||||
}), audioOptions.loadedPromise.then(() => {
|
||||
console.log("audio loaded");
|
||||
}).catch(e => {
|
||||
}), audioOptions.loadedPromise.catch(e => {
|
||||
console.error(e);
|
||||
})]);
|
||||
});
|
||||
@ -6406,34 +6485,98 @@ InitPromise.addPromise(app => {
|
||||
MenuSite.app = app;
|
||||
});
|
||||
|
||||
class PrivacyPolicySite extends WordRotatorBaseSite {
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/privacyPolicy.html", "privacyPolicy");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("privacyPolicy", PrivacyPolicySite);
|
||||
});
|
||||
|
||||
class CreditsSite extends WordRotatorBaseSite{
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/credits.html", "credits");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("credits", PrivacyPolicySite);
|
||||
});
|
||||
|
||||
class ChooseThemeDialog extends Dialog {
|
||||
|
||||
constructor() {
|
||||
let viewPromise = ViewInflater.inflate("html/application/dialog/chooseTheme.html").then(view => {
|
||||
let template = view.querySelector("#choose-theme-template");
|
||||
template.remove();
|
||||
template.id = null;
|
||||
|
||||
let themeTemplateContainer = template.querySelector("#theme-choose-container");
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(template);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.querySelector(".name").appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
themeElem["dataset"]["theme"] = theme._name;
|
||||
|
||||
themeElem.addEventListener("click", () => {
|
||||
this.result = themeElem["dataset"]["theme"];
|
||||
this.close();
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
return view;
|
||||
});
|
||||
|
||||
super(viewPromise, "choose-theme-dialog-title");
|
||||
}
|
||||
}
|
||||
|
||||
class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
constructor(site) {
|
||||
super(site, "html/application/fragment/settings.html");
|
||||
}
|
||||
|
||||
onFirstStart() {
|
||||
let themeTemplate = this.findBy("#theme-radio-template");
|
||||
delete themeTemplate["id"];
|
||||
let themeTemplateContainer = themeTemplate.parentNode;
|
||||
themeTemplateContainer.removeAllChildren();
|
||||
// let themeTemplate = this.findBy("#theme-radio-template");
|
||||
// delete themeTemplate["id"];
|
||||
// let themeTemplateContainer = themeTemplate.parentNode;
|
||||
// themeTemplateContainer.removeAllChildren();
|
||||
//
|
||||
// for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
// let themeElem = Helper.cloneNode(themeTemplate);
|
||||
// let theme = ThemeManager.themes[i];
|
||||
// themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
//
|
||||
// let inputElem = themeElem.querySelector("input");
|
||||
// inputElem.value = theme._className;
|
||||
//
|
||||
// inputElem.addEventListener("change", function() {
|
||||
// if (this.checked){
|
||||
// ThemeManager.changeCurrentTheme(theme)
|
||||
// }
|
||||
// });
|
||||
// themeTemplateContainer.appendChild(themeElem);
|
||||
// }
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(themeTemplate);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
let currentThemeName = ThemeManager.currentTheme._name;
|
||||
SettingsManager.getInstance().setSetting("theme", currentThemeName);
|
||||
|
||||
let inputElem = themeElem.querySelector("input");
|
||||
inputElem.value = theme._className;
|
||||
|
||||
inputElem.addEventListener("change", function() {
|
||||
if (this.checked){
|
||||
ThemeManager.changeCurrentTheme(theme);
|
||||
let themeNameElem = this.findBy("#theme-name");
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(currentThemeName));
|
||||
this.findBy("#theme-chooser").addEventListener("click", async () => {
|
||||
console.log("clicked");
|
||||
let newTheme = (new ChooseThemeDialog()).show();
|
||||
if (Helper.isNotNull(newTheme)){
|
||||
SettingsManager.getInstance().setSetting("theme", newTheme);
|
||||
ThemeManager.changeCurrentTheme(newTheme);
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(newTheme));
|
||||
}
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
SettingsManager.getInstance().setSetting("theme", ThemeManager.currentTheme._name);
|
||||
|
||||
this.findBy("#reset-levels").addEventListener("click", () => {
|
||||
localStorage.removeItem("currentLevel");
|
||||
@ -6443,6 +6586,28 @@ class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
WordRotatorDb.getInstance().removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
});
|
||||
|
||||
let playMusicButton = this.findBy("#play-music");
|
||||
playMusicButton.addEventListener("change", () => {
|
||||
let soundManager = SoundManager.getInstance();
|
||||
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);
|
||||
if (playMusicButton.checked){
|
||||
soundManager.play(SoundManager.CHANNELS.MUSIC);
|
||||
}
|
||||
});
|
||||
|
||||
this.findBy("#track-switch").addEventListener("change", function(e) {
|
||||
Matomo.setTrack(this.checked === true);
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
this.findBy("#credits-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(CreditsSite);
|
||||
});
|
||||
this.findBy("#privacy-policy-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(PrivacyPolicySite);
|
||||
});
|
||||
|
||||
return super.onFirstStart();
|
||||
}
|
||||
}
|
||||
@ -6452,7 +6617,7 @@ InitPromise.addPromise(function () {
|
||||
});
|
||||
|
||||
let basePath = "/pwa/wordRotator/public/";
|
||||
if (window.location.pathname.endsWith("publicTest/"))
|
||||
if (window.location.pathname.includes("publicTest/"))
|
||||
{
|
||||
basePath = "/pwa/wordRotator/publicTest/";
|
||||
}
|
||||
@ -6477,8 +6642,6 @@ ShareManager.addShareButton(new TelegramShareButton('img/telegram.svg'));
|
||||
|
||||
let app = new App();
|
||||
// app.addDeepLink("policy", PrivatePolicySite.name);
|
||||
// app.setAddThemeAction(true);
|
||||
// app.addDefaultAction(Translator.generateChangeLanguageMenuAction());
|
||||
|
||||
// bridge für Android
|
||||
window["ThemeManager"] = ThemeManager;
|
||||
@ -6494,7 +6657,7 @@ SettingsSite.setTemplate("html/application/setting-template.html");
|
||||
RegistrationSite.addAction = false;
|
||||
LoginSite.addLoginAction = false;
|
||||
|
||||
InitPromise.resolve(app).then(function(){
|
||||
InitPromise.resolve(app).then(async function(){
|
||||
SettingsSite.settingsAction.showFor = MenuAction.SHOW_ALWAYS;
|
||||
|
||||
let settingsManager = SettingsManager.getInstance();
|
||||
@ -6504,4 +6667,7 @@ InitPromise.resolve(app).then(function(){
|
||||
|
||||
app.start(MenuSite);
|
||||
Translator.setLanguage("de");
|
||||
|
||||
// let matomo = new Matomo();
|
||||
// console.log(await matomo._askIsTracking());
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -18,10 +18,13 @@ import "./lib/pwa-user-management"
|
||||
|
||||
import {SettingsManager, SettingsSite} from "./lib/pwa-core";
|
||||
|
||||
import {SoundManager} from "./lib/pwa-assets";
|
||||
import {Matomo, SoundManager} from "./lib/pwa-assets";
|
||||
import {MenuSite} from "../module/Application/pwa/js/site/MenuSite";
|
||||
import {WordRotatorSettingFragment} from "../module/Application/pwa/js/Fragment/WordRotatorSettingFragment";
|
||||
|
||||
import {PrivacyPolicySite} from "../module/Application/pwa/js/site/PrivacyPolicySite";
|
||||
import {CreditsSite} from "../module/Application/pwa/js/site/CreditsSite";
|
||||
|
||||
applyPolyfills();
|
||||
|
||||
|
||||
@ -41,8 +44,6 @@ ShareManager.addShareButton(new TelegramShareButton('img/telegram.svg'));
|
||||
|
||||
let app = new App();
|
||||
// app.addDeepLink("policy", PrivatePolicySite.name);
|
||||
// app.setAddThemeAction(true);
|
||||
// app.addDefaultAction(Translator.generateChangeLanguageMenuAction());
|
||||
|
||||
// bridge für Android
|
||||
window["ThemeManager"] = ThemeManager;
|
||||
@ -58,7 +59,7 @@ SettingsSite.setTemplate("html/application/setting-template.html");
|
||||
RegistrationSite.addAction = false;
|
||||
LoginSite.addLoginAction = false;
|
||||
|
||||
InitPromise.resolve(app).then(function(){
|
||||
InitPromise.resolve(app).then(async function(){
|
||||
SettingsSite.settingsAction.showFor = MenuAction.SHOW_ALWAYS;
|
||||
|
||||
let settingsManager = SettingsManager.getInstance();
|
||||
@ -68,5 +69,8 @@ InitPromise.resolve(app).then(function(){
|
||||
|
||||
app.start(MenuSite);
|
||||
Translator.setLanguage("de");
|
||||
|
||||
// let matomo = new Matomo();
|
||||
// console.log(await matomo._askIsTracking());
|
||||
});
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { Helper, Fragment, Translator } from './pwa-lib.js';
|
||||
import { Helper, InitPromise, Fragment, Translator } from './pwa-lib.js';
|
||||
|
||||
class DelayPromise extends Promise {
|
||||
static async delay(delay) {
|
||||
@ -8,6 +8,88 @@ class DelayPromise extends Promise {
|
||||
}
|
||||
}
|
||||
|
||||
class Matomo {
|
||||
|
||||
static init() {
|
||||
Matomo.isTrackingPromise = new Promise(async (resolve) => {
|
||||
let shouldTrack = localStorage.getItem(Matomo.LOCAL_STORAGE_KEY);
|
||||
console.log(shouldTrack,Helper.isNull(shouldTrack));
|
||||
if (Helper.isNull(shouldTrack)) {
|
||||
shouldTrack = await Matomo._askIsTracking();
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);
|
||||
}
|
||||
else {
|
||||
console.log(shouldTrack, (shouldTrack === "1"));
|
||||
shouldTrack = (shouldTrack === "1");
|
||||
Matomo.setTrack(shouldTrack);
|
||||
}
|
||||
resolve(shouldTrack);
|
||||
});
|
||||
Matomo.isTrackingPromise.then(() => {
|
||||
Matomo.push(['trackPageView']);
|
||||
Matomo.push(['enableLinkTracking']);
|
||||
Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php']);
|
||||
Matomo.push(['setSiteId', '1']);
|
||||
|
||||
let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];
|
||||
g.type = 'text/javascript';
|
||||
g.async = true;
|
||||
g.defer = true;
|
||||
g.src = Matomo.TRACK_SITE + '/piwik.js';
|
||||
s.appendChild(g);
|
||||
});
|
||||
}
|
||||
|
||||
static async _askIsTracking() {
|
||||
console.log(Matomo.TRACK_SITE + Matomo.BASE_PATH + "isTracked");
|
||||
Matomo.isTrackingPromise = Matomo.query("isTracked")
|
||||
.then(xml => {
|
||||
let textContent = xml.firstChild.textContent;
|
||||
// localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, textContent);
|
||||
return (textContent === "1")
|
||||
});
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async query(method) {
|
||||
return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {
|
||||
// "method":"POST",
|
||||
"mode": "cors",
|
||||
"credentials": "include",
|
||||
// "headers": {
|
||||
// 'Access-Control-Allow-Origin': '*',
|
||||
// 'Access-Control-Allow-Credentials': 'true',
|
||||
// },
|
||||
}).then(res => res.text()).then(text => (new window.DOMParser()).parseFromString(text, "text/xml"));
|
||||
}
|
||||
|
||||
static getTrackingPromise() {
|
||||
return Matomo.isTrackingPromise;
|
||||
}
|
||||
|
||||
static async setTrack(shouldTrack) {
|
||||
Matomo.isTrackingPromise = Promise.resolve(shouldTrack);
|
||||
localStorage.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? "1" : "0");
|
||||
return await Matomo.query((shouldTrack) ? "doTrack" : "doIgnore");
|
||||
}
|
||||
|
||||
static async push(arr) {
|
||||
if (await Matomo.getTrackingPromise()) {
|
||||
window["_paq"].push(arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Matomo.LOCAL_STORAGE_KEY = "matomoShouldTrack";
|
||||
Matomo.TRACK_SITE = "//matomo.silas.link";
|
||||
Matomo.BASE_PATH = "/index.php?module=API&method=AjaxOptOut.";
|
||||
|
||||
InitPromise.addPromise(() => {
|
||||
window["_paq"] = window["_paq"] || [];
|
||||
|
||||
Matomo.init();
|
||||
});
|
||||
|
||||
class RotateHelper {
|
||||
rotate(element, degrees){
|
||||
let rotateText = element.innerText;
|
||||
@ -271,4 +353,4 @@ class TabbedFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
export { DelayPromise, RotateHelper, ScaleHelper, SoundManager, TabbedFragment };
|
||||
export { DelayPromise, Matomo, RotateHelper, ScaleHelper, SoundManager, TabbedFragment };
|
||||
|
||||
@ -358,13 +358,19 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
for (let i = 0; i < settings.length; i++) {
|
||||
let setting = settings[i];
|
||||
const name = setting.name;
|
||||
let value = settingsManager.getSetting(name);
|
||||
let value;
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
value = settingsManager.getSetting(name);
|
||||
} else {
|
||||
value = localStorage.getItem(name);
|
||||
}
|
||||
|
||||
let isCheckable = false;
|
||||
if (setting instanceof HTMLInputElement && (setting.type === 'checkbox' || setting.type === 'radio')) {
|
||||
isCheckable = true;
|
||||
}
|
||||
if (!settingsManager.hasSetting(name) && Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
if (((!setting["dataset"]["raw"] && !settingsManager.hasSetting(name)) || (setting["dataset"]["raw"] && value === null))
|
||||
&& Helper.isNotNull(settings[i]["dataset"]["default"])) {
|
||||
value = setting["dataset"]["default"];
|
||||
if (Helper.isNotNull(setting["dataset"]["defaultTranslateable"])) {
|
||||
|
||||
@ -387,19 +393,15 @@ class LocalStorageSettingsFragment extends Fragment {
|
||||
}
|
||||
|
||||
setting.addEventListener("change", function () {
|
||||
// console.log(setting);
|
||||
let value = this.value;
|
||||
if (isCheckable) {
|
||||
if (this.checked)
|
||||
{
|
||||
settingsManager.setSetting(name, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
settingsManager.setSetting(name, null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (isCheckable && !this.checked) {
|
||||
value = null;
|
||||
}
|
||||
if (!setting["dataset"]["raw"]) {
|
||||
settingsManager.setSetting(name, value);
|
||||
} else {
|
||||
localStorage.setItem(name, value);
|
||||
}
|
||||
delete setting["dataset"]["translationValue"];
|
||||
delete setting["dataset"]["translation"];
|
||||
|
||||
@ -2,7 +2,7 @@ import {SystemSettings, Translator} from "./lib/pwa-lib";
|
||||
|
||||
|
||||
let basePath = "/pwa/wordRotator/public/";
|
||||
if (window.location.pathname.endsWith("publicTest/"))
|
||||
if (window.location.pathname.includes("publicTest/"))
|
||||
{
|
||||
basePath = "/pwa/wordRotator/publicTest/";
|
||||
}
|
||||
|
||||
1
src/module/Application/pwa/html/application/credits.html
Normal file
1
src/module/Application/pwa/html/application/credits.html
Normal file
@ -0,0 +1 @@
|
||||
<div></div>
|
||||
@ -0,0 +1,5 @@
|
||||
<div id='theme-choose-container'>
|
||||
<div id='choose-theme-template'>
|
||||
<div class='name'></div>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,30 +1,64 @@
|
||||
<div class='max-height fill-me'>
|
||||
<div class='row max-width grow flex-center'>
|
||||
<div class='columns small-centered small-12 smedium-9 medium-11 large-7'>
|
||||
<div class='row'>
|
||||
<div class='columns small-centered small-12 smedium-11 medium-9 large-7'>
|
||||
<div class='row' id = "theme-chooser">
|
||||
<span class='columns small-6' data-translation="theme"></span>
|
||||
<span class='columns small-6'>
|
||||
<label id = 'theme-radio-template'><input type="radio" class='setting' name='theme'></label>
|
||||
<span class='columns small-6 text-right'>
|
||||
<!--<label id='theme-radio-template'><input type="radio" class='setting' name='theme'></label>-->
|
||||
<div id = 'theme-name'></div>
|
||||
</span>
|
||||
</div>
|
||||
<div class='row'>
|
||||
<span class='columns small-6' data-translation="sound"></span>
|
||||
<span class='columns small-6 text-right'>
|
||||
<label class="switch">
|
||||
<!--<div data-view="img/speaker.svg"></div>-->
|
||||
<input type="checkbox" class="setting" id="play-sound" name='play-sound' value="1" data-default="1">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!--<div class='row'>-->
|
||||
<!--<span class='columns small-6' data-translation="language"></span>-->
|
||||
<!--<span class='columns small-6'>-->
|
||||
<!--<label id = 'language-radio-template'><input type="radio" class='setting' name='language'></label>-->
|
||||
<!--</span>-->
|
||||
<!--</div>-->
|
||||
|
||||
|
||||
<button id = 'reset-levels' class = "button" data-translation="reset-levels"></button>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class='row'>
|
||||
<span class='columns small-6' data-translation="music"></span>
|
||||
<span class='columns small-6 text-right'>
|
||||
<label class="switch">
|
||||
<!--<div data-view="img/music.svg"></div>-->
|
||||
<input type="checkbox" class="setting" id="play-music" name='play-music' value="1" data-default="1">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
<div class='row' id='credits-button'>
|
||||
<span class='columns small-6' data-translation="credits"></span>
|
||||
<span class='columns small-6 text-right' data-translation=">"></span>
|
||||
</div>
|
||||
<div class='row' id='privacy-policy-button'>
|
||||
<span class='columns small-6' data-translation="privacy-policy"></span>
|
||||
<span class='columns small-6 text-right' data-translation=">"></span>
|
||||
</div>
|
||||
<div class='row' id='impressum-button'>
|
||||
<span class='columns small-6' data-translation="impressum"></span>
|
||||
<span class='columns small-6 text-right' data-translation=">"></span>
|
||||
</div>
|
||||
<div class='row'>
|
||||
<span class='columns small-6' data-translation="track"></span>
|
||||
<span class='columns small-6 text-right'>
|
||||
<label class="switch">
|
||||
<!--<div data-view="img/music.svg"></div>-->
|
||||
<input type="checkbox" class="setting" id="track-switch" name='matomoShouldTrack' value="1" data-default="1" data-raw="1">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!--<iframe-->
|
||||
<!--style="border: 0; height: 200px; width: 600px;"-->
|
||||
<!--src="https://matomo.silas.link/index.php?module=CoreAdminHome&action=optOut&language=de&backgroundColor=&fontColor=&fontSize=&fontFamily="-->
|
||||
<!--></iframe>-->
|
||||
|
||||
|
||||
<button id='reset-levels' class="button" data-translation="reset-levels"></button>
|
||||
|
||||
|
||||
<!--<label class='row'>-->
|
||||
|
||||
@ -17,7 +17,9 @@
|
||||
<!-- Site Content -->
|
||||
<div class='max-height fill-me'>
|
||||
<div class="text-right max-width">
|
||||
<button class="button show-while-playing" id='help-button' data-translation="help"></button>
|
||||
<button class="button show-while-playing" id='help-button'>
|
||||
<img src = "img/help.png"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class = 'height-20 no-transition tutorial-text center flex-center hidden'>
|
||||
<div class = 'step-1 hidden' data-translation="tutorial-step-1"></div>
|
||||
|
||||
@ -0,0 +1 @@
|
||||
<div></div>
|
||||
@ -1,4 +1,4 @@
|
||||
<div class="max-height fill-me">
|
||||
<div class="max-height fill-me overflow-y-scroll">
|
||||
<ul class="menu vertical plain dropdown hidden" id="settings-fragment-list"></ul>
|
||||
<h2 data-translation="settings"></h2>
|
||||
<div id="settings-fragments"></div>
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
import {LocalStorageSettingsFragment, SettingsManager, SettingsSite} from "../../../../../js/lib/pwa-core";
|
||||
import {Helper, InitPromise, ThemeManager, Translator} from "../../../../../js/lib/pwa-lib";
|
||||
import {WordRotatorDb} from "../WordRotatorDb";
|
||||
import {Matomo, SoundManager} from "../../../../../js/lib/pwa-assets";
|
||||
import {CreditsSite} from "../site/CreditsSite";
|
||||
import {PrivacyPolicySite} from "../site/PrivacyPolicySite";
|
||||
import {ChooseThemeDialog} from "../dialog/ChooseThemeDialog";
|
||||
|
||||
export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
constructor(site) {
|
||||
@ -8,28 +12,42 @@ export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
}
|
||||
|
||||
onFirstStart() {
|
||||
let themeTemplate = this.findBy("#theme-radio-template");
|
||||
delete themeTemplate["id"];
|
||||
let themeTemplateContainer = themeTemplate.parentNode;
|
||||
themeTemplateContainer.removeAllChildren();
|
||||
// let themeTemplate = this.findBy("#theme-radio-template");
|
||||
// delete themeTemplate["id"];
|
||||
// let themeTemplateContainer = themeTemplate.parentNode;
|
||||
// themeTemplateContainer.removeAllChildren();
|
||||
//
|
||||
// for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
// let themeElem = Helper.cloneNode(themeTemplate);
|
||||
// let theme = ThemeManager.themes[i];
|
||||
// themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
//
|
||||
// let inputElem = themeElem.querySelector("input");
|
||||
// inputElem.value = theme._className;
|
||||
//
|
||||
// inputElem.addEventListener("change", function() {
|
||||
// if (this.checked){
|
||||
// ThemeManager.changeCurrentTheme(theme)
|
||||
// }
|
||||
// });
|
||||
// themeTemplateContainer.appendChild(themeElem);
|
||||
// }
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(themeTemplate);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
let currentThemeName = ThemeManager.currentTheme._name;
|
||||
SettingsManager.getInstance().setSetting("theme", currentThemeName);
|
||||
|
||||
let inputElem = themeElem.querySelector("input");
|
||||
inputElem.value = theme._className;
|
||||
|
||||
inputElem.addEventListener("change", function() {
|
||||
if (this.checked){
|
||||
ThemeManager.changeCurrentTheme(theme)
|
||||
let themeNameElem = this.findBy("#theme-name");
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(currentThemeName));
|
||||
this.findBy("#theme-chooser").addEventListener("click", async () => {
|
||||
console.log("clicked");
|
||||
let newTheme = (new ChooseThemeDialog()).show();
|
||||
if (Helper.isNotNull(newTheme)){
|
||||
SettingsManager.getInstance().setSetting("theme", newTheme);
|
||||
ThemeManager.changeCurrentTheme(newTheme);
|
||||
themeNameElem.removeAllChildren().appendChild(Translator.makePersistentTranslation(newTheme));
|
||||
}
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
SettingsManager.getInstance().setSetting("theme", ThemeManager.currentTheme._name);
|
||||
|
||||
this.findBy("#reset-levels").addEventListener("click", () => {
|
||||
localStorage.removeItem("currentLevel");
|
||||
@ -39,6 +57,28 @@ export class WordRotatorSettingFragment extends LocalStorageSettingsFragment {
|
||||
WordRotatorDb.getInstance().removeAll(WordRotatorDb.OBJECT_STORE.LEVEL);
|
||||
});
|
||||
|
||||
let playMusicButton = this.findBy("#play-music");
|
||||
playMusicButton.addEventListener("change", () => {
|
||||
let soundManager = SoundManager.getInstance();
|
||||
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);
|
||||
if (playMusicButton.checked){
|
||||
soundManager.play(SoundManager.CHANNELS.MUSIC);
|
||||
}
|
||||
});
|
||||
|
||||
this.findBy("#track-switch").addEventListener("change", function(e) {
|
||||
Matomo.setTrack(this.checked === true);
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
this.findBy("#credits-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(CreditsSite);
|
||||
});
|
||||
this.findBy("#privacy-policy-button").addEventListener("click", () => {
|
||||
this.getSite().startSite(PrivacyPolicySite);
|
||||
});
|
||||
|
||||
return super.onFirstStart();
|
||||
}
|
||||
}
|
||||
|
||||
31
src/module/Application/pwa/js/dialog/ChooseThemeDialog.js
Normal file
31
src/module/Application/pwa/js/dialog/ChooseThemeDialog.js
Normal file
@ -0,0 +1,31 @@
|
||||
import {Dialog, Helper, ThemeManager, Translator, ViewInflater} from "../../../../../js/lib/pwa-lib";
|
||||
|
||||
export class ChooseThemeDialog extends Dialog {
|
||||
|
||||
constructor() {
|
||||
let viewPromise = ViewInflater.inflate("html/application/dialog/chooseTheme.html").then(view => {
|
||||
let template = view.querySelector("#choose-theme-template");
|
||||
template.remove();
|
||||
template.id = null;
|
||||
|
||||
let themeTemplateContainer = template.querySelector("#theme-choose-container");
|
||||
|
||||
for (let i = 0; i < ThemeManager.themes.length; i++) {
|
||||
let themeElem = Helper.cloneNode(template);
|
||||
let theme = ThemeManager.themes[i];
|
||||
themeElem.querySelector(".name").appendChild(Translator.makePersistentTranslation(theme._name));
|
||||
themeElem["dataset"]["theme"] = theme._name;
|
||||
|
||||
themeElem.addEventListener("click", () => {
|
||||
this.result = themeElem["dataset"]["theme"];
|
||||
this.close()
|
||||
});
|
||||
themeTemplateContainer.appendChild(themeElem);
|
||||
}
|
||||
|
||||
return view;
|
||||
});
|
||||
|
||||
super(viewPromise, "choose-theme-dialog-title");
|
||||
}
|
||||
}
|
||||
13
src/module/Application/pwa/js/site/CreditsSite.js
Normal file
13
src/module/Application/pwa/js/site/CreditsSite.js
Normal file
@ -0,0 +1,13 @@
|
||||
import {WordRotatorBaseSite} from "./WordRotatorBaseSite";
|
||||
import {InitPromise} from "../../../../../js/lib/pwa-lib";
|
||||
import {PrivacyPolicySite} from "./PrivacyPolicySite";
|
||||
|
||||
export class CreditsSite extends WordRotatorBaseSite{
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/credits.html", "credits");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("credits", PrivacyPolicySite);
|
||||
});
|
||||
@ -130,7 +130,7 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
let levelSegment = this.findBy("#level");
|
||||
levelSegment.removeAllChildren().appendChild(level.getRootSegment().getElement());
|
||||
let scaleHelper = new ScaleHelper();
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length*1.5 , null, 0);
|
||||
this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);
|
||||
|
||||
this.level = level;
|
||||
return this.tutorial();
|
||||
@ -234,14 +234,9 @@ export class LevelSite extends WordRotatorBaseSite {
|
||||
}).then(() => {
|
||||
return Promise.all([new Promise((r) => {
|
||||
setTimeout(() => {
|
||||
console.log("fadeIn");
|
||||
r(continueButton.fadeIn().then(() => {
|
||||
console.log("fade in ended!")
|
||||
}));
|
||||
r(continueButton.fadeIn());
|
||||
}, 500)
|
||||
}), audioOptions.loadedPromise.then(() => {
|
||||
console.log("audio loaded")
|
||||
}).catch(e => {
|
||||
}), audioOptions.loadedPromise.catch(e => {
|
||||
console.error(e)
|
||||
})]);
|
||||
});
|
||||
|
||||
12
src/module/Application/pwa/js/site/PrivacyPolicySite.js
Normal file
12
src/module/Application/pwa/js/site/PrivacyPolicySite.js
Normal file
@ -0,0 +1,12 @@
|
||||
import {WordRotatorBaseSite} from "./WordRotatorBaseSite";
|
||||
import {InitPromise} from "../../../../../js/lib/pwa-lib";
|
||||
|
||||
export class PrivacyPolicySite extends WordRotatorBaseSite {
|
||||
constructor(siteManager) {
|
||||
super(siteManager, "html/application/privacyPolicy.html", "privacyPolicy");
|
||||
}
|
||||
}
|
||||
|
||||
InitPromise.addPromise(app => {
|
||||
app.addDeepLink("privacyPolicy", PrivacyPolicySite);
|
||||
});
|
||||
@ -16,5 +16,13 @@
|
||||
"tutorial-step-4": "Große Segmente drehst du, indem du diese ziehst.",
|
||||
"extra-coins-after-first-level":"Für das erste Level gibt es 50 extra Münzen!",
|
||||
|
||||
"dark":"Dunkel"
|
||||
"dark":"Dunkel",
|
||||
"theme":"Theme:",
|
||||
"sound":"Sound",
|
||||
"music":"Musik",
|
||||
"credits":"Credits",
|
||||
"privacy-policy":"Datenschutzbestimmungen",
|
||||
"impressum":"Impressum",
|
||||
"track":"Anonymisierte Nutzungsdaten senden",
|
||||
">":">"
|
||||
}
|
||||
@ -26,7 +26,7 @@
|
||||
background-color:#{map-get($theme, themeColor)} !important;
|
||||
}
|
||||
}
|
||||
.segment:not(.segment-row):not(.segment-triangle):not(.rotating) {
|
||||
.segment:not(.segment-row):not(.segment-triangle) {
|
||||
@for $i from 1 through length($rotationDegrees) {
|
||||
&.rotate-#{nth($rotationDegrees, $i)} {
|
||||
background-color: #{map-get($theme, background)};;
|
||||
@ -41,7 +41,7 @@
|
||||
}
|
||||
|
||||
&.rotate-#{nth($rotationDegrees, $j)} {
|
||||
background-color: #{map-get($theme, background)};;
|
||||
background-color: #{map-get($theme, background)};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -51,7 +51,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
@each $theme, $values in $themes {
|
||||
@if (map-get($values, class) == '') {
|
||||
|
||||
@ -99,7 +99,6 @@ $coinTowerDimension: 28px;
|
||||
|
||||
//Segments
|
||||
|
||||
|
||||
@for $i from 1 through length($rotationDegrees) {
|
||||
$startDegree: ((nth($rotationDegrees, $i)+270)%360);
|
||||
|
||||
@ -321,29 +320,36 @@ $coinTowerDimension: 28px;
|
||||
padding: 0.3em .6em;
|
||||
}
|
||||
}
|
||||
#play-button{
|
||||
@include breakpoint(small down){
|
||||
|
||||
#play-button {
|
||||
@include breakpoint(small down) {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
#help-button {
|
||||
margin: 0;
|
||||
padding: 0.4em 0.4em;
|
||||
max-width: 3em;
|
||||
@include breakpoint(smedium down) {
|
||||
padding: 0.4em 0.6em;
|
||||
padding: 0.2em 0.2em;
|
||||
max-width: 2em;
|
||||
}
|
||||
}
|
||||
.line-height-1{
|
||||
line-height:1;
|
||||
|
||||
.line-height-1 {
|
||||
line-height: 1;
|
||||
}
|
||||
body{
|
||||
|
||||
body {
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
#site-content{
|
||||
|
||||
#site-content {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#img-sound:before{
|
||||
#img-sound:before {
|
||||
content: "";
|
||||
max-width: 1.4em;
|
||||
background: url('../img/speaker.svg')
|
||||
|
||||
@ -34,7 +34,7 @@ module.exports = {
|
||||
],
|
||||
runtimeCaching: [
|
||||
{
|
||||
urlPattern: /^https:\/\/((www\.google-analytics\.com)|(www\.googletagmanager\.com)|(apis\.google\.com)|(.*\.googleusercontent\.com)|(.*\.google.com)|(cdn.jsdelivr.net)).*$/,
|
||||
urlPattern: /^https:\/\/((matomo\.silas\.link)|(www\.googletagmanager\.com)|(apis\.google\.com)|(.*\.googleusercontent\.com)|(.*\.google.com)|(cdn.jsdelivr.net)).*$/,
|
||||
handler: "networkFirst"
|
||||
},
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user