From 989b61e77290427d1f8abcc6d9dde19ab303edab Mon Sep 17 00:00:00 2001 From: Christophe Date: Mon, 13 Apr 2026 21:42:04 +0200 Subject: [PATCH] Ajoute l'application de Brice et sa mise a jour automatique --- ChessCubing.App/ChessCubing.App.csproj | 1 + ChessCubing.App/Pages/Home.razor | 1 + Dockerfile | 1 + brice/.gitignore | 25 + brice/config.xml | 13 + brice/package-lock.json | 897 +++++++++++++++++++++++++ brice/package.json | 23 + brice/www/cordova.js | 1 + brice/www/css/clock-scene.css | 269 ++++++++ brice/www/css/cube-scene.css | 230 +++++++ brice/www/css/style.css | 94 +++ brice/www/img/logo.png | Bin 0 -> 7372 bytes brice/www/index.html | 91 +++ brice/www/js/ClockFrontEnd.js | 87 +++ brice/www/js/TimerFrontEnd.js | 35 + brice/www/js/appload.js | 3 + brice/www/js/backend.js | 239 +++++++ brice/www/js/scene.js | 13 + brice/www/manifest.json | 15 + index.html | 1 + install-chesscubing-proxmox.sh | 6 + nginx.conf | 8 + scripts/install-proxmox-lxc.sh | 48 +- scripts/update-proxmox-lxc.sh | 48 +- update-chesscubing-proxmox.sh | 6 + 25 files changed, 2149 insertions(+), 6 deletions(-) create mode 100644 brice/.gitignore create mode 100644 brice/config.xml create mode 100644 brice/package-lock.json create mode 100644 brice/package.json create mode 100644 brice/www/cordova.js create mode 100644 brice/www/css/clock-scene.css create mode 100644 brice/www/css/cube-scene.css create mode 100644 brice/www/css/style.css create mode 100644 brice/www/img/logo.png create mode 100644 brice/www/index.html create mode 100644 brice/www/js/ClockFrontEnd.js create mode 100644 brice/www/js/TimerFrontEnd.js create mode 100644 brice/www/js/appload.js create mode 100644 brice/www/js/backend.js create mode 100644 brice/www/js/scene.js create mode 100644 brice/www/manifest.json diff --git a/ChessCubing.App/ChessCubing.App.csproj b/ChessCubing.App/ChessCubing.App.csproj index f9e59d9..dbbd2f6 100644 --- a/ChessCubing.App/ChessCubing.App.csproj +++ b/ChessCubing.App/ChessCubing.App.csproj @@ -23,6 +23,7 @@ + diff --git a/ChessCubing.App/Pages/Home.razor b/ChessCubing.App/Pages/Home.razor index 95d8a00..7e8f7ee 100644 --- a/ChessCubing.App/Pages/Home.razor +++ b/ChessCubing.App/Pages/Home.razor @@ -26,6 +26,7 @@ Ouvrir l'application Lire le reglement Ouvrir l'appli d'Ethan + Ouvrir l'appli de Brice diff --git a/Dockerfile b/Dockerfile index a6b54c8..bf922ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ RUN dotnet restore ChessCubing.App/ChessCubing.App.csproj COPY ChessCubing.App/ ChessCubing.App/ COPY ethan/ ethan/ +COPY brice/ brice/ COPY favicon.png logo.png transparent.png styles.css site.webmanifest ChessCubing_Time_Reglement_Officiel_V1-1.pdf ChessCubing_Twice_Reglement_Officiel_V2-1.pdf ./ RUN dotnet publish ChessCubing.App/ChessCubing.App.csproj -c Release -o /app/publish diff --git a/brice/.gitignore b/brice/.gitignore new file mode 100644 index 0000000..3609bb4 --- /dev/null +++ b/brice/.gitignore @@ -0,0 +1,25 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +.DS_Store + +# Generated by package manager +node_modules/ + +# Generated by Cordova +/plugins/ +/platforms/ diff --git a/brice/config.xml b/brice/config.xml new file mode 100644 index 0000000..b7bb4d0 --- /dev/null +++ b/brice/config.xml @@ -0,0 +1,13 @@ + + + Hello Cordova + + A sample Apache Cordova application that responds to the deviceready event. + + + Apache Cordova Team + + + + + diff --git a/brice/package-lock.json b/brice/package-lock.json new file mode 100644 index 0000000..eed1cce --- /dev/null +++ b/brice/package-lock.json @@ -0,0 +1,897 @@ +{ + "name": "org.apache.cordova.hellocordova", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "org.apache.cordova.hellocordova", + "version": "1.0.0", + "license": "Apache-2.0", + "devDependencies": { + "cordova-android": "^14.0.1" + } + }, + "node_modules/@netflix/nerror": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", + "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/android-versions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-2.1.0.tgz", + "integrity": "sha512-oCBvVs2uaL8ohQtesGs78/X7QvFDLbKgTosBRiOIBCss1a/yiakQm/ADuoG2k/AUaI0FfrsFeMl/a+GtEtjEeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.2" + } + }, + "node_modules/ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", + "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cordova-android": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-14.0.1.tgz", + "integrity": "sha512-HMBMdGu/JlSQtmBuDEpKWf/pE75SpF3FksxZ+mqYuL3qSIN8lN/QsNurwYaPAP7zWXN2DNpvwlpOJItS5VhdLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "android-versions": "^2.1.0", + "cordova-common": "^5.0.1", + "dedent": "^1.5.3", + "execa": "^5.1.1", + "fast-glob": "^3.3.3", + "is-path-inside": "^3.0.3", + "nopt": "^8.1.0", + "properties-parser": "^0.6.0", + "semver": "^7.7.1", + "string-argv": "^0.3.1", + "untildify": "^4.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": ">=20.5.0" + } + }, + "node_modules/cordova-common": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-5.0.1.tgz", + "integrity": "sha512-OA2NQ6wvhNz4GytPYwTdlA9xfG7Yf7ufkj4u97m3rUfoL/AECwwj0GVT2CYpk/0Fk6HyuHA3QYCxfDPYsKzI1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.3.2", + "cross-spawn": "^7.0.6", + "elementtree": "^0.1.7", + "endent": "^2.1.0", + "fast-glob": "^3.3.3", + "lodash.zip": "^4.2.0", + "plist": "^3.1.0", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dedent": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "node_modules/endent/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true, + "license": "ISC" + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/properties-parser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.6.0.tgz", + "integrity": "sha512-qvr2cSmoA0dln0MARAKwBzPkkXn7FqwX+RVVNpMdMJc7rt9mqO2cXwluxtux9fHrLhjnPFaQkS8BM0kFrTCnSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.3.1" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-chunk": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "dev": true, + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/with-open-file": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + } + } +} diff --git a/brice/package.json b/brice/package.json new file mode 100644 index 0000000..f280a92 --- /dev/null +++ b/brice/package.json @@ -0,0 +1,23 @@ +{ + "name": "org.apache.cordova.hellocordova", + "displayName": "Hello Cordova", + "version": "1.0.0", + "description": "A sample Apache Cordova application that responds to the deviceready event.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "ecosystem:cordova" + ], + "author": "Apache Cordova Team", + "license": "Apache-2.0", + "devDependencies": { + "cordova-android": "^14.0.1" + }, + "cordova": { + "platforms": [ + "android" + ] + } +} diff --git a/brice/www/cordova.js b/brice/www/cordova.js new file mode 100644 index 0000000..a8284b7 --- /dev/null +++ b/brice/www/cordova.js @@ -0,0 +1 @@ +// Browser stub for Cordova builds. diff --git a/brice/www/css/clock-scene.css b/brice/www/css/clock-scene.css new file mode 100644 index 0000000..46da384 --- /dev/null +++ b/brice/www/css/clock-scene.css @@ -0,0 +1,269 @@ +html, +body { + height: 100%; +} + +body { + overflow: hidden; + background: #c89d70; +} + +.scene-clock { + position: relative; + overflow: hidden; + min-height: 100vh; + background: + radial-gradient(circle at top center, rgba(255, 235, 200, 0.5), transparent 24%), + linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(112, 68, 21, 0.18)), + repeating-linear-gradient( + 0deg, + #d8b186 0, + #d8b186 2px, + #c99d71 2px, + #c99d71 5px, + #bc8f65 5px, + #bc8f65 7px + ); +} + +.scene-clock::before { + content: ""; + position: absolute; + inset: 0; + background: + radial-gradient(circle at 50% 39%, rgba(255, 217, 122, 0.75), transparent 8%), + radial-gradient(circle at 50% 47%, rgba(255, 221, 143, 0.42), transparent 18%); + pointer-events: none; +} + +.clock-shell { + position: relative; + z-index: 1; + box-sizing: border-box; + min-height: 100vh; + padding: 4vh 5vw 6vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + gap: 5vh; +} + +.clock-topbar { + display: flex; + flex-direction: column; + align-items: center; + gap: 1.8vh; +} + +.clock-board { + width: min(1100px, 100%); + display: grid; + grid-template-columns: minmax(0, 1fr) 12px minmax(0, 1fr); + align-items: center; + gap: clamp(18px, 3vw, 40px); +} + +.player-zone { + display: flex; + flex-direction: column; + align-items: center; + gap: 2.4vh; +} + +.player-badge { + min-width: 190px; + padding: 0.45em 1.4em; + border-radius: 18px; + border: 1px solid rgba(110, 72, 34, 0.22); + background: linear-gradient(180deg, rgba(255, 246, 231, 0.96), rgba(232, 207, 171, 0.92)); + color: #352112; + text-align: center; + font-family: "Cinzel", serif; + font-size: clamp(1.6rem, 2vw, 2.4rem); + letter-spacing: 0.05em; + box-shadow: + 0 4px 14px rgba(80, 43, 8, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.8); +} + +.player-badge-dark { + border-color: rgba(42, 24, 14, 0.5); + background: linear-gradient(180deg, rgba(63, 39, 22, 0.96), rgba(37, 22, 13, 0.98)); + color: #f6ead7; + box-shadow: + 0 4px 18px rgba(37, 16, 7, 0.28), + inset 0 1px 0 rgba(255, 235, 214, 0.14); +} + +.clock-panel { + position: relative; + width: min(100%, 460px); + min-height: clamp(280px, 48vh, 420px); + border-radius: 38px; + padding: clamp(28px, 4vh, 42px) clamp(24px, 3vw, 34px); + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 2.4vh; + box-shadow: + 0 20px 30px rgba(74, 45, 20, 0.18), + inset 0 0 0 1px rgba(255, 255, 255, 0.08); +} + +.clock-panel-white { + background: linear-gradient(180deg, rgba(255, 246, 228, 0.98), rgba(241, 215, 171, 0.98)); + border: 2px solid rgba(255, 211, 94, 0.75); + color: #2c1d14; +} + +.clock-panel-black { + background: linear-gradient(180deg, rgba(77, 53, 37, 0.96), rgba(43, 29, 21, 0.98)); + border: 2px solid rgba(46, 28, 20, 0.78); + color: #f0e1cf; +} + +.panel-light { + display: none; +} + +.clock-divider { + width: 100%; + height: min(48vh, 420px); + border-radius: 999px; + background: linear-gradient(180deg, rgba(183, 131, 68, 0), rgba(183, 131, 68, 0.9), rgba(183, 131, 68, 0)); + box-shadow: 0 0 22px rgba(255, 211, 119, 0.7); +} + +.scene-clock .button { + position: absolute; + inset: 0; + width: auto; + height: auto; + top: auto; + right: auto; + border-radius: inherit; + cursor: pointer; + z-index: 2; + background: transparent; + -webkit-tap-highlight-color: transparent; +} + +.scene-clock #white_button, +.scene-clock #black_button { + inset: 0; + width: 100%; + height: 100%; + background: transparent; +} + +.scene-clock .click { + transform: scale(0.985); + filter: brightness(0.96); +} + +.scene-clock .TextClock { + margin: 0; + position: relative; + z-index: 1; + text-align: center; + font-family: "Cormorant Garamond", serif; + font-weight: 500; +} + +.scene-clock #TimeWhite, +.scene-clock #TimeBlack, +.scene-clock #BlockTime, +.scene-clock #MoveLeftWhite, +.scene-clock #MoveLeftBlack, +.scene-clock #BlockType { + top: auto; + left: auto; +} + +.clock-status { + color: #2f1d13; + font-size: clamp(2rem, 2.6vw, 3.4rem); +} + +.clock-mode { + min-width: 220px; + padding: 0.28em 1.2em; + border-radius: 999px; + border: 1px solid rgba(112, 76, 41, 0.3); + background: linear-gradient(180deg, rgba(251, 242, 228, 0.98), rgba(232, 208, 178, 0.94)); + color: #342012; + font-size: clamp(1.8rem, 2.2vw, 3rem); + box-shadow: + 0 5px 16px rgba(111, 70, 28, 0.12), + inset 0 1px 0 rgba(255, 255, 255, 0.8); +} + +.clock-time { + font-size: clamp(4.8rem, 9vw, 8.4rem); + line-height: 0.95; + letter-spacing: 0.02em; +} + +.clock-moves { + max-width: 82%; + font-size: clamp(2rem, 3.2vw, 3.6rem); + line-height: 1.02; +} + +body::before { + content: ""; + position: fixed; + inset: 0; + pointer-events: none; + opacity: 0; + transition: opacity 0.25s ease; +} + +.glow-left::before { + opacity: 1; + background: radial-gradient(circle at 24% 58%, rgba(255, 214, 115, 0.35), transparent 22%); +} + +.glow-right::before { + opacity: 1; + background: radial-gradient(circle at 76% 58%, rgba(255, 196, 92, 0.22), transparent 22%); +} + +.glow-left #white_button { + box-shadow: + 0 0 0 2px rgba(255, 220, 113, 0.8), + 0 0 38px rgba(255, 205, 95, 0.55), + 0 0 70px rgba(255, 202, 93, 0.35); +} + +.glow-right #black_button { + box-shadow: + 0 0 0 2px rgba(255, 196, 102, 0.72), + 0 0 34px rgba(255, 179, 82, 0.3), + 0 0 62px rgba(255, 179, 82, 0.16); +} + +@media (max-width: 900px) { + .clock-shell { + padding: 3vh 4vw 5vh; + gap: 3vh; + } + + .clock-board { + grid-template-columns: 1fr; + gap: 20px; + } + + .clock-divider { + width: 72%; + height: 8px; + justify-self: center; + } + + .clock-panel { + min-height: 250px; + } +} diff --git a/brice/www/css/cube-scene.css b/brice/www/css/cube-scene.css new file mode 100644 index 0000000..393af9e --- /dev/null +++ b/brice/www/css/cube-scene.css @@ -0,0 +1,230 @@ +.scene-cube { + position: relative; + overflow: hidden; + min-height: 100vh; + background: + radial-gradient(circle at 50% 18%, rgba(255, 236, 196, 0.28), transparent 26%), + linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(41, 28, 18, 0.16)), + repeating-linear-gradient( + 0deg, + #d3ae84 0, + #d3ae84 2px, + #c39a70 2px, + #c39a70 5px, + #b78760 5px, + #b78760 7px + ); +} + +.cube-shell { + position: relative; + z-index: 1; + box-sizing: border-box; + min-height: 100vh; + padding: 4vh 5vw 6vh; + display: flex; + flex-direction: column; + align-items: center; + gap: 4vh; +} + +.cube-topbar { + display: flex; + flex-direction: column; + align-items: center; + gap: 1.4vh; + max-width: 720px; + text-align: center; +} + +.cube-title { + position: relative; + margin: 0; + color: #2f1d13; + font-family: "Cinzel", serif; + font-size: clamp(2.1rem, 2.6vw, 3.6rem); + letter-spacing: 0.06em; + text-transform: uppercase; +} + +#BlockTypeTimer { + position: relative; + margin: 0; + min-width: 220px; + padding: 0.3em 1.2em; + border-radius: 999px; + border: 1px solid rgba(105, 70, 35, 0.28); + background: linear-gradient(180deg, rgba(251, 242, 228, 0.97), rgba(230, 205, 174, 0.92)); + color: #372315; + text-align: center; + box-shadow: + 0 6px 18px rgba(93, 57, 25, 0.14), + inset 0 1px 0 rgba(255, 255, 255, 0.8); +} + +.cube-subtitle { + margin: 0; + color: rgba(60, 37, 24, 0.86); + font-family: "Cormorant Garamond", serif; + font-size: clamp(1.3rem, 1.7vw, 2rem); +} + +.cube-board { + width: min(1120px, 100%); + display: grid; + grid-template-columns: minmax(0, 1fr) 14px minmax(0, 1fr); + align-items: stretch; + gap: clamp(18px, 3vw, 42px); +} + +.cube-lane { + display: flex; + flex-direction: column; + align-items: center; + gap: 2.2vh; +} + +.cube-badge { + min-width: 190px; + padding: 0.45em 1.4em; + border-radius: 18px; + border: 1px solid rgba(110, 72, 34, 0.22); + background: linear-gradient(180deg, rgba(255, 246, 231, 0.96), rgba(232, 207, 171, 0.92)); + color: #352112; + text-align: center; + font-family: "Cinzel", serif; + font-size: clamp(1.6rem, 2vw, 2.4rem); + letter-spacing: 0.05em; + box-shadow: + 0 4px 14px rgba(80, 43, 8, 0.15), + inset 0 1px 0 rgba(255, 255, 255, 0.8); +} + +.cube-badge-dark { + border-color: rgba(42, 24, 14, 0.5); + background: linear-gradient(180deg, rgba(63, 39, 22, 0.96), rgba(37, 22, 13, 0.98)); + color: #f6ead7; +} + +.cube-divider { + width: 100%; + border-radius: 999px; + background: linear-gradient(180deg, rgba(183, 131, 68, 0), rgba(183, 131, 68, 0.9), rgba(183, 131, 68, 0)); + box-shadow: 0 0 22px rgba(255, 211, 119, 0.55); +} + +.TimerCube { + position: relative; + width: min(100%, 470px); + min-height: clamp(320px, 52vh, 470px); + box-sizing: border-box; + padding: clamp(24px, 4vh, 38px); + border-radius: 40px; + overflow: hidden; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 2.6vh; + cursor: pointer; + transition: transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease; + -webkit-tap-highlight-color: transparent; +} + +.cube-pad { + background: linear-gradient(180deg, rgba(248, 233, 207, 0.98), rgba(223, 190, 149, 0.98)); + border: 2px solid rgba(235, 202, 120, 0.72); + color: #2a1b12; + box-shadow: + 0 18px 28px rgba(88, 52, 21, 0.16), + inset 0 0 0 1px rgba(255, 255, 255, 0.24); +} + +.cube-pad-dark { + background: linear-gradient(180deg, rgba(86, 58, 39, 0.98), rgba(53, 35, 24, 0.98)); + border: 2px solid rgba(74, 47, 30, 0.96); + color: #f3e4d2; + box-shadow: + 0 18px 30px rgba(29, 18, 11, 0.3), + inset 0 0 0 1px rgba(255, 255, 255, 0.06); +} + +.cube-grid { + position: absolute; + inset: 0; + background-image: + linear-gradient(rgba(255, 255, 255, 0.12) 1px, transparent 1px), + linear-gradient(90deg, rgba(255, 255, 255, 0.12) 1px, transparent 1px); + background-size: 33.333% 33.333%; + opacity: 0.15; + pointer-events: none; +} + +.cube-pad-dark .cube-grid { + opacity: 0.08; +} + +.TimerText { + position: relative; + margin: 0; + z-index: 1; + font-family: "Cormorant Garamond", serif; + font-size: clamp(2rem, 3vw, 3.5rem); + text-align: center; +} + +#TextWhite, +#TextBlack { + color: inherit; +} + +.cube-hint { + position: relative; + z-index: 1; + margin: 0; + font-family: "Cormorant Garamond", serif; + font-size: clamp(1.3rem, 1.8vw, 2rem); + letter-spacing: 0.03em; + opacity: 0.84; +} + +.TimerCube.RedClick { + background: linear-gradient(180deg, rgba(237, 92, 81, 0.98), rgba(148, 26, 23, 0.98)); + border-color: rgba(122, 12, 12, 0.85); + color: #fff1ec; + box-shadow: + 0 0 0 2px rgba(255, 133, 116, 0.32), + 0 22px 34px rgba(111, 21, 16, 0.3); +} + +.TimerCube.GreenClick { + background: linear-gradient(180deg, rgba(124, 223, 87, 0.98), rgba(38, 121, 40, 0.98)); + border-color: rgba(39, 96, 41, 0.88); + color: #effde9; + box-shadow: + 0 0 0 2px rgba(151, 255, 134, 0.28), + 0 22px 34px rgba(25, 84, 28, 0.28); +} + +.TimerCube:active { + transform: scale(0.988); +} + +@media (max-width: 900px) { + .cube-shell { + padding: 3vh 4vw 5vh; + } + + .cube-board { + grid-template-columns: 1fr; + } + + .cube-divider { + width: 72%; + min-height: 8px; + } + + .TimerCube { + min-height: 260px; + } +} diff --git a/brice/www/css/style.css b/brice/www/css/style.css new file mode 100644 index 0000000..d9ae3ff --- /dev/null +++ b/brice/www/css/style.css @@ -0,0 +1,94 @@ +html, body { + height: 100%; + margin: 0; +} + + +.scene{ + display: none; + width: 100%; + height: 100vh; + background: linear-gradient(to right, #583305,#8A5009 ); + box-shadow: 0 4px 12px rgba(0,0,0,0.2); + +} + +.button{ + position: absolute; + width: 50%; + height: 50vh; + top: 50%; +} + +#black_button{ + right: 0%; + background: linear-gradient(to top, #A55B00, #583305); +} + +#white_button{ + right: 50%; + background: linear-gradient(to top , #E9BB82, #583305); +} +.click{ + filter:brightness(0.9); +} +.TextClock{ + position: absolute; + font-family: "Dancing Script", cursive; + font-optical-sizing: auto; + font-weight: 0; + font-style: normal; + font-size: 3vw; +} +#TimeBlack{ + left: 70%; + top: 35%; +} +#TimeWhite{ + top: 35%; + left: 20%; +} +#BlockTime{ + top:5%; + left: 35%; +} +#MoveLeftWhite{ + left: 13%; + top: 25% +} +#MoveLeftBlack{ + left: 63%; + top: 25%; +} +#BlockType{ + top:15%; + left: 48%; +} + +body::before { + content: ""; + position: fixed; + top: 0; + width: 50%; + height: 100%; + pointer-events: none; + opacity: 0; + transition: opacity 0.3s ease, left 1s ease, right 1s ease; + background: radial-gradient( + circle at center, + rgba(255, 255, 0, 0.6), + transparent 50% + ); +} + +/* Glow à gauche */ +.glow-left::before { + left: 0; + opacity: 1; +} + +/* Glow à droite */ +.glow-right::before { + right: 0; + opacity: 1; +} diff --git a/brice/www/img/logo.png b/brice/www/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6f02567bb60690e40be6921b9223fa0134f26a66 GIT binary patch literal 7372 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 literal 0 HcmV?d00001 diff --git a/brice/www/index.html b/brice/www/index.html new file mode 100644 index 0000000..04adc6a --- /dev/null +++ b/brice/www/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + +
+
+
+

Temps restant Block : 3:00

+

Block -

+
+ +
+
+
BLANC
+
+
+
+

10:00

+

Coup restant Blanc : 8

+
+
+ +
+ +
+
NOIR
+
+
+
+

10:00

+

Coup restant Noir : 8

+
+
+
+
+
+ +
+
+
+

Phase Cube

+

Block -

+

Maintiens 2 secondes pour lancer le timer, puis touche de nouveau quand le cube est termine.

+
+ +
+
+
BLANC
+
+
+

Temps au cube Blanc : 0:00

+

Appui long pour demarrer

+
+
+ +
+ +
+
NOIR
+
+
+

Temps au cube Noir : 0:00

+

Touchez quand le cube est fini

+
+
+
+
+
+ + + + + + + diff --git a/brice/www/js/ClockFrontEnd.js b/brice/www/js/ClockFrontEnd.js new file mode 100644 index 0000000..45ae9f0 --- /dev/null +++ b/brice/www/js/ClockFrontEnd.js @@ -0,0 +1,87 @@ +let white = document.getElementById("white_button"); +let black = document.getElementById("black_button"); +let white_time = document.getElementById("TimeWhite") +let black_time = document.getElementById("TimeBlack") +let black_move_left = document.getElementById("MoveLeftBlack") +let white_move_left = document.getElementById("MoveLeftWhite") +let BlockType = document.getElementById("BlockType") +let BlockTime = document.getElementById("BlockTime") +let trais = true + + +function msToMinSec(ms) { + const totalSeconds = Math.floor(ms / 1000); + const minutes = Math.floor(totalSeconds / 60); + const seconds = totalSeconds % 60; + + return `${minutes}:${seconds.toString().padStart(2, '0')}`; +} + +function toggle_trais(){ + trais = !trais + if (trais){ + showGlowRight() + }else{ + showGlowLeft() + } +} + +function change_move_left_white(number){ + white_move_left.innerText = `Coup restant Blanc : ${number}` +} + +function change_move_left_black(number){ + black_move_left.innerText = `Coup restant Noir : ${number}` +} + +function change_time_block(Time){ + BlockTime.innerText = `Temps restant Block : ${msToMinSec(Time)}` +} + +function set_block_type(type){ + // true = + + // false = - + if (type){ + BlockType.innerText = "Block +" + }else{ + BlockType.innerText = "Block -" + } +} + +function change_time_white(Time){ + white_time.innerText = msToMinSec(Time) +} + +function change_time_black(Time){ + black_time.innerText = msToMinSec(Time) +} +white.addEventListener("pointerdown", () => { + if (!trais) white.classList.add("click"); + if (!has_start) start() + else white_touch() +}); +white.addEventListener("pointerup", () => { + white.classList.remove("click"); +}); + +black.addEventListener("pointerdown", () => { + if (trais )black.classList.add("click"); + black_touch() +}); +black.addEventListener("pointerup", () => { + black.classList.remove("click"); +}); + +function showGlowLeft() { + document.body.classList.remove("glow-right"); + document.body.classList.add("glow-left"); +} + +function showGlowRight() { + document.body.classList.remove("glow-left"); + document.body.classList.add("glow-right"); +} + +function hideGlow() { + document.body.classList.remove("glow-left", "glow-right"); +} diff --git a/brice/www/js/TimerFrontEnd.js b/brice/www/js/TimerFrontEnd.js new file mode 100644 index 0000000..223cb3e --- /dev/null +++ b/brice/www/js/TimerFrontEnd.js @@ -0,0 +1,35 @@ +let white_Timer = document.getElementById("TimerWhite") +let black_Timer = document.getElementById("TimerBlack") +let white_Time_Timer = document.getElementById("TextWhite") +let black_Time_Timer = document.getElementById("TextBlack") +let TimerBlockType = document.getElementById("BlockTypeTimer") + +function Set_block_type_Timer(type){ + if (type){ + TimerBlockType.innerText = "Block +" + }else{ + TimerBlockType.innerText = "Block -" + } +} + +function Set_White_Time_Cube(Time){ + white_Time_Timer.innerText = `Temps au cube Blanc : ${msToMinSec(Time)}` +} + +function Set_Black_Time_Cube(Time){ + black_Time_Timer.innerText = `Temps au cube Noir : ${msToMinSec(Time)}` +} + +white_Timer.addEventListener("pointerdown", () => { + white_timer_touch(); +}); +white_Timer.addEventListener("pointerup", () => { + white_timer_release(); +}); + +black_Timer.addEventListener("pointerdown", () => { + black_timer_touch(); +}); +black_Timer.addEventListener("pointerup", () => { + black_timer_release(); +}); diff --git a/brice/www/js/appload.js b/brice/www/js/appload.js new file mode 100644 index 0000000..7398c33 --- /dev/null +++ b/brice/www/js/appload.js @@ -0,0 +1,3 @@ + +load_Clock_scene() +update() \ No newline at end of file diff --git a/brice/www/js/backend.js b/brice/www/js/backend.js new file mode 100644 index 0000000..be89a51 --- /dev/null +++ b/brice/www/js/backend.js @@ -0,0 +1,239 @@ + +let White = { + moveLeft : 0, + Time : 0, + TimeStartMove : 0 +} + +let Black = { + moveLeft : 0, + Time : 0, + TimeStartMove : 0 +} +let has_start = false + +Block = { + Type : false, + Time : 0, + last_time : 0 +} + +Timer = { + White_Has_started : false, + Black_Has_started : false, + Black_time : 0, + White_time : 0, + White_start_time : 0, + Black_start_time : 0, + coldown_White : 0, + coldown_Black : 0, + coldown_Start_White : 0, + coldown_Start_Black : 0, + White_Has_Finish : false, + Black_Has_Finish : false +} + +config = { + StartTimeWhite : 600000, + StartTimeBlack:600000, + StartMoveLeft : 8, + BlockTime : 180000, + last_block : true, + trais : false, + MaxIncrement : 120000 +} + + +function load_Clock_scene(){ + has_start = false + hide_scene("Cube") + inizalize_clock() + show_scene("Clock") + inizalize_clock() +} + +function inizalize_clock(){ + trais = !config.trais + toggle_trais() + White.Time = config.StartTimeWhite + White.moveLeft = config.StartMoveLeft + Black.Time = config.StartTimeBlack + Black.moveLeft = config.StartMoveLeft + Block.Time = config.BlockTime + Block.Type = !config.last_block + + change_move_left_black(Black.moveLeft) + change_move_left_white(White.moveLeft) + change_time_black(Black.Time) + change_time_white(White.Time) + change_time_block(Block.Time) + set_block_type(Block.Type) +} + +function start(){ + White.TimeStartMove = Date.now() + Black.TimeStartMove = Date.now() + Block.last_time = Date.now() + has_start = true +} + +function load_cube_scene(){ + has_start = false + + config.StartTimeWhite = White.Time + config.StartTimeBlack = Black.Time + config.last_block = Block.Type + + Timer = { + White_Has_started : false, + Black_Has_started : false, + Black_time : 0, + White_time : 0, + White_start_time : 0, + Black_start_time : 0, + coldown_White : 0, + coldown_Black : 0, + coldown_Start_White : 0, + coldown_Start_Black : 0, + White_Has_Finish : false, + Black_Has_Finish : false +} + Set_block_type_Timer(config.last_block) + Set_White_Time_Cube(0) + Set_Black_Time_Cube(0) + hide_scene("Clock") + hideGlow() + show_scene("Cube") + +} + +function black_timer_touch(){ + if (!Timer.Black_Has_started){ + Timer.coldown_Start_Black = Date.now() + black_Timer.classList.add("RedClick") + }else if(!Timer.Black_Has_Finish){ + Timer.Black_Has_Finish = true + black_Timer.classList.add("GreenClick") + } +} + +function black_timer_release(){ + if (Timer.coldown_Black > 2000) { + Timer.Black_Has_started = true + Timer.Black_start_time = Date.now() + black_Timer.classList.remove("GreenClick") + }else{ + black_Timer.classList.remove("RedClick") + Timer.coldown_Start_Black = 0; + } +} + + +function white_timer_touch(){ + if (!Timer.White_Has_started){ + Timer.coldown_Start_White = Date.now() + white_Timer.classList.add("RedClick") + }else if(!Timer.White_Has_Finish){ + Timer.White_Has_Finish = true + white_Timer.classList.add("GreenClick") + } +} + +function white_timer_release(){ + if (Timer.coldown_White > 2000) { + Timer.White_Has_started = true + Timer.White_start_time = Date.now() + white_Timer.classList.remove("GreenClick") + }else{ + white_Timer.classList.remove("RedClick") + Timer.coldown_Start_White = 0; + } +} + + +function white_touch(){ + if (trais) return null + if (!has_start) return null + toggle_trais() + Black.TimeStartMove = Date.now() + White.moveLeft -= 1 + change_move_left_white(White.moveLeft) +} + +function black_touch(){ + if (!trais) return null + if (!has_start) return null + Black.moveLeft -= 1 + if (Black.moveLeft == 0){ + load_cube_scene() + }else{ + toggle_trais() + White.TimeStartMove = Date.now() + change_move_left_black(Black.moveLeft) + } +} +function update() { + if (last_scene == "Clock" && has_start){ + if (!trais) {// trais au blanc + White.Time -= (Date.now() - White.TimeStartMove) + White.TimeStartMove = Date.now() + }else{ + Black.Time -= (Date.now() - Black.TimeStartMove) + Black.TimeStartMove = Date.now() + } + Block.Time -= (Date.now() - Block.last_time) + Block.last_time = Date.now() + if (Block.Time <= 0){ + load_cube_scene() + } + + change_time_white(White.Time) + change_time_black(Black.Time) + change_time_block(Block.Time) + }else if(last_scene == "Cube"){ + if (!Timer.Black_Has_started){ // noire a pas commencer le cube + if (Timer.coldown_Start_Black != 0){ // coldown lancer + Timer.coldown_Black = Date.now() - Timer.coldown_Start_Black + if (Timer.coldown_Black > 2000){ + black_Timer.classList.remove("RedClick") + black_Timer.classList.add("GreenClick") + } + } + }else if(!Timer.Black_Has_Finish){ + + Timer.Black_time = Date.now() - Timer.Black_start_time + Set_Black_Time_Cube(Timer.Black_time) + + } + + if (!Timer.White_Has_started){ // blanc a pas commencer le cube + if (Timer.coldown_Start_White != 0){ // coldown lancer + Timer.coldown_White = Date.now() - Timer.coldown_Start_White + if (Timer.coldown_White > 2000){ + white_Timer.classList.remove("RedClick") + white_Timer.classList.add("GreenClick") + } + } + }else if (!Timer.White_Has_Finish){ + + Timer.White_time = Date.now() - Timer.White_start_time + Set_White_Time_Cube(Timer.White_time) + + } + + + if (Timer.Black_Has_Finish && Timer.White_Has_Finish){ + if (config.last_block){ + config.StartTimeWhite += Timer.Black_time + config.StartTimeBlack += Timer.Black_time + }else{ + config.StartTimeWhite -= Timer.White_time + config.StartTimeBlack -= Timer.Black_time + } + + load_Clock_scene() + } + + } + requestAnimationFrame(update); +} diff --git a/brice/www/js/scene.js b/brice/www/js/scene.js new file mode 100644 index 0000000..ece9320 --- /dev/null +++ b/brice/www/js/scene.js @@ -0,0 +1,13 @@ +let last_scene = "" + +function show_scene(name){ + scene = document.getElementById("scene" + name); + console.log(scene) + last_scene = name + scene.style.display = "block"; +} + +function hide_scene(name){ + scene = document.getElementById("scene" + name); + scene.style.display = "none"; +} \ No newline at end of file diff --git a/brice/www/manifest.json b/brice/www/manifest.json new file mode 100644 index 0000000..79224fc --- /dev/null +++ b/brice/www/manifest.json @@ -0,0 +1,15 @@ +{ + "name": "Mon Timer", + "short_name": "ChessCubingClock", + "start_url": "index.html", + "display": "standalone", + "background_color": "#000000", + "theme_color": "#000000", + "icons": [ + { + "src": "img/logo.png", + "sizes": "192x192", + "type": "image/png" + } + ] +} diff --git a/index.html b/index.html index 66cfcf3..025e7ab 100644 --- a/index.html +++ b/index.html @@ -43,6 +43,7 @@ Ouvrir l'application Lire le règlement Ouvrir l'appli d'Ethan + Ouvrir l'appli de Brice diff --git a/install-chesscubing-proxmox.sh b/install-chesscubing-proxmox.sh index 3077c4d..fcb3807 100755 --- a/install-chesscubing-proxmox.sh +++ b/install-chesscubing-proxmox.sh @@ -35,6 +35,8 @@ Variables d'environnement reconnues : CHESSCUBING_GIT_BRANCH CHESSCUBING_ETHAN_REPO_URL CHESSCUBING_ETHAN_GIT_BRANCH + CHESSCUBING_BRICE_REPO_URL + CHESSCUBING_BRICE_GIT_BRANCH EOF } @@ -111,6 +113,8 @@ ROOTFS_STORAGE="${CHESSCUBING_ROOTFS_STORAGE:-}" LXC_PASSWORD="${CHESSCUBING_LXC_PASSWORD:-}" ETHAN_REPO_URL="${CHESSCUBING_ETHAN_REPO_URL:-https://git.jeannerot.fr/Mineloulou/Chesscubing.git}" ETHAN_REPO_BRANCH="${CHESSCUBING_ETHAN_GIT_BRANCH:-main}" +BRICE_REPO_URL="${CHESSCUBING_BRICE_REPO_URL:-https://git.jeannerot.fr/Lescratcheur/ChessCubing.git}" +BRICE_REPO_BRANCH="${CHESSCUBING_BRICE_GIT_BRANCH:-main}" if [[ -z "$LOCAL_MODE" && -z "$PROXMOX_HOST" ]]; then if have_cmd pct && have_cmd pveam; then @@ -165,6 +169,8 @@ cmd=( --branch "$REPO_BRANCH" --ethan-repo-url "$ETHAN_REPO_URL" --ethan-branch "$ETHAN_REPO_BRANCH" + --brice-repo-url "$BRICE_REPO_URL" + --brice-branch "$BRICE_REPO_BRANCH" ) if [[ "$LOCAL_MODE" == "1" ]]; then diff --git a/nginx.conf b/nginx.conf index 94c7b82..7e2d0dc 100644 --- a/nginx.conf +++ b/nginx.conf @@ -13,6 +13,14 @@ server { try_files $uri $uri/ /ethan/index.html; } + location = /brice { + return 301 $scheme://$http_host/brice/; + } + + location /brice/ { + try_files $uri $uri/ /brice/index.html; + } + location / { try_files $uri $uri/ /index.html; } diff --git a/scripts/install-proxmox-lxc.sh b/scripts/install-proxmox-lxc.sh index ba7b6c1..4c836e4 100755 --- a/scripts/install-proxmox-lxc.sh +++ b/scripts/install-proxmox-lxc.sh @@ -34,6 +34,8 @@ Options principales: --branch Branche Git a deployer (defaut: main) --ethan-repo-url Depot Git de l'application Ethan --ethan-branch Branche Git de l'application Ethan (defaut: main) + --brice-repo-url Depot Git de l'application Brice + --brice-branch Branche Git de l'application Brice (defaut: main) --lxc-password Mot de passe root du LXC. Genere si absent -h, --help Affiche cette aide @@ -75,6 +77,8 @@ REPO_URL="https://git.jeannerot.fr/christophe/chesscubing.git" REPO_BRANCH="main" ETHAN_REPO_URL="https://git.jeannerot.fr/Mineloulou/Chesscubing.git" ETHAN_REPO_BRANCH="main" +BRICE_REPO_URL="https://git.jeannerot.fr/Lescratcheur/ChessCubing.git" +BRICE_REPO_BRANCH="main" LXC_PASSWORD="" while [[ $# -gt 0 ]]; do @@ -159,6 +163,14 @@ while [[ $# -gt 0 ]]; do ETHAN_REPO_BRANCH="${2:-}" shift 2 ;; + --brice-repo-url) + BRICE_REPO_URL="${2:-}" + shift 2 + ;; + --brice-branch) + BRICE_REPO_BRANCH="${2:-}" + shift 2 + ;; --lxc-password) LXC_PASSWORD="${2:-}" shift 2 @@ -206,7 +218,9 @@ repo_url="$3" repo_branch="$4" ethan_repo_url="$5" ethan_repo_branch="$6" -lxc_password="$7" +brice_repo_url="$7" +brice_repo_branch="$8" +lxc_password="$9" die() { printf 'Erreur: %s\n' "$*" >&2 @@ -342,7 +356,7 @@ pct exec "$ctid" -- true >/dev/null 2>&1 || die "Le LXC n'est pas joignable apre printf 'Installation de nginx, git, rsync et des prerequis de build dans le conteneur...\n' ct_exec "apt-get update && apt-get install -y ca-certificates curl gpg git nginx rsync" -ct_exec "install -d -m 0755 /opt/chesscubing/repo /opt/chesscubing/ethan-repo /opt/chesscubing/publish /var/www/chesscubing/current" +ct_exec "install -d -m 0755 /opt/chesscubing/repo /opt/chesscubing/ethan-repo /opt/chesscubing/brice-repo /opt/chesscubing/publish /var/www/chesscubing/current" printf 'Clonage du depot %s...\n' "$repo_url" ct_exec "if [ ! -d /opt/chesscubing/repo/.git ]; then \ @@ -363,11 +377,14 @@ trap 'printf \"Erreur: echec de la commande [%s] a la ligne %s.\\n\" \"\$BASH_CO main_repo_dir='/opt/chesscubing/repo' ethan_repo_dir='/opt/chesscubing/ethan-repo' +brice_repo_dir='/opt/chesscubing/brice-repo' publish_root='/opt/chesscubing/publish' web_root='/var/www/chesscubing/current' main_branch=\"\${1:-${repo_branch}}\" ethan_repo_url='${ethan_repo_url}' ethan_branch='${ethan_repo_branch}' +brice_repo_url='${brice_repo_url}' +brice_branch='${brice_repo_branch}' ensure_dotnet_sdk() { if command -v dotnet >/dev/null 2>&1; then @@ -448,19 +465,32 @@ publish_static_tree() { --include='*.webp' \ --include='*.ico' \ --include='*.pdf' \ + --include='*.json' \ --include='*.webmanifest' \ --exclude='*' \ \"\$source_dir/\" \"\$destination_dir/\" } +ensure_browser_stub() { + local destination_dir=\"\$1\" + local stub_path=\"\$destination_dir/cordova.js\" + + if [[ ! -f \"\$stub_path\" ]]; then + printf '%s\n' '// Browser stub for Cordova builds.' > \"\$stub_path\" + fi +} + sync_git_repo \"\$main_repo_dir\" '${repo_url}' \"\$main_branch\" 'principal' sync_git_repo \"\$ethan_repo_dir\" \"\$ethan_repo_url\" \"\$ethan_branch\" 'Ethan' +sync_git_repo \"\$brice_repo_dir\" \"\$brice_repo_url\" \"\$brice_branch\" 'Brice' install -d -m 0755 \"\$web_root\" \"\$publish_root\" publish_blazor_app \"\$main_repo_dir\" \"\$publish_root/main\" rsync -a --delete \"\$publish_root/main/wwwroot/\" \"\$web_root/\" publish_static_tree \"\$ethan_repo_dir\" \"\$web_root/ethan\" +publish_static_tree \"\$brice_repo_dir/www\" \"\$web_root/brice\" +ensure_browser_stub \"\$web_root/brice\" chown -R www-data:www-data \"\$web_root\" @@ -486,11 +516,19 @@ server { try_files \$uri \$uri/ /ethan/index.html; } + location = /brice { + return 301 \$scheme://\$http_host/brice/; + } + + location /brice/ { + try_files \$uri \$uri/ /brice/index.html; + } + location / { try_files \$uri \$uri/ /index.html; } - location ~* \.(?:css|js|mjs|png|jpg|jpeg|svg|webp|ico|pdf|webmanifest)$ { + location ~* \.(?:css|js|json|mjs|png|jpg|jpeg|svg|webp|ico|pdf|webmanifest)$ { expires -1; add_header Cache-Control 'no-cache, no-store, must-revalidate'; } @@ -536,6 +574,8 @@ if [[ "$LOCAL_MODE" == "1" ]]; then "$REPO_BRANCH" \ "$ETHAN_REPO_URL" \ "$ETHAN_REPO_BRANCH" \ + "$BRICE_REPO_URL" \ + "$BRICE_REPO_BRANCH" \ "$LXC_PASSWORD" exit 0 fi @@ -576,4 +616,6 @@ sshpass -p "$PROXMOX_PASSWORD" \ "$REPO_BRANCH" \ "$ETHAN_REPO_URL" \ "$ETHAN_REPO_BRANCH" \ + "$BRICE_REPO_URL" \ + "$BRICE_REPO_BRANCH" \ "$LXC_PASSWORD" < "$payload_script" diff --git a/scripts/update-proxmox-lxc.sh b/scripts/update-proxmox-lxc.sh index 7669cbd..243745e 100755 --- a/scripts/update-proxmox-lxc.sh +++ b/scripts/update-proxmox-lxc.sh @@ -25,6 +25,8 @@ Options principales: --branch Branche Git a deployer (defaut: main) --ethan-repo-url Depot Git de l'application Ethan --ethan-branch Branche Git de l'application Ethan (defaut: main) + --brice-repo-url Depot Git de l'application Brice + --brice-branch Branche Git de l'application Brice (defaut: main) -h, --help Affiche cette aide EOF } @@ -49,6 +51,8 @@ LXC_HOSTNAME="chesscubing-web" REPO_BRANCH="main" ETHAN_REPO_URL="https://git.jeannerot.fr/Mineloulou/Chesscubing.git" ETHAN_REPO_BRANCH="main" +BRICE_REPO_URL="https://git.jeannerot.fr/Lescratcheur/ChessCubing.git" +BRICE_REPO_BRANCH="main" while [[ $# -gt 0 ]]; do case "$1" in @@ -92,6 +96,14 @@ while [[ $# -gt 0 ]]; do ETHAN_REPO_BRANCH="${2:-}" shift 2 ;; + --brice-repo-url) + BRICE_REPO_URL="${2:-}" + shift 2 + ;; + --brice-branch) + BRICE_REPO_BRANCH="${2:-}" + shift 2 + ;; -h | --help) usage exit 0 @@ -124,6 +136,8 @@ lxc_hostname="$2" repo_branch="$3" ethan_repo_url="$4" ethan_repo_branch="$5" +brice_repo_url="$6" +brice_repo_branch="$7" die() { printf 'Erreur: %s\n' "$*" >&2 @@ -181,11 +195,14 @@ trap 'printf \"Erreur: echec de la commande [%s] a la ligne %s.\\n\" \"\$BASH_CO main_repo_dir='/opt/chesscubing/repo' ethan_repo_dir='/opt/chesscubing/ethan-repo' +brice_repo_dir='/opt/chesscubing/brice-repo' publish_root='/opt/chesscubing/publish' web_root='/var/www/chesscubing/current' main_branch=\"\${1:-${repo_branch}}\" ethan_repo_url='${ethan_repo_url}' ethan_branch='${ethan_repo_branch}' +brice_repo_url='${brice_repo_url}' +brice_branch='${brice_repo_branch}' ensure_dotnet_sdk() { if command -v dotnet >/dev/null 2>&1; then @@ -266,19 +283,32 @@ publish_static_tree() { --include='*.webp' \ --include='*.ico' \ --include='*.pdf' \ + --include='*.json' \ --include='*.webmanifest' \ --exclude='*' \ \"\$source_dir/\" \"\$destination_dir/\" } +ensure_browser_stub() { + local destination_dir=\"\$1\" + local stub_path=\"\$destination_dir/cordova.js\" + + if [[ ! -f \"\$stub_path\" ]]; then + printf '%s\n' '// Browser stub for Cordova builds.' > \"\$stub_path\" + fi +} + sync_git_repo \"\$main_repo_dir\" '' \"\$main_branch\" 'principal' sync_git_repo \"\$ethan_repo_dir\" \"\$ethan_repo_url\" \"\$ethan_branch\" 'Ethan' +sync_git_repo \"\$brice_repo_dir\" \"\$brice_repo_url\" \"\$brice_branch\" 'Brice' install -d -m 0755 \"\$web_root\" \"\$publish_root\" publish_blazor_app \"\$main_repo_dir\" \"\$publish_root/main\" rsync -a --delete \"\$publish_root/main/wwwroot/\" \"\$web_root/\" publish_static_tree \"\$ethan_repo_dir\" \"\$web_root/ethan\" +publish_static_tree \"\$brice_repo_dir/www\" \"\$web_root/brice\" +ensure_browser_stub \"\$web_root/brice\" chown -R www-data:www-data \"\$web_root\" @@ -304,11 +334,19 @@ server { try_files \$uri \$uri/ /ethan/index.html; } + location = /brice { + return 301 \$scheme://\$http_host/brice/; + } + + location /brice/ { + try_files \$uri \$uri/ /brice/index.html; + } + location / { try_files \$uri \$uri/ /index.html; } - location ~* \.(?:css|js|mjs|png|jpg|jpeg|svg|webp|ico|pdf|webmanifest)$ { + location ~* \.(?:css|js|json|mjs|png|jpg|jpeg|svg|webp|ico|pdf|webmanifest)$ { expires -1; add_header Cache-Control 'no-cache, no-store, must-revalidate'; } @@ -337,7 +375,9 @@ if [[ "$LOCAL_MODE" == "1" ]]; then "$LXC_HOSTNAME" \ "$REPO_BRANCH" \ "$ETHAN_REPO_URL" \ - "$ETHAN_REPO_BRANCH" + "$ETHAN_REPO_BRANCH" \ + "$BRICE_REPO_URL" \ + "$BRICE_REPO_BRANCH" exit 0 fi @@ -366,4 +406,6 @@ sshpass -p "$PROXMOX_PASSWORD" \ "$LXC_HOSTNAME" \ "$REPO_BRANCH" \ "$ETHAN_REPO_URL" \ - "$ETHAN_REPO_BRANCH" < "$payload_script" + "$ETHAN_REPO_BRANCH" \ + "$BRICE_REPO_URL" \ + "$BRICE_REPO_BRANCH" < "$payload_script" diff --git a/update-chesscubing-proxmox.sh b/update-chesscubing-proxmox.sh index de10c59..e714503 100755 --- a/update-chesscubing-proxmox.sh +++ b/update-chesscubing-proxmox.sh @@ -25,6 +25,8 @@ Variables d'environnement reconnues : CHESSCUBING_GIT_BRANCH CHESSCUBING_ETHAN_REPO_URL CHESSCUBING_ETHAN_GIT_BRANCH + CHESSCUBING_BRICE_REPO_URL + CHESSCUBING_BRICE_GIT_BRANCH EOF } @@ -91,6 +93,8 @@ CTID="${CHESSCUBING_CTID:-}" LXC_HOSTNAME="${CHESSCUBING_LXC_HOSTNAME:-chesscubing-web}" ETHAN_REPO_URL="${CHESSCUBING_ETHAN_REPO_URL:-https://git.jeannerot.fr/Mineloulou/Chesscubing.git}" ETHAN_REPO_BRANCH="${CHESSCUBING_ETHAN_GIT_BRANCH:-main}" +BRICE_REPO_URL="${CHESSCUBING_BRICE_REPO_URL:-https://git.jeannerot.fr/Lescratcheur/ChessCubing.git}" +BRICE_REPO_BRANCH="${CHESSCUBING_BRICE_GIT_BRANCH:-main}" if [[ -z "$LOCAL_MODE" && -z "$PROXMOX_HOST" ]]; then if have_cmd pct && have_cmd pveam; then @@ -130,6 +134,8 @@ cmd=( --branch "$REPO_BRANCH" --ethan-repo-url "$ETHAN_REPO_URL" --ethan-branch "$ETHAN_REPO_BRANCH" + --brice-repo-url "$BRICE_REPO_URL" + --brice-branch "$BRICE_REPO_BRANCH" ) if [[ "$LOCAL_MODE" == "1" ]]; then