Compare commits

..

4 Commits

Author SHA1 Message Date
sguenter
903457834b Version Upgrade 2025-01-17 08:18:19 +01:00
sguenter
5bbd5e61db Pre EA-Update 2024-11-02 14:47:14 +01:00
sguenter
b3792c1189 New version 2024-07-05 19:41:54 +02:00
silas
9704cf012e new version 2021-06-10 10:32:06 +02:00
31 changed files with 34534 additions and 3004 deletions

2
.gitignore vendored
View File

@ -7,6 +7,8 @@ bin/*
plugins/* plugins/*
platforms/* platforms/*
tools/signing/*
/www/* /www/*
node_modules/* node_modules/*
/node_modules/* /node_modules/*

17
.idea/php.xml generated Executable file → Normal file
View File

@ -1,5 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" />
</component>
<component name="PhpIncludePathManager"> <component name="PhpIncludePathManager">
<include_path> <include_path>
<path value="$PROJECT_DIR$/vendor/zendframework/zend-paginator" /> <path value="$PROJECT_DIR$/vendor/zendframework/zend-paginator" />
@ -91,5 +101,10 @@
<path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" /> <path value="$PROJECT_DIR$/vendor/ainias/pwa-zf-core" />
</include_path> </include_path>
</component> </component>
<component name="PhpProjectSharedConfiguration" php_language_level="7" /> <component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project> </project>

1
.npmrc Normal file
View File

@ -0,0 +1 @@
legacy-peer-deps=true

View File

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="18" id="link.silas.wordrotator" version="1.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget android-versionCode="22" id="link.silas.wordrotator" version="1.3.3" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>WordRotator</name> <name>WordRotator - Test</name>
<description> <description>
A word-game A word-game
</description> </description>
@ -21,6 +21,7 @@
<allow-intent href="market:*" /> <allow-intent href="market:*" />
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application"> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
</edit-config> </edit-config>
<preference name="android-targetSdkVersion" value="35" />
<icon src="src/client/img/logo.png" /> <icon src="src/client/img/logo.png" />
</platform> </platform>
<platform name="ios"> <platform name="ios">

30375
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,10 +4,12 @@
"version": "1.3.2", "version": "1.3.2",
"scripts": { "scripts": {
"server": "ts-node src/server/index.ts", "server": "ts-node src/server/index.ts",
"run browser": "cordova run browser", "build": "webpack",
"prepare browser": "cordova prepare browser", "run-browser": "cordova run browser",
"run android": "cordova run android --device", "prepare-android": "cordova prepare android",
"release android": "cordova build android --release", "prepare-browser": "cordova prepare browser",
"run-android": "cordova run android --device",
"release-android": "cordova build android --release --buildConfig=tools/signing/build.json",
"appium": "appium", "appium": "appium",
"appium-doctor": "appium-doctor", "appium-doctor": "appium-doctor",
"test browser": "wdio tests/wdio.config.browser.js", "test browser": "wdio tests/wdio.config.browser.js",
@ -18,7 +20,6 @@
"dependencies": { "dependencies": {
"@types/node": "^15.3.0", "@types/node": "^15.3.0",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"cordova-android": "^8.1.0",
"cordova-ios": "^5.1.1", "cordova-ios": "^5.1.1",
"cordova-plugin-webpack": "^1.0.5", "cordova-plugin-webpack": "^1.0.5",
"cordova-sites": "git+https://github.com/Ainias/cordova-sites.git#0.7.10", "cordova-sites": "git+https://github.com/Ainias/cordova-sites.git#0.7.10",
@ -55,13 +56,14 @@
"babel-preset-env": "^1.7.0", "babel-preset-env": "^1.7.0",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^5.1.2", "copy-webpack-plugin": "^5.1.2",
"cordova-plugin-device": "^2.0.3", "cordova-android": "^13.0.0",
"cordova-plugin-file": "^6.0.2", "cordova-browser": "^7.0.0",
"cordova-plugin-device": "^3.0.0",
"cordova-plugin-file": "^8.1.0",
"cordova-plugin-nativestorage": "^2.3.2", "cordova-plugin-nativestorage": "^2.3.2",
"cordova-plugin-share": "^0.1.3", "cordova-plugin-share": "^0.1.3",
"cordova-plugin-tts": "^0.2.3", "cordova-plugin-tts": "^0.2.3",
"cordova-plugin-webpack": "^1.0.5", "cordova-plugin-webpack": "^1.0.5",
"cordova-plugin-whitelist": "^1.3.4",
"cordova-serve": "^4.0.0", "cordova-serve": "^4.0.0",
"cordova-sqlite-storage": "^6.0.0", "cordova-sqlite-storage": "^6.0.0",
"css-loader": "^5.2.4", "css-loader": "^5.2.4",
@ -88,15 +90,13 @@
"cordova-plugin-webpack": {}, "cordova-plugin-webpack": {},
"cordova-plugin-nativestorage": {}, "cordova-plugin-nativestorage": {},
"cordova-plugin-tts": {}, "cordova-plugin-tts": {},
"nl.madebymark.share": {},
"cordova-plugin-device": {}, "cordova-plugin-device": {},
"cordova-plugin-file": {}, "cordova-plugin-file": {},
"cordova-sqlite-storage": {}, "cordova-sqlite-storage": {}
"cordova-plugin-whitelist": {}
}, },
"platforms": [ "platforms": [
"browser",
"ios", "ios",
"browser",
"android" "android"
] ]
}, },

View File

@ -1,8 +1,8 @@
<div> <div>
<h2>Impressum</h2> <h2>Impressum</h2>
<p>Silas Günther<br /> <p>Silas Günther<br />
Mariabrunnstraße 48<br /> Peterstraße 10<br />
52064 Aachen<br/> 52062 Aachen<br/>
Deutschland Deutschland
</p> </p>
<p>E-Mail: <a href="mailto:wordRotator@silas.link">wordRotator@silas.link</a><br/> <p>E-Mail: <a href="mailto:wordRotator@silas.link">wordRotator@silas.link</a><br/>

View File

@ -30,7 +30,7 @@
<div class = 'step-3 hidden translation' data-translation="tutorial-step-3"></div> <div class = 'step-3 hidden translation' data-translation="tutorial-step-3"></div>
<div class = 'step-4 hidden translation' data-translation="tutorial-step-4"></div> <div class = 'step-4 hidden translation' data-translation="tutorial-step-4"></div>
</div> </div>
<div class='height-20 show-when-won center flex-center fill-me' style = 'min-height: 45px'> <div class='height-20 show-when-won center flex-center fill-me' style = 'min-height: 60px'>
<div class = 'grow max-width'> <div class = 'grow max-width'>
<b class="translation" data-translation="won" id="won-text"></b> <b class="translation" data-translation="won" id="won-text"></b>
</div> </div>

View File

@ -21,14 +21,15 @@
</span> </span>
</div> </div>
<div class='height-30 flex-center fill-me'> <div class='height-30 flex-center fill-me'>
<button class='button grow text-center' id='play-button'><span class="translation" data-translation="play"></span></button> <button class='button grow text-center' id='play-button'><span class="translation"
data-translation="play"></span></button>
<div class='max-width line-height-1 fill-me vertical'> <div class='max-width line-height-1 fill-me vertical'>
<label class="switch"> <label class="switch">
<div data-view="../../img/speaker.svg"></div> <div data-view="../../img/speaker.svg"></div>
<input type="checkbox" class="setting" id="play-sound"> <input type="checkbox" class="setting" id="play-sound">
<span class="slider"></span> <span class="slider"></span>
</label> </label>
<div class="grow center" id = "share-button"><span data-view="../../img/share.svg"></span></div> <div class="grow center" id="share-button"><span data-view="../../img/share.svg"></span></div>
<label class="switch right"> <label class="switch right">
<div data-view="../../img/music.svg"></div> <div data-view="../../img/music.svg"></div>
<input type="checkbox" class="setting" id="play-music"> <input type="checkbox" class="setting" id="play-music">

View File

@ -12,7 +12,7 @@
content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval'; content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval';
style-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';
media-src *; img-src 'self' * data: cdvfile: content:; media-src *; img-src 'self' * data: cdvfile: content:;
script-src 'self' data: 'unsafe-eval'" ;> script-src 'self' data: 'unsafe-eval'">
<!--Element, mit dem Foundation die ViewQueries mitteilt--> <!--Element, mit dem Foundation die ViewQueries mitteilt-->
<meta class='foundation-mq'> <meta class='foundation-mq'>

View File

@ -41,9 +41,9 @@ export class WordRotatorSettingFragment extends AbstractFragment {
playMusicButton.addEventListener("change", async () => { playMusicButton.addEventListener("change", async () => {
await NativeStoragePromise.setItem("play-music", (playMusicButton.checked) ? "1" : "0"); await NativeStoragePromise.setItem("play-music", (playMusicButton.checked) ? "1" : "0");
let soundManager = SoundManager.getInstance(); let soundManager = SoundManager.getInstance();
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC); soundManager.set({muted: !playMusicButton.checked}, "music");
if (playMusicButton.checked) { if (playMusicButton.checked) {
await soundManager.play(SoundManager.CHANNELS.MUSIC); await soundManager.play("music", undefined);
} }
//TODO [MIG] Matomo //TODO [MIG] Matomo
@ -55,7 +55,7 @@ export class WordRotatorSettingFragment extends AbstractFragment {
playSoundButton.addEventListener("change", async () => { playSoundButton.addEventListener("change", async () => {
await NativeStoragePromise.setItem("play-sound", (playSoundButton.checked) ? "1" : "0"); await NativeStoragePromise.setItem("play-sound", (playSoundButton.checked) ? "1" : "0");
let soundManager = SoundManager.getInstance(); let soundManager = SoundManager.getInstance();
soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND); soundManager.set({muted: !playSoundButton.checked}, "sound");
//TODO [MIG] Matomo //TODO [MIG] Matomo
Matomo.push(["trackEvent", "MainMenu", "PlaySound", "Play Sound", (playSoundButton.checked) ? 1 : 0]); Matomo.push(["trackEvent", "MainMenu", "PlaySound", "Play Sound", (playSoundButton.checked) ? 1 : 0]);

View File

@ -96,9 +96,9 @@ export class LevelSite extends MenuSite {
audio: coinSound, audio: coinSound,
muted: ((await NativeStoragePromise.getItem("play-sound", "1")) !== "1"), muted: ((await NativeStoragePromise.getItem("play-sound", "1")) !== "1"),
volume: 0.7 volume: 0.7
}, SoundManager.CHANNELS.SOUND); }, "sound");
soundManager.resume(SoundManager.CHANNELS.MUSIC); soundManager.resume("music");
return super.onConstruct(args); return super.onConstruct(args);
} }
@ -132,8 +132,8 @@ export class LevelSite extends MenuSite {
let wonText = this.findBy("#won-text"); let wonText = this.findBy("#won-text");
let scaleHelper = new ScaleHelper(); let scaleHelper = new ScaleHelper();
this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2); this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2, undefined, undefined, undefined);
this.wonTextScaler = await scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5); this.wonTextScaler = await scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5, undefined);
this.wonText = wonText; this.wonText = wonText;
this.wonText.style.fontSize = "0"; this.wonText.style.fontSize = "0";
@ -216,6 +216,8 @@ export class LevelSite extends MenuSite {
this.showLoadingSymbol(); this.showLoadingSymbol();
try { try {
let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES); let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);
// let levelData = await LevelData.findById(34);
// this.level = null;
if (Helper.isNull(levelData)) { if (Helper.isNull(levelData)) {
this.startEndSite(); this.startEndSite();
@ -274,7 +276,7 @@ export class LevelSite extends MenuSite {
} }
async onStart(args) { async onStart(args) {
this.setTitle("WR"); this.setTitle("WR", undefined);
Matomo.update("Level Sites"); Matomo.update("Level Sites");
let res = super.onStart(args); let res = super.onStart(args);
@ -290,7 +292,7 @@ export class LevelSite extends MenuSite {
audio: coinSound, audio: coinSound,
muted: (await NativeStoragePromise.getItem("play-sound", "1") !== "1"), muted: (await NativeStoragePromise.getItem("play-sound", "1") !== "1"),
volume: 0.7 volume: 0.7
}, SoundManager.CHANNELS.SOUND); }, "sound");
await this.tutorial(); await this.tutorial();
@ -319,7 +321,7 @@ export class LevelSite extends MenuSite {
let coinsBefore = 0; let coinsBefore = 0;
let soundManager = SoundManager.getInstance(); let soundManager = SoundManager.getInstance();
let audioOptions = soundManager.get(SoundManager.CHANNELS.SOUND); let audioOptions = soundManager.get("sound");
this.coinPromise = this.coinPromise.then(async () => { this.coinPromise = this.coinPromise.then(async () => {
coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0")); coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0"));
@ -350,7 +352,7 @@ export class LevelSite extends MenuSite {
//TODO animationen einbauen //TODO animationen einbauen
coinElem.style.opacity = "1"; coinElem.style.opacity = "1";
soundManager.play(SoundManager.CHANNELS.SOUND); soundManager.play("sound", undefined);
this.wonParams.coinCounterTimer = setTimeout(() => { this.wonParams.coinCounterTimer = setTimeout(() => {
if (!this.wonParams.aborted) { if (!this.wonParams.aborted) {
@ -375,6 +377,10 @@ export class LevelSite extends MenuSite {
this.continueButtonScaler(); this.continueButtonScaler();
this.levelScaler(); this.levelScaler();
// Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => {
// this.levelScaler();
// });
Matomo.push(["trackEvent", "LevelSite", "LevelWon", "Coins", parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0"))]); Matomo.push(["trackEvent", "LevelSite", "LevelWon", "Coins", parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0"))]);
let leafs = level.getLeafSegments(); let leafs = level.getLeafSegments();

View File

@ -83,9 +83,9 @@ export class MainMenuSite extends MenuSite {
playMusicButton.checked = (await NativeStoragePromise.getItem("play-music", "1") === "1"); playMusicButton.checked = (await NativeStoragePromise.getItem("play-music", "1") === "1");
playMusicButton.addEventListener("change", async () => { playMusicButton.addEventListener("change", async () => {
await NativeStoragePromise.setItem("play-music", (playMusicButton.checked) ? "1" : "0"); await NativeStoragePromise.setItem("play-music", (playMusicButton.checked) ? "1" : "0");
soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC); soundManager.set({muted: !playMusicButton.checked}, "music");
if (playMusicButton.checked) { if (playMusicButton.checked) {
await soundManager.play(SoundManager.CHANNELS.MUSIC); await soundManager.play("music", undefined);
} }
//TODO [MIG] Matomo //TODO [MIG] Matomo
@ -96,17 +96,13 @@ export class MainMenuSite extends MenuSite {
playSoundButton.checked = (await NativeStoragePromise.getItem("play-sound", "1") === "1"); playSoundButton.checked = (await NativeStoragePromise.getItem("play-sound", "1") === "1");
playSoundButton.addEventListener("change", async () => { playSoundButton.addEventListener("change", async () => {
await NativeStoragePromise.setItem("play-sound", (playSoundButton.checked) ? "1" : "0"); await NativeStoragePromise.setItem("play-sound", (playSoundButton.checked) ? "1" : "0");
soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND); soundManager.set({muted: !playSoundButton.checked}, "sound");
//TODO [MIG] Matomo
Matomo.push(["trackEvent", "MainMenu", "PlaySound", "Play Sound", (playSoundButton.checked) ? 1 : 0]);
}); });
this.findBy("#share-button").addEventListener("click", () => { this.findBy("#share-button").addEventListener("click", () => {
new ShareManager().share(Translator.getInstance().translate("share-text", [window.location])); new ShareManager().share(Translator.getInstance().translate("share-text", [window.location]));
}); });
return res; return res;
// this.findBy("#share-buttons").appendChild(ShareManager.generateDefaultShareElement("https://wordrotator.silas.link"));
} }
async onStart(args) { async onStart(args) {

View File

@ -76,7 +76,7 @@ export class TutorialSite extends MenuSite {
let pointerSegment = rotatableSegments[2]; let pointerSegment = rotatableSegments[2];
pointerSegment.element.appendChild(pointer); pointerSegment.element.appendChild(pointer);
this.find(".help-action").addEventListener("click", () => { this.findBy(".help-action").addEventListener("click", () => {
TutorialSite.help(level2); TutorialSite.help(level2);
}) })

View File

@ -12,10 +12,13 @@
} }
.jump-animation { .jump-animation {
animation-name: jump-animation; //> .leaf-element {
animation-duration: 0.4s; animation-name: jump-animation;
animation-fill-mode: none; animation-duration: 0.4s;
animation-timing-function: linear; animation-fill-mode: none;
animation-timing-function: linear;
animation-delay: inherit;
//}
} }
$deg: 10deg; $deg: 10deg;

View File

@ -13,6 +13,9 @@ $accentColor: #d3e7eb;
$textColor: white; $textColor: white;
$svgColor: black; $svgColor: black;
$secondaryBackgroundColor: rgba(66, 112, 129, 1);
$secondaryBackgroundColor: rgba(66, 112, 129, 0.95);
// Blau Invers // Blau Invers
//$primaryColor: #4d575a; //$primaryColor: #4d575a;
//$secondaryColor: #427081; //$secondaryColor: #427081;
@ -49,7 +52,16 @@ $svgColor: black;
//$svgColor: white; //$svgColor: white;
body.theme-blue{ body.theme-blue{
background: $primaryColor; background: repeating-linear-gradient(
300deg,
$primaryColor,
$primaryColor 9%,
$secondaryBackgroundColor 13.5%,
$secondaryBackgroundColor 21.5%,
$primaryColor 26%,
);
//background: $primaryColor;
color: $textColor; color: $textColor;
label{ label{

View File

@ -299,7 +299,6 @@ $coinTowerDimension: 28px;
} }
.segment { .segment {
vertical-align: top; vertical-align: top;
white-space: initial; white-space: initial;
cursor: pointer; cursor: pointer;
@ -353,12 +352,13 @@ $coinTowerDimension: 28px;
} }
&.segment-parent { &.segment-parent {
border: solid 1px #a9a9a9; border: solid 2px #a9a9a9;
border-radius: 3px; border-radius: 3px;
padding: 1px; padding: 1px;
margin: 1px;
&.layer-2 { &.layer-2 {
border: solid 3px #000000; border: solid 4px #000000;
} }
} }
@ -372,6 +372,10 @@ $coinTowerDimension: 28px;
} }
} }
.help-action{
border-radius: 4px;
}
//Won-screen //Won-screen
#site > :not(.won) { #site > :not(.won) {
.show-when-won { .show-when-won {
@ -401,6 +405,28 @@ $coinTowerDimension: 28px;
text-shadow: $text-shadow; text-shadow: $text-shadow;
} }
.segment:not(.segment-row):not(.segment-triangle):not(.rotating) {
@for $i from 1 through length($rotationDegrees) {
&.rotate-#{nth($rotationDegrees, $i)} {
//transform: rotate(#{nth($rotationDegrees, $i)}deg);
transform: none;
> .child-container {
> .segment {
//transform: rotate(#{360- nth($rotationDegrees, $i)}deg);
transform: none;
@for $j from 1 through length($rotationDegrees) {
&.rotate-#{nth($rotationDegrees, $j)} {
transform: none;
}
}
}
}
}
}
}
} }
.text-right { .text-right {
@ -408,6 +434,7 @@ $coinTowerDimension: 28px;
} }
#continue-button { #continue-button {
border-radius: 4px;
margin-bottom: 2px; margin-bottom: 2px;
@include breakpoint(small down) { @include breakpoint(small down) {
margin-bottom: 0; margin-bottom: 0;
@ -416,6 +443,7 @@ $coinTowerDimension: 28px;
} }
#play-button { #play-button {
border-radius: 4px;
@include breakpoint(small down) { @include breakpoint(small down) {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }

View File

@ -55,5 +55,7 @@
"tutorial-1": "Klicke auf ein Feld, um dieses rotieren zu lassen! Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.", "tutorial-1": "Klicke auf ein Feld, um dieses rotieren zu lassen! Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.",
"tutorial-2": "Die Hilfe löst ein Segment, kostet aber 25 Münzen. Du erhältst 5 Münzen pro gewonnenes Level.", "tutorial-2": "Die Hilfe löst ein Segment, kostet aber 25 Münzen. Du erhältst 5 Münzen pro gewonnenes Level.",
"tutorial-3": "Große Segmente drehst du, indem du diese ziehst.", "tutorial-3": "Große Segmente drehst du, indem du diese ziehst.",
"you solved the tutorial level!": "Du hast das Tutorial-Level gelöst!" "you solved the tutorial level!": "Du hast das Tutorial-Level gelöst!",
"WR": "WR",
"Spielregeln": "Spielregeln"
} }

View File

@ -49,5 +49,14 @@
"privacy policy accepted": " akzeptiert", "privacy policy accepted": " akzeptiert",
"message": "Nachricht", "message": "Nachricht",
"send": "Senden", "send": "Senden",
"the message was sent": "Die Nachricht wurde gesendet." "the message was sent": "Die Nachricht wurde gesendet.",
"tutorial": "Rules",
"tutorial-1": "Click on a field to rotate it! To win, rotate the segments so that you can read two words.",
"tutorial-2": "The help solves a segment, but costs 25 coins. You receive 5 coins per level won.",
"tutorial-3": "You rotate large segments by dragging them.",
"you solved the tutorial level!": "You have solved the tutorial level!",
"WR": "WR",
"Spielregeln": "Rules"
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="18" id="link.silas.wordrotator" version="1.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget android-versionCode="19" id="link.silas.wordrotator" version="1.3.2" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>WordRotator</name> <name>WordRotator - Test</name>
<description> <description>
A word-game A word-game
</description> </description>

View File

@ -0,0 +1 @@
<div class="image-selection"> <div class="flex-container"> <div class="image-selection-category-container grow"> <div class="image-selection-category"> <div class="image-selection-category-name"></div> <div class="image-selection-image-container"> <img class="image-selection-image"> <span class="image-selection-image-name"></span> </div> </div> </div> <div class="image-selection-preview"><button class="button height-100">Drag & Drop Image for own upload</button></div> </div> <input type="hidden" class="image-selection-value"> </div>

View File

@ -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-column-template" class="segment segment-column"> <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="height-20 no-transition tutorial-text center flex-center hidden"> <div class="step-1 hidden translation" data-translation="tutorial-step-1"></div> <div class="step-2 hidden translation" data-translation="tutorial-step-2"></div> <div class="step-3 hidden translation" data-translation="tutorial-step-3"></div> <div class="step-4 hidden translation" 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 class="translation" 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 translation" 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-column-template" class="segment segment-column"> <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="height-20 no-transition tutorial-text center flex-center hidden"> <div class="step-1 hidden translation" data-translation="tutorial-step-1"></div> <div class="step-2 hidden translation" data-translation="tutorial-step-2"></div> <div class="step-3 hidden translation" data-translation="tutorial-step-3"></div> <div class="step-4 hidden translation" data-translation="tutorial-step-4"></div> </div> <div class="height-20 show-when-won center flex-center fill-me" style="min-height:60px"> <div class="grow max-width"> <b class="translation" 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 translation" id="continue-button" data-translation="continue"></button> </div> </div> <div class="tutorial-blanket"></div> </div>

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<!doctype html><html><head><link rel="icon" type="image/png" href="img/logo.png"><meta charset="utf-8"/><meta name="format-detection" content="telephone=no"><meta name="msapplication-tap-highlight" content="no"><meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' * data: cdvfile: content:; script-src 'self' data: 'unsafe-eval'" ;><meta class="foundation-mq"><link rel="stylesheet" href="index.css"><title>WordRotator</title><script src="scripts/sql-wasm.js"></script><script src="scripts/localforage.js"></script></head><body class="theme-blue"><div id="toast-container"><div class="toast toast-template" style="opacity:0"><span class="message"></span></div></div><div id="site"><div class="loader overlay"><svg viewBox="0 0 32 32" width="32" height="32"><circle class="spinner" cx="16" cy="16" r="14" fill="none" style="stroke:#000"></circle></svg></div></div><script src="cordova.js"></script><script src="bundle.js"></script></body></html> <!doctype html><html><head><link rel="icon" type="image/png" href="img/logo.png"><meta charset="utf-8"/><meta name="format-detection" content="telephone=no"><meta name="msapplication-tap-highlight" content="no"><meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' * data: cdvfile: content:; script-src 'self' data: 'unsafe-eval'"><meta class="foundation-mq"><link rel="stylesheet" href="index.css"><title>WordRotator</title><script src="scripts/sql-wasm.js"></script><script src="scripts/localforage.js"></script></head><body class="theme-blue"><div id="toast-container"><div class="toast toast-template" style="opacity:0"><span class="message"></span></div></div><div id="site"><div class="loader overlay"><svg viewBox="0 0 32 32" width="32" height="32"><circle class="spinner" cx="16" cy="16" r="14" fill="none" style="stroke:#000"></circle></svg></div></div><script src="cordova.js"></script><script src="bundle.js"></script></body></html>

View File

@ -1,8 +1,8 @@
{ {
"background_color": "#FFF", "background_color": "#FFF",
"display": "standalone", "display": "standalone",
"name": "WordRotator", "name": "WordRotator - Test",
"short_name": "WordRotator", "short_name": "WordRotator - Test",
"version": "link.silas.wordrotator", "version": "link.silas.wordrotator",
"description": "A word-game", "description": "A word-game",
"author": "Silas Günther", "author": "Silas Günther",

Binary file not shown.

View File

@ -32,7 +32,7 @@ exports.config = {
bail: 0, bail: 0,
baseUrl: "http://127.0.0.1:8000", baseUrl: "http://127.0.0.1:8001",
waitforTimeout: 10000, waitforTimeout: 10000,

View File

@ -8,7 +8,8 @@
"experimentalDecorators": true, "experimentalDecorators": true,
"allowSyntheticDefaultImports": true, "allowSyntheticDefaultImports": true,
"sourceMap": true, "sourceMap": true,
"allowJs": true "allowJs": true,
"skipLibCheck": true
}, },
"include": [ "include": [
"./src/client/**/*", "./src/client/**/*",

View File

@ -91,18 +91,18 @@ let moduleExports = {
new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns: ['**/*', '!**/.gitkeep']}), new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns: ['**/*', '!**/.gitkeep']}),
new CopyWebpackPlugin([ new CopyWebpackPlugin([
{ {
from: path.resolve("./node_modules/sql.js/dist/sql-wasm.js"), from: path.resolve("./node_modules/sql.js/dist/sql-wasm.js"),
to: "scripts/" to: "scripts/"
}, },
{ {
from: path.resolve("./node_modules/sql.js/dist/sql-wasm.wasm"), from: path.resolve("./node_modules/sql.js/dist/sql-wasm.wasm"),
to: "sql-wasm.wasm" to: "sql-wasm.wasm"
}, },
{ {
from: path.resolve("./node_modules/localforage/dist/localforage.js"), from: path.resolve("./node_modules/localforage/dist/localforage.js"),
to: "scripts/" to: "scripts/"
},] },]
), ),
new webpack.NormalModuleReplacementPlugin(/typeorm$/, function (result) { new webpack.NormalModuleReplacementPlugin(/typeorm$/, function (result) {
@ -161,7 +161,8 @@ let moduleExports = {
urlFilter: (attribute, value, resourcePath) => { urlFilter: (attribute, value, resourcePath) => {
return !value.endsWith(".js") && !value.endsWith(".css"); return !value.endsWith(".js") && !value.endsWith(".css");
} }
} },
esModule: false
} }
} }
], ],
@ -204,7 +205,8 @@ let moduleExports = {
urlFilter: (attribute, value, resoucePath) => { urlFilter: (attribute, value, resoucePath) => {
return true; return true;
} }
} },
esModule: false
} }
} }
], ],
@ -253,7 +255,10 @@ let moduleExports = {
loader: 'extract-loader' loader: 'extract-loader'
}, },
{ {
loader: 'css-loader' loader: 'css-loader',
options: {
esModule: false
}
}, },
{ {
//Compiliert zu CSS //Compiliert zu CSS