From f2af936e60b5104d66d5ad55e9f8611fde3fa38a Mon Sep 17 00:00:00 2001 From: Franzz Date: Sun, 26 Apr 2026 17:01:50 +0200 Subject: [PATCH] Replace font awesome font with svg --- package-lock.json | 46 + package.json | 3 + src/components/admin.vue | 80 +- src/components/project.vue | 28 +- src/components/projectMediaLink.vue | 2 +- src/components/projectPopup.vue | 8 +- src/components/projectPost.vue | 25 +- src/components/projectRelTime.vue | 5 +- src/components/spotButton.vue | 9 +- src/components/spotIcon.vue | 44 +- src/components/spotIconStack.vue | 31 +- src/masks/project.html | 57 - src/masks/upload.html | 10 - src/scripts/icons.js | 168 + src/styles/_fa.scss | 128 +- src/styles/_lightbox.scss | 33 +- src/styles/_page.project.feed.scss | 69 +- src/styles/_page.project.map.scss | 6 +- src/styles/_page.project.panel.scss | 9 +- src/styles/_page.project.scss | 41 +- src/styles/_page.project.settings.scss | 58 +- src/styles/fa/_animated.scss | 155 - src/styles/fa/_bordered-pulled.scss | 22 - src/styles/fa/_core.scss | 78 - src/styles/fa/_duotone-icons.scss | 12 - src/styles/fa/_fixed-width.scss | 9 - src/styles/fa/_functions.scss | 59 - src/styles/fa/_icons.scss | 10 - src/styles/fa/_list.scss | 20 - src/styles/fa/_mixins.scss | 152 - src/styles/fa/_rotated-flipped.scss | 33 - src/styles/fa/_screen-reader.scss | 14 - src/styles/fa/_shims.scss | 2042 ---- src/styles/fa/_sizing.scss | 19 - src/styles/fa/_stacked.scss | 34 - src/styles/fa/_variables.scss | 9617 ----------------- src/styles/fa/brands.scss | 30 - src/styles/fa/duotone.scss | 65 - src/styles/fa/fontawesome.scss | 21 - src/styles/fa/fonts/fa-brands-400.ttf | Bin 209796 -> 0 bytes src/styles/fa/fonts/fa-brands-400.woff2 | Bin 118212 -> 0 bytes src/styles/fa/fonts/fa-duotone-900.ttf | Bin 1361984 -> 0 bytes src/styles/fa/fonts/fa-duotone-900.woff2 | Bin 449048 -> 0 bytes src/styles/fa/fonts/fa-light-300.ttf | Bin 1268180 -> 0 bytes src/styles/fa/fonts/fa-light-300.woff2 | Bin 458120 -> 0 bytes src/styles/fa/fonts/fa-regular-400.ttf | Bin 1134228 -> 0 bytes src/styles/fa/fonts/fa-regular-400.woff2 | Bin 419100 -> 0 bytes src/styles/fa/fonts/fa-sharp-light-300.ttf | Bin 1053140 -> 0 bytes src/styles/fa/fonts/fa-sharp-light-300.woff2 | Bin 397124 -> 0 bytes src/styles/fa/fonts/fa-sharp-regular-400.ttf | Bin 933588 -> 0 bytes .../fa/fonts/fa-sharp-regular-400.woff2 | Bin 358696 -> 0 bytes src/styles/fa/fonts/fa-sharp-solid-900.ttf | Bin 751244 -> 0 bytes src/styles/fa/fonts/fa-sharp-solid-900.woff2 | Bin 281448 -> 0 bytes src/styles/fa/fonts/fa-sharp-thin-100.ttf | Bin 1134752 -> 0 bytes src/styles/fa/fonts/fa-sharp-thin-100.woff2 | Bin 427232 -> 0 bytes src/styles/fa/fonts/fa-solid-900.ttf | Bin 986276 -> 0 bytes src/styles/fa/fonts/fa-solid-900.woff2 | Bin 348088 -> 0 bytes src/styles/fa/fonts/fa-thin-100.ttf | Bin 1385992 -> 0 bytes src/styles/fa/fonts/fa-thin-100.woff2 | Bin 496436 -> 0 bytes src/styles/fa/fonts/fa-v4compatibility.ttf | Bin 10832 -> 0 bytes src/styles/fa/fonts/fa-v4compatibility.woff2 | Bin 4804 -> 0 bytes src/styles/fa/light.scss | 26 - src/styles/fa/regular.scss | 26 - src/styles/fa/sharp-light.scss | 26 - src/styles/fa/sharp-regular.scss | 26 - src/styles/fa/sharp-solid.scss | 26 - src/styles/fa/sharp-thin.scss | 26 - src/styles/fa/solid.scss | 27 - src/styles/fa/thin.scss | 26 - src/styles/fa/v4-shims.scss | 11 - src/styles/fonts/4iCs6KVjbNBYlgoKfw72.woff2 | Bin 34852 -> 0 bytes .../fonts/4iCv6KVjbNBYlgoCxCvjsGyN.woff2 | Bin 29752 -> 0 bytes src/styles/spot.scss | 1 - 73 files changed, 497 insertions(+), 12976 deletions(-) delete mode 100644 src/masks/project.html delete mode 100644 src/masks/upload.html create mode 100644 src/scripts/icons.js delete mode 100644 src/styles/fa/_animated.scss delete mode 100644 src/styles/fa/_bordered-pulled.scss delete mode 100644 src/styles/fa/_core.scss delete mode 100644 src/styles/fa/_duotone-icons.scss delete mode 100644 src/styles/fa/_fixed-width.scss delete mode 100644 src/styles/fa/_functions.scss delete mode 100644 src/styles/fa/_icons.scss delete mode 100644 src/styles/fa/_list.scss delete mode 100644 src/styles/fa/_mixins.scss delete mode 100644 src/styles/fa/_rotated-flipped.scss delete mode 100644 src/styles/fa/_screen-reader.scss delete mode 100644 src/styles/fa/_shims.scss delete mode 100644 src/styles/fa/_sizing.scss delete mode 100644 src/styles/fa/_stacked.scss delete mode 100644 src/styles/fa/_variables.scss delete mode 100644 src/styles/fa/brands.scss delete mode 100644 src/styles/fa/duotone.scss delete mode 100644 src/styles/fa/fontawesome.scss delete mode 100644 src/styles/fa/fonts/fa-brands-400.ttf delete mode 100644 src/styles/fa/fonts/fa-brands-400.woff2 delete mode 100644 src/styles/fa/fonts/fa-duotone-900.ttf delete mode 100644 src/styles/fa/fonts/fa-duotone-900.woff2 delete mode 100644 src/styles/fa/fonts/fa-light-300.ttf delete mode 100644 src/styles/fa/fonts/fa-light-300.woff2 delete mode 100644 src/styles/fa/fonts/fa-regular-400.ttf delete mode 100644 src/styles/fa/fonts/fa-regular-400.woff2 delete mode 100644 src/styles/fa/fonts/fa-sharp-light-300.ttf delete mode 100644 src/styles/fa/fonts/fa-sharp-light-300.woff2 delete mode 100644 src/styles/fa/fonts/fa-sharp-regular-400.ttf delete mode 100644 src/styles/fa/fonts/fa-sharp-regular-400.woff2 delete mode 100644 src/styles/fa/fonts/fa-sharp-solid-900.ttf delete mode 100644 src/styles/fa/fonts/fa-sharp-solid-900.woff2 delete mode 100644 src/styles/fa/fonts/fa-sharp-thin-100.ttf delete mode 100644 src/styles/fa/fonts/fa-sharp-thin-100.woff2 delete mode 100644 src/styles/fa/fonts/fa-solid-900.ttf delete mode 100644 src/styles/fa/fonts/fa-solid-900.woff2 delete mode 100644 src/styles/fa/fonts/fa-thin-100.ttf delete mode 100644 src/styles/fa/fonts/fa-thin-100.woff2 delete mode 100644 src/styles/fa/fonts/fa-v4compatibility.ttf delete mode 100644 src/styles/fa/fonts/fa-v4compatibility.woff2 delete mode 100644 src/styles/fa/light.scss delete mode 100644 src/styles/fa/regular.scss delete mode 100644 src/styles/fa/sharp-light.scss delete mode 100644 src/styles/fa/sharp-regular.scss delete mode 100644 src/styles/fa/sharp-solid.scss delete mode 100644 src/styles/fa/sharp-thin.scss delete mode 100644 src/styles/fa/solid.scss delete mode 100644 src/styles/fa/thin.scss delete mode 100644 src/styles/fa/v4-shims.scss delete mode 100644 src/styles/fonts/4iCs6KVjbNBYlgoKfw72.woff2 delete mode 100644 src/styles/fonts/4iCv6KVjbNBYlgoCxCvjsGyN.woff2 diff --git a/package-lock.json b/package-lock.json index 515cad0..521156d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "spot", "version": "2.0.0", "dependencies": { + "@fortawesome/fontawesome-svg-core": "^7.2.0", + "@fortawesome/free-solid-svg-icons": "^7.2.0", + "@fortawesome/vue-fontawesome": "^3.2.0", "@uppy/core": "^5.2.0", "@uppy/xhr-upload": "^5.2.0", "autosize": "^6.0.1", @@ -1554,6 +1557,49 @@ "node": ">=14.17.0" } }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.2.0.tgz", + "integrity": "sha512-IpR0bER9FY25p+e7BmFH25MZKEwFHTfRAfhOyJubgiDnoJNsSvJ7nigLraHtp4VOG/cy8D7uiV0dLkHOne5Fhw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.2.0.tgz", + "integrity": "sha512-6639htZMjEkwskf3J+e6/iar+4cTNM9qhoWuRfj9F3eJD6r7iCzV1SWnQr2Mdv0QT0suuqU8BoJCZUyCtP9R4Q==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.2.0.tgz", + "integrity": "sha512-YTVITFGN0/24PxzXrwqCgnyd7njDuzp5ZvaCx5nq/jg55kUYd94Nj8UTchBdBofi/L0nwRfjGOg0E41d2u9T1w==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/vue-fontawesome": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.2.0.tgz", + "integrity": "sha512-7BwGjTZn8QDvVEIu8fvkHhsDRRv//tq7jtsldaDhF3dE1fyWLIQcEg3zvIzy33su7kcppWsZZ6XRYP5wp3UCgQ==", + "license": "MIT", + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7", + "vue": ">= 3.0.0 < 4" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", diff --git a/package.json b/package.json index fdf066b..dc32ba8 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,9 @@ "keywords": [], "author": "Franzz", "dependencies": { + "@fortawesome/fontawesome-svg-core": "^7.2.0", + "@fortawesome/free-solid-svg-icons": "^7.2.0", + "@fortawesome/vue-fontawesome": "^3.2.0", "@uppy/core": "^5.2.0", "@uppy/xhr-upload": "^5.2.0", "autosize": "^6.0.1", diff --git a/src/components/admin.vue b/src/components/admin.vue index 1203789..ee4adf1 100644 --- a/src/components/admin.vue +++ b/src/components/admin.vue @@ -9,20 +9,20 @@ export default { SpotButton, AdminInput }, - inject: ['api', 'lang'], - data() { - return { - elems: {}, - feedbacks: [], - saveTimer: null - }; - }, - beforeUnmount() { - if(this.saveTimer) clearTimeout(this.saveTimer); - }, - mounted() { - this.setProjects(); - }, + inject: ['api', 'lang'], + data() { + return { + elems: {}, + feedbacks: [], + saveTimer: null + }; + }, + beforeUnmount() { + if(this.saveTimer) clearTimeout(this.saveTimer); + }, + mounted() { + this.setProjects(); + }, methods: { l(id) { return this.lang.get(id); @@ -39,7 +39,7 @@ export default { this.feedbacks.push({type:sType, msg:sMsg}); }, async setProjects() { - let aoElemTypes = await this.api.get('admin_get'); + let aoElemTypes = await this.api.get('admin_get'); for(const [sType, aoElems] of Object.entries(aoElemTypes)) { this.elems[sType] = {}; @@ -50,7 +50,7 @@ export default { } }, createElem(sType) { - this.api.get('admin_create', {type: sType}) + this.api.get('admin_create', {type: sType}) .then((aoNewElemTypes) => { for(const [sType, aoNewElems] of Object.entries(aoNewElemTypes)) { for(const [iKey, oNewElem] of Object.entries(aoNewElems)) { @@ -68,20 +68,20 @@ export default { id: oElem.id }; - this.api.get('admin_delete', asInputs) - .then((asData) => { - delete this.elems[asInputs.type][asInputs.id]; - this.addFeedback('success', this.lang.get('admin_delete_success'), asInputs); - }) - .catch((sError) => { - this.addFeedback('error', sError, asInputs); - }); - }, - updateElem(oElem, oEvent) { - if(this.saveTimer) clearTimeout(this.saveTimer); - - let sOldVal = this.elems[oElem.type][oElem.id][oEvent.target.name]; - let sNewVal = oEvent.target.value; + this.api.get('admin_delete', asInputs) + .then((asData) => { + delete this.elems[asInputs.type][asInputs.id]; + this.addFeedback('success', this.lang.get('admin_delete_success'), asInputs); + }) + .catch((sError) => { + this.addFeedback('error', sError, asInputs); + }); + }, + updateElem(oElem, oEvent) { + if(this.saveTimer) clearTimeout(this.saveTimer); + + let sOldVal = this.elems[oElem.type][oElem.id][oEvent.target.name]; + let sNewVal = oEvent.target.value; if(sOldVal != sNewVal) { let asInputs = { type: oElem.type, @@ -90,7 +90,7 @@ export default { value: sNewVal }; - this.api.get('admin_set', asInputs) + this.api.get('admin_set', asInputs) .then((asData) => { this.elems[oElem.type][oElem.id][oEvent.target.name] = sNewVal; this.addFeedback('success', this.lang.get('admin_save_success'), asInputs); @@ -100,13 +100,13 @@ export default { this.addFeedback('error', sError, asInputs); }); } - }, - queue(oElem, oEvent) { - if(this.saveTimer) clearTimeout(this.saveTimer); - this.saveTimer = setTimeout(() => {this.updateElem(oElem, oEvent);}, 2000); - }, + }, + queue(oElem, oEvent) { + if(this.saveTimer) clearTimeout(this.saveTimer); + this.saveTimer = setTimeout(() => {this.updateElem(oElem, oEvent);}, 2000); + }, updateProject() { - this.api.get('update_project') + this.api.get('update_project') .then((asData, sMsg) => {this.addFeedback('success', sMsg, {'update':'project'});}) .catch((sMsg) => {this.addFeedback('error', sMsg, {'update':'project'});}); } @@ -138,7 +138,7 @@ export default { - + @@ -168,7 +168,7 @@ export default { {{ feed.name }} {{ feed.status }} {{ feed.last_update }} - + @@ -215,7 +215,7 @@ export default { {{ user.language }} {{ user.timezone }} - + diff --git a/src/components/project.vue b/src/components/project.vue index 5fb2ec5..501679b 100644 --- a/src/components/project.vue +++ b/src/components/project.vue @@ -158,7 +158,7 @@ export default { initLightbox() { lightbox.option({ alwaysShowNavOnTouchDevices: true, - albumLabel: ' %1 / %2', + albumLabel: 'Media %1 / %2', fadeDuration: 300, imageFadeDuration: 400, positionFromTop: 0, @@ -303,7 +303,7 @@ export default { this.markers.messages.forEach(msg => { const el = document.createElement('div'); - const app = createApp(SpotIconStack, {iconMain: 'message', iconSub:'message-in', iconSubClasses:'fa-rotate-270'}); + const app = createApp(SpotIconStack, {iconMain: 'message', iconSub:'message-in', iconSubRotation: 270}); app.mount(el); new Marker({element: el, anchor: 'bottom'}) @@ -646,7 +646,9 @@ export default {
-
+
+ +
@@ -660,7 +662,7 @@ export default {
-

+

@@ -674,7 +676,7 @@ export default {
-

+

@@ -683,9 +685,11 @@ export default {
diff --git a/src/components/projectMediaLink.vue b/src/components/projectMediaLink.vue index 05e4aff..d1dfde7 100644 --- a/src/components/projectMediaLink.vue +++ b/src/components/projectMediaLink.vue @@ -55,7 +55,7 @@ export default {
- + diff --git a/src/components/projectPopup.vue b/src/components/projectPopup.vue index dd715d7..931270b 100644 --- a/src/components/projectPopup.vue +++ b/src/components/projectPopup.vue @@ -31,24 +31,24 @@ export default {

- + ({{ options.type }})

- +

- +

({{ options.relative_time }})

- +

diff --git a/src/components/projectPost.vue b/src/components/projectPost.vue index 0c0095a..6aca12a 100644 --- a/src/components/projectPost.vue +++ b/src/components/projectPost.vue @@ -32,6 +32,7 @@ anchorTitle: this.lang.get('copy_to_clipboard'), anchorIcon: 'link', popupRequested: false, + mouseOverDrill: false, postMessage: '', sending: false, focusZoomLevel: 15 @@ -51,6 +52,9 @@ displayedId() { return this.options.displayed_id?(this.lang.get('counter', this.options.displayed_id)):''; }, + drillMainIcon() { + return this.mouseOverDrill?'drill-message':'marker'; + }, anchorLink() { return '#'+[this.hash.page, this.hash.items[0], this.options.type, this.options.id].join(this.consts.hash_sep); }, @@ -139,11 +143,11 @@ diff --git a/src/components/spotIcon.vue b/src/components/spotIcon.vue index ae5a6bf..59c3e9e 100644 --- a/src/components/spotIcon.vue +++ b/src/components/spotIcon.vue @@ -1,24 +1,58 @@ \ No newline at end of file + + + {{ text }} + + + diff --git a/src/components/spotIconStack.vue b/src/components/spotIconStack.vue index 788c4dc..00952e7 100644 --- a/src/components/spotIconStack.vue +++ b/src/components/spotIconStack.vue @@ -1,20 +1,41 @@