@panoramax/web-viewer 5.0.0-develop-d26305dd → 5.0.0-develop-be5ba1a7
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/build/cjs/index.js +1 -1
- package/build/cjs/index_photoviewer.js +1 -1
- package/build/esm/components/core/Basic.js +1 -1
- package/build/esm/translations/el.json +92 -1
- package/package.json +1 -1
- package/build/bundle.cjs +0 -3399
- package/build/bundle.cjs.map +0 -1
- package/build/bundle_photoviewer.cjs +0 -2510
- package/build/bundle_photoviewer.cjs.map +0 -1
- package/build/components/core/Basic.css +0 -56
- package/build/components/core/Basic.js +0 -378
- package/build/components/core/CoverageMap.css +0 -10
- package/build/components/core/CoverageMap.js +0 -169
- package/build/components/core/Editor.css +0 -33
- package/build/components/core/Editor.js +0 -398
- package/build/components/core/PhotoViewer.css +0 -70
- package/build/components/core/PhotoViewer.js +0 -650
- package/build/components/core/Viewer.css +0 -130
- package/build/components/core/Viewer.js +0 -711
- package/build/components/core/index.js +0 -10
- package/build/components/index.js +0 -11
- package/build/components/index_photoviewer.js +0 -6
- package/build/components/layout/BottomDrawer.js +0 -258
- package/build/components/layout/CorneredGrid.js +0 -143
- package/build/components/layout/Mini.js +0 -121
- package/build/components/layout/Tabs.js +0 -140
- package/build/components/layout/index.js +0 -9
- package/build/components/menus/LocationPrecisionDoc.js +0 -42
- package/build/components/menus/MapBackground.js +0 -110
- package/build/components/menus/MapFilters.js +0 -567
- package/build/components/menus/MapLayers.js +0 -238
- package/build/components/menus/MapLegend.js +0 -68
- package/build/components/menus/MiniPictureLegend.js +0 -73
- package/build/components/menus/PictureLegend.js +0 -379
- package/build/components/menus/PictureMetadata.js +0 -380
- package/build/components/menus/PlayerOptions.js +0 -93
- package/build/components/menus/QualityScoreDoc.js +0 -42
- package/build/components/menus/ReportForm.js +0 -132
- package/build/components/menus/SemanticsDoc.js +0 -38
- package/build/components/menus/SemanticsDownload.js +0 -33
- package/build/components/menus/SemanticsFilters.js +0 -153
- package/build/components/menus/SemanticsList.js +0 -413
- package/build/components/menus/SemanticsMetadata.js +0 -368
- package/build/components/menus/Share.js +0 -105
- package/build/components/menus/index.js +0 -22
- package/build/components/menus/index_photoviewer.js +0 -11
- package/build/components/styles.js +0 -557
- package/build/components/ui/AnnotationsSwitch.js +0 -159
- package/build/components/ui/Button.js +0 -77
- package/build/components/ui/ButtonGroup.css +0 -59
- package/build/components/ui/ButtonGroup.js +0 -69
- package/build/components/ui/CopyButton.js +0 -110
- package/build/components/ui/Grade.js +0 -54
- package/build/components/ui/GradeFilter.js +0 -122
- package/build/components/ui/IconSwitch.js +0 -193
- package/build/components/ui/LinkButton.js +0 -67
- package/build/components/ui/ListGroup.js +0 -66
- package/build/components/ui/ListItem.js +0 -90
- package/build/components/ui/Loader.js +0 -203
- package/build/components/ui/Map.css +0 -63
- package/build/components/ui/Map.js +0 -853
- package/build/components/ui/MapMore.js +0 -175
- package/build/components/ui/Photo.css +0 -50
- package/build/components/ui/Photo.js +0 -1502
- package/build/components/ui/Popup.js +0 -145
- package/build/components/ui/ProgressBar.js +0 -104
- package/build/components/ui/QualityScore.js +0 -147
- package/build/components/ui/SearchBar.js +0 -374
- package/build/components/ui/SemanticsEditor.js +0 -191
- package/build/components/ui/SemanticsTable.js +0 -88
- package/build/components/ui/Switch.js +0 -139
- package/build/components/ui/TogglableGroup.js +0 -157
- package/build/components/ui/index.js +0 -29
- package/build/components/ui/index_photoviewer.js +0 -21
- package/build/components/ui/widgets/CopyCoordinates.js +0 -75
- package/build/components/ui/widgets/GeoSearch.css +0 -21
- package/build/components/ui/widgets/GeoSearch.js +0 -150
- package/build/components/ui/widgets/Legend.js +0 -190
- package/build/components/ui/widgets/LevelSelect.css +0 -51
- package/build/components/ui/widgets/LevelSelect.js +0 -143
- package/build/components/ui/widgets/MapFiltersButton.js +0 -114
- package/build/components/ui/widgets/MapLayersButton.js +0 -79
- package/build/components/ui/widgets/OSMEditors.js +0 -155
- package/build/components/ui/widgets/PictureLegendActions.js +0 -99
- package/build/components/ui/widgets/Player.css +0 -7
- package/build/components/ui/widgets/Player.js +0 -154
- package/build/components/ui/widgets/SemanticsFiltersButton.js +0 -65
- package/build/components/ui/widgets/Zoom.js +0 -84
- package/build/components/ui/widgets/index.js +0 -16
- package/build/components/ui/widgets/index_photoviewer.js +0 -7
- package/build/img/arrow_360.svg +0 -14
- package/build/img/arrow_flat.svg +0 -11
- package/build/img/arrow_triangle.svg +0 -9
- package/build/img/arrow_turn.svg +0 -8
- package/build/img/bg_aerial.jpg +0 -0
- package/build/img/bg_streets.jpg +0 -0
- package/build/img/loader_base.jpg +0 -0
- package/build/img/logo_dead.svg +0 -91
- package/build/img/marker.svg +0 -17
- package/build/img/marker_blue.svg +0 -20
- package/build/img/osm.svg +0 -49
- package/build/img/panoramax.svg +0 -13
- package/build/img/switch_big.svg +0 -54
- package/build/img/switch_mini.svg +0 -48
- package/build/img/wd.svg +0 -1
- package/build/index_photoviewer.js +0 -4
- package/build/package.json +0 -148
- package/build/servers.js +0 -14
- package/build/translations/ar.json +0 -1
- package/build/translations/be.json +0 -257
- package/build/translations/br.json +0 -81
- package/build/translations/cy.json +0 -117
- package/build/translations/da.json +0 -300
- package/build/translations/de.json +0 -309
- package/build/translations/en.json +0 -294
- package/build/translations/eo.json +0 -235
- package/build/translations/es.json +0 -292
- package/build/translations/fi.json +0 -1
- package/build/translations/fr.json +0 -294
- package/build/translations/hr.json +0 -294
- package/build/translations/hu.json +0 -294
- package/build/translations/it.json +0 -306
- package/build/translations/ja.json +0 -182
- package/build/translations/ko.json +0 -1
- package/build/translations/nl.json +0 -305
- package/build/translations/nn.json +0 -1
- package/build/translations/pl.json +0 -169
- package/build/translations/pt.json +0 -296
- package/build/translations/pt_BR.json +0 -304
- package/build/translations/sv.json +0 -182
- package/build/translations/ti.json +0 -9
- package/build/translations/tr.json +0 -297
- package/build/translations/uk.json +0 -268
- package/build/translations/zh_Hant.json +0 -309
- package/build/utils/API.js +0 -928
- package/build/utils/InitParameters.js +0 -521
- package/build/utils/MapStyleComposer.js +0 -889
- package/build/utils/PanoraMapProtocol.js +0 -49
- package/build/utils/PhotoAdapter.js +0 -49
- package/build/utils/PresetsManager.js +0 -148
- package/build/utils/SemanticsMapProtocol.js +0 -144
- package/build/utils/URLHandler.js +0 -426
- package/build/utils/geocoder.js +0 -203
- package/build/utils/i18n.js +0 -128
- package/build/utils/index.js +0 -17
- package/build/utils/index_photoviewer.js +0 -14
- package/build/utils/indoor.js +0 -200
- package/build/utils/map.js +0 -788
- package/build/utils/picture.js +0 -507
- package/build/utils/semantics.js +0 -321
- package/build/utils/services.js +0 -148
- package/build/utils/utils.js +0 -433
- package/build/utils/widgets.js +0 -110
package/build/utils/semantics.js
DELETED
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
import { html } from "lit";
|
|
2
|
-
import { OSMURL, OSMWikiURL, PanoramaxPresetsURL, WikidataAPIURL, WikidataURL } from "./services.js";
|
|
3
|
-
import { getBestLabel } from "./i18n.js";
|
|
4
|
-
|
|
5
|
-
const logoOsm = await fetch(new URL("../img/osm.svg", import.meta.url).href).then(res => res.text());
|
|
6
|
-
const logoWd = await fetch(new URL("../img/wd.svg", import.meta.url).href).then(res => res.text());
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// List of [ Overlay ID, API filter, Maplibre Style, Sprites ]
|
|
10
|
-
export const SEMANTICS_OVERLAYS = [
|
|
11
|
-
[
|
|
12
|
-
"features",
|
|
13
|
-
"\"semantics\" IS NOT NULL",
|
|
14
|
-
{
|
|
15
|
-
metadata: { "name": "All features" },
|
|
16
|
-
type: "circle",
|
|
17
|
-
layout: {
|
|
18
|
-
visibility: "none",
|
|
19
|
-
},
|
|
20
|
-
paint: {
|
|
21
|
-
"circle-radius": 4,
|
|
22
|
-
"circle-color": "#00897B"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
|
-
[
|
|
27
|
-
"tfsigns",
|
|
28
|
-
"\"semantics.osm|traffic_sign\" IS NOT NULL",
|
|
29
|
-
{
|
|
30
|
-
metadata: { "name": "Traffic signs" },
|
|
31
|
-
type: "symbol",
|
|
32
|
-
layout: {
|
|
33
|
-
visibility: "none",
|
|
34
|
-
"icon-overlap": "never",
|
|
35
|
-
"icon-image": ["case",
|
|
36
|
-
// Many signs
|
|
37
|
-
["in", ";", ["get", "osm|traffic_sign"]],
|
|
38
|
-
"pnx-tfsigns-fr:0_many",
|
|
39
|
-
// Single FR sign
|
|
40
|
-
["==", ["slice", ["get", "osm|traffic_sign"], 0, 2], "FR"],
|
|
41
|
-
["concat", "pnx-tfsigns-fr:", ["slice", ["get", "osm|traffic_sign"], 3]],
|
|
42
|
-
// Generic value
|
|
43
|
-
["==", ["get", "osm|traffic_sign"], "yes"],
|
|
44
|
-
"pnx-tfsigns-fr:0_unknown",
|
|
45
|
-
// Fallbacks
|
|
46
|
-
["has", "osm|traffic_sign"],
|
|
47
|
-
"pnx-tfsigns-fr:0_unknown",
|
|
48
|
-
""
|
|
49
|
-
]
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
{ "pnx-tfsigns-fr": `${PanoramaxPresetsURL()}/sprites/trafficsigns_fr` }
|
|
53
|
-
]
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
// General helpers
|
|
57
|
-
function valToValLink(val, url, title) {
|
|
58
|
-
return html`<a href=${url} target="_blank" title=${title}>${val}</a>`;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// OSM helpers
|
|
62
|
-
const OSM_MAIN_KEYS = [
|
|
63
|
-
"highway", "building", "amenity", "landuse", "natural", "waterway", "leisure",
|
|
64
|
-
"shop", "railway", "tourism", "barrier", "boundary", "place", "power"
|
|
65
|
-
];
|
|
66
|
-
|
|
67
|
-
// Wikidata helpers
|
|
68
|
-
const WD_LABELS_CACHE = {};
|
|
69
|
-
function getWDLabel(entity, _t) {
|
|
70
|
-
if(WD_LABELS_CACHE[entity]) {
|
|
71
|
-
return Promise.resolve(WD_LABELS_CACHE[entity]);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
const url = entity.startsWith("P") ? `properties/${entity}` : `items/${entity}/labels`;
|
|
75
|
-
return fetch(`${WikidataAPIURL()}/entities/${url}`)
|
|
76
|
-
.then(res => res.json())
|
|
77
|
-
.then(res => {
|
|
78
|
-
WD_LABELS_CACHE[entity] = getBestLabel(res.labels || res, _t.PREF_LANG);
|
|
79
|
-
return WD_LABELS_CACHE[entity];
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Supported prefixes for nice semantic display
|
|
85
|
-
const KNOWN_PREFIXES = {
|
|
86
|
-
"": {
|
|
87
|
-
title: "Panoramax",
|
|
88
|
-
value_transform: (tag, _t) => {
|
|
89
|
-
if(tag.key === "osm") {
|
|
90
|
-
return valToValLink(
|
|
91
|
-
tag.value,
|
|
92
|
-
`${OSMURL()}/${tag.value}`,
|
|
93
|
-
_t.pnx.semantics_value_show_osm
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
else { return tag.value; }
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
|
|
100
|
-
osm: {
|
|
101
|
-
title: "OpenStreetMap",
|
|
102
|
-
logo: logoOsm,
|
|
103
|
-
key_transform: (tag, _t) => valToValLink(
|
|
104
|
-
tag.key,
|
|
105
|
-
`${OSMWikiURL()}/Key:${tag.key}`,
|
|
106
|
-
_t.pnx.semantics_key_doc
|
|
107
|
-
),
|
|
108
|
-
value_transform: (tag, _t) => {
|
|
109
|
-
if(OSM_MAIN_KEYS.includes(tag.key)) {
|
|
110
|
-
return valToValLink(
|
|
111
|
-
tag.value,
|
|
112
|
-
`${OSMWikiURL()}/Tag:${tag.key}=${tag.value}`,
|
|
113
|
-
_t.pnx.semantics_value_doc
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
else { return tag.value; }
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
wd: {
|
|
121
|
-
title: "Wikidata",
|
|
122
|
-
logo: logoWd,
|
|
123
|
-
key_transform: (tag, _t) => {
|
|
124
|
-
const url = `${WikidataURL()}/Property:${tag.key}`;
|
|
125
|
-
const keylabel = _t.pnx.semantics_wikidata_properties[tag.key];
|
|
126
|
-
|
|
127
|
-
if(keylabel) {
|
|
128
|
-
return valToValLink(
|
|
129
|
-
html`${_t.pnx.semantics_wikidata_properties[tag.key]} <small>(${tag.key})</small>`,
|
|
130
|
-
url,
|
|
131
|
-
_t.pnx.semantics_key_doc
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
const label = document.createElement("span");
|
|
136
|
-
label.innerText = tag.key;
|
|
137
|
-
|
|
138
|
-
// Try to fetch label from API
|
|
139
|
-
getWDLabel(tag.key, _t).then(wdl => {
|
|
140
|
-
label.innerHTML = `${wdl} <small>(${tag.key})</small>`;
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
return valToValLink(label, url, _t.pnx.semantics_key_doc);
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
value_transform: (tag, _t) => {
|
|
147
|
-
const label = document.createElement("span");
|
|
148
|
-
label.innerText = tag.value;
|
|
149
|
-
|
|
150
|
-
// Try to fetch label from API
|
|
151
|
-
getWDLabel(tag.value, _t).then(wdl => {
|
|
152
|
-
label.innerHTML = `${wdl} <small>(${tag.value})</small>`;
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
return valToValLink(
|
|
156
|
-
label,
|
|
157
|
-
`${WikidataURL()}/${tag.value}`,
|
|
158
|
-
_t.pnx.semantics_value_doc
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
exif: { title: "EXIF" },
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Transform a prefix|key=value into parsed object.
|
|
169
|
-
* Does not handle qualifiers tags.
|
|
170
|
-
* @private
|
|
171
|
-
*/
|
|
172
|
-
export function decodeBasicTag(tag) {
|
|
173
|
-
const firstEqual = (tag || "").lastIndexOf("=");
|
|
174
|
-
if(firstEqual < 0) { return null; }
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const key = decodeKey(tag.substring(0, firstEqual));
|
|
178
|
-
if(key.subkey.indexOf("=") >= 0) { return null; }
|
|
179
|
-
|
|
180
|
-
return { key, value: tag.substring(firstEqual+1) };
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
/** @private */
|
|
185
|
-
export function decodeKey(key = "") {
|
|
186
|
-
const regex = /^(?:([a-z_]+)\|)?([^[]+)(?:\[(.*)\])?$/;
|
|
187
|
-
const match = key.match(regex);
|
|
188
|
-
|
|
189
|
-
if (!match) {
|
|
190
|
-
return { prefix: "", subkey: key, qualifies: null };
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const [, prefix, subkey, qualifies ] = match;
|
|
194
|
-
return {
|
|
195
|
-
key: key,
|
|
196
|
-
prefix: prefix || "",
|
|
197
|
-
subkey,
|
|
198
|
-
qualifies: decodeBasicTag(qualifies),
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Transforms a string containing a list of tags in a ready-to-use parsed object list.
|
|
205
|
-
* @param {string} str The string to read (each tag separated by newline `\n`)
|
|
206
|
-
* @returns {object[]} List of API-formatted tags
|
|
207
|
-
*/
|
|
208
|
-
export function parseSemanticsString(str) {
|
|
209
|
-
const parsedTags = str.split("\n").map(t => {
|
|
210
|
-
const parts = decodeBasicTag(t);
|
|
211
|
-
if(
|
|
212
|
-
parts
|
|
213
|
-
&& parts.key.key.length <= 256
|
|
214
|
-
&& parts.value.length <= 2048
|
|
215
|
-
) {
|
|
216
|
-
return { key: parts.key.key, value: parts.value };
|
|
217
|
-
} else { return null; }
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
if(parsedTags.findIndex(v => !v) >= 0) {
|
|
221
|
-
if(str.trim().length === 0 && parsedTags.length === 1) { return []; }
|
|
222
|
-
throw new Error("Invalid tags");
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return parsedTags;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Transforms a semantics array into a key=value string.
|
|
231
|
-
* @param {object[]} semantics List of API-formatted tags
|
|
232
|
-
* @returns {string} The readable string (each tag separated by newline `\n`)
|
|
233
|
-
*/
|
|
234
|
-
export function semanticsToString(semantics) {
|
|
235
|
-
return (semantics || []).map(s => `${s.key}=${s.value}`).join("\n");
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Computes the difference between two set of API tags.
|
|
241
|
-
* API expects a delta between old & new, so result contains only
|
|
242
|
-
* added and deleted tags.
|
|
243
|
-
* @param {object[]} prev The previous set of tags
|
|
244
|
-
* @param {object[]} next The new set of tags
|
|
245
|
-
* @returns {object[]} The new set of tags, with only added/deleted tags
|
|
246
|
-
*/
|
|
247
|
-
export function computeDiffTags(prev = [], next = []) {
|
|
248
|
-
const res = [];
|
|
249
|
-
|
|
250
|
-
// Look for new values
|
|
251
|
-
(next || [])
|
|
252
|
-
// eslint-disable-next-line eqeqeq
|
|
253
|
-
.filter(nt => prev.find(pt => pt.key == nt.key && pt.value == nt.value) === undefined)
|
|
254
|
-
.forEach(t => res.push({key: t.key, value: t.value, action: "add"}));
|
|
255
|
-
|
|
256
|
-
// Look for prev values missing in next
|
|
257
|
-
(prev || [])
|
|
258
|
-
// eslint-disable-next-line eqeqeq
|
|
259
|
-
.filter(pt => next.find(nt => pt.key == nt.key && pt.value == nt.value) === undefined)
|
|
260
|
-
.forEach(t => res.push({key: t.key, value: t.value, action: "delete"}));
|
|
261
|
-
|
|
262
|
-
return res;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Transforms raw API semantics properties into ready-to-display container.
|
|
268
|
-
* @param {object[]} tags The API semantics tags
|
|
269
|
-
* @returns {object[]} A list of groups (by prefix), with {title, tags} information.
|
|
270
|
-
*/
|
|
271
|
-
export function groupByPrefix(tags) {
|
|
272
|
-
// Create raw groups by prefix
|
|
273
|
-
const byPrefix = {};
|
|
274
|
-
const qualifiers = [];
|
|
275
|
-
|
|
276
|
-
// First pass: analyze tags, separate by prefix
|
|
277
|
-
tags.forEach(tag => {
|
|
278
|
-
if(tag.action === "delete") { return; }
|
|
279
|
-
|
|
280
|
-
const decodedKey = decodeKey(tag.key);
|
|
281
|
-
|
|
282
|
-
// Put apart qualifiers, to later insert on tags themselves
|
|
283
|
-
if(decodedKey.qualifies) {
|
|
284
|
-
qualifiers.push(Object.assign({}, tag, decodedKey));
|
|
285
|
-
}
|
|
286
|
-
// Process classic tag
|
|
287
|
-
else {
|
|
288
|
-
if (!byPrefix[decodedKey.prefix]) { byPrefix[decodedKey.prefix] = []; }
|
|
289
|
-
|
|
290
|
-
byPrefix[decodedKey.prefix].push(decodedKey.prefix.length > 0 ? {
|
|
291
|
-
key: decodedKey.subkey,
|
|
292
|
-
value: tag.value
|
|
293
|
-
} : tag);
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
// Second pass: add qualifiers on concerned tags
|
|
298
|
-
qualifiers.forEach(({key, prefix, subkey, qualifies, value}) => {
|
|
299
|
-
const concernedTag = byPrefix[qualifies.key.prefix]?.find(t => (
|
|
300
|
-
t.key === qualifies.key.subkey
|
|
301
|
-
&& (!qualifies.value || qualifies.value === t.value)
|
|
302
|
-
));
|
|
303
|
-
|
|
304
|
-
if(concernedTag) {
|
|
305
|
-
if(!concernedTag.qualifiers) { concernedTag.qualifiers = []; }
|
|
306
|
-
concernedTag.qualifiers.push({key, prefix, subkey, value});
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
// Append known prefixes information
|
|
311
|
-
let groups = Object.entries(byPrefix).map(([prefix, prefixTags]) => {
|
|
312
|
-
if(KNOWN_PREFIXES[prefix]) {
|
|
313
|
-
return Object.assign({ prefix, tags: prefixTags }, KNOWN_PREFIXES[prefix]);
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
return { prefix, title: prefix, tags: prefixTags };
|
|
317
|
-
}
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
return groups;
|
|
321
|
-
}
|
package/build/utils/services.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Settings that may be useful to change for special cases (e.g. offline implementation).
|
|
3
|
-
* Most users will be fine with the defaults.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Default map background tiles
|
|
9
|
-
* @returns {string} The website URL
|
|
10
|
-
*/
|
|
11
|
-
export function MapTiles() {
|
|
12
|
-
return "https://panoramax.openstreetmap.fr/pmtiles/basic.json";
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Panoramax website URL
|
|
17
|
-
* @returns {string} The website URL
|
|
18
|
-
*/
|
|
19
|
-
export function PanoramaxWebsiteURL() {
|
|
20
|
-
return "https://panoramax.fr";
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Panoramax Presets URL
|
|
25
|
-
* @returns {string} The presets URL
|
|
26
|
-
*/
|
|
27
|
-
export function PanoramaxPresetsURL() {
|
|
28
|
-
return "https://presets.panoramax.fr";
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Panoramax meta-catalog URL
|
|
33
|
-
* @returns {string} The metacatalog URL
|
|
34
|
-
*/
|
|
35
|
-
export function PanoramaxMetaCatalogURL() {
|
|
36
|
-
return "https://explore.panoramax.fr";
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Temaki icons URL
|
|
41
|
-
* @param {string} [iconName] The icon name to insert in URL
|
|
42
|
-
* @returns {string} The SVG icon URL
|
|
43
|
-
*/
|
|
44
|
-
export function TemakiIconURL(iconName) {
|
|
45
|
-
return `https://raw.githubusercontent.com/rapideditor/temaki/refs/heads/main/icons/${iconName}.svg`;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
/* -----------------------------------------------------
|
|
50
|
-
* Wikidata docs & tools
|
|
51
|
-
*/
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Wikidata URL
|
|
55
|
-
* @returns {string} The Wikidata URL
|
|
56
|
-
*/
|
|
57
|
-
export function WikidataURL() {
|
|
58
|
-
return "https://www.wikidata.org/wiki";
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Wikidata API URL
|
|
63
|
-
* @returns {string} The Wikidata URL
|
|
64
|
-
*/
|
|
65
|
-
export function WikidataAPIURL() {
|
|
66
|
-
return "https://www.wikidata.org/w/rest.php/wikibase/v1";
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
/* -----------------------------------------------------
|
|
71
|
-
* OpenStreetMap docs & tools
|
|
72
|
-
*/
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* OpenStreetMap iD editor URL
|
|
76
|
-
* @returns {string} The editor URL
|
|
77
|
-
*/
|
|
78
|
-
export function IdEditorURL() {
|
|
79
|
-
return "https://www.openstreetmap.org/edit?editor=id";
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* OpenStreetMap wiki URL
|
|
84
|
-
* @returns {string} The wiki URL
|
|
85
|
-
*/
|
|
86
|
-
export function OSMWikiURL() {
|
|
87
|
-
return "https://wiki.openstreetmap.org/wiki";
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* OpenStreetMap website URL
|
|
92
|
-
* @returns {string} The OSM website URL
|
|
93
|
-
*/
|
|
94
|
-
export function OSMURL() {
|
|
95
|
-
return "https://openstreetmap.org";
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Indoor= sprites URL
|
|
100
|
-
* @returns {string} The indoor= sprites URL
|
|
101
|
-
*/
|
|
102
|
-
export function IndoorEqualSpritesURL() {
|
|
103
|
-
return "https://files.pavie.info/depot/remote/indoorequal/indoorequal";
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/* -----------------------------------------------------
|
|
108
|
-
* Internet speed tests
|
|
109
|
-
*/
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Get the threshold fast internet speed value.
|
|
113
|
-
*
|
|
114
|
-
* @returns {number} the minimum speed in MBps for internet to be considered "fast"
|
|
115
|
-
*/
|
|
116
|
-
export function InternetFastThreshold() {
|
|
117
|
-
return 10;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Get the fast internet speed test file.
|
|
122
|
-
*
|
|
123
|
-
* @returns {string} URL for the file to use for internet speed testing.
|
|
124
|
-
*/
|
|
125
|
-
export function InternetFastTestFile() {
|
|
126
|
-
return "https://panoramax.openstreetmap.fr/images/05/ca/2c/98/0111-4baf-b6f3-587bb8847d2e.jpg";
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
/* -----------------------------------------------------
|
|
131
|
-
* Geocoding-related settings
|
|
132
|
-
*/
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Get the Base Adresse Nationale URL for geocoding API.
|
|
136
|
-
* @returns {string} The Base Adresse Nationale URL (must support /search calls).
|
|
137
|
-
*/
|
|
138
|
-
export function AdresseDataGouvBaseURL() {
|
|
139
|
-
return "https://data.geopf.fr/geocodage/search";
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Get the Nominatim base URL for geocoding API.
|
|
144
|
-
* @returns {string} The Nominatim URL (must support /search & /reverse calls).
|
|
145
|
-
*/
|
|
146
|
-
export function NominatimBaseUrl() {
|
|
147
|
-
return "https://nominatim.openstreetmap.org";
|
|
148
|
-
}
|