From 553242a7ef62afa6123b5dfa322eff3ceb6009da Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 19 May 2025 16:59:19 +0200 Subject: [PATCH 01/16] use grass for compile scss if installed, use lightningcss for packing --- admin/package.json | 1 + admin/vite.config.mjs | 5 ++ bun.lock | 56 ++++++++++++++----- deployment/bare_metal/install-missing-deps.sh | 14 +++++ frontend/package.json | 7 ++- frontend/scripts/scss.sh | 38 +++++++++++++ frontend/vite.config.mjs | 2 + 7 files changed, 106 insertions(+), 17 deletions(-) create mode 100755 frontend/scripts/scss.sh diff --git a/admin/package.json b/admin/package.json index 82528c3a2..bb1854f95 100644 --- a/admin/package.json +++ b/admin/package.json @@ -69,6 +69,7 @@ "eslint-plugin-vue": "8.7.1", "joi": "^17.13.3", "jsdom": "^25.0.0", + "lightningcss": "^1.30.1", "mock-apollo-client": "^1.2.1", "postcss-html": "^1.8.0", "prettier": "^3.5.3", diff --git a/admin/vite.config.mjs b/admin/vite.config.mjs index 3474b2032..798e3e470 100644 --- a/admin/vite.config.mjs +++ b/admin/vite.config.mjs @@ -98,9 +98,14 @@ export default defineConfig(async ({ command }) => { vitePluginGraphqlLoader(), commonjs(), ], + css: { + extract: CONFIG.PRODUCTION === true, + transformer: 'lightningcss', + }, build: { outDir: path.resolve(__dirname, './build'), chunkSizeWarningLimit: 1600, + cssMinify: 'lightningcss', }, publicDir: '/admin', } diff --git a/bun.lock b/bun.lock index cf44149ae..cf93aefd2 100644 --- a/bun.lock +++ b/bun.lock @@ -15,7 +15,7 @@ }, "admin": { "name": "admin", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "@iconify/json": "^2.2.228", "@popperjs/core": "^2.11.8", @@ -67,6 +67,7 @@ "eslint-plugin-vue": "8.7.1", "joi": "^17.13.3", "jsdom": "^25.0.0", + "lightningcss": "^1.30.1", "mock-apollo-client": "^1.2.1", "postcss-html": "^1.8.0", "prettier": "^3.5.3", @@ -83,7 +84,7 @@ }, "backend": { "name": "backend", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "cross-env": "^7.0.3", "email-templates": "^10.0.1", @@ -169,7 +170,7 @@ }, "database": { "name": "database", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "@types/uuid": "^8.3.4", "cross-env": "^7.0.3", @@ -195,7 +196,7 @@ }, "dht-node": { "name": "dht-node", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "cross-env": "^7.0.3", "dht-rpc": "6.18.1", @@ -226,7 +227,7 @@ }, "federation": { "name": "federation", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "cross-env": "^7.0.3", "sodium-native": "^3.4.1", @@ -276,7 +277,7 @@ }, "frontend": { "name": "frontend", - "version": "2.5.1", + "version": "2.5.2", "dependencies": { "@morev/vue-transitions": "^3.0.2", "@types/leaflet": "^1.9.12", @@ -350,6 +351,7 @@ "eslint-webpack-plugin": "^5.0.0", "joi": "^17.13.3", "jsdom": "^25.0.0", + "lightningcss": "^1.30.1", "mock-apollo-client": "^1.2.1", "postcss-html": "^1.8.0", "prettier": "^3.5.3", @@ -1455,7 +1457,7 @@ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], "cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], @@ -1559,7 +1561,7 @@ "detect-indent": ["detect-indent@6.1.0", "", {}, "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA=="], - "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], "detect-newline": ["detect-newline@3.1.0", "", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="], @@ -2253,6 +2255,28 @@ "libqp": ["libqp@2.1.1", "", {}, "sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow=="], + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "^2.0.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], @@ -2451,7 +2475,7 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -3249,8 +3273,6 @@ "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "@babel/core/convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -3319,6 +3341,8 @@ "@jest/source-map/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@jest/transform/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "@jest/transform/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "@jest/transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], @@ -3327,18 +3351,20 @@ "@ladjs/i18n/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], + "@morev/utils/ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + "@morev/utils/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "@nuxt/kit/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "@nuxt/kit/ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], - "@nuxt/kit/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - "@nuxt/kit/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "@nuxt/kit/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], + "@parcel/watcher/detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + "@rollup/pluginutils/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], "@selderee/plugin-htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], @@ -3459,8 +3485,6 @@ "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], - "c12/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], - "c12/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "c12/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], @@ -3787,6 +3811,8 @@ "unplugin-vue-components/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "v8-to-istanbul/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "vee-validate/@vue/devtools-api": ["@vue/devtools-api@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6" } }, "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw=="], "vee-validate/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], diff --git a/deployment/bare_metal/install-missing-deps.sh b/deployment/bare_metal/install-missing-deps.sh index c543bd4dc..f10ba784c 100644 --- a/deployment/bare_metal/install-missing-deps.sh +++ b/deployment/bare_metal/install-missing-deps.sh @@ -39,3 +39,17 @@ then echo "'turbo' is missing, will be installed now!" bun install --global turbo fi + +# rust and grass +if ! command -v cargo &> /dev/null +then + echo "'cargo' is missing, will be installed now!" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + export CARGO_HOME="$HOME/.cargo" + export PATH="$CARGO_HOME/bin:$PATH" +fi +if ! command -v grass &> /dev/null +then + echo "'grass' is missing, will be installed now!" + cargo install grass +fi diff --git a/frontend/package.json b/frontend/package.json index bd27fea29..15ee393f3 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,8 +15,10 @@ "test:debug": "cross-env TZ=UTC node --inspect-brk ./node_modules/vitest/vitest.mjs", "test:watch": "cross-env TZ=UTC vitest", "locales": "scripts/sort.sh", - "compile-scss": "sass --load-path=../node_modules --load-path=src/assets/scss src/assets/scss/gradido.scss src/assets/css/gradido.css", - "watch-scss": "sass --watch --load-path=../node_modules --load-path=src/assets/scss src/assets/scss/gradido.scss src/assets/css/gradido.css" + "compile-scss": "./scripts/scss.sh compile", + "watch-scss": "./scripts/scss.sh watch", + "compile-scss-sass": "./scripts/scss.sh compile sass", + "watch-scss-sass": "./scripts/scss.sh watch sass" }, "dependencies": { "@morev/vue-transitions": "^3.0.2", @@ -91,6 +93,7 @@ "eslint-webpack-plugin": "^5.0.0", "joi": "^17.13.3", "jsdom": "^25.0.0", + "lightningcss": "^1.30.1", "mock-apollo-client": "^1.2.1", "postcss-html": "^1.8.0", "prettier": "^3.5.3", diff --git a/frontend/scripts/scss.sh b/frontend/scripts/scss.sh new file mode 100755 index 000000000..fd3342630 --- /dev/null +++ b/frontend/scripts/scss.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +mkdir -p src/assets/css + +SRC="src/assets/scss/gradido.scss" +DEST="src/assets/css/gradido.css" +NODE_PATH="../node_modules" +SCSS_PATH="src/assets/scss" + +MODE="compile" +if [ "$1" = "watch" ]; then + MODE="watch" +fi + +COMPILER="sass" +if [ "$2" != "sass" ] && command -v grass >/dev/null 2>&1; then + COMPILER="grass" +fi + +if [ "$COMPILER" = "grass" ]; then + echo "Use Grass for $MODE SCSS" + if [ "$MODE" = "watch" ]; then + grass --watch $SCSS_PATH --load-path $NODE_PATH --load-path $SCSS_PATH $SRC $DEST + else + grass -s compressed --load-path $NODE_PATH --load-path $SCSS_PATH $SRC $DEST + fi +else + echo "Use Sass for $MODE SCSS" + if [ "$MODE" = "watch" ]; then + sass -w --load-path=$NODE_PATH --load-path=$SCSS_PATH $SRC $DEST + else + sass --style=compressed \ + --silence-deprecation=import \ + --silence-deprecation=global-builtin \ + --silence-deprecation=color-functions \ + --load-path="$NODE_PATH" --load-path="$SCSS_PATH" "$SRC":"$DEST" + fi +fi diff --git a/frontend/vite.config.mjs b/frontend/vite.config.mjs index 0101e12bf..b719b83e0 100644 --- a/frontend/vite.config.mjs +++ b/frontend/vite.config.mjs @@ -142,6 +142,7 @@ export default defineConfig(async ({ command }) => { ], css: { extract: CONFIG.PRODUCTION === true, + transformer: 'lightningcss', preprocessorOptions: { scss: { additionalData: `@use "@/assets/scss/custom/gradido-custom/color" as *;`, @@ -152,6 +153,7 @@ export default defineConfig(async ({ command }) => { outDir: path.resolve(__dirname, './build'), chunkSizeWarningLimit: 1600, minify: 'esbuild', + cssMinify: 'lightningcss', sourcemap: false, }, } From f91be4574fa43ec2ae4f51322bdd817bf58e6d03 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:07:01 +0200 Subject: [PATCH 02/16] make usage of grass platform-independent --- bun.lock | 63 +++++ deployment/bare_metal/install-missing-deps.sh | 2 +- frontend/package.json | 9 +- frontend/scripts/scss.mjs | 101 ++++++++ frontend/scripts/scss.sh | 38 --- yarn.lock | 226 +++++++++++++++++- 6 files changed, 392 insertions(+), 47 deletions(-) create mode 100644 frontend/scripts/scss.mjs delete mode 100755 frontend/scripts/scss.sh diff --git a/bun.lock b/bun.lock index cf93aefd2..2e1249299 100644 --- a/bun.lock +++ b/bun.lock @@ -334,6 +334,7 @@ "@vitest/coverage-v8": "^2.0.5", "@vue/eslint-config-prettier": "^10.2.0", "@vue/test-utils": "^2.4.6", + "chokidar-cli": "^3.0.0", "concurrently": "^9.1.2", "config-schema": "*", "cross-env": "^7.0.3", @@ -1399,6 +1400,8 @@ "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + "chokidar-cli": ["chokidar-cli@3.0.0", "", { "dependencies": { "chokidar": "^3.5.2", "lodash.debounce": "^4.0.8", "lodash.throttle": "^4.1.1", "yargs": "^13.3.0" }, "bin": { "chokidar": "index.js" } }, "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ=="], + "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], @@ -1521,6 +1524,8 @@ "debugging-stream": ["debugging-stream@2.0.0", "", { "dependencies": { "streamx": "^2.12.4" } }, "sha512-xwfl6wB/3xc553uwtGnSa94jFxnGOc02C0WU2Nmzwr80gzeqn1FX4VcbvoKIhe8L/lPq4BTQttAbrTN94uN8rA=="], + "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], + "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], @@ -2291,6 +2296,8 @@ "lodash.clonedeep": ["lodash.clonedeep@4.5.0", "", {}, "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="], + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + "lodash.get": ["lodash.get@4.4.2", "", {}, "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="], "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], @@ -2299,6 +2306,8 @@ "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], + "lodash.throttle": ["lodash.throttle@4.1.1", "", {}, "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="], + "lodash.truncate": ["lodash.truncate@4.4.2", "", {}, "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw=="], "log4js": ["log4js@6.9.1", "", { "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", "flatted": "^3.2.7", "rfdc": "^1.3.0", "streamroller": "^3.1.5" } }, "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g=="], @@ -2707,6 +2716,8 @@ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], + "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], @@ -2783,6 +2794,8 @@ "serve-static": ["serve-static@1.16.2", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], @@ -3205,6 +3218,8 @@ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + "which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="], + "which-runtime": ["which-runtime@1.2.1", "", {}, "sha512-8feIHccQFH/whiA1fD1b4c5+Q7T4ry1g1oHYc2mHnFh81tTQFsCvy3zhS2geUapkFAVBddUT/AM1a3rbqJweFg=="], "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], @@ -3503,6 +3518,10 @@ "cheerio-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "chokidar-cli/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "chokidar-cli/yargs": ["yargs@13.3.2", "", { "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" } }, "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw=="], + "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], @@ -3909,6 +3928,20 @@ "cheerio/htmlparser2/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "chokidar-cli/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "chokidar-cli/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "chokidar-cli/yargs/cliui": ["cliui@5.0.0", "", { "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA=="], + + "chokidar-cli/yargs/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + + "chokidar-cli/yargs/string-width": ["string-width@3.1.0", "", { "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w=="], + + "chokidar-cli/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], + + "chokidar-cli/yargs/yargs-parser": ["yargs-parser@13.1.2", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg=="], + "css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "dht-rpc/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], @@ -4117,6 +4150,20 @@ "cheerio-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "chokidar-cli/yargs/cliui/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], + + "chokidar-cli/yargs/cliui/wrap-ansi": ["wrap-ansi@5.1.0", "", { "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } }, "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q=="], + + "chokidar-cli/yargs/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], + + "chokidar-cli/yargs/string-width/emoji-regex": ["emoji-regex@7.0.3", "", {}, "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="], + + "chokidar-cli/yargs/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@2.0.0", "", {}, "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="], + + "chokidar-cli/yargs/string-width/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], + + "chokidar-cli/yargs/yargs-parser/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + "css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], "editorconfig/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -4171,6 +4218,16 @@ "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "chokidar-cli/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + + "chokidar-cli/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "chokidar-cli/yargs/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], + + "chokidar-cli/yargs/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], + + "chokidar-cli/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + "js-beautify/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], @@ -4180,5 +4237,11 @@ "typeorm/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "vue-apollo/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + + "chokidar-cli/yargs/cliui/wrap-ansi/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "chokidar-cli/yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "chokidar-cli/yargs/cliui/wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], } } diff --git a/deployment/bare_metal/install-missing-deps.sh b/deployment/bare_metal/install-missing-deps.sh index f10ba784c..52c1f7fab 100644 --- a/deployment/bare_metal/install-missing-deps.sh +++ b/deployment/bare_metal/install-missing-deps.sh @@ -44,7 +44,7 @@ fi if ! command -v cargo &> /dev/null then echo "'cargo' is missing, will be installed now!" - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y export CARGO_HOME="$HOME/.cargo" export PATH="$CARGO_HOME/bin:$PATH" fi diff --git a/frontend/package.json b/frontend/package.json index 15ee393f3..f06d01fe5 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,10 +15,10 @@ "test:debug": "cross-env TZ=UTC node --inspect-brk ./node_modules/vitest/vitest.mjs", "test:watch": "cross-env TZ=UTC vitest", "locales": "scripts/sort.sh", - "compile-scss": "./scripts/scss.sh compile", - "watch-scss": "./scripts/scss.sh watch", - "compile-scss-sass": "./scripts/scss.sh compile sass", - "watch-scss-sass": "./scripts/scss.sh watch sass" + "compile-scss": "node ./scripts/scss.mjs compile", + "watch-scss": "node ./scripts/scss.mjs watch", + "compile-scss-sass": "node ./scripts/scss.mjs compile sass", + "watch-scss-sass": "node ./scripts/scss.mjs watch sass" }, "dependencies": { "@morev/vue-transitions": "^3.0.2", @@ -76,6 +76,7 @@ "@vitest/coverage-v8": "^2.0.5", "@vue/eslint-config-prettier": "^10.2.0", "@vue/test-utils": "^2.4.6", + "chokidar-cli": "^3.0.0", "concurrently": "^9.1.2", "config-schema": "*", "cross-env": "^7.0.3", diff --git a/frontend/scripts/scss.mjs b/frontend/scripts/scss.mjs new file mode 100644 index 000000000..c611f4945 --- /dev/null +++ b/frontend/scripts/scss.mjs @@ -0,0 +1,101 @@ +#!/usr/bin/env node +/* eslint-disable no-console */ + +import { mkdirSync } from 'node:fs' +import { join } from 'node:path' +import { execSync, spawn } from 'node:child_process' +import { watch as _watch } from 'chokidar' + +// Create css directory if it doesn't exist +const cssDir = join('src', 'assets', 'css') +mkdirSync(cssDir, { recursive: true }) + +// Paths configuration +const config = { + src: join('src', 'assets', 'scss', 'gradido.scss'), + dest: join('src', 'assets', 'css', 'gradido.css'), + nodePath: join('..', 'node_modules'), + scssPath: join('src', 'assets', 'scss'), +} + +// Parse command line arguments +const mode = process.argv[2] === 'watch' ? 'watch' : 'compile' +const preferredCompiler = process.argv[3] + +// Determine which compiler to use +// if sass was preferred, use it, else use grass if available +function determineCompiler() { + if (preferredCompiler !== 'sass') { + try { + execSync('grass --version', { stdio: 'ignore' }) + return 'grass' + } catch (e) { + // grass not found, fallback to sass + } + } + return 'sass' +} + +const compiler = determineCompiler() + +function runGrass(compressed = false) { + const commonGrassArgs = [ + '--load-path', + config.nodePath, + '--load-path', + config.scssPath, + config.src, + config.dest, + ] + if (compressed) { + commonGrassArgs.unshift('-s', 'compressed') + } + try { + execSync(`grass ${commonGrassArgs.join(' ')}`) + console.log('SCSS compiled successfully') + } catch (error) { + console.error('Error compiling SCSS:', error.message) + } +} + +// Compile SCSS function +function compileScss(mode, compiler) { + if (compiler === 'grass') { + console.log(`Use Grass for ${mode} SCSS`) + if (mode === 'watch') { + const watcher = _watch(config.scssPath) + watcher.on('change', () => runGrass(false)) + } else { + runGrass(true) + } + } else { + console.log(`Use Sass for ${mode} SCSS`) + const commonSassArgs = [ + '--silence-deprecation=import', + '--silence-deprecation=global-builtin', + '--silence-deprecation=color-functions', + `--load-path=${config.nodePath}`, + `--load-path=${config.scssPath}`, + `${config.src}:${config.dest}`, + ] + if (mode === 'watch') { + // for process running in background + // we could also use chokidar but sass --watch is better, because it can trigger partly recompiling + const sassProcess = spawn('sass', ['--watch', ...commonSassArgs], { stdio: 'inherit' }) + sassProcess.on('error', (error) => { + console.error('Error starting sass process:', error) + }) + } else { + try { + // for one time running process + execSync(`sass --style=compressed ${commonSassArgs.join(' ')}`) + console.log('SCSS compiled successfully') + } catch (error) { + console.error('Error compiling SCSS:', error.message) + } + } + } +} + +// Run the compiler +compileScss(mode, compiler) diff --git a/frontend/scripts/scss.sh b/frontend/scripts/scss.sh deleted file mode 100755 index fd3342630..000000000 --- a/frontend/scripts/scss.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -mkdir -p src/assets/css - -SRC="src/assets/scss/gradido.scss" -DEST="src/assets/css/gradido.css" -NODE_PATH="../node_modules" -SCSS_PATH="src/assets/scss" - -MODE="compile" -if [ "$1" = "watch" ]; then - MODE="watch" -fi - -COMPILER="sass" -if [ "$2" != "sass" ] && command -v grass >/dev/null 2>&1; then - COMPILER="grass" -fi - -if [ "$COMPILER" = "grass" ]; then - echo "Use Grass for $MODE SCSS" - if [ "$MODE" = "watch" ]; then - grass --watch $SCSS_PATH --load-path $NODE_PATH --load-path $SCSS_PATH $SRC $DEST - else - grass -s compressed --load-path $NODE_PATH --load-path $SCSS_PATH $SRC $DEST - fi -else - echo "Use Sass for $MODE SCSS" - if [ "$MODE" = "watch" ]; then - sass -w --load-path=$NODE_PATH --load-path=$SCSS_PATH $SRC $DEST - else - sass --style=compressed \ - --silence-deprecation=import \ - --silence-deprecation=global-builtin \ - --silence-deprecation=color-functions \ - --load-path="$NODE_PATH" --load-path="$SCSS_PATH" "$SRC":"$DEST" - fi -fi diff --git a/yarn.lock b/yarn.lock index c31f41105..f8a50cf0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3302,6 +3302,11 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3312,7 +3317,7 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -4212,7 +4217,7 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -4304,6 +4309,16 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" +chokidar-cli@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chokidar-cli/-/chokidar-cli-3.0.0.tgz#29283666063b9e167559d30f247ff8fc48794eb7" + integrity sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ== + dependencies: + chokidar "^3.5.2" + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" + yargs "^13.3.0" + chokidar@^3.5.2, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -4368,6 +4383,15 @@ clipboard-polyfill@^4.0.0-rc1: resolved "https://registry.yarnpkg.com/clipboard-polyfill/-/clipboard-polyfill-4.1.1.tgz#eaf074f91c0a55aa4c12fcfd4862d2cfb9a0cab9" integrity sha512-nbvNLrcX0zviek5QHLFRAaLrx8y/s8+RF2stH43tuS+kP5XlHMrcD0UGBWq43Hwp6WuuK7KefRMP56S45ibZkA== +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -4811,6 +4835,11 @@ debugging-stream@^2.0.0: dependencies: streamx "^2.12.4" +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + decimal.js-light@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" @@ -4931,6 +4960,11 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== + detect-newline@^3.0.0, detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -5180,6 +5214,11 @@ emittery@^0.8.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -6072,6 +6111,13 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -6285,7 +6331,7 @@ geojson@^0.5.0: resolved "https://registry.yarnpkg.com/geojson/-/geojson-0.5.0.tgz#3cd6c96399be65b56ee55596116fe9191ce701c0" integrity sha512-/Bx5lEn+qRF4TfQ5aLu6NH+UKtvIv7Lhc487y/c8BdludrCTpiWf9wyI0RTyqg49MFefIAvFDuEi5Dfd/zgNxQ== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -7114,6 +7160,11 @@ is-finalizationregistry@^1.1.0: dependencies: call-bound "^1.0.3" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -8166,6 +8217,74 @@ libqp@2.1.1: resolved "https://registry.yarnpkg.com/libqp/-/libqp-2.1.1.tgz#f1be767a58f966f500597997cab72cfc1e17abfa" integrity sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow== +lightningcss-darwin-arm64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae" + integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== + +lightningcss-darwin-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22" + integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== + +lightningcss-freebsd-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4" + integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== + +lightningcss-linux-arm-gnueabihf@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908" + integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== + +lightningcss-linux-arm64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009" + integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== + +lightningcss-linux-arm64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe" + integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== + +lightningcss-linux-x64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157" + integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== + +lightningcss-linux-x64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26" + integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== + +lightningcss-win32-arm64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039" + integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== + +lightningcss-win32-x64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352" + integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== + +lightningcss@^1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d" + integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.30.1" + lightningcss-darwin-x64 "1.30.1" + lightningcss-freebsd-x64 "1.30.1" + lightningcss-linux-arm-gnueabihf "1.30.1" + lightningcss-linux-arm64-gnu "1.30.1" + lightningcss-linux-arm64-musl "1.30.1" + lightningcss-linux-x64-gnu "1.30.1" + lightningcss-linux-x64-musl "1.30.1" + lightningcss-win32-arm64-msvc "1.30.1" + lightningcss-win32-x64-msvc "1.30.1" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -8200,6 +8319,14 @@ local-pkg@^1.0.0, local-pkg@^1.1.1: pkg-types "^2.0.1" quansync "^0.2.8" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -8219,6 +8346,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -8239,6 +8371,11 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -9021,7 +9158,7 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -9035,6 +9172,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -9158,6 +9302,11 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -9822,6 +9971,11 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -10156,6 +10310,11 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -10494,6 +10653,15 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -10558,6 +10726,13 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -12127,6 +12302,11 @@ which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + which-runtime@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/which-runtime/-/which-runtime-1.2.1.tgz#cbd96267e222ce0aa21cc619dff3c8c2fc9e6575" @@ -12208,6 +12388,15 @@ workerpool@^9.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -12294,6 +12483,11 @@ xss@^1.0.8: commander "^2.20.3" cssfilter "0.0.10" +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -12341,11 +12535,35 @@ yargs-parser@20.x, yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" From aebeb6ad7c514f0339b238580ca5d4d9681b5b52 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:21:26 +0200 Subject: [PATCH 03/16] update frontend README, remove old stuff, which isn't true any longer, add install steps for grass instead --- frontend/README.md | 401 +-------------------------------------------- 1 file changed, 7 insertions(+), 394 deletions(-) diff --git a/frontend/README.md b/frontend/README.md index f7c60552c..0140adc8d 100755 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,397 +1,10 @@ # Vue Gradido Wallet - -## install mit yarn +## install grass, a faster sass compiler written in rust +First install [rust](https://www.rust-lang.org/) if not already installed. + +Then install grass, it need some time, because it will be compiled. ```bash -cd frontend -yarn install -yarn run serve - -# build -yarn run build -``` - -## install mit docker - -```bash -# build -docker build -t gradido-frontend . - -# run -docker run -it -p 80:80 --rm gradido-frontend -``` - -**Fully Coded Components** - -Bootstrap Vue Gradido Wallet - - - **DEMO:** [https://vast-atoll-44277.herokuapp.com/](https://vast-atoll-44277.herokuapp.com/) - - -ISSUES: - - - [ ] csrf token management - - - - [ ] Userdaten - Testbenutzer - test.json - - - - [ ] Session Cookie: GRADIDO_LOGIN enhancement - - - - [ ] 🚀 [Feature] - Create a dockerfile for the frontend application enhancement - - - **DEMO:** [https://vast-atoll-44277.herokuapp.com/](https://vast-atoll-44277.herokuapp.com/) - - - - ___________ - - -# 🌟 [EPIC] - Gradido Web- and App- Client - -Web-App: -Einstiegspunkt: -[ ] Login-Server for app-requests (Sollte in der App einstellbar sein) https://staging.gradido.net/appRequest - -[ ] Auch die url für Community-Server requests sollte in einer Variable gespeichert sein. -CakePHP Seite auf die der Login-Server nach dem Login weiterleitet. -https://staging.gradido.net/client - -Hiermit kann ein Konto anlegt werden: -https://staging.gradido.net/account/registerDirect - -# Fehler im Code -Wenn etwas nicht stimmt, entweder mit den Input-Paremetern, oder ein Fehler im Code gibt es meistens folgendes als Ergebnis: -``` -{ - "state": "error", - "msg": "", - "details": "" -} - ``` - -# csfr Token -Bindet das js ein. -Stellt folgende js-Variablen zur Verfügung: - -csfr : string -csfr Token (https://book.cakephp.org/3/en/controllers/components/csrf.html) -user: object - -# Testbenutzer -Enthält Daten des aktuell eingeloggten Benutzers, z.B.: mein Testbenutzer: -console.log(user); -``` -{ - "created": 1578688666, - "disabled": false, - "email": "dervommond@gmail.com", - "email_checked": true, - "first_name": "Max", - "group_alias": "gdd1", - "ident_hash": 2928827813, - "last_name": "Miau", - "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b", - "role": "admin", - "username": "", - "balance": 174500, // Gradido Cent, 4 Nachkommastellen (2 Reserve) entspricht 17,45 - "id": 1, - "errorCount": 0 -} -``` -Das sind im Grunde die Benutzerangaben aus der Login-Server Datenbank. - -session :int -Login-Server session id, notwendig für alle ajax-request. - -# Seiten -Navigation: -Für alle Benutzer: - -Kontoübersicht -Startseite -Überweisung -Mitgliederbereich (externer Link zu elopage: https://elopage.com/s/gradido/sign_in) -Rechts oben: -Profil -Abmelden -Startseite: -Für alle Benutzer: -Kontoübersicht -Überweisung -Benutzer Suche: -http://daten.einhornimmond.de/gradido_mithril_user_search.zip - -# Mobile App -Login über eingebundene Login-Seite -auslesen der session_id aus dem Session Cookie: GRADIDO_LOGIN -Access Token vom Login-Server anfragen: -GET https://staging.gradido.net/appRequest/acquireAccessToken?session_id = -Du kannst auch den Cookie wieder mitschicken, solange die Login-Server Basis-url die gleiche ist, müsste das auch funktionieren. -Antwort: -``` -{ - "state":"success", - "access_token" : "", - "group_base_url":"" -} -``` -Unterschied Access Token von der session_id: Access Tokens sind länger gültig -Du kannst über eine gültige session_id einen Access Token erhalten der eine Woche gültig ist. Die Client-IP des Aufrufess muss die gleiche sein, mit der eingeloggt wurde. - - -Mit einem gültigen Access-Token kannst du eine session_id erhalten. -GET https://staging.gradido.net/appRequest/appLogin?access_token = -Mit jedem Aufruf wird die Gültigkeit der Access-Tokens erneuert. -Antwort: -``` -{ - "state":"success", - "session_id" : "" -} -``` -# Kontoübersicht: -Liefert den aktuellen Kontostand. -Ajax: -GET https://staging.gradido.net/state-balances/ajaxGetBalance -Antwort: -`{"state":"success","balance":}` - -Listet die letzten Transaktionen auf, mit Paging. -Ajax: -GET https://staging.gradido.net/state-user-transactions/ajaxListTransactions// -page: Seite der Transaktionen, default = 1 -count: Wie viele Transaktionen pro Seite, default = 20 - -Antwort: -Wenn alles okay: -``` -{"state":"success", "transactions": - [ - { - "name": "", - "email": "", //optional, only if send or receive and other user is known - "type": "creation|send|receive", - "transaction_id": , // db id not id from blockchain - "date": "", - "balance": , - "memo": "", - "pubkey": "" - - } - ], - "transactionExecutingCount": , - "count": -} -``` -Holt die aktuelle Summe und Anzahl Einträge vom GDT Server für den Benutzer. -Ajax: -GET https://staging.gradido.net/state-balances/ajaxGdtOverview -```{"state": "success", "gdt": {"sum": , "count":}}``` - - -# 🌟 [EPIC] - Gradido Web- and App- Client - -Web-App: -Einstiegspunkt: -[ ] Login-Server for app-requests (Sollte in der App einstellbar sein) https://staging.gradido.net/appRequest - -[ ] Auch die url für Community-Server requests sollte in einer Variable gespeichert sein. -CakePHP Seite auf die der Login-Server nach dem Login weiterleitet. -https://staging.gradido.net/client - -Hiermit kann ein Konto anlegt werden: -https://staging.gradido.net/account/registerDirect - - -# Fehler im Code -Wenn etwas nicht stimmt, entweder mit den Input-Paremetern, oder ein Fehler im Code gibt es meistens folgendes als Ergebnis: -``` -{ - "state": "error", - "msg": "", - "details": "" -} - ``` - -# csfr Token -Bindet das js ein. -Stellt folgende js-Variablen zur Verfügung: - -csfr : string -csfr Token (https://book.cakephp.org/3/en/controllers/components/csrf.html) -user: object - -# Testbenutzer -Enthält Daten des aktuell eingeloggten Benutzers, z.B.: mein Testbenutzer: -console.log(user); -``` -{ - "created": 1578688666, - "disabled": false, - "email": "dervommond@gmail.com", - "email_checked": true, - "first_name": "Max", - "group_alias": "gdd1", - "ident_hash": 2928827813, - "last_name": "Miau", - "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b", - "role": "admin", - "username": "", - "balance": 174500, // Gradido Cent, 4 Nachkommastellen (2 Reserve) entspricht 17,45 - "id": 1, - "errorCount": 0 -} -``` -Das sind im Grunde die Benutzerangaben aus der Login-Server Datenbank. - -session :int -Login-Server session id, notwendig für alle ajax-request. - -# Seiten -Navigation: -Für alle Benutzer: - -Kontoübersicht -Startseite -Überweisung -Mitgliederbereich (externer Link zu elopage: https://elopage.com/s/gradido/sign_in) -Rechts oben: -Profil -Abmelden -Startseite: -Für alle Benutzer: -Kontoübersicht -Überweisung -Benutzer Suche: -http://daten.einhornimmond.de/gradido_mithril_user_search.zip - -# Mobile App -Login über eingebundene Login-Seite -auslesen der session_id aus dem Session Cookie: GRADIDO_LOGIN -Access Token vom Login-Server anfragen: -GET https://staging.gradido.net/appRequest/acquireAccessToken?session_id = -Du kannst auch den Cookie wieder mitschicken, solange die Login-Server Basis-url die gleiche ist, müsste das auch funktionieren. -Antwort: -``` -{ - "state":"success", - "access_token" : "", - "group_base_url":"" -} -``` -Unterschied Access Token von der session_id: Access Tokens sind länger gültig -Du kannst über eine gültige session_id einen Access Token erhalten der eine Woche gültig ist. Die Client-IP des Aufrufess muss die gleiche sein, mit der eingeloggt wurde. - -Mit einem gültigen Access-Token kannst du eine session_id erhalten. -GET https://staging.gradido.net/appRequest/appLogin?access_token = -Mit jedem Aufruf wird die Gültigkeit der Access-Tokens erneuert. -Antwort: -``` -{ - "state":"success", - "session_id" : "" -} -``` -# Kontoübersicht: -Liefert den aktuellen Kontostand. -Ajax: -GET https://staging.gradido.net/state-balances/ajaxGetBalance -Antwort: -`{"state":"success","balance":}` - -Listet die letzten Transaktionen auf, mit Paging. -Ajax: -GET https://staging.gradido.net/state-user-transactions/ajaxListTransactions// -page: Seite der Transaktionen, default = 1 -count: Wie viele Transaktionen pro Seite, default = 20 - -Antwort: -Wenn alles okay: -``` -{"state":"success", "transactions": - [ - { - "name": "", - "email": "", //optional, only if send or receive and other user is known - "type": "creation|send|receive", - "transaction_id": , // db id not id from blockchain - "date": "", - "balance": , - "memo": "", - "pubkey": "" - - } - ], - "transactionExecutingCount": , - "count": -} -``` -Holt die aktuelle Summe und Anzahl Einträge vom GDT Server für den Benutzer. -Ajax: -GET https://staging.gradido.net/state-balances/ajaxGdtOverview -```{"state": "success", "gdt": {"sum": , "count":}}``` - -Holt die letzten 100 GDT-Einträge für den Benutzer - - - -Ein GDT Eintrag sieht so aus: -``` -{ - "id": 8857, - "amount": 1000, // GDT - "date": "2020-06-17T14:12:00+00:00", - "email": "foerderkreis-1@gradido.org", - "comment": null, - "coupon_code": "", - "gdt_entry_type_id": 4, - "factor": "20.0000", - "amount2": 0, - "factor2": "0.0500", - "gdt": 1000 -} -``` - -gdt entry types: (Auf welchen Weg der Eintrag eingetragen wurde) -1. Form: einzeln über das Formular, sollte nur wenige Einträg e betreffen -2. CVS: CVS Import, betrifft vor allem ältere Einträge von Spenden die weder über Elopage noch über Digistore reinkamen -3. Elopage: Alle GDT Einträge die automatisch durch eine Elopage-Transaktion erstellt wurden für den Einzahlenden. -4. Elopage-Publisher: Alle GDT Einträge die automatisch durch eine Elopage-Transaktion erstellt wurden für den Publisher, bis zu 5 Level nach oben. -5. Digistore: Alle GDT Einträge die automatisch durch eine Digistore-Transaktion angelegt wurden. -6. Cvs2: GDT Einträge die durch ein anderen CVS Import eingetragen wurden, betrifft ebenfalls nur alte Einträge. -amount: Menge in Euro-cent (2 Nachkommastellen) was eingezahlt wurde -factor: Der Umrechnungsfaktor der beim Einzahlen für den betreffenden Unterstützer galt. -amount2: ein Bonus Factor der drauf gerechnet wird bei Sonderaktionen, default 0 -factor2: ein Bonus-Factor, default 1, wird aktuell im Code auf für Publisher-Transactionen benutzt. -Gdt: resultierender GDT Wert, wird folgendermaßen aus den bisherigen Werten berechnet: -gdt = amount * factor * factor2 + amount2 -Es gibt zwei Arten von GDT Einträgen: - -Was der Benutzer selbst in Euro gespendet hat -Was jemand anderes an Euro gespendet hat, der den Benutzer als Publisher gewählt hat (publisher-id bei Elopage), Publisher bis Level 5 erhalten jeweils 5% an GDT was der Spender erhalten hat. -z.B. Anna spendet 100 Euro bei einem Faktor von 20, bekommt also 2000 GDT. -Sie hat als Publisher Bernd angegeben, Bern erhält 100 GDT. -Bernd hat als Publisher damals Paul angegeben, Paul erhält also ebenfalls noch 100 GDT. -Bis zum 5. (Bernd ist 2.) -Diese Beziehung wird durch die connectEntries dargestellt. -Insbesondere durch den publishersPath, connect enthält einfach nur alle mögliche Daten. - - -# TODO -TODO: Update GDT-Server um paging und Zugriff auf alle Einträge zu erhalten, optimierter Zugriff -GET https://staging.gradido.net/state-balances/ajaxGdtTransactions -Liefert wenn alles in Ordnung ist: - -wenn nicht type 7 dann "amount" in euro ansonsten in GDT - -## Additional Software - -For `yarn locales` you will need `jq` to use it. -You can install it (on arch) via - -``` -sudo pacman -S jq -``` \ No newline at end of file +cargo install grass +``` +Now with using yarn compile-sass or turbo compile-sass grass will be used. From 9ebd754942f4603e9f58474eec2c561f625cd888 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:30:12 +0200 Subject: [PATCH 04/16] move call to install deps down the script, after git pull to have always the correct version --- deployment/bare_metal/start.sh | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index d8acd65e4..44fcd46c4 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -2,8 +2,6 @@ # stop if something fails set -euo pipefail -source ./install-missing-deps.sh - # check for parameter FAST_MODE=false POSITIONAL_ARGS=() @@ -44,18 +42,6 @@ PROJECT_ROOT=$SCRIPT_DIR/../.. NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available set +o allexport -# enable nvm -export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -install_nvm() { - nvm install - nvm use - nvm alias default - npm i -g yarn pm2 - pm2 startup -} -# make sure correct node version is installed -nvm use || install_nvm - # NOTE: all config values will be in process.env when starting # the services and will therefore take precedence over the .env @@ -180,6 +166,9 @@ git checkout $BRANCH_NAME git pull export BUILD_COMMIT="$(git rev-parse HEAD)" +# install missing dependencies +source ./install-missing-deps.sh + # Generate gradido.conf from template # *** 1st prepare for each apiversion the federation conf for nginx from federation-template # *** set FEDERATION_PORT from FEDERATION_COMMUNITY_APIS and create gradido-federation.conf file From d6dc2eff3f65d1eb30bf8ed066e8078e8a8f3ca8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:38:41 +0200 Subject: [PATCH 05/16] correct path, because we are now in Project root --- deployment/bare_metal/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 44fcd46c4..db9e82c9d 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -167,7 +167,7 @@ git pull export BUILD_COMMIT="$(git rev-parse HEAD)" # install missing dependencies -source ./install-missing-deps.sh +source ./deployment/bare_metal/install-missing-deps.sh # Generate gradido.conf from template # *** 1st prepare for each apiversion the federation conf for nginx from federation-template From 8df86fdc0d2d3292e7a51742cd333a632936b651 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:43:06 +0200 Subject: [PATCH 06/16] add log info --- deployment/bare_metal/start.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 3d84b413b..f38621943 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -175,6 +175,7 @@ git pull export BUILD_COMMIT="$(git rev-parse HEAD)" # install missing dependencies +log_step "Install missing dependencies (nvm, correct nodejs version, bun, rust, grass)" source ./deployment/bare_metal/install-missing-deps.sh # Generate gradido.conf from template From d245009acd0e6a473aa48a5f915cfa43313b2faa Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 12:55:31 +0200 Subject: [PATCH 07/16] add gcc to deploy test docker --- deployment/bare_metal/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/Dockerfile b/deployment/bare_metal/Dockerfile index c617c4cc3..521dabb6c 100644 --- a/deployment/bare_metal/Dockerfile +++ b/deployment/bare_metal/Dockerfile @@ -24,7 +24,8 @@ RUN apt update && apt install -y \ mariadb-server \ nginx \ gettext \ - curl + curl \ + gcc ##### Install Image ####################################################################### ## Simulate parts from install script to get a minimal configuration to test start script # From 1233c127c814fce1b4212e59a63cef23523e5639 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 20 May 2025 18:11:57 +0200 Subject: [PATCH 08/16] put back removed readme infos --- frontend/README.md | 395 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 395 insertions(+) diff --git a/frontend/README.md b/frontend/README.md index 0140adc8d..e53aec1f8 100755 --- a/frontend/README.md +++ b/frontend/README.md @@ -8,3 +8,398 @@ Then install grass, it need some time, because it will be compiled. cargo install grass ``` Now with using yarn compile-sass or turbo compile-sass grass will be used. + +## install mit yarn +```bash +cd frontend +yarn install +yarn run serve + +# build +yarn run build +``` + +## install mit docker + +```bash +# build +docker build -t gradido-frontend . + +# run +docker run -it -p 80:80 --rm gradido-frontend +``` + +**Fully Coded Components** + +Bootstrap Vue Gradido Wallet - + + **DEMO:** [https://vast-atoll-44277.herokuapp.com/](https://vast-atoll-44277.herokuapp.com/) + + +ISSUES: + + - [ ] csrf token management + + + - [ ] Userdaten - Testbenutzer - test.json + + + - [ ] Session Cookie: GRADIDO_LOGIN enhancement + + + - [ ] 🚀 [Feature] - Create a dockerfile for the frontend application enhancement + + + **DEMO:** [https://vast-atoll-44277.herokuapp.com/](https://vast-atoll-44277.herokuapp.com/) + + + + ___________ + + +# 🌟 [EPIC] - Gradido Web- and App- Client + +Web-App: +Einstiegspunkt: +[ ] Login-Server for app-requests (Sollte in der App einstellbar sein) https://staging.gradido.net/appRequest + +[ ] Auch die url für Community-Server requests sollte in einer Variable gespeichert sein. +CakePHP Seite auf die der Login-Server nach dem Login weiterleitet. +https://staging.gradido.net/client + +Hiermit kann ein Konto anlegt werden: +https://staging.gradido.net/account/registerDirect + +# Fehler im Code +Wenn etwas nicht stimmt, entweder mit den Input-Paremetern, oder ein Fehler im Code gibt es meistens folgendes als Ergebnis: +``` +{ + "state": "error", + "msg": "", + "details": "" +} + ``` + +# csfr Token +Bindet das js ein. +Stellt folgende js-Variablen zur Verfügung: + +csfr : string +csfr Token (https://book.cakephp.org/3/en/controllers/components/csrf.html) +user: object + +# Testbenutzer +Enthält Daten des aktuell eingeloggten Benutzers, z.B.: mein Testbenutzer: +console.log(user); +``` +{ + "created": 1578688666, + "disabled": false, + "email": "dervommond@gmail.com", + "email_checked": true, + "first_name": "Max", + "group_alias": "gdd1", + "ident_hash": 2928827813, + "last_name": "Miau", + "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b", + "role": "admin", + "username": "", + "balance": 174500, // Gradido Cent, 4 Nachkommastellen (2 Reserve) entspricht 17,45 + "id": 1, + "errorCount": 0 +} +``` +Das sind im Grunde die Benutzerangaben aus der Login-Server Datenbank. + +session :int +Login-Server session id, notwendig für alle ajax-request. + +# Seiten +Navigation: +Für alle Benutzer: + +Kontoübersicht +Startseite +Überweisung +Mitgliederbereich (externer Link zu elopage: https://elopage.com/s/gradido/sign_in) +Rechts oben: +Profil +Abmelden +Startseite: +Für alle Benutzer: +Kontoübersicht +Überweisung +Benutzer Suche: +http://daten.einhornimmond.de/gradido_mithril_user_search.zip + +# Mobile App +Login über eingebundene Login-Seite +auslesen der session_id aus dem Session Cookie: GRADIDO_LOGIN +Access Token vom Login-Server anfragen: +GET https://staging.gradido.net/appRequest/acquireAccessToken?session_id = +Du kannst auch den Cookie wieder mitschicken, solange die Login-Server Basis-url die gleiche ist, müsste das auch funktionieren. +Antwort: +``` +{ + "state":"success", + "access_token" : "", + "group_base_url":"" +} +``` +Unterschied Access Token von der session_id: Access Tokens sind länger gültig +Du kannst über eine gültige session_id einen Access Token erhalten der eine Woche gültig ist. Die Client-IP des Aufrufess muss die gleiche sein, mit der eingeloggt wurde. + + +Mit einem gültigen Access-Token kannst du eine session_id erhalten. +GET https://staging.gradido.net/appRequest/appLogin?access_token = +Mit jedem Aufruf wird die Gültigkeit der Access-Tokens erneuert. +Antwort: +``` +{ + "state":"success", + "session_id" : "" +} +``` +# Kontoübersicht: +Liefert den aktuellen Kontostand. +Ajax: +GET https://staging.gradido.net/state-balances/ajaxGetBalance +Antwort: +`{"state":"success","balance":}` + +Listet die letzten Transaktionen auf, mit Paging. +Ajax: +GET https://staging.gradido.net/state-user-transactions/ajaxListTransactions// +page: Seite der Transaktionen, default = 1 +count: Wie viele Transaktionen pro Seite, default = 20 + +Antwort: +Wenn alles okay: +``` +{"state":"success", "transactions": + [ + { + "name": "", + "email": "", //optional, only if send or receive and other user is known + "type": "creation|send|receive", + "transaction_id": , // db id not id from blockchain + "date": "", + "balance": , + "memo": "", + "pubkey": "" + + } + ], + "transactionExecutingCount": , + "count": +} +``` +Holt die aktuelle Summe und Anzahl Einträge vom GDT Server für den Benutzer. +Ajax: +GET https://staging.gradido.net/state-balances/ajaxGdtOverview +```{"state": "success", "gdt": {"sum": , "count":}}``` + + +# 🌟 [EPIC] - Gradido Web- and App- Client + +Web-App: +Einstiegspunkt: +[ ] Login-Server for app-requests (Sollte in der App einstellbar sein) https://staging.gradido.net/appRequest + +[ ] Auch die url für Community-Server requests sollte in einer Variable gespeichert sein. +CakePHP Seite auf die der Login-Server nach dem Login weiterleitet. +https://staging.gradido.net/client + +Hiermit kann ein Konto anlegt werden: +https://staging.gradido.net/account/registerDirect + + +# Fehler im Code +Wenn etwas nicht stimmt, entweder mit den Input-Paremetern, oder ein Fehler im Code gibt es meistens folgendes als Ergebnis: +``` +{ + "state": "error", + "msg": "", + "details": "" +} + ``` + +# csfr Token +Bindet das js ein. +Stellt folgende js-Variablen zur Verfügung: + +csfr : string +csfr Token (https://book.cakephp.org/3/en/controllers/components/csrf.html) +user: object + +# Testbenutzer +Enthält Daten des aktuell eingeloggten Benutzers, z.B.: mein Testbenutzer: +console.log(user); +``` +{ + "created": 1578688666, + "disabled": false, + "email": "dervommond@gmail.com", + "email_checked": true, + "first_name": "Max", + "group_alias": "gdd1", + "ident_hash": 2928827813, + "last_name": "Miau", + "public_hex": "2ed28a1cf5e116d83615406bc577152221c2f774a5656f66a0e7540f7576d71b", + "role": "admin", + "username": "", + "balance": 174500, // Gradido Cent, 4 Nachkommastellen (2 Reserve) entspricht 17,45 + "id": 1, + "errorCount": 0 +} +``` +Das sind im Grunde die Benutzerangaben aus der Login-Server Datenbank. + +session :int +Login-Server session id, notwendig für alle ajax-request. + +# Seiten +Navigation: +Für alle Benutzer: + +Kontoübersicht +Startseite +Überweisung +Mitgliederbereich (externer Link zu elopage: https://elopage.com/s/gradido/sign_in) +Rechts oben: +Profil +Abmelden +Startseite: +Für alle Benutzer: +Kontoübersicht +Überweisung +Benutzer Suche: +http://daten.einhornimmond.de/gradido_mithril_user_search.zip + +# Mobile App +Login über eingebundene Login-Seite +auslesen der session_id aus dem Session Cookie: GRADIDO_LOGIN +Access Token vom Login-Server anfragen: +GET https://staging.gradido.net/appRequest/acquireAccessToken?session_id = +Du kannst auch den Cookie wieder mitschicken, solange die Login-Server Basis-url die gleiche ist, müsste das auch funktionieren. +Antwort: +``` +{ + "state":"success", + "access_token" : "", + "group_base_url":"" +} +``` +Unterschied Access Token von der session_id: Access Tokens sind länger gültig +Du kannst über eine gültige session_id einen Access Token erhalten der eine Woche gültig ist. Die Client-IP des Aufrufess muss die gleiche sein, mit der eingeloggt wurde. + +Mit einem gültigen Access-Token kannst du eine session_id erhalten. +GET https://staging.gradido.net/appRequest/appLogin?access_token = +Mit jedem Aufruf wird die Gültigkeit der Access-Tokens erneuert. +Antwort: +``` +{ + "state":"success", + "session_id" : "" +} +``` +# Kontoübersicht: +Liefert den aktuellen Kontostand. +Ajax: +GET https://staging.gradido.net/state-balances/ajaxGetBalance +Antwort: +`{"state":"success","balance":}` + +Listet die letzten Transaktionen auf, mit Paging. +Ajax: +GET https://staging.gradido.net/state-user-transactions/ajaxListTransactions// +page: Seite der Transaktionen, default = 1 +count: Wie viele Transaktionen pro Seite, default = 20 + +Antwort: +Wenn alles okay: +``` +{"state":"success", "transactions": + [ + { + "name": "", + "email": "", //optional, only if send or receive and other user is known + "type": "creation|send|receive", + "transaction_id": , // db id not id from blockchain + "date": "", + "balance": , + "memo": "", + "pubkey": "" + + } + ], + "transactionExecutingCount": , + "count": +} +``` +Holt die aktuelle Summe und Anzahl Einträge vom GDT Server für den Benutzer. +Ajax: +GET https://staging.gradido.net/state-balances/ajaxGdtOverview +```{"state": "success", "gdt": {"sum": , "count":}}``` + +Holt die letzten 100 GDT-Einträge für den Benutzer + + + +Ein GDT Eintrag sieht so aus: +``` +{ + "id": 8857, + "amount": 1000, // GDT + "date": "2020-06-17T14:12:00+00:00", + "email": "foerderkreis-1@gradido.org", + "comment": null, + "coupon_code": "", + "gdt_entry_type_id": 4, + "factor": "20.0000", + "amount2": 0, + "factor2": "0.0500", + "gdt": 1000 +} +``` + +gdt entry types: (Auf welchen Weg der Eintrag eingetragen wurde) +1. Form: einzeln über das Formular, sollte nur wenige Einträg e betreffen +2. CVS: CVS Import, betrifft vor allem ältere Einträge von Spenden die weder über Elopage noch über Digistore reinkamen +3. Elopage: Alle GDT Einträge die automatisch durch eine Elopage-Transaktion erstellt wurden für den Einzahlenden. +4. Elopage-Publisher: Alle GDT Einträge die automatisch durch eine Elopage-Transaktion erstellt wurden für den Publisher, bis zu 5 Level nach oben. +5. Digistore: Alle GDT Einträge die automatisch durch eine Digistore-Transaktion angelegt wurden. +6. Cvs2: GDT Einträge die durch ein anderen CVS Import eingetragen wurden, betrifft ebenfalls nur alte Einträge. +amount: Menge in Euro-cent (2 Nachkommastellen) was eingezahlt wurde +factor: Der Umrechnungsfaktor der beim Einzahlen für den betreffenden Unterstützer galt. +amount2: ein Bonus Factor der drauf gerechnet wird bei Sonderaktionen, default 0 +factor2: ein Bonus-Factor, default 1, wird aktuell im Code auf für Publisher-Transactionen benutzt. +Gdt: resultierender GDT Wert, wird folgendermaßen aus den bisherigen Werten berechnet: +gdt = amount * factor * factor2 + amount2 +Es gibt zwei Arten von GDT Einträgen: + +Was der Benutzer selbst in Euro gespendet hat +Was jemand anderes an Euro gespendet hat, der den Benutzer als Publisher gewählt hat (publisher-id bei Elopage), Publisher bis Level 5 erhalten jeweils 5% an GDT was der Spender erhalten hat. +z.B. Anna spendet 100 Euro bei einem Faktor von 20, bekommt also 2000 GDT. +Sie hat als Publisher Bernd angegeben, Bern erhält 100 GDT. +Bernd hat als Publisher damals Paul angegeben, Paul erhält also ebenfalls noch 100 GDT. +Bis zum 5. (Bernd ist 2.) +Diese Beziehung wird durch die connectEntries dargestellt. +Insbesondere durch den publishersPath, connect enthält einfach nur alle mögliche Daten. + + +# TODO +TODO: Update GDT-Server um paging und Zugriff auf alle Einträge zu erhalten, optimierter Zugriff +GET https://staging.gradido.net/state-balances/ajaxGdtTransactions +Liefert wenn alles in Ordnung ist: + +wenn nicht type 7 dann "amount" in euro ansonsten in GDT + +## Additional Software + +For `yarn locales` you will need `jq` to use it. +You can install it (on arch) via + +``` +sudo pacman -S jq +``` \ No newline at end of file From 211ab9162770bf5afe0600aea042fb734c910fc8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 21 May 2025 11:23:05 +0200 Subject: [PATCH 09/16] change experimental to beta --- frontend/src/locales/de.json | 2 +- frontend/src/locales/en.json | 2 +- frontend/src/locales/es.json | 2 +- frontend/src/locales/fr.json | 2 +- frontend/src/locales/nl.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index b541f31e9..e4ba4894a 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -41,7 +41,7 @@ } }, "card-user-search": { - "headline": "Geografische Mitgliedssuche (experimentell)", + "headline": "Geografische Mitgliedssuche (beta)", "allowed": { "button": "Öffne Mitgliedssuche...", "disabled-button": "GMS offline...", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index b6440379d..ff3b0186d 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -41,7 +41,7 @@ } }, "card-user-search": { - "headline": "Geographic member search (experimental)", + "headline": "Geographic member search (beta)", "allowed": { "button": "Start Membersearch...", "disabled-button": "GMS offline...", diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json index 48352d6e7..df80a0736 100644 --- a/frontend/src/locales/es.json +++ b/frontend/src/locales/es.json @@ -31,7 +31,7 @@ } }, "card-user-search": { - "headline": "Búsqueda geográfica de miembros", + "headline": "Búsqueda geográfica de miembros (beta)", "allowed": { "button": "Iniciar Búsqueda de Miembros...", "disabled-button": "GMS offline...", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index 0df789075..f36627ff7 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -33,7 +33,7 @@ } }, "card-user-search": { - "headline": "Recherche géographique de membres (expérimentale)", + "headline": "Recherche géographique de membres (beta)", "allowed": { "button": "Commencer la recherche de membres...", "disabled-button": "GMS offline...", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index c27eebc6f..60ab12b79 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -31,7 +31,7 @@ } }, "card-user-search": { - "headline": "Geografisch leden zoeken (experimenteel)", + "headline": "Geografisch leden zoeken (beta)", "allowed": { "button": "Zoeken naar leden starten...", "disabled-button": "GMS offline...", From cc2379f9ce66355fa61122fb2fc92208df482529 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 21 May 2025 11:24:57 +0200 Subject: [PATCH 10/16] use correct forms --- frontend/src/locales/fr.json | 2 +- frontend/src/locales/nl.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index f36627ff7..6dae7df0b 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -33,7 +33,7 @@ } }, "card-user-search": { - "headline": "Recherche géographique de membres (beta)", + "headline": "Recherche géographique de membres (bêta)", "allowed": { "button": "Commencer la recherche de membres...", "disabled-button": "GMS offline...", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index 60ab12b79..ae7c3bfeb 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -31,7 +31,7 @@ } }, "card-user-search": { - "headline": "Geografisch leden zoeken (beta)", + "headline": "Geografisch leden zoeken (bèta)", "allowed": { "button": "Zoeken naar leden starten...", "disabled-button": "GMS offline...", From ec90cb4a361cfb76a1c1bbd729c6bae5966e0630 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 21 May 2025 11:40:00 +0200 Subject: [PATCH 11/16] rename community page to contributions page to prevent confusion with cross-community stuff --- frontend/src/components/Menu/Sidebar.vue | 13 +++++++++---- frontend/src/locales/de.json | 2 +- frontend/src/locales/en.json | 2 +- frontend/src/locales/es.json | 2 +- frontend/src/locales/fr.json | 2 +- frontend/src/locales/nl.json | 2 +- .../{Community.spec.js => Contributions.spec.js} | 6 +++--- .../src/pages/{Community.vue => Contributions.vue} | 12 ++++++------ frontend/src/routes/routes.js | 14 +++++++------- 9 files changed, 30 insertions(+), 25 deletions(-) rename frontend/src/pages/{Community.spec.js => Contributions.spec.js} (96%) rename frontend/src/pages/{Community.vue => Contributions.vue} (88%) diff --git a/frontend/src/components/Menu/Sidebar.vue b/frontend/src/components/Menu/Sidebar.vue index 5c623d961..084d0cc95 100644 --- a/frontend/src/components/Menu/Sidebar.vue +++ b/frontend/src/components/Menu/Sidebar.vue @@ -26,7 +26,12 @@ {{ $t('navigation.transactions') }} - +