UNPKG

qwc2

Version:
352 lines (351 loc) 17.6 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n2 = 0, F = function F() {}; return { s: F, n: function n() { return _n2 >= r.length ? { done: !0 } : { done: !1, value: r[_n2++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } /** * Copyright 2018-2024 Sourcepole AG * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ import deepmerge from 'deepmerge'; import { remove as removeDiacritics } from 'diacritics'; import isEmpty from 'lodash.isempty'; import url from 'url'; import { v4 as uuidv4 } from 'uuid'; import { LayerRole } from '../actions/layers'; import StandardApp from '../components/StandardApp'; import { SearchResultType } from '../utils/SearchProviders'; import ConfigUtils from './ConfigUtils'; import LayerUtils from './LayerUtils'; var ThemeUtils = { getThemeById: function getThemeById(themes, id) { for (var i = 0, n = themes.items.length; i < n; ++i) { if (themes.items[i].id === id) { return themes.items[i]; } } for (var _i = 0, _n = themes.subdirs.length; _i < _n; ++_i) { var theme = this.getThemeById(themes.subdirs[_i], id); if (theme) { return theme; } } return null; }, createThemeBackgroundLayers: function createThemeBackgroundLayers(backgroundLayers, themes, visibleLayer, externalLayers) { var bgLayers = []; var visibleIdx = -1; var defaultVisibleIdx = -1; var _iterator = _createForOfIteratorHelper(backgroundLayers), _step; try { var _loop = function _loop() { var entry = _step.value; if (!entry.name) { return 1; // continue } var bgLayer = themes.backgroundLayers.find(function (lyr) { return lyr.name === entry.name; }); if (bgLayer) { if (entry.visibility === true) { defaultVisibleIdx = bgLayers.length; } if (bgLayer.name === visibleLayer) { visibleIdx = bgLayers.length; } bgLayer = _objectSpread(_objectSpread({}, bgLayer), {}, { role: LayerRole.BACKGROUND, thumbnail: bgLayer.thumbnail || "img/mapthumbs/default.jpg", visibility: false, opacity: bgLayer.opacity !== undefined ? bgLayer.opacity : 255 }); if (bgLayer.resource) { bgLayer.id = uuidv4(); bgLayer.type = "placeholder"; var params = LayerUtils.splitLayerUrlParam(bgLayer.resource); params.id = bgLayer.id; var key = params.type + ":" + params.url; (externalLayers[key] = externalLayers[key] || []).push(params); delete bgLayer.resource; } else if (bgLayer.type === "wms") { bgLayer.version = bgLayer.params.VERSION || bgLayer.version || themes.defaultWMSVersion || "1.3.0"; } else if (bgLayer.type === "group") { bgLayer.items = bgLayer.items.map(function (item) { if (item.ref) { var sublayer = themes.backgroundLayers.find(function (l) { return l.name === item.ref; }); if (sublayer) { item = _objectSpread(_objectSpread(_objectSpread({}, item), sublayer), LayerUtils.buildWMSLayerParams(sublayer)); if (item.type === "wms") { item.version = item.params.VERSION || item.version || themes.defaultWMSVersion || "1.3.0"; } delete item.ref; } else { item = null; } } return item; }).filter(function (x) { return x; }); } bgLayers.push(bgLayer); } else { // eslint-disable-next-line console.warn("Could not find background layer " + entry.name); } }; for (_iterator.s(); !(_step = _iterator.n()).done;) { if (_loop()) continue; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (visibleIdx >= 0) { bgLayers[visibleIdx].visibility = true; } else if (defaultVisibleIdx >= 0 && visibleLayer !== "") { bgLayers[defaultVisibleIdx].visibility = true; } return bgLayers; }, createThemeLayer: function createThemeLayer(theme, themes) { var role = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LayerRole.THEME; var subLayers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var urlParts = url.parse(theme.url, true); // Resolve relative urls if (!urlParts.host) { var locationParts = url.parse(window.location.href); urlParts.protocol = locationParts.protocol; urlParts.host = locationParts.host; } var sublayerNames = LayerUtils.getSublayerNames({ sublayers: subLayers !== null && subLayers !== void 0 ? subLayers : theme.sublayers }); var commonTranslations = StandardApp.store.getState().locale.messagesTree.maptranslations || {}; var baseParams = urlParts.query; var layer = { type: "wms", id: theme.id, url: url.format(urlParts), version: theme.version || themes.defaultWMSVersion || "1.3.0", visibility: true, expanded: theme.expanded, name: theme.name, title: theme.title, bbox: theme.bbox, sublayers: subLayers !== null && subLayers !== void 0 ? subLayers : theme.sublayers, tiled: theme.tiled, tileSize: theme.tileSize, ratio: !theme.tiled ? 1 : undefined, serverType: 'qgis', format: theme.format, rev: +new Date(), role: role, attribution: theme.attribution, legendUrl: ThemeUtils.inheritBaseUrlParams(theme.legendUrl, theme.url, baseParams), printUrl: ThemeUtils.inheritBaseUrlParams(theme.printUrl, theme.url, baseParams), featureInfoUrl: ThemeUtils.inheritBaseUrlParams(theme.featureInfoUrl, theme.url, baseParams), infoFormats: theme.infoFormats, mapFormats: theme.availableFormats, layerTreeHiddenSublayers: theme.layerTreeHiddenSublayers, predefinedFilters: (theme.predefinedFilters || []).filter(function (entry) { return Object.keys(entry.filter).find(function (name) { return sublayerNames.includes(name); }); }), externalLayerMap: _objectSpread(_objectSpread({}, theme.externalLayerMap), (theme.externalLayers || []).reduce(function (res, cur) { res[cur.internalLayer] = _objectSpread({}, themes.externalLayers.find(function (entry) { return entry.name === cur.name; })); LayerUtils.completeExternalLayer(res[cur.internalLayer], LayerUtils.searchSubLayer(theme, 'name', cur.internalLayer)); return res; }, {})), translations: deepmerge(commonTranslations, theme.translations), editConfig: theme.editConfig, wms_name: theme.wms_name }; layer = LayerUtils.recomputeLayerBBox(layer); // Drawing order only makes sense if layer reordering is disabled if (ConfigUtils.getConfigProp("allowReorderingLayers", theme) !== true) { layer.drawingOrder = theme.drawingOrder; } return layer; }, inheritBaseUrlParams: function inheritBaseUrlParams(capabilityUrl, baseUrl, baseParams) { if (!capabilityUrl) { return baseUrl; } if (capabilityUrl.split("?")[0] === baseUrl.split("?")[0]) { var parts = url.parse(capabilityUrl, true); parts.query = _objectSpread(_objectSpread({}, baseParams), parts.query); return url.format(parts); } return capabilityUrl; }, searchThemes: function searchThemes(themes, searchtext) { var filter = new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"), "i"); var matches = []; var _searchThemeGroup = function searchThemeGroup(themeGroup) { (themeGroup.subdirs || []).forEach(function (subdir) { return _searchThemeGroup(subdir, filter); }); matches.push.apply(matches, _toConsumableArray((themeGroup.items || []).filter(function (item) { return removeDiacritics(item.title).match(filter) || removeDiacritics(item.keywords || "").match(filter) || removeDiacritics(item["abstract"] || "").match(filter); }))); }; _searchThemeGroup(themes, filter); return isEmpty(matches) ? [] : [{ id: "themes", titlemsgid: "search.themes", type: SearchResultType.THEME, items: matches.map(function (theme) { return { id: theme.id, text: theme.title, theme: theme, layer: ThemeUtils.createThemeLayer(theme, themes), thumbnail: ConfigUtils.getAssetsPath() + "/" + theme.thumbnail }; }) }]; }, searchThemeLayers: function searchThemeLayers(themes, searchtext) { var filter = new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"), "i"); var matches = []; var _searchLayer = function searchLayer(theme, layer) { var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; (layer.sublayers || []).forEach(function (sublayer, idx) { var subpath = [].concat(_toConsumableArray(path), [idx]); if (removeDiacritics(sublayer.name).match(filter) || removeDiacritics(sublayer.title).match(filter)) { // Clone theme, ensuring path to layer is visible var newtheme = _objectSpread({}, theme); var cur = newtheme; var _loop2 = function _loop2(i) { var isMutuallyExclusive = cur.mutuallyExclusive; cur.sublayers = cur.sublayers.map(function (entry, j) { return _objectSpread(_objectSpread({}, entry), {}, { visibility: j === subpath[i] || entry.visibility && !isMutuallyExclusive }); }); cur = cur.sublayers[subpath[i]]; }; for (var i = 0; i < subpath.length; ++i) { _loop2(i); } matches.push({ theme: newtheme, layer: ThemeUtils.createThemeLayer(newtheme, themes, LayerRole.USERLAYER, [cur]) }); } _searchLayer(theme, sublayer, subpath); }); }; var _searchThemeGroup2 = function searchThemeGroup(themeGroup) { (themeGroup.subdirs || []).forEach(function (subdir) { return _searchThemeGroup2(subdir, filter); }); (themeGroup.items || []).forEach(function (item) { return _searchLayer(item, item); }); }; _searchThemeGroup2(themes, filter); return isEmpty(matches) ? [] : [{ id: "themelayers", titlemsgid: "search.themelayers", type: SearchResultType.THEMELAYER, items: matches.map(function (result) { return { id: result.layer.id + ":" + result.layer.sublayers[0].name, text: result.layer.title + ": " + result.layer.sublayers[0].title, layer: result.layer, theme: result.theme }; }) }]; }, getThemeNames: function getThemeNames(themes) { var names = (themes.items || []).reduce(function (res, theme) { return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, theme.id, theme.title)); }, {}); (themes.subdirs || []).forEach(function (group) { Object.assign(names, ThemeUtils.getThemeNames(group)); }); return names; }, themeFlagsAllowed: function themeFlagsAllowed(theme, flagWhitelist, flagBlacklist) { var themeFlags = (theme === null || theme === void 0 ? void 0 : theme.flags) || []; if (flagBlacklist && flagBlacklist.find(function (flag) { return themeFlags.includes(flag); }) !== undefined) { return false; } if (flagWhitelist && flagWhitelist.find(function (flag) { return themeFlags.includes(flag); }) === undefined) { return false; } return true; }, allowedItems: function allowedItems(items, theme) { var filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; return (items || []).map(function (item) { if (item.subitems) { var subitems = ThemeUtils.allowedItems(item.subitems, theme, filter).filter(Boolean); if (!isEmpty(subitems)) { return _objectSpread(_objectSpread({}, item), {}, { subitems: subitems }); } else { return null; } } else { if (filter && !filter(item)) { return null; } if (theme) { if (!ThemeUtils.themeFlagsAllowed(theme, item.themeFlagWhitelist, item.themeFlagBlacklist)) { return null; } if (item.themeBlacklist && (item.themeBlacklist.includes(theme.title) || item.themeBlacklist.includes(theme.name))) { return null; } if (item.themeWhitelist && !(item.themeWhitelist.includes(theme.title) || item.themeWhitelist.includes(theme.name))) { return null; } if (item.requireAuth && !ConfigUtils.getConfigProp("username")) { return null; } } return item; } }).filter(Boolean); }, applyTranslations: function applyTranslations(group) { var commonTranslations = StandardApp.store.getState().locale.messagesTree.maptranslations || {}; return _objectSpread(_objectSpread({}, group), {}, { subdirs: group.subdirs ? group.subdirs.map(ThemeUtils.applyTranslations) : null, items: group.items ? group.items.map(function (item) { var _item$translations$th, _item$translations; return _objectSpread(_objectSpread({}, LayerUtils.applyTranslations(item, deepmerge(commonTranslations, item.translations))), {}, { title: (_item$translations$th = (_item$translations = item.translations) === null || _item$translations === void 0 || (_item$translations = _item$translations.theme) === null || _item$translations === void 0 ? void 0 : _item$translations.title) !== null && _item$translations$th !== void 0 ? _item$translations$th : item.title }); }) : null }); } }; export default ThemeUtils;