From 6c7336c7bb08d5b379b13f068cfffe41478629c3 Mon Sep 17 00:00:00 2001 From: pepaskopec-blip Date: Fri, 18 Sep 2026 14:01:01 +0200 Subject: [PATCH] Add a SwiftUI iOS app that plays the same maturita content. Co-authored-by: Cursor --- .github/workflows/build.yml | 22 +- .gitignore | 7 + Makefile | 6 +- README.md | 32 +- installers/maturita-installer-ios.zip | Bin 0 -> 1271 bytes installers/maturita-ios.html | 72 ++ installers/pack-installer-zips.sh | 5 + ios/Maturita.xcodeproj/project.pbxproj | 370 ++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Maturita.xcscheme | 77 ++ ios/Maturita/AppModel.swift | 113 +++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/AppIcon.png | Bin 0 -> 373417 bytes .../AppIcon.appiconset/Contents.json | 14 + ios/Maturita/Assets.xcassets/Contents.json | 6 + ios/Maturita/Data/Answers.swift | 60 ++ ios/Maturita/Data/Content.swift | 95 ++ ios/Maturita/Data/JSON.swift | 102 +++ ios/Maturita/Data/ProgressStore.swift | 81 ++ ios/Maturita/Data/Theme.swift | 173 ++++ ios/Maturita/Info.plist | 24 + ios/Maturita/MaturitaApp.swift | 154 ++++ ios/Maturita/Route.swift | 98 ++ ios/Maturita/UI/Components.swift | 276 ++++++ ios/Maturita/UI/Exercises.swift | 608 +++++++++++++ ios/Maturita/UI/ExercisesMore.swift | 857 ++++++++++++++++++ ios/Maturita/UI/Icons.swift | 304 +++++++ ios/Maturita/UI/PathMap.swift | 63 ++ ios/Maturita/UI/Screens.swift | 698 ++++++++++++++ ios/Maturita/Update/Updater.swift | 113 +++ scripts/bundle-ios.sh | 38 + scripts/extract-android-content.py | 14 +- src/i18n.c | 8 + 33 files changed, 4498 insertions(+), 10 deletions(-) create mode 100644 installers/maturita-installer-ios.zip create mode 100644 installers/maturita-ios.html create mode 100644 ios/Maturita.xcodeproj/project.pbxproj create mode 100644 ios/Maturita.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Maturita.xcodeproj/xcshareddata/xcschemes/Maturita.xcscheme create mode 100644 ios/Maturita/AppModel.swift create mode 100644 ios/Maturita/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/Maturita/Assets.xcassets/AppIcon.appiconset/AppIcon.png create mode 100644 ios/Maturita/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Maturita/Assets.xcassets/Contents.json create mode 100644 ios/Maturita/Data/Answers.swift create mode 100644 ios/Maturita/Data/Content.swift create mode 100644 ios/Maturita/Data/JSON.swift create mode 100644 ios/Maturita/Data/ProgressStore.swift create mode 100644 ios/Maturita/Data/Theme.swift create mode 100644 ios/Maturita/Info.plist create mode 100644 ios/Maturita/MaturitaApp.swift create mode 100644 ios/Maturita/Route.swift create mode 100644 ios/Maturita/UI/Components.swift create mode 100644 ios/Maturita/UI/Exercises.swift create mode 100644 ios/Maturita/UI/ExercisesMore.swift create mode 100644 ios/Maturita/UI/Icons.swift create mode 100644 ios/Maturita/UI/PathMap.swift create mode 100644 ios/Maturita/UI/Screens.swift create mode 100644 ios/Maturita/Update/Updater.swift create mode 100755 scripts/bundle-ios.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56f5d3d..e1d5293 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -194,9 +194,29 @@ jobs: name: maturita-android path: dist-android/maturita-android.apk + ios: + name: iOS IPA + runs-on: macos-14 + steps: + - uses: actions/checkout@v4 + + - name: Extract content and build IPA + env: + COMMIT: ${{ github.sha }} + DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer + run: | + chmod +x scripts/bundle-ios.sh + ./scripts/bundle-ios.sh + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: maturita-ios + path: dist-ios/maturita-ios.ipa + publish: name: Publish to builds branch - needs: [linux, windows, macos, android] + needs: [linux, windows, macos, android, ios] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index fd0137f..5437850 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,10 @@ android/*.iml android/.cxx/ android/.local-sdk/ android/app/src/main/assets/content.json + +# iOS +ios/DerivedData/ +ios/build/ +ios/Payload/ +ios/Maturita/content.json +ios/**/xcuserdata/ diff --git a/Makefile b/Makefile index b911362..7f6505f 100644 --- a/Makefile +++ b/Makefile @@ -119,4 +119,8 @@ android: python3 scripts/extract-android-content.py cd android && ./gradlew :app:assembleRelease -.PHONY: all clean run bundle installer-zips android +ios: + chmod +x scripts/bundle-ios.sh + ./scripts/bundle-ios.sh + +.PHONY: all clean run bundle installer-zips android ios diff --git a/README.md b/README.md index b9acd25..a45ce90 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ větve. | Windows (x64) | [maturita-installer-windows.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-windows.zip) | Rozbalit a dvojklik; u SmartScreenu **Další informace → Přesto spustit** | | Linux (x86_64) | [maturita-installer-linux.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-linux.zip) | Rozbalit a dvojklik na instalátor | | Android (8+) | [maturita-installer-android.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-android.zip) | Rozbalit, otevřít **Stahnout maturita.C.html** a nainstalovat APK (neznámé zdroje) | +| iOS (16+) | [maturita-installer-ios.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-ios.zip) | Rozbalit, otevřít **Jak nainstalovat maturita.C.html**. Nejjednodušší: Xcode na Macu, nebo IPA přes AltStore | Kam se to nainstaluje: `/Applications` nebo `~/Applications` (macOS), `%LOCALAPPDATA%\Programs\Maturita` (Windows), `~/Applications` (Linux). @@ -51,9 +52,10 @@ spolehlivější instalátor výše, nebo stažení přímo z té stránky větv - [maturita-windows-x64.zip](https://github.com/pepaskopec-blip/maturita.c/raw/builds/maturita-windows-x64.zip) - [maturita-linux-x86_64.AppImage](https://github.com/pepaskopec-blip/maturita.c/raw/builds/maturita-linux-x86_64.AppImage) - [maturita-android.apk](https://github.com/pepaskopec-blip/maturita.c/raw/refs/heads/builds/maturita-android.apk) +- [maturita-ios.ipa](https://github.com/pepaskopec-blip/maturita.c/raw/refs/heads/builds/maturita-ios.ipa) Postup a nastavení se ukládají vedle `.app` / složky / AppImage do `progress/`. -Na Androidu do úložiště aplikace (stejné statistiky, témata a jazyk). +Na Androidu a iOS do úložiště aplikace (stejné statistiky, témata a jazyk). Intel Mac, jiná architektura nebo úpravy kódu → [sestavení ze zdroje](#sestavení-ze-zdroje). @@ -138,10 +140,11 @@ make bundle # dist/maturita.exe jde spustit i z Průzkumník ``` src/ C zdroje a maturita.h android/ Jetpack Compose přehrávač (stejný obsah) +ios/ SwiftUI přehrávač (stejný obsah) data/ style.css, share/, podpisy, Windows .rc assets/ zdrojová ikona a screenshoty installers/ instalátory, které stáhnou aktuální build -scripts/ balení AppImage, .app a extract-android-content.py +scripts/ balení AppImage, .app, IPA a extract-android-content.py .github/workflows/ CI: push na main → větev builds progress/ vzniká za běhu (cvičení, nastavení) ``` @@ -157,6 +160,15 @@ cd android nebo z kořene `make android`. +iOS ze zdroje (Xcode 16, iOS 16+): + +```bash +python3 scripts/extract-android-content.py +open ios/Maturita.xcodeproj +# Signing: vlastní Team, Run na iPhone +# nebo: make ios # unsigned IPA v dist-ios/maturita-ios.ipa +``` + Licence: [GPL-3.0](LICENSE). --- @@ -186,6 +198,7 @@ branch-named file. | Windows (x64) | [maturita-installer-windows.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-windows.zip) | Unzip and double-click; if SmartScreen appears, **More info → Run anyway** | | Linux (x86_64) | [maturita-installer-linux.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-linux.zip) | Unzip and double-click the installer | | Android (8+) | [maturita-installer-android.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-android.zip) | Unzip, open **Stahnout maturita.C.html**, then install the APK (unknown sources) | +| iOS (16+) | [maturita-installer-ios.zip](https://github.com/pepaskopec-blip/maturita.c/raw/main/installers/maturita-installer-ios.zip) | Unzip, open **Jak nainstalovat maturita.C.html**. Easiest: Xcode on a Mac, or the IPA via AltStore | Install locations: `/Applications` or `~/Applications` (macOS), `%LOCALAPPDATA%\Programs\Maturita` (Windows), `~/Applications` (Linux). @@ -206,9 +219,10 @@ above, or download from that branch page: - [maturita-windows-x64.zip](https://github.com/pepaskopec-blip/maturita.c/raw/builds/maturita-windows-x64.zip) - [maturita-linux-x86_64.AppImage](https://github.com/pepaskopec-blip/maturita.c/raw/builds/maturita-linux-x86_64.AppImage) - [maturita-android.apk](https://github.com/pepaskopec-blip/maturita.c/raw/refs/heads/builds/maturita-android.apk) +- [maturita-ios.ipa](https://github.com/pepaskopec-blip/maturita.c/raw/refs/heads/builds/maturita-ios.ipa) Progress and settings live in `progress/` next to the `.app` / folder / -AppImage. On Android they stay in app storage (same stats, themes, language). +AppImage. On Android and iOS they stay in app storage (same stats, themes, language). Intel Mac, another architecture, or hacking on the code → [build from source](#build-from-source). @@ -294,10 +308,11 @@ make bundle # dist/maturita.exe can be double-clicked ``` src/ C sources and maturita.h android/ Jetpack Compose player (same content) +ios/ SwiftUI player (same content) data/ style.css, share/, signing files, Windows .rc assets/ source icon and screenshots installers/ fetch-the-latest installers -scripts/ AppImage / .app bundlers and extract-android-content.py +scripts/ AppImage / .app / IPA bundlers and extract-android-content.py .github/workflows/ CI: push to main → builds branch progress/ created at runtime (exercises, settings) ``` @@ -313,4 +328,13 @@ cd android or `make android` from the repo root. +iOS from source (Xcode 16, iOS 16+): + +```bash +python3 scripts/extract-android-content.py +open ios/Maturita.xcodeproj +# Signing: your Team, Run on iPhone +# or: make ios # unsigned IPA at dist-ios/maturita-ios.ipa +``` + License: [GPL-3.0](LICENSE). diff --git a/installers/maturita-installer-ios.zip b/installers/maturita-installer-ios.zip new file mode 100644 index 0000000000000000000000000000000000000000..99dd15c097b94527cd294452db59211cc9c81451 GIT binary patch literal 1271 zcmWIWW@Zs#U|`^2Fv~ZJJ^y{jYDE?XhHef91_cHg2Cu|yg}lVfyyB9?ocyxH5{2Bv zlG38gl0-dcy^NCFoX`+X24)NOwOJrsTEWf0$nuqufdOpd+_1BG(&hsDo@*|PR+u1= zecfxW*|cz`J0|T49ywPWFUswF;^E!tt>>{W$MS>n6UL@_Ul?59v)<}n`~6ixeacC< z*^7h}3Qzw0x$kG2^3wRf1>asB)_=ZU@q6nm8_&by8q3ljckI^4Q4pT2&XCzSkMaD> z(ig`ApDu5ne(`T(8f)L;rAJO*ijZeCzqMHHu(xK7o!E{kGVEUuGkWOmP04y-5o{r6 zmbm8&mpbd`sZ-}2UB6%p+moBFvrNxn8PYB%TDp(SedSD(USP5=6JJo z>Kl%Ia+^NnmF2(k7fX-J-^lsW>nKO~GM@O7dvfdlG-z5bo->E5b({4`iTE>XR&J>f z_+$69#HyAhU!vi?@|hmd4EAZ9kvj!tTpS(@-(vr-JCM7O+Reyd6l%D(CrC+CgtK-cr7cwKYSbCR6N|pYW-n#U& zkD*@TIWacBtsC69ENttg4_D7QADE%M>TK0!wdB4Op5m7Bp6eH7{=^ukZ3sD2Da&*% zbK&%drdt_u|K5DI=kMcp!c_}6%IBZ(GycKHQu*catjJz{(^ZW#wJa;oi=BFr#i!YP z=TV8w(|gnNrl=Ud{H)czQ*)A#_cO6&E_NrT=uFNPtSE^Wn5ULANlm0!`p=oiMV}*` zq(1mBDLlFR+%K)1K-TA(LGtgc|FMW)Ik1FZCtNbB;Plz|#XlO>+}Lit{Ke9lyHdn-?j}k& zf6+Hju)cla^PcUhC%h!zPvB{c5jwb8?TK**M|hyeeNMrz)-x5qS-z6>m}W3hI`vAz z1tr{ H#=rmoIaxU5 literal 0 HcmV?d00001 diff --git a/installers/maturita-ios.html b/installers/maturita-ios.html new file mode 100644 index 0000000..fcc5eac --- /dev/null +++ b/installers/maturita-ios.html @@ -0,0 +1,72 @@ + + + + + + maturita.C pro iOS + + + +

maturita.C pro iPhone

+

+ Apple nepovolí instalaci jako Android APK. Nejjednodušší cesta je Mac + s Xcode a vlastní iPhone (bezplatný Apple účet stačí na 7 dní). +

+
    +
  1. Naklonuj maturita.c
  2. +
  3. Otevři ios/Maturita.xcodeproj
  4. +
  5. V Signing vyber svůj Team
  6. +
  7. Připoj iPhone a stiskni Run
  8. +
+

+ IPA z větve builds jde nahrát i přes AltStore nebo Sideloadly + (unsigned balíček, potřebuješ nástroj na sideload). +

+

+ + Stáhnout IPA + +

+

+ Když odkaz hlásí 404, otevři + větev builds + a stáhni maturita-ios.ipa odtud. +

+ + + diff --git a/installers/pack-installer-zips.sh b/installers/pack-installer-zips.sh index fa54bed..8b870c4 100755 --- a/installers/pack-installer-zips.sh +++ b/installers/pack-installer-zips.sh @@ -32,3 +32,8 @@ cp maturita-android.html "$tmp/Stahnout maturita.C.html" rm -f "$here/maturita-installer-android.zip" (cd "$tmp" && zip -q -FS "$here/maturita-installer-android.zip" \ "Stahnout maturita.C.html") + +cp maturita-ios.html "$tmp/Jak nainstalovat maturita.C.html" +rm -f "$here/maturita-installer-ios.zip" +(cd "$tmp" && zip -q -FS "$here/maturita-installer-ios.zip" \ + "Jak nainstalovat maturita.C.html") diff --git a/ios/Maturita.xcodeproj/project.pbxproj b/ios/Maturita.xcodeproj/project.pbxproj new file mode 100644 index 0000000..85bfdc9 --- /dev/null +++ b/ios/Maturita.xcodeproj/project.pbxproj @@ -0,0 +1,370 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + A101000000000000000001 /* MaturitaApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000001 /* MaturitaApp.swift */; }; + A101000000000000000002 /* AppModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000002 /* AppModel.swift */; }; + A101000000000000000003 /* Route.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000003 /* Route.swift */; }; + A101000000000000000004 /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000004 /* JSON.swift */; }; + A101000000000000000005 /* Content.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000005 /* Content.swift */; }; + A101000000000000000006 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000006 /* Theme.swift */; }; + A101000000000000000007 /* Answers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000007 /* Answers.swift */; }; + A101000000000000000008 /* ProgressStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000008 /* ProgressStore.swift */; }; + A101000000000000000009 /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000009 /* Updater.swift */; }; + A101000000000000000010 /* Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000010 /* Components.swift */; }; + A101000000000000000011 /* Icons.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000011 /* Icons.swift */; }; + A101000000000000000012 /* PathMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000012 /* PathMap.swift */; }; + A101000000000000000013 /* Screens.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000013 /* Screens.swift */; }; + A101000000000000000014 /* Exercises.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000014 /* Exercises.swift */; }; + A101000000000000000015 /* ExercisesMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A201000000000000000015 /* ExercisesMore.swift */; }; + A101000000000000000016 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A201000000000000000016 /* Assets.xcassets */; }; + A101000000000000000017 /* content.json in Resources */ = {isa = PBXBuildFile; fileRef = A201000000000000000017 /* content.json */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + A201000000000000000001 /* MaturitaApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaturitaApp.swift; sourceTree = ""; }; + A201000000000000000002 /* AppModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppModel.swift; sourceTree = ""; }; + A201000000000000000003 /* Route.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Route.swift; sourceTree = ""; }; + A201000000000000000004 /* JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSON.swift; sourceTree = ""; }; + A201000000000000000005 /* Content.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Content.swift; sourceTree = ""; }; + A201000000000000000006 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + A201000000000000000007 /* Answers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Answers.swift; sourceTree = ""; }; + A201000000000000000008 /* ProgressStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressStore.swift; sourceTree = ""; }; + A201000000000000000009 /* Updater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Updater.swift; sourceTree = ""; }; + A201000000000000000010 /* Components.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Components.swift; sourceTree = ""; }; + A201000000000000000011 /* Icons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Icons.swift; sourceTree = ""; }; + A201000000000000000012 /* PathMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PathMap.swift; sourceTree = ""; }; + A201000000000000000013 /* Screens.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Screens.swift; sourceTree = ""; }; + A201000000000000000014 /* Exercises.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Exercises.swift; sourceTree = ""; }; + A201000000000000000015 /* ExercisesMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExercisesMore.swift; sourceTree = ""; }; + A201000000000000000016 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A201000000000000000017 /* content.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = content.json; sourceTree = ""; }; + A201000000000000000018 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A301000000000000000001 /* Maturita.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Maturita.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A401000000000000000001 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A501000000000000000001 = { + isa = PBXGroup; + children = ( + A501000000000000000002 /* Maturita */, + A501000000000000000006 /* Products */, + ); + sourceTree = ""; + }; + A501000000000000000002 /* Maturita */ = { + isa = PBXGroup; + children = ( + A201000000000000000001 /* MaturitaApp.swift */, + A201000000000000000002 /* AppModel.swift */, + A201000000000000000003 /* Route.swift */, + A501000000000000000003 /* Data */, + A501000000000000000004 /* Update */, + A501000000000000000005 /* UI */, + A201000000000000000016 /* Assets.xcassets */, + A201000000000000000017 /* content.json */, + A201000000000000000018 /* Info.plist */, + ); + path = Maturita; + sourceTree = ""; + }; + A501000000000000000003 /* Data */ = { + isa = PBXGroup; + children = ( + A201000000000000000004 /* JSON.swift */, + A201000000000000000005 /* Content.swift */, + A201000000000000000006 /* Theme.swift */, + A201000000000000000007 /* Answers.swift */, + A201000000000000000008 /* ProgressStore.swift */, + ); + path = Data; + sourceTree = ""; + }; + A501000000000000000004 /* Update */ = { + isa = PBXGroup; + children = ( + A201000000000000000009 /* Updater.swift */, + ); + path = Update; + sourceTree = ""; + }; + A501000000000000000005 /* UI */ = { + isa = PBXGroup; + children = ( + A201000000000000000010 /* Components.swift */, + A201000000000000000011 /* Icons.swift */, + A201000000000000000012 /* PathMap.swift */, + A201000000000000000013 /* Screens.swift */, + A201000000000000000014 /* Exercises.swift */, + A201000000000000000015 /* ExercisesMore.swift */, + ); + path = UI; + sourceTree = ""; + }; + A501000000000000000006 /* Products */ = { + isa = PBXGroup; + children = ( + A301000000000000000001 /* Maturita.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A601000000000000000001 /* Maturita */ = { + isa = PBXNativeTarget; + buildConfigurationList = A801000000000000000002 /* Build configuration list for PBXNativeTarget "Maturita" */; + buildPhases = ( + A701000000000000000004 /* Extract content */, + A701000000000000000001 /* Sources */, + A401000000000000000001 /* Frameworks */, + A701000000000000000002 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Maturita; + productName = Maturita; + productReference = A301000000000000000001 /* Maturita.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A001000000000000000001 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; + TargetAttributes = { + A601000000000000000001 = { + CreatedOnToolsVersion = 16.0; + }; + }; + }; + buildConfigurationList = A801000000000000000001 /* Build configuration list for PBXProject "Maturita" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = cs; + hasScannedForEncodings = 0; + knownRegions = ( + en, + cs, + Base, + ); + mainGroup = A501000000000000000001; + productRefGroup = A501000000000000000006 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A601000000000000000001 /* Maturita */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + A701000000000000000002 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A101000000000000000016 /* Assets.xcassets in Resources */, + A101000000000000000017 /* content.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + A701000000000000000004 /* Extract content */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Extract content"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Maturita/content.json", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "python3 \"${SRCROOT}/../scripts/extract-android-content.py\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A701000000000000000001 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A101000000000000000001 /* MaturitaApp.swift in Sources */, + A101000000000000000002 /* AppModel.swift in Sources */, + A101000000000000000003 /* Route.swift in Sources */, + A101000000000000000004 /* JSON.swift in Sources */, + A101000000000000000005 /* Content.swift in Sources */, + A101000000000000000006 /* Theme.swift in Sources */, + A101000000000000000007 /* Answers.swift in Sources */, + A101000000000000000008 /* ProgressStore.swift in Sources */, + A101000000000000000009 /* Updater.swift in Sources */, + A101000000000000000010 /* Components.swift in Sources */, + A101000000000000000011 /* Icons.swift in Sources */, + A101000000000000000012 /* PathMap.swift in Sources */, + A101000000000000000013 /* Screens.swift in Sources */, + A101000000000000000014 /* Exercises.swift in Sources */, + A101000000000000000015 /* ExercisesMore.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + A901000000000000000001 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + A901000000000000000002 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A901000000000000000003 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + COMMIT = dev; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Maturita/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "maturita.c"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = ios-1; + PRODUCT_BUNDLE_IDENTIFIER = org.maturita.maturita; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A901000000000000000004 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + COMMIT = dev; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Maturita/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "maturita.c"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = ios-1; + PRODUCT_BUNDLE_IDENTIFIER = org.maturita.maturita; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A801000000000000000001 /* Build configuration list for PBXProject "Maturita" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A901000000000000000001 /* Debug */, + A901000000000000000002 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A801000000000000000002 /* Build configuration list for PBXNativeTarget "Maturita" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A901000000000000000003 /* Debug */, + A901000000000000000004 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A001000000000000000001 /* Project object */; +} diff --git a/ios/Maturita.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Maturita.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Maturita.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Maturita.xcodeproj/xcshareddata/xcschemes/Maturita.xcscheme b/ios/Maturita.xcodeproj/xcshareddata/xcschemes/Maturita.xcscheme new file mode 100644 index 0000000..0ea63f4 --- /dev/null +++ b/ios/Maturita.xcodeproj/xcshareddata/xcschemes/Maturita.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Maturita/AppModel.swift b/ios/Maturita/AppModel.swift new file mode 100644 index 0000000..46af406 --- /dev/null +++ b/ios/Maturita/AppModel.swift @@ -0,0 +1,113 @@ +import Foundation +import SwiftUI + +final class AppModel: ObservableObject { + let content = Content.load() + let progress = ProgressStore() + let updater = Updater() + + @Published var themeId: ThemeId + @Published var mode: ColorMode + @Published var lang: UiLang + @Published var settingsOpen = false + @Published var searchOpen = false + @Published var searchQuery = "" + @Published var tick = 0 + @Published var update = UpdateState() + @Published var stack: [Route] = [.welcome] + + init() { + themeId = progress.themeId + mode = progress.mode + lang = progress.lang + } + + var route: Route { stack.last ?? .welcome } + var canGoBack: Bool { stack.count > 1 } + var palette: Palette { themePalette(themeId, mode) } + + func tr(_ key: String?) -> String { content.tr(key, lang: lang) } + + func fmt(_ key: String, _ args: CVarArg...) -> String { + content.fmt(key, lang: lang, args) + } + + func go(_ r: Route) { + if stack.last == r { return } + stack.append(r) + searchOpen = false + } + + func goPage(_ page: String?) { + guard let page, let r = routeFromPage(page) else { return } + go(r) + } + + func back() { + if stack.count > 1 { stack.removeLast() } + } + + func setTheme(_ id: ThemeId) { + themeId = id + progress.themeId = id + } + + func applyMode(_ m: ColorMode) { + mode = m + progress.mode = m + } + + func applyLang(_ l: UiLang) { + lang = l + progress.lang = l + } + + func refresh() { tick += 1 } + + func markGerman(_ unit: Int, _ ex: Int) { + progress.markGerman(unit, ex) + refresh() + } + + func markVocab(_ unit: Int) { + progress.markVocab(unit) + refresh() + } + + func markNet(_ id: Int) { + progress.markNet(id) + refresh() + } + + func markHw(_ id: Int) { + progress.markHw(id) + refresh() + } + + func markMluv(_ n: Int) { + progress.markMluv(n) + refresh() + } + + func markBookQuiz(_ id: String) { + progress.markBookQuiz(id) + refresh() + } + + func markBookPlot(_ id: String) { + progress.markBookPlot(id) + refresh() + } + + func checkUpdate(_ interactive: Bool) { + updater.check(interactive: interactive) { [weak self] state in + self?.update = state + } + } + + func installUpdate() { + updater.install { [weak self] state in + self?.update = state + } + } +} diff --git a/ios/Maturita/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/Maturita/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/ios/Maturita/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Maturita/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/ios/Maturita/Assets.xcassets/AppIcon.appiconset/AppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..80afb9d68b0760fde80868a1cb2eddbe93798c1b GIT binary patch literal 373417 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

Mn$`3FrUvEpsD|s^H<|2hiwEoK2&>OQE#u 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�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

DXswQ;Q{QBjH0b#di-{FRU>Ay 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 P{5*D==xGrzf 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

okC)y7;blZ?(YQl4vD! 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�o}%B$((62Ehk`OGKxaRV7n@hsnlx}8Dl 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 String { + var pre = "" + for ch in (input ?? "").lowercased() { + switch ch { + case "ä": pre += "ae" + case "ö": pre += "oe" + case "ü": pre += "ue" + case "ß": pre += "ss" + default: pre.append(ch) + } + } + let decomp = pre.decomposedStringWithCanonicalMapping + var out = "" + var prevSpace = false + for scalar in decomp.unicodeScalars { + let v = scalar.value + if (0x0300...0x036F).contains(v) || (0x1AB0...0x1AFF).contains(v) || + (0x1DC0...0x1DFF).contains(v) || (0x20D0...0x20FF).contains(v) || + (0xFE20...0xFE2F).contains(v) { + continue + } + if CharacterSet.whitespacesAndNewlines.contains(scalar) { + if !out.isEmpty && !prevSpace { out.append(" ") } + prevSpace = true + continue + } + if !CharacterSet.alphanumerics.contains(scalar) { continue } + prevSpace = false + out.unicodeScalars.append(scalar) + } + return out.trimmingCharacters(in: .whitespaces) +} + +func answerAccepts(_ selNorm: String, _ ans: String?) -> Bool { + guard let ans, !ans.isEmpty else { return false } + return ans.split(separator: "|").contains { normalizeAnswer(String($0)) == selNorm } +} + +func answerIncomplete(_ selNorm: String, _ ans: String?) -> Bool { + guard !selNorm.isEmpty, let ans, !ans.isEmpty else { return false } + for part in ans.split(separator: "|") { + let a = normalizeAnswer(String(part)) + if a.hasPrefix(selNorm + " ") && a.count > selNorm.count + 1 { return true } + } + return false +} + +func netTxtEq(_ a: String?, _ b: String?) -> Bool { + guard let a, let b else { return a == b } + let x = a.filter { !$0.isWhitespace }.lowercased() + let y = b.filter { !$0.isWhitespace }.lowercased() + return x == y +} + +func hasUmlaut(_ s: String?) -> Bool { + guard let s else { return false } + return s.contains(where: { "äöüÄÖÜß".contains($0) }) +} diff --git a/ios/Maturita/Data/Content.swift b/ios/Maturita/Data/Content.swift new file mode 100644 index 0000000..e556d5b --- /dev/null +++ b/ios/Maturita/Data/Content.swift @@ -0,0 +1,95 @@ +import Foundation + +enum AppConfig { + static var commit: String { + let raw = (Bundle.main.object(forInfoDictionaryKey: "GITCommit") as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + return raw.isEmpty || raw.hasPrefix("$(") ? "dev" : raw + } + + static var versionName: String { + Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "ios-1" + } + + static var updateRepo: String { + (Bundle.main.object(forInfoDictionaryKey: "UPDATE_REPO") as? String) + ?? "pepaskopec-blip/maturita.c" + } + + static var updateBranch: String { + (Bundle.main.object(forInfoDictionaryKey: "UPDATE_BRANCH") as? String) ?? "builds" + } +} + +final class Content { + let raw: J + let i18n: [String: (String?, String?)] + let subjects: [J] + let german: [J] + let net: J + let netLessons: [J] + let netTasks: [J] + let netAnswers: [[J]] + let hw: [J] + let mluvnice: [J] + let books: [J] + + init(_ root: [String: Any]) { + raw = J(root) + let obj = root["i18n"] as? [String: Any] ?? [:] + var map: [String: (String?, String?)] = [:] + for (key, value) in obj { + let e = J(value) + let cs = e.strOrNull("cs") + let en = e.strOrNull("en") + map[key] = (cs, en) + } + i18n = map + subjects = raw.arr("subjects") + german = raw.arr("german") + net = raw.obj("net") ?? J([:]) + netLessons = net.arr("lessons") + netTasks = net.arr("tasks") + if let a = net.o["answers"] as? [Any] { + netAnswers = a.map { block in + guard let rows = block as? [Any] else { return [] } + return rows.compactMap { item in + item is [String: Any] ? J(item) : nil + } + } + } else { + netAnswers = [] + } + hw = raw.arr("hw") + mluvnice = raw.arr("mluvnice") + books = raw.arr("books") + } + + func germanUnit(_ id: Int) -> J? { german.first { $0.int("id") == id } } + func netLesson(_ id: Int) -> J? { netLessons.first { $0.int("id") == id } } + func hwLesson(_ id: Int) -> J? { hw.first { $0.int("id") == id } } + func mluv(_ n: Int) -> J? { mluvnice.first { $0.int("id") == n } } + func book(_ id: String) -> J? { books.first { $0.str("id") == id } } + + func tr(_ key: String?, lang: UiLang) -> String { + guard let key, !key.isEmpty else { return "" } + let hit = i18n[key] + if lang == .en { return hit?.1 ?? key } + return hit?.0 ?? key + } + + func fmt(_ key: String, lang: UiLang, _ args: [CVarArg]) -> String { + let template = tr(key, lang: lang).replacingOccurrences(of: "%s", with: "%@") + return String(format: template, arguments: args) + } + + static func load() -> Content { + guard let url = Bundle.main.url(forResource: "content", withExtension: "json"), + let data = try? Data(contentsOf: url), + let obj = try? JSONSerialization.jsonObject(with: data) as? [String: Any] + else { + return Content([:]) + } + return Content(obj) + } +} diff --git a/ios/Maturita/Data/JSON.swift b/ios/Maturita/Data/JSON.swift new file mode 100644 index 0000000..137e769 --- /dev/null +++ b/ios/Maturita/Data/JSON.swift @@ -0,0 +1,102 @@ +import Foundation + +struct J { + let o: [String: Any] + + init(_ obj: Any?) { + o = obj as? [String: Any] ?? [:] + } + + func has(_ key: String) -> Bool { + guard let value = o[key], !(value is NSNull) else { return false } + return true + } + + func str(_ key: String, _ fallback: String = "") -> String { + guard has(key) else { return fallback } + if let s = o[key] as? String { return s } + if let n = o[key] as? NSNumber { return n.stringValue } + return fallback + } + + func strOrNull(_ key: String) -> String? { + guard has(key) else { return nil } + if let s = o[key] as? String, !s.isEmpty, s != "null" { return s } + return nil + } + + func bool(_ key: String, _ fallback: Bool = false) -> Bool { + if let b = o[key] as? Bool { return b } + if let n = o[key] as? NSNumber { return n.boolValue } + return fallback + } + + func int(_ key: String, _ fallback: Int = 0) -> Int { + if let n = o[key] as? Int { return n } + if let n = o[key] as? NSNumber { return n.intValue } + if let s = o[key] as? String, let n = Int(s) { return n } + return fallback + } + + func obj(_ key: String) -> J? { + guard let value = o[key], !(value is NSNull) else { return nil } + if value is [String: Any] { return J(value) } + return nil + } + + func exercise(_ n: Int) -> J? { + guard let ex = o["exercises"] as? [String: Any] else { return nil } + return J(ex["\(n)"]) + } + + func arr(_ key: String) -> [J] { + guard let a = o[key] as? [Any] else { return [] } + return a.compactMap { item in + item is [String: Any] ? J(item) : nil + } + } + + func strs(_ key: String) -> [String] { + guard let a = o[key] as? [Any] else { return [] } + return a.compactMap { item in + if item is NSNull { return nil } + if let s = item as? String, !s.isEmpty { return s } + return nil + } + } + + func strsOrEmpty(_ key: String) -> [String?] { + guard let a = o[key] as? [Any] else { return [] } + return a.map { item in + if item is NSNull { return nil } + return item as? String + } + } + + func intRows(_ key: String) -> [[String]] { + guard let a = o[key] as? [Any] else { return [] } + return a.map { row in + guard let cells = row as? [Any] else { return [] } + return cells.map { cell in + if let s = cell as? String { return s } + if let n = cell as? NSNumber { return n.stringValue } + return "" + } + } + } + + func rawArray(_ key: String) -> [Any] { + o[key] as? [Any] ?? [] + } + + func answerList() -> [String] { + if let a = o["answers"] as? [Any] { + return a.compactMap { item in + if item is NSNull { return nil } + if let s = item as? String, !s.isEmpty { return s } + return nil + } + } + return [strOrNull("answers")].compactMap { $0 } + } +} diff --git a/ios/Maturita/Data/ProgressStore.swift b/ios/Maturita/Data/ProgressStore.swift new file mode 100644 index 0000000..b8c6432 --- /dev/null +++ b/ios/Maturita/Data/ProgressStore.swift @@ -0,0 +1,81 @@ +import Foundation + +final class ProgressStore { + private let defaults = UserDefaults.standard + + var themeId: ThemeId { + get { ThemeId(rawValue: defaults.integer(forKey: "theme")) ?? .catppuccin } + set { defaults.set(newValue.rawValue, forKey: "theme") } + } + + var mode: ColorMode { + get { defaults.string(forKey: "mode") == "dark" ? .dark : .light } + set { defaults.set(newValue == .light ? "light" : "dark", forKey: "mode") } + } + + var lang: UiLang { + get { defaults.string(forKey: "lang") == "en" ? .en : .cs } + set { defaults.set(newValue == .en ? "en" : "cs", forKey: "lang") } + } + + func germanDone(_ unit: Int, _ ex: Int) -> Bool { defaults.bool(forKey: "g.\(unit).\(ex)") } + func markGerman(_ unit: Int, _ ex: Int) { defaults.set(true, forKey: "g.\(unit).\(ex)") } + func vocabDone(_ unit: Int) -> Bool { defaults.bool(forKey: "g.\(unit).vocab") } + func markVocab(_ unit: Int) { defaults.set(true, forKey: "g.\(unit).vocab") } + + func netDone(_ id: Int) -> Bool { defaults.bool(forKey: "net.\(id)") } + func markNet(_ id: Int) { defaults.set(true, forKey: "net.\(id)") } + + func hwDone(_ id: Int) -> Bool { defaults.bool(forKey: "hw.\(id)") } + func markHw(_ id: Int) { defaults.set(true, forKey: "hw.\(id)") } + + func mluvDone(_ n: Int) -> Bool { defaults.bool(forKey: "mluv.\(n)") } + func markMluv(_ n: Int) { defaults.set(true, forKey: "mluv.\(n)") } + + func bookQuiz(_ id: String) -> Bool { defaults.bool(forKey: "book.\(id).quiz") } + func markBookQuiz(_ id: String) { defaults.set(true, forKey: "book.\(id).quiz") } + func bookPlot(_ id: String) -> Bool { defaults.bool(forKey: "book.\(id).plot") } + func markBookPlot(_ id: String) { defaults.set(true, forKey: "book.\(id).plot") } +} + +struct ProgressSum { + var doneEx = 0 + var totalEx = 0 + var doneUnits = 0 + var openUnits = 0 +} + +func summarize(_ content: Content, _ p: ProgressStore) -> ProgressSum { + var sum = ProgressSum() + for u in content.german where u.bool("unlocked") { + let id = u.int("id") + let names = u.strs("names") + sum.totalEx += names.count + sum.openUnits += 1 + let done = names.indices.filter { p.germanDone(id, $0 + 1) }.count + sum.doneEx += done + if !names.isEmpty && done == names.count { sum.doneUnits += 1 } + } + for l in content.netLessons { + sum.totalEx += 1 + sum.openUnits += 1 + if p.netDone(l.int("id")) { + sum.doneEx += 1 + sum.doneUnits += 1 + } + } + for l in content.hw { + sum.totalEx += 1 + sum.openUnits += 1 + if p.hwDone(l.int("id")) { + sum.doneEx += 1 + sum.doneUnits += 1 + } + } + sum.totalEx += content.mluvnice.count + sum.openUnits += 1 + let md = content.mluvnice.filter { p.mluvDone($0.int("id")) }.count + sum.doneEx += md + if md == content.mluvnice.count && !content.mluvnice.isEmpty { sum.doneUnits += 1 } + return sum +} diff --git a/ios/Maturita/Data/Theme.swift b/ios/Maturita/Data/Theme.swift new file mode 100644 index 0000000..2ff0a59 --- /dev/null +++ b/ios/Maturita/Data/Theme.swift @@ -0,0 +1,173 @@ +import SwiftUI + +enum ThemeId: Int, CaseIterable { + case catppuccin, nord, dracula, rosePine, ocean, gruvbox, solarized, everforest, monokai, oneDark +} + +enum ColorMode { + case dark, light +} + +enum UiLang { + case cs, en +} + +let themeNames = [ + "Catppuccin", "Nord", "Dracula", "Rose Pine", "Ocean", + "Gruvbox", "Solarized", "Everforest", "Monokai", "One Dark", +] + +struct Palette { + let crust, base, mantle, surface0, surface1, surface2: Color + let overlay, text, subtext: Color + let accent, accent2, accent3: Color + let success, success2, warning, error: Color + let onAccent, node, lockedBg, lockedBorder, rail: Color + let finishDark, finishLight, finishStroke: Color +} + +private func hx(_ v: UInt32) -> Color { + Color( + red: Double((v >> 16) & 0xFF) / 255, + green: Double((v >> 8) & 0xFF) / 255, + blue: Double(v & 0xFF) / 255 + ) +} + +private func pal(_ c: [UInt32]) -> Palette { + Palette( + crust: hx(c[0]), base: hx(c[1]), mantle: hx(c[2]), surface0: hx(c[3]), + surface1: hx(c[4]), surface2: hx(c[5]), overlay: hx(c[6]), text: hx(c[7]), + subtext: hx(c[8]), accent: hx(c[9]), accent2: hx(c[10]), accent3: hx(c[11]), + success: hx(c[12]), success2: hx(c[13]), warning: hx(c[14]), error: hx(c[15]), + onAccent: hx(c[16]), node: hx(c[17]), lockedBg: hx(c[18]), + lockedBorder: hx(c[19]), rail: hx(c[20]), finishDark: hx(c[21]), + finishLight: hx(c[22]), finishStroke: hx(c[23]) + ) +} + +func themePalette(_ id: ThemeId, _ mode: ColorMode) -> Palette { + let light = mode == .light + switch id { + case .catppuccin: + return light ? pal([ + 0xf3eee6, 0xfaf7f2, 0xffffff, 0xffffff, 0xf0ebe3, 0xe5dfd4, + 0x8a8378, 0x1a1a1a, 0x5c574f, 0xffcc00, 0x0071e3, 0x2997ff, + 0x1f8a4c, 0x1a7f4a, 0xe6a800, 0xd32f2f, 0x1a1a1a, + 0xffffff, 0xf0ebe3, 0xd5cfc4, 0xe5dfd4, 0xf3eee6, 0xd5cfc4, 0x8a8378, + ]) : pal([ + 0x000000, 0x000000, 0x111111, 0x1d1d1f, 0x2c2c2e, 0x3a3a3c, + 0x86868b, 0xf5f5f7, 0xa1a1a6, 0xffd60a, 0x2997ff, 0x64d2ff, + 0x30d158, 0x64d2ff, 0xffd60a, 0xff453a, 0x1d1d1f, + 0x1d1d1f, 0x111111, 0x3a3a3c, 0x2c2c2e, 0x000000, 0x3a3a3c, 0x86868b, + ]) + case .nord: + return light ? pal([ + 0xd8dee9, 0xeceff4, 0xe5e9f0, 0xd8dee9, 0xc7ceda, 0xb0b8c8, + 0x7b88a1, 0x2e3440, 0x4c566a, 0x5e81ac, 0x81a1c1, 0x5e81ac, + 0xa3be8c, 0x8fbcbb, 0xebcb8b, 0xbf616a, 0xeceff4, + 0xe5e9f0, 0xd8dee9, 0xc7ceda, 0xd8dee9, 0xd8dee9, 0xc7ceda, 0x7b88a1, + ]) : pal([ + 0x2e3440, 0x3b4252, 0x2e3440, 0x434c5e, 0x4c566a, 0x616e88, + 0x7b88a1, 0xeceff4, 0xd8dee9, 0x88c0d0, 0x81a1c1, 0x5e81ac, + 0xa3be8c, 0x8fbcbb, 0xebcb8b, 0xbf616a, 0x2e3440, + 0x434c5e, 0x3b4252, 0x4c566a, 0x2e3440, 0x2e3440, 0x434c5e, 0x4c566a, + ]) + case .dracula: + return light ? pal([ + 0xd5d7e0, 0xf8f8f2, 0xefefea, 0xe2e2d8, 0xd0d0c4, 0xbfbfb2, + 0x9a9a8c, 0x282a36, 0x44475a, 0x7c3aed, 0xd946a6, 0x0891b2, + 0x16a34a, 0x0e7490, 0xca8a04, 0xdc2626, 0xf8f8f2, + 0xefefea, 0xe2e2d8, 0xd0d0c4, 0xe2e2d8, 0xd5d7e0, 0xd0d0c4, 0x9a9a8c, + ]) : pal([ + 0x191a21, 0x282a36, 0x21222c, 0x44475a, 0x6272a4, 0x707eb0, + 0x6272a4, 0xf8f8f2, 0xbfbfb2, 0xbd93f9, 0xff79c6, 0x8be9fd, + 0x50fa7b, 0x8be9fd, 0xf1fa8c, 0xff5555, 0x282a36, + 0x383a4a, 0x2f3240, 0x44475a, 0x21222c, 0x191a21, 0x383a4a, 0x6272a4, + ]) + case .rosePine: + return light ? pal([ + 0xf2e9e1, 0xfaf4ed, 0xfffaf3, 0xf2e9e1, 0xdfdad9, 0xcecacd, + 0x9893a5, 0x575279, 0x797593, 0x907aa9, 0xd7827e, 0x56949f, + 0x286983, 0x56949f, 0xea9d34, 0xb4637a, 0xfaf4ed, + 0xfffaf3, 0xf2e9e1, 0xdfdad9, 0xf2e9e1, 0xf2e9e1, 0xdfdad9, 0x9893a5, + ]) : pal([ + 0x191724, 0x1f1d2e, 0x1f1d2e, 0x26233a, 0x403d52, 0x524f67, + 0x6e6a86, 0xe0def4, 0x908caa, 0xc4a7e7, 0xebbcba, 0x9ccfd8, + 0x31748f, 0x9ccfd8, 0xf6c177, 0xeb6f92, 0x191724, + 0x26233a, 0x21202e, 0x403d52, 0x191724, 0x191724, 0x26233a, 0x524f67, + ]) + case .ocean: + return light ? pal([ + 0xd6dae8, 0xe1e2ec, 0xd5d6e2, 0xc8c9d6, 0xb4b6c5, 0x9aa0b5, + 0x7a8199, 0x2e3446, 0x4a5168, 0x2e7de9, 0x7847bd, 0x007197, + 0x387068, 0x007197, 0x8c6c3e, 0xc64343, 0xe1e2ec, + 0xd5d6e2, 0xc8c9d6, 0xb4b6c5, 0xc8c9d6, 0xd6dae8, 0xb4b6c5, 0x7a8199, + ]) : pal([ + 0x16161e, 0x1a1b26, 0x16161e, 0x24283b, 0x414868, 0x565f89, + 0x565f89, 0xc0caf5, 0xa9b1d6, 0x7aa2f7, 0xbb9af7, 0x7dcfff, + 0x9ece6a, 0x73daca, 0xe0af68, 0xf7768e, 0x1a1b26, + 0x24283b, 0x1f2335, 0x3b4261, 0x16161e, 0x16161e, 0x24283b, 0x414868, + ]) + case .gruvbox: + return light ? pal([ + 0xebdbb2, 0xfbf1c7, 0xf2e5bc, 0xebdbb2, 0xd5c4a1, 0xbdae93, + 0x928374, 0x3c3836, 0x504945, 0xd65d0e, 0xb16286, 0x076678, + 0x79740e, 0x427b58, 0xb57614, 0x9d0006, 0xfbf1c7, + 0xf2e5bc, 0xebdbb2, 0xd5c4a1, 0xebdbb2, 0xebdbb2, 0xd5c4a1, 0x928374, + ]) : pal([ + 0x1d2021, 0x282828, 0x1d2021, 0x3c3836, 0x504945, 0x665c54, + 0x928374, 0xebdbb2, 0xa89984, 0xfe8019, 0xd3869b, 0x83a598, + 0xb8bb26, 0x8ec07c, 0xfabd2f, 0xfb4934, 0x1d2021, + 0x3c3836, 0x32302f, 0x504945, 0x1d2021, 0x1d2021, 0x3c3836, 0x504945, + ]) + case .solarized: + return light ? pal([ + 0xeee8d5, 0xfdf6e3, 0xeee8d5, 0xeee8d5, 0xe2dbc6, 0xc9c0a6, + 0x657b83, 0x586e75, 0x657b83, 0x268bd2, 0x6c71c4, 0x2aa198, + 0x859900, 0x2aa198, 0xb58900, 0xdc322f, 0xfdf6e3, + 0xeee8d5, 0xe6dfc8, 0x93a1a1, 0xeee8d5, 0xeee8d5, 0x93a1a1, 0x586e75, + ]) : pal([ + 0x002b36, 0x073642, 0x002b36, 0x586e75, 0x657b83, 0x839496, + 0x93a1a1, 0xfdf6e3, 0x93a1a1, 0x268bd2, 0x6c71c4, 0x2aa198, + 0x859900, 0x2aa198, 0xb58900, 0xdc322f, 0x002b36, + 0x073642, 0x002b36, 0x586e75, 0x002b36, 0x002b36, 0x073642, 0x586e75, + ]) + case .everforest: + return light ? pal([ + 0xe6e2cc, 0xfdf6e3, 0xf4f0d9, 0xefebd4, 0xe0dcc7, 0xa6b0a0, + 0x939f91, 0x5c6a72, 0x829181, 0x8da101, 0xdf69ba, 0x35a77c, + 0x8da101, 0x35a77c, 0xdfa000, 0xf85552, 0xfdf6e3, + 0xf4f0d9, 0xefebd4, 0xe0dcc7, 0xe6e2cc, 0xe6e2cc, 0xe0dcc7, 0x939f91, + ]) : pal([ + 0x1e2326, 0x272e33, 0x2d353b, 0x374145, 0x4f5b58, 0x7a8478, + 0x859289, 0xd3c6aa, 0xa7c080, 0xa7c080, 0xd699b6, 0x7fbbb3, + 0xa7c080, 0x83c092, 0xdbbc7f, 0xe67e80, 0x272e33, + 0x374145, 0x2d353b, 0x4f5b58, 0x1e2326, 0x1e2326, 0x374145, 0x4f5b58, + ]) + case .monokai: + return light ? pal([ + 0xe6e3d4, 0xfaf8f0, 0xf3f0e4, 0xe8e4d4, 0xd6d2c0, 0xb8b49e, + 0x8a8674, 0x2d2a2e, 0x5b5854, 0xe14775, 0x7c5cbf, 0x1c7d9b, + 0x5b8c2a, 0x1c7d9b, 0xb08900, 0xe14775, 0xfaf8f0, + 0xf3f0e4, 0xe8e4d4, 0xd6d2c0, 0xe6e3d4, 0xe6e3d4, 0xd6d2c0, 0x8a8674, + ]) : pal([ + 0x1d1e19, 0x272822, 0x1e1f1a, 0x3e3d32, 0x49483e, 0x75715e, + 0x75715e, 0xf8f8f2, 0xa59f85, 0xf92672, 0xae81ff, 0x66d9ef, + 0xa6e22e, 0xa1efe4, 0xe6db74, 0xf92672, 0x272822, + 0x3e3d32, 0x2e2f29, 0x49483e, 0x1d1e19, 0x1d1e19, 0x3e3d32, 0x49483e, + ]) + case .oneDark: + return light ? pal([ + 0xe5e5e6, 0xfafafa, 0xf0f0f0, 0xe5e5e6, 0xd0d0d2, 0xa0a1a7, + 0xa0a1a7, 0x383a42, 0x696c77, 0xa626a4, 0x4078f2, 0x0184bc, + 0x50a14f, 0x0184bc, 0xc18401, 0xe45649, 0xfafafa, + 0xf0f0f0, 0xe5e5e6, 0xd0d0d2, 0xe5e5e6, 0xe5e5e6, 0xd0d0d2, 0xa0a1a7, + ]) : pal([ + 0x21252b, 0x282c34, 0x21252b, 0x3b4048, 0x4b5263, 0x5c6370, + 0x5c6370, 0xabb2bf, 0x7f848e, 0xc678dd, 0x61afef, 0x56b6c2, + 0x98c379, 0x56b6c2, 0xe5c07b, 0xe06c75, 0x282c34, + 0x3b4048, 0x2c313a, 0x4b5263, 0x21252b, 0x21252b, 0x3b4048, 0x4b5263, + ]) + } +} diff --git a/ios/Maturita/Info.plist b/ios/Maturita/Info.plist new file mode 100644 index 0000000..3935383 --- /dev/null +++ b/ios/Maturita/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDisplayName + maturita.c + GITCommit + $(COMMIT) + UPDATE_REPO + pepaskopec-blip/maturita.c + UPDATE_BRANCH + builds + ITSAppUsesNonExemptEncryption + + UILaunchScreen + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ios/Maturita/MaturitaApp.swift b/ios/Maturita/MaturitaApp.swift new file mode 100644 index 0000000..c40c214 --- /dev/null +++ b/ios/Maturita/MaturitaApp.swift @@ -0,0 +1,154 @@ +import SwiftUI + +@main +struct MaturitaApp: App { + @StateObject private var vm = AppModel() + + var body: some Scene { + WindowGroup { + MaturitaRoot(vm: vm) + } + } +} + +struct MaturitaRoot: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + ZStack { + p.base.ignoresSafeArea() + VStack(spacing: 0) { + HStack { + Text("maturita.c") + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(p.text) + Spacer() + IconHit(action: { vm.searchOpen = true }) { SearchIcon(color: p.text) } + IconHit(action: { vm.go(.stats) }) { StatsIcon(color: p.text) } + IconHit(action: { vm.settingsOpen = true }) { SettingsIcon(color: p.text) } + } + .padding(.horizontal, 12) + .padding(.vertical, 6) + if vm.update.canInstall || vm.update.status == "downloading" || vm.update.status == "staged" { + HStack { + Text(bannerText) + .font(.system(size: 13)) + .foregroundStyle(p.text) + Spacer() + if vm.update.canInstall { + PillButton(label: vm.tr("update_install"), palette: p) { vm.installUpdate() } + } + } + .padding(.horizontal, 12) + .padding(.vertical, 10) + .background(p.surface1, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + .padding(.horizontal, 12) + } + routeView + .id(vm.tick) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + if vm.searchOpen { + SearchOverlay(vm: vm).ignoresSafeArea(edges: .bottom) + } + if vm.settingsOpen { + SettingsSheet(vm: vm).ignoresSafeArea(edges: .bottom) + } + } + .preferredColorScheme(vm.mode == .dark ? .dark : .light) + .onAppear { vm.checkUpdate(false) } + } + + private var bannerText: String { + if let arg = vm.update.messageArg { + return vm.fmt(vm.update.messageKey, arg) + } + return vm.tr(vm.update.messageKey) + } + + @ViewBuilder + private var routeView: some View { + switch vm.route { + case .welcome: WelcomeScreen(vm: vm) + case .subjects: SubjectsScreen(vm: vm) + case .stats: StatsScreen(vm: vm) + case .roadmap: RoadmapScreen(vm: vm) + case .unitMap(let id): UnitMapScreen(vm: vm, unitId: id) + case .germanEx(let unit, let ex): GermanExercise(vm: vm, unitId: unit, ex: ex) + case .vocab(let id): VocabExercise(vm: vm, unitId: id) + case .netYears: NetYearsScreen(vm: vm) + case .netMap: + LessonMapScreen( + vm: vm, + title: vm.tr("net_year1"), + sub: vm.tr("net_sub"), + nodes: vm.content.netLessons.map { l in + let id = l.int("id") + return MapNode( + id: "n\(id)", + label: vm.tr(l.str("titleKey")), + locked: false, + done: vm.progress.netDone(id), + current: !vm.progress.netDone(id), + onClick: { vm.go(.netLesson(id)) } + ) + } + ) + case .netLesson(let id): + if let l = vm.content.netLesson(id) { + SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), sub: vm.tr(l.str("subKey")), slides: l.arr("slides")) { + vm.go(.netEx(id)) + } + } + case .netEx(let id): NetQuizScreen(vm: vm, id: id) + case .hwMap: + LessonMapScreen( + vm: vm, + title: vm.tr("Technické vybavení"), + sub: vm.tr("hw_sub"), + nodes: vm.content.hw.map { l in + let id = l.int("id") + return MapNode( + id: "h\(id)", + label: vm.tr(l.str("titleKey")), + locked: false, + done: vm.progress.hwDone(id), + current: !vm.progress.hwDone(id), + onClick: { vm.go(.hwLesson(id)) } + ) + } + ) + case .hwLesson(let id): + if let l = vm.content.hwLesson(id) { + SlidesScreen(vm: vm, title: vm.tr(l.str("titleKey")), sub: vm.tr(l.str("subKey")), slides: l.arr("slides")) { + vm.go(.hwEx(id)) + } + } + case .hwEx(let id): HwQuizScreen(vm: vm, id: id) + case .czechMap: CzechMapScreen(vm: vm) + case .mluvnice: + LessonMapScreen( + vm: vm, + title: vm.tr("Mluvnice"), + sub: "Cvičení z mluvnice – styl maturita / přijímačky z ČJL", + nodes: vm.content.mluvnice.map { m in + let n = m.int("id") + return MapNode( + id: "m\(n)", + label: m.str("name"), + locked: false, + done: vm.progress.mluvDone(n), + current: !vm.progress.mluvDone(n), + onClick: { vm.go(.mluvEx(n)) } + ) + } + ) + case .mluvEx(let n): MluvExercise(vm: vm, n: n) + case .readingList: BookListScreen(vm: vm) + case .book(let id): BookScreen(vm: vm, id: id) + case .bookQuiz(let id): LitQuizScreen(vm: vm, id: id) + case .bookPlot(let id): PlotScreen(vm: vm, id: id) + } + } +} diff --git a/ios/Maturita/Route.swift b/ios/Maturita/Route.swift new file mode 100644 index 0000000..5fd8a78 --- /dev/null +++ b/ios/Maturita/Route.swift @@ -0,0 +1,98 @@ +import Foundation + +enum Route: Equatable { + case welcome + case subjects + case stats + case roadmap + case unitMap(Int) + case germanEx(Int, Int) + case vocab(Int) + case netYears + case netMap + case netLesson(Int) + case netEx(Int) + case hwMap + case hwLesson(Int) + case hwEx(Int) + case czechMap + case mluvnice + case mluvEx(Int) + case readingList + case book(String) + case bookQuiz(String) + case bookPlot(String) + + var page: String { + switch self { + case .welcome: return "welcome" + case .subjects: return "subjects" + case .stats: return "stats" + case .roadmap: return "roadmap" + case .unitMap(let unitId): return "unit\(unitId + 1)" + case .germanEx(let unitId, let ex): return "u\(unitId + 1)e\(ex)" + case .vocab(let unitId): return "u\(unitId + 1)vocab" + case .netYears: return "netyears" + case .netMap: return "netmap" + case .netLesson(let id): return "netunit\(id)" + case .netEx(let id): return "netex\(id)" + case .hwMap: return "hwmap" + case .hwLesson(let id): return "hwunit\(id)" + case .hwEx(let id): return "hwex\(id)" + case .czechMap: return "czechmap" + case .mluvnice: return "mluvnice" + case .mluvEx(let n): return "mluve\(n)" + case .readingList: return "readinglist" + case .book(let id): return id == "1984" ? "cetba1984" : "cetbaFuks" + case .bookQuiz(let id): return id == "1984" ? "cetba1984quiz" : "cetbaFuksQuiz" + case .bookPlot(let id): return id == "1984" ? "cetba1984dej" : "cetbaFuksDej" + } + } +} + +func routeFromPage(_ page: String) -> Route? { + switch page { + case "welcome": return .welcome + case "subjects": return .subjects + case "stats": return .stats + case "roadmap": return .roadmap + case "netyears": return .netYears + case "netmap": return .netMap + case "hwmap": return .hwMap + case "czechmap": return .czechMap + case "mluvnice": return .mluvnice + case "readinglist": return .readingList + case "cetba1984": return .book("1984") + case "cetba1984quiz": return .bookQuiz("1984") + case "cetba1984dej": return .bookPlot("1984") + case "cetbaFuks": return .book("fuks") + case "cetbaFuksQuiz": return .bookQuiz("fuks") + case "cetbaFuksDej": return .bookPlot("fuks") + default: + if let m = page.wholeMatch(of: /unit(\d+)/), let n = Int(m.1) { + return .unitMap(n - 1) + } + if let m = page.wholeMatch(of: /u(\d+)e(\d+)/), let u = Int(m.1), let e = Int(m.2) { + return .germanEx(u - 1, e) + } + if let m = page.wholeMatch(of: /u(\d+)vocab/), let u = Int(m.1) { + return .vocab(u - 1) + } + if let m = page.wholeMatch(of: /netunit(\d+)/), let n = Int(m.1) { + return .netLesson(n) + } + if let m = page.wholeMatch(of: /netex(\d+)/), let n = Int(m.1) { + return .netEx(n) + } + if let m = page.wholeMatch(of: /hwunit(\d+)/), let n = Int(m.1) { + return .hwLesson(n) + } + if let m = page.wholeMatch(of: /hwex(\d+)/), let n = Int(m.1) { + return .hwEx(n) + } + if let m = page.wholeMatch(of: /mluve(\d+)/), let n = Int(m.1) { + return .mluvEx(n) + } + return nil + } +} diff --git a/ios/Maturita/UI/Components.swift b/ios/Maturita/UI/Components.swift new file mode 100644 index 0000000..d020074 --- /dev/null +++ b/ios/Maturita/UI/Components.swift @@ -0,0 +1,276 @@ +import SwiftUI + +struct FlowLayout: Layout { + var spacing: CGFloat = 6 + + func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize { + arrange(width: proposal.width ?? .infinity, subviews: subviews).size + } + + func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) { + let result = arrange(width: bounds.width, subviews: subviews) + for (i, frame) in result.frames.enumerated() { + subviews[i].place( + at: CGPoint(x: bounds.minX + frame.minX, y: bounds.minY + frame.minY), + proposal: ProposedViewSize(frame.size) + ) + } + } + + private func arrange(width: CGFloat, subviews: Subviews) -> (size: CGSize, frames: [CGRect]) { + var frames: [CGRect] = [] + var x: CGFloat = 0 + var y: CGFloat = 0 + var rowH: CGFloat = 0 + var maxW: CGFloat = 0 + for view in subviews { + let size = view.sizeThatFits(.unspecified) + if x > 0 && x + size.width > width { + x = 0 + y += rowH + spacing + rowH = 0 + } + frames.append(CGRect(origin: CGPoint(x: x, y: y), size: size)) + x += size.width + spacing + rowH = max(rowH, size.height) + maxW = max(maxW, x - spacing) + } + return (CGSize(width: max(maxW, 0), height: y + rowH), frames) + } +} + +struct PrimaryButton: View { + let label: String + let palette: Palette + var action: () -> Void + + var body: some View { + Button(action: action) { + Text(label) + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(palette.onAccent) + .padding(.horizontal, 22) + .padding(.vertical, 12) + .background(palette.accent, in: Capsule()) + } + .buttonStyle(.plain) + } +} + +struct PillButton: View { + let label: String + let palette: Palette + var action: () -> Void + + var body: some View { + Button(action: action) { + Text(label) + .font(.system(size: 13, weight: .medium)) + .foregroundStyle(palette.text) + .padding(.horizontal, 16) + .padding(.vertical, 8) + .background(palette.text.opacity(0.06), in: Capsule()) + } + .buttonStyle(.plain) + } +} + +struct IconHit: View { + var action: () -> Void + @ViewBuilder var content: () -> Content + + var body: some View { + Button(action: action) { + content() + .frame(width: 40, height: 40) + } + .buttonStyle(.plain) + } +} + +struct PageTop: View { + @ObservedObject var vm: AppModel + var back: () -> Void + let title: String + var subtitle: String? + + var body: some View { + let p = vm.palette + VStack(spacing: 6) { + ZStack { + Text(title) + .font(.system(size: 22, weight: .medium)) + .foregroundStyle(p.text) + .multilineTextAlignment(.center) + .padding(.horizontal, 48) + HStack { + IconHit(action: back) { BackIcon(color: p.text) } + Spacer() + } + } + if let subtitle, !subtitle.isEmpty { + Text(subtitle) + .font(.system(size: 14)) + .foregroundStyle(p.subtext) + .multilineTextAlignment(.center) + } + } + .padding(.top, 4) + .padding(.bottom, 14) + } +} + +struct CardBox: View { + let palette: Palette + @ViewBuilder var content: () -> Content + + var body: some View { + content() + .padding(20) + .frame(maxWidth: .infinity, alignment: .leading) + .background(palette.mantle, in: RoundedRectangle(cornerRadius: 20, style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .stroke(palette.text.opacity(0.07), lineWidth: 1) + ) + } +} + +struct FeedbackLine: View { + let text: String + let kind: String + let palette: Palette + + var body: some View { + if !text.isEmpty { + Text(text) + .font(.system(size: 15, weight: .semibold)) + .foregroundStyle(kind == "ok" ? palette.success : kind == "warn" ? palette.warning : palette.error) + .padding(.top, 8) + } + } +} + +struct Meaning: View { + let text: String + let palette: Palette + let visible: Bool + + var body: some View { + if visible && !text.isEmpty { + Text(text) + .font(.system(size: 13)) + .foregroundStyle(palette.subtext) + .padding(.bottom, 8) + } + } +} + +struct WordField: View { + @Binding var value: String + let palette: Palette + var placeholder: String + var mark: Bool? + + var body: some View { + let border: Color = { + if mark == true { return palette.success } + if mark == false { return palette.error } + return palette.text.opacity(0.12) + }() + ZStack(alignment: .leading) { + if value.isEmpty { + Text(placeholder).foregroundStyle(palette.overlay).font(.system(size: 15)) + } + TextField("", text: $value) + .font(.system(size: 15)) + .foregroundStyle(palette.text) + .tint(palette.accent) + } + .padding(.horizontal, 14) + .padding(.vertical, 12) + .background(palette.surface0, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + .overlay(RoundedRectangle(cornerRadius: 14, style: .continuous).stroke(border, lineWidth: 1)) + } +} + +struct SegChip: View { + let label: String + let selected: Bool + let palette: Palette + var action: () -> Void + + var body: some View { + Button(action: action) { + Text(label) + .font(.system(size: 14, weight: .semibold)) + .foregroundStyle(palette.text) + .frame(maxWidth: .infinity) + .padding(.vertical, 8) + .background(selected ? palette.mantle : Color.clear, in: Capsule()) + } + .buttonStyle(.plain) + } +} + +struct Hint: View { + let text: String + let palette: Palette + var body: some View { + Text(text).font(.system(size: 13)).foregroundStyle(palette.subtext).padding(.bottom, 8) + } +} + +struct Prompt: View { + let text: String + let palette: Palette + var body: some View { + Text(text).font(.system(size: 16, weight: .medium)).foregroundStyle(palette.text) + } +} + +struct WordChip: View { + let text: String + let palette: Palette + var action: () -> Void + + var body: some View { + Button(action: action) { + Text(text) + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(palette.text) + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(palette.mantle, in: Capsule()) + .overlay(Capsule().stroke(palette.text.opacity(0.1), lineWidth: 1)) + } + .buttonStyle(.plain) + } +} + +struct OptionChip: View { + let text: String + let selected: Bool + let mark: Bool? + let palette: Palette + var action: () -> Void + + var body: some View { + let border: Color = { + if mark == true { return palette.success } + if mark == false { return palette.error } + return selected ? palette.accent : palette.text.opacity(0.1) + }() + Button(action: action) { + Text(text) + .font(.system(size: 15)) + .foregroundStyle(palette.text) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(12) + .background(selected ? palette.surface1 : palette.mantle, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + .overlay(RoundedRectangle(cornerRadius: 14, style: .continuous).stroke(border, lineWidth: 1)) + } + .buttonStyle(.plain) + .padding(.bottom, 6) + } +} diff --git a/ios/Maturita/UI/Exercises.swift b/ios/Maturita/UI/Exercises.swift new file mode 100644 index 0000000..300102c --- /dev/null +++ b/ios/Maturita/UI/Exercises.swift @@ -0,0 +1,608 @@ +import SwiftUI + +struct ExerciseScaffold: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let action: String + var onAction: () -> Void + let feedback: String + let kind: String + @ViewBuilder var content: () -> Content + + var body: some View { + let p = vm.palette + VStack(alignment: .leading, spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: title, subtitle: sub) + ScrollView { + VStack(alignment: .leading, spacing: 0) { content() } + } + FeedbackLine(text: feedback, kind: kind, palette: p) + PrimaryButton(label: action, palette: p, action: onAction) + .padding(.vertical, 12) + } + .padding(.horizontal, 16) + } +} + +struct GermanExercise: View { + @ObservedObject var vm: AppModel + let unitId: Int + let ex: Int + + var body: some View { + if let spec = vm.content.germanUnit(unitId)?.exercise(ex) { + DispatchExercise(vm: vm, spec: spec, titleFallback: spec.str("title")) { + vm.markGerman(unitId, ex) + } + } + } +} + +struct VocabExercise: View { + @ObservedObject var vm: AppModel + let unitId: Int + + var body: some View { + if let spec = vm.content.germanUnit(unitId)?.obj("vocab") { + DispatchExercise(vm: vm, spec: spec, titleFallback: vm.tr("Vokabeltraining")) { + vm.markVocab(unitId) + } + } + } +} + +struct MluvExercise: View { + @ObservedObject var vm: AppModel + let n: Int + + var body: some View { + if let spec = vm.content.mluv(n) { + DispatchExercise(vm: vm, spec: spec, titleFallback: spec.str("title")) { + vm.markMluv(n) + } + } + } +} + +struct DispatchExercise: View { + @ObservedObject var vm: AppModel + let spec: J + let titleFallback: String + var onDone: () -> Void + + var body: some View { + let title = spec.str("title").isEmpty ? titleFallback : spec.str("title") + let sub = spec.strOrNull("sub").map { vm.tr($0) } + switch spec.str("type") { + case "choice": ChoiceEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "assembly": AssemblyEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "typed", "kw": TypedEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "free", "profile": FreeEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "assign": AssignEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "hangman": HangmanEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "vocab": VocabEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "dialog": DialogEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "number", "count", "seq", "verb", "verbclue", "verb_sections", "ordne", "fill": + ComboEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "ex2": Ex2Ex(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "letters", "letters_gap": LettersEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "table": TableEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + case "reveal": RevealEx(vm: vm, title: title, sub: sub, spec: spec, onDone: onDone) + default: Text("?").foregroundStyle(vm.palette.text) + } + } +} + +private struct ChoiceEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var picks: [Int] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + _picks = State(initialValue: Array(repeating: -1, count: spec.arr("questions").count)) + } + + var body: some View { + let qs = spec.arr("questions") + let meanings = spec.strs("meanings") + let expls = spec.strs("expls") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + let ok = qs.indices.filter { picks[$0] == qs[$0].int("correct") }.count + if ok == qs.count { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else { fb = (vm.tr("feedback_retry_short"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + ForEach(qs.indices, id: \.self) { i in + Text("\(i + 1). \(qs[i].str("prompt"))") + .font(.system(size: 16, weight: .semibold)) + .foregroundStyle(p.text) + .padding(.bottom, 6) + ForEach(Array(qs[i].strs("options").enumerated()), id: \.offset) { o, opt in + let sel = picks[i] == o + let mark: Bool? = revealed && sel ? picks[i] == qs[i].int("correct") : nil + OptionChip(text: opt, selected: sel, mark: mark, palette: p) { picks[i] = o } + } + if revealed { + if i < meanings.count { Meaning(text: vm.tr(meanings[i]), palette: p, visible: true) } + if i < expls.count { Meaning(text: expls[i], palette: p, visible: true) } + } + Spacer().frame(height: 10) + } + } + } +} + +private struct AssemblyEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var placed: [[Int]] + @State private var pools: [[Int]] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + let items = spec.arr("items") + _placed = State(initialValue: items.map { _ in [] }) + _pools = State(initialValue: items.map { item in + Array(0.. Void + @State private var fields: [[String]] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + let items = spec.arr("rows").isEmpty ? spec.arr("items") : spec.arr("rows") + _fields = State(initialValue: items.map { q in + Array(repeating: "", count: max(1, q.strs("hints").count, q.answerList().count)) + }) + } + + var body: some View { + let items = spec.arr("rows").isEmpty ? spec.arr("items") : spec.arr("rows") + let p = vm.palette + let umlaut = items.contains { q in + q.answerList().contains { hasUmlaut($0) } || hasUmlaut(q.str("prompt")) + } + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + var ok = 0, total = 0, incomplete = false + for (i, q) in items.enumerated() { + let answers = q.answerList() + for (j, value) in fields[i].enumerated() { + total += 1 + let ans = j < answers.count ? answers[j] : "" + let norm = normalizeAnswer(value) + if answerAccepts(norm, ans) { ok += 1 } + else if answerIncomplete(norm, ans) { incomplete = true } + } + } + if total > 0 && ok == total { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else if incomplete { fb = (vm.tr("trans_incomplete"), "warn") } + else { fb = (vm.tr("feedback_retry"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + if let note = spec.strOrNull("note") { Hint(text: note, palette: p) } + if let sample = spec.strOrNull("sample") { Hint(text: sample, palette: p) } + if let bank = spec.strOrNull("bank") { Hint(text: "\(vm.tr("wordbank")) \(bank)", palette: p) } + if umlaut { Hint(text: vm.tr("hint_umlauts"), palette: p) } + ForEach(items.indices, id: \.self) { i in + let q = items[i] + Prompt(text: q.str("prompt"), palette: p) + let answers = q.answerList() + let hints = q.strs("hints") + ForEach(fields[i].indices, id: \.self) { j in + let ans = j < answers.count ? answers[j] : "" + WordField( + value: Binding(get: { fields[i][j] }, set: { fields[i][j] = $0 }), + palette: p, + placeholder: j < hints.count ? hints[j] : vm.tr("your_answer"), + mark: revealed ? answerAccepts(normalizeAnswer(fields[i][j]), ans) : nil + ) + .padding(.bottom, 4) + } + if revealed { + if let m = q.strOrNull("meaning") { Meaning(text: vm.tr(m), palette: p, visible: true) } + if let m = q.strOrNull("mean") { Meaning(text: vm.tr(m), palette: p, visible: true) } + if let g = q.strOrNull("german") { Meaning(text: g, palette: p, visible: true) } + if let s = q.strOrNull("shown") { Meaning(text: s, palette: p, visible: true) } + } + Spacer().frame(height: 10) + } + } + } +} + +private struct FreeEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var shown: [Bool] + @State private var values: [String] + @State private var fb = ("", "") + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + let qs = spec.arr("questions").isEmpty ? spec.arr("rows") : spec.arr("questions") + _shown = State(initialValue: Array(repeating: false, count: qs.count)) + _values = State(initialValue: Array(repeating: "", count: qs.count)) + } + + var body: some View { + let qs = spec.arr("questions").isEmpty ? spec.arr("rows") : spec.arr("questions") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("finish"), onAction: { + fb = (vm.tr("feedback_ok"), "ok") + shown = shown.map { _ in true } + onDone() + }, feedback: fb.0, kind: fb.1) { + if let tip = spec.strOrNull("tip") { Hint(text: vm.tr(tip), palette: p) } + ForEach(qs.indices, id: \.self) { i in + let q = qs[i] + Prompt(text: q.str("question").isEmpty ? q.str("stem") : q.str("question"), palette: p) + WordField(value: Binding(get: { values[i] }, set: { values[i] = $0 }), palette: p, placeholder: vm.tr("your_answer")) + PillButton(label: vm.tr("show_sample"), palette: p) { shown[i].toggle() } + .padding(.vertical, 6) + if shown[i] { + let sample = q.str("sample") + let qcs = q.str("qCs") + let acs = q.str("aCs") + Meaning( + text: qcs.isEmpty ? sample : vm.fmt("sample_fmt", vm.tr(qcs), sample, vm.tr(acs)), + palette: p, + visible: true + ) + } + Spacer().frame(height: 10) + } + } + } +} + +private struct AssignEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var active = 0 + @State private var loc: [Int] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + _loc = State(initialValue: Array(repeating: -1, count: spec.arr("items").count)) + } + + var body: some View { + let items = spec.arr("items") + let groups = spec.strs("groups") + let meanings = spec.strs("meanings") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + let ok = items.indices.allSatisfy { loc[$0] == items[$0].int("group") } + if ok { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else { fb = (vm.tr("feedback_retry"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + Hint(text: vm.tr("assign_hint"), palette: p) + FlowLayout(spacing: 8) { + ForEach(groups.indices, id: \.self) { i in + SegChip(label: groups[i], selected: active == i, palette: p) { active = i } + } + } + Text(vm.tr("wordbank")).font(.system(size: 12)).foregroundStyle(p.subtext).padding(.top, 10) + FlowLayout(spacing: 6) { + ForEach(items.indices, id: \.self) { i in + if loc[i] == -1 { + let label = [items[i].strOrNull("emoji"), items[i].str("label")].compactMap { $0 }.joined(separator: " ") + WordChip(text: label, palette: p) { loc[i] = active } + } + } + } + ForEach(groups.indices, id: \.self) { g in + Text(groups[g]).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext).padding(.top, 10) + FlowLayout(spacing: 6) { + ForEach(items.indices, id: \.self) { i in + if loc[i] == g { + let label = [items[i].strOrNull("emoji"), items[i].str("label")].compactMap { $0 }.joined(separator: " ") + WordChip(text: label, palette: p) { loc[i] = -1 } + } + } + } + } + if revealed { + ForEach(items.indices, id: \.self) { i in + if i < meanings.count { Meaning(text: vm.tr(meanings[i]), palette: p, visible: true) } + } + } + } + } +} + +private struct HangmanEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var word = 0 + @State private var misses = 0 + @State private var guessed: [Bool] + @State private var fb = ("", "") + @State private var finished = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + _guessed = State(initialValue: Array(repeating: false, count: spec.strs("letters").count)) + } + + var body: some View { + let words = spec.strs("words") + let tips = spec.strs("tips") + let letters = spec.strs("letters") + let p = vm.palette + let cur = word < words.count ? words[word].uppercased() : "" + VStack(alignment: .leading, spacing: 8) { + PageTop(vm: vm, back: { vm.back() }, title: title, subtitle: sub) + Text(vm.fmt("hm_progress", word + 1, words.count)).foregroundStyle(p.subtext) + if word < tips.count { Hint(text: "\(vm.tr("hm_hint")): \(vm.tr(tips[word]))", palette: p) } + Canvas { ctx, size in + var gallows = Path() + gallows.move(to: CGPoint(x: 40, y: size.height - 10)) + gallows.addLine(to: CGPoint(x: size.width * 0.55, y: size.height - 10)) + gallows.move(to: CGPoint(x: 70, y: size.height - 10)) + gallows.addLine(to: CGPoint(x: 70, y: 16)) + gallows.addLine(to: CGPoint(x: size.width * 0.3 + 40, y: 16)) + ctx.stroke(gallows, with: .color(p.text), style: StrokeStyle(lineWidth: 6, lineCap: .round)) + let x = size.width * 0.3 + 40 + if misses > 0 { + var rope = Path(); rope.move(to: CGPoint(x: x, y: 16)); rope.addLine(to: CGPoint(x: x, y: 36)) + ctx.stroke(rope, with: .color(p.text), lineWidth: 4) + } + if misses > 1 { + ctx.stroke(Path(ellipseIn: CGRect(x: x - 16, y: 36, width: 32, height: 32)), with: .color(p.text), lineWidth: 4) + } + if misses > 2 { + var body = Path(); body.move(to: CGPoint(x: x, y: 68)); body.addLine(to: CGPoint(x: x, y: 110)) + ctx.stroke(body, with: .color(p.text), lineWidth: 4) + } + if misses > 3 { + var a = Path(); a.move(to: CGPoint(x: x, y: 80)); a.addLine(to: CGPoint(x: x - 22, y: 100)) + ctx.stroke(a, with: .color(p.text), lineWidth: 4) + } + if misses > 4 { + var a = Path(); a.move(to: CGPoint(x: x, y: 80)); a.addLine(to: CGPoint(x: x + 22, y: 100)) + ctx.stroke(a, with: .color(p.text), lineWidth: 4) + } + if misses > 5 { + var a = Path(); a.move(to: CGPoint(x: x, y: 110)); a.addLine(to: CGPoint(x: x - 22, y: 140)) + ctx.stroke(a, with: .color(p.text), lineWidth: 4) + } + } + .frame(height: 160) + HStack(spacing: 6) { + ForEach(Array(cur.enumerated()), id: \.offset) { _, ch in + let idx = letters.firstIndex { $0.compare(String(ch), options: .caseInsensitive) == .orderedSame } + let show = idx.map { guessed[$0] } ?? false + Text(show ? String(ch) : "_") + .font(.system(size: 26, weight: .bold)) + .foregroundStyle(p.text) + } + } + ForEach(Array(letters.chunked(10).enumerated()), id: \.offset) { _, row in + HStack(spacing: 4) { + ForEach(row, id: \.self) { letter in + if let i = letters.firstIndex(of: letter) { + Button { + guessed[i] = true + if !cur.localizedCaseInsensitiveContains(letter) { + misses += 1 + if misses >= 6 { fb = (vm.fmt("hm_fail", cur), "err") } + } else if cur.allSatisfy({ ch in + let idx = letters.firstIndex { $0.compare(String(ch), options: .caseInsensitive) == .orderedSame } + return idx.map { guessed[$0] } ?? false + }) { + if word + 1 >= words.count { + finished = true + fb = (vm.tr("hm_done"), "ok") + onDone() + } else { + fb = (vm.tr("hm_wrong"), "ok") + word += 1 + misses = 0 + guessed = guessed.map { _ in false } + } + } + } label: { + Text(letter) + .font(.system(size: 15, weight: .bold)) + .foregroundStyle(p.text) + .padding(.horizontal, 10) + .padding(.vertical, 8) + .background(guessed[i] ? p.surface1 : p.mantle, in: RoundedRectangle(cornerRadius: 8)) + } + .buttonStyle(.plain) + .disabled(guessed[i] || finished) + } + } + } + } + FeedbackLine(text: fb.0, kind: fb.1, palette: p) + if misses >= 6 && !finished { + PillButton(label: vm.tr("hm_retry"), palette: p) { + misses = 0 + guessed = guessed.map { _ in false } + fb = ("", "") + } + } + Spacer() + } + .padding(.horizontal, 16) + } +} + +private extension Array { + func chunked(_ size: Int) -> [[Element]] { + stride(from: 0, to: count, by: size).map { Array(self[$0.. Void + @State private var cards: [(String, String, String)] + @State private var index = 0 + @State private var done = 0 + @State private var value = "" + @State private var fb = ("", "") + let total: Int + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + let list = spec.arr("sections").flatMap { sec in + sec.arr("rows").map { (sec.str("header"), $0.str("prompt"), $0.str("answers")) } + } + _cards = State(initialValue: list) + total = list.count + } + + var body: some View { + let p = vm.palette + VStack(alignment: .leading, spacing: 8) { + PageTop(vm: vm, back: { vm.back() }, title: title, subtitle: sub) + Text(vm.fmt("trans_progress", done, total)).foregroundStyle(p.subtext) + if cards.isEmpty { + Text(vm.tr("trans_done")).font(.system(size: 16, weight: .bold)).foregroundStyle(p.success) + } else if index < cards.count { + let cur = cards[index] + Hint(text: cur.0, palette: p) + Prompt(text: cur.1, palette: p) + if hasUmlaut(cur.2) { Hint(text: vm.tr("hint_umlauts"), palette: p) } + WordField(value: $value, palette: p, placeholder: vm.tr("your_answer")) + PrimaryButton(label: vm.tr("check"), palette: p) { + let norm = normalizeAnswer(value) + if answerAccepts(norm, cur.2) { + done += 1 + cards.remove(at: index) + if cards.isEmpty { fb = (vm.tr("trans_done"), "ok"); onDone() } + else { if index >= cards.count { index = 0 }; value = ""; fb = ("", "") } + } else if answerIncomplete(norm, cur.2) { + fb = (vm.tr("trans_incomplete"), "warn") + } else { + fb = (vm.fmt("trans_wrong", cur.2.split(separator: "|").first.map(String.init) ?? ""), "err") + let item = cards.remove(at: index) + cards.append(item) + if index >= cards.count { index = 0 } + value = "" + } + } + FeedbackLine(text: fb.0, kind: fb.1, palette: p) + } + Spacer() + } + .padding(.horizontal, 16) + } +} diff --git a/ios/Maturita/UI/ExercisesMore.swift b/ios/Maturita/UI/ExercisesMore.swift new file mode 100644 index 0000000..9e49d74 --- /dev/null +++ b/ios/Maturita/UI/ExercisesMore.swift @@ -0,0 +1,857 @@ +import SwiftUI + +struct DialogEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + + var body: some View { + let pool = spec.strs("pool") + let meanings = spec.strs("meanings") + let lines = dialogLines() + ComboRows(vm: vm, title: title, sub: sub, pool: pool, n: lines.count, onDone: onDone) { picks, expected, revealed in + ForEach(lines.indices, id: \.self) { i in + let line = lines[i] + if let name = line.name { + Text(name) + .font(.system(size: 15, weight: .semibold)) + .foregroundStyle(vm.palette.subtext) + .padding(.vertical, 6) + } + ComboLine( + vm: vm, pool: pool, picks: picks, expected: expected, idx: i, + answer: line.answer, + prefix: line.prefix, + suffix: line.suffix, + meaning: i < meanings.count ? meanings[i] : nil, + revealed: revealed + ) + } + } + } + + private func dialogLines() -> [(name: String?, prefix: String, answer: String, suffix: String)] { + var out: [(name: String?, prefix: String, answer: String, suffix: String)] = [] + for d in spec.arr("dialogues") { + var header: String? = d.str("name") + for row in d.arr("rows") { + out.append(( + header, + [row.str("speaker"), row.str("before")].filter { !$0.isEmpty }.joined(separator: " "), + row.str("answer"), + row.str("after") + )) + header = nil + } + } + return out + } +} + +struct ComboEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + + var body: some View { + let pool = spec.strs("pool") + let rows = spec.arr("rows") + let meanings = spec.strs("meanings") + let type = spec.str("type") + if type == "verb_sections" { + let sections = spec.arr("sections") + let allRows = sections.flatMap { $0.arr("rows") } + ComboRows(vm: vm, title: title, sub: sub, pool: spec.strs("pool"), n: allRows.count, onDone: onDone, revealMean: spec.bool("transUpfront")) { picks, expected, revealed in + ForEach(Array(verbSectionLines().enumerated()), id: \.offset) { idx, line in + if let title = line.title { + Text(title).font(.system(size: 15, weight: .semibold)).foregroundStyle(vm.palette.subtext) + } + ComboLine( + vm: vm, pool: spec.strs("pool"), picks: picks, expected: expected, idx: idx, + answer: line.answer, prefix: line.before, suffix: line.after, + meaning: line.meaning, + revealed: revealed || spec.bool("transUpfront") + ) + } + } + } else if type == "ordne" { + ComboRows(vm: vm, title: title, sub: sub, pool: [], n: rows.count * 2, onDone: onDone) { picks, expected, revealed in + ForEach(rows.indices, id: \.self) { i in + ComboLine(vm: vm, pool: spec.strs("fwPool"), picks: picks, expected: expected, idx: i * 2, answer: rows[i].str("fw"), prefix: "\(i + 1). ", suffix: rows[i].str("mid"), revealed: revealed) + ComboLine(vm: vm, pool: spec.strs("ansPool"), picks: picks, expected: expected, idx: i * 2 + 1, answer: rows[i].str("ans"), prefix: "→ ", meaning: i < meanings.count ? meanings[i] : nil, revealed: revealed) + } + } + } else if type == "fill" { + let blanks = rows.reduce(0) { $0 + $1.answerList().count } + ComboRows(vm: vm, title: title, sub: sub, pool: pool, n: blanks, onDone: onDone, revealMean: spec.bool("preMeaning")) { picks, expected, revealed in + if let sample = spec.strOrNull("sample") { Hint(text: sample, palette: vm.palette) } + ForEach(Array(fillRows().enumerated()), id: \.offset) { _, block in + FlowLayout(spacing: 4) { + if let num = block.num { + Text(num).font(.system(size: 16, weight: .semibold)).foregroundStyle(vm.palette.text) + } + ForEach(Array(block.parts.enumerated()), id: \.offset) { _, part in + switch part { + case .text(let s): + Text(s).foregroundStyle(vm.palette.text) + case .blank(let idx, let ans): + ComboLine(vm: vm, pool: pool, picks: picks, expected: expected, idx: idx, answer: ans, revealed: revealed, inline: true) + } + } + if let mean = block.meaning { + Text(vm.tr(mean)).font(.system(size: 12)).foregroundStyle(vm.palette.subtext) + } + } + .padding(.bottom, 6) + if revealed || spec.bool("preMeaning") || spec.bool("showGerman"), let mean = block.rowMean { + Meaning(text: vm.tr(mean), palette: vm.palette, visible: true) + } + } + } + } else { + ComboRows(vm: vm, title: title, sub: sub, pool: pool, n: rows.count, onDone: onDone, revealMean: spec.bool("preMeaning")) { picks, expected, revealed in + if let sample = spec.strOrNull("sample") { Hint(text: sample, palette: vm.palette) } + ForEach(rows.indices, id: \.self) { i in + let r = rows[i] + let prefix: String = { + switch type { + case "number": return "\(r.str("digits")) = " + case "count": return "\(Array(repeating: r.str("emoji"), count: r.int("count")).joined(separator: " ")) \(r.str("noun")) " + case "seq": return r.str("before") + case "verbclue": return "\(r.str("emoji")) \(r.str("before"))" + default: return r.str("before") + } + }() + let suffix: String = { + switch type { + case "seq", "verbclue", "verb": return r.str("after") + default: return "" + } + }() + ComboLine( + vm: vm, pool: pool, picks: picks, expected: expected, idx: i, answer: r.str("answer"), + prefix: prefix, suffix: suffix, + meaning: i < meanings.count ? meanings[i] : r.strOrNull("mean"), + revealed: revealed || spec.bool("preMeaning") + ) + } + } + } + } + + private func verbSectionLines() -> [(title: String?, before: String, answer: String, after: String, meaning: String?)] { + var out: [(title: String?, before: String, answer: String, after: String, meaning: String?)] = [] + for sec in spec.arr("sections") { + var header: String? = sec.str("title") + let meanings = sec.strs("meanings") + for (ri, row) in sec.arr("rows").enumerated() { + out.append(( + header, + row.str("before"), + row.str("answer"), + row.str("after"), + ri < meanings.count ? meanings[ri] : nil + )) + header = nil + } + } + return out + } + + private enum FillPart { + case text(String) + case blank(Int, String) + } + + private func fillRows() -> [(num: String?, parts: [FillPart], meaning: String?, rowMean: String?)] { + let meanings = spec.strs("meanings") + var i = 0 + return spec.arr("rows").enumerated().map { ri, r in + var parts: [FillPart] = [] + let segs = r.strsOrEmpty("segs") + let ans = r.answerList() + for si in segs.indices { + if let seg = segs[si], !seg.isEmpty { parts.append(.text(seg)) } + if si < ans.count { + parts.append(.blank(i, ans[si])) + i += 1 + } + } + return ( + r.strOrNull("num"), + parts, + ri < meanings.count ? meanings[ri] : nil, + r.strOrNull("mean") + ) + } + } +} + +private struct ComboRows: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let pool: [String] + let n: Int + var onDone: () -> Void + var revealMean = false + @ViewBuilder var bodyContent: (Binding<[String]>, Binding<[String]>, Bool) -> Body + @State private var picks: [String] + @State private var expected: [String] + @State private var fb = ("", "") + @State private var revealed: Bool + + init( + vm: AppModel, + title: String, + sub: String?, + pool: [String], + n: Int, + onDone: @escaping () -> Void, + revealMean: Bool = false, + @ViewBuilder bodyContent: @escaping (Binding<[String]>, Binding<[String]>, Bool) -> Body + ) { + self.vm = vm + self.title = title + self.sub = sub + self.pool = pool + self.n = n + self.onDone = onDone + self.revealMean = revealMean + self.bodyContent = bodyContent + _picks = State(initialValue: Array(repeating: "", count: n)) + _expected = State(initialValue: Array(repeating: "", count: n)) + _revealed = State(initialValue: revealMean) + } + + var body: some View { + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + let ok = expected.indices.allSatisfy { i in + let exp = expected[i] + return exp.isEmpty || answerAccepts(normalizeAnswer(picks[i]), exp) + } + if ok { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else { fb = (vm.tr("feedback_retry"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + bodyContent($picks, $expected, revealed) + } + } +} + +private struct ComboLine: View { + @ObservedObject var vm: AppModel + let pool: [String] + @Binding var picks: [String] + @Binding var expected: [String] + let idx: Int + let answer: String + var prefix: String = "" + var suffix: String = "" + var meaning: String? + var revealed: Bool + var inline = false + @State private var open = false + + var body: some View { + let p = vm.palette + let pick = idx < picks.count ? picks[idx] : "" + let mark: Bool? = { + if revealed && !pick.isEmpty { return answerAccepts(normalizeAnswer(pick), answer) } + return nil + }() + let chip = Button { + open = true + } label: { + Text(pick.isEmpty ? "—" : pick) + .font(.system(size: 15)) + .foregroundStyle(pick.isEmpty ? p.overlay : p.text) + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(p.mantle, in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(mark == true ? p.success : mark == false ? p.error : p.text.opacity(0.12), lineWidth: 1) + ) + } + .buttonStyle(.plain) + + Group { + if inline { + chip + } else { + FlowLayout(spacing: 6) { + if !prefix.isEmpty { Text(prefix).font(.system(size: 16)).foregroundStyle(p.text) } + chip + if !suffix.isEmpty { Text(suffix).font(.system(size: 16)).foregroundStyle(p.text) } + } + .padding(.bottom, 8) + } + } + .onAppear { + if idx >= 0 && idx < expected.count { expected[idx] = answer } + } + .onChange(of: answer) { new in + if idx >= 0 && idx < expected.count { expected[idx] = new } + } + .sheet(isPresented: $open) { + WordPicker(palette: p, pool: pool) { word in + if let word, idx < picks.count { picks[idx] = word } + open = false + } + .presentationDetents([.medium, .large]) + } + if revealed, let meaning, !meaning.isEmpty { + Meaning(text: vm.tr(meaning), palette: p, visible: true) + } + } +} + +struct WordPicker: View { + let palette: Palette + let pool: [String] + var onPick: (String?) -> Void + + var body: some View { + NavigationStack { + ScrollView { + VStack(alignment: .leading, spacing: 0) { + ForEach(pool, id: \.self) { w in + Button { onPick(w) } label: { + Text(w) + .font(.system(size: 16)) + .foregroundStyle(palette.text) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 14) + .padding(.vertical, 12) + } + .buttonStyle(.plain) + } + } + .padding(10) + } + .background(palette.base) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(role: .cancel) { onPick(nil) } label: { Text("Zavřít") } + } + } + } + } +} + +struct Ex2Ex: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + + var body: some View { + let items = spec.arr("items") + let pool = spec.strs("pool") + let blanks = items.reduce(0) { acc, item in + acc + item.arr("rows").reduce(0) { $0 + $1.strs("answers").count } + } + ComboRows(vm: vm, title: title, sub: sub, pool: pool, n: blanks, onDone: onDone) { picks, expected, revealed in + ForEach(Array(ex2Blocks().enumerated()), id: \.offset) { _, block in + Meaning(text: block.czech, palette: vm.palette, visible: true) + ForEach(Array(block.rows.enumerated()), id: \.offset) { _, row in + FlowLayout(spacing: 4) { + if let num = row.num { + Text(num).foregroundStyle(vm.palette.text).padding(.trailing, 6) + } + ForEach(Array(row.parts.enumerated()), id: \.offset) { _, part in + switch part { + case .text(let s): + Text(s).foregroundStyle(vm.palette.text) + case .blank(let idx, let ans): + ComboLine(vm: vm, pool: pool, picks: picks, expected: expected, idx: idx, answer: ans, revealed: revealed, inline: true) + } + } + } + } + } + } + } + + private enum Part { + case text(String) + case blank(Int, String) + } + + private func ex2Blocks() -> [(czech: String, rows: [(num: String?, parts: [Part])])] { + var i = 0 + return spec.arr("items").map { item in + let rows = item.arr("rows").map { row -> (num: String?, parts: [Part]) in + var parts: [Part] = [] + let segs = row.strsOrEmpty("segs") + let ans = row.strs("answers") + for si in segs.indices { + if let seg = segs[si], !seg.isEmpty { parts.append(.text(seg)) } + if si < ans.count { + parts.append(.blank(i, ans[si])) + i += 1 + } + } + return (row.strOrNull("num"), parts) + } + return (item.str("czech"), rows) + } + } +} + +struct LettersEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var fields: [String] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + let n = spec.arr("rows").flatMap { $0.strs("answers") }.count + _fields = State(initialValue: Array(repeating: "", count: n)) + } + + var body: some View { + let rows = spec.arr("rows") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + var i = 0, ok = 0, total = 0 + for r in rows { + for ans in r.strs("answers") { + total += 1 + if i < fields.count && answerAccepts(normalizeAnswer(fields[i]), ans) { ok += 1 } + i += 1 + } + } + if ok == total { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else { fb = (vm.tr("feedback_retry"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + if rows.contains(where: { $0.strs("answers").contains { hasUmlaut($0) } }) { + Hint(text: vm.tr("hint_umlauts"), palette: p) + } + LettersRows(vm: vm, rows: rows, fields: $fields, revealed: revealed) + } + } +} + +private struct LettersRows: View { + @ObservedObject var vm: AppModel + let rows: [J] + @Binding var fields: [String] + let revealed: Bool + + var body: some View { + let p = vm.palette + let pairs = build() + VStack(alignment: .leading, spacing: 8) { + ForEach(pairs.indices, id: \.self) { ri in + let row = pairs[ri] + if let num = row.num { Text(num).foregroundStyle(p.subtext) } + FlowLayout { + ForEach(row.parts.indices, id: \.self) { pi in + switch row.parts[pi] { + case .text(let s): + Text(s).foregroundStyle(p.text) + case .field(let idx, let ans): + WordField( + value: Binding(get: { idx < fields.count ? fields[idx] : "" }, set: { if idx < fields.count { fields[idx] = $0 } }), + palette: p, + placeholder: "", + mark: revealed ? answerAccepts(normalizeAnswer(idx < fields.count ? fields[idx] : ""), ans) : nil + ) + .frame(width: 72) + } + } + } + if revealed, let czech = row.czech { Meaning(text: czech, palette: p, visible: true) } + if revealed, let mean = row.mean { Meaning(text: mean, palette: p, visible: true) } + } + } + } + + private enum Part { + case text(String) + case field(Int, String) + } + + private struct RowModel { + var num: String? + var parts: [Part] + var czech: String? + var mean: String? + } + + private func build() -> [RowModel] { + var i = 0 + return rows.map { r in + var parts: [Part] = [] + let segs = r.strsOrEmpty("segs") + let ans = r.strs("answers") + for si in segs.indices { + if let seg = segs[si], !seg.isEmpty { parts.append(.text(seg)) } + if si < ans.count { + parts.append(.field(i, ans[si])) + i += 1 + } + } + return RowModel(num: r.strOrNull("num"), parts: parts, czech: r.strOrNull("czech"), mean: r.strOrNull("mean")) + } + } +} + +struct TableEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var fields: [String] + @State private var fb = ("", "") + @State private var revealed = false + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + _fields = State(initialValue: Array(repeating: "", count: spec.strs("nouns").count * spec.strs("persons").count)) + } + + var body: some View { + let persons = spec.strs("persons") + let nouns = spec.strs("nouns") + let answers = spec.intRows("answers") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("check"), onAction: { + var ok = 0 + for (r, row) in answers.enumerated() { + for (c, ans) in row.enumerated() { + let i = r * persons.count + c + if i < fields.count && normalizeAnswer(fields[i]) == normalizeAnswer(ans) { ok += 1 } + } + } + if ok == fields.count { fb = (vm.tr("feedback_ok"), "ok"); onDone() } + else { fb = (vm.tr("feedback_retry"), "err") } + revealed = true + }, feedback: fb.0, kind: fb.1) { + ForEach(nouns.indices, id: \.self) { r in + Text(nouns[r]).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + ForEach(persons.indices, id: \.self) { c in + let i = r * persons.count + c + Text(persons[c]).font(.system(size: 12)).foregroundStyle(p.subtext) + WordField(value: Binding(get: { i < fields.count ? fields[i] : "" }, set: { if i < fields.count { fields[i] = $0 } }), palette: p, placeholder: "") + } + Spacer().frame(height: 8) + } + } + } +} + +struct RevealEx: View { + @ObservedObject var vm: AppModel + let title: String + var sub: String? + let spec: J + var onDone: () -> Void + @State private var shown: [Bool] + @State private var fb = ("", "") + + init(vm: AppModel, title: String, sub: String?, spec: J, onDone: @escaping () -> Void) { + self.vm = vm + self.title = title + self.sub = sub + self.spec = spec + self.onDone = onDone + _shown = State(initialValue: Array(repeating: false, count: spec.arr("items").count)) + } + + var body: some View { + let items = spec.arr("items") + let p = vm.palette + ExerciseScaffold(vm: vm, title: title, sub: sub, action: vm.tr("finish"), onAction: { + shown = shown.map { _ in true } + fb = (vm.tr("feedback_ok"), "ok") + onDone() + }, feedback: fb.0, kind: fb.1) { + if let note = spec.strOrNull("note") { Hint(text: note, palette: p) } + ForEach(items.indices, id: \.self) { i in + Prompt(text: items[i].str("prompt"), palette: p) + PillButton(label: vm.tr("show_sample"), palette: p) { shown[i].toggle() } + .padding(.vertical, 6) + if shown[i] { Meaning(text: items[i].str("solution"), palette: p, visible: true) } + Spacer().frame(height: 8) + } + } + } +} + +struct NetQuizScreen: View { + @ObservedObject var vm: AppModel + let id: Int + + var body: some View { + if let lesson = vm.content.netLesson(id) { + if id == 1 { + VlsmEx(vm: vm, lesson: lesson) + } else { + let spec = J([ + "type": "choice", + "title": vm.tr(lesson.str("exTitleKey")), + "sub": "net_quiz_intro", + "questions": lesson.rawArray("quiz"), + ]) + DispatchExercise(vm: vm, spec: spec, titleFallback: vm.tr(lesson.str("exTitleKey"))) { + vm.markNet(id) + } + } + } + } +} + +struct HwQuizScreen: View { + @ObservedObject var vm: AppModel + let id: Int + + var body: some View { + if let lesson = vm.content.hwLesson(id) { + let spec = J([ + "type": "choice", + "title": vm.tr(lesson.str("exTitleKey")), + "sub": lesson.str("quizHeadKey"), + "questions": lesson.rawArray("quiz"), + ]) + DispatchExercise(vm: vm, spec: spec, titleFallback: vm.tr(lesson.str("exTitleKey"))) { + vm.markHw(id) + } + } + } +} + +private struct VlsmRow { + var pfx = "" + var net = "" + var bc = "" + var lo = "" + var hi = "" +} + +private struct VlsmEx: View { + @ObservedObject var vm: AppModel + let lesson: J + @State private var done: [Bool] + @State private var rows: [[VlsmRow]] + @State private var fb = ("", "") + + init(vm: AppModel, lesson: J) { + self.vm = vm + self.lesson = lesson + let answers = vm.content.netAnswers + _done = State(initialValue: Array(repeating: false, count: vm.content.netTasks.count)) + _rows = State(initialValue: answers.map { block in Array(repeating: VlsmRow(), count: block.count) }) + } + + var body: some View { + let tasks = vm.content.netTasks + let answers = vm.content.netAnswers + let p = vm.palette + VStack(alignment: .leading, spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("net_ex_title"), subtitle: nil) + ScrollView { + VStack(alignment: .leading, spacing: 12) { + ForEach(tasks.indices, id: \.self) { ti in + let task = tasks[ti] + let block = ti < answers.count ? answers[ti] : [] + let infeasible = block.isEmpty || block.allSatisfy { $0.int("pfx") <= 0 } + Text(task.str("prompt")).foregroundStyle(p.text).padding(.vertical, 8) + if infeasible { + Hint(text: vm.tr("net_infeasible"), palette: p) + } else { + ForEach(block.indices, id: \.self) { si in + Text("Podsíť \(String(UnicodeScalar(65 + si)!))") + .font(.system(size: 14, weight: .semibold)) + .foregroundStyle(p.subtext) + PrefixMenu(value: Binding( + get: { rows[ti][si].pfx }, + set: { rows[ti][si].pfx = $0 } + ), palette: p) + WordField(value: Binding(get: { rows[ti][si].net }, set: { rows[ti][si].net = $0 }), palette: p, placeholder: "síť") + WordField(value: Binding(get: { rows[ti][si].bc }, set: { rows[ti][si].bc = $0 }), palette: p, placeholder: "broadcast") + WordField(value: Binding(get: { rows[ti][si].lo }, set: { rows[ti][si].lo = $0 }), palette: p, placeholder: "první uzel") + WordField(value: Binding(get: { rows[ti][si].hi }, set: { rows[ti][si].hi = $0 }), palette: p, placeholder: "poslední uzel") + } + PillButton(label: vm.tr("check"), palette: p) { + let ok = block.indices.allSatisfy { si in + let a = block[si] + let field = rows[ti][si] + return Int(field.pfx.replacingOccurrences(of: "/", with: "")) == a.int("pfx") + && netTxtEq(field.net, a.str("net")) + && netTxtEq(field.bc, a.str("bcast")) + && netTxtEq(field.lo, a.str("lo")) + && netTxtEq(field.hi, a.str("hi")) + } + if ok { + done[ti] = true + fb = (vm.tr("feedback_ok"), "ok") + maybeFinish() + } else { + fb = (vm.tr("feedback_retry"), "err") + } + } + .padding(.vertical, 6) + } + PillButton(label: vm.tr("net_solution"), palette: p) { + if !infeasible { + for si in block.indices { + rows[ti][si].pfx = "/\(block[si].int("pfx"))" + rows[ti][si].net = block[si].str("net") + rows[ti][si].bc = block[si].str("bcast") + rows[ti][si].lo = block[si].str("lo") + rows[ti][si].hi = block[si].str("hi") + } + } + done[ti] = true + fb = ("", "") + maybeFinish() + } + if done[ti] { Meaning(text: task.str("solution"), palette: p, visible: true) } + } + } + } + FeedbackLine(text: fb.0, kind: fb.1, palette: p) + } + .padding(.horizontal, 16) + } + + private func maybeFinish() { + if !done.isEmpty && done.allSatisfy({ $0 }) { vm.markNet(1) } + } +} + +private struct PrefixMenu: View { + @Binding var value: String + let palette: Palette + @State private var open = false + + var body: some View { + Button { open = true } label: { + Text(value.isEmpty ? "/…" : value) + .font(.system(size: 15)) + .foregroundStyle(palette.text) + .padding(10) + .frame(maxWidth: .infinity, alignment: .leading) + .background(palette.mantle, in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + } + .buttonStyle(.plain) + .padding(.vertical, 4) + .sheet(isPresented: $open) { + WordPicker(palette: palette, pool: (8...30).map { "/\($0)" }) { word in + if let word { value = word } + open = false + } + .presentationDetents([.medium, .large]) + } + } +} + +struct LitQuizScreen: View { + @ObservedObject var vm: AppModel + let id: String + @State private var idx = 0 + @State private var score = 0 + @State private var answered = false + @State private var finished = false + + var body: some View { + if let book = vm.content.book(id) { + let qs = book.arr("quiz") + let p = vm.palette + let kahoot = [p.accent, p.error, p.warning, p.success] + VStack(alignment: .leading, spacing: 8) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr(book.str("quizTitle")), subtitle: vm.tr(book.str("quizSub"))) + if finished { + Text(vm.tr("lit_finished")).font(.system(size: 22, weight: .bold)).foregroundStyle(p.text) + Text(vm.tr("lit_finished_text")).foregroundStyle(p.subtext) + Text(vm.fmt("lit_score_fmt", score, qs.count)).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + PrimaryButton(label: vm.tr("lit_again"), palette: p) { + idx = 0; score = 0; answered = false; finished = false + } + } else if idx < qs.count { + let q = qs[idx] + HStack { + Text(vm.fmt("lit_question_fmt", idx + 1, qs.count)).foregroundStyle(p.subtext) + Spacer() + Text(vm.fmt("lit_score_fmt", score, qs.count)).foregroundStyle(p.subtext) + } + Text(q.str("prompt")).font(.system(size: 18, weight: .semibold)).foregroundStyle(p.text).padding(.vertical, 12) + ForEach(Array(q.strs("options").enumerated()), id: \.offset) { i, opt in + Button { + answered = true + if i == q.int("correct") { score += 1 } + } label: { + Text(opt) + .font(.system(size: 16, weight: .semibold)) + .foregroundStyle(p.onAccent) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(16) + .background(kahoot[i % 4], in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + } + .buttonStyle(.plain) + .disabled(answered) + .padding(.bottom, 8) + } + if answered { + Meaning(text: q.str("expl"), palette: p, visible: true) + PrimaryButton(label: idx + 1 >= qs.count ? vm.tr("lit_show_result") : vm.tr("lit_next"), palette: p) { + if idx + 1 >= qs.count { + finished = true + vm.markBookQuiz(id) + } else { + idx += 1 + answered = false + } + } + } + } + Spacer() + } + .padding(16) + } + } +} + +struct PlotScreen: View { + @ObservedObject var vm: AppModel + let id: String + + var body: some View { + if let book = vm.content.book(id) { + let spec = J([ + "type": "assembly", + "title": vm.tr(book.str("plotTitle")), + "sub": book.str("plotSub"), + "items": book.rawArray("plot"), + "meanings": book.rawArray("plotMeaning"), + ]) + DispatchExercise(vm: vm, spec: spec, titleFallback: vm.tr(book.str("plotTitle"))) { + vm.markBookPlot(id) + } + } + } +} + diff --git a/ios/Maturita/UI/Icons.swift b/ios/Maturita/UI/Icons.swift new file mode 100644 index 0000000..9874349 --- /dev/null +++ b/ios/Maturita/UI/Icons.swift @@ -0,0 +1,304 @@ +import SwiftUI + +struct BackIcon: View { + var color: Color + var size: CGFloat = 16 + var body: some View { + Canvas { ctx, sz in + var p = Path() + p.move(to: CGPoint(x: sz.width * 0.68, y: sz.height * 0.18)) + p.addLine(to: CGPoint(x: sz.width * 0.28, y: sz.height * 0.5)) + p.addLine(to: CGPoint(x: sz.width * 0.68, y: sz.height * 0.82)) + ctx.stroke(p, with: .color(color), style: StrokeStyle(lineWidth: min(sz.width, sz.height) * 0.16, lineCap: .round, lineJoin: .round)) + } + .frame(width: size, height: size) + } +} + +struct SearchIcon: View { + var color: Color + var size: CGFloat = 18 + var body: some View { + Canvas { ctx, sz in + let r = min(sz.width, sz.height) * 0.28 + let c = CGPoint(x: sz.width * 0.42, y: sz.height * 0.42) + ctx.stroke(Path(ellipseIn: CGRect(x: c.x - r, y: c.y - r, width: r * 2, height: r * 2)), with: .color(color), lineWidth: min(sz.width, sz.height) * 0.12) + var handle = Path() + handle.move(to: CGPoint(x: sz.width * 0.62, y: sz.height * 0.62)) + handle.addLine(to: CGPoint(x: sz.width * 0.82, y: sz.height * 0.82)) + ctx.stroke(handle, with: .color(color), style: StrokeStyle(lineWidth: min(sz.width, sz.height) * 0.12, lineCap: .round)) + } + .frame(width: size, height: size) + } +} + +struct StatsIcon: View { + var color: Color + var size: CGFloat = 18 + var body: some View { + Canvas { ctx, sz in + let w = min(sz.width, sz.height) * 0.16 + let bars: [(CGFloat, CGFloat, CGFloat)] = [ + (0.18, 0.48, 0.36), (0.42, 0.22, 0.62), (0.66, 0.36, 0.48), + ] + for b in bars { + let rect = CGRect(x: sz.width * b.0, y: sz.height * b.1, width: w, height: sz.height * b.2) + ctx.fill(Path(roundedRect: rect, cornerRadius: w), with: .color(color)) + } + } + .frame(width: size, height: size) + } +} + +struct SettingsIcon: View { + var color: Color + var size: CGFloat = 18 + var body: some View { + Canvas { ctx, sz in + let cx = sz.width / 2 + let cy = sz.height / 2 + let s = min(sz.width, sz.height) + let rOuter = s * 0.48 + let rInner = s * 0.34 + let rHole = s * 0.16 + let teeth = 8 + let toothHalf = CGFloat.pi / CGFloat(teeth) + var gear = Path() + for i in 0.. some View { + switch name { + case "globe": GlobeIcon(color: color) + case "people": PeopleIcon(color: color) + case "bulb": BulbIcon(color: color) + case "quiz": QuizIcon(color: color) + case "order": OrderIcon(color: color) + default: BookIcon(color: color) + } +} diff --git a/ios/Maturita/UI/PathMap.swift b/ios/Maturita/UI/PathMap.swift new file mode 100644 index 0000000..d7796d1 --- /dev/null +++ b/ios/Maturita/UI/PathMap.swift @@ -0,0 +1,63 @@ +import SwiftUI + +struct MapNode { + let id: String + let label: String + let locked: Bool + let done: Bool + let current: Bool + var finish: Bool = false + var onClick: (() -> Void)? +} + +struct PathMap: View { + let nodes: [MapNode] + let palette: Palette + + var body: some View { + ScrollView { + LazyVStack(spacing: 10) { + ForEach(Array(nodes.enumerated()), id: \.element.id) { i, node in + Button { + if !node.locked { node.onClick?() } + } label: { + CardBox(palette: palette) { + HStack(spacing: 12) { + let bg: Color = { + if node.locked { return palette.lockedBg } + if node.current || node.done { return palette.accent } + return palette.node + }() + let fg: Color = { + if node.locked { return palette.overlay } + if node.current || node.done { return palette.onAccent } + return palette.text + }() + ZStack { + Circle().fill(bg).frame(width: 44, height: 44) + if node.locked { + LockIcon(color: palette.overlay, size: 16) + } else if node.done { + CheckIcon(color: palette.onAccent, size: 16) + } else { + Text("\(i + 1)") + .font(.system(size: 16, weight: .heavy)) + .foregroundStyle(fg) + } + } + Text(node.label) + .font(.system(size: 16, weight: node.current ? .bold : .semibold)) + .foregroundStyle(node.locked ? palette.overlay : palette.text) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + } + .buttonStyle(.plain) + .disabled(node.locked || node.onClick == nil) + .opacity(node.locked ? 0.48 : 1) + } + } + .padding(.bottom, 24) + } + } +} diff --git a/ios/Maturita/UI/Screens.swift b/ios/Maturita/UI/Screens.swift new file mode 100644 index 0000000..419a36b --- /dev/null +++ b/ios/Maturita/UI/Screens.swift @@ -0,0 +1,698 @@ +import SwiftUI + +struct WelcomeScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + ScrollView { + VStack(alignment: .leading, spacing: 0) { + Text("maturita.c") + .font(.system(size: 15, weight: .medium)) + .foregroundStyle(p.text) + Text("sestavení \(AppConfig.versionName) · \(String(AppConfig.commit.prefix(7)))") + .font(.system(size: 12)) + .foregroundStyle(p.overlay) + .padding(.bottom, 12) + HStack(alignment: .center, spacing: 12) { + VStack(alignment: .leading, spacing: 12) { + Text(vm.tr("welcome_title")) + .font(.system(size: 32, weight: .medium)) + .foregroundStyle(p.text) + Text(vm.tr("welcome_body_ios")) + .font(.system(size: 16)) + .foregroundStyle(p.subtext) + PrimaryButton(label: vm.tr("continue"), palette: p) { vm.go(.subjects) } + } + Spacer(minLength: 0) + VStack { + Text(vm.tr("welcome_stat_value")) + .font(.system(size: 28, weight: .bold)) + .foregroundStyle(p.text) + Text(vm.tr("welcome_stat_label")) + .font(.system(size: 11, weight: .semibold)) + .foregroundStyle(p.subtext) + .multilineTextAlignment(.center) + } + .frame(width: 108, height: 108) + .background(p.mantle, in: Circle()) + .overlay(Circle().stroke(p.text.opacity(0.08), lineWidth: 1)) + } + FeatureCard(vm: vm, t: "welcome_feat1_title", b: "welcome_feat1_body", l: "welcome_feat1_link") + .padding(.top, 28) + FeatureCard(vm: vm, t: "welcome_feat2_title", b: "welcome_feat2_body", l: "welcome_feat2_link") + .padding(.top, 12) + } + .padding(.horizontal, 24) + .padding(.vertical, 16) + } + } +} + +private struct FeatureCard: View { + @ObservedObject var vm: AppModel + let t, b, l: String + + var body: some View { + let p = vm.palette + CardBox(palette: p) { + VStack(alignment: .leading, spacing: 6) { + Text(vm.tr(t)).font(.system(size: 18, weight: .bold)).foregroundStyle(p.text) + Text(vm.tr(b)).font(.system(size: 15)).foregroundStyle(p.subtext) + PillButton(label: vm.tr(l), palette: p) { vm.go(.subjects) } + .padding(.top, 4) + } + } + } +} + +struct SubjectsScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("subjects_title"), subtitle: vm.tr("subjects_sub")) + .padding(.horizontal, 16) + ScrollView { + VStack(spacing: 12) { + ForEach(Array(stride(from: 0, to: vm.content.subjects.count, by: 2)), id: \.self) { i in + HStack(spacing: 12) { + subjectTile(vm.content.subjects[i], p) + if i + 1 < vm.content.subjects.count { + subjectTile(vm.content.subjects[i + 1], p) + } else { + Color.clear.frame(maxWidth: .infinity).frame(height: 132) + } + } + } + } + .padding(.horizontal, 16) + .padding(.bottom, 24) + } + } + } + + private func subjectTile(_ s: J, _ p: Palette) -> some View { + let open = s.bool("open") + return Button { + if open { vm.goPage(s.str("target")) } + } label: { + VStack(spacing: 10) { + switch s.str("icon") { + case "de": GermanFlag(size: 44) + case "wifi": WifiIcon(color: p.text, size: 36) + case "chip": ChipIcon(color: p.text, size: 36) + case "cz": CzechFlag(size: 44) + default: LockIcon(color: p.overlay, size: 22) + } + Text(vm.tr(s.str("key"))) + .font(.system(size: 13, weight: .semibold)) + .foregroundStyle(p.text) + .multilineTextAlignment(.center) + } + .frame(maxWidth: .infinity) + .frame(height: 132) + .background(p.mantle, in: RoundedRectangle(cornerRadius: 20, style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .stroke(p.text.opacity(open ? 0.08 : 0.04), lineWidth: 1) + ) + .opacity(open ? 1 : 0.48) + } + .buttonStyle(.plain) + .disabled(!open) + } +} + +struct SettingsSheet: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + ScrollView { + VStack(alignment: .leading, spacing: 8) { + HStack { + Text(vm.tr("settings_title")) + .font(.system(size: 22, weight: .bold)) + .foregroundStyle(p.text) + Spacer() + PillButton(label: vm.tr("back"), palette: p) { vm.settingsOpen = false } + } + Text(vm.tr("mode")).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext).padding(.top, 8) + HStack(spacing: 4) { + SegChip(label: vm.tr("mode_dark"), selected: vm.mode == .dark, palette: p) { vm.applyMode(.dark) } + SegChip(label: vm.tr("mode_light"), selected: vm.mode == .light, palette: p) { vm.applyMode(.light) } + } + .padding(3) + .background(p.surface1, in: Capsule()) + Text(vm.tr("theme")).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext).padding(.top, 8) + ForEach(Array(themeNames.enumerated()), id: \.offset) { i, name in + if let id = ThemeId(rawValue: i) { + let sw = themePalette(id, vm.mode) + let sel = vm.themeId == id + Button { vm.setTheme(id) } label: { + HStack(spacing: 10) { + ZStack { + Circle().fill(sw.base) + Circle().fill(sw.accent).frame(width: 10, height: 10).offset(x: -8) + Circle().fill(sw.accent3).frame(width: 10, height: 10) + Circle().fill(sw.success).frame(width: 10, height: 10).offset(x: 8) + if sel { Circle().stroke(p.accent, lineWidth: 2.2) } + } + .frame(width: 36, height: 36) + Text(name).font(.system(size: 16, weight: .medium)).foregroundStyle(p.text) + Spacer() + } + .padding(10) + .background(sel ? p.surface1 : p.surface0, in: RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + .buttonStyle(.plain) + } + } + Text(vm.tr("language")).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext).padding(.top, 8) + HStack(spacing: 4) { + SegChip(label: "Čeština", selected: vm.lang == .cs, palette: p) { vm.applyLang(.cs) } + SegChip(label: "English", selected: vm.lang == .en, palette: p) { vm.applyLang(.en) } + } + .padding(3) + .background(p.surface1, in: Capsule()) + Text(vm.tr("updates")).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext).padding(.top, 8) + Text(updateText) + .font(.system(size: 14)) + .foregroundStyle(p.subtext) + HStack(spacing: 8) { + PillButton(label: vm.tr("update_check"), palette: p) { vm.checkUpdate(true) } + if vm.update.canInstall { + PrimaryButton(label: vm.tr("update_install"), palette: p) { vm.installUpdate() } + } + } + .padding(.bottom, 24) + } + .padding(20) + } + .background(p.base) + } + + private var updateText: String { + if let arg = vm.update.messageArg { + return vm.fmt(vm.update.messageKey, arg) + } + return vm.tr(vm.update.messageKey) + } +} + +struct StatsScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + let sum = summarize(vm.content, vm.progress) + let pct = sum.totalEx == 0 ? 0 : (100 * sum.doneEx / sum.totalEx) + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("stats_title"), subtitle: vm.tr("stats_sub")) + .padding(.horizontal, 16) + ScrollView { + VStack(alignment: .leading, spacing: 10) { + HStack(spacing: 10) { + metric(p, vm.tr("stats_ex_label"), vm.fmt("stats_ex_fmt", sum.doneEx, sum.totalEx)) + metric(p, vm.tr("stats_pct_label"), vm.fmt("stats_pct_fmt", pct)) + metric(p, vm.tr("stats_units_label"), vm.fmt("stats_units_fmt", sum.doneUnits, sum.openUnits)) + } + ProgressBar(fraction: CGFloat(pct) / 100, palette: p, height: 8) + Text(vm.tr("stats_section")) + .font(.system(size: 12, weight: .semibold)) + .foregroundStyle(p.subtext) + .padding(.top, 10) + ForEach(Array(vm.content.subjects.enumerated()), id: \.offset) { _, s in + let open = s.bool("open") + let part = subjectSum(vm, s) + CardBox(palette: p) { + VStack(alignment: .leading, spacing: 4) { + Text(vm.tr(s.str("key"))).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + Text(open ? vm.fmt("stats_ex_fmt", part.doneEx, part.totalEx) : vm.tr("stats_locked")) + .font(.system(size: 13)).foregroundStyle(p.subtext) + if open && part.totalEx > 0 { + ProgressBar(fraction: CGFloat(part.doneEx) / CGFloat(part.totalEx), palette: p, height: 6) + .padding(.top, 4) + } + } + } + .opacity(open ? 1 : 0.55) + } + } + .padding(.horizontal, 16) + .padding(.bottom, 24) + } + } + } + + private func metric(_ p: Palette, _ label: String, _ value: String) -> some View { + CardBox(palette: p) { + VStack(alignment: .leading) { + Text(label).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext) + Text(value).font(.system(size: 22, weight: .bold)).foregroundStyle(p.text) + } + } + } +} + +struct ProgressBar: View { + let fraction: CGFloat + let palette: Palette + var height: CGFloat = 8 + + var body: some View { + GeometryReader { geo in + ZStack(alignment: .leading) { + Capsule().fill(palette.surface1) + Capsule().fill(palette.accent).frame(width: geo.size.width * min(max(fraction, 0), 1)) + } + } + .frame(height: height) + } +} + +private func subjectSum(_ vm: AppModel, _ s: J) -> ProgressSum { + var sum = ProgressSum() + switch s.str("target") { + case "roadmap": + for u in vm.content.german where u.bool("unlocked") { + let n = u.strs("names").count + sum.totalEx += n + sum.doneEx += (1...n).filter { vm.progress.germanDone(u.int("id"), $0) }.count + } + case "netyears": + sum.totalEx = vm.content.netLessons.count + sum.doneEx = vm.content.netLessons.filter { vm.progress.netDone($0.int("id")) }.count + case "hwmap": + sum.totalEx = vm.content.hw.count + sum.doneEx = vm.content.hw.filter { vm.progress.hwDone($0.int("id")) }.count + case "czechmap": + sum.totalEx = vm.content.mluvnice.count + sum.doneEx = vm.content.mluvnice.filter { vm.progress.mluvDone($0.int("id")) }.count + default: + break + } + return sum +} + +struct SearchOverlay: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + let q = normalizeAnswer(vm.searchQuery) + let hits = buildSearch(vm).filter { q.isEmpty || normalizeAnswer($0.hay).contains(q) }.prefix(24) + VStack(alignment: .leading, spacing: 12) { + HStack { + ZStack(alignment: .leading) { + if vm.searchQuery.isEmpty { + Text(vm.tr("search_placeholder")).foregroundStyle(p.overlay) + } + TextField("", text: $vm.searchQuery) + .foregroundStyle(p.text) + .tint(p.accent) + } + .padding(14) + .background(p.mantle, in: RoundedRectangle(cornerRadius: 16, style: .continuous)) + PillButton(label: vm.tr("back"), palette: p) { vm.searchOpen = false } + } + if hits.isEmpty { + Text(q.isEmpty ? vm.tr("search_hint") : vm.tr("search_empty")).foregroundStyle(p.subtext) + } else { + ScrollView { + VStack(spacing: 8) { + ForEach(Array(hits), id: \.target) { hit in + Button { + if !hit.locked { + vm.goPage(hit.target) + vm.searchOpen = false + } + } label: { + CardBox(palette: p) { + VStack(alignment: .leading) { + Text(hit.title).font(.system(size: 16, weight: .semibold)).foregroundStyle(p.text) + Text(hit.sub).font(.system(size: 13)).foregroundStyle(p.subtext) + } + } + } + .buttonStyle(.plain) + .opacity(hit.locked ? 0.5 : 1) + } + } + } + } + Spacer(minLength: 0) + } + .padding(16) + .background(p.base.opacity(0.96)) + } +} + +private struct Hit: Identifiable { + var id: String { target + title } + let title: String + let sub: String + let target: String + let locked: Bool + let hay: String +} + +private func buildSearch(_ vm: AppModel) -> [Hit] { + var out: [Hit] = [] + func add(_ title: String, _ sub: String, _ target: String, locked: Bool = false, extra: String = "") { + out.append(Hit(title: title, sub: sub, target: target, locked: locked, hay: "\(title) \(sub) \(target) \(extra)")) + } + add(vm.tr("subjects_title"), vm.tr("search_page"), "subjects", extra: "predmety") + add(vm.tr("stats"), vm.tr("search_page"), "stats") + add(vm.tr("search_home"), vm.tr("search_page"), "welcome") + for s in vm.content.subjects { + add(vm.tr(s.str("key")), vm.tr("search_subject"), s.strOrNull("target") ?? "subjects", locked: !s.bool("open")) + } + for u in vm.content.german { + let unlocked = u.bool("unlocked") + add(u.str("title"), vm.tr("search_unit"), u.strOrNull("page") ?? "roadmap", locked: !unlocked, extra: "deutsch") + if unlocked { + for (i, name) in u.strs("names").enumerated() { + add(name, u.str("title"), "u\(u.int("id") + 1)e\(i + 1)") + } + if u.has("branch") { add("Vokabeltraining", u.str("title"), u.str("branch"), extra: "vokabel") } + } + } + for l in vm.content.netLessons { + add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "netunit\(l.int("id"))", extra: "site") + add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "netex\(l.int("id"))") + } + for l in vm.content.hw { + add(vm.tr(l.str("titleKey")), vm.tr("search_lesson"), "hwunit\(l.int("id"))", extra: "hardware") + add(vm.tr(l.str("titleKey")), vm.tr("search_exercise"), "hwex\(l.int("id"))") + } + add(vm.tr("Mluvnice"), vm.tr("search_lesson"), "mluvnice") + add(vm.tr("Maturitní četba"), vm.tr("search_book"), "readinglist") + for b in vm.content.books { + add(b.str("title"), vm.tr("search_book"), b.str("page")) + } + return out +} + +struct RoadmapScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let current = vm.content.german.firstIndex { u in + u.bool("unlocked") && u.strs("names").indices.contains { !vm.progress.germanDone(u.int("id"), $0 + 1) } + } + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("roadmap_title"), subtitle: vm.tr("roadmap_sub")) + .padding(.horizontal, 12) + PathMap( + nodes: vm.content.german.enumerated().map { i, u in + let unlocked = u.bool("unlocked") + let names = u.strs("names") + let done = unlocked && !names.isEmpty && names.indices.allSatisfy { vm.progress.germanDone(u.int("id"), $0 + 1) } + return MapNode( + id: u.str("page"), + label: u.str("title"), + locked: !unlocked, + done: done, + current: i == current, + finish: i == vm.content.german.count - 1, + onClick: unlocked ? { vm.go(.unitMap(u.int("id"))) } : nil + ) + }, + palette: vm.palette + ) + .padding(.horizontal, 12) + } + } +} + +struct UnitMapScreen: View { + @ObservedObject var vm: AppModel + let unitId: Int + + var body: some View { + if let u = vm.content.germanUnit(unitId) { + let names = u.strs("names") + let next = names.indices.first { !vm.progress.germanDone(unitId, $0 + 1) } + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: u.str("title"), subtitle: vm.tr(u.str("sub"))) + .padding(.horizontal, 12) + PathMap( + nodes: names.enumerated().map { i, name in + MapNode( + id: "e\(i + 1)", + label: name, + locked: false, + done: vm.progress.germanDone(unitId, i + 1), + current: i == next, + onClick: { vm.go(.germanEx(unitId, i + 1)) } + ) + }, + palette: vm.palette + ) + .padding(.horizontal, 12) + if u.has("branch") { + PrimaryButton(label: vm.tr("Vokabeltraining"), palette: vm.palette) { vm.go(.vocab(unitId)) } + .padding(.bottom, 16) + } + } + } + } +} + +struct NetYearsScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("net_years_title"), subtitle: vm.tr("net_years_sub")) + .padding(.horizontal, 16) + ScrollView { + VStack(spacing: 12) { + yearCard(vm.tr("net_year1"), vm.tr("net_sub"), true) { vm.go(.netMap) } + ForEach(["net_year2", "net_year3", "net_year4"], id: \.self) { key in + yearCard(vm.tr(key), vm.tr("net_year_locked_sub"), false) {} + } + } + .padding(.horizontal, 16) + .padding(.bottom, 16) + } + } + } + + private func yearCard(_ title: String, _ sub: String, _ open: Bool, _ action: @escaping () -> Void) -> some View { + let p = vm.palette + return Button(action: action) { + CardBox(palette: p) { + HStack { + VStack(alignment: .leading) { + Text(title).font(.system(size: 18, weight: .bold)).foregroundStyle(p.text) + Text(sub).font(.system(size: 14)).foregroundStyle(p.subtext) + } + Spacer() + if !open { LockIcon(color: p.overlay) } + } + } + } + .buttonStyle(.plain) + .disabled(!open) + .opacity(open ? 1 : 0.48) + } +} + +struct LessonMapScreen: View { + @ObservedObject var vm: AppModel + let title: String + let sub: String + let nodes: [MapNode] + + var body: some View { + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: title, subtitle: sub) + .padding(.horizontal, 12) + PathMap(nodes: nodes, palette: vm.palette) + .padding(.horizontal, 12) + } + } +} + +struct SlidesScreen: View { + @ObservedObject var vm: AppModel + let title: String + let sub: String + let slides: [J] + var onExercise: () -> Void + @State private var idx = 0 + + var body: some View { + let p = vm.palette + if let slide = slides.indices.contains(idx) ? slides[idx] : nil { + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: title, subtitle: sub) + .padding(.horizontal, 16) + ScrollView { + VStack(alignment: .leading, spacing: 8) { + Text(slide.str("kicker")).font(.system(size: 12, weight: .semibold)).foregroundStyle(p.subtext) + Text(slide.str("title")).font(.system(size: 24, weight: .bold)).foregroundStyle(p.text) + if let tip = slide.strOrNull("tip") { + CardBox(palette: p) { Text(tip).foregroundStyle(p.text) } + } + ForEach(Array(slide.strs("lines").enumerated()), id: \.offset) { _, line in + CardBox(palette: p) { Text(line).font(.system(size: 16)).foregroundStyle(p.text) } + } + } + .padding(.horizontal, 16) + } + HStack { + if idx > 0 { + PillButton(label: vm.tr("net_slide_prev"), palette: p) { idx -= 1 } + } + Spacer() + if idx < slides.count - 1 { + PrimaryButton(label: vm.tr("net_slide_next"), palette: p) { idx += 1 } + } else { + PrimaryButton(label: vm.tr("net_slide_start"), palette: p, action: onExercise) + } + } + .padding(12) + } + } + } +} + +struct CzechMapScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + let items: [(String, String, Route?)] = [ + ("L", vm.tr("Literatura"), nil), + ("M", vm.tr("Mluvnice"), .mluvnice), + ("Č", vm.tr("Maturitní četba"), .readingList), + ] + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("Český jazyk a literatura"), subtitle: vm.tr("czech_sub")) + .padding(.horizontal, 16) + ScrollView { + VStack(spacing: 12) { + ForEach(items, id: \.0) { letter, name, route in + Button { + if let route { vm.go(route) } + } label: { + CardBox(palette: p) { + HStack(spacing: 14) { + ZStack { + Circle().fill(route == nil ? p.lockedBg : p.accent).frame(width: 56, height: 56) + if route == nil { + LockIcon(color: p.overlay) + } else { + Text(letter).font(.system(size: 20, weight: .heavy)).foregroundStyle(p.onAccent) + } + } + Text(name).font(.system(size: 16, weight: .semibold)).foregroundStyle(p.text) + Spacer() + } + } + } + .buttonStyle(.plain) + .disabled(route == nil) + .opacity(route == nil ? 0.48 : 1) + } + } + .padding(.horizontal, 16) + } + } + } +} + +struct BookListScreen: View { + @ObservedObject var vm: AppModel + + var body: some View { + let p = vm.palette + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: vm.tr("Maturitní četba"), subtitle: vm.tr("reading_sub")) + .padding(.horizontal, 16) + ScrollView { + VStack(spacing: 12) { + ForEach(Array(vm.content.books.enumerated()), id: \.offset) { _, b in + Button { vm.go(.book(b.str("id"))) } label: { + CardBox(palette: p) { + HStack(spacing: 12) { + BookIcon(color: p.text, size: 28) + VStack(alignment: .leading) { + Text(b.str("title")).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + Text(vm.tr(b.str("subKey"))).font(.system(size: 13)).foregroundStyle(p.subtext) + } + Spacer() + } + } + } + .buttonStyle(.plain) + } + } + .padding(.horizontal, 16) + } + } + } +} + +struct BookScreen: View { + @ObservedObject var vm: AppModel + let id: String + + var body: some View { + if let b = vm.content.book(id) { + let p = vm.palette + VStack(spacing: 0) { + PageTop(vm: vm, back: { vm.back() }, title: b.str("title"), subtitle: vm.tr(b.str("subKey"))) + .padding(.horizontal, 16) + ScrollView { + VStack(spacing: 12) { + Button { vm.go(.bookQuiz(id)) } label: { + CardBox(palette: p) { + HStack(spacing: 10) { + QuizIcon(color: p.text) + VStack(alignment: .leading) { + Text(vm.tr(b.str("quizTitle"))).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + Text(vm.tr(b.str("quizSub"))).font(.system(size: 13)).foregroundStyle(p.subtext) + } + } + } + } + .buttonStyle(.plain) + Button { vm.go(.bookPlot(id)) } label: { + CardBox(palette: p) { + HStack(spacing: 10) { + OrderIcon(color: p.text) + VStack(alignment: .leading) { + Text(vm.tr(b.str("plotTitle"))).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + Text(vm.tr(b.str("plotSub"))).font(.system(size: 13)).foregroundStyle(p.subtext) + } + } + } + } + .buttonStyle(.plain) + ForEach(Array(b.arr("notes").enumerated()), id: \.offset) { _, note in + CardBox(palette: p) { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 8) { + noteIcon(note.str("icon"), p.text) + Text(note.str("title")).font(.system(size: 16, weight: .bold)).foregroundStyle(p.text) + } + ForEach(note.strs("lines"), id: \.self) { line in + Text("• \(line)").font(.system(size: 15)).foregroundStyle(p.text) + } + } + } + } + } + .padding(.horizontal, 16) + .padding(.bottom, 20) + } + } + } + } +} diff --git a/ios/Maturita/Update/Updater.swift b/ios/Maturita/Update/Updater.swift new file mode 100644 index 0000000..8c6949a --- /dev/null +++ b/ios/Maturita/Update/Updater.swift @@ -0,0 +1,113 @@ +import Foundation +import UIKit + +struct UpdateState { + var status = "idle" + var remote: String? + var messageKey = "update_current" + var messageArg: String? = String(AppConfig.commit.prefix(7)) + var canInstall = false +} + +final class Updater { + private let repo = AppConfig.updateRepo + private let branch = AppConfig.updateBranch + + func check(interactive: Bool, cb: @escaping (UpdateState) -> Void) { + if AppConfig.commit == "dev" { + emit(cb, UpdateState(status: "dev", messageKey: "update_err_devbuild", messageArg: nil)) + return + } + emit(cb, UpdateState(status: "checking", messageKey: "update_checking", messageArg: nil)) + DispatchQueue.global(qos: .utility).async { + do { + let atom = try self.get("https://github.com/\(self.repo)/commits/\(self.branch).atom") + let remote: String + if let sha = self.atomMainSha(atom) { + remote = sha + } else if let tip = self.atomTip(atom) { + remote = try self.get("https://raw.githubusercontent.com/\(self.repo)/\(tip)/VERSION").trimmingCharacters(in: .whitespacesAndNewlines) + } else { + throw URLError(.cannotParseResponse) + } + let local = AppConfig.commit + if self.sameCommit(remote, local) { + self.emit(cb, UpdateState(status: "ok", remote: remote, messageKey: "update_uptodate", messageArg: String(remote.prefix(7)))) + } else { + self.emit(cb, UpdateState(status: "available", remote: remote, messageKey: "update_available", messageArg: String(remote.prefix(7)), canInstall: true)) + } + } catch { + self.emit(cb, UpdateState(status: "error", messageKey: "update_err_network", messageArg: nil)) + } + } + } + + func install(cb: @escaping (UpdateState) -> Void) { + emit(cb, UpdateState(status: "downloading", messageKey: "update_downloading", messageArg: nil)) + DispatchQueue.global(qos: .utility).async { + do { + let atom = try self.get("https://github.com/\(self.repo)/commits/\(self.branch).atom") + let tip = self.atomTip(atom) ?? "" + let page = "https://github.com/\(self.repo)/raw/main/installers/maturita-ios.html" + DispatchQueue.main.async { + if let url = URL(string: page) { + UIApplication.shared.open(url) + } + } + self.emit(cb, UpdateState(status: "staged", remote: tip, messageKey: "update_ios_sideload", messageArg: String(tip.prefix(7)))) + } catch { + self.emit(cb, UpdateState(status: "error", messageKey: "update_err_download", messageArg: nil)) + } + } + } + + private func emit(_ cb: @escaping (UpdateState) -> Void, _ state: UpdateState) { + DispatchQueue.main.async { cb(state) } + } + + private func atomTip(_ atom: String) -> String? { + if let m = atom.range(of: #"Commit/([0-9a-f]{40})"#, options: [.regularExpression, .caseInsensitive]) { + let s = String(atom[m]) + return s.split(separator: "/").last.map(String.init) + } + if let m = atom.range(of: #"/commit/([0-9a-f]{7,40})"#, options: [.regularExpression, .caseInsensitive]) { + return String(atom[m]).split(separator: "/").last.map(String.init) + } + return nil + } + + private func atomMainSha(_ atom: String) -> String? { + guard let regex = try? NSRegularExpression(pattern: #"Build from ([0-9a-f]{7,40})"#, options: .caseInsensitive), + let match = regex.firstMatch(in: atom, range: NSRange(atom.startIndex..., in: atom)), + let range = Range(match.range(at: 1), in: atom) + else { return nil } + return String(atom[range]) + } + + private func sameCommit(_ a: String, _ b: String) -> Bool { + let n = min(a.count, b.count) + return n >= 7 && a.prefix(n).lowercased() == b.prefix(n).lowercased() + } + + private func get(_ url: String) throws -> String { + guard let u = URL(string: url) else { throw URLError(.badURL) } + var req = URLRequest(url: u, timeoutInterval: 15) + req.setValue("maturita.c-ios", forHTTPHeaderField: "User-Agent") + req.setValue("*/*", forHTTPHeaderField: "Accept") + let sem = DispatchSemaphore(value: 0) + var result: Result = .failure(URLError(.unknown)) + URLSession.shared.dataTask(with: req) { data, resp, err in + if let err { result = .failure(err) } + else if let http = resp as? HTTPURLResponse, !(200...299).contains(http.statusCode) { + result = .failure(URLError(.badServerResponse)) + } else if let data, let text = String(data: data, encoding: .utf8) { + result = .success(text) + } else { + result = .failure(URLError(.cannotDecodeContentData)) + } + sem.signal() + }.resume() + _ = sem.wait(timeout: .now() + 20) + return try result.get() + } +} diff --git a/scripts/bundle-ios.sh b/scripts/bundle-ios.sh new file mode 100755 index 0000000..7204b55 --- /dev/null +++ b/scripts/bundle-ios.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Build an unsigned iOS IPA for sideloading (Xcode / AltStore / Sideloadly). + +set -eu + +root=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd) +cd "$root" + +python3 scripts/extract-android-content.py + +export DEVELOPER_DIR="${DEVELOPER_DIR:-/Applications/Xcode.app/Contents/Developer}" +COMMIT="${COMMIT:-$(git -C "$root" rev-parse HEAD 2>/dev/null || echo dev)}" +dd="$root/ios/DerivedData" + +rm -rf "$root/ios/Payload" +mkdir -p "$dd" "$root/dist-ios" + +xcodebuild \ + -project ios/Maturita.xcodeproj \ + -scheme Maturita \ + -configuration Release \ + -sdk iphoneos \ + -destination 'generic/platform=iOS' \ + -derivedDataPath "$dd" \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGNING_REQUIRED=NO \ + COMMIT="$COMMIT" + +app=$(find "$dd" -name 'Maturita.app' -path '*/Release-iphoneos/*' | head -n 1) +if [ -z "$app" ]; then + echo "Maturita.app not found" >&2 + exit 1 +fi + +mkdir -p "$root/ios/Payload" +cp -R "$app" "$root/ios/Payload/Maturita.app" +(cd "$root/ios" && zip -r -q "$root/dist-ios/maturita-ios.ipa" Payload) +echo "wrote $root/dist-ios/maturita-ios.ipa" diff --git a/scripts/extract-android-content.py b/scripts/extract-android-content.py index 901b040..ceb2581 100644 --- a/scripts/extract-android-content.py +++ b/scripts/extract-android-content.py @@ -10,7 +10,11 @@ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] SRC = ROOT / "src" -OUT = ROOT / "android" / "app" / "src" / "main" / "assets" / "content.json" +OUTS = [ + ROOT / "android" / "app" / "src" / "main" / "assets" / "content.json", + ROOT / "ios" / "Maturita" / "content.json", +] +OUT = OUTS[0] IDENT = re.compile(r"[A-Za-z_][A-Za-z0-9_]*") @@ -1223,8 +1227,10 @@ def main() -> int: else: german_units[2]["exercises"]["5"]["bank"] = raw[0] - OUT.parent.mkdir(parents=True, exist_ok=True) - OUT.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8") + text = json.dumps(payload, ensure_ascii=False, indent=2) + for dest in OUTS: + dest.parent.mkdir(parents=True, exist_ok=True) + dest.write_text(text, encoding="utf-8") def count(path, pred): node = payload @@ -1232,7 +1238,7 @@ def main() -> int: node = node[p] return sum(1 for x in node if pred(x)) - print(f"wrote {OUT}") + print("wrote " + ", ".join(str(dest) for dest in OUTS)) print(f" i18n keys: {len(i18n)}") print(f" german unlocked exercises: " f"{sum(len(u.get('exercises', {})) for u in german_units if u['unlocked'])}") diff --git a/src/i18n.c b/src/i18n.c index 3a69e7c..e2a160e 100644 --- a/src/i18n.c +++ b/src/i18n.c @@ -61,6 +61,14 @@ const TrEntry tr_ui[] = { "stejný obsah jako na počítači.", "Exam practice on your phone. Czech and English, " "the same content as on the computer."}, + {"welcome_body_ios", + "Procvičování k maturitě v iPhonu. Česky i anglicky, " + "stejný obsah jako na počítači.", + "Exam practice on iPhone. Czech and English, " + "the same content as on the computer."}, + {"update_ios_sideload", + "Nový build je na GitHubu. Nainstalujte ho znovu přes Xcode nebo AltStore (%s).", + "A newer build is on GitHub. Reinstall it with Xcode or AltStore (%s)."}, {"welcome_feat1_title", "Efektivní procvičování", "Focused practice"}, {"welcome_feat1_body", "Cvičení, nápovědy a vokabeltraining. Aplikace si pamatuje, kde jste skončili.",