diff --git a/index.html b/index.html index 28cd04b..c8331c5 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + Mitgliederverwaltung diff --git a/package-lock.json b/package-lock.json index 06048b0..5ce3985 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "fireportal-ui", + "name": "member-administration-ui", "version": "0.0.11", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "fireportal-ui", + "name": "member-administration-ui", "version": "0.0.11", "license": "GPL-3.0-only", "dependencies": { @@ -18,6 +18,9 @@ "@heroicons/vue": "^2.1.5", "@vueup/vue-quill": "^1.2.0", "axios": "^0.26.1", + "event-source-polyfill": "^1.0.31", + "grapesjs": "^0.22.4", + "grapesjs-preset-newsletter": "^1.0.2", "jwt-decode": "^4.0.0", "lodash.clonedeep": "^4.5.0", "lodash.difference": "^4.5.0", @@ -37,6 +40,7 @@ "@rushstack/eslint-patch": "^1.8.0", "@tsconfig/node20": "^20.1.4", "@types/eslint": "~9.6.0", + "@types/event-source-polyfill": "^1.0.5", "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.difference": "^4.5.9", "@types/lodash.differencewith": "^4.5.9", @@ -3073,6 +3077,16 @@ "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", "dev": true }, + "node_modules/@types/backbone": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.15.tgz", + "integrity": "sha512-WWeKtYlsIMtDyLbbhkb96taJMEbfQBnuz7yw1u0pkphCOtksemoWhIXhK74VRCY9hbjnsH3rsJu2uUiFtnsEYg==", + "license": "MIT", + "dependencies": { + "@types/jquery": "*", + "@types/underscore": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", @@ -3089,6 +3103,22 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/event-source-polyfill": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/event-source-polyfill/-/event-source-polyfill-1.0.5.tgz", + "integrity": "sha512-iaiDuDI2aIFft7XkcwMzDWLqo7LVDixd2sR6B4wxJut9xcp/Ev9bO4EFg4rm6S9QxATLBj5OPxdeocgmhjwKaw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jquery": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", + "integrity": "sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==", + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3178,12 +3208,24 @@ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "license": "MIT" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true }, + "node_modules/@types/underscore": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.13.0.tgz", + "integrity": "sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA==", + "license": "MIT" + }, "node_modules/@types/uuid": { "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", @@ -4019,6 +4061,26 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/backbone": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.1.tgz", + "integrity": "sha512-ADy1ztN074YkWbHi8ojJVFe3vAanO/lrzMGZWUClIP7oDD/Pjy2vrASraUP+2EVCfIiTtCW4FChVow01XneivA==", + "license": "MIT", + "dependencies": { + "underscore": ">=1.8.3" + } + }, + "node_modules/backbone-undo": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/backbone-undo/-/backbone-undo-0.2.6.tgz", + "integrity": "sha512-AsfpNiljLXlk7TcffDUu3EAUq7CxWbyTNwARWrql5XTzN4vh6WzEEBZYaKK4kTTz+iW1tSzqUooaGRIwO83kWA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "dependencies": { + "backbone": ">=1.0.0", + "underscore": ">=1.4.4" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4383,6 +4445,18 @@ "node": ">=0.8" } }, + "node_modules/codemirror": { + "version": "5.63.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.63.0.tgz", + "integrity": "sha512-KlLWRPggDg2rBD1Mx7/EqEhaBdy+ybBCVh/efgjBDsPpMeEu6MbTAJzIT4TuCzvmbTEgvKOGzVT6wdBTNusqrg==", + "license": "MIT" + }, + "node_modules/codemirror-formatting": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/codemirror-formatting/-/codemirror-formatting-1.0.0.tgz", + "integrity": "sha512-br9yM6eJI3pJHekEnoyHaBEb1B7XxxDjju+vRyBe8QGLp5saTIXXkZ+eFCTqXSAtI8QEZDFVEX2/SOjH2sVWRQ==", + "license": "MIT" + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -5335,6 +5409,12 @@ "node": ">=0.10.0" } }, + "node_modules/event-source-polyfill": { + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/event-source-polyfill/-/event-source-polyfill-1.0.31.tgz", + "integrity": "sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==", + "license": "MIT" + }, "node_modules/eventemitter3": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", @@ -5889,6 +5969,28 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/grapesjs": { + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/grapesjs/-/grapesjs-0.22.4.tgz", + "integrity": "sha512-4ea7T5FguyPC2fLytpSBgPXcSGreRKKisknXUbsgHBCzv4G11Z0oBJNM5jRucupBr2CRxt/3U2zixeEHEisfbw==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/backbone": "1.4.15", + "backbone": "1.4.1", + "backbone-undo": "0.2.6", + "codemirror": "5.63.0", + "codemirror-formatting": "1.0.0", + "html-entities": "~1.4.0", + "promise-polyfill": "8.3.0", + "underscore": "1.13.1" + } + }, + "node_modules/grapesjs-preset-newsletter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/grapesjs-preset-newsletter/-/grapesjs-preset-newsletter-1.0.2.tgz", + "integrity": "sha512-z8KJ1ZrTXfASSJZ/tHOcnpcWu4AMr2F/ZfQit+QjimNi3UGowwl7+Yjefuh3R7lbDTrXMMaxhCannCaJo/kPJw==", + "license": "BSD-3-Clause" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -5987,6 +6089,12 @@ "dev": true, "license": "MIT" }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "license": "MIT" + }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", @@ -7825,6 +7933,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/promise-polyfill": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", + "license": "MIT" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9330,6 +9444,12 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/underscore": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 66fbfab..322078f 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,9 @@ "@heroicons/vue": "^2.1.5", "@vueup/vue-quill": "^1.2.0", "axios": "^0.26.1", + "event-source-polyfill": "^1.0.31", + "grapesjs": "^0.22.4", + "grapesjs-preset-newsletter": "^1.0.2", "jwt-decode": "^4.0.0", "lodash.clonedeep": "^4.5.0", "lodash.difference": "^4.5.0", @@ -52,6 +55,7 @@ "@rushstack/eslint-patch": "^1.8.0", "@tsconfig/node20": "^20.1.4", "@types/eslint": "~9.6.0", + "@types/event-source-polyfill": "^1.0.5", "@types/lodash.clonedeep": "^4.5.9", "@types/lodash.difference": "^4.5.9", "@types/lodash.differencewith": "^4.5.9", diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue index 833238b..f5c7e6b 100644 --- a/src/components/UserMenu.vue +++ b/src/components/UserMenu.vue @@ -21,7 +21,7 @@
- + diff --git a/src/components/admin/club/calendar/CalendarLinkModal.vue b/src/components/admin/club/calendar/CalendarLinkModal.vue index 12d43ab..5c16641 100644 --- a/src/components/admin/club/calendar/CalendarLinkModal.vue +++ b/src/components/admin/club/calendar/CalendarLinkModal.vue @@ -72,6 +72,14 @@


+
+ + +

@@ -111,6 +119,7 @@ export default defineComponent({ data() { return { selectedTypes: [] as Array, + provideNSCDR: false as boolean }; }, computed: { @@ -124,7 +133,7 @@ export default defineComponent({ }, generatedLink() { let extend = this.selectedTypes.map((t) => [t.type, t.passphrase].filter((at) => at).join(":")); - return `webcal://${host || window.location.host}/api/public/calendar${extend.length == 0 ? "" : "?types=" + extend.join("&types=")}`; + return `webcal://${host || window.location.host}/api/public/calendar${extend.length == 0 ? "" : "?types=" + extend.join("&types=")}${this.provideNSCDR && extend.length != 0 ? '&nscdr=true':''}`; }, }, mounted() { diff --git a/src/components/admin/club/newsletter/CreateNewsletterModal.vue b/src/components/admin/club/newsletter/CreateNewsletterModal.vue new file mode 100644 index 0000000..301b436 --- /dev/null +++ b/src/components/admin/club/newsletter/CreateNewsletterModal.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/admin/club/newsletter/CurrentlySyncingModal.vue b/src/components/admin/club/newsletter/CurrentlySyncingModal.vue new file mode 100644 index 0000000..5d14c37 --- /dev/null +++ b/src/components/admin/club/newsletter/CurrentlySyncingModal.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/components/admin/club/newsletter/NewsletterListItem.vue b/src/components/admin/club/newsletter/NewsletterListItem.vue new file mode 100644 index 0000000..bbc488a --- /dev/null +++ b/src/components/admin/club/newsletter/NewsletterListItem.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/components/admin/club/newsletter/NewsletterPreviewModal.vue b/src/components/admin/club/newsletter/NewsletterPreviewModal.vue new file mode 100644 index 0000000..eac4d6d --- /dev/null +++ b/src/components/admin/club/newsletter/NewsletterPreviewModal.vue @@ -0,0 +1,57 @@ +