From ea335ae9e8a4d3ca5c153f428b5d8400c4e003cb Mon Sep 17 00:00:00 2001 From: Marco Ambrosini Date: Thu, 6 May 2021 12:43:10 +0100 Subject: [PATCH 1/7] Create location component Signed-off-by: Marco Ambrosini --- .../MessagesGroup/Message/Message.vue | 6 ++ .../Message/MessagePart/Location.vue | 74 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue diff --git a/src/components/MessagesList/MessagesGroup/Message/Message.vue b/src/components/MessagesList/MessagesGroup/Message/Message.vue index 0f40ffaef34..3893cf82f82 100644 --- a/src/components/MessagesList/MessagesGroup/Message/Message.vue +++ b/src/components/MessagesList/MessagesGroup/Message/Message.vue @@ -214,6 +214,7 @@ import { TOAST_DEFAULT_TIMEOUT, } from '@nextcloud/dialogs' import { generateUrl } from '@nextcloud/router' +import Location from './MessagePart/Location' export default { name: 'Message', @@ -492,6 +493,11 @@ export default { component: DeckCard, props: this.messageParameters[p], } + } else if (type === 'geo-location') { + richParameters[p] = { + component: Location, + props: this.messageParameters[p], + } } else { richParameters[p] = { component: DefaultParameter, diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue new file mode 100644 index 00000000000..f7f6ceadc08 --- /dev/null +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue @@ -0,0 +1,74 @@ + + + + + + + From eb65680726d1d11ca23523c4b91bd49908671053 Mon Sep 17 00:00:00 2001 From: Marco Ambrosini Date: Thu, 6 May 2021 16:23:52 +0100 Subject: [PATCH 2/7] Display map in the MessageList Signed-off-by: Marco Ambrosini --- lib/Controller/PageController.php | 2 + lib/Listener/CSPListener.php | 1 + package-lock.json | 25 ++++++++++- package.json | 3 ++ .../Message/MessagePart/Location.vue | 45 +++++++++++++++++-- src/main.js | 6 +++ src/mainFilesSidebar.js | 6 +++ src/mainPublicShareAuthSidebar.js | 6 +++ src/mainPublicShareSidebar.js | 6 +++ 9 files changed, 94 insertions(+), 6 deletions(-) diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 8f1d12c27eb..fc86dda56e9 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -261,6 +261,7 @@ public function index(string $token = '', string $callUser = '', string $passwor $csp = new ContentSecurityPolicy(); $csp->addAllowedConnectDomain('*'); $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); $response->setContentSecurityPolicy($csp); return $response; } @@ -312,6 +313,7 @@ protected function guestEnterRoom(string $token, string $password): Response { $csp = new ContentSecurityPolicy(); $csp->addAllowedConnectDomain('*'); $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); $response->setContentSecurityPolicy($csp); return $response; } diff --git a/lib/Listener/CSPListener.php b/lib/Listener/CSPListener.php index 491a0d6fe92..dfdbaff1ffd 100644 --- a/lib/Listener/CSPListener.php +++ b/lib/Listener/CSPListener.php @@ -46,6 +46,7 @@ public function handle(Event $event): void { } $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); foreach ($this->config->getAllServerUrlsForCSP() as $server) { $csp->addAllowedConnectDomain($server); } diff --git a/package-lock.json b/package-lock.json index aa1c3d36c1d..26c054de89f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5374,7 +5374,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "dev": true, + "optional": true }, "find-cache-dir": { "version": "3.3.1", @@ -5651,6 +5652,7 @@ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz", "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==", "dev": true, + "optional": true, "requires": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -5662,6 +5664,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, + "optional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5671,13 +5674,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "optional": true }, "loader-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, + "optional": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -5689,6 +5694,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "optional": true, "requires": { "has-flag": "^4.0.0" } @@ -14647,6 +14653,16 @@ "resolved": "https://registry.npmjs.org/layerr/-/layerr-0.1.2.tgz", "integrity": "sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ==" }, + "leaflet": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", + "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==" + }, + "leaflet-defaulticon-compatibility": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.1.tgz", + "integrity": "sha512-vDBFdlUAwjSEGep9ih8kfJilf6yN8V9zTbF5NC/1ZwLeGko3RUQepspPnGCRMFV51dY3Lb3hziboicrFz+rxQA==" + }, "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", @@ -22021,6 +22037,11 @@ "date-format-parse": "^0.2.5" } }, + "vue2-leaflet": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/vue2-leaflet/-/vue2-leaflet-2.7.0.tgz", + "integrity": "sha512-uT7lpFoVEDhINMyTpiAthh6aiKFGHuYWLoVH8JJ0YNNSch+XMZFl4YBQ0S2hHYDquQIsh8zx+yINeUI01y9ugw==" + }, "vuex": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", diff --git a/package.json b/package.json index eddf33d29ef..76fc8698dfb 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "emoji-regex": "^9.2.2", "escape-html": "^1.0.3", "hark": "^1.2.3", + "leaflet": "^1.7.1", + "leaflet-defaulticon-compatibility": "^0.1.1", "lodash": "^4.17.21", "mockconsole": "0.0.1", "nextcloud-vue-collections": "^0.9.0", @@ -54,6 +56,7 @@ "vue-resize": "^1.0.1", "vue-router": "^3.5.1", "vue-shortkey": "^3.1.7", + "vue2-leaflet": "^2.7.0", "vuex": "^3.6.2", "webdav": "^4.3.0", "webrtc-adapter": "^7.7.1", diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue index f7f6ceadc08..ba0dfdbd6db 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue @@ -21,15 +21,35 @@ diff --git a/src/main.js b/src/main.js index 2332e04632e..3d0e43e8e7f 100644 --- a/src/main.js +++ b/src/main.js @@ -48,6 +48,12 @@ import Tooltip from '@nextcloud/vue/dist/Directives/Tooltip' // Styles import '@nextcloud/dialogs/styles/toast.scss' +import 'leaflet/dist/leaflet.css' + +// Leaflet icon patch +import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css' // Re-uses images from ~leaflet package +// eslint-disable-next-line +import 'leaflet-defaulticon-compatibility' // CSP config for webpack dynamic chunk loading // eslint-disable-next-line diff --git a/src/mainFilesSidebar.js b/src/mainFilesSidebar.js index c0ce3c23068..46961684762 100644 --- a/src/mainFilesSidebar.js +++ b/src/mainFilesSidebar.js @@ -43,6 +43,12 @@ import vOutsideEvents from 'vue-outside-events' // Styles import '@nextcloud/dialogs/styles/toast.scss' +import 'leaflet/dist/leaflet.css' + +// Leaflet icon patch +import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css' // Re-uses images from ~leaflet package +// eslint-disable-next-line +import 'leaflet-defaulticon-compatibility' // CSP config for webpack dynamic chunk loading // eslint-disable-next-line diff --git a/src/mainPublicShareAuthSidebar.js b/src/mainPublicShareAuthSidebar.js index dd28fca0fb5..9d72012a32c 100644 --- a/src/mainPublicShareAuthSidebar.js +++ b/src/mainPublicShareAuthSidebar.js @@ -39,6 +39,12 @@ import vOutsideEvents from 'vue-outside-events' // Styles import '@nextcloud/dialogs/styles/toast.scss' +import 'leaflet/dist/leaflet.css' + +// Leaflet icon patch +import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css' // Re-uses images from ~leaflet package +// eslint-disable-next-line +import 'leaflet-defaulticon-compatibility' // CSP config for webpack dynamic chunk loading // eslint-disable-next-line diff --git a/src/mainPublicShareSidebar.js b/src/mainPublicShareSidebar.js index a47184a55e3..40d1f90eec2 100644 --- a/src/mainPublicShareSidebar.js +++ b/src/mainPublicShareSidebar.js @@ -38,6 +38,12 @@ import vOutsideEvents from 'vue-outside-events' // Styles import '@nextcloud/dialogs/styles/toast.scss' +import 'leaflet/dist/leaflet.css' + +// Leaflet icon patch +import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css' // Re-uses images from ~leaflet package +// eslint-disable-next-line +import 'leaflet-defaulticon-compatibility' // CSP config for webpack dynamic chunk loading // eslint-disable-next-line From 4f77ac3d109d5321ca0c83aae7a4364256c1fded Mon Sep 17 00:00:00 2001 From: Marco Ambrosini Date: Fri, 7 May 2021 09:36:32 +0100 Subject: [PATCH 3/7] Open openstreetmap location upon clicking the map Signed-off-by: Marco Ambrosini --- .../MessagesGroup/Message/MessagePart/Location.vue | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue index ba0dfdbd6db..cddd72ca2af 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue @@ -20,7 +20,11 @@ --> @@ -104,6 +112,7 @@ export default { overflow: hidden; border-radius: var(--border-radius-large); position: relative; + display: block; z-index: 1; height: 200px; width: 350px; From efcf698c0624e5a0adf68a548d141bebb06bb934 Mon Sep 17 00:00:00 2001 From: Marco Ambrosini Date: Fri, 7 May 2021 09:37:46 +0100 Subject: [PATCH 4/7] remove unused id prop Signed-off-by: Marco Ambrosini --- .../MessagesGroup/Message/MessagePart/Location.vue | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue index cddd72ca2af..86c9d35317a 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue @@ -55,14 +55,6 @@ export default { }, props: { - /** - * The geolink for the location - */ - id: { - type: String, - required: true, - }, - /** * The latitude of the location */ From b41106813c5182fe65032ae151c5aa6d136628db Mon Sep 17 00:00:00 2001 From: Marco Ambrosini Date: Fri, 7 May 2021 09:40:53 +0100 Subject: [PATCH 5/7] Add link zoom to the data of the component Signed-off-by: Marco Ambrosini --- .../MessagesGroup/Message/MessagePart/Location.vue | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue index 86c9d35317a..10477afd8bb 100644 --- a/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue +++ b/src/components/MessagesList/MessagesGroup/Message/MessagePart/Location.vue @@ -27,7 +27,7 @@ :aria-label="linkAriaLabel"> - + + + {{ name }} + +