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 @@