annotate client/src/components/layers/Layers.vue @ 3181:c122a064fd5e

client: map: fixed loading animation for layers Zooming out to the user specific map extent right after the map has been rendered initially interrupts the loading process for layers with a maxResolution that is exceeded by that. This leads to the loading flag of the layer source to be never set to false until you zoom to a resolution where these layers are active again. This is an unexpected behavior that will be reported to upstream. (https://github.com/openlayers/openlayers/issues/9503)
author Markus Kottlaender <markus@intevation.de>
date Tue, 07 May 2019 14:54:16 +0200
parents fc008b32c593
children 80037790032d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
1 <template>
1480
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
2 <div
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
3 :class="[
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
4 'box ui-element rounded bg-white text-nowrap',
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
5 { expanded: showLayers }
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
6 ]"
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1402
diff changeset
7 >
3055
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
8 <div class="position-relative" style="width: 18rem; min-height: 350px;">
3167
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
9 <UIBoxHeader
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
10 icon="layer-group"
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
11 :title="label"
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
12 :closeCallback="close"
3177
fc008b32c593 client: layers: loading animation for refreshing layer sources
Markus Kottlaender <markus@intevation.de>
parents: 3167
diff changeset
13 :actions="[
3181
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
14 {
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
15 callback: refreshLayers,
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
16 icon: sourcesLoading ? 'spinner' : 'sync'
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
17 }
3177
fc008b32c593 client: layers: loading animation for refreshing layer sources
Markus Kottlaender <markus@intevation.de>
parents: 3167
diff changeset
18 ]"
3167
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
19 />
3055
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
20 <div class="small" v-if="openLayersMaps.length">
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
21 <Layerselect layerId="OPENSTREETMAP" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
22 <Layerselect layerId="INLANDECDIS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
23 <Layerselect layerId="WATERWAYAREA" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
24 <Layerselect layerId="STRETCHES" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
25 <Layerselect layerId="FAIRWAYDIMENSIONSLOS3" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
26 <Layerselect layerId="FAIRWAYDIMENSIONSLOS2" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
27 <Layerselect layerId="FAIRWAYDIMENSIONSLOS1" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
28 <Layerselect layerId="WATERWAYAXIS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
29 <Layerselect layerId="WATERWAYPROFILES" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
30 <Layerselect layerId="BOTTLENECKS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
31 <Layerselect layerId="BOTTLENECKISOLINE" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
32 <Layerselect layerId="DIFFERENCES" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
33 <Layerselect layerId="BOTTLENECKSTATUS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
34 <Layerselect layerId="DISTANCEMARKS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
35 <Layerselect layerId="DISTANCEMARKSAXIS" />
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
36 <Layerselect layerId="GAUGES" />
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
37 </div>
3055
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
38 <UISpinnerOverlay v-else style="top: 34px;" />
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
39 </div>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
40 </div>
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
41 </template>
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
42
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
43 <script>
1362
ca33ad696594 remove the first empyty lines
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1361
diff changeset
44 /* This is Free Software under GNU Affero General Public License v >= 3.0
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
45 * without warranty, see README.md and license for details.
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
46 *
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
47 * SPDX-License-Identifier: AGPL-3.0-or-later
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
48 * License-Filename: LICENSES/AGPL-3.0.txt
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
49 *
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
50 * Copyright (C) 2018 by via donau
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
51 * – Österreichische Wasserstraßen-Gesellschaft mbH
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
52 * Software engineering by Intevation GmbH
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
53 *
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
54 * Author(s):
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
55 * Thomas Junk <thomas.junk@intevation.de>
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
56 * Markus Kottländer <markus.kottlaender@intevation.de>
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
57 */
3055
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
58 import { mapState } from "vuex";
3167
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
59 import { Vector as VectorLayer } from "ol/layer";
2870
35f6e4383161 layer structure overhaul
Thomas Junk <thomas.junk@intevation.de>
parents: 2851
diff changeset
60
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
61 export default {
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
62 components: {
1669
16fb9667ddf8 refac: use dynamic imports for components
Thomas Junk <thomas.junk@intevation.de>
parents: 1558
diff changeset
63 Layerselect: () => import("./Layerselect")
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
64 },
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
65 computed: {
2754
d0f6c222f4f9 client:correct a set of strings marking
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2534
diff changeset
66 ...mapState("application", ["showLayers"]),
3181
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
67 ...mapState("map", ["openLayersMaps"]),
3055
b3c24c47931c client: layers legend: support multiple maps
Markus Kottlaender <markus@intevation.de>
parents: 3044
diff changeset
68 label() {
2754
d0f6c222f4f9 client:correct a set of strings marking
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2534
diff changeset
69 return this.$gettext("Layers");
3181
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
70 },
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
71 sourcesLoading() {
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
72 let counter = 0;
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
73 this.openLayersMaps.forEach(map => {
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
74 let layers = map.getLayers().getArray();
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
75 for (let i = 0; i < layers.length; i++) {
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
76 if (layers[i].getSource().loading) counter++;
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
77 }
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
78 });
c122a064fd5e client: map: fixed loading animation for layers
Markus Kottlaender <markus@intevation.de>
parents: 3177
diff changeset
79 return counter;
2754
d0f6c222f4f9 client:correct a set of strings marking
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2534
diff changeset
80 }
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
81 },
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
82 methods: {
2387
f185503ef35a client: unified box's header styles by creating a reusable component
Markus Kottlaender <markus@intevation.de>
parents: 2260
diff changeset
83 close() {
f185503ef35a client: unified box's header styles by creating a reusable component
Markus Kottlaender <markus@intevation.de>
parents: 2260
diff changeset
84 this.$store.commit("application/showLayers", false);
3167
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
85 },
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
86 refreshLayers() {
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
87 this.openLayersMaps.forEach(map => {
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
88 let layers = map.getLayers().getArray();
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
89 for (let i = 0; i < layers.length; i++) {
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
90 let layer = layers[i];
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
91 if (
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
92 layer instanceof VectorLayer &&
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
93 layer.get("source").loader_.name != "VOID"
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
94 ) {
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
95 layer.getSource().clear(true);
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
96 layer.getSource().refresh({ force: true });
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
97 }
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
98 }
85734c763652 client: layers: moved refresh button from zoom controls to layers dialog
Markus Kottlaender <markus@intevation.de>
parents: 3055
diff changeset
99 });
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
100 }
2957
b74ebeb2bdc8 client: layers: improved structure of layer configuration
Markus Kottlaender <markus@intevation.de>
parents: 2952
diff changeset
101 }
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
102 };
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
103 </script>