Mercurial > gemma
comparison client/src/components/Main.vue @ 3041:ccda334eed92
client: panes: improved panes rotation, works with pure css so that components don't need to be re-mounted
author | Markus Kottlaender <markus@intevation.de> |
---|---|
date | Sat, 13 Apr 2019 14:51:56 +0200 |
parents | 5d7db2ea16c8 |
children | 0233845cadb7 |
comparison
equal
deleted
inserted
replaced
3040:a661e9b8f3b6 | 3041:ccda334eed92 |
---|---|
1 <template> | 1 <template> |
2 <div | 2 <div id="panes" :class="'d-flex position-absolute rotate' + paneRotate"> |
3 id="panes" | 3 <div id="pane1" :class="'pane d-flex ' + pane1Class"> |
4 :class="[ | 4 <component :is="panes[0]" /> |
5 'd-flex flex-wrap position-absolute', | 5 </div> |
6 { 'flex-column': ['left', 'right'].includes(paneMode) } | 6 |
7 ]" | 7 <template v-if="panes.length === 2"> |
8 > | 8 <div id="pane2" :class="'pane d-flex ' + pane2Class"> |
9 <template v-if="panes.length === 1"> | 9 <component :is="panes[1]" /> |
10 <div id="pane1" class="pane d-flex wh-100"> | |
11 <component :is="panes[0]" /> | |
12 </div> | 10 </div> |
13 </template> | 11 </template> |
14 | 12 |
15 <template v-if="panes.length === 2"> | |
16 <template v-if="paneMode === 'horizontal'"> | |
17 <div id="pane1" class="pane d-flex w-100 h-50"> | |
18 <component :is="panes[0]" /> | |
19 </div> | |
20 <div id="pane2" class="pane d-flex w-100 h-50"> | |
21 <component :is="panes[1]" /> | |
22 </div> | |
23 </template> | |
24 <template v-if="paneMode === 'vertical'"> | |
25 <div id="pane1" class="pane d-flex w-50 h-100"> | |
26 <component :is="panes[0]" /> | |
27 </div> | |
28 <div id="pane2" class="pane d-flex w-50 h-100"> | |
29 <component :is="panes[1]" /> | |
30 </div> | |
31 </template> | |
32 </template> | |
33 | |
34 <template v-if="panes.length === 3"> | 13 <template v-if="panes.length === 3"> |
35 <template v-if="paneMode === 'top'"> | 14 <div id="pane3" class="pane d-flex wh-50"> |
36 <div id="pane1" class="pane d-flex w-100 h-50"> | 15 <component :is="panes[2]" /> |
37 <component :is="panes[0]" /> | 16 </div> |
38 </div> | 17 <div id="pane2" class="pane d-flex wh-50"> |
39 <div id="pane3" class="pane d-flex w-50 h-50"> | 18 <component :is="panes[1]" /> |
40 <component :is="panes[2]" /> | 19 </div> |
41 </div> | |
42 <div id="pane2" class="pane d-flex w-50 h-50"> | |
43 <component :is="panes[1]" /> | |
44 </div> | |
45 </template> | |
46 <template v-if="paneMode === 'right'"> | |
47 <div id="pane3" class="pane d-flex w-50 h-50"> | |
48 <component :is="panes[2]" /> | |
49 </div> | |
50 <div id="pane2" class="pane d-flex w-50 h-50"> | |
51 <component :is="panes[1]" /> | |
52 </div> | |
53 <div id="pane1" class="pane d-flex w-50 h-100"> | |
54 <component :is="panes[0]" /> | |
55 </div> | |
56 </template> | |
57 <template v-if="paneMode === 'bottom'"> | |
58 <div id="pane2" class="pane d-flex w-50 h-50"> | |
59 <component :is="panes[1]" /> | |
60 </div> | |
61 <div id="pane3" class="pane d-flex w-50 h-50"> | |
62 <component :is="panes[2]" /> | |
63 </div> | |
64 <div id="pane1" class="pane d-flex w-100 h-50"> | |
65 <component :is="panes[0]" /> | |
66 </div> | |
67 </template> | |
68 <template v-if="paneMode === 'left'"> | |
69 <div id="pane1" class="pane d-flex w-50 h-100"> | |
70 <component :is="panes[0]" /> | |
71 </div> | |
72 <div id="pane2" class="pane d-flex w-50 h-50"> | |
73 <component :is="panes[1]" /> | |
74 </div> | |
75 <div id="pane3" class="pane d-flex w-50 h-50"> | |
76 <component :is="panes[2]" /> | |
77 </div> | |
78 </template> | |
79 </template> | 20 </template> |
80 | 21 |
81 <template v-if="panes.length === 4"> | 22 <template v-if="panes.length === 4"> |
82 <div id="pane1" class="pane d-flex w-50 h-50"> | 23 <div id="pane2" class="pane d-flex wh-50"> |
83 <component :is="panes[0]" /> | |
84 </div> | |
85 <div id="pane2" class="pane d-flex w-50 h-50"> | |
86 <component :is="panes[1]" /> | 24 <component :is="panes[1]" /> |
87 </div> | 25 </div> |
88 <div id="pane4" class="pane d-flex w-50 h-50"> | 26 <div id="pane4" class="pane d-flex wh-50"> |
89 <component :is="panes[3]" /> | 27 <component :is="panes[3]" /> |
90 </div> | 28 </div> |
91 <div id="pane3" class="pane d-flex w-50 h-50"> | 29 <div id="pane3" class="pane d-flex wh-50"> |
92 <component :is="panes[2]" /> | 30 <component :is="panes[2]" /> |
93 </div> | 31 </div> |
94 </template> | 32 </template> |
95 </div> | 33 </div> |
96 </template> | 34 </template> |
100 top: -0.5px | 38 top: -0.5px |
101 right: -0.5px | 39 right: -0.5px |
102 bottom: -0.5px | 40 bottom: -0.5px |
103 left: -0.5px | 41 left: -0.5px |
104 z-index: 1 | 42 z-index: 1 |
43 &.rotate1 | |
44 flex-wrap: wrap | |
45 flex-direction: row | |
46 &.rotate2 | |
47 flex-wrap: wrap-reverse | |
48 flex-direction: column | |
49 &.rotate3 | |
50 flex-wrap: wrap-reverse | |
51 flex-direction: row-reverse | |
52 &.rotate4 | |
53 flex-wrap: wrap | |
54 flex-direction: column-reverse | |
105 .pane | 55 .pane |
106 border: solid 0.5px #fff | 56 border: solid 0.5px #fff |
107 background: #fff | 57 background: #fff |
108 </style> | 58 </style> |
109 | 59 |
133 AvailableFairwayDepth: () => import("./fairway/AvailableFairwayDepth"), | 83 AvailableFairwayDepth: () => import("./fairway/AvailableFairwayDepth"), |
134 Waterlevel: () => import("./gauge/Waterlevel"), | 84 Waterlevel: () => import("./gauge/Waterlevel"), |
135 HydrologicalConditions: () => import("./gauge/HydrologicalConditions") | 85 HydrologicalConditions: () => import("./gauge/HydrologicalConditions") |
136 }, | 86 }, |
137 computed: { | 87 computed: { |
138 ...mapState("application", ["panes", "paneMode"]) | 88 ...mapState("application", ["panes", "paneRotate"]), |
89 // pane 1 and 2 are the only ones that can have varying size | |
90 // thats why tehre is no pane3class or pane4class | |
91 pane1Class() { | |
92 if (this.panes.length === 1) return "wh-100"; | |
93 if (this.panes.length === 2 || this.panes.length === 3) { | |
94 if (this.paneRotate === 1 || this.paneRotate === 3) return "w-100 h-50"; | |
95 if (this.paneRotate === 2 || this.paneRotate === 4) return "w-50 h-100"; | |
96 } | |
97 if (this.panes.length === 4) { | |
98 return "wh-50"; | |
99 } | |
100 }, | |
101 pane2Class() { | |
102 if (this.panes.length === 2) { | |
103 if (this.paneRotate === 1 || this.paneRotate === 3) return "w-100 h-50"; | |
104 if (this.paneRotate === 2 || this.paneRotate === 4) return "w-50 h-100"; | |
105 } else { | |
106 return "wh-50"; | |
107 } | |
108 } | |
139 } | 109 } |
140 }; | 110 }; |
141 </script> | 111 </script> |