@panoramax/web-viewer 3.1.1-develop-9c3a5399 → 3.1.1-develop-7b28b173
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/build/index.css +1 -1
- package/build/index.css.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Viewer.js +1 -0
- package/src/utils/Widgets.js +13 -0
- package/src/viewer/Widgets.css +76 -0
- package/src/viewer/Widgets.js +57 -14
package/package.json
CHANGED
package/src/Viewer.js
CHANGED
|
@@ -235,6 +235,7 @@ class Viewer extends CoreView {
|
|
|
235
235
|
const userSearchField = document.getElementById("gvs-filter-search-user").querySelector("input");
|
|
236
236
|
if(userSearchField) {
|
|
237
237
|
userSearchField.setItem(userNames);
|
|
238
|
+
userSearchField.parentNode.classList.add("gvs-filter-active");
|
|
238
239
|
}
|
|
239
240
|
}).catch(e => console.warn("Error when looking up for user names", e));
|
|
240
241
|
}
|
package/src/utils/Widgets.js
CHANGED
|
@@ -62,6 +62,19 @@ export function createExpandableButton(id, icon, label, container, classes = [])
|
|
|
62
62
|
btn.title = label;
|
|
63
63
|
}
|
|
64
64
|
btn.classList.add("gvs-btn", "gvs-widget-bg", "gvs-btn-expandable", ...classes);
|
|
65
|
+
btn.setActive = val => {
|
|
66
|
+
let span = btn.querySelector(".gvs-filters-active");
|
|
67
|
+
if(val && !span) {
|
|
68
|
+
span = document.createElement("span");
|
|
69
|
+
span.classList.add("gvs-filters-active");
|
|
70
|
+
const svg = btn.querySelector("svg");
|
|
71
|
+
if(svg.nextSibling) { btn.insertBefore(span, svg.nextSibling); }
|
|
72
|
+
else { btn.appendChild(span); }
|
|
73
|
+
}
|
|
74
|
+
else if(!val && span) {
|
|
75
|
+
span.remove();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
65
78
|
return btn;
|
|
66
79
|
}
|
|
67
80
|
|
package/src/viewer/Widgets.css
CHANGED
|
@@ -207,6 +207,63 @@ span.gvs-input-btn {
|
|
|
207
207
|
width: 100%;
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
+
/* Checkbox looking like buttons */
|
|
211
|
+
.gvs-input-group.gvs-checkbox-btns {
|
|
212
|
+
gap: 0;
|
|
213
|
+
}
|
|
214
|
+
.gvs-checkbox-btns label {
|
|
215
|
+
display: inline-block;
|
|
216
|
+
padding: 2px 7px;
|
|
217
|
+
background: none;
|
|
218
|
+
border: 1px solid var(--widget-border-btn);
|
|
219
|
+
color: var(--widget-font-btn-direct);
|
|
220
|
+
cursor: pointer;
|
|
221
|
+
font-size: 16px;
|
|
222
|
+
text-decoration: none;
|
|
223
|
+
border-left-width: 0px;
|
|
224
|
+
}
|
|
225
|
+
.gvs-checkbox-btns label:hover {
|
|
226
|
+
background-color: var(--widget-bg-hover);
|
|
227
|
+
}
|
|
228
|
+
.gvs-checkbox-btns label:first-of-type {
|
|
229
|
+
border-top-left-radius: 8px;
|
|
230
|
+
border-bottom-left-radius: 8px;
|
|
231
|
+
border-left-width: 1px;
|
|
232
|
+
}
|
|
233
|
+
.gvs-checkbox-btns label:last-of-type {
|
|
234
|
+
border-top-right-radius: 8px;
|
|
235
|
+
border-bottom-right-radius: 8px;
|
|
236
|
+
}
|
|
237
|
+
.gvs-checkbox-btns input[type="checkbox"] { display: none; }
|
|
238
|
+
.gvs-checkbox-btns input[type="checkbox"]:checked + label {
|
|
239
|
+
background-color: var(--widget-bg-active);
|
|
240
|
+
color: var(--widget-font-active);
|
|
241
|
+
}
|
|
242
|
+
.gvs-checkbox-btns input[type="checkbox"]:checked + label:first-of-type {
|
|
243
|
+
border-right-color: white;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* Input shortcuts */
|
|
247
|
+
.gvs-input-shortcuts {
|
|
248
|
+
margin-top: -10px;
|
|
249
|
+
margin-bottom: 5px;
|
|
250
|
+
}
|
|
251
|
+
.gvs-input-shortcuts button {
|
|
252
|
+
border: none;
|
|
253
|
+
height: 20px;
|
|
254
|
+
line-height: 20px;
|
|
255
|
+
font-size: 11px;
|
|
256
|
+
padding: 0 8px;
|
|
257
|
+
vertical-align: middle;
|
|
258
|
+
background-color: var(--grey-pale);
|
|
259
|
+
color: var(--black);
|
|
260
|
+
border-radius: 10px;
|
|
261
|
+
cursor: pointer;
|
|
262
|
+
}
|
|
263
|
+
.gvs-input-shortcuts button:hover {
|
|
264
|
+
background-color: #d9dcd9;
|
|
265
|
+
}
|
|
266
|
+
|
|
210
267
|
|
|
211
268
|
/* Group */
|
|
212
269
|
.gvs-group {
|
|
@@ -591,10 +648,25 @@ a.gvs-btn { text-decoration: none; }
|
|
|
591
648
|
|
|
592
649
|
/* Filters */
|
|
593
650
|
#gvs-filter { margin-bottom: 5px; }
|
|
651
|
+
.gvs-filters-active {
|
|
652
|
+
width: 15px;
|
|
653
|
+
height: 15px;
|
|
654
|
+
border-radius: 8px;
|
|
655
|
+
border: 3px solid white;
|
|
656
|
+
position: absolute;
|
|
657
|
+
left: 20px;
|
|
658
|
+
top: 5px;
|
|
659
|
+
background-color: var(--orange);
|
|
660
|
+
}
|
|
594
661
|
#gvs-filter-panel {
|
|
595
662
|
width: 350px;
|
|
596
663
|
max-width: 350px;
|
|
597
664
|
}
|
|
665
|
+
#gvs-filter-panel .gvs-filter-active {
|
|
666
|
+
background-color: var(--widget-bg-active);
|
|
667
|
+
border-color: var(--widget-bg-active);
|
|
668
|
+
color: var(--widget-font-active);
|
|
669
|
+
}
|
|
598
670
|
#gvs-filter-panel input[type=date] {
|
|
599
671
|
min-width: 0;
|
|
600
672
|
flex-grow: 2;
|
|
@@ -602,6 +674,10 @@ a.gvs-btn { text-decoration: none; }
|
|
|
602
674
|
text-align: center;
|
|
603
675
|
}
|
|
604
676
|
#gvs-filter-camera-model, #gvs-filter-search-user { width: 100%; }
|
|
677
|
+
#gvs-filter-search-user.gvs-filter-active input {
|
|
678
|
+
color: var(--widget-font-active);
|
|
679
|
+
background: none;
|
|
680
|
+
}
|
|
605
681
|
#gvs-filter-zoomin {
|
|
606
682
|
text-align: center;
|
|
607
683
|
font-weight: bold;
|
package/src/viewer/Widgets.js
CHANGED
|
@@ -978,17 +978,21 @@ export default class Widgets {
|
|
|
978
978
|
<form id="gvs-filter-form">
|
|
979
979
|
<div id="gvs-filter-zoomin">${fat(faTriangleExclamation)} ${this._t.gvs.filter_zoom_in}</div>
|
|
980
980
|
<h4>${fat(faCalendar)} ${this._t.gvs.filter_date}</h4>
|
|
981
|
+
<div class="gvs-input-shortcuts">
|
|
982
|
+
<button data-for="gvs-filter-date-from" data-value="${new Date(new Date().setMonth(new Date().getMonth() - 1)).toISOString().split("T")[0]}">1 mois</button>
|
|
983
|
+
<button data-for="gvs-filter-date-from" data-value="${new Date(new Date().setFullYear(new Date().getFullYear() - 1)).toISOString().split("T")[0]}">1 an</button>
|
|
984
|
+
</div>
|
|
981
985
|
<div class="gvs-input-group">
|
|
982
986
|
<input type="date" id="gvs-filter-date-from" />
|
|
983
987
|
${fat(faArrowRight)}
|
|
984
988
|
<input type="date" id="gvs-filter-date-end" />
|
|
985
989
|
</div>
|
|
986
990
|
<h4>${fat(faImage)} ${this._t.gvs.filter_picture}</h4>
|
|
987
|
-
<div class="gvs-input-group" style="justify-content: center;">
|
|
991
|
+
<div class="gvs-input-group gvs-checkbox-btns" style="justify-content: center;">
|
|
988
992
|
<input type="checkbox" id="gvs-filter-type-flat" name="flat" checked />
|
|
989
|
-
<label for="gvs-filter-type-flat"
|
|
993
|
+
<label for="gvs-filter-type-flat">${fat(faImage)} ${this._t.gvs.picture_flat}</label>
|
|
990
994
|
<input type="checkbox" id="gvs-filter-type-360" name="360" checked />
|
|
991
|
-
<label for="gvs-filter-type-360">${this._t.gvs.picture_360}</label>
|
|
995
|
+
<label for="gvs-filter-type-360">${fat(faPanorama)} ${this._t.gvs.picture_360}</label>
|
|
992
996
|
</div>
|
|
993
997
|
</form>
|
|
994
998
|
`;
|
|
@@ -1046,17 +1050,25 @@ export default class Widgets {
|
|
|
1046
1050
|
input.id = "gvs-filter-user";
|
|
1047
1051
|
input.classList.add("gvs-input-group");
|
|
1048
1052
|
|
|
1049
|
-
|
|
1053
|
+
let userSearch;
|
|
1054
|
+
userSearch = createSearchBar(
|
|
1050
1055
|
"gvs-filter-search-user",
|
|
1051
1056
|
this._t.gvs.search_user,
|
|
1052
|
-
q =>
|
|
1053
|
-
.
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1057
|
+
q => {
|
|
1058
|
+
userSearch.classList.remove("gvs-filter-active");
|
|
1059
|
+
return this._viewer._api.searchUsers(q)
|
|
1060
|
+
.then(data => ((data || [])
|
|
1061
|
+
.map(f => ({
|
|
1062
|
+
title: f.label,
|
|
1063
|
+
data: f
|
|
1064
|
+
}))
|
|
1065
|
+
));
|
|
1066
|
+
},
|
|
1067
|
+
d => {
|
|
1068
|
+
if(d) { userSearch.classList.add("gvs-filter-active"); }
|
|
1069
|
+
else { userSearch.classList.remove("gvs-filter-active"); }
|
|
1070
|
+
return this._viewer.map.setVisibleUsers(d ? [d.data.id] : ["geovisio"]);
|
|
1071
|
+
},
|
|
1060
1072
|
this,
|
|
1061
1073
|
true
|
|
1062
1074
|
);
|
|
@@ -1064,6 +1076,27 @@ export default class Widgets {
|
|
|
1064
1076
|
form.appendChild(input);
|
|
1065
1077
|
}
|
|
1066
1078
|
|
|
1079
|
+
// Shortcuts
|
|
1080
|
+
pnlFilter.querySelectorAll(".gvs-input-shortcuts button").forEach(btn => {
|
|
1081
|
+
btn.addEventListener("click", () => {
|
|
1082
|
+
const elem = document.getElementById(btn.getAttribute("data-for"));
|
|
1083
|
+
const val = btn.getAttribute("data-value");
|
|
1084
|
+
if(elem && elem.value !== val) { elem.value = val; }
|
|
1085
|
+
else { elem.value = ""; }
|
|
1086
|
+
});
|
|
1087
|
+
});
|
|
1088
|
+
|
|
1089
|
+
// Fields change events (for active highlighting)
|
|
1090
|
+
const fMinDate = document.getElementById("gvs-filter-date-from");
|
|
1091
|
+
const fMaxDate = document.getElementById("gvs-filter-date-end");
|
|
1092
|
+
[fMinDate, fMaxDate].forEach(f => {
|
|
1093
|
+
f.addEventListener("change", () => {
|
|
1094
|
+
if(f.value) { f.classList.add("gvs-filter-active"); }
|
|
1095
|
+
else { f.classList.remove("gvs-filter-active"); }
|
|
1096
|
+
});
|
|
1097
|
+
});
|
|
1098
|
+
|
|
1099
|
+
// Form update events
|
|
1067
1100
|
this._formDelay = null;
|
|
1068
1101
|
|
|
1069
1102
|
const onFormChange = () => {
|
|
@@ -1136,6 +1169,7 @@ export default class Widgets {
|
|
|
1136
1169
|
* @private
|
|
1137
1170
|
*/
|
|
1138
1171
|
_listenMapFiltersChanges() {
|
|
1172
|
+
const btnFilter = document.getElementById("gvs-filter");
|
|
1139
1173
|
const fMinDate = document.getElementById("gvs-filter-date-from");
|
|
1140
1174
|
const fMaxDate = document.getElementById("gvs-filter-date-end");
|
|
1141
1175
|
const fTypeFlat = document.getElementById("gvs-filter-type-flat");
|
|
@@ -1149,8 +1183,16 @@ export default class Widgets {
|
|
|
1149
1183
|
|
|
1150
1184
|
// Update widget based on programmatic filter changes
|
|
1151
1185
|
this._viewer.addEventListener("filters-changed", e => {
|
|
1152
|
-
if(e.detail.minDate) {
|
|
1153
|
-
|
|
1186
|
+
if(e.detail.minDate) {
|
|
1187
|
+
fMinDate.value = e.detail.minDate;
|
|
1188
|
+
fMinDate.classList.add("gvs-filter-active");
|
|
1189
|
+
}
|
|
1190
|
+
else { fMinDate.classList.remove("gvs-filter-active"); }
|
|
1191
|
+
if(e.detail.maxDate) {
|
|
1192
|
+
fMaxDate.value = e.detail.maxDate;
|
|
1193
|
+
fMaxDate.classList.add("gvs-filter-active");
|
|
1194
|
+
}
|
|
1195
|
+
else { fMaxDate.classList.remove("gvs-filter-active"); }
|
|
1154
1196
|
if(e.detail.theme) { fMapTheme.value = e.detail.theme; }
|
|
1155
1197
|
if(e.detail.type) {
|
|
1156
1198
|
fType360.checked = ["", "equirectangular"].includes(e.detail.type);
|
|
@@ -1163,6 +1205,7 @@ export default class Widgets {
|
|
|
1163
1205
|
fScoreD.checked = e.detail.qualityscore.includes(2) && e.detail.qualityscore.length < 5;
|
|
1164
1206
|
fScoreE.checked = e.detail.qualityscore.includes(1) && e.detail.qualityscore.length < 5;
|
|
1165
1207
|
}
|
|
1208
|
+
btnFilter.setActive(Object.keys(e.detail).filter(d => d && d !== "theme").length > 0);
|
|
1166
1209
|
this._onMapThemeChange();
|
|
1167
1210
|
});
|
|
1168
1211
|
|