@panoramax/web-viewer 3.2.1 → 3.2.2-develop-69587b96
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 +21 -1
- package/build/index.css +2 -2
- package/build/index.css.map +1 -1
- package/build/index.js +3 -3
- package/build/index.js.map +1 -1
- package/package.json +2 -2
- package/src/Editor.js +2 -0
- package/src/Viewer.js +0 -1
- package/src/components/Loader.js +1 -0
- package/src/components/Map.js +8 -0
- package/src/components/Photo.js +1 -1
- package/src/translations/da.json +48 -8
- package/src/translations/de.json +9 -4
- package/src/translations/en.json +7 -1
- package/src/translations/fr.json +7 -1
- package/src/translations/it.json +6 -6
- package/src/translations/nl.json +18 -5
- package/src/translations/zh_Hant.json +7 -2
- package/src/utils/Utils.js +3 -2
- package/src/utils/Widgets.js +17 -0
- package/src/viewer/Widgets.css +31 -3
- package/src/viewer/Widgets.js +100 -31
- package/tests/__snapshots__/Editor.test.js.snap +2 -0
- package/tests/components/__snapshots__/Loader.test.js.snap +2 -2
- package/tests/components/__snapshots__/Photo.test.js.snap +2 -0
- package/tests/utils/__snapshots__/Widgets.test.js.snap +1 -1
package/src/viewer/Widgets.js
CHANGED
|
@@ -533,10 +533,12 @@ export default class Widgets {
|
|
|
533
533
|
|
|
534
534
|
// Picture quality level
|
|
535
535
|
if(this._viewer?.map?._hasQualityScore()) {
|
|
536
|
-
|
|
536
|
+
const qsHeader = createHeader(
|
|
537
537
|
"h4",
|
|
538
|
-
`${fat(faMedal)} ${this._t.gvs.metadata_quality} <
|
|
539
|
-
)
|
|
538
|
+
`${fat(faMedal)} ${this._t.gvs.metadata_quality} <button class="gvs-btn-link" title="${this._t.gvs.metadata_quality_help}">${fat(faInfoCircle)}</button>`
|
|
539
|
+
);
|
|
540
|
+
qsHeader.lastChild.addEventListener("click", () => this._showQualityScoreDoc());
|
|
541
|
+
popupContent.push(qsHeader);
|
|
540
542
|
const gpsGrade = getGrade(QUALITYSCORE_GPS_VALUES, picMeta?.properties?.["quality:horizontal_accuracy"]);
|
|
541
543
|
const resGrade = getGrade(
|
|
542
544
|
picMeta?.horizontalFov === 360 ? QUALITYSCORE_RES_360_VALUES : QUALITYSCORE_RES_FLAT_VALUES,
|
|
@@ -567,6 +569,30 @@ export default class Widgets {
|
|
|
567
569
|
this._viewer.dispatchEvent(new CustomEvent("focus-changed", { detail: { focus: "meta" } }));
|
|
568
570
|
}
|
|
569
571
|
|
|
572
|
+
_showQualityScoreDoc() {
|
|
573
|
+
const popupContent = [];
|
|
574
|
+
popupContent.push(createHeader("h4", `${fat(faMedal)} ${this._t.gvs.qualityscore_title}`));
|
|
575
|
+
|
|
576
|
+
const link = document.createElement("a");
|
|
577
|
+
link.setAttribute("href", "https://docs.panoramax.fr/pictures-metadata/quality_score/");
|
|
578
|
+
link.setAttribute("target", "_blank");
|
|
579
|
+
link.appendChild(document.createTextNode(this._t.gvs.qualityscore_doc_link));
|
|
580
|
+
|
|
581
|
+
[
|
|
582
|
+
document.createTextNode(this._t.gvs.qualityscore_doc_1),
|
|
583
|
+
document.createTextNode(this._t.gvs.qualityscore_doc_2),
|
|
584
|
+
showQualityScore(5),
|
|
585
|
+
document.createTextNode(this._t.gvs.qualityscore_doc_3),
|
|
586
|
+
link
|
|
587
|
+
].forEach(elem => {
|
|
588
|
+
const p = document.createElement("p");
|
|
589
|
+
p.appendChild(elem);
|
|
590
|
+
popupContent.push(p);
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
this._viewer.setPopup(true, popupContent);
|
|
594
|
+
}
|
|
595
|
+
|
|
570
596
|
_showReportForm() {
|
|
571
597
|
const picMeta = this._viewer.psv.getPictureMetadata();
|
|
572
598
|
if (!picMeta) { throw new Error("No picture currently selected"); }
|
|
@@ -705,6 +731,9 @@ export default class Widgets {
|
|
|
705
731
|
_initWidgetMiniActions() {
|
|
706
732
|
// Mini widget expand
|
|
707
733
|
const imgExpand = document.createElement("img");
|
|
734
|
+
imgExpand.alt = "";
|
|
735
|
+
imgExpand.height = 120;
|
|
736
|
+
imgExpand.draggable = false;
|
|
708
737
|
imgExpand.src = SwitchBig;
|
|
709
738
|
const lblExpand = document.createElement("span");
|
|
710
739
|
lblExpand.classList.add("gvs-mobile-hidden");
|
|
@@ -718,6 +747,9 @@ export default class Widgets {
|
|
|
718
747
|
|
|
719
748
|
// Mini widget hide
|
|
720
749
|
const imgReduce = document.createElement("img");
|
|
750
|
+
imgReduce.alt = this._t.gvs.minimize_short;
|
|
751
|
+
imgReduce.height = 120;
|
|
752
|
+
imgReduce.draggable = false;
|
|
721
753
|
imgReduce.src = SwitchMini;
|
|
722
754
|
const btnHide = createButton("gvs-mini-hide", imgReduce, this._t.gvs.minimize, ["gvs-only-mini", "gvs-print-hidden"]);
|
|
723
755
|
this._corners["mini-bottom-left"].appendChild(btnHide);
|
|
@@ -848,12 +880,12 @@ export default class Widgets {
|
|
|
848
880
|
<div id="gvs-map-bg" class="gvs-input-group">
|
|
849
881
|
<input type="radio" id="gvs-map-bg-streets" name="gvs-map-bg" value="streets" />
|
|
850
882
|
<label for="gvs-map-bg-streets">
|
|
851
|
-
<img id="gvs-map-bg-streets-img" />
|
|
883
|
+
<img id="gvs-map-bg-streets-img" alt="" />
|
|
852
884
|
${this._t.gvs.map_background_streets}
|
|
853
885
|
</label>
|
|
854
886
|
<input type="radio" id="gvs-map-bg-aerial" name="gvs-map-bg" value="aerial" />
|
|
855
887
|
<label for="gvs-map-bg-aerial">
|
|
856
|
-
<img id="gvs-map-bg-aerial-img" />
|
|
888
|
+
<img id="gvs-map-bg-aerial-img" alt="" />
|
|
857
889
|
${this._t.gvs.map_background_aerial}
|
|
858
890
|
</label>
|
|
859
891
|
</div>`;
|
|
@@ -905,9 +937,12 @@ export default class Widgets {
|
|
|
905
937
|
</div>
|
|
906
938
|
<div id="gvs-map-theme-legend-score" class="gvs-map-theme-legend gvs-hidden">
|
|
907
939
|
${QUALITYSCORE_VALUES.map(pv => "<span class=\"gvs-qualityscore\" style=\"background-color: "+pv.color+";\">"+pv.label+"</span>").join("")}
|
|
940
|
+
<button id="gvs-map-theme-quality-help" class="gvs-btn-link" title="${this._t.gvs.metadata_quality_help}">${fat(faInfoCircle, {transform: {x: 6, size: 24}})}</button>
|
|
908
941
|
</div>
|
|
909
942
|
</div>`;
|
|
910
943
|
|
|
944
|
+
pnlLayers.querySelector("#gvs-map-theme-quality-help").addEventListener("click", () => this._showQualityScoreDoc());
|
|
945
|
+
|
|
911
946
|
// Map theme events
|
|
912
947
|
const fMapTheme = pnlLayers.querySelector("#gvs-map-theme");
|
|
913
948
|
const onChange = () => {
|
|
@@ -955,7 +990,9 @@ export default class Widgets {
|
|
|
955
990
|
*/
|
|
956
991
|
_onMapThemeChange() {
|
|
957
992
|
const fMapTheme = document.getElementById("gvs-map-theme");
|
|
993
|
+
const layerBtn = document.getElementById("gvs-map-layers");
|
|
958
994
|
const t = fMapTheme.value;
|
|
995
|
+
layerBtn.setActive(t !== "default");
|
|
959
996
|
for(let d of document.getElementsByClassName("gvs-map-theme-legend")) {
|
|
960
997
|
if(d.id == "gvs-map-theme-legend-"+t) {
|
|
961
998
|
d.classList.remove("gvs-hidden");
|
|
@@ -972,27 +1009,31 @@ export default class Widgets {
|
|
|
972
1009
|
* @private
|
|
973
1010
|
*/
|
|
974
1011
|
_initWidgetFilters(hasUserSearch, hasQualityScore) {
|
|
975
|
-
const btnFilter = createExpandableButton("gvs-filter", faSliders, this._t.gvs.filters, this);
|
|
1012
|
+
const btnFilter = createExpandableButton("gvs-filter", faSliders, this._t.gvs.filters, this, ["gvs-filter-unset-btn"]);
|
|
976
1013
|
const pnlFilter = createPanel(this, btnFilter, []);
|
|
977
1014
|
pnlFilter.innerHTML = `
|
|
978
1015
|
<form id="gvs-filter-form">
|
|
979
|
-
<div
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
<
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
<
|
|
987
|
-
|
|
988
|
-
|
|
1016
|
+
<div class="gvs-filter-block">
|
|
1017
|
+
<div class="gvs-filter-zoomin">${this._t.gvs.filter_zoom_in}</div>
|
|
1018
|
+
<h4>${fat(faCalendar)} ${this._t.gvs.filter_date}</h4>
|
|
1019
|
+
<div class="gvs-input-shortcuts">
|
|
1020
|
+
<button data-for="gvs-filter-date-from" data-value="${new Date(new Date().setMonth(new Date().getMonth() - 1)).toISOString().split("T")[0]}">${this._t.gvs.filter_date_1month}</button>
|
|
1021
|
+
<button data-for="gvs-filter-date-from" data-value="${new Date(new Date().setFullYear(new Date().getFullYear() - 1)).toISOString().split("T")[0]}">${this._t.gvs.filter_date_1year}</button>
|
|
1022
|
+
</div>
|
|
1023
|
+
<div class="gvs-input-group">
|
|
1024
|
+
<input type="date" id="gvs-filter-date-from" />
|
|
1025
|
+
${fat(faArrowRight)}
|
|
1026
|
+
<input type="date" id="gvs-filter-date-end" />
|
|
1027
|
+
</div>
|
|
989
1028
|
</div>
|
|
990
|
-
<
|
|
991
|
-
|
|
992
|
-
<
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1029
|
+
<div class="gvs-filter-block">
|
|
1030
|
+
<h4>${fat(faImage)} ${this._t.gvs.filter_picture}</h4>
|
|
1031
|
+
<div class="gvs-input-group gvs-checkbox-btns" style="justify-content: center;">
|
|
1032
|
+
<input type="checkbox" id="gvs-filter-type-flat" name="flat" />
|
|
1033
|
+
<label for="gvs-filter-type-flat">${fat(faImage)} ${this._t.gvs.picture_flat}</label>
|
|
1034
|
+
<input type="checkbox" id="gvs-filter-type-360" name="360" />
|
|
1035
|
+
<label for="gvs-filter-type-360">${fat(faPanorama)} ${this._t.gvs.picture_360}</label>
|
|
1036
|
+
</div>
|
|
996
1037
|
</div>
|
|
997
1038
|
</form>
|
|
998
1039
|
`;
|
|
@@ -1004,6 +1045,14 @@ export default class Widgets {
|
|
|
1004
1045
|
[btnFilter, pnlFilter],
|
|
1005
1046
|
["gvs-group-large", "gvs-group-btnpanel", "gvs-only-map", "gvs-print-hidden"]
|
|
1006
1047
|
);
|
|
1048
|
+
|
|
1049
|
+
const resetBtn = btnFilter.querySelector(".gvs-filter-unset-btn");
|
|
1050
|
+
if(resetBtn) {
|
|
1051
|
+
resetBtn.addEventListener("click", e => {
|
|
1052
|
+
e.stopPropagation();
|
|
1053
|
+
form.reset();
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1007
1056
|
|
|
1008
1057
|
if(this._viewer.isWidthSmall()) {
|
|
1009
1058
|
pnlFilter.style.width = `${this._viewer.container.offsetWidth - 70}px`;
|
|
@@ -1011,10 +1060,20 @@ export default class Widgets {
|
|
|
1011
1060
|
|
|
1012
1061
|
// Create qualityscore filter
|
|
1013
1062
|
if(hasQualityScore) {
|
|
1063
|
+
const block = document.createElement("div");
|
|
1064
|
+
block.classList.add("gvs-filter-block");
|
|
1065
|
+
form.appendChild(block);
|
|
1066
|
+
|
|
1067
|
+
const zoomLbl = document.createElement("div");
|
|
1068
|
+
zoomLbl.classList.add("gvs-filter-zoomin");
|
|
1069
|
+
zoomLbl.appendChild(document.createTextNode(this._t.gvs.filter_zoom_in));
|
|
1070
|
+
block.appendChild(zoomLbl);
|
|
1071
|
+
|
|
1014
1072
|
const title = document.createElement("h4");
|
|
1015
|
-
title.innerHTML = `${fat(faMedal)} ${this._t.gvs.filter_qualityscore}
|
|
1073
|
+
title.innerHTML = `${fat(faMedal)} ${this._t.gvs.filter_qualityscore} <button class="gvs-btn-link" title="${this._t.gvs.metadata_quality_help}">${fat(faInfoCircle)}</button>`;
|
|
1016
1074
|
title.style.marginBottom = "3px";
|
|
1017
|
-
|
|
1075
|
+
title.lastChild.addEventListener("click", () => this._showQualityScoreDoc());
|
|
1076
|
+
block.appendChild(title);
|
|
1018
1077
|
|
|
1019
1078
|
const div = document.createElement("div");
|
|
1020
1079
|
div.id = "gvs-filter-qualityscore";
|
|
@@ -1037,14 +1096,18 @@ export default class Widgets {
|
|
|
1037
1096
|
div.appendChild(label);
|
|
1038
1097
|
});
|
|
1039
1098
|
|
|
1040
|
-
|
|
1099
|
+
block.appendChild(div);
|
|
1041
1100
|
}
|
|
1042
1101
|
|
|
1043
1102
|
// Create search bar for users
|
|
1044
1103
|
if(hasUserSearch) {
|
|
1104
|
+
const block = document.createElement("div");
|
|
1105
|
+
block.classList.add("gvs-filter-block");
|
|
1106
|
+
form.appendChild(block);
|
|
1107
|
+
|
|
1045
1108
|
const title = document.createElement("h4");
|
|
1046
1109
|
title.innerHTML = `${fat(faUser)} ${this._t.gvs.filter_user}`;
|
|
1047
|
-
|
|
1110
|
+
block.appendChild(title);
|
|
1048
1111
|
|
|
1049
1112
|
// Shortcut for my own pictures
|
|
1050
1113
|
const userAccount = getUserAccount();
|
|
@@ -1055,7 +1118,7 @@ export default class Widgets {
|
|
|
1055
1118
|
mypics = document.createElement("button");
|
|
1056
1119
|
mypics.appendChild(document.createTextNode(this._t.gvs.filter_user_mypics));
|
|
1057
1120
|
shortcuts.appendChild(mypics);
|
|
1058
|
-
|
|
1121
|
+
block.appendChild(shortcuts);
|
|
1059
1122
|
}
|
|
1060
1123
|
|
|
1061
1124
|
const input = document.createElement("div");
|
|
@@ -1084,8 +1147,12 @@ export default class Widgets {
|
|
|
1084
1147
|
this,
|
|
1085
1148
|
true
|
|
1086
1149
|
);
|
|
1150
|
+
block.addEventListener("reset", () => {
|
|
1151
|
+
userSearch.classList.remove("gvs-filter-active");
|
|
1152
|
+
userSearch.resetSearch();
|
|
1153
|
+
});
|
|
1087
1154
|
input.appendChild(userSearch);
|
|
1088
|
-
|
|
1155
|
+
block.appendChild(input);
|
|
1089
1156
|
|
|
1090
1157
|
// Trigger "my pictures" shortcut action
|
|
1091
1158
|
if(userAccount) {
|
|
@@ -1250,10 +1317,12 @@ export default class Widgets {
|
|
|
1250
1317
|
});
|
|
1251
1318
|
|
|
1252
1319
|
// Show/hide zoom in warning when map zoom changes
|
|
1253
|
-
const
|
|
1320
|
+
const lblsZoomIn = document.getElementsByClassName("gvs-filter-zoomin");
|
|
1254
1321
|
const changeLblZoomInDisplay = () => {
|
|
1255
|
-
|
|
1256
|
-
|
|
1322
|
+
for(let lblZoomIn of lblsZoomIn) {
|
|
1323
|
+
if(this._viewer.map.getZoom() < 7) { lblZoomIn.style.display = null; }
|
|
1324
|
+
else { lblZoomIn.style.display = "none"; }
|
|
1325
|
+
}
|
|
1257
1326
|
};
|
|
1258
1327
|
changeLblZoomInDisplay();
|
|
1259
1328
|
this._viewer.map.on("zoomend", changeLblZoomInDisplay);
|
|
@@ -16,6 +16,7 @@ exports[`_addMapBackgroundWidget works 1`] = `
|
|
|
16
16
|
for="gvs-map-bg-streets"
|
|
17
17
|
>
|
|
18
18
|
<img
|
|
19
|
+
alt=""
|
|
19
20
|
src="bg_streets.jpg"
|
|
20
21
|
/>
|
|
21
22
|
Streets
|
|
@@ -30,6 +31,7 @@ exports[`_addMapBackgroundWidget works 1`] = `
|
|
|
30
31
|
for="gvs-map-bg-aerial"
|
|
31
32
|
>
|
|
32
33
|
<img
|
|
34
|
+
alt=""
|
|
33
35
|
src="bg_aerial.jpg"
|
|
34
36
|
/>
|
|
35
37
|
Aerial
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
-
exports[`constructor works 1`] = `"<img src=\\"marker.svg\\" title=\\"undefined\\" class=\\"gvs-loader-img\\"><div><span>Loading...</span></div>"`;
|
|
3
|
+
exports[`constructor works 1`] = `"<img src=\\"marker.svg\\" alt=\\"\\" title=\\"undefined\\" class=\\"gvs-loader-img\\"><div><span>Loading...</span></div>"`;
|
|
4
4
|
|
|
5
5
|
exports[`dismiss works when no error set 1`] = `
|
|
6
6
|
Array [
|
|
@@ -12,4 +12,4 @@ Array [
|
|
|
12
12
|
]
|
|
13
13
|
`;
|
|
14
14
|
|
|
15
|
-
exports[`dismiss works with error set 1`] = `"<img src=\\"logo_dead.svg\\" title=\\"undefined\\" class=\\"gvs-loader-img\\" style=\\"width: 200px; animation: unset;\\"><div>undefined<br>Oops it's broken<br><small>undefined</small></div>"`;
|
|
15
|
+
exports[`dismiss works with error set 1`] = `"<img src=\\"logo_dead.svg\\" alt=\\"\\" title=\\"undefined\\" class=\\"gvs-loader-img\\" style=\\"width: 200px; animation: unset;\\"><div>undefined<br>Oops it's broken<br><small>undefined</small></div>"`;
|
|
@@ -19,6 +19,7 @@ Object {
|
|
|
19
19
|
Object {
|
|
20
20
|
"arrowStyle": Object {
|
|
21
21
|
"element": <img
|
|
22
|
+
alt=""
|
|
22
23
|
src="arrow_triangle.svg"
|
|
23
24
|
/>,
|
|
24
25
|
"size": Object {
|
|
@@ -38,6 +39,7 @@ Object {
|
|
|
38
39
|
Object {
|
|
39
40
|
"arrowStyle": Object {
|
|
40
41
|
"element": <img
|
|
42
|
+
alt=""
|
|
41
43
|
src="arrow_triangle.svg"
|
|
42
44
|
/>,
|
|
43
45
|
"size": Object {
|
|
@@ -21,7 +21,7 @@ Array [
|
|
|
21
21
|
]
|
|
22
22
|
`;
|
|
23
23
|
|
|
24
|
-
exports[`createSearchBar works 1`] = `"<input type=\\"text\\" placeholder=\\"no res\\" id=\\"mysrch-input\\"><span class=\\"gvs-search-bar-icon\\"><svg aria-hidden=\\"true\\" focusable=\\"false\\" data-prefix=\\"fas\\" data-icon=\\"magnifying-glass\\" class=\\"svg-inline--fa fa-magnifying-glass\\" role=\\"img\\" xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 512 512\\"><path fill=\\"currentColor\\" d=\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\\"></path></svg></span><div id=\\"mysrch-panel\\" class=\\"gvs-panel gvs-widget-bg gvs-hidden gvs-search-bar-results\\"></div>"`;
|
|
24
|
+
exports[`createSearchBar works 1`] = `"<input type=\\"text\\" placeholder=\\"no res\\" id=\\"mysrch-input\\" autocomplete=\\"off\\"><span class=\\"gvs-search-bar-icon\\"><svg aria-hidden=\\"true\\" focusable=\\"false\\" data-prefix=\\"fas\\" data-icon=\\"magnifying-glass\\" class=\\"svg-inline--fa fa-magnifying-glass\\" role=\\"img\\" xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 512 512\\"><path fill=\\"currentColor\\" d=\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\\"></path></svg></span><div id=\\"mysrch-panel\\" class=\\"gvs-panel gvs-widget-bg gvs-hidden gvs-search-bar-results\\"></div>"`;
|
|
25
25
|
|
|
26
26
|
exports[`fa works 1`] = `
|
|
27
27
|
<svg
|