{"version":3,"file":"mapView.min.js","mappings":"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","sources":["webpack://[name]/webpack/runtime/chunk loaded","webpack://[name]/./Script/Core/Utils.ts","webpack://[name]/./Script/Core/validation.ts","webpack://[name]/./Script/Core/Cadcorp.Web.Core.Events.ts","webpack://[name]/../../CommonScripts/Abstractions.ts","webpack://[name]/./Script/Core/Cadcorp.Web.Core.Geolocator.ts","webpack://[name]/./Script/Core/TemplateFactory.ts","webpack://[name]/./Script/GeognoSIS/Theme.ts","webpack://[name]/./Script/GeognoSIS/Overlay.ts","webpack://[name]/./Script/Search/SearchFactory.ts","webpack://[name]/./Script/GeognoSIS/SchemaColumn.ts","webpack://[name]/./Script/GeognoSIS/Item.ts","webpack://[name]/./Script/GeognoSIS/QueryHelper.ts","webpack://[name]/./Script/GeognoSIS/JoinedQueryHelper.ts","webpack://[name]/./Script/ol/source/GeognoSISTileImage.js","webpack://[name]/./Script/ol/source/GeognoSISImage.js","webpack://[name]/./Script/ol/source/GeognoSISVector.js","webpack://[name]/./Script/ol/LayerFactory.ts","webpack://[name]/./Script/GeognoSIS/ExpressionBuilder.ts","webpack://[name]/./Script/GeognoSIS/OverlayFactory.ts","webpack://[name]/./Script/Components/MapView/Panels/applicationPanel.vue?df64","webpack://[name]/./Script/Components/MapView/Panels/applicationPanel.vue?37c4","webpack://[name]/./Script/Components/MapView/Panels/applicationPanel.vue?782d","webpack://[name]/./Script/Components/MapView/Panels/applicationPanel.vue","webpack://[name]/./Script/Components/MapView/Panels/sidepanel.vue?b557","webpack://[name]/./Script/Components/MapView/Panels/sidepanel.vue?a2a1","webpack://[name]/./Script/Components/MapView/Panels/sidepanel.vue?a992","webpack://[name]/./Script/Components/MapView/Panels/sidepanel.vue","webpack://[name]/./Script/Components/MapView/Panels/attributionPanel.vue?6f3e","webpack://[name]/./Script/Components/MapView/Panels/attributionPanel.vue?1e36","webpack://[name]/./Script/Components/MapView/Panels/attributionPanel.vue?2e4d","webpack://[name]/./Script/Components/MapView/Panels/attributionPanel.vue","webpack://[name]/./Script/Components/MapView/Notifications/activitySnackbar.vue?b9a0","webpack://[name]/./Script/Components/MapView/Notifications/activitySnackbar.vue?7ca3","webpack://[name]/./Script/Components/MapView/Notifications/activitySnackbar.vue?5868","webpack://[name]/./Script/Components/MapView/Notifications/activitySnackbar.vue","webpack://[name]/./Script/Components/MapView/ContentControls/appControls.vue?037d","webpack://[name]/./Script/Components/MapView/ContentControls/contentControl.vue?ea8b","webpack://[name]/./Script/Components/MapView/ContentControls/contentControl.vue?5eb1","webpack://[name]/./Script/Components/MapView/ContentControls/contentControl.vue?55e1","webpack://[name]/./Script/Components/MapView/ContentControls/contentControl.vue","webpack://[name]/./Script/Components/MapView/ContentControls/appControls.vue?f5e3","webpack://[name]/./Script/Components/MapView/ContentControls/appControls.vue?9b0a","webpack://[name]/./Script/Components/MapView/ContentControls/appControls.vue","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationItem.vue?b16b","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationItem.vue?9579","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationItem.vue?3874","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationItem.vue","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationDrawer.vue?ec5d","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationDrawer.vue?c776","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationDrawer.vue?3867","webpack://[name]/./Script/Components/MapView/NavigationDrawer/navigationDrawer.vue","webpack://[name]/./Script/Components/MapView/speedDial/speedDial.vue?e0fb","webpack://[name]/./Script/Components/MapView/speedDial/speedDialItem.vue?b29e","webpack://[name]/./Script/Components/MapView/speedDial/speedDialItem.vue?e520","webpack://[name]/./Script/Components/MapView/speedDial/speedDialItem.vue?13d8","webpack://[name]/./Script/Components/MapView/speedDial/speedDialItem.vue","webpack://[name]/./Script/Components/MapView/speedDial/speedDial.vue?4c82","webpack://[name]/./Script/Components/MapView/speedDial/speedDial.vue?c4d1","webpack://[name]/./Script/Components/MapView/speedDial/speedDial.vue","webpack://[name]/./Script/Components/MapView/Application/map.vue?311d","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstrip.vue?d409","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstripItem.vue?24c7","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstripItem.vue?e62e","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstripItem.vue?797f","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstripItem.vue","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstrip.vue?3984","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstrip.vue?5d3c","webpack://[name]/./Script/Components/MapView/Toolstrip/toolstrip.vue","webpack://[name]/./Script/Components/MapView/Application/profile.vue?7316","webpack://[name]/./Script/Components/MapView/Application/profile.vue?2e7f","webpack://[name]/./Script/Components/MapView/Application/profile.vue?b42f","webpack://[name]/./Script/Components/MapView/Application/profile.vue","webpack://[name]/./Script/Components/MapView/Application/map.vue?4754","webpack://[name]/./Script/Components/MapView/Application/map.vue?f9c6","webpack://[name]/./Script/Components/MapView/Application/map.vue","webpack://[name]/./Script/Components/MapView/Panels/applicationPanelContents.vue?5c25","webpack://[name]/./Script/Components/MapView/Panels/applicationPanelContents.vue?b770","webpack://[name]/./Script/Components/MapView/Panels/applicationPanelContents.vue?cdc1","webpack://[name]/./Script/Components/MapView/Panels/applicationPanelContents.vue","webpack://[name]/./Script/Components/MapView/Application/button.vue?8d4d","webpack://[name]/./Script/Components/MapView/Application/button.vue?6aeb","webpack://[name]/./Script/Components/MapView/Application/button.vue?dbf2","webpack://[name]/./Script/Components/MapView/Application/button.vue","webpack://[name]/./Script/Components/MapView/DataTable/featureTable.vue?420e","webpack://[name]/./Script/Components/MapView/DataTable/dataTableFactory.ts","webpack://[name]/./Script/Components/MapView/DataTable/dateComponent.vue?c59f","webpack://[name]/./Script/Components/MapView/DataTable/dateComponent.vue?8421","webpack://[name]/./Script/Components/MapView/DataTable/dateComponent.vue?58d7","webpack://[name]/./Script/Components/MapView/DataTable/dateComponent.vue","webpack://[name]/./Script/Components/MapView/DataTable/featureTable.vue?5298","webpack://[name]/./Script/Components/MapView/DataTable/featureTable.vue?e60a","webpack://[name]/./Script/Components/MapView/DataTable/featureTable.vue","webpack://[name]/external var \"Vuex\"","webpack://[name]/./Script/GeognoSIS/overlayState.ts","webpack://[name]/./Script/ol/mapState.ts","webpack://[name]/./Script/Store/extensionState.ts","webpack://[name]/./Script/Store/profileState.ts","webpack://[name]/./node_modules/idb/build/wrap-idb-value.js","webpack://[name]/./node_modules/idb/build/index.js","webpack://[name]/./Script/Store/bookmarkstate.ts","webpack://[name]/./Script/Components/MapView/uiState.ts","webpack://[name]/./Script/Components/MapView/Notifications/interactiveSnackbarState.ts","webpack://[name]/./Script/Store/application.ts","webpack://[name]/./Script/Store/localStorage.ts","webpack://[name]/./Script/Components/ManagerView/Style/previewFunctions.ts","webpack://[name]/./Script/Components/ManagerView/Style/colourPicker.vue?a02b","webpack://[name]/./Script/Components/ManagerView/Style/colourPicker.vue?c332","webpack://[name]/./Script/Components/ManagerView/Style/colourPicker.vue?35de","webpack://[name]/./Script/Components/ManagerView/Style/colourPicker.vue","webpack://[name]/./Script/entry.ts","webpack://[name]/./Script/GeognoSIS/GeognosisFilter.ts","webpack://[name]/external var \"Vue\"","webpack://[name]/external var \"axios\"","webpack://[name]/webpack/bootstrap","webpack://[name]/webpack/runtime/compat get default export","webpack://[name]/webpack/runtime/define property getters","webpack://[name]/webpack/runtime/hasOwnProperty shorthand","webpack://[name]/webpack/runtime/make namespace object","webpack://[name]/webpack/runtime/jsonp chunk loading","webpack://[name]/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\n/**\r\n* Copy all properties of a source object to a destination object. Modifies\r\n* the passed in destination object. Any properties on the source object\r\n* that are set to undefined will not be (re)set on the destination object.\r\n* @function Cadcorp.Util.extend\r\n*\r\n* @param {object} destination The object that will be modified\r\n* @param {object} source The object with properties to be set on the destination\r\n*\r\n* @returns {object} The destination object.\r\n*/\r\nexport function extend (destination : object, source : object):object {\r\n destination = destination || {};\r\n if (source) {\r\n for (var property in source) {\r\n var value = source[property];\r\n if (value !== undefined) {\r\n destination[property] = value;\r\n }\r\n }\r\n\r\n var sourceIsEvt = typeof window.event === 'function'\r\n && source instanceof window.event;\r\n\r\n if (!sourceIsEvt\r\n && source.hasOwnProperty && source.hasOwnProperty('toString')) {\r\n destination.toString = source.toString;\r\n }\r\n }\r\n return destination;\r\n};\r\n\r\n/**\r\n * Hides our loading element\r\n * @funciton\r\n */\r\nexport function hideLoading() {\r\n var loadingMask = document.getElementById('loadingMask');\r\n loadingMask.addEventListener('animationend', function () {\r\n loadingMask.classList.add('display-none');\r\n });\r\n loadingMask.classList.add('loadingDisplay-none');\r\n}\r\n/**\r\n * Removes invalid characters from a string. The only valid characters are a-z and the numbers 0-9\r\n * @param {string} name The javascript name to have invalid characters removed\r\n */\r\nconst validRegex = /([^a-z0-9]+)/gi;\r\nexport function removeInvalidJavascriptChars(name: string): string {\r\n return name.replace(validRegex, '_');\r\n}\r\n/**\r\n * Adds parameters from the param object to the url\r\n * @param {string} uri The url to append the parameters to\r\n * @param {object} params The object containing the parameters\r\n * @return {string} The url with the parameter\r\n */\r\nexport function appendParameters(uri : string, params: any): string {\r\n const keyParams: string[] = [];\r\n // Skip any null or undefined parameter values\r\n Object.keys(params).forEach(function (k) {\r\n if (params[k] !== null && params[k] !== undefined) {\r\n keyParams.push(k + '=' + encodeURIComponent(params[k]));\r\n }\r\n });\r\n const qs = keyParams.join('&');\r\n // remove any trailing ? or &\r\n uri = uri.replace(/[?&]$/, '');\r\n // append ? or & depending on whether uri has existing parameters\r\n uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';\r\n return uri + qs;\r\n};\r\n\r\n/**\r\n* Formats a date object \r\n* @function\r\n* @param {Date} date - The date to get the format for\r\n* @returns {string} The formatted date\r\n*/\r\nexport function formatDate(date: any): string {\r\n return date.toLocaleString(undefined, { timeZone: 'UTC', dateStyle: 'short', timeStyle: 'short' });\r\n};\r\n\r\nimport { ISchemaColumn } from '../../../../CommonScripts/Abstractions';\r\nimport {isDate } from './validation';\r\n/**\r\n * Returns a nicely formatted string\r\n * @param value\r\n * @param \r\n */\r\nexport function formatValue(value: any, schemaColumn?: ISchemaColumn): string {\r\n if (value == undefined || value == null) return null; \r\n if (schemaColumn) return formatValueFromSchema(value, schemaColumn); \r\n switch (typeof value) {\r\n case 'string':\r\n const numericReg = /^-?\\d*\\.?\\d*$/;\r\n if (numericReg.test(value)) return value.toString();\r\n else if (isDate(value) !== true) return value;\r\n else {\r\n const tmpDate: Date = new Date(value);\r\n return formatDate(tmpDate);\r\n } \r\n case 'object':\r\n const property = value[Object.keys(value)[0]];\r\n return formatValue(property); \r\n case 'number':\r\n case 'boolean':\r\n default: return value.toString(); \r\n } \r\n}\r\nfunction formatValueFromSchema(value: any, schemaColumn: ISchemaColumn): string {\r\n let retVal: string = null;\r\n switch (schemaColumn.type) {\r\n case 7: //date\r\n const val = value[schemaColumn.typeName];\r\n let tmpDate: Date = new Date(val);\r\n retVal = formatDate(tmpDate);\r\n break;\r\n case 8: //string $ type columns\r\n retVal =value;\r\n break;\r\n case 11: //boolean\r\n // numeric types that are actually returned as numbers from geognosis\r\n case 5: //numeric # type column\r\n case 3: //integer type column & suffix\r\n retVal = value.toString();\r\n break;\r\n case 2: //short int\r\n case 4: //single type\r\n case 6: //currency\r\n case 18://unsigned short\r\n case 16://byte\r\n case 17://unsigned byte\r\n retVal = value[schemaColumn.typeName]?.toString();\r\n break;\r\n // numeric types that are actually returned as strings from geognosis so filtering will be limited to equals\r\n case 19: //Unsigned long\r\n case 20: //Long Long int\r\n case 21: //Unsigned long long\r\n case 14://decimal\r\n retVal = value[schemaColumn.typeName];\r\n break;\r\n default: //anything we don't know about is not allowed\r\n retVal = value.toString();\r\n break;\r\n }\r\n return retVal;\r\n}\r\n/**\r\n * Generates a string containing random hex characters\r\n * @param {number} length The length of the required string\r\n */\r\nexport function generateRandomHex(length): string {\r\n return [...Array(length)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');\r\n}\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nconst emptyStringRegEx = /^\\s*\\S.*$/;\r\nconst boundedRegEx = /(\\b[4-9])|(\\b[1][0-9])|(\\b[2][0-5])/g;\r\nconst countryCodeRegEx = /^([a-z]{2},?)+$/gi;\r\nconst intRegEx = /^\\-?[0-9]*$/;\r\nconst unsignedIntRegEx = /^[0-9]*$/;\r\nconst unsignedDecimalRegEx = /^[0-9]+(\\.[0-9]+)*?$/;\r\nconst nonZeroUnsignedIntRegEx = /^[1-9][0-9]*$/;\r\nconst floatRegEx = /^\\-?[0-9]+(\\.[0-9]+)?$/;\r\nconst dateRegEx = /(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2})\\:(\\d{2})\\:(\\d{2})[+-](\\d{2})\\:(\\d{2})/;\r\nconst urlRegEx = /^https?:\\/\\/[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*(:[0-9]+)?(\\/.*)?$/i;\r\nconst emailRegEx = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\nconst postcodeRegEx = /^([a-z0-9]{2,4}) ([a-z0-9]{3})$/gi;\r\n\r\n/**\r\n * Validation rules for Vuetify\r\n */\r\n\r\nfunction validateWithRegExp(value: string, regExp: RegExp): boolean {\r\n let returnVal = false;\r\n if (value !== null) {\r\n const txtFound = value.match(regExp);\r\n returnVal = txtFound !== null;\r\n }\r\n return returnVal;\r\n}\r\nexport function validate(value: string, regEx: RegExp, error: string) {\r\n let isValid: boolean | string = notEmpty(value);\r\n if (isValid === true) {\r\n isValid = validateWithRegExp(value, regEx);\r\n if (!isValid) {\r\n isValid = error;\r\n }\r\n }\r\n return isValid;\r\n}\r\n\r\n/**\r\n * Checks that the suppiled value is not empty\r\n * @param {string} value The value to check\r\n * @returns {boolean|string} True if value is not empty, otherwise returns the key to the error text\r\n */\r\nexport function notEmpty(value: string): boolean | string { \r\n let retVal: boolean | string = false;\r\n // Checks for null & undefined\r\n if (value) { \r\n // Gets rid of whitespace\r\n let val = value.trim(); \r\n\r\n // Checks the length\r\n retVal = val.length > 0 || 'webmap.messages.validation.notEmpty';\r\n }\r\n else\r\n retVal = 'webmap.messages.validation.notEmpty';\r\n return retVal;\r\n}\r\n\r\n/**\r\n * Checks that the suppiled value is not empty\r\n * @param {Array} value The value to check\r\n * @returns {boolean|string} True if value is not empty, otherwise returns the key to the error text\r\n */\r\nexport function notEmptyArray(value: Array): boolean | string {\r\n let retVal: boolean | string = false;\r\n // Checks for null & undefined\r\n if (value) {\r\n // Checks the length\r\n retVal = value.length > 0 || 'webmap.messages.validation.notEmpty';\r\n }\r\n else\r\n retVal = 'webmap.messages.validation.notEmpty';\r\n return retVal;\r\n}\r\n\r\n/**\r\n * Checks that the supplied value is an integer value\r\n * @param {string} value The value to check\r\n * @returns {boolean|string} True if value is an integer, otherwise returns the key to the error text\r\n */\r\nexport function isInteger(value: string): boolean | string {\r\n return validate(value, intRegEx, 'webmap.messages.validation.integerOnly');\r\n}\r\n\r\n/**\r\n * Checks that the supplied value is an unsigned integer value\r\n * @param {string} value The value to check\r\n * @returns {boolean|string} True if value is an unsigned integer, otherwise returns the key to the error text\r\n */\r\nexport function isUnsignedInteger( value: string): boolean | string {\r\n return validate(value, unsignedIntRegEx, 'webmap.messages.validation.positiveIntegerOnly');\r\n}\r\n\r\n/**\r\n * Checks that the supplied value is an unsigned decimal value\r\n * @param {string} value The value to check\r\n * @returns {boolean|string} True if value is an unsigned decimal, otherwise returns the key to the error text\r\n */\r\nexport function isUnsignedDecimal(value: string): boolean | string {\r\n return validate(value, unsignedDecimalRegEx, 'webmap.messages.validation.positiveDecimalOnly');\r\n}\r\n\r\n/**\r\n * Checks that the supplied value is an integer value greater than 0\r\n * @param {string} value The value to check\r\n * @returns {boolean|string} True if value is an integer, otherwise returns the key to the error text\r\n */\r\nexport function isNonZeroUnsignedInteger(value: string): boolean | string {\r\n return validate(value, nonZeroUnsignedIntRegEx, 'webmap.messages.validation.nonZeroPositiveIntegerOnly');\r\n}\r\n\r\n/**\r\n* Checks to see if a string is a number \r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is a number, otherwise returns the key to the error text\r\n*/\r\nexport function isNumber(value: string): boolean | string {\r\n return validate(value, floatRegEx, 'webmap.messages.validation.numericOnly');\r\n}\r\n\r\n/**\r\n* Checks to see if a string is a date \r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is a date, otherwise returns the key to the error text\r\n*/\r\nexport function isDate( value: string): boolean | string {\r\n let isValid = validate(value, dateRegEx, 'webmap.messages.validation.date');\r\n if (isValid === true) {\r\n // final check create a date object \r\n try {\r\n const d = new Date(value);\r\n } catch (err) {\r\n isValid = 'webmap.messages.validation.date';\r\n }\r\n }\r\n return isValid;\r\n}\r\n\r\n/**\r\n* Checks to see if a string is a url \r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is a url, otherwise returns the key to the error text\r\n*/\r\nexport function isUrl(value: string): boolean | string {\r\n return validate(value, urlRegEx, 'webmap.messages.validation.url');\r\n};\r\n\r\n/**\r\n* Checks to see if a string is an email address \r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is an email address, otherwise returns the key to the error text\r\n*/\r\nexport function isEmail(value: string): boolean | string {\r\n return validate(value, emailRegEx, 'webmap.messages.validation.email');\r\n};\r\n\r\n/**\r\n* Checks to see if a string is a postcode\r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is a postcode, otherwise returns the key to the error text\r\n*/\r\nexport function isPostcode(value: string): boolean | string {\r\n return validate(value, postcodeRegEx, 'webmap.messages.validation.postcode');\r\n}\r\n\r\n/**\r\n* Checks to see if a string is greater than or equal to 4, but less than or equal to 25.\r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is >= 4 && <= 25, otherwise returns the key to the error text\r\n*/\r\nexport function isBounded(value: string): boolean | string {\r\n return validate(value, boundedRegEx, 'webmap.messages.validation.bounded');\r\n};\r\n\r\n/**\r\n* Checks to see if a string is a two-letter country code. Following the rules of ISO 3166-1 alpha-2.\r\n* @function\r\n* @param {string} value - The string to check\r\n* @returns {boolean} True if the string is a two-letter code, otherwise returns the key to the error text\r\n*/\r\nexport function isCountryCode(value: string): boolean | string {\r\n return validate(value, countryCodeRegEx, 'webmap.messages.validation.countryCode');\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IEventConfig, IEventSource } from '../../../../CommonScripts/Abstractions';\r\n\r\n/**\r\n* An events object that handles custom events\r\n* @export\r\n*/\r\nexport class Events implements IEventSource {\r\n /**\r\n * @public\r\n * @property {object} owner - The owner object for this event object\r\n * @memberof Cadcorp.Web.Core.Events#\r\n */\r\n owner: object;\r\n /**\r\n * @private\r\n * @property {object} m_events - The event object\r\n * @memberof Cadcorp.Web.Core.Events#\r\n */\r\n private m_events: object;\r\n\r\n /**\r\n * The an instance of the event \r\n * @export\r\n * @param {Cadcorp.Util.EventConfig} config Configuration for this event object\r\n */\r\n constructor(config: IEventConfig) {\r\n this.owner = config.owner;\r\n this.m_events = {};\r\n }\r\n\r\n /**\r\n * Is this event handler registered with this event object\r\n * @public\r\n * @function\r\n * @memberof Cadcorp.Web.Core.Events#\r\n * @param {string} type - The event type\r\n * @param {function} handler - The function that will be called when the event is triggered\r\n * @returns {boolean} true if the event handler has been registered, otherwise false \r\n */\r\n isRegistered(type: string, handler: object): boolean {\r\n\r\n return this.getIndex(type, handler) >= 0;\r\n }\r\n\r\n /**\r\n * Gets the index of this event handler\r\n * @public\r\n * @function\r\n * @memberof Cadcorp.Web.Core.Events#\r\n * @param {string} type - The event type\r\n * @param {function} handler - The function that will be called when the event is triggered\r\n * @returns {number} The index of the event handler \r\n */\r\n getIndex(type: string, handler: object): number {\r\n var index = -1;\r\n if (this.m_events[type]) {\r\n for (var c = 0; c < this.m_events[type].length && index === -1; c++) {\r\n if (this.m_events[type][c] === handler) {\r\n index = c;\r\n }\r\n }\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * @inheritdoc \r\n */\r\n on(type: string, handler: (eventData: any) => boolean): void {\r\n\r\n if (this.m_events[type]) {\r\n this.m_events[type].push( handler);\r\n } else {\r\n this.m_events[type] = [handler];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n un(type: string, handler: (eventData: any) => boolean): void {\r\n if (this.isRegistered(type, handler)) {\r\n this.m_events[type].splice(this.getIndex(type,handler), 1);\r\n }\r\n }\r\n\r\n /** \r\n * @description\r\n * Trigger a specified registered event.
\r\n * If eventData is supplied, type and object properties will be added.
\r\n * If eventData is null a new object is created with type and object properties.
\r\n * In either case eventData will be passed to all listeners \r\n * @public\r\n * @function\r\n * @memberof Cadcorp.Web.Core.Events#\r\n * @param {string} type - The event type\r\n * @param {?Object} eventData - An object containing event data, will be passed to the listener.\r\n * @returns {boolean} The success or failure of the event handler\r\n */\r\n dispatchEvent(type: string, eventData: any): boolean {\r\n var retval = true;\r\n if (this.m_events[type]) {\r\n var handlers = this.m_events[type];\r\n if (!eventData) {\r\n eventData = {};\r\n }\r\n eventData.type = type;\r\n eventData.object = this.owner;\r\n if (handlers && handlers.length > 0) {\r\n for (var c = 0; c < handlers.length && retval; c++) {\r\n var ret = handlers[c].call(this, eventData);\r\n if (ret !== undefined)\r\n retval = ret;\r\n }\r\n }\r\n }\r\n return retval;\r\n }\r\n\r\n /** Destroys this event object.\r\n * @public\r\n * @function\r\n * @memberof Cadcorp.Web.Core.Events#\r\n */\r\n destroy() {\r\n this.m_events = null;\r\n this.owner = null;\r\n }\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Location } from 'vue-router';\r\n/**\r\n* An interface to describe configuration for an event object\r\n* @interface\r\n* @public\r\n*/\r\nexport interface IEventConfig {\r\n /**\r\n * @public\r\n * @property {object} owner The owner of the event object\r\n */\r\n owner: object;\r\n}\r\n/**\r\n* An interface to describe a source for events\r\n* @interface\r\n* @public\r\n*/\r\nexport interface IEventSource {\r\n /** Register an event on the source.\r\n * When the event is dispatched, the handler function will be called.\r\n * @public\r\n * @function\r\n * @param {string} type - The event type\r\n * @param {function} handler - The function that will be called when the event is triggered\r\n */\r\n on(type: string, listener: (eventData: any) => boolean);\r\n /** UnRegister an event on the source.\r\n * To unregister an event, the type and handler must the the same as when on was called\r\n * @public\r\n * @function\r\n * @param {string} type - The event type\r\n * @param {function} handler - The function that will be called when the event is triggered\r\n */\r\n un(type: string, listener: (eventData: any) => boolean);\r\n}\r\n/**\r\n* An interface to describe a Schema Column\r\n* @interface\r\n* @public\r\n*/\r\nexport interface ISchemaColumn {\r\n /**\r\n * @public\r\n * @property {string} name The name of this schema column, retrieved from the _description$ property\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {string} expression The expression of this schema column, retrieved from the _formula$ property\r\n */\r\n expression: string;\r\n /**\r\n * @public\r\n * @property {boolean} isMapTip True if this column is defined as a maptip, otherwise false. Retrieved from the _bMapTip& property\r\n */\r\n isMapTip: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} isHidden True if this column is hidden, otherwise false. Retrieved from the _bHidden& property\r\n */\r\n isHidden: boolean;\r\n\r\n /**\r\n * @public\r\n * @property {number} type The type of this schema column. Retrieved from the _type& property\r\n */\r\n type: number;\r\n\r\n /**\r\n * @public\r\n * @property {string} typeName The name for the type of this schema column. Retrieved from the _typeName$ property\r\n */\r\n typeName: string;\r\n /**\r\n * @property {number} columnIndex - The index of this schema\r\n * @public\r\n */\r\n columnIndex: number;\r\n}\r\nexport interface IExpressionBuilder {\r\n /**\r\n * Creates a SIS expresion to query a http layer with, expected to be overridden in child classes\r\n * @export\r\n * @param {ol.Map} map The open layers map\r\n * @returns {string} A sis expression\r\n */\r\n createExpression(map) : string ;\r\n}\r\nexport interface IFilterExpressionBuilder extends IExpressionBuilder {\r\n /**\r\n * Creates a SIS expression to filter based on a column and value. Extends IExpressionBuilder\r\n * @param {ISchemaColumn} schemaColumn Schema column to search\r\n * @param {string} uid Value to search\r\n */\r\n setExpressionData(schemaColumn: ISchemaColumn, uid: string): void;\r\n}\r\n/**\r\n* An interface to ajax operations\r\n* @interface\r\n* @public\r\n*/\r\nexport interface IAjax {\r\n /**\r\n * Perform a get request\r\n * @param {string} endpoint The url to perform the operation on\r\n * @param {object} [options] The options to apply to this request, they will be merged with the default options\r\n * @return {Promise} A promise containing the request\r\n */\r\n get(endpoint : string, options?: object) :Promise;\r\n /**\r\n * Perform a post request\r\n * @param {string} endpoint The url to perform the operation on\r\n * @param {object} [data] A data object to send as the body of the request\r\n * @param {object} [options] The options to apply to this request, they will be merged with the default options\r\n * @return {Promise} A promise containing the request\r\n */\r\n post(endpoint: string, data?: object, options?: object): Promise;\r\n\r\n /**\r\n * Perform a post request\r\n * @param {string} endpoint The url to perform the operation on\r\n * @param {FormData} [data] Form data to send\r\n * @param {object} [options] The options to apply to this request, they will be merged with the default options\r\n * @return {Promise} A promise containing the request\r\n */\r\n upload(endpoint: string, data?: object, options?: object): Promise;\r\n\r\n /**\r\n * Perform a patch request\r\n * @param {string} endpoint The url to perform the operation on\r\n * @param {object} [data] A data object to send as the body of the request\r\n * @param {object} [options] The options to apply to this request, they will be merged with the default options\r\n * @return {Promise} A promise containing the request\r\n */\r\n patch(endpoint: string, data?: object, options?: object): Promise;\r\n\r\n /**\r\n * Perform a delete request\r\n * @param {string} endpoint The url to perform the operation on\r\n * @param {object} [options] The options to apply to this request, they will be merged with the default options\r\n * @return {Promise} A promise containing the request\r\n */\r\n delete(endpoint: string, options?: object): Promise; \r\n}\r\n/**\r\n* An interface to describe a location\r\n* @interface\r\n* @public\r\n* @param {number} x The x coordinate\r\n* @param {number} y The y coordinate\r\n* @param {string} [epsg] The EPSG code the x and y are in in the format 'EPSG:'.\r\n* @param {string} [text] Text for the location.\r\n\r\n*/\r\nexport interface ILocation {\r\n x: number;\r\n y: number;\r\n epsgCode?: string;\r\n text?: string;\r\n}\r\n/**\r\n* An interface to describe how to transform a ILocation object to a different type of point object.\r\n* @interface\r\n* @public\r\n*/\r\nexport interface IPositionTransformer {\r\n /**\r\n * @function\r\n * @param {ILocation} position The position to transform\r\n * @returns {object} A new object that represents the same location\r\n */\r\n transform(position: ILocation): any;\r\n}\r\n/**\r\n* An interface to describe an extension\r\n* @public\r\n*/\r\nexport interface IExtensionObject {\r\n /**\r\n * @public\r\n * @property {string} id The unique identifier for this extension\r\n */\r\n id:string;\r\n /**\r\n * @public\r\n * @property {boolean} isActive - Is this extension active\r\n */\r\n isActive: boolean;\r\n /**\r\n * Activate this extension\r\n * @public\r\n * @function\r\n * @returns {boolean} Returns true if this extension was activated, otherwise false\r\n */\r\n activate() : boolean;\r\n /**\r\n * Deactivate this extension\r\n * @public\r\n * @function\r\n * @returns {boolean} Returns true if this extension was deactivated, otherwise false\r\n */\r\n deactivate() : boolean;\r\n /**\r\n * Initialise this extension, will be called by the application\r\n * @function\r\n * @param {object} store The vuex store\r\n * @param {object} i18n The translation object\r\n * @param {router} i18n The vue-router object\r\n */\r\n initialise(store: any, i18n: any, router: any): void;\r\n /**\r\n * Allows an extension to append their own URL parameters to an existing list\r\n * @param params list of parameters that the extension can add to\r\n * @param options a list of flags that the extension can react to\r\n * @returns {boolean} a boolean to inform the main application if the list was modified\r\n */\r\n appendUrlParams(params: IUrlParam[], options: string[]): boolean;\r\n}\r\n/**\r\n * describes URL parameters handle by a extension\r\n * */\r\nexport interface IUrlParam {\r\n name: string,\r\n value: string\r\n}\r\n/**\r\n * Allows an extension to handle url parameters\r\n */\r\nexport interface IUrlParamterHandler {\r\n handleUrlParameters: (...parameters: any[]) => Promise;\r\n}\r\n/**\r\n * Describes an item\r\n */\r\nexport interface IItem {\r\n /**\r\n * @property {Object} properties - Item properties.\r\n * @public\r\n */\r\n properties: any;\r\n /**\r\n * @property {object} geometry - Feature geometry\r\n * @public\r\n */\r\n geometry: any;\r\n}\r\n/**\r\n * Describes a feature in Geognosis\r\n * @interface \r\n */\r\nexport interface IGeognoSISItem extends IItem {\r\n /**\r\n * @property {object} id - Item id\r\n * @public\r\n */\r\n id: any;\r\n /**\r\n * @property {number} layerIndex - The index of the layer this item is on\r\n * @public\r\n */\r\n layerIndex: number;\r\n /**\r\n * @property {string} sessionId - GeognoSIS Session ID\r\n * @public\r\n */\r\n sessionId: string;\r\n /**\r\n * @property {string} mapName - Current map name\r\n * @public\r\n */\r\n mapName: string;\r\n\r\n /**\r\n * @property {Object} geoJSON - GeoJSON for the item.\r\n * @public\r\n */\r\n geoJSON: any;\r\n /**\r\n * @property {string|null} baseUrl The base url for the application\r\n * @public\r\n * @readonly\r\n */\r\n readonly baseUrl: string;\r\n /**\r\n * @property {string} layerId The unique id for the swd this item belongs to\r\n * @public\r\n */\r\n readonly layerId: string;\r\n /**\r\n * @property {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @public\r\n */\r\n readonly ajaxWrapper: IAjax;\r\n updateGeometry(newGeoJson: string): Promise;\r\n updateProperties(newValues: any, schemaColumns: ISchemaColumn[]): Promise;\r\n deleteItem(): Promise ;\r\n}\r\n/**\r\n * An interface to describe a spatial query response\r\n * @interface\r\n */\r\nexport interface IQueryResponse {\r\n /**\r\n * @property {IItem[]} [foundItems] The items found during this search\r\n */\r\n foundItems?: IGeognoSISItem[];\r\n /**\r\n * @property {string} [next] The url to get the next page of results\r\n */\r\n next?: string;\r\n /**\r\n * @property {string} name The name of the layer these results are from\r\n */\r\n name: string;\r\n}\r\n/**\r\n * An interface to perform a spatial query\r\n * @interface\r\n */\r\nexport interface IQueryHelper {\r\n /**\r\n * Perform a query.
\r\n * @public\r\n * @param {ol.Map} map - The open layers map.\r\n * @param {IExpressionBuilder} expressionBuilder - The SIS expression builder to create the expression with.\r\n * @param {number} maxFeaturesToGet - The maximum number of features to return from the query.\r\n * @param {number} startPosition - The start position to get items from.\r\n * @param {Array} [queryBounds] - Limit the query to these bounds, the bounds must be in the same projection as the map. If not supplied the current map extents will be used.\r\n * @param {boolean} ignoreBbox - Optional parameter to remove the bbox option from the expression\r\n * @param {AbortController} abort - Optional parameter to abort the request\r\n * @returns {Promise} A chainable promise containing the results\r\n */\r\n findItems(map: any, expressionBuilder: IExpressionBuilder, maxFeaturesToGet: number, startPosition: number, queryBounds?: number[], ignoreBbox?: boolean, abort?: AbortController): Promise;\r\n}\r\n/**\r\n * A map position\r\n * @interface\r\n */\r\nexport interface IMapPosition {\r\n /**\r\n * @public\r\n * @property {ILocation} location The location\r\n */\r\n location: ILocation;\r\n /**\r\n * @public\r\n * @property {number} zoom The zoom level for this position\r\n */\r\n zoom: number;\r\n /**\r\n * @public\r\n * @property {string} projection The EPSG projection code\r\n */\r\n projection: string;\r\n}\r\nexport interface IRootStateBase {\r\n /**\r\n * @public\r\n * @property {object} ajaxDefaults Defaults for ajax requests\r\n */\r\n ajaxDefaults: any;\r\n /**\r\n * @public\r\n * @property {string} baseUrl The base url for the application\r\n */\r\n baseUrl: string;\r\n /**\r\n * @public\r\n * @property {number} refreshInterval The interval, in minutes, to refresh the token\r\n */\r\n refreshInterval: number;\r\n /**\r\n * @public\r\n * @property {number} token The refresh token\r\n */\r\n token: string;\r\n}\r\n/**\r\n * An interface describing the root application state\r\n * @interface\r\n */\r\nexport interface IRootState extends IRootStateBase{\r\n /**\r\n * @public\r\n * @property {string} mapName The name of the current map\r\n */\r\n mapName: string;\r\n /**\r\n * @public\r\n * @property {string} localStorageName The name of our local storage database\r\n */\r\n localStorageName: string;\r\n /**\r\n * @public\r\n * @property {Object} loadedLanguages Map of loaded translation files\r\n */\r\n loadedLanguages: any;\r\n /**\r\n * @public\r\n * @property {Array} supportedCultures List of supported cultures\r\n */\r\n supportedCultures: ISupportedCulture[];\r\n /**\r\n * @public\r\n * @property {string} currentCulture The name of the current culture\r\n */\r\n currentCulture: string;\r\n /**\r\n * @public\r\n * @property {string} userHelpUrl The user help url \r\n */\r\n userHelpUrl: string;\r\n /**\r\n * @public\r\n * @property {boolean} useDarkText use dark text in the interface instead of white\r\n */ \r\n useDarkText: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} showHumanDialog show interactive dialog on startup of map\r\n */\r\n showHumanDialog: boolean;\r\n /**\r\n * @public\r\n * @property {string} initialRoute The initial route to set the router to\r\n */\r\n initialRoute: string;\r\n /**\r\n * @public\r\n * @property {IUrlParameters} urlParameters The url Parameters\r\n */\r\n urlParameters: IUrlParameters;\r\n /**\r\n * @public\r\n * @property {string} cookiePolycyUrl The url to the cookie policy\r\n */\r\n cookiePolycyUrl: string;\r\n}\r\n\r\nexport interface IUrlParameters {\r\n [extensionId: string]: IUrlParameter;\r\n}\r\nexport interface IUrlParameter {\r\n requiresFullMap: boolean;\r\n parameters: string[];\r\n}\r\n\r\n/**\r\n * An interface describing available cultures\r\n * @interface\r\n */\r\nexport interface ISupportedCulture {\r\n /**\r\n * @public\r\n * @property {string} name The name of the culture, e.g. en-gb\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {string} displayName The display text\r\n */\r\n displayName: string;\r\n}\r\n/**\r\n * An interface for extension state\r\n * @interface\r\n */\r\nexport interface IExtensionState {\r\n /**\r\n * @public\r\n * @property {IExtensionObject[]} extensions Array of extension objects\r\n */\r\n extensions: IExtensionObject[];\r\n /**\r\n * @public\r\n * @property {IExtensionObject} defaultExtension The default extension\r\n */\r\n defaultExtension: IExtensionObject;\r\n /**\r\n * @public\r\n * @property {IExtensionObject} currentExtension The current extension\r\n */\r\n currentExtension: IExtensionObject;\r\n}\r\n/**\r\n * An interface describing the Geognosis state\r\n * @interface\r\n */\r\nexport interface IGeognoSisState {\r\n /**\r\n * @public\r\n * @property {object[]} overlays Array of geognosis overlays\r\n */\r\n overlays: any[];\r\n /**\r\n * @public\r\n * @property {string} sessionId The geognosis session id\r\n */\r\n sessionId: string;\r\n /**\r\n * @public\r\n * @property {string} geognoSisLayerId The id of the geognosis layer\r\n */\r\n geognoSisLayerId: string;\r\n /**\r\n * @public\r\n * @property {string} layerEpsgCode The epsg code for the swd\r\n */\r\n layerEpsgCode: string;\r\n /**\r\n * @public\r\n * @property {Array.} [groups] The overlay groups in the swd\r\n */\r\n groups?: IGeognoSisGroup[];\r\n /**\r\n * @public\r\n * @property {Array.} [tileSize] The size of the tile to request\r\n */\r\n tileSize: number[];\r\n /**\r\n * @public\r\n * @property {number} [sessionTimeout] The time, in milliseconds, that a Geognosis session can be inactive for before it is removed\r\n */\r\n sessionTimeout: number;\r\n\r\n /**\r\n * @public\r\n * @property {string} [layerIndexPrefix] The prefix used for ordering \r\n */\r\n layerIndexPrefix: string;\r\n\r\n /**\r\n * @public\r\n * @property {boolean} [singleTile] Single image vs multiple tiles \r\n */\r\n singleTile: boolean;\r\n /**\r\n * @public\r\n * @property {number} [opacity] Opacity: ranges from 0 (clear) to 1 (solid) \r\n */\r\n opacity: number;\r\n /**\r\n * @public\r\n * @property {Array.} [extent] optional extent of a layer if the user wants to limit the extent; \r\n */\r\n extent?: number[];\r\n\r\n}\r\n\r\nexport interface IProfileMap {\r\n /**\r\n * @public\r\n * @property {string} [name] The name of the map\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {boolean} [allowAnonymous] Can the map be accessed anonymously\r\n */\r\n allowAnonymous: boolean;\r\n}\r\n/**\r\n * An interface describing profile state for a user\r\n */\r\nexport interface IProfileState {\r\n /**\r\n * @public\r\n * @property {String} [name] The name of the user\r\n */\r\n name?: string;\r\n /**\r\n * @public\r\n * @property {IProfileMap[]} maps The maps the user has access to\r\n */\r\n maps: IProfileMap[];\r\n /**\r\n * @public\r\n * @property {boolean} canLogout Can the user logout using the current authentication scheme\r\n */\r\n canLogout: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} canEditProfile Can the user edit their profile using the current authentication scheme\r\n */\r\n canEditProfile: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} showMapSwitcher Can the user view other anonymous maps\r\n */\r\n showMapSwitcher: boolean;\r\n}\r\n/**\r\n * An interface describing a watermark for a map\r\n */\r\nexport interface IWatermark {\r\n /**\r\n * @public\r\n * @property {string} name The name of the watermark\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {string} url The url to the watermark\r\n */\r\n url: string;\r\n /**\r\n * @public\r\n * @property {number} opacity The opacity to set on the watermark\r\n */\r\n opacity: number;\r\n /**\r\n * @public\r\n * @property {number} width The width to set on the watermark\r\n */\r\n width: number;\r\n /**\r\n * @public\r\n * @property {number} height The height to set on the watermark\r\n */\r\n height: number;\r\n}\r\n/**\r\n * An interface describing the current map state\r\n * @interface\r\n */\r\nexport interface IMapState {\r\n /**\r\n * @public\r\n * @property {object} olMap The open layers map\r\n */\r\n olMap: any;\r\n /**\r\n * @public\r\n * @property {ILocation} currentLocation The current selected location\r\n */\r\n currentLocation: ILocation;\r\n /**\r\n * @public\r\n * @property {IMapPosition} initialMapState The initial position for the map\r\n */\r\n initialMapState: IMapPosition;\r\n /**\r\n * @public\r\n * @property {object[]} baseLayers The base layers in the map\r\n */\r\n baseLayers: any[];\r\n /**\r\n * @public\r\n * @property {object} currentBaseLayer The current visible base layer\r\n */\r\n currentBaseLayer: any;\r\n /**\r\n * @public\r\n * @property {object[]} dataLayers The data layers for the map\r\n */\r\n dataLayers: any[];\r\n /**\r\n * @public\r\n * @property {IWatermark} [watermark] The watermark for the map\r\n */\r\n watermark?: IWatermark;\r\n /**\r\n * @public\r\n * @property {number[]} [viewExtent] An array of numbers representing the extent of the view: [minx, miny, maxx, maxy].\r\n */\r\n viewExtent?: number[];\r\n /**\r\n * @public\r\n * @property {number} [currentScale] An estimate of the current scale.\r\n */\r\n currentScale: number;\r\n /**\r\n * @public\r\n * @property {string} mapTitle The map title\r\n */\r\n mapTitle: string;\r\n /**\r\n * @public\r\n * @property {string[]} copyright copyright text to be displayed on the map\r\n */\r\n copyright?: string[];\r\n /**\r\n * @public\r\n * @property {number[]} resolutions Resolutions to constrain the map to\r\n */\r\n resolutions?: number[];\r\n /**\r\n * @public\r\n * @property {string} initialBaseLayer intitial visible base layer\r\n */\r\n initialBaseLayer?: string;\r\n /**\r\n * @public\r\n * @property {string[]} initialDataLayers initial visible data layers\r\n */\r\n initialDataLayers?: string[];\r\n /**\r\n * @public\r\n * @property {string[]} attributions Attributions for all layers and overlays combined - see map.vue where they are created.\r\n */\r\n attributions: string[];\r\n}\r\n/**\r\n *\r\n */\r\nexport interface INavigation {\r\n /**\r\n * @public\r\n * @property {function} [clickHandler] Handler for navigation item click\r\n */\r\n clickHandler?: () => Promise ;\r\n}\r\nexport interface ILinkItem {\r\n /**\r\n * @public\r\n * @property {Location} [to] Route to navigate to on menu click\r\n */\r\n to?: Location;\r\n /**\r\n * @public\r\n * @property {string} [href] Url to navigate to\r\n */\r\n href?: string;\r\n /**\r\n * @public\r\n * @property {string} [target] Specify the target attribute.\r\n */\r\n target?: string;\r\n}\r\n/**\r\n* An interface for a menu item\r\n* @interface\r\n* @public\r\n*/\r\nexport interface INavigationItem extends ILinkItem, INavigation {\r\n /**\r\n * @public\r\n * @property {string} localisationKey The key in the localisation object for the text\r\n */\r\n localisationKey: string;\r\n /**\r\n * @public\r\n * @property {string} [cssClasses] Any css classes to apply\r\n */\r\n cssClasses?: string;\r\n}\r\n/**\r\n * Specifies the supported themes\r\n */\r\nexport enum ThemeEnum {\r\n Light = 0,\r\n Dark = 1\r\n}\r\n/**\r\n * Specifies the supported button sizes\r\n */\r\nexport enum ButtonSizeEnum {\r\n Large = 0,\r\n Small = 1,\r\n Normal = 2\r\n}\r\n/**\r\n * Interface for a navigation button item\r\n */\r\nexport interface INavigationButton extends ILinkItem, INavigation {\r\n /**\r\n * @public\r\n * @property {string} icon The icon to use on the button, one of the material ui icon names see https://materialdesignicons.com/\r\n */\r\n icon: string;\r\n\r\n /**\r\n * @property {string} color Applies specified color to the control - it can be the name of material color (for example success or purple) or css color (#033 or rgba(255, 0, 0, 0.5))\r\n */\r\n color: string;\r\n\r\n /**\r\n * @public\r\n * @property {ThemeEnum} theme The theme to use for the button\r\n */\r\n theme: ThemeEnum;\r\n\r\n /**\r\n * @public\r\n * @property {ButtonSizeEnum} size The size of the button\r\n */\r\n size: ButtonSizeEnum;\r\n\r\n /**\r\n * @public\r\n * @property {boolean} showLoading Should the button show a loading indicator.\r\n */\r\n showLoading: boolean;\r\n\r\n /**\r\n * @public\r\n * @property {string} [cssClasses] Any css classes to apply\r\n */\r\n cssClasses?: string;\r\n\r\n /**\r\n * @public\r\n * @property {string} The aria label key inside en-gb.json, used on the buttons\r\n */\r\n ariaLabelKey: string;\r\n\r\n /**\r\n * @public\r\n * @property {string} The tooltip key inside en-gb.json, used on the buttons\r\n */\r\n tooltipKey: string;\r\n}\r\n/**\r\n * Application ui state\r\n * @interface\r\n * @public\r\n */\r\nexport interface IUIState {\r\n /**\r\n * @public\r\n * @property {string} activityMessage Message for the activity snackbar.\r\n */\r\n activityMessage: string;\r\n /**\r\n * @public\r\n * @property {string} errorMessage Message for the error snackbar.\r\n */\r\n errorMessage: string;\r\n /**\r\n * @public\r\n * @property {string} notificationMessage Message for the notification snackbar.\r\n */\r\n notificationMessage: string;\r\n /**\r\n * @public\r\n * @property {boolean} showNotification Show the notification snackbar.\r\n */\r\n showNotification: boolean;\r\n}\r\n/**\r\n * Map Application ui state\r\n * @interface\r\n * @public\r\n */\r\nexport interface IMapUiState extends IUIState {\r\n /**\r\n * @public\r\n * @property {boolean} navDrawerVisible Is the application navigation drawer visible.\r\n */\r\n navDrawerVisible: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} dialogVisible Is the application dialog visible.\r\n */\r\n dialogVisible: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} appPanelVisible Is the application panel visible.\r\n */\r\n appPanelVisible: boolean;\r\n /**\r\n * @public\r\n * @property {INavigationItem[]} navigationItems Navigation Items for the navigation drawer.\r\n */\r\n navigationItems: INavigationItem[];\r\n /**\r\n * @public\r\n * @property {INavigationButton[]} contentControls Control items for the application content.\r\n */\r\n contentControls: INavigationButton[];\r\n /**\r\n * @public\r\n * @property {INavigationButton[]} speedDialItems Speed dial items.\r\n */\r\n speedDialItems: INavigationButton[];\r\n /**\r\n * @public\r\n * @property {INavigationButton[]} toolstripItems Items for the toolstrip.\r\n */\r\n toolstripItems: INavigationButton[];\r\n /**\r\n * @public\r\n * @property {boolean} checkedIamHuman preventing repeats.\r\n */\r\n checkedIamHuman: boolean;\r\n}\r\nexport interface IInteractiveSnackbar {\r\n message: string;\r\n show: boolean;\r\n buttonText: string;\r\n showActivity: boolean;\r\n callback: () => void;\r\n}\r\n/**\r\n * Specifies the uncapable error code\r\n */\r\nexport enum GeoLocatorErrorEnum {\r\n UnCapable = 10000\r\n}\r\n/**\r\n * An interface to manage cookies\r\n */\r\nexport interface ICookieManager {\r\n /** Creates a cookie\r\n * @public\r\n * @function\r\n * @param {string} name - The identifier of the cookie to be set\r\n * @param {string} value - The value to be stored, this can be a string representation of an object \r\n * @param {mumber} days - The number of days to store this cookie\r\n */\r\n create(name: string, value: string, days: number): void;\r\n /** Reads a cookie\r\n * @public\r\n * @function\r\n * @param {string} name - The identifier of the cookie to be set\r\n * @returns {string} The value of the previously stored cookie or null\r\n */\r\n read(name: string): string;\r\n /** Remove a previously set cookie\r\n * @public\r\n * @function\r\n * @param {string} name - The identifier of the cookie to be erase\r\n */\r\n eraseCookie(name: string): void;\r\n}\r\n/**\r\n * An interface to manage user consent to cookies being stored on their device\r\n */\r\nexport interface ICookieConsent {\r\n /** Indicates whether the user has agreed to cookies being stored. \r\n * @public\r\n * @function\r\n * @returns {boolean} Returns true if the user has accepted cookies, otherwise false\r\n */\r\n haveConsent(): boolean;\r\n /** Called when the user has agreed to cookies being stored \r\n * @public\r\n * @function\r\n */\r\n setConsent(): void;\r\n /** Removes user consent to store cookies \r\n * @export\r\n * @function\r\n */\r\n removeConsent(): void;\r\n}\r\n/**\r\n * An interface describing a bookmark\r\n */\r\nexport interface IBookmark {\r\n /**\r\n * @public\r\n * @property {ILocation} location The location\r\n */\r\n location: ILocation;\r\n /**\r\n * @public\r\n * @property {number} resolution The resolution for this position\r\n */\r\n resolution: number;\r\n /**\r\n * @public\r\n * @property {number} [id] The unique id for the item\r\n */\r\n id?: number;\r\n /**\r\n * @public\r\n * @property {string} name The name of the bookmark\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {boolean} isHome Is this book mark the home bookmark\r\n */\r\n isHome: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} isUserCreated Was this bookmark created by a user\r\n */\r\n isUserCreated: boolean;\r\n}\r\n/**\r\n * An interface for bookmark state\r\n */\r\nexport interface IBookmarkState {\r\n /**\r\n * @public\r\n * @property {IBookmark[]} bookmarks The bookmarks\r\n */\r\n bookmarks: IBookmark[];\r\n /**\r\n * @public\r\n * @property {boolean} initialised Has the state been initialised\r\n */\r\n initialised: boolean;\r\n}\r\n/**\r\n * An interface to describe a Feature info result\r\n * @interface\r\n */\r\nexport interface IFeatureInfoResult\r\n{\r\n /**\r\n * @property {string} name The name of the layer these results are from\r\n */\r\n name: string;\r\n /**\r\n * @property {IItem[]} [features] The features found\r\n */\r\n features?: IItem[];\r\n}\r\n/**\r\n * An interface for creating a component\r\n * @interface \r\n */\r\nexport interface ITemplateFactory {\r\n /**\r\n * Create a component\r\n * @function\r\n * @param {string} name The name of the template \r\n * @param {string} html The html portion of the template\r\n * @param {string} json The json potion of the template\r\n * @param {string[]} props The props that the template will be supplied\r\n * @return {ITemplate} The compiled template\r\n */\r\n createComponent(name:string, html:string, json:string, props:string[]): ITemplate;\r\n}\r\n/**\r\n * An interface for custom templates\r\n * @interface\r\n */\r\nexport interface ITemplate {\r\n /**\r\n * @property {any} component The vue component\r\n */\r\n component: any;\r\n /**\r\n * @property {string} name The name of the template\r\n */\r\n name:string;\r\n}\r\n/**\r\n * Feature information state\r\n * @interface\r\n */\r\nexport interface IFeatureInformationState {\r\n /**\r\n * @property {IFeatureInfoResult[]} results The results of the feature info query\r\n */\r\n results: IFeatureInfoResult[];\r\n /**\r\n * @property {ITemplate[]} templates Array of result templates\r\n */\r\n templates: ITemplate[];\r\n /**\r\n * @property {string} highlightLayer The name of the layer that is currently being highlighted\r\n */\r\n highlightLayer: string;\r\n /**\r\n * @property {ISelectedFeature} selectedFeature The feature selected in the overlay\r\n */\r\n selectedFeature: ISelectedFeature;\r\n}\r\nexport interface ISelectedFeature {\r\n /**\r\n * @property {number} selectedFeatureIndex The index of the feature selected\r\n */\r\n selectedFeatureIndex: number;\r\n /**\r\n * @property {string} selectedFeatureOverlay The name of the overlay the selected feature is on\r\n */\r\n selectedFeatureOverlay: string;\r\n}\r\n/**\r\n * Drawing extension state\r\n * @interface\r\n */\r\nexport interface IDrawingExtensionState {\r\n /**\r\n * @property {string} layerName The name of the drawing layer\r\n */\r\n layerName: string;\r\n /**\r\n * @property {IDrawingStyle} styles The map styles for the drawing extension\r\n */\r\n styles: IDrawingStyle;\r\n /**\r\n * @property {IDrawingInteractions} interactions The map interactions for the drawing extensions\r\n */\r\n interactions: IDrawingInteractions;\r\n /**\r\n * @property {Object} selectedFeatures Collection of selected features\r\n */\r\n selectedFeatures: any;\r\n previousInteraction: any;\r\n showMenu: boolean;\r\n currentStyle: any;\r\n icons: IPreviewIcon[];\r\n selectedIcon: IPreviewIcon;\r\n pointPreviewType: PointPreviewTypeEnum\r\n}\r\nexport enum PointPreviewTypeEnum {\r\n Style= 'style',\r\n Icon='icon'\r\n}\r\n/**\r\n * Drawing styles\r\n * @interface\r\n */\r\nexport interface IDrawingStyle {\r\n /**\r\n * @property {object} polygon The map style for lines and polygons\r\n */\r\n polygon: any;\r\n /**\r\n * @property {object} point The map style for points\r\n */\r\n point: any;\r\n /**\r\n * @property {object} text The map style for text\r\n */\r\n text: any;\r\n /**\r\n * @property {object} select The map style selected items\r\n */\r\n select: any;\r\n}\r\n/**\r\n * Drawing interactions\r\n * @interface\r\n */\r\nexport interface IDrawingInteractions {\r\n /**\r\n * @property {object} polygon The map interaction to draw polygons\r\n */\r\n polygon: any;\r\n /**\r\n * @property {object} line The map interaction to draw lines\r\n */\r\n line: any;\r\n /**\r\n * @property {object} arrow The map interaction to draw an arrow\r\n */\r\n arrow: any;\r\n /**\r\n * @property {object} line The map interaction to draw circles\r\n */\r\n circle: any;\r\n /**\r\n * @property {object} line The map interaction to draw circles with a specified radius\r\n */\r\n radiusCircle: any;\r\n /**\r\n * @property {object} point The map interaction to draw points\r\n */\r\n point: any;\r\n /**\r\n * @property {object} text The map interaction to draw text\r\n */\r\n text: any;\r\n /**\r\n * @property {object} select The map interaction to select a previously drawn feature\r\n */\r\n select: any;\r\n /**\r\n * @property {object} modify The map interaction modify a previously selected feature\r\n */\r\n modify: any;\r\n /**\r\n * @property {object} translate The map interaction to move a previously selected feature\r\n */\r\n translate: any;\r\n}\r\n/**\r\n * A response from a request to get style information\r\n * @interface\r\n */\r\nexport interface IStyleSetup {\r\n /**\r\n * @property {object[]} dashStyle The available dash styles\r\n */\r\n dashStyle: IDashStyle[];\r\n}\r\n/**\r\n * Dash style definition\r\n * @interface\r\n */\r\nexport interface IDashStyle {\r\n /**\r\n * @property {string} id The id for this style\r\n */\r\n id: string;\r\n /**\r\n * @property {number[]} definition The definition for the style see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash for more info\r\n */\r\n definition: number[];\r\n /**\r\n * @property {string} imageUrl Url to an image that represents this style\r\n */\r\n imageUrl: string;\r\n}\r\n/**\r\n * Pdf state\r\n * @interface\r\n */\r\nexport interface IPdfState {\r\n /**\r\n * @property {Object} printTemplates The available print templates\r\n */\r\n printTemplates: IPrintTemplateItem[];\r\n /**\r\n * @property {string} printPreviewSessionId The print session id for the preview\r\n */\r\n printPreviewSessionId: string;\r\n /**\r\n * @property {Object} currentTemplate The current print template\r\n */\r\n currentTemplate: IPrintTemplateItem;\r\n /**\r\n * @property {Boolean} previewOpen Controls the visibility of the template preview dialog\r\n */\r\n previewOpen: boolean;\r\n /**\r\n * @property {Object} annotationLayer The geognosis layer to draw user vectors into\r\n */\r\n annotationLayer: any;\r\n /**\r\n * @property {Object} pdfParams Any additional pdf parameters\r\n */\r\n pdfParams: any;\r\n /**\r\n * @property {string} previewUrl The url to the print preview\r\n */\r\n previewUrl: string;\r\n /**\r\n * @property {string} previewScale The scale required to get a pdf of the current preview\r\n */\r\n previewScale: string;\r\n /**\r\n * @property {number} previewResolution The resolution of the current preview\r\n */\r\n previewResolution: number;\r\n /**\r\n * @property {IPrintScaleBar} previewScalebar The calculated sizes for the scalebar\r\n */\r\n previewScalebar: IPrintScaleBar;\r\n}\r\n/**\r\n * A print template item\r\n * @interface\r\n */\r\nexport interface IPrintTemplateItem {\r\n /**\r\n * @property {string} displayName The display name for this item\r\n */\r\n displayName: string;\r\n /**\r\n * @property {string} name The unique name for this item\r\n */\r\n name: string;\r\n /**\r\n * @property {Object} [children] The child items\r\n */\r\n children?: IPrintTemplateItem[];\r\n /**\r\n * @property {Object} [prompts] The prompt items for this template\r\n */\r\n prompts?: IPrintTemplatePrompt[];\r\n /**\r\n * @property {string} [paperSize] The size of the paper, e.g. A3, A4, etc\r\n */\r\n paperSize?: string;\r\n /**\r\n * @property {boolean} [landscape] The orientation of the paper\r\n */\r\n landscape?: boolean;\r\n /**\r\n * @property {number[]} [mapFrameSize] The size of the map frame\r\n */\r\n mapFrameSize?: number[];\r\n /**\r\n * @property {number[]} [mapFrameOrigin] The origin of the map frame\r\n */\r\n mapFrameOrigin?: number[];\r\n}\r\nexport interface IPrintTemplatePrompt {\r\n /**\r\n * @property {string} name The name of the prompt\r\n */\r\n name: string;\r\n /**\r\n * @property {string} text The text for the prompt\r\n */\r\n text: string;\r\n}\r\nexport interface IThemeLegendSize {\r\n /**\r\n * @property {number} width The width of a legend\r\n */\r\n width: number;\r\n /**\r\n * @property {number} height The height of a legend\r\n */\r\n height: number; \r\n}\r\nexport interface IPrintScaleBar {\r\n /**\r\n * @property {number} printTemplateWidth The actual width of the scale bar to be drawn on the print template\r\n */\r\n printTemplateWidth: number;\r\n /**\r\n * @property {number} width The width value of the scale bar\r\n */\r\n width: number;\r\n}\r\n/**\r\n * An interface to represent a key value pair\r\n */\r\nexport interface IKeyValue {\r\n /**\r\n * @property {string} key The key\r\n */\r\n key: string;\r\n /**\r\n * @property {Object} value The value\r\n */\r\n value: any;\r\n}\r\n/**\r\n * An interface that describes a theme\r\n * @interface\r\n */\r\nexport interface ITheme {\r\n /**\r\n * @property {number} index The index of the theme\r\n */\r\n index: number;\r\n /**\r\n * @property {string} name The title for the theme\r\n */\r\n title: string;\r\n /**\r\n * @property {string} type The type of theme\r\n */\r\n type: string;\r\n /**\r\n * @property {boolean} disabled Is the theme disabled\r\n */\r\n disabled: boolean;\r\n /**\r\n * @property {boolean} [disabled] Is the theme added by the user\r\n */\r\n userAdded?: boolean;\r\n /**\r\n * @property {Object} [components] The components that make up this theme\r\n */\r\n components?: IThemeComponent[];\r\n /**\r\n * Sets the disabled state of the theme\r\n * @export\r\n * @param {boolean} disabled The required state to be set\r\n * @returns {Promise} A chainable promise\r\n */\r\n setDisabled(disabled: boolean): Promise;\r\n /**\r\n * Gets the base url to the theme legend\r\n * @export\r\n * @returns {string} the url\r\n */\r\n themeLegendUrl();\r\n /**\r\n * @property {INewTheme} [definition] The definition used to create the theme\r\n */\r\n definition?: INewTheme;\r\n}\r\n/**\r\n * An interface that describes a theme component\r\n * @interface\r\n */\r\nexport interface IThemeComponent {\r\n /**\r\n * @property {number} index The index of the component\r\n */\r\n index: number;\r\n /**\r\n * @property {string} name The title for the component\r\n */\r\n title: string;\r\n /**\r\n * @property {boolean} disabled Is the component disabled\r\n */\r\n disabled: boolean;\r\n /**\r\n * Sets the disabled state of the component\r\n * @export\r\n * @param {boolean} disabled The required state to be set\r\n * @returns {Promise} A chainable promise \r\n */\r\n setDisabled(disabled: boolean): Promise;\r\n}\r\n/**\r\n * An interface that describes a group of overlays in a GeognoSIS http layer\r\n * @interface\r\n */\r\nexport interface IGeognoSisGroup {\r\n /**\r\n * @property {number} start The index of the first overlay in the group\r\n */\r\n start: number;\r\n /**\r\n * @property {number} end The index of the last overlay in the group\r\n */\r\n end: number;\r\n /**\r\n * @property {string} name The name of the group\r\n */\r\n name: string;\r\n}\r\nexport interface IFontSizeSelectorConfig {\r\n min: number;\r\n max: number;\r\n step:number;\r\n}\r\nexport interface IListItem {\r\n displayName: string;\r\n children?:IListItem[];\r\n}\r\nexport interface IOverlayListItem extends IListItem{\r\n imageUrl: string;\r\n layer: any;\r\n}\r\nexport interface IThemeListItem extends IListItem {\r\n theme: ITheme;\r\n}\r\nexport interface IGroupListItem extends IListItem {\r\n group: IGeognoSisGroup;\r\n}\r\nexport interface INewThemeComponent {\r\n propertyMap: {};\r\n}\r\nexport interface INewTheme {\r\n type: string;\r\n components?: INewThemeComponent[];\r\n propertyMap?: {};\r\n index?: number;\r\n}\r\nexport interface IKeyValuePair {\r\n key: string;\r\n value: any;\r\n}\r\n/**\r\n * Constructor to use for the client search object\r\n * @interface\r\n */\r\nexport interface ISearchConstructor {\r\n new(config: ISearchConfig): ISearch;\r\n}\r\n/**\r\n * Extended configuration options\r\n */\r\nexport interface IExtendedSearchConfig {\r\n /**\r\n * @public\r\n * @property {function} searchConstructor The constructor to use to create the ISearch object\r\n */\r\n searchConstructor: ISearchConstructor;\r\n\r\n [keys: string]: any;\r\n}\r\n/**\r\n * Configuration for a search\r\n * @interface\r\n */\r\nexport interface ISearchConfig {\r\n /**\r\n * @public\r\n * @property {string} name The name of the search\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {string} id The unique id for the search\r\n */\r\n id: string;\r\n /**\r\n * @public\r\n * @property {string} searchEndpoint The endpoint where the search will be performed\r\n */\r\n searchEndpoint: string;\r\n /**\r\n * @public\r\n * @property {IExtendedSearchConfig} extendedConfiguration Extended search configuration to create the search object\r\n */\r\n extendedConfiguration: IExtendedSearchConfig;\r\n /**\r\n * @public\r\n * @property {IAjax} ajax The IAjax object to query the data source with\r\n */\r\n ajax: IAjax;\r\n /**\r\n * @public\r\n * @property {number} zoomLevel The zoom level to go to when a result is selected\r\n */\r\n zoomLevel: number;\r\n}\r\n/**\r\n * A result for a search\r\n * @interface\r\n */\r\nexport interface ISearchResult {\r\n /**\r\n * @public\r\n * @property {number} x The x coordinate for the result\r\n */\r\n x: number;\r\n /**\r\n * @public\r\n * @property {number} y The y coordinate for the result\r\n */\r\n y: number;\r\n /**\r\n * @public\r\n * @property {string} result The result text to display\r\n */\r\n result: string;\r\n /**\r\n * @public\r\n * @property {Map} [additionalColumns] key value pairs of additional results\r\n */\r\n additionalColumns?: Map;\r\n /**\r\n * @public\r\n * @property {ISearchResultAction} [action] Defines an action to be perfomed when a result is clicked\r\n */\r\n action?: ISearchResultAction;\r\n\r\n}\r\nexport interface ISearchResultAction {\r\n /**\r\n * The action to perform\r\n * @param result\r\n * @returns\r\n */\r\n customClickHandler?: (result: ISearchResult) => Promise; \r\n /**\r\n * @public\r\n * @property {string} [icon] The icon to display\r\n */\r\n icon?: string;\r\n}\r\n/**\r\n * A response from a search\r\n * @interface\r\n */\r\nexport interface ISearchResponse {\r\n /**\r\n * @public\r\n * @property { ISearchResult[]} [results] The results od the search\r\n */\r\n results?: ISearchResult[];\r\n /**\r\n * @public\r\n * @property { boolean} moreAvailable Are there more results available\r\n */\r\n moreAvailable: boolean;\r\n /**\r\n * @public\r\n * @property { number} crs The projection the results are in\r\n */\r\n crs: number;\r\n /**\r\n * @public\r\n * @property { boolean} errorState Did an error occur during the search\r\n */\r\n errorState: boolean;\r\n /**\r\n * @public\r\n * @property {string} id The unique id for the search\r\n */\r\n id: string;\r\n /**\r\n * @public\r\n * @property {string} name The name of the search\r\n */\r\n name: string;\r\n}\r\n/**\r\n * A search interface to get results back from a data source\r\n * @interface\r\n */\r\nexport interface ISearch {\r\n /**\r\n * Perform a search on a data source\r\n * @function\r\n * @param {string} filter The search filter\r\n * @param {number} start The index of where to start the search\r\n * @param {number} noOfResultsToGet The amount of results to get in this search\r\n * @returns {Promise} A chainable promise containing the results\r\n */\r\n search: (filter: string, start: number, noOfResultsToGet: number) => Promise;\r\n /**\r\n * @public\r\n * @property {string} id The unique id for the search\r\n */\r\n id: string;\r\n /**\r\n * @public\r\n * @property {string} name The name of the search\r\n */\r\n name: string;\r\n}\r\n/**\r\n * A factory interface to create ISearch objects\r\n * @interface\r\n */\r\nexport interface ISearchFactory {\r\n /**\r\n * Creates a search object\r\n * @function\r\n * @param {ISearchConfig} config The configuration for the search\r\n * @returns {ISearch} A configured search\r\n */\r\n createSearch(config: ISearchConfig): ISearch;\r\n}\r\nexport interface IManagerOptions {\r\n Miniature: string;\r\n}\r\n/**\r\n * An interface describimg a map summary\r\n * @interface\r\n */\r\nexport interface IMapSummary {\r\n /**\r\n * @public\r\n * @property {string} name The name of the map\r\n */\r\n name: string;\r\n /**\r\n * @public\r\n * @property {string} description A description for the map\r\n */\r\n description: string;\r\n\r\n managerOptions: IManagerOptions;\r\n}\r\n/**\r\n * An interface for the password rules\r\n * @interface\r\n * */\r\nexport interface IResetPasswordRulesModel {\r\n /**\r\n * @public\r\n * @property {string} userName The name of the user to reset the password\r\n */\r\n userName: string;\r\n /**\r\n * @public\r\n * @property {string} code TThe reset code\r\n */\r\n code: string;\r\n /**\r\n * @public\r\n * @property {number} minLength The minimum length of the password\r\n */\r\n minLength: number;\r\n /**\r\n * @public\r\n * @property {boolean} requireDigit Require the password to contain a digit\r\n */\r\n requireDigit: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} requireLowercase Require the password to have a lower case character\r\n */\r\n requireLowercase: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} requireNonAlphanumeric Require the password to have a non alphanumeric character\r\n */\r\n requireNonAlphanumeric: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} require Require the password to have an uppercase character\r\n */\r\n requireUppercase: boolean;\r\n}\r\n/**\r\n * An interface to describe a colour\r\n * @interface\r\n */\r\nexport interface IPreviewColour {\r\n /**\r\n * @public\r\n * @property {number} r The red component of the colour\r\n */\r\n r: number;\r\n /**\r\n * @public\r\n * @property {number} g The green component of the colour\r\n */\r\n g: number;\r\n /**\r\n * @public\r\n * @property {number} b The blue component of the colour\r\n */\r\n b: number;\r\n /**\r\n * @public\r\n * @property {number} a The alpha channel transparency of the colour\r\n */\r\n a: number;\r\n\r\n}\r\n/**\r\n * In interface to describe a stroke style\r\n * @interface\r\n */\r\nexport interface IPreviewStroke extends IPreviewColour {\r\n /**\r\n * @public\r\n * @property {number} w The width of the stroke\r\n */\r\n w: number;\r\n /**\r\n * @public\r\n * @property {number[]} [dash] Line dash pattern\r\n */\r\n dash?: number[];\r\n /**\r\n * @public\r\n * @property {string} [lineCap] Line cap style\r\n */\r\n lineCap?: string;\r\n /**\r\n * @public\r\n * @property {string} [lineJoin] Line join style\r\n */\r\n lineJoin?: string;\r\n}\r\n/**\r\n* An interface to describe a text style\r\n* @interface\r\n*/\r\nexport interface IPreviewText {\r\n /**\r\n * @public\r\n * @property {string} font The font for the text\r\n */\r\n font: string;\r\n /**\r\n * @public\r\n * @property {string} text The test to display\r\n */\r\n text: string;\r\n}\r\n/**\r\n * An interface to describe a text style\r\n * @interface\r\n */\r\nexport interface IPreviewPoint {\r\n /**\r\n * @public\r\n * @property {number} radius The radius of the point\r\n */\r\n radius: number;\r\n /**\r\n * @public\r\n * @property {IPreviewIcon[]} icons The icons that can be used for the point\r\n */\r\n icons?: IPreviewIcon[];\r\n}\r\nexport interface IPreviewIcon {\r\n id: string;\r\n name: string;\r\n offsetX: number;\r\n offsetY: number;\r\n}\r\nexport interface IPreviewIconWithImage extends IPreviewIcon {\r\n image: HTMLImageElement;\r\n}\r\n/**\r\n * An interface to describe a preview style\r\n * @interface\r\n */\r\nexport interface IPreviewStyle {\r\n /**\r\n * @public\r\n * @property {IPreviewStroke} stroke The stroke for the style\r\n */\r\n stroke: IPreviewStroke;\r\n /**\r\n * @public\r\n * @property {IPreviewColour} fill The fill for the style\r\n */\r\n fill: IPreviewColour;\r\n /**\r\n * @public\r\n * @property {IPreviewText} [text] The text for the style\r\n */\r\n text?: IPreviewText;\r\n /**\r\n * @public\r\n * @property {IPreviewPoint} [point] The point for the style\r\n */\r\n point?: IPreviewPoint;\r\n}\r\n\r\n/** TODO: This interface is duplicated in the Editing extension's abstractions. Amend the Editing extension to point here instead? */\r\nexport interface IEditingPreviewStyle { \r\n point: IPreviewStyle;\r\n polygon: IPreviewStyle;\r\n}\r\n\r\nexport interface IPostgisManagerState {\r\n\r\n}\r\nexport interface ISQLServerManagerState {\r\n\r\n}\r\nexport interface IOracleManagerState {\r\n\r\n}\r\nexport interface IOSManagerState {\r\n \r\n}\r\nexport interface IAAState {\r\n\r\n}\r\nexport interface ICulture extends ISupportedCulture{\r\n data: object;\r\n}\r\nexport interface ICultureCache {\r\n [type: string]: ICulture;\r\n}\r\nexport interface ICultureState {\r\n cache: ICultureCache;\r\n currentCulture: ICulture;\r\n allowedCultures: ISupportedCulture[];\r\n}\r\nexport interface INewCulture extends ISupportedCulture{\r\n image: File;\r\n data: File;\r\n}\r\nexport interface IFileEvent {\r\n files: File[];\r\n onError: (message: string) => void;\r\n clearErrors: () => void;\r\n}\r\nexport interface IFileInfo {\r\n id: string;\r\n name: string;\r\n url: string;\r\n}\r\nexport interface ITableHeader {\r\n text: string;\r\n value: string;\r\n align: string;\r\n sortable: boolean;\r\n type: number;\r\n typeName: string;\r\n sort?: (a: any, b: any) => number;\r\n closable: boolean;\r\n filterable: boolean;\r\n allowedFilters: FilterTypeEnum;\r\n}\r\nexport enum FilterTypeEnum {\r\n None = 0,\r\n Contains = 1, //000001\r\n Equals = 1 << 1, //000010\r\n GreaterThan = 1 << 2, //000100\r\n GreaterThanEquals = 1 << 3, //001000\r\n LessThan = 1 << 4, //010000\r\n LessThanEquals = 1 << 5, //100000\r\n}\r\nexport interface ITableFilter {\r\n filterType: FilterTypeEnum;\r\n searchColumn: ITableHeader;\r\n value: any;\r\n}\r\n\r\n/**\r\n * An interface to describe what content should be passed into the about component\r\n * @interface\r\n */\r\nexport interface IAboutContent {\r\n /**\r\n * @public\r\n * @property {string} title Is the title of about content\r\n */\r\n title: string,\r\n /**\r\n * @public\r\n * @property {string} titleDescription Is the title description of about content\r\n */\r\n titleDescription: string \r\n}\r\n\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ILocation, IPositionTransformer, GeoLocatorErrorEnum } from '../../../../CommonScripts/Abstractions';\r\nimport Vuex from 'vuex';\r\n/**\r\n* Encapsulates the browser geolocation api \r\n*/\r\nexport class Geolocator {\r\n /**\r\n * @oublic\r\n * @property {object} positionOptions - Geolocation PositionOptions\r\n * @memberof Cadcorp.Web.Core.GeoLocator#\r\n */\r\n positionOptions: PositionOptions;\r\n /**\r\n * @private\r\n * @property {boolean} m_active - True if the control currently active\r\n */\r\n private m_active: boolean;\r\n\r\n /**\r\n * @constructor\r\n * @public\r\n * @param { PositionOptions } positionOptions options for the Location api.\r\n */\r\n constructor(positionOptions: PositionOptions) {\r\n this.positionOptions = positionOptions;\r\n this.m_active = false;\r\n }\r\n\r\n /**\r\n * Check HTML5 browser compatibility.\r\n * @public\r\n * @returns {boolean} If true, HTML5 geolocation is available.\r\n */\r\n available(): boolean {\r\n return ('geolocation' in navigator);\r\n }\r\n\r\n /**\r\n * Activates the GeoLocator. Attempt to use HTML5 GeoLocation, triggering relevant events.\r\n * @public\r\n */\r\n activate(): Promise {\r\n var retVal = null;\r\n if (this.available()) {\r\n retVal = new Promise(\r\n (resolve, reject) =>\r\n navigator.geolocation.getCurrentPosition(resolve, reject, this.positionOptions));\r\n }\r\n else {\r\n retVal = Promise.reject({ code: GeoLocatorErrorEnum.UnCapable});\r\n }\r\n return retVal;\r\n }\r\n /**\r\n * Create a GeoLocationPosition object.\r\n * @public\r\n * @param {number} lon The longitude returned from the geolocation api\r\n * @param {number} lat The latitude returned from the geolocation api\r\n * @param {string} epsg The epsg code for the coordinates returned from the geolocation api\r\n * @returns {ILocation} An object that implements ILocation\r\n */\r\n public createLocation(lon:number, lat: number, epsg : string): ILocation{\r\n return {\r\n x: lon,\r\n y: lat,\r\n epsgCode: epsg\r\n };\r\n }\r\n}\r\n\r\nexport class OlCoordPositionTransformer implements IPositionTransformer {\r\n constructor() {\r\n }\r\n transform(location : ILocation) :any {\r\n return [location.x, location.y];\r\n }\r\n}\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ITemplateFactory, ITemplate } from '../../../../CommonScripts/Abstractions';\r\nimport Vue from 'Vue';\r\nimport {removeInvalidJavascriptChars} from './Utils';\r\n/**\r\n* Create vue components from html and json\r\n* @public\r\n*/\r\nexport class TemplateFactory implements ITemplateFactory {\r\n /**\r\n * @inheritdoc \r\n */\r\n createComponent(name: string, html: string, json: string, props:string[]): ITemplate {\r\n let compiledTemplate = null;\r\n let vueComponent: ITemplate = null;\r\n try {\r\n compiledTemplate = Vue.compile(html);\r\n }\r\n catch (err) {\r\n console.error(`failed to compile template ${name}`);\r\n console.error(`error : ${err.toString()}`);\r\n }\r\n if (compiledTemplate !== null) {\r\n let logic = null;\r\n if (json)\r\n try {\r\n logic = JSON.parse(json,\r\n (key, value) => {\r\n let retVal = null;\r\n if (value &&\r\n typeof value === 'string' &&\r\n value.substr(0, 8) === 'function') {\r\n const startBody = value.indexOf('{') + 1;\r\n const endBody = value.lastIndexOf('}');\r\n const startArgs = value.indexOf('(') + 1;\r\n const endArgs = value.indexOf(')');\r\n\r\n retVal = new Function(value.substring(startArgs, endArgs),\r\n value.substring(startBody, endBody));\r\n } else\r\n retVal = value;\r\n\r\n return retVal;\r\n });\r\n if (!logic) {\r\n logic = {};\r\n }\r\n logic.render = compiledTemplate.render;\r\n logic.staticRenderFns = compiledTemplate.staticRenderFns;\r\n logic.name = `t_${removeInvalidJavascriptChars(name)}`;\r\n logic.props = props;\r\n vueComponent = { name: name, component: Vue.extend(logic) };\r\n\r\n }\r\n catch (logicErr) {\r\n console.error(`failed to parse logic for template ${name}`);\r\n console.error(`error : ${logicErr.toString()}`);\r\n }\r\n }\r\n return vueComponent;\r\n }\r\n}\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ITheme, IThemeComponent, IAjax, IEventSource, INewTheme } from '../../../../CommonScripts/Abstractions';\r\nimport { Events } from '../Core/Cadcorp.Web.Core.Events';\r\n\r\n/**\r\n* Represents a theme for an overlay served from the GeognoSIS http interface\r\n* @public\r\n*/\r\nexport class Theme implements ITheme, IEventSource {\r\n\r\n /**\r\n * @inheritdoc \r\n */\r\n index: number;\r\n /**\r\n * @inheritdoc\r\n */\r\n title: string;\r\n /**\r\n * @inheritdoc\r\n */\r\n type: string;\r\n /**\r\n * @inheritdoc\r\n */\r\n disabled: boolean;\r\n /**\r\n * @inheritdoc\r\n */\r\n userAdded?: boolean;\r\n /**\r\n * @inheritdoc\r\n */\r\n definition?: INewTheme;\r\n /**\r\n * @inheritdoc\r\n */\r\n components: IThemeComponent[];\r\n /**\r\n * @property {string|null} m_sessionId The current session id\r\n * @private\r\n */\r\n private m_sessionId: string;\r\n /**\r\n * @property {string|null} baseUrl The base url for Geognosis\r\n * @private\r\n */\r\n private m_baseUrl: string;\r\n /**\r\n * @property {IAjax} m_ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @private\r\n */\r\n private m_ajaxWrapper: IAjax;\r\n /**\r\n * @property {string} m_layerId The unique id for the swd this layer is in\r\n * @private\r\n */\r\n private m_layerId: string;\r\n /**\r\n * @property {string} m_mapName The name of the map\r\n * @private\r\n */\r\n private m_mapName: string;\r\n /**\r\n * @property {number} m_overlayIndex The position in the list of overlays\r\n * @private\r\n */\r\n private m_overlayIndex: number;\r\n /**\r\n * @property {Cadcorp.Core.Events} m_events The position in the list of overlays\r\n * @private\r\n */\r\n private m_events: Events;\r\n /**\r\n * Initialises a new instance of Theme\r\n * @constructor\r\n * @export\r\n */\r\n constructor(baseUrl: string,\r\n sessionId: string,\r\n overlayIndex: number,\r\n ajaxWrapper: IAjax,\r\n layerId: string,\r\n mapName: string) {\r\n this.m_baseUrl = baseUrl;\r\n this.m_sessionId = sessionId;\r\n this.m_overlayIndex = overlayIndex;\r\n this.m_ajaxWrapper = ajaxWrapper;\r\n this.m_layerId = layerId;\r\n this.m_mapName = mapName;\r\n this.m_events = new Events({owner:this});\r\n }\r\n /**\r\n * @inheritdoc \r\n */\r\n on(type: string, listener: (eventData: any) => boolean) {\r\n this.m_events.on(type, listener);\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n un(type: string, listener: (eventData: any) => boolean) {\r\n this.m_events.un(type, listener);\r\n }\r\n setDisabled(disabled: boolean): Promise {\r\n //`${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Vector`\r\n var retVal = null;\r\n if (this.disabled !== disabled) {\r\n var url =\r\n `${this.m_baseUrl}GeognoSis/${this.m_mapName}/${this.m_layerId}/Sessions/${this.m_sessionId}/Overlay/${\r\n this.m_overlayIndex}/Theme/${this.index}/disable?disabled=${disabled ? 1 : 0}`;\r\n retVal = this.m_ajaxWrapper.patch(url, null, null)\r\n .then((response) => {\r\n this.disabled = disabled;\r\n if (this.definition)\r\n this.definition.propertyMap[ '_bDisabled&' ] = disabled;\r\n this.m_events.dispatchEvent('changed', { theme: this });\r\n return this;\r\n });\r\n } else\r\n retVal = Promise.resolve(this);\r\n\r\n return retVal;\r\n }\r\n public themeLegendUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlay/{overlayNo:int}/Vector\r\n return `${this.m_baseUrl}GeognoSis/${this.m_mapName}/${this.m_layerId}/Sessions/${this.m_sessionId}/Overlay/${this.m_overlayIndex}/Theme/${this.index}/Legend?${performance.now()}`;\r\n }\r\n}\r\n\r\n/**\r\n *Horizontal Text alignment enum.\r\n */\r\nexport enum HorizontalTextAlignment {\r\n Left = 0,\r\n Right = 2,\r\n Centre=6\r\n}\r\n/**\r\n * Vertical Text alignment enum.\r\n */ \r\nexport enum VerticalTextAlignment {\r\n Top = 0,\r\n Bottom = 2,\r\n Middle = 72\r\n}\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { SchemaColumn } from './SchemaColumn';\r\nimport { IAjax, ITheme, IEventSource, ISchemaColumn, INewTheme, IQueryHelper } from '../../../../CommonScripts/Abstractions';\r\nimport { QueryHelper } from './QueryHelper';\r\nimport { JoinedOverlayQueryHelper } from './JoinedQueryHelper';\r\nimport { Theme } from './Theme';\r\nimport { Events } from '../Core/Cadcorp.Web.Core.Events';\r\n\r\n\r\n/**\r\n* Represents an overlay served from the GeognoSIS http interface\r\n* @public\r\n*/\r\nexport class Overlay implements IEventSource {\r\n /**\r\n * @public\r\n * @property {string} name The name of this overlay\r\n */\r\n public name: string;\r\n private m_visibility: boolean;\r\n /**\r\n * @export\r\n * @property {boolean} visibility The visibility of this overlay, true if this overlay is visible otherwise false\r\n */\r\n get visibility(): boolean { return this.m_visibility; }\r\n\r\n private m_status: LayerStatus;\r\n /**\r\n * @export\r\n * @property {LayerStatus} status The status of the layer.\r\n */\r\n public get status(): LayerStatus { return this.m_status; }\r\n\r\n /**\r\n * @property {object} properties - Map of overlay properties\r\n * @export\r\n */\r\n public properties: object;\r\n /**\r\n * @property {Array.} themes - Array of themes on this overlay\r\n * @private\r\n */\r\n private m_themes: ITheme[];\r\n\r\n /**\r\n * @property {Array. boolean) {\r\n this.m_events.on(type, listener);\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n un(type: string, listener: (eventData: any) => boolean) {\r\n this.m_events.un(type, listener);\r\n }\r\n private getSchemaColumnListUrl(): string {\r\n return this.getSchemaColumnBaseUrl();\r\n }\r\n public getSchemaColumnBaseUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlays/{overlayNo:int}/Schema/Columns\r\n return `${this.getSchemaColumnPropertiesBaseUrl()}s`;\r\n }\r\n public getSchemaColumnPropertiesBaseUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlays/{overlayNo:int}/Schema/Column\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Schema/Column`;\r\n }\r\n public getPropertiesUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlays/{overlayNo:int}\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}`;\r\n }\r\n public getDeleteUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlays/{overlayNo:int}\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}`;\r\n }\r\n public getImageUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlay/{overlayNo:int}/Image\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Image`;\r\n }\r\n public getVectorUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlay/{overlayNo:int}/Vector\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Vector`;\r\n }\r\n public getThemeBaseUrl(): string {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlay/{overlayNo:int}/Vector\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/themes`;\r\n }\r\n\r\n public getItemsUrl(): string {\r\n return `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Items`;\r\n }\r\n\r\n public getQueryUrl(): string {\r\n return `${this.baseUrl}${this.mapName}/Search/GeognoSis/${this.sessionId}/${this.layerId}/${this.overlayIndex}`;\r\n }\r\n\r\n public getNextResultsUrls(): string {\r\n return `${this.baseUrl}${this.mapName}/Search/GeognoSis/${this.sessionId}/${this.layerId}/${this.overlayIndex}/Next`;\r\n }\r\n\r\n /**\r\n * Gets a promise to populate the object from the server\r\n * @param {object} options The options to apply to the ajax request\r\n * @export\r\n * @function\r\n * @returns {Promise} The chainable promise\r\n */\r\n public populate(options): Promise {\r\n const pUrl = this.getPropertiesUrl();\r\n const p = this.ajaxWrapper.get(pUrl, options).\r\n then((response: any) => {\r\n this.setProperties(response.data);\r\n return this;\r\n });\r\n return p;\r\n }\r\n /**\r\n * Removes the overlay from the session\r\n */\r\n public remove(): Promise {\r\n const pUrl = this.getDeleteUrl();\r\n const p = this.ajaxWrapper.delete(pUrl);\r\n return p;\r\n }\r\n /**\r\n * Sets the status of this overlay\r\n * @param {number} newStatus The new overlay status to set, It must be one of the Cadcorp.Web.Entities.GeognoSIS.Constants.LayerStatus constants\r\n * @public\r\n * @return {Promise} A promise object to set the status\r\n */\r\n public setStatus(newStatus: LayerStatus): Promise {\r\n let promise = null;\r\n if (newStatus !== this.status) {\r\n const url = `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${this.overlayIndex}/Status?newStatus=${newStatus}`;\r\n promise = this.ajaxWrapper.patch(url, null, null).\r\n then(() => {\r\n this.m_status = newStatus;\r\n this.m_visibility = this.m_status > LayerStatus.Invisible;\r\n return this;\r\n });\r\n }\r\n else {\r\n promise = Promise.resolve(this);\r\n }\r\n return promise;\r\n }\r\n\r\n /**\r\n * Refreshes the overlay so that WebMap can redraw afresh; needed specifically in the case of View Point layers for tracking points and refreshing; vector layers with spatial indexes don't need this step but there is no way to distinguish \r\n * @public\r\n * @return {Promise} A promise object to set the status\r\n */\r\n public refreshOverlay(): Promise { \r\n const url = `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/RefreshOverlay/${this.overlayIndex}`;\r\n return this.ajaxWrapper.get(url, null); \r\n }\r\n\r\n /**\r\n * Event handler for get properties success\r\n * @function\r\n * @param {Object} returnedData - A data object to populate this overlay from\r\n * @return {Overlay} This overlay\r\n */\r\n public setProperties(returnedData: any) {\r\n this.name = returnedData.name;\r\n this.m_status = returnedData.status;\r\n this.scaleMin = returnedData.scaleMin;\r\n this.scaleMax = returnedData.scaleMax;\r\n this.abstractText = returnedData.abstractText;\r\n this.userAdded = returnedData.userAdded;\r\n this.useVector = returnedData.useVector;\r\n this.vectorStyle = returnedData.vectorStyle;\r\n this.refreshInterval = returnedData.refreshInterval;\r\n\r\n if (returnedData.epsgCode !== 0) {\r\n this.epsgCode = returnedData.epsgCode;\r\n this.errorCondition = false;\r\n }\r\n else {\r\n this.epsgCode = null;\r\n this.errorCondition = true;\r\n }\r\n this.maxStatus = returnedData.maxStatus;\r\n this.ignoreLayer = returnedData.ignoreLayer;\r\n this.metadataUuid = returnedData.metadataUuid;\r\n this.properties = returnedData.properties;\r\n this.attribution = returnedData.attribution;\r\n this.m_visibility = this.m_status > LayerStatus.Invisible;\r\n return this;\r\n }\r\n /** \r\n * @description\r\n * Gets the schema columns for this layer.
\r\n * If the schema columns haven't been retrieved then they are queried asynchronously. This function returns null immediately and events are raised when each schema column has loaded\r\n * @export\r\n * @returns {Promise} A promise that represents an array of schema columns\r\n */\r\n public getSchemaColumns(): Promise {\r\n let retVal = null;\r\n if (this.schema === null) {\r\n const url = this.getSchemaColumnListUrl();\r\n retVal = this.ajaxWrapper.get(url, null).\r\n then(this.processSchemaList.bind(this)).\r\n then(this.processSchemaData.bind(this));\r\n }\r\n else {\r\n retVal = Promise.resolve(this.schema);\r\n }\r\n return retVal;\r\n }\r\n private processSchemaList(response) {\r\n var oArray = response.data;\r\n var pArray = [];\r\n this.schema = [];\r\n\r\n for (var c = 0; c < oArray.length; c++) {\r\n pArray.push(this.ajaxWrapper.get(this.getSchemaColumnPropertiesBaseUrl() + '/' + oArray[c], null));\r\n }\r\n return Promise.all(pArray);\r\n }\r\n private processSchemaData(response) {\r\n this.schema = [];\r\n for (let c = 0; c < response.length; c++) {\r\n response[c].data.columnIndex = c;\r\n this.schema.push(new SchemaColumn(response[c].data));\r\n }\r\n return this.schema;\r\n }\r\n /**\r\n * Gets a configured query helper for this overlay\r\n * @function\r\n * @export\r\n * @returns {CQueryHelper} The new query helper object\r\n */\r\n public getQueryHelper(): IQueryHelper {\r\n let helper = null;\r\n const url = this.getQueryUrl();\r\n const nextUrl = this.getNextResultsUrls();\r\n if (this.properties['WML::HasJoin&'] && this.properties['WML::HasJoin&'] === 1) {\r\n //helper = new Cadcorp.Web.Entities.GeognoSIS.JoinedOverlayQueryHelper({ overlay: this });\r\n helper = new JoinedOverlayQueryHelper(this, this.ajaxWrapper, url, nextUrl, this.epsgCode);\r\n } else {\r\n helper = new QueryHelper({ sessionId: this.sessionId, index: this.overlayIndex, name: this.name }, this.ajaxWrapper, url, nextUrl, this.epsgCode, this.mapName);\r\n }\r\n return helper;\r\n }\r\n /**\r\n * Clears all the features in this overlay\r\n * @function\r\n * @export\r\n * @returns {Promise} The chainable promise\r\n */\r\n clearFeatures() {\r\n const url = this.getItemsUrl();\r\n const promise = this.ajaxWrapper.delete(url, null);\r\n return promise;\r\n }\r\n /**\r\n * Gets the themes for this overlay\r\n * @function\r\n * @export\r\n * @returns {Promise} The chainable promise\r\n */\r\n public getThemes(): Promise {\r\n let retVal: Promise = null;\r\n if (this.m_themes) {\r\n retVal = Promise.resolve(this.m_themes);\r\n }\r\n else {\r\n const url = this.getThemeBaseUrl();\r\n retVal = this.ajaxWrapper.get(url, null)\r\n .then((response) => {\r\n if (response.data && response.data.length > 0) {\r\n this.m_themes = [];\r\n for (let count = 0; count < response.data.length; count++) {\r\n const data = response.data[count];\r\n const theme = new Theme(this.baseUrl, this.sessionId, this.overlayIndex, this.ajaxWrapper, this.layerId, this.mapName);\r\n theme.on('changed', (eventArgs) => {\r\n this.m_events.dispatchEvent('themeChanged', eventArgs);\r\n return true;\r\n });\r\n theme.index = data.index;\r\n theme.disabled = data.disabled;\r\n theme.title = data.title;\r\n theme.type = data.type;\r\n this.m_themes.push(theme);\r\n }\r\n this.m_themes.sort((first: ITheme, second: ITheme) => {\r\n return first.index - second.index;\r\n });\r\n } else\r\n this.m_themes = [];\r\n return this.m_themes;\r\n });\r\n }\r\n\r\n return retVal;\r\n }\r\n /**\r\n * Creates a new theme on this overlay\r\n * @function\r\n * @param {INewTheme} addTheme The new theme to add\r\n * @export\r\n * @returns {Promise} The chainable promise\r\n */\r\n public addTheme(newTheme: INewTheme): Promise {\r\n const url = this.getThemeBaseUrl();\r\n return this.getThemes()//in case the themes haven't been retrieved yet\r\n .then((themes) => {\r\n return this.ajaxWrapper.post(url, newTheme, null);\r\n })\r\n .then((response) => {\r\n let addedTheme = null as ITheme;\r\n if (response.data) {\r\n const data = response.data;\r\n addedTheme = this.createTheme(data, newTheme);\r\n\r\n this.m_themes.push(addedTheme);\r\n }\r\n return addedTheme;\r\n });\r\n }\r\n /**\r\n * removes new theme from this overlay\r\n * @function\r\n * @param {ITheme} aTheme The theme to remove\r\n * @export\r\n * @returns {Promise} The chainable promise\r\n */\r\n public removeTheme(aTheme: ITheme): Promise {\r\n return this.getThemes() //in case the themes haven't been retrieved yet\r\n .then(() => {\r\n const url = `${this.getThemeBaseUrl()}/${aTheme.index}`;\r\n return this.ajaxWrapper.delete(url);\r\n }).then((response) => {\r\n const remaining = this.m_themes.filter((themeElement: ITheme) => {\r\n return themeElement.index !== aTheme.index;\r\n });\r\n this.m_themes = remaining;\r\n //now adjust the index of any themes after the removed one\r\n if (aTheme.index > this.m_themes.length) {\r\n for (let count = aTheme.index; count < this.m_themes.length; count++) {\r\n this.m_themes[count].index--;\r\n if (this.m_themes[count].definition) {\r\n this.m_themes[count].definition.index = this.m_themes[count].index;\r\n }\r\n }\r\n }\r\n return aTheme;\r\n });\r\n }\r\n /**\r\n * Updates a theme on this overlay\r\n * @function\r\n * @param {INewTheme} theme The theme to update\r\n * @export\r\n * @returns {Promise} The chainable promise\r\n */\r\n public updateTheme(theme: INewTheme): Promise {\r\n const url = `${this.getThemeBaseUrl()}/${theme.index}`;\r\n let themes: ITheme[] = null;\r\n return this.getThemes()//in case the themes haven't been retrieved yet\r\n .then((foundThemes) => {\r\n themes = foundThemes;\r\n return this.ajaxWrapper.patch(url, theme, null);\r\n })\r\n .then((response) => {\r\n let newTheme = null as ITheme;\r\n if (response.data) {\r\n const data = response.data;\r\n const updatedTheme = this.createTheme(data, theme);\r\n let index = 0;\r\n var found = this.m_themes.filter((element: ITheme, filterIndex: number, array: ITheme[]) => {\r\n if (element.index === updatedTheme.index)\r\n index = filterIndex;\r\n return element.index === updatedTheme.index;\r\n });\r\n newTheme = updatedTheme;\r\n this.m_themes[index] = updatedTheme;\r\n }\r\n return newTheme;\r\n });\r\n }\r\n private createTheme(themeData: any, definition: INewTheme): Theme {\r\n const theme = new Theme(this.baseUrl,\r\n this.sessionId,\r\n this.overlayIndex,\r\n this.ajaxWrapper,\r\n this.layerId,\r\n this.mapName);\r\n theme.userAdded = true;\r\n theme.on('changed',\r\n (eventArgs) => {\r\n this.m_events.dispatchEvent('themeChanged', eventArgs);\r\n return true;\r\n });\r\n theme.index = themeData.index;\r\n theme.disabled = themeData.disabled;\r\n theme.title = themeData.title;\r\n theme.type = themeData.type;\r\n definition.index = themeData.index;\r\n theme.definition = definition;\r\n return theme\r\n }\r\n public visibleAtScale(scale: number): boolean {\r\n var visible = false;\r\n if (this.scaleMin !== 0) {\r\n visible = this.scaleMin <= scale;\r\n }\r\n else\r\n visible = true;\r\n if (this.scaleMax !== 0) {\r\n visible = visible && (this.scaleMax >= scale);\r\n }\r\n\r\n return visible;\r\n }\r\n}\r\nexport enum LayerStatus {\r\n Invisible = 0,\r\n Visible,\r\n Hittable,\r\n Editable\r\n}\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ISearchFactory, ISearchConfig, ISearch } from '../../../../CommonScripts/Abstractions';\r\n\r\nexport class SearchFactory implements ISearchFactory {\r\n createSearch(config: ISearchConfig): ISearch {\r\n return new config.extendedConfiguration.searchConstructor(config);\r\n }\r\n}\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ISchemaColumn } from '../../../../CommonScripts/Abstractions';\r\n/**\r\n* Represents a schema column for an overlay served from the GeognoSIS http interface\r\n* @public\r\n*/\r\nexport class SchemaColumn implements ISchemaColumn {\r\n /**\r\n * @public\r\n * @property {string} name The name of this schema column, retrieved from the _description$ property\r\n */\r\n name : string;\r\n /**\r\n * @public\r\n * @property {string} expression The expression of this schema column, retrieved from the _formula$ property\r\n */\r\n expression: string;\r\n /**\r\n * @public\r\n * @property {boolean} isMapTip True if this column is defined as a maptip, otherwise false. Retrieved from the _bMapTip& property\r\n */\r\n isMapTip: boolean;\r\n /**\r\n * @public\r\n * @property {boolean} isHidden True if this column is hidden, otherwise false. Retrieved from the _bHidden& property\r\n */\r\n isHidden: boolean;\r\n\r\n /**\r\n * @public\r\n * @property {number} type The type of this schema column. Retrieved from the _type& property\r\n */\r\n type: number;\r\n\r\n /**\r\n * @public\r\n * @property {string} typeName The name for the type of this schema column. Retrieved from the _typeName$ property\r\n */\r\n typeName : string;\r\n /**\r\n * @property {number} columnIndex - The index of this schema\r\n * @public\r\n */\r\n columnIndex: number;\r\n\r\n /**\r\n * Initialises a new instance of SchemaColumn\r\n * @constructor\r\n * @public\r\n * @param {ISchemaColumn} config The configuration for this object\r\n */\r\n constructor(config: ISchemaColumn) {\r\n this.name = config.name;\r\n this.columnIndex = config.columnIndex;\r\n this.expression = config.expression;\r\n this.isHidden = config.isHidden;\r\n this.isMapTip = config.isMapTip;\r\n this.type = config.type;\r\n this.typeName = config.typeName;\r\n }\r\n}\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IAjax, ISchemaColumn, IItem, IGeognoSISItem } from '../../../../CommonScripts/Abstractions';\r\n/**\r\n* Handles queries on individual items.\r\n*/\r\nexport class Item implements IGeognoSISItem{\r\n\r\n /**\r\n * @property {object} id - Item id\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n id: any;\r\n /**\r\n * @property {number} layerIndex - The index of the layer this item is on\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n layerIndex: number;\r\n /**\r\n * @property {string} sessionId - GeognoSIS Session ID\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n sessionId: string;\r\n /**\r\n * @property {string} mapName - Current map name\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n mapName: string;\r\n /**\r\n * @property {object} geometry - Feature geometry\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n geometry: any;\r\n /**\r\n * @property {Object} geoJSON - GeoJSON for the item.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n geoJSON: any;\r\n /**\r\n * @property {Object} properties - Item properties.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n */\r\n properties: any;\r\n /**\r\n * @property {string|null} baseUrl The base url for the application\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public\r\n * @readonly\r\n */\r\n readonly baseUrl: string;\r\n /**\r\n * @property {string} layerId The unique id for the swd this item belongs to\r\n * @public\r\n */\r\n readonly layerId: string;\r\n /**\r\n * @property {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @public\r\n */\r\n readonly ajaxWrapper: IAjax;\r\n /**\r\n * @property {Object} m_lastUpdateProperties - The set of properties from the last successful update.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @private\r\n */\r\n private m_lastUpdateProperties: any;\r\n /**\r\n * @property {Object} m_lastUpdateGeoJSON - GeoJSON from the last successful update.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @private\r\n */\r\n private m_lastUpdateGeoJSON :any;\r\n\r\n /**\r\n * Constructor.\r\n * @param {Object} config - configuration options.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @public \r\n */\r\n constructor(config: any) {\r\n this.properties = config.feature.properties;\r\n this.layerIndex = config.layerIndex;\r\n this.sessionId = config.sessionId;\r\n this.id = config.feature.id;\r\n this.mapName = config.mapName;\r\n this.geometry = config.feature.geometry;\r\n this.baseUrl = config.baseUrl;\r\n this.geoJSON = null;\r\n }\r\n /**\r\n * Update the geometry of this item\r\n * @public\r\n * @param {string} newGeoJson - The string representation of the new geogjson \r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n updateGeometry(newGeoJson: string): Promise {\r\n this.geoJSON = newGeoJson;\r\n var url = this.getUpdateGeometryUrl();\r\n return this.ajaxWrapper.patch(url, this.geoJSON).then((response) => {\r\n return this.geoJSONUpdatedSuccessHandler(response);\r\n }\r\n );\r\n }\r\n /**\r\n * Gets the url to update the geometry\r\n * @protected \r\n * @returns {string} The url\r\n */\r\n protected getUpdateGeometryUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}/${this.id}`;\r\n }\r\n /**\r\n * Gets the url to update the properties\r\n * @protected\r\n * @returns {string} The url\r\n */\r\n protected getUpdatePropetiesUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}/${this.id}/Properties`;\r\n }\r\n /**\r\n * Gets the url to delete the item\r\n * @protected\r\n * @returns {string} The url\r\n */\r\n protected getDeleteUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}/${this.id}`;\r\n }\r\n\r\n /**\r\n * Update the properties of this item\r\n * @public\r\n * @param {object} newValues - The new properties to set on this item \r\n * @param {Array.} schemaColumns - The schema for this layer \r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n updateProperties(newValues: any, schemaColumns: ISchemaColumn[]): Promise{\r\n //{\"PropertyMap\": { \"Description$\":\"new value\" }}\r\n //{\"PropertyMap\": { \"ADate@\":{\"date\":\"yyyy-MM-ddTHH:mm:ss.ssZ\" }}}\r\n var updateObj = {};\r\n var updateRequired = false;\r\n this.m_lastUpdateProperties = this.cloneProperties(this.properties);\r\n //Check to see if there are any updates\r\n for (var c = 0; c < schemaColumns.length; c++) {\r\n var schemaCol = schemaColumns[c];\r\n var newPropVal = null;\r\n var oldValue = null;\r\n if (newValues[schemaCol.name])\r\n newPropVal = newValues[schemaCol.name];\r\n if (schemaCol.type === 11 || schemaCol.type === 8)\r\n oldValue = this.properties[schemaCol.name];\r\n else {\r\n if (this.properties[schemaCol.name]) {\r\n oldValue = this.properties[schemaCol.name][schemaCol.typeName];\r\n }\r\n }\r\n\r\n if (newPropVal !== null && newPropVal !== oldValue) {\r\n\r\n if (schemaCol.type === 11 || schemaCol.type === 8) {\r\n updateObj[schemaCol.expression] = newPropVal;\r\n this.properties[schemaCol.name] = newPropVal;\r\n }\r\n else if (schemaCol.type === 7) {//dates require special treatment\r\n var dateObj = {};\r\n dateObj[schemaCol.typeName] = newPropVal;\r\n this.properties[schemaCol.name] = dateObj;\r\n updateObj[schemaCol.expression] = dateObj;\r\n }\r\n else {\r\n updateObj[schemaCol.expression] = newPropVal;\r\n if (this.properties[schemaCol.name]) {\r\n this.properties[schemaCol.name][schemaCol.typeName] = newPropVal;\r\n }\r\n else {\r\n var objVal = {};\r\n objVal[schemaCol.typeName] = newPropVal;\r\n this.properties[schemaCol.name] = objVal;\r\n }\r\n }\r\n updateRequired = true;\r\n }\r\n }\r\n var retVal;\r\n if (updateRequired) {\r\n var updateJson = {\"PropertyMap\":' + JSON.stringify(updateObj) + '};\r\n var url = this.getUpdatePropetiesUrl();\r\n retVal = this.ajaxWrapper.patch(url, updateJson).then((response) => {\r\n return this.propertiesUpdatedSuccessHandler(response);\r\n }\r\n );\r\n }\r\n else {\r\n retVal = Promise.resolve(this);\r\n }\r\n return retVal;\r\n }\r\n /**\r\n * Perform a shallow clone of the supplied object\r\n * @private\r\n * @param {object} objectToClone - The object to clone \r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n * @returns {Object} The newly created object\r\n */\r\n protected cloneProperties(objectToClone) {\r\n var retVal = {};\r\n for (var prop in objectToClone) {\r\n if (objectToClone.hasOwnProperty(prop)) {\r\n var property = objectToClone[prop];\r\n if (typeof property === 'object') {\r\n retVal[prop] = this.cloneProperties(property);\r\n }\r\n else {\r\n retVal[prop] = objectToClone[prop];\r\n }\r\n }\r\n }\r\n return retVal;\r\n }\r\n /**\r\n * Success Handler for the update properties.\r\n * @protected\r\n * @param {Object} eventArgs - item properties data object.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n protected propertiesUpdatedSuccessHandler(eventArgs) {\r\n this.m_lastUpdateProperties = this.cloneProperties(this.properties);\r\n return this;\r\n }\r\n /**\r\n * Success Handler for the update geometry.\r\n * @protected\r\n * @param {Object} eventArgs - item properties data object.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n protected geoJSONUpdatedSuccessHandler(eventArgs) : Item {\r\n this.m_lastUpdateGeoJSON = this.geoJSON;\r\n return this;\r\n }\r\n /**\r\n * Delete this item\r\n * @public\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n deleteItem(): Promise {\r\n var url = this.getDeleteUrl();\r\n\r\n return this.ajaxWrapper.delete(url);\r\n }\r\n /**\r\n * @public\r\n * Destroys this object.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.Item#\r\n */\r\n destroy() {\r\n this.properties = null;\r\n this.layerIndex = null;\r\n this.sessionId = null;\r\n this.id = null;\r\n this.mapName = null;\r\n this.geometry = null;\r\n }\r\n};\r\n/**\r\n * Extends Cadcorp.Web.Entities.GeognoSIS.CursorItem\r\n * @class \r\n * @public\r\n * @public\r\n * @extends Cadcorp.Web.Entities.GeognoSIS.CursorItem#\r\n */\r\nexport class CursorItem extends Item {\r\n /**\r\n * @property {string} m_cursorId - cursor id.\r\n * @private\r\n */\r\n private m_cursorId: string;\r\n /**\r\n * Constructor for Cadcorp based classes.\r\n * @param {Object} config - configuration object.\r\n * @memberof Cadcorp.Web.Entities.GeognoSISCursorItem#\r\n * @private\r\n * @function\r\n */\r\n constructor(config: any) {\r\n super(config);\r\n this.m_cursorId = config.cursorId;\r\n }\r\n /**\r\n *@inheritdoc \r\n */\r\n protected getUpdateGeometryUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}.${this.id}`;\r\n }\r\n /**\r\n *@inheritdoc\r\n */\r\n protected getUpdatePropetiesUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}.${this.id}/Properties`;\r\n }\r\n /**\r\n *@inheritdoc\r\n */\r\n protected getDeleteUrl(): string {\r\n return `${this.baseUrl}/${this.mapName}/${this.layerId}/Search/GeognoSis/${this.sessionId}/${this.layerIndex}.${this.id}`;\r\n }\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Overlay } from './Overlay';\r\nimport { IAjax, IExpressionBuilder, IQueryResponse, IQueryHelper } from '../../../../CommonScripts/Abstractions';\r\nimport { Item } from './Item';\r\ndeclare const ol: any;\r\n/**\r\n* Handles queries on individual GeognoSIS overlays.\r\n*/\r\nexport class QueryHelper implements IQueryHelper{\r\n /**\r\n * @property {object} overlayInfo - Information about the overlay.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n * @private\r\n */\r\n protected overlayInfo: { sessionId: string, index: number, name: string };\r\n /**\r\n * @property {string} mapName - The name of the map.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n * @public\r\n */\r\n readonly mapName: string;\r\n\r\n /**\r\n * @property {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @private\r\n */\r\n protected ajaxWrapper: IAjax;\r\n /**\r\n * @property {string} queryEndpoint The url to use to perform the query\r\n * @public\r\n */\r\n readonly queryEndpoint: string;\r\n /**\r\n * @property {string} nexyFeaturesEndpoint The url to use to get the next features in the results set\r\n * @public\r\n */\r\n readonly nextFeaturesEndpoint: string;\r\n /**\r\n * @property {number} epsgCode The epsgcode of the layer to perform the query on\r\n * @public\r\n */\r\n readonly epsgCode: number;\r\n /**\r\n * Constructor for Cadcorp based classes.\r\n * @constructor\r\n * @param {object} overlayInfo Information about the overlay\r\n * @param {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @param {string} queryEndpoint The url to use to perform the query\r\n * @param {number} epsgCode The epsgcode of the layer to perform the query on\r\n * @param {string} mapName The name of the map\r\n * @public\r\n */\r\n constructor(overlayInfo: { sessionId: string, index: number, name: string }, ajaxWrapper: IAjax, queryEndpoint: string, nextFeaturesEndpoint: string, epsgCode: number, mapName:string) {\r\n this.overlayInfo = overlayInfo;\r\n this.ajaxWrapper = ajaxWrapper;\r\n this.queryEndpoint = queryEndpoint;\r\n this.epsgCode = epsgCode;\r\n this.mapName = mapName;\r\n this.nextFeaturesEndpoint = nextFeaturesEndpoint;\r\n //this.sessionId = null;\r\n //this.sessionId = this.overlay.sessionId;\r\n }\r\n /**\r\n * @inheritdoc \r\n */\r\n findItems(map: any, expressionBuilder: IExpressionBuilder, maxFeaturesToGet: number, startPosition: number, queryBounds?: number[], ignoreBbox?: boolean, abort?: AbortController): Promise {\r\n const queryData = this.getQueryData(map, expressionBuilder, maxFeaturesToGet, startPosition, queryBounds, ignoreBbox);\r\n let options = null;\r\n if (abort)\r\n options = { signal: abort.signal };\r\n //use post so we can put the potentially huge expression as the body not on the url\r\n return this.ajaxWrapper.post(this.queryEndpoint, queryData, options).\r\n then((response) => {\r\n return(this.queryCompleted(response.data));\r\n });\r\n }\r\n\r\n protected getQueryData(map: any, expressionBuilder: IExpressionBuilder, maxFeaturesToGet: number, startPosition: number, queryBounds?: number[], ignoreBbox?: boolean): any {\r\n\r\n const sisExpression = expressionBuilder.createExpression(map);\r\n const queryData = {\r\n MaxFeaturesToGet: maxFeaturesToGet,\r\n Expression: sisExpression,\r\n StartPosition: startPosition\r\n };\r\n\r\n if (!ignoreBbox) {\r\n const bbox = this.getbbox(map, queryBounds);\r\n queryData['CRS'] = this.epsgCode.toString(),\r\n queryData['Bbox'] = bbox;\r\n }\r\n\r\n return queryData;\r\n }\r\n\r\n /**\r\n *Gets the bbox parameter\r\n */\r\n protected getbbox(map: any, queryBounds?: number[]): string {\r\n let bbox = '';\r\n const view = map.getView();\r\n const mapProjection = view.getProjection();\r\n\r\n const destinationPrj = `EPSG:${this.epsgCode}`;\r\n const needTransformation = (destinationPrj !== mapProjection.getCode());\r\n\r\n //make sure the bbox is in the correct crs\r\n if (queryBounds) {\r\n if (needTransformation) {\r\n bbox = '&BBOX=' + ol.proj.transformExtent(queryBounds, mapProjection.getCode(), destinationPrj).join(',');\r\n }\r\n else\r\n bbox = '&BBOX=' + queryBounds.join(',');\r\n }\r\n else {\r\n if (needTransformation) {\r\n bbox = '&BBOX=' + ol.proj.transformExtent(view.calculateExtent(map.getSize()), mapProjection.getCode(), destinationPrj).join(',');\r\n }\r\n else\r\n bbox = '&BBOX=' + view.calculateExtent(map.getSize()).join(',');\r\n\r\n }\r\n return bbox;\r\n }\r\n\r\n /**\r\n * Event Handler for when the query is completed.\r\n * @protected\r\n * @param {Object} e - event args.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n */\r\n protected queryCompleted(e: any): IQueryResponse {\r\n let returnObj = null;\r\n const layerName = this.overlayInfo.name;\r\n if (e.features && e.features.length > 0) {\r\n const foundItems: Item[] = [];\r\n\r\n for (let a = 0; a < e.features.length; a++) {\r\n const feature = e.features[a];\r\n const item = new Item({\r\n feature: feature,\r\n layerIndex: this.overlayInfo.index,\r\n sessionId: this.overlayInfo.sessionId,\r\n mapName: this.mapName\r\n });\r\n foundItems.push(item);\r\n }\r\n if (e.next) {\r\n returnObj = { foundItems: foundItems, next: decodeURIComponent(e.next), name:layerName };\r\n }\r\n else\r\n returnObj = { foundItems: foundItems, next: null, name: layerName };\r\n\r\n }\r\n else {\r\n returnObj = { foundItems: [], next: null, name: layerName };\r\n }\r\n return returnObj;\r\n }\r\n /**\r\n * Gets the next chunk for a query.\r\n * @public\r\n * @param {string} featureUrl - The \"next\" property of the response.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n */\r\n getNextPage(featureUrl: string): Promise {\r\n\r\n // the url is escaped so decode it\r\n featureUrl = decodeURIComponent(featureUrl);\r\n const queryData = {\r\n Next: featureUrl\r\n };\r\n const url = this.nextFeaturesEndpoint;\r\n //Post to the controller\r\n return this.ajaxWrapper.post(url, queryData).then((response) => {\r\n return (this.queryCompleted(response.data));\r\n });\r\n\r\n }\r\n /**\r\n * Destroys the object.\r\n * @public\r\n * @export\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n */\r\n destroy() {\r\n this.ajaxWrapper = null;\r\n this.overlayInfo = null;\r\n }\r\n\r\n\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Overlay } from './Overlay';\r\nimport { IAjax, IExpressionBuilder, IQueryResponse } from '../../../../CommonScripts/Abstractions';\r\ndeclare const ol: any;\r\nimport { CursorItem } from './Item';\r\nimport { QueryHelper } from './QueryHelper';\r\n\r\n/**\r\n * Extends QueryHelper\r\n * @class \r\n * @public\r\n * @export\r\n * @extends Cadcorp.Web.Entities.GeognoSISJoinedOverlayQueryHelper#\r\n */\r\nexport class JoinedOverlayQueryHelper extends QueryHelper\r\n{\r\n /**\r\n * @public\r\n * @property {Cadcorp.Web.Entities.GeognoSIS.Overlay} overlay - Overlay to perform queries on.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.QueryHelper#\r\n */\r\n overlay: Overlay;\r\n /**\r\n * @property {string} m_cursorId - cursor id.\r\n * @memberof Cadcorp.Web.Entities.GeognoSISJoinedOverlayQueryHelper#\r\n * @private\r\n */\r\n private m_cursorId: string;\r\n /**\r\n * @property {String} m_cursorLink - link to the cursor.\r\n * @memberof Cadcorp.Web.Entities.GeognoSISJoinedOverlayQueryHelper#\r\n * @private\r\n */\r\n private m_cursorLink : string;\r\n /**\r\n * @constructor\r\n * @param {Overlay} overlay The overlay to query.\r\n * @param {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @param {string} queryEndpoint The url to use to perform the query\r\n * @param {number} epsgCode The epsgcode of the layer to perform the query on\r\n * @public\r\n */\r\n constructor(overlay: Overlay, ajaxWrapper: IAjax, queryEndpoint: string, nextFeaturesEndpoint: string, epsgCode: number) {\r\n super({ sessionId: overlay.sessionId, index: overlay.overlayIndex, name: overlay.name },\r\n ajaxWrapper,\r\n queryEndpoint,\r\n nextFeaturesEndpoint,\r\n epsgCode,\r\n overlay.mapName);\r\n\r\n this.m_cursorLink = null;\r\n this.overlay = overlay;\r\n }\r\n /**\r\n * @inheritdoc \r\n */\r\n findItems(map: any, expressionBuilder: IExpressionBuilder, maxFeaturesToGet: number, startPosition: number, queryBounds?: number[], ignoreBbox?: boolean, abort?: AbortController): Promise {\r\n\r\n var dataObj = this.getQueryData(map, expressionBuilder, maxFeaturesToGet, startPosition, queryBounds, ignoreBbox);\r\n let options = null;\r\n if (abort)\r\n options = { signal: abort.signal };\r\n return this.ajaxWrapper.post(this.queryEndpoint, dataObj, options)\r\n .then((response: any) => {\r\n this.m_cursorId = response.cursorId;\r\n return response.cursorId;\r\n })\r\n .then((cursorId) => {\r\n var url = `${this.overlay.baseUrl}/${this.overlay.mapName}/${this.overlay.layerId}/Search/GeognoSis/${this.overlay.sessionId}/${this.overlay.overlayIndex}/Cursor/${cursorId}/Items`;\r\n return this.ajaxWrapper.post(url, {});\r\n }).\r\n then(response => {\r\n return this.queryCompleted(response);\r\n });\r\n }\r\n protected getQueryData(map: any, expressionBuilder: IExpressionBuilder, maxFeaturesToGet: number, startPosition: number, queryBounds?: number[], ignoreBbox?: boolean): any {\r\n\r\n const queryData = { expression: expressionBuilder.createExpression(map) }\r\n if (!ignoreBbox) {\r\n const bbox = this.getbbox(map, queryBounds);\r\n queryData['CRS'] = this.epsgCode.toString(),\r\n queryData['Bbox'] = bbox;\r\n }\r\n return queryData;\r\n }\r\n /**\r\n * Query Completed event handler, triggers item population.\r\n * @private\r\n * @function\r\n * @memberof Cadcorp.Web.Entities.GeognoSISJoinedOverlayQueryHelper#\r\n * @param {object} e - response object.\r\n * @returns {} \r\n */\r\n protected queryCompleted(e: any): IQueryResponse {\r\n let returnObj = null;\r\n if (e.features && e.features.length > 0) {\r\n var foundItems = [];\r\n\r\n for (var a = 0; a < e.features.length; a++) {\r\n var feature = e.features[a];\r\n var item = new CursorItem({\r\n feature: feature,\r\n layerIndex: this.overlay.overlayIndex,\r\n sessionId: this.overlay.sessionId,\r\n mapName: this.overlay.mapName,\r\n cursorId: this.m_cursorId\r\n });\r\n foundItems.push(item);\r\n }\r\n if (e.next) {\r\n returnObj = { foundItems: foundItems, next: decodeURIComponent(e.next) };\r\n }\r\n else\r\n returnObj = { foundItems: foundItems, next: null };\r\n\r\n }\r\n else {\r\n returnObj = { foundItems: [], next: null };\r\n }\r\n return returnObj;\r\n }\r\n\r\n /**\r\n * @export\r\n * Destroys this object.\r\n * @memberof Cadcorp.Web.Entities.GeognoSIS.CursorItem#\r\n */\r\n destroy(): Promise {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Search/GeognoSis/{sessionId}/{overlayNo:int}/Cursor/{cursorId}/Items\r\n var url = `${this.overlay.baseUrl}/${this.mapName}/${this.overlay.layerId}/Search/GeognoSis/${this.overlay.sessionId}/${this.overlay.overlayIndex}/Cursor/${this.m_cursorId}`;\r\n\r\n return this.ajaxWrapper.delete(url).\r\n then(() => {\r\n super.destroy();\r\n return this;\r\n });\r\n }\r\n\r\n};\r\n\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { appendParameters } from '../../Core/Utils';\r\nclass GeognoSISTileImage extends ol.source.TileImage {\r\n\r\n constructor(options) {\r\n super(options);\r\n this.setTileUrlFunction(this.geognosisTileUrlFunction.bind(this));\r\n this.sessionId = options.sessionId;\r\n this.overlay = options.overlay;\r\n this.photometricInterpretation = options.photometricInterpretation;\r\n this.overlay.on('themeChanged', (eventArgs) => {\r\n this.clear();\r\n this.changed();\r\n return true;\r\n });\r\n }\r\n geognosisTileUrlFunction (tileCoord, pixelRatio, projection) {\r\n var tileGrid = this.getTileGrid();\r\n if (tileGrid === null) {\r\n tileGrid = this.getTileGridForProjection(projection);\r\n }\r\n\r\n if (tileGrid.getResolutions().length <= tileCoord[0]) {\r\n return undefined;\r\n }\r\n\r\n var tileExtent = tileGrid.getTileCoordExtent(tileCoord);\r\n var tileSize = [...tileGrid.getTileSize(tileCoord[0])];\r\n if (pixelRatio !== 1) {\r\n tileSize[0] = (tileSize[0] * pixelRatio + 0.5) | 0;\r\n tileSize[1] = (tileSize[1] * pixelRatio + 0.5) | 0;\r\n }\r\n\r\n var imageUrl = this.overlay.getImageUrl();\r\n var params = {\r\n 'bbox': tileExtent.join(','),\r\n 'uniqueParam': performance.now(),\r\n 'tw': tileSize[0],\r\n 'th': tileSize[1]\r\n };\r\n imageUrl = appendParameters(imageUrl, params);\r\n\r\n return imageUrl;\r\n }\r\n}\r\n\r\nexport default GeognoSISTileImage;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { appendParameters } from '../../Core/Utils';\r\nclass GeognoSISImage extends ol.source.Image {\r\n\r\n constructor(options) {\r\n options.loader = (extent, resolution, ratio) => {\r\n return this.imageLoader(extent, resolution, ratio, options.overlay);\r\n };\r\n super(options);\r\n this.sessionId = options.sessionId;\r\n this.overlay = options.overlay;\r\n this.photometricInterpretation = options.photometricInterpretation;\r\n\r\n this.overlay.on('themeChanged', (eventArgs) => {\r\n this.clear();\r\n this.changed();\r\n return true;\r\n });\r\n\r\n }\r\n imageLoader(extent, resolution, ratio, overlay) {\r\n return new Promise((resolve, reject) => {\r\n const width = extent[2] - extent[0];\r\n const height = extent[3] - extent[1];\r\n const imageResolution = resolution / ratio;\r\n const tileWidth = Math.ceil(width / imageResolution);\r\n const tileHeight = Math.ceil(height / imageResolution);\r\n var imageUrl = overlay.getImageUrl();\r\n var params = {\r\n 'bbox': extent.join(','),\r\n 'uniqueParam': performance.now(),\r\n 'tw': tileWidth,\r\n 'th': tileHeight\r\n };\r\n imageUrl = appendParameters(imageUrl, params);\r\n const img = new Image();\r\n img.onload = () => {\r\n resolve(img);\r\n };\r\n img.onerror = (err) => {\r\n reject(err);\r\n }\r\n img.src = imageUrl\r\n });\r\n }\r\n clear() {\r\n this.image = null;\r\n }\r\n\r\n}\r\n\r\nexport default GeognoSISImage;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\n//import vectorTile from 'ol/source/VectorTile';\r\nimport { appendParameters } from '../../Core/Utils';\r\nimport {IAjax} from '../../../../../CommonScripts/Abstractions';\r\n\r\nclass GeognoSISVector extends ol.source.Vector {\r\n constructor(options) {\r\n super(options);\r\n this.sessionId = options.sessionId;\r\n this.overlay = options.overlay;\r\n this.ajaxWrapper = options.ajaxWrapper;\r\n this.setLoader(this.loaderFunction.bind(this));\r\n }\r\n loaderFunction(extent, resolution, projection) {\r\n var vectorUrl = this.overlay.getVectorUrl();\r\n var params = {\r\n 'CRS': projection.getCode(),\r\n 'bbox': extent.join(','),\r\n 'uniqueParam': performance.now(),\r\n start: 0,\r\n noFeaturesToGet:200\r\n };\r\n var me = this;\r\n this.getFeatures(vectorUrl, params, projection);\r\n\r\n /*vectorUrl = appendParameters(vectorUrl, params);\r\n var wrapper = this.ajaxWrapper;\r\n var me = this;\r\n var layerProj = ol.proj.get('EPSG:' + this.overlay.epsgCode);\r\n wrapper.get(vectorUrl).\r\n then(function (response) {\r\n var format = me.getFormat();\r\n var features = format.readFeatures(response.data, { dataProjection: layerProj.getCode(), featureProjection: projection.getCode() });\r\n if (features && features.length > 0) {\r\n me.addFeatures(features);\r\n }\r\n });*/\r\n\r\n }\r\n\r\n getFeatures(baseUrl, params, projection) {\r\n var me = this;\r\n var wrapper = this.ajaxWrapper;\r\n var vectorUrl = appendParameters(baseUrl, params);\r\n return wrapper.get(vectorUrl)\r\n .then(function (response) {\r\n var format = me.getFormat();\r\n var layerProj = ol.proj.get('EPSG:' + me.overlay.epsgCode);\r\n var features = format.readFeatures(response.data,\r\n { dataProjection: layerProj.getCode(), featureProjection: projection.getCode() });\r\n if (features && features.length > 0) {\r\n me.addFeatures(features);\r\n }\r\n if (response.data.links) {\r\n var links = response.data.links;\r\n links = me.flattenLinks(links);\r\n var nextLink = me.getLink(links, 'next');\r\n if (nextLink) {\r\n var newParams = {\r\n 'CRS': params.CRS,\r\n 'bbox': params.bbox,\r\n 'uniqueParam': performance.now(),\r\n start: params.start + params.noFeaturesToGet,\r\n noFeaturesToGet: params.noFeaturesToGet\r\n };\r\n me.getFeatures(baseUrl, newParams, projection);\r\n }\r\n } \r\n })\r\n .catch(function(err) {\r\n console.log('error getting features: ' + err);\r\n });\r\n }\r\n\r\n flattenLinks(links) {\r\n var newLinks = null;\r\n if (links && links.length > 0) {\r\n newLinks = [];\r\n for (var c = 0; c < links.length; c++) {\r\n var link = links[c];\r\n if (Array.isArray(link)) {\r\n newLinks.push(...this.flattenLinks(link));\r\n } \r\n else {\r\n newLinks.push(link);\r\n }\r\n }\r\n }\r\n return newLinks;\r\n }\r\n getLink(links, rel) {\r\n var link = null;\r\n if (links && Array.isArray(links)) {\r\n var found = links.filter((element) => {\r\n return element.rel === rel;\r\n });\r\n if (found.length > 0)\r\n link = found[0];\r\n }\r\n return link;\r\n }\r\n}\r\n\r\nexport default GeognoSISVector;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Overlay, LayerStatus } from '../GeognoSIS/Overlay';\r\ndeclare const ol: any;\r\nimport { IAjax } from '../../../../CommonScripts/Abstractions';\r\nimport GeognosisTileImage from './source/GeognoSISTileImage';\r\nimport GeognosisSingleImage from './source/GeognoSISImage';\r\nimport GeognosisVectorTile from './source/GeognoSISVector';\r\n\r\n/**\r\n * @class\r\n * @classdesc A factory to create OpenLayers layers from GeognoSIS overlays.\r\n */\r\nexport class LayerFactory { \r\n constructor() { }\r\n /**\r\n * Creates an open layers layer of the correct type from a GeognoSIS layer\r\n * @public\r\n * @param {Object} overlay The GeognoSIS overlay to create the open layers layer from\r\n * @param {string} epsgCode The EPSG code for the new layer\r\n * \r\n */\r\n public createLayer(overlay: Overlay, epsgCode: string, sessionId: string, ajax: IAjax, tileSize: number[], useSingleTile: boolean, extent: number[] | undefined): any { \r\n const layer = this.getNewLayer(overlay, epsgCode, sessionId, ajax, tileSize, useSingleTile, extent);\r\n this.setRefreshInterval(layer);\r\n return layer;\r\n }\r\n\r\n private getNewLayer(overlay: Overlay, epsgCode: string, sessionId: string, ajax: IAjax, tileSize: number[], useSingleTile: boolean, extent: number[] | undefined): any {\r\n if (overlay.useVector) return this.createVectorLayer(overlay, epsgCode, sessionId, ajax, extent);\r\n return useSingleTile ? this.createImageLayer(overlay, sessionId, extent) : this.createTileLayer(overlay, epsgCode, sessionId, ajax, tileSize, extent);\r\n } \r\n\r\n private setRefreshInterval(layer: any): void {\r\n const refreshInterval = layer.getSource().overlay.refreshInterval;\r\n if (refreshInterval == undefined || refreshInterval === 0) return;\r\n window.setTimeout(() => this.refreshLayer(layer), refreshInterval * 1000);\r\n }\r\n\r\n private refreshLayer(layer: any): void { \r\n const overlay = layer.getSource().overlay; \r\n const promise = overlay.refreshOverlay(); // newly added method to Overlay to use instead of using an action in the map store because embedded map can't see the stores.\r\n promise.then(() => {\r\n layer.getSource().clear(); // GeognoSISImage (single tile mode) needs this clear() method in addition to refresh()\r\n layer.getSource().refresh();\r\n window.setTimeout(() => this.refreshLayer(layer), overlay.refreshInterval * 1000); // perpetuate the timeout rather than set interval\r\n }); \r\n }\r\n\r\n /** tile layer */\r\n private createTileLayer(overlay: Overlay, epsgCode: string, sessionId: string, ajax: IAjax, tileSize: number[], extent: number[] | undefined): any {\r\n const proj = ol.proj.get(epsgCode);\r\n const source = new GeognosisTileImage(\r\n {\r\n projection: proj,\r\n crossOrigin: 'anonymous',\r\n sessionId: sessionId,\r\n overlay: overlay,\r\n ajaxWrapper: ajax,\r\n photometricInterpretation: 'RGBA',\r\n attributions: overlay.attribution,\r\n tileGrid: this.createTileGridFromProjection(proj, tileSize)\r\n });\r\n\r\n const layer = new ol.layer.Tile({\r\n opacity: 1,\r\n name: overlay.name,\r\n visible: overlay.status > LayerStatus.Invisible,\r\n isBaseLayer: false,\r\n allowVectorExport: this.getAllowVectorExport(overlay),\r\n source: source,\r\n extent: extent\r\n });\r\n return layer;\r\n }\r\n\r\n /** single image layer */\r\n private createImageLayer(overlay: Overlay, sessionId: string, extent: number[] | undefined): any {\r\n const url = overlay.getImageUrl(); \r\n\r\n const sourceOptions: any = {\r\n url: url,\r\n sessionId: sessionId,\r\n overlay: overlay, \r\n photometricInterpretation: 'RGBA',\r\n attributions: overlay.attribution,\r\n };\r\n\r\n const source = new GeognosisSingleImage(sourceOptions);\r\n\r\n const layerOptions: any = {\r\n opacity: 1,\r\n name: overlay.name,\r\n visible: overlay.status > LayerStatus.Invisible,\r\n isBaseLayer: false,\r\n allowVectorExport: this.getAllowVectorExport(overlay),\r\n source: source,\r\n extent: extent\r\n };\r\n return new ol.layer.Image(layerOptions); \r\n } \r\n\r\n private createVectorLayer(overlay: Overlay, epsgCode: string, sessionId: string, ajax: IAjax, extent: number[] | undefined): any {\r\n let overlayStyle = null;\r\n if (overlay.vectorStyle) {\r\n try {\r\n overlayStyle = JSON.parse(overlay.vectorStyle);\r\n } catch (ex) {\r\n console.log(overlay.vectorStyle);\r\n console.log(ex.toString());\r\n }\r\n }\r\n else {\r\n overlayStyle = {\r\n fill: {\r\n colour: {r:255,g:0,b:0,a:0.6}\r\n },\r\n stroke: {\r\n colour: { r: 255, g: 0, b: 0, a: 1 },\r\n width:2\r\n },\r\n image: {\r\n fill: {\r\n colour: { r: 255, g: 0, b: 0, a: 0.6 }\r\n },\r\n stroke: {\r\n colour: { r: 255, g: 0, b: 0, a: 1 },\r\n width: 2\r\n },\r\n radius: 10\r\n }\r\n };\r\n }\r\n \r\n const layer = new ol.layer.Vector({\r\n style: this.createOLStyle(overlayStyle),\r\n opacity: 1,\r\n name: overlay.name,\r\n visible: overlay.status > LayerStatus.Invisible,\r\n isBaseLayer: false,\r\n allowVectorExport: this.getAllowVectorExport(overlay),\r\n extent: extent,\r\n source: new GeognosisVectorTile(\r\n {\r\n cacheSize: 500,\r\n projection: ol.proj.get(epsgCode),\r\n crossOrigin: 'anonymous',\r\n sessionId: sessionId,\r\n overlay: overlay,\r\n ajaxWrapper: ajax,\r\n format: new ol.format.GeoJSON(),\r\n strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({ tileSize: 256 })),\r\n attributions: overlay.attribution\r\n })\r\n });\r\n return layer;\r\n }\r\n\r\n private createOLStyle(styleDefinition: any): any {\r\n const fill = new ol.style.Fill({ color: this.getOlColour(styleDefinition.fill.colour) });\r\n const stroke = this.getOlStroke(styleDefinition.stroke);\r\n const style = new ol.style.Style({ fill: fill, stroke: stroke });\r\n if (styleDefinition?.image) {\r\n const img = new ol.style.Circle({\r\n fill: new ol.style.Fill({ color: this.getOlColour(styleDefinition.image.fill.colour) }),\r\n stroke: this.getOlStroke(styleDefinition.image.stroke),\r\n radius: styleDefinition.image.radius\r\n });\r\n style.setImage(img);\r\n }\r\n return style;\r\n }\r\n private getOlColour(colourDefinition): number[]{\r\n return [colourDefinition.r, colourDefinition.g,colourDefinition.b, colourDefinition.a];\r\n }\r\n\r\n private getOlStroke(strokeDefinition): any {\r\n const colour = strokeDefinition.colour;\r\n let dashStyle = null;\r\n if (strokeDefinition.dash)\r\n dashStyle = strokeDefinition.dash;\r\n let lineCap = null;\r\n if (strokeDefinition.lineCap)\r\n lineCap = strokeDefinition.lineCap;\r\n let lineJoin = null;\r\n if (strokeDefinition.lineCap)\r\n lineJoin = strokeDefinition.lineCap;\r\n return new ol.style.Stroke({\r\n color: this.getOlColour(colour),\r\n width: strokeDefinition.width,\r\n lineCap: lineCap,\r\n lineJoin: lineJoin,\r\n lineDash: dashStyle\r\n });\r\n \r\n }\r\n\r\n private getAllowVectorExport(overlay: Overlay): boolean {\r\n return overlay.properties['WML::AllowVectorExport@']\r\n ? overlay.properties['WML::AllowVectorExport@']\r\n : false;\r\n }\r\n public createTileGridFromProjection(projection: any, size: number[]) {\r\n const prjExtent = projection.getExtent();\r\n const resolutions = this.resolutionsFromExtent(prjExtent, size)\r\n return new ol.tilegrid.TileGrid({ extent: prjExtent, origin: ol.extent.getCorner(prjExtent, this.getCornerString(projection.getAxisOrientation())), tileSize: size, resolutions: resolutions })\r\n }\r\n private resolutionsFromExtent(extent,size) {\r\n var maxZoom = ol.tilegrid.common.DEFAULT_MAX_ZOOM;\r\n var height = ol.extent.getHeight(extent);\r\n var width = ol.extent.getWidth(extent);\r\n var maxResolution = Math.max(width / size[0], height /size[1]);\r\n var length = maxZoom + 1;\r\n var resolutions = new Array(length);\r\n for (var z = 0; z < length; ++z) {\r\n resolutions[z] = maxResolution / Math.pow(2, z);\r\n }\r\n return resolutions;\r\n }\r\n private getCornerString(axisOrientation: string): string {\r\n let retVal: string = null;\r\n switch (axisOrientation) {\r\n default:\r\n retVal = 'top-left';\r\n break\r\n }\r\n\r\n return retVal;\r\n }\r\n}\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IExpressionBuilder } from '../../../../CommonScripts/Abstractions';\r\nimport { Overlay } from './Overlay';\r\ndeclare const ol: any;\r\n/**\r\n* Creates an intersect SIS expression.\r\n* @export\r\n* @extends Cadcorp.Web.Entities.GeognoSIS.ExpressionBuilderBase\r\n*/\r\nexport class IntersectExpressionBuilder implements IExpressionBuilder {\r\n /**\r\n * @private\r\n * @property {ol.Feature} m_feature - A feature to create the expression from.\r\n */\r\n private m_feature: any;\r\n /**\r\n * @private\r\n * @property {Overlay} m_overlay - Overlay to perform queries on.\r\n */\r\n private m_overlay: Overlay;\r\n /**\r\n * Constructor.\r\n * @export\r\n * @constructor\r\n * @param {ol.Feature} feature The feature to use to query with\r\n * @param {Overlay} overlay The overlay to perform queries on\r\n */\r\n constructor(feature : any, overlay:Overlay) {\r\n this.m_feature = feature;\r\n this.m_overlay = overlay;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n createExpression(map) {\r\n const layerEpsg = this.m_overlay.epsgCode;\r\n const mapProjection = map.getView().getProjection();\r\n\r\n const destinationPrj = `EPSG:${layerEpsg}`;\r\n const needTransformation = (destinationPrj !== mapProjection.getCode());\r\n const format = new ol.format.GeoJSON();\r\n let geoJson;\r\n if (needTransformation) {\r\n const newGeom = this.m_feature.getGeometry().transform(mapProjection, destinationPrj);\r\n geoJson = format.writeGeometry(newGeom);\r\n }\r\n else {\r\n //extracting geoJson \r\n geoJson = format.writeGeometry(this.m_feature.getGeometry(),\r\n { dataProjection: destinationPrj, featureProjection: mapProjection });\r\n }\r\n return `ST_Intersects(geometry,ST_GeomFromGeoJSON('${geoJson}',\"${destinationPrj}\"))`;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n destroy() {\r\n this.m_feature = null;\r\n this.m_overlay = null;\r\n }\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport {Overlay} from './Overlay';\r\nimport { IAjax, IKeyValue } from '../../../../CommonScripts/Abstractions';\r\n/**\r\n* A factory to get overlays served from a GeognoSIS http interface\r\n* @public\r\n*/\r\nexport class OverlayFactory {\r\n /**\r\n * @public\r\n * @property {Overlay[]} overlays The overlays\r\n */\r\n overlays:Overlay[];\r\n /**\r\n * @property {string|null} sessionId The current session id\r\n * @public\r\n * @readonly\r\n */\r\n readonly sessionId: string;\r\n /**\r\n * @property {IAjax} ajaxWrapper An IAjax implementation to perform asynchronous requests\r\n * @public\r\n * @readonly\r\n */\r\n readonly ajaxWrapper: IAjax;\r\n /**\r\n * @property {string|null} baseUrl The base url for the application\r\n * @public\r\n * @readonly\r\n */\r\n readonly baseUrl: string;\r\n /**\r\n * @property {string} mapName - Current map name\r\n * @public\r\n * @readonly \r\n */\r\n readonly mapName: string;\r\n /**\r\n * @property {string} layerId The unique id for the swd this item belongs to\r\n * @public\r\n */\r\n readonly layerId: string;\r\n /**\r\n * Initialises a new instance of the overlay factory\r\n * @constructor\r\n * @public\r\n * @param {string} sessionId The GeognoSIS session id\r\n * @param {IAjax} ajaxWrapper Abstraction to perform ajax queries\r\n * @param {string} baseUrl base url for the application\r\n * @param {string} mapName the name of the map\r\n * @param {string} layerId the id of the geognosis layer\r\n */\r\n constructor(sessionId: string, ajaxWrapper: IAjax, baseUrl:string, mapName:string, layerId:string) {\r\n this.overlays = null;\r\n this.sessionId = sessionId;\r\n this.ajaxWrapper = ajaxWrapper;\r\n this.baseUrl = baseUrl;\r\n this.mapName = mapName;\r\n this.layerId = layerId;\r\n }\r\n /**\r\n * Gets the layers from the swd\r\n */\r\n getOverlays() : Promise {\r\n if (this.overlays === null) {\r\n\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlays\"\r\n let url = `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlays`;\r\n return this.ajaxWrapper.get(url).\r\n then(this.processLayerList.bind(this));\r\n }\r\n else {\r\n return Promise.resolve(this.overlays);\r\n }\r\n\r\n }\r\n /**\r\n * Creates an internal layer\r\n * @param {object} properties The properties to set on the new overlay\r\n */\r\n createInternalLayer(properties: IKeyValue[], name:string): Promise {\r\n //GeognoSis/{mapName}/{layerId:Guid}/Sessions/{sessionId}/Overlay/new\"\r\n var url = `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/new?name=${name}`;\r\n let layerIndex = -1;\r\n return this.ajaxWrapper.post(url, null, null).\r\n then((response: {data: number}) => {\r\n layerIndex = response.data;\r\n url = `${this.baseUrl}GeognoSis/${this.mapName}/${this.layerId}/Sessions/${this.sessionId}/Overlay/${response.data}`;\r\n var propertiesObject = {};\r\n if (properties != null && properties.length > 0) {\r\n for (var count = 0; count < properties.length; count++) {\r\n var tmp = properties[count];\r\n propertiesObject[tmp.key] = tmp.value;\r\n }\r\n }\r\n var propMap = {\"PropertyMap\": propertiesObject}\r\n return this.ajaxWrapper.patch(url, propMap, null);\r\n })\r\n .then(() => {\r\n var overlay = new Overlay(this.baseUrl,\r\n this.sessionId,\r\n layerIndex,\r\n this.ajaxWrapper,\r\n this.layerId,\r\n this.mapName);\r\n\r\n return overlay.populate(null);\r\n });\r\n }\r\n\r\n /**\r\n * Processes the array of overlay indicies from the server\r\n * @param {object} response The response from the server, an array of overlay indicies\r\n */\r\n private processLayerList(response) : Promise {\r\n var oArray = response.data;\r\n var pArray = [];\r\n this.overlays = [];\r\n for (var c = 0; c < oArray.length; c++) {\r\n var index = oArray[c];\r\n\r\n var overlay = new Overlay(this.baseUrl,\r\n this.sessionId,\r\n index,\r\n this.ajaxWrapper,\r\n this.layerId,\r\n this.mapName);\r\n\r\n pArray.push(overlay.populate(null));\r\n this.overlays[c] = overlay;\r\n }\r\n return Promise.all(pArray);\r\n }\r\n}\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showParent,\n expression: \"showParent\",\n },\n ],\n },\n [\n !_vm.isMobile\n ? _c(\n \"div\",\n {\n staticClass: \"widget-pane-toggle-button-container\",\n class: _vm.positionClass,\n },\n [\n _c(\"button\", {\n staticClass: \"widget-pane-toggle-button \",\n class: _vm.expandoClass,\n attrs: { \"aria-label\": \"Collapse side panel\" },\n on: { click: _vm.expandoClicked },\n }),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.isMobile\n ? _c(\"v-expand-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.show,\n expression: \"show\",\n },\n ],\n class: _vm.contentCss,\n attrs: { id: _vm.contentId },\n },\n [_vm._t(\"default\")],\n 2\n ),\n ])\n : _c(\"v-expand-x-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.show,\n expression: \"show\",\n },\n ],\n class: _vm.contentCss,\n attrs: { id: _vm.contentId },\n },\n [_vm._t(\"default\")],\n 2\n ),\n ]),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nexport default Vue.extend({\n name: 'application-side-panel',\n props: { contentClass: String, position: String, id: { type: String, required: true } },\n methods: {\n expandoClicked ():void {\n this.$store.commit('ui/setAppPanelVisible', !this.show);\n if (!this.show)\n this.$store.dispatch('extensions/activateDefault', true);\n else\n this.$store.dispatch('extensions/activateCurrent');\n this.$emit('expandoClicked', { show: this.show });\n },\n transitionCompleteHandler(): void {\n this.$emit('transitionComplete', { show: this.show });\n }\n },\n mounted: function () {\n this.$nextTick(function () { //all the dom elements will be available now so create the map\n var el = document.getElementById(this.id + '_content');\n if(el)\n el.addEventListener('transitionend', this.transitionCompleteHandler.bind(this), true);\n });\n },\n computed: {\n show(): boolean {\n return this.$store.state.ui.appPanelVisible;\n },\n positionClass(): boolean {\n var retVal = null;\n if (this.position === 'left') {\n retVal = { 'widget-pane-left-toggle-button-container': true };\n }\n else {\n retVal = { 'widget-pane-right-toggle-button-container': true };\n }\n return retVal;\n },\n expandoClass(): any {\n var retVal = { 'widgetPaneCollapsed': this.show };\n if (this.position === 'left') {\n retVal = { 'widgetPaneCollapsed': this.show ? false : true };\n }\n else {\n retVal = { 'widgetPaneCollapsed': this.show ? true : false };\n }\n return retVal;\n },\n contentCss(): string {\n return this.contentClass;\n },\n contentId(): string {\n return this.id + '_content';\n },\n isMobile(): boolean {\n return this.$vuetify.breakpoint.mobile;\n },\n showParent(): boolean {\n let show = true;\n if (this.isMobile)\n show = this.show;\n return show;\n }\n\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./applicationPanel.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./applicationPanel.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./applicationPanel.vue?vue&type=template&id=cc6b779a&\"\nimport script from \"./applicationPanel.vue?vue&type=script&lang=ts&\"\nexport * from \"./applicationPanel.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('cc6b779a')) {\n api.createRecord('cc6b779a', component.options)\n } else {\n api.reload('cc6b779a', component.options)\n }\n module.hot.accept(\"./applicationPanel.vue?vue&type=template&id=cc6b779a&\", function () {\n api.rerender('cc6b779a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Panels/applicationPanel.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _c(\"div\", { class: _vm.positionClass }, [\n _c(\"button\", {\n staticClass: \"widget-pane-toggle-button \",\n class: _vm.expandoClass,\n attrs: { \"aria-label\": \"Collapse side panel\" },\n on: { click: _vm.expandoClicked },\n }),\n ]),\n _vm._v(\" \"),\n _vm.position === \"left\"\n ? _c(\"v-slide-x-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPanel,\n expression: \"showPanel\",\n },\n ],\n class: _vm.contentCss,\n attrs: { id: _vm.contentId },\n },\n [_vm._t(\"default\")],\n 2\n ),\n ])\n : _c(\"v-slide-x-reverse-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPanel,\n expression: \"showPanel\",\n },\n ],\n class: _vm.contentCss,\n attrs: { id: _vm.contentId },\n },\n [_vm._t(\"default\")],\n 2\n ),\n ]),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nexport default Vue.extend({\n name: 'side-panel',\n props: { initialShowPanel: Boolean, contentClass: String, position: String, id: { type: String, required: true }, rightSmallScreenSafe: Boolean },\n data: function () {\n return { showPanel: this.initialShowPanel };\n },\n methods: {\n expandoClicked ():void {\n this.showPanel = !this.showPanel;\n this.$emit('expandoClicked', { show: this.showPanel });\n },\n transitionCompleteHandler(): void {\n this.$emit('transitionComplete', { show: this.showPanel });\n }\n },\n mounted: function () {\n this.$nextTick(function () { //all the dom elements will be available now so attach events\n var el = document.getElementById(this.id + '_content');\n el.addEventListener('transitionend', this.transitionCompleteHandler.bind(this), true);\n });\n },\n computed: {\n positionClass (): any {\n return {\n 'widget-pane-left-toggle-button-container': this.position === 'left',\n 'widget-pane-right-toggle-button-container': this.position != 'left',\n 'widget-pane-toggle-button-container': !this.useSmallScreenOption,\n 'widget-pane-toggle-button-container-small-screens': this.useSmallScreenOption\n }\n },\n expandoClass() : any{\n var retVal = { 'widgetPaneCollapsed': this.showPanel };\n if (this.position === 'left') {\n retVal = { 'widgetPaneCollapsed': this.showPanel ? false : true };\n }\n else {\n retVal = { 'widgetPaneCollapsed': this.showPanel ? true : false };\n }\n return retVal;\n },\n contentCss() : string{\n return this.contentClass;\n },\n contentId(): string {\n return this.id + '_content';\n },\n useSmallScreenOption(): boolean {\n return this.rightSmallScreenSafe && this.$vuetify.breakpoint.smAndDown;\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidepanel.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidepanel.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sidepanel.vue?vue&type=template&id=dea47804&\"\nimport script from \"./sidepanel.vue?vue&type=script&lang=ts&\"\nexport * from \"./sidepanel.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('dea47804')) {\n api.createRecord('dea47804', component.options)\n } else {\n api.reload('dea47804', component.options)\n }\n module.hot.accept(\"./sidepanel.vue?vue&type=template&id=dea47804&\", function () {\n api.rerender('dea47804', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Panels/sidepanel.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.haveAttributions\n ? _c(\n \"div\",\n {\n staticClass: \"attributeContainer\",\n attrs: { id: \"attributeContainer\" },\n },\n [\n _c(\"v-card\", { staticClass: \"mapAttribution pa-1\" }, [\n _c(\n \"ul\",\n { staticClass: \"pa-0 caption\" },\n _vm._l(_vm.myAttributions, function (item, index) {\n return _c(\"li\", {\n key: index,\n ref: \"attributions\",\n refInFor: true,\n domProps: { innerHTML: _vm._s(item) },\n })\n }),\n 0\n ),\n ]),\n ],\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\n\nexport default Vue.extend({\n name: 'attribution-panel',\n data(): { renderedAttribution: string[]} {\n return { renderedAttribution: [] };\n },\n components: {\n },\n created(): void {\n },\n beforeDestroy(): void {\n\n },\n computed: {\n myAttributions(): string[] {\n return this.$store.getters['map/attribution']; \n },\n haveAttributions(): boolean {\n const attr: string[] = this.$store.getters['map/attribution'];\n return attr && attr.length > 0; \n }\n },\n methods: {\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./attributionPanel.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./attributionPanel.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./attributionPanel.vue?vue&type=template&id=122edde4&\"\nimport script from \"./attributionPanel.vue?vue&type=script&lang=ts&\"\nexport * from \"./attributionPanel.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('122edde4')) {\n api.createRecord('122edde4', component.options)\n } else {\n api.reload('122edde4', component.options)\n }\n module.hot.accept(\"./attributionPanel.vue?vue&type=template&id=122edde4&\", function () {\n api.rerender('122edde4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Panels/attributionPanel.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-snackbar\",\n {\n attrs: { bottom: \"\", timeout: _vm.timeout },\n scopedSlots: _vm._u([\n {\n key: \"action\",\n fn: function (ref) {\n var attrs = ref.attrs\n return [_c(\"v-progress-circular\", { attrs: { indeterminate: \"\" } })]\n },\n },\n ]),\n model: {\n value: _vm.show,\n callback: function ($$v) {\n _vm.show = $$v\n },\n expression: \"show\",\n },\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.message) + \"\\n \")]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\n\nexport default Vue.extend({\n name:'activity-snackbar',\n data(): any {\n return { show: false, message: '', timeout: -1 }\n },\n created (): void {\n this.$store.watch(state => state.ui.activityMessage,\n () => {\n const msg = this.$store.state.ui.activityMessage;\n this.message = msg;\n if (msg !== '') {\n this.show = true;\n } else {\n this.show = false;\n }\n });\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./activitySnackbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./activitySnackbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./activitySnackbar.vue?vue&type=template&id=00b10e68&\"\nimport script from \"./activitySnackbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./activitySnackbar.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('00b10e68')) {\n api.createRecord('00b10e68', component.options)\n } else {\n api.reload('00b10e68', component.options)\n }\n module.hot.accept(\"./activitySnackbar.vue?vue&type=template&id=00b10e68&\", function () {\n api.rerender('00b10e68', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Notifications/activitySnackbar.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"zoomContainer\", attrs: { id: \"zoomContainer\" } },\n _vm._l(_vm.$store.state.ui.contentControls, function (item, index) {\n return _c(\"content-control\", {\n key: index,\n attrs: { \"content-control-item\": item },\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-tooltip\",\n {\n attrs: { bottom: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n class: _vm.cssClasses,\n attrs: {\n fab: \"\",\n \"aria-label\": _vm.btnAriaLabel,\n small: _vm.small,\n large: _vm.large,\n loading: _vm.showLoading,\n color: _vm.contentControlItem.color,\n dark: _vm.dark,\n light: _vm.light,\n to: _vm.contentControlItem.to,\n href: _vm.contentControlItem.href,\n target: _vm.contentControlItem.target,\n },\n on: { click: _vm.clickHandler },\n },\n on\n ),\n [\n _c(\n \"v-icon\",\n { attrs: { dark: _vm.dark, light: _vm.light } },\n [_vm._v(_vm._s(_vm.contentControlItem.icon))]\n ),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [_vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.btnTooltip))])]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport { INavigationButton, ThemeEnum, ButtonSizeEnum } from '../../../../../../CommonScripts/Abstractions';\nexport default Vue.extend({\n name: 'content-control',\n props: {\n contentControlItem: { type: Object as () => INavigationButton, required: true }\n },\n data() {\n return {showLoading:false};\n },\n computed: {\n dark(): boolean {\n return this.contentControlItem.theme === ThemeEnum.Dark;\n },\n light(): boolean {\n return this.contentControlItem.theme === ThemeEnum.Light;\n },\n small(): boolean {\n return this.contentControlItem.size === ButtonSizeEnum.Small;\n },\n large(): boolean {\n return this.contentControlItem.size === ButtonSizeEnum.Large;\n },\n cssClasses(): string {\n return `mt-2 ${this.$store.getters['textCssClass']} ${this.contentControlItem.cssClasses}`;\n },\n btnAriaLabel(): string { return this.$vuetify.lang.t(this.contentControlItem.ariaLabelKey); },\n btnTooltip(): string { return this.$vuetify.lang.t(this.contentControlItem.tooltipKey); }\n },\n methods: {\n clickHandler() {\n if (this.contentControlItem.showLoading)\n this.showLoading = true;\n if (this.contentControlItem.clickHandler)\n this.contentControlItem.clickHandler().then(\n () => {\n this.showLoading = false;\n }\n );\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contentControl.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contentControl.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./contentControl.vue?vue&type=template&id=1fe7e335&\"\nimport script from \"./contentControl.vue?vue&type=script&lang=ts&\"\nexport * from \"./contentControl.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1fe7e335')) {\n api.createRecord('1fe7e335', component.options)\n } else {\n api.reload('1fe7e335', component.options)\n }\n module.hot.accept(\"./contentControl.vue?vue&type=template&id=1fe7e335&\", function () {\n api.rerender('1fe7e335', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/ContentControls/contentControl.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appControls.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appControls.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport contentControl from './contentControl.vue'\n\nexport default Vue.extend({\n name: 'application-controls',\n components: {\n 'content-control': contentControl\n }\n});\n","import { render, staticRenderFns } from \"./appControls.vue?vue&type=template&id=7ec8d9b6&\"\nimport script from \"./appControls.vue?vue&type=script&lang=ts&\"\nexport * from \"./appControls.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7ec8d9b6')) {\n api.createRecord('7ec8d9b6', component.options)\n } else {\n api.reload('7ec8d9b6', component.options)\n }\n module.hot.accept(\"./appControls.vue?vue&type=template&id=7ec8d9b6&\", function () {\n api.rerender('7ec8d9b6', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/ContentControls/appControls.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-list-item\",\n {\n class: _vm.cssClasses,\n attrs: {\n to: _vm.navigationItem.to,\n href: _vm.navigationItem.href,\n target: _vm.navigationItem.target,\n },\n on: {\n click: function ($event) {\n $event.stopPropagation()\n return _vm.clicked.apply(null, arguments)\n },\n },\n },\n [\n _c(\n \"v-list-item-content\",\n [_c(\"v-list-item-title\", [_vm._v(_vm._s(_vm.navigationText))])],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuetify from 'Vuetify';\nimport { INavigationItem } from '../../../../../../CommonScripts/Abstractions';\nexport default Vue.extend({\n name: 'navigation-item',\n props: {\n navigationItem: { type: Object as () => INavigationItem, required: true }\n },\n computed: {\n navigationText(): string {\n return this.$vuetify.lang.t(this.navigationItem.localisationKey);\n },\n cssClasses(): string {\n return `${this.navigationItem.cssClasses}`;\n }\n },\n methods: {\n clicked() {\n this.$emit('click');\n if (this.navigationItem.clickHandler){\n this.navigationItem.clickHandler();\n }\n }\n }\n}); \n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./navigationItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./navigationItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./navigationItem.vue?vue&type=template&id=3d7fcb70&\"\nimport script from \"./navigationItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./navigationItem.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3d7fcb70')) {\n api.createRecord('3d7fcb70', component.options)\n } else {\n api.reload('3d7fcb70', component.options)\n }\n module.hot.accept(\"./navigationItem.vue?vue&type=template&id=3d7fcb70&\", function () {\n api.rerender('3d7fcb70', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/NavigationDrawer/navigationItem.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-navigation-drawer\",\n {\n class: _vm.cssClass,\n attrs: { clipped: \"\", temporary: \"\", app: \"\" },\n model: {\n value: _vm.$store.state.ui.navDrawerVisible,\n callback: function ($$v) {\n _vm.$set(_vm.$store.state.ui, \"navDrawerVisible\", $$v)\n },\n expression: \"$store.state.ui.navDrawerVisible\",\n },\n },\n [\n _c(\n \"v-list\",\n _vm._l(_vm.$store.state.ui.navigationItems, function (item, index) {\n return _c(\"navigation-item\", {\n key: index,\n attrs: { \"navigation-item\": item },\n on: { click: _vm.clicked },\n })\n }),\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport navigationItem from './navigationItem.vue';\nexport default Vue.extend({\n name: 'navigation-drawer',\n props: {\n cssClass: { type: String, required: false }\n },\n components: {'navigation-item': navigationItem},\n computed: {\n\n },\n methods: {\n clicked() {\n this.$store.commit('ui/setNavDrawerVisible', false);\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./navigationDrawer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./navigationDrawer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./navigationDrawer.vue?vue&type=template&id=848325e4&\"\nimport script from \"./navigationDrawer.vue?vue&type=script&lang=ts&\"\nexport * from \"./navigationDrawer.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('848325e4')) {\n api.createRecord('848325e4', component.options)\n } else {\n api.reload('848325e4', component.options)\n }\n module.hot.accept(\"./navigationDrawer.vue?vue&type=template&id=848325e4&\", function () {\n api.rerender('848325e4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/NavigationDrawer/navigationDrawer.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.haveItems\n ? _c(\n \"v-speed-dial\",\n {\n attrs: { top: \"\", right: \"\", direction: \"bottom\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function () {\n return [\n _c(\n \"v-btn\",\n {\n attrs: {\n dark: \"\",\n fab: \"\",\n color: \"primary\",\n small: \"\",\n \"aria-label\": _vm.btnAriaLabelClose,\n },\n model: {\n value: _vm.visible,\n callback: function ($$v) {\n _vm.visible = $$v\n },\n expression: \"visible\",\n },\n },\n [\n _vm.visible\n ? _c(\"v-icon\", [_vm._v(\"mdi-close\")])\n : _c(\"v-icon\", [_vm._v(\"mdi-view-module\")]),\n ],\n 1\n ),\n ]\n },\n proxy: true,\n },\n ],\n null,\n false,\n 4080455169\n ),\n model: {\n value: _vm.visible,\n callback: function ($$v) {\n _vm.visible = $$v\n },\n expression: \"visible\",\n },\n },\n [\n _vm._v(\" \"),\n _vm._l(_vm.items, function (item, index) {\n return _c(\"speed-dial-item\", {\n key: index,\n attrs: { \"content-button-config\": item },\n })\n }),\n ],\n 2\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-tooltip\",\n {\n attrs: { bottom: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n attrs: {\n fab: \"\",\n \"aria-label\": _vm.btnAriaLabel,\n small: _vm.small,\n large: _vm.large,\n color: _vm.contentButtonConfig.color,\n dark: _vm.dark,\n light: _vm.light,\n to: _vm.contentButtonConfig.to,\n href: _vm.contentButtonConfig.href,\n target: _vm.contentButtonConfig.target,\n },\n on: { click: _vm.clickHandler },\n },\n on\n ),\n [\n _c(\n \"v-icon\",\n { attrs: { dark: _vm.dark, light: _vm.light } },\n [_vm._v(_vm._s(_vm.contentButtonConfig.icon))]\n ),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [_vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.btnTooltip))])]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport { INavigationButton, ThemeEnum, ButtonSizeEnum } from '../../../../../../CommonScripts/Abstractions';\nexport default Vue.extend({\n name: 'c-speed-dial-item',\n props: {\n contentButtonConfig: { type: Object as () => INavigationButton, required: true }\n },\n computed: {\n dark(): boolean {\n return this.contentButtonConfig.theme === ThemeEnum.Dark;\n },\n light(): boolean {\n return this.contentButtonConfig.theme === ThemeEnum.Light;\n },\n small(): boolean {\n return this.contentButtonConfig.size === ButtonSizeEnum.Small;\n },\n large(): boolean {\n return this.contentButtonConfig.size === ButtonSizeEnum.Large;\n },\n btnAriaLabel(): string { return this.$vuetify.lang.t(this.contentButtonConfig.ariaLabelKey); },\n btnTooltip(): string { return this.$vuetify.lang.t(this.contentButtonConfig.tooltipKey); }\n },\n methods: {\n clickHandler() {\n if (this.contentButtonConfig.clickHandler)\n this.contentButtonConfig.clickHandler();\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./speedDialItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./speedDialItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./speedDialItem.vue?vue&type=template&id=0571a3f1&\"\nimport script from \"./speedDialItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./speedDialItem.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0571a3f1')) {\n api.createRecord('0571a3f1', component.options)\n } else {\n api.reload('0571a3f1', component.options)\n }\n module.hot.accept(\"./speedDialItem.vue?vue&type=template&id=0571a3f1&\", function () {\n api.rerender('0571a3f1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/speedDial/speedDialItem.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./speedDial.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./speedDial.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport speedDialItem from './speedDialItem.vue'\nexport default Vue.extend({\n name: 'c-speed-dial',\n components: { speedDialItem },\n data() {\n return { visible:false};\n },\n computed: {\n haveItems(): boolean { return this.$store.state.ui.speedDialItems != null && this.$store.state.ui.speedDialItems.length > 0; },\n btnAriaLabelClose(): string { return this.$vuetify.lang.t('webmap.ariaLabels.close'); },\n btnAriaLabelView(): string { return this.$vuetify.lang.t('webmap.ariaLabels.view'); },\n btnTooltipClose(): string { return this.$vuetify.lang.t('webmap.tooltips.close'); },\n btnTooltipView(): string { return this.$vuetify.lang.t('webmap.tooltips.view'); }\n }\n});\n","import { render, staticRenderFns } from \"./speedDial.vue?vue&type=template&id=38a7493e&\"\nimport script from \"./speedDial.vue?vue&type=script&lang=ts&\"\nexport * from \"./speedDial.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('38a7493e')) {\n api.createRecord('38a7493e', component.options)\n } else {\n api.reload('38a7493e', component.options)\n }\n module.hot.accept(\"./speedDial.vue?vue&type=template&id=38a7493e&\", function () {\n api.rerender('38a7493e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/speedDial/speedDial.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"fullHeight\" },\n [\n _c(\n \"v-dialog\",\n {\n attrs: { width: \"auto\", persistent: \"\" },\n model: {\n value: _vm.humanDialogVisible,\n callback: function ($$v) {\n _vm.humanDialogVisible = $$v\n },\n expression: \"humanDialogVisible\",\n },\n },\n [\n _c(\n \"v-card\",\n { staticClass: \"mx-auto\" },\n [\n _c(\"v-card-title\", [_vm._v(_vm._s(_vm.humanDialogTitle))]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"pl-6 pr-6\" },\n [\n _c(\"v-checkbox\", {\n attrs: { color: \"primary\" },\n scopedSlots: _vm._u([\n {\n key: \"label\",\n fn: function () {\n return [\n _c(\"span\", [_vm._v(_vm._s(_vm.humanCheckboxText))]),\n ]\n },\n proxy: true,\n },\n ]),\n model: {\n value: _vm.userIsHuman,\n callback: function ($$v) {\n _vm.userIsHuman = $$v\n },\n expression: \"userIsHuman\",\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"v-card-actions\",\n [\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\n \"v-btn\",\n {\n class: _vm.textColourCss,\n attrs: { color: \"primary\" },\n on: { click: _vm.onConfirmHuman },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.btnConfirmText) +\n \"\\n \"\n ),\n ]\n ),\n ],\n 1\n ),\n ],\n 1\n ),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"v-app-bar\",\n {\n attrs: {\n fixed: \"\",\n app: \"\",\n dark: !_vm.useDarkText,\n \"clipped-left\": \"\",\n color: \"primary\",\n },\n },\n [\n _c(\"v-app-bar-nav-icon\", {\n on: {\n click: function ($event) {\n $event.stopPropagation()\n return _vm.showMenu.apply(null, arguments)\n },\n },\n }),\n _vm._v(\" \"),\n _c(\"v-toolbar-title\", { class: _vm.$store.getters[\"textCssClass\"] }, [\n _vm._v(_vm._s(_vm.menuTitle)),\n ]),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\"toolstrip\"),\n _vm._v(\" \"),\n _c(\"speed-dial\"),\n _vm._v(\" \"),\n _c(\"culture-selector\"),\n _vm._v(\" \"),\n _c(\"profile\"),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"navigation-drawer\", { attrs: { app: \"\", cssClass: \"appNavDrawer\" } }),\n _vm._v(\" \"),\n _c(\n \"v-dialog\",\n {\n attrs: { persistent: \"\", width: \"unset\", fullscreen: _vm.isMobile },\n model: {\n value: _vm.showInitialDialog,\n callback: function ($$v) {\n _vm.showInitialDialog = $$v\n },\n expression: \"showInitialDialog\",\n },\n },\n [_c(\"router-view\", { attrs: { name: \"dialogView\" } })],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"v-main\",\n {\n directives: [\n {\n name: \"resize\",\n rawName: \"v-resize\",\n value: _vm.resizeHandler,\n expression: \"resizeHandler\",\n },\n ],\n attrs: { tag: \"div\", app: \"\", fluid: \"\" },\n },\n [\n _c(\"activity-snackbar\"),\n _vm._v(\" \"),\n _c(\"error-snackbar\"),\n _vm._v(\" \"),\n _c(\"cookie-snackbar\", {\n attrs: {\n cookieManager: _vm.cookieManager,\n show: _vm.showCookieSnackbar,\n text: _vm.cookiePolicyText,\n acceptText: _vm.$vuetify.lang.t(\n \"webmap.messages.cookiePolicy.acceptButtonText\"\n ),\n cancelText: _vm.$vuetify.lang.t(\n \"webmap.messages.cookiePolicy.declineButtonText\"\n ),\n },\n }),\n _vm._v(\" \"),\n _c(\"notification-snackbar\"),\n _vm._v(\" \"),\n _c(\"interactive-snackbar\"),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"vuetifyMapContainer\",\n attrs: { id: _vm.mapContainerId },\n }),\n _vm._v(\" \"),\n _c(\n \"application-side-panel\",\n {\n class: _vm.appSidePanelClass,\n attrs: {\n id: \"appSidePanel\",\n \"content-class\": \"appSidePanel_content background-colour\",\n position: \"left\",\n },\n on: { transitionComplete: _vm.transitionCompleteHandler },\n },\n [\n _c(\n \"v-fade-transition\",\n { attrs: { mode: \"out-in\" } },\n [\n _c(\"router-view\", {\n attrs: {\n name: \"appPanelView\",\n visible: _vm.appPanelVisible,\n },\n }),\n ],\n 1\n ),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"application-controls\"),\n _vm._v(\" \"),\n _vm._l(_vm.panels, function (panel, index) {\n return _c(panel, { key: index, tag: \"component\" })\n }),\n ],\n 2\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.haveItems\n ? _c(\n \"div\",\n _vm._l(_vm.$store.state.ui.toolstripItems, function (item, index) {\n return _c(\"toolstrip-item\", {\n key: index,\n attrs: { \"content-button-config\": item },\n })\n }),\n 1\n )\n : _vm._e()\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-tooltip\",\n {\n attrs: { bottom: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n class: _vm.cssClasses,\n attrs: {\n fab: \"\",\n \"aria-label\": _vm.btnAriaLabel,\n small: _vm.small,\n large: _vm.large,\n color: _vm.contentButtonConfig.color,\n dark: _vm.dark,\n light: _vm.light,\n to: _vm.contentButtonConfig.to,\n href: _vm.contentButtonConfig.href,\n target: _vm.contentButtonConfig.target,\n },\n on: { click: _vm.clickHandler },\n },\n on\n ),\n [\n _c(\"v-icon\", { class: _vm.iconClass }, [\n _vm._v(_vm._s(_vm.contentButtonConfig.icon)),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [_vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.btnTooltip))])]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport { INavigationButton, ThemeEnum, ButtonSizeEnum } from '../../../../../../CommonScripts/Abstractions';\nexport default Vue.extend({\n name: 'c-toolstrip-item',\n props: {\n contentButtonConfig: { type: Object as () => INavigationButton, required: true }\n },\n computed: {\n dark(): boolean { return this.contentButtonConfig.theme === ThemeEnum.Dark; },\n light(): boolean { return this.contentButtonConfig.theme === ThemeEnum.Light; },\n small(): boolean { return this.contentButtonConfig.size === ButtonSizeEnum.Small; },\n large(): boolean { return this.contentButtonConfig.size === ButtonSizeEnum.Large; },\n btnAriaLabel(): string { return this.$vuetify.lang.t(this.contentButtonConfig.ariaLabelKey); },\n btnTooltip(): string { return this.$vuetify.lang.t(this.contentButtonConfig.tooltipKey); },\n iconClass(): string {\n return this.$store.getters['textCssClass'];\n },\n cssClasses(): string {\n return `mr-2 ${this.contentButtonConfig.cssClasses}`;\n }\n },\n methods: {\n clickHandler() {\n if (this.contentButtonConfig.clickHandler)\n this.contentButtonConfig.clickHandler();\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolstripItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolstripItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./toolstripItem.vue?vue&type=template&id=50e7a2e3&\"\nimport script from \"./toolstripItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./toolstripItem.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('50e7a2e3')) {\n api.createRecord('50e7a2e3', component.options)\n } else {\n api.reload('50e7a2e3', component.options)\n }\n module.hot.accept(\"./toolstripItem.vue?vue&type=template&id=50e7a2e3&\", function () {\n api.rerender('50e7a2e3', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Toolstrip/toolstripItem.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolstrip.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolstrip.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport toolstripItem from './toolstripItem.vue'\nexport default Vue.extend({\n name: 'c-toolstrip',\n components: { 'toolstrip-item':toolstripItem },\n data() {\n return {};\n },\n computed: {\n haveItems(): boolean {\n return this.$store.state.ui.toolstripItems != null && this.$store.state.ui.toolstripItems.length > 0;\n }\n\n }\n});\n","import { render, staticRenderFns } from \"./toolstrip.vue?vue&type=template&id=35c69130&\"\nimport script from \"./toolstrip.vue?vue&type=script&lang=ts&\"\nexport * from \"./toolstrip.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('35c69130')) {\n api.createRecord('35c69130', component.options)\n } else {\n api.reload('35c69130', component.options)\n }\n module.hot.accept(\"./toolstrip.vue?vue&type=template&id=35c69130&\", function () {\n api.rerender('35c69130', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Toolstrip/toolstrip.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-menu\",\n {\n attrs: {\n bottom: \"\",\n left: \"\",\n \"offset-y\": \"\",\n \"close-on-content-click\": false,\n \"min-width\": 300,\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n attrs: {\n fab: \"\",\n small: \"\",\n color: \"primary\",\n \"aria-label\": _vm.btnAriaLabelAccount,\n },\n },\n on\n ),\n [\n _c(\"v-icon\", { class: _vm.iconColour }, [\n _vm._v(\"mdi-account-outline\"),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\n \"v-card\",\n { attrs: { \"max-width\": \"300\" } },\n [\n _c(\n \"v-toolbar\",\n { attrs: { dark: !_vm.useDarkText, dense: \"\", color: \"primary\" } },\n [\n _c(\"v-icon\", { class: _vm.accountButtonClass }, [\n _vm._v(\"mdi-account-outline\"),\n ]),\n _vm._v(\"\\n \" + _vm._s(_vm.name) + \"\\n \"),\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.canViewOtherMaps\n ? _c(\n \"v-list\",\n { staticClass: \"mt-2\", attrs: { dense: \"\" } },\n [\n _c(\n \"v-list-item\",\n { attrs: { dense: \"\" } },\n [\n _c(\"v-select\", {\n attrs: {\n dense: \"\",\n items: _vm.maps,\n \"menu-props\": \"auto\",\n label: _vm.selectLabel,\n \"item-text\": \"name\",\n \"item-value\": \"name\",\n \"return-object\": \"\",\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"append-outer\",\n fn: function () {\n return [\n _c(\n \"v-tooltip\",\n {\n attrs: { bottom: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n staticClass: \"mt-n2\",\n attrs: {\n icon: \"\",\n small: \"\",\n fab: \"\",\n color: \"primary\",\n \"aria-label\":\n _vm.btnAriaLabelView,\n href: _vm.mapLink,\n disabled:\n _vm.linkDisabled,\n },\n },\n on\n ),\n [\n _c(\"v-icon\", [\n _vm._v(\"mdi-eye\"),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(_vm._s(_vm.btnTooltipView)),\n ]),\n ]\n ),\n ]\n },\n proxy: true,\n },\n ],\n null,\n false,\n 1792044325\n ),\n model: {\n value: _vm.selectedMap,\n callback: function ($$v) {\n _vm.selectedMap = $$v\n },\n expression: \"selectedMap\",\n },\n }),\n ],\n 1\n ),\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"v-card-actions\",\n [\n _vm.showLogout\n ? _c(\"a\", { attrs: { href: \"../Account/profile\" } }, [\n _vm._v(\n _vm._s(\n _vm.$vuetify.lang.t(\n \"webmap.account.profile.profileLinkText\"\n )\n )\n ),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\"a\", { attrs: { href: _vm.helpUrl, target: \"_blank\" } }, [\n _vm._v(\n _vm._s(\n _vm.$vuetify.lang.t(\"webmap.account.profile.helpLinkText\")\n )\n ),\n ]),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\"a\", { attrs: { href: _vm.creditsUrl, target: \"_blank\" } }, [\n _vm._v(\n _vm._s(\n _vm.$vuetify.lang.t(\n \"webmap.account.profile.creditsLinkText\"\n )\n )\n ),\n ]),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _vm.showLogout\n ? _c(\n \"v-form\",\n { attrs: { method: \"post\", action: \"../Account/logout\" } },\n [\n _c(\n \"v-btn\",\n {\n class: _vm.buttonClass,\n attrs: { type: \"submit\", color: \"primary\" },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.btnTextLogout) +\n \"\\n \"\n ),\n ]\n ),\n ],\n 1\n )\n : _vm._e(),\n ],\n 1\n ),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\n\nexport default Vue.extend({\n name: 'profile',\n components: {\n },\n data() {\n return {selectedMap: null}\n },\n computed: {\n name(): string { return this.$store.state.profile.name; },\n showLogout(): boolean { return this.$store.state.profile.canLogout; },\n maps(): string[] { return this.$store.state.profile.maps; },\n canViewOtherMaps(): boolean {\n const showMapSwitcher = this.$store.state.profile.showMapSwitcher; \n return this.$store.state.profile.maps && this.$store.state.profile.maps.length > 0 && showMapSwitcher === true;\n },\n selectLabel(): string { return this.$vuetify.lang.t('webmap.account.profile.selectMapLabel'); },\n linkDisabled(): boolean { return this.selectedMap === null; },\n mapLink(): string {\n return `${this.$store.getters['baseUrl']}${this.$store.state.currentCulture}/${this.selectedMap?.allowAnonymous ? 'PublicMap': 'Map'}/${this.selectedMap?.name}`;\n },\n creditsUrl(): string { return `${this.$store.getters['baseUrl']}Credits`; },\n helpUrl(): string { return `${this.$store.getters['getUserHelpUrl']}`; },\n btnAriaLabelAccount(): string { return this.$vuetify.lang.t('webmap.ariaLabels.account'); },\n btnAriaLabelView(): string { return this.$vuetify.lang.t('webmap.ariaLabels.view'); },\n btnTooltipAccount(): string { return this.$vuetify.lang.t('webmap.tooltips.account'); },\n btnTooltipView(): string { return this.$vuetify.lang.t('webmap.tooltips.view'); },\n btnTextLogout(): string { return this.$vuetify.lang.t('webmap.buttonText.logout'); },\n useDarkText(): boolean {\n return this.$store.getters['useDarkText'];\n },\n iconColour(): string {\n return this.$store.getters['textCssClass'];\n },\n buttonClass(): string {\n return `no-text-transform ${this.iconColour}`;\n },\n accountButtonClass(): string {\n return `mr-2 ${this.iconColour}`;\n }\n },\n methods: {} \n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./profile.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./profile.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./profile.vue?vue&type=template&id=7d7972e9&\"\nimport script from \"./profile.vue?vue&type=script&lang=ts&\"\nexport * from \"./profile.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7d7972e9')) {\n api.createRecord('7d7972e9', component.options)\n } else {\n api.reload('7d7972e9', component.options)\n }\n module.hot.accept(\"./profile.vue?vue&type=template&id=7d7972e9&\", function () {\n api.rerender('7d7972e9', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Application/profile.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport Vuetify from 'Vuetify';\nimport VueRoute from 'Vue-Router';\ndeclare const ol: any;\nimport navigationDrawer from '../NavigationDrawer/navigationDrawer.vue';\nimport applicationPanel from '../Panels/applicationPanel.vue';\nimport contentControls from '../ContentControls/appControls.vue';\nimport speedDial from '../speedDial/speedDial.vue';\nimport toolstrip from '../Toolstrip/toolstrip.vue';\nimport activitySnackBar from '../Notifications/activitySnackbar.vue';\nimport errorSnackbar from '../Notifications/errorSnackbar.vue';\nimport cookieSnackbar from '../Notifications/cookieSnackbar.vue';\nimport notificationSnackbar from '../Notifications/notificationSnackbar.vue';\nimport interactiveSnackbar from '../Notifications/interactiveSnackbar.vue';\nimport { LayerStatus } from '../../../GeognoSIS/Overlay';\nimport { AjaxWrapper } from '../../../Core/AjaxWrapper';\nimport { CookieManager } from '../../../Core/CookieManager';\nimport { LayerFactory } from '../../../ol/LayerFactory';\nimport cultureSelector from './cultureSelector.vue';\nimport profile from './profile.vue';\nimport { IBookmark, IUrlParameters, IUrlParamterHandler, IWatermark } from '../../../../../../CommonScripts/Abstractions'; \n\nexport default Vue.extend({\n name: 'application',\n props: ['panels', 'toolbar', 'mapContainerId', 'mapControls', 'showCookieConsent'],\n data() {\n return {\n menuVisible: false,\n mapFeaturesVisible: false,\n appDrawVisible: false,\n cookieManager: new CookieManager(),\n appPanelVisible: false,\n humanDialogVisible: false,\n dataLayers: [],\n baseLayers: [],\n userIsHuman: false,\n urlPromises: [],\n urlFullMapPromises:[]\n };\n },\n computed: {\n menuTitle(): string {\n let retVal: string = '';\n if (this.$store.getters['map/getMapTitle']) {\n retVal = this.$vuetify.lang.t(this.$store.getters['map/getMapTitle']);\n }\n return retVal;\n },\n showCookieSnackbar(): boolean {\n return this.showCookieConsent && !this.cookieManager.haveConsent();\n },\n useDarkText(): boolean {\n return this.$store.getters['useDarkText'];\n },\n isMobile(): boolean {\n return this.$vuetify.breakpoint.mobile;\n },\n appSidePanelClass(): string {\n let cssclass = '';\n if (this.isMobile)\n cssclass = 'appSidePanelBottom';\n else\n cssclass = 'appSidePanel'\n return cssclass;\n }, \n btnConfirmText(): string {\n return this.$vuetify.lang.t('webmap.buttonText.confirm');\n },\n showHumanDialogSetting(): boolean { \n return this.$store.getters['getShowHumanDialog'];\n }, \n showInitialDialog(): boolean {\n return this.$store.state.ui.dialogVisible;\n },\n checkedIamHuman(): boolean {\n return this.$store.state.ui.checkedIamHuman;\n },\n textColourCss(): string {\n return this.$store.getters['textCssClass'];\n },\n humanDialogTitle(): string {\n return this.$vuetify.lang.t('webmap.humanDialog.title');\n }, \n humanCheckboxText(): string {\n return this.$vuetify.lang.t('webmap.humanDialog.text');\n },\n cookiePolicyText(): string {\n return this.$vuetify.lang.t('webmap.messages.cookiePolicy.text', this.$store.getters['getCookiePolicyUrl']);\n }\n },\n components: {\n 'navigation-drawer': navigationDrawer,\n 'application-side-panel': applicationPanel,\n 'activity-snackbar': activitySnackBar,\n 'cookie-snackbar': cookieSnackbar,\n 'error-snackbar': errorSnackbar,\n 'application-controls': contentControls,\n 'speed-dial': speedDial,\n 'culture-selector': cultureSelector,\n 'notification-snackbar': notificationSnackbar,\n 'toolstrip': toolstrip,\n 'interactive-snackbar': interactiveSnackbar,\n 'profile': profile\n },\n methods: {\n hideSearchResults(): void {\n this.$store.commit('setShowSearchResults', false);\n },\n showSearch(): void {\n this.$store.commit('setShowSearch', !this.$store.state.showSearch);\n },\n showMenu(): void {\n this.$store.commit('ui/setNavDrawerVisible', !this.$store.state.ui.navDrawerVisible);\n },\n transitionCompleteHandler(eventArgs): void {\n this.appPanelVisible = eventArgs.show;\n },\n resizeHandler(): void {\n if (this.$store.state.map.olMap) {\n setTimeout(() => {\n var el = document.getElementById(this.mapContainerId);\n el.style.height = `${this.$vuetify.breakpoint.height - this.$vuetify.application.top}px`;\n\n this.$store.state.map.olMap.updateSize();\n this.$store.state.map.olMap.render();\n }, 300);\n\n }\n },\n getLayerIndex(layer: any): string {\n const layerIndex = layer.get(\"layerIndex\"); \n return (layerIndex == null || layerIndex == undefined) ? \"undefined\" : layerIndex;\n },\n sortLayerByIndex(a: any, b: any): number { \n const layerIndexA = this.getLayerIndex(a); // this can be a string, e.g. '002' or '001_002', or even undefined\n const layerIndexB = this.getLayerIndex(b); // this can be a string, e.g. '002' or '001_002', or even undefined \n if (layerIndexA === layerIndexB) return 0;\n return layerIndexB < layerIndexA ? 1 : -1; \n }, \n onConfirmHuman(): void {\n if (!this.userIsHuman) return;\n this.humanDialogVisible = false;\n this.setCheckedIamHuman();\n this.continueLoadingMap();\n },\n startLoadingMap(): void {\n if (!this.$store.state.map.olMap) {\n const centre: [number, number] = [this.$store.state.map.initialMapState.location[0], this.$store.state.map.initialMapState.location[1]];\n const zoom: number = this.$store.state.map.initialMapState.zoom;\n const extent: number[] = this.$store.state.map.initialMapState.viewExtent ? this.$store.state.map.initialMapState.viewExtent : null;\n const resolutions: number[] = this.$store.getters['map/getResolutions'];\n const viewOptions: { center: number[], projection: string, resolution: number, constrainResolution: boolean, extent?: number[], enableRotation: boolean, resolutions?: number[] } = { center: centre, projection: this.$store.state.map.initialMapState.projection, resolution: this.$store.state.map.initialMapState.zoom, constrainResolution: true, enableRotation: false }\n\n if (extent)\n viewOptions.extent = extent;\n if (resolutions)\n viewOptions.resolutions = resolutions;\n const theMap_view = new ol.View(viewOptions);\n const calcScale = function (resolution: number): number {\n const prj = theMap_view.getProjection();\n const mPerUnit: number = prj.getMetersPerUnit();\n const inchesPerM = 39.37;\n const dpi = 90;\n return Math.round(resolution * mPerUnit * inchesPerM * dpi);\n };\n theMap_view.on('change:resolution', () => {\n const newRes: number = theMap_view.getResolution();\n const scale = calcScale(newRes);\n this.$store.commit('map/setScale', scale)\n });\n\n this.$store.dispatch('bookmarks/getLocalBookmarksForMap', this.$store.state.mapName)\n .then((response) => {\n const homeBookmark: IBookmark = this.$store.getters['bookmarks/homeBookmark'];\n if (homeBookmark !== null) {\n theMap_view.setCenter([homeBookmark.location.x, homeBookmark.location.y]);\n theMap_view.setResolution(homeBookmark.resolution);\n }\n });\n\n this.dataLayers = this.$store.state.map.dataLayers ? this.$store.state.map.dataLayers : []; \n\n var container = document.getElementById(this.mapContainerId);\n container.style.height = `${this.$vuetify.breakpoint.height - this.$vuetify.application.top}px`;\n\n this.baseLayers = this.$store.state.map.baseLayers ? this.$store.state.map.baseLayers : []; \n\n let map = new ol.Map({\n view: theMap_view,\n logo: '',\n target: this.mapContainerId,\n layers: this.baseLayers, // just put in base layers first, then add the rest in sorted order later.\n controls: []\n });\n\n /* logic to get attributions resides here; Bing maps requires frameState (other types don't) but this odd requirement forces this logic here */\n map.once('loadend', (e: any) => { // event for panning and zooming map, hopefully not conflicting with rendercomplete \n const attributions: string[] = this.getAttributions(e.frameState);\n this.$store.commit('map/setAttributions', attributions);\n });\n \n\n const initialRes: number = theMap_view.getResolution();\n this.$store.commit('map/setScale', calcScale(initialRes))\n\n if (this.mapControls && this.mapControls.length > 0) {\n for (let contrlCount = 0; contrlCount < this.mapControls.length; contrlCount++) {\n map.addControl(this.mapControls[contrlCount]);\n }\n }\n this.$store.commit('map/setMap', map);\n\n // Watermark layer setup\n const watermark: IWatermark = this.$store.getters['map/getWatermark'];\n if (watermark && Object.keys(watermark).length >= 4) {\n const layerFactory = new LayerFactory();\n const size: number[] = [watermark.width, watermark.height];\n\n const watermarkLayer = new ol.layer.Tile({\n map: map,\n opacity: watermark.opacity,\n visible: true,\n source: new ol.source.TileImage({\n crossOrigin: 'anonymous',\n tileGrid: layerFactory.createTileGridFromProjection(theMap_view.getProjection(), size),\n tileUrlFunction: function (tileCoord, pixelRatio, projection) { return watermark.url; }\n })\n });\n }\n this.handleInitialBaseLayer();\n } else {\n var container = document.getElementById(this.mapContainerId);\n container.style.height = `${this.$vuetify.breakpoint.height - this.$vuetify.application.top}px`;\n this.$store.state.map.olMap.setTarget(document.getElementById(this.mapContainerId));\n\n this.dataLayers = this.$store.state.map.dataLayers ? this.$store.state.map.dataLayers : [];\n this.baseLayers = this.$store.state.map.baseLayers ? this.$store.state.map.baseLayers : []; \n\n this.$store.state.map.olMap.updateSize();\n this.$store.state.map.olMap.render(); \n }\n },\n continueLoadingMap(): void {\n this.$store.dispatch('extensions/activateDefault');\n const geognosisLayerId = this.$store.state.map.geognoSis.geognoSisLayerId;\n\n if (geognosisLayerId == null) {\n this.finishLoadingMap([]); // no Geognosis overlay layers here\n return;\n } \n \n this.$store.commit('ui/setActivityMessage', this.$vuetify.lang.t('webmap.messages.geognosis.creatingSession'));\n let timeout = 1140000;//19 mins in milliseconds\n this.$store.dispatch('map/geognoSis/initialiseGeognoSIS')\n .then(response => {\n this.$store.commit('ui/setActivityMessage', this.$vuetify.lang.t('webmap.messages.geognosis.gettingOverlays'));\n timeout = response.data.timeout;//in miliseconds.\n //reduce by 30seconds\n timeout -= 30000;\n return this.$store.dispatch('map/geognoSis/getOverlaysFromServer');\n })\n .then(response => { \n\n this.$store.commit('ui/setActivityMessage', this.$vuetify.lang.t('webmap.messages.geognosis.creatingLayers'));\n const overlayLayers = [];\n const ajax = new AjaxWrapper(this.$store.state.ajaxDefaults); \n const layerFactory = new LayerFactory();\n\n const singleTile: boolean = this.$store.getters['map/geognoSis/getSingleTile']; \n const extent: number[] | undefined = this.$store.getters['map/geognoSis/getExtent'];\n const sessionId = this.$store.state.map.geognoSis.sessionId;\n\n for (let overlayCount = 0; overlayCount < response.length; overlayCount++) {\n const overlay = response[overlayCount];\n if (!overlay.errorCondition) {\n try {\n const layer = layerFactory.createLayer(overlay, this.$store.state.map.initialMapState.projection, sessionId, ajax, this.$store.state.map.geognoSis.tileSize, singleTile, extent);\n const opacity: number = this.$store.getters[\"map/geognoSis/getOpacity\"];\n layer.setOpacity(opacity);\n // set a new property to help with sorting\n const paddedPrefix: string = this.$store.getters[\"map/geognoSis/layerIndexPrefix\"]; // padded number e.g. '002'\n const paddedSuffix = overlay.m_overlayIndex.toString().padStart(3, '0'); // padded number e.g. '003'\n const combinedIndex = `${paddedPrefix}_${paddedSuffix}`; // sortable string e.g. '002_003' so that it ca be sorted by 2 variables\n layer.set(\"layerIndex\", combinedIndex);\n\n // continue \n overlayLayers.push(layer);\n }\n catch (err) {\n console.log(err);\n }\n }\n }\n\n this.initializeRefresher(timeout, geognosisLayerId, sessionId); \n\n this.finishLoadingMap(overlayLayers);\n })\n .catch(err => {\n console.log(err);\n this.$store.commit('ui/setActivityMessage', '');\n this.$store.commit('ui/setErrorMessage', this.$vuetify.lang.t('webmap.messages.geognosis.error'));\n }); \n },\n initializeRefresher(timeout: number, geognosisLayerId: string, sessionId: string): void {\n let pinger: Worker = null; \n try {\n pinger = new Worker(`${this.$store.state.baseUrl}js/pinger.min.js`);\n pinger.postMessage({ ajaxConfig: this.$store.state.ajaxDefaults, interval: timeout, cmd: 'start', actionUrl: `${this.$store.state.baseUrl}GeognoSis/${this.$store.state.mapName}/${geognosisLayerId}/${sessionId}/ping` });\n }\n catch (ex) {\n console.log('pinger failed to initialise');\n console.log(ex);\n }\n try {\n const refresher = new Worker(`${this.$store.state.baseUrl}js/tokenRefresher.min.js`);\n let token = this.$store.state.ajaxDefaults.headers['Authorization'];\n if (token)\n token = token.substring(token.indexOf(' ') + 1);\n refresher.onmessage = (eventArgs) => {\n const data: { token: string, refreshToken: string } = eventArgs.data;\n this.$store.commit('setRefreshToken', data.refreshToken);\n this.$store.commit('setAuthorisation', data.token);\n (window as any).wmJwtToken = data.token;\n if (pinger !== null) {\n pinger.postMessage({ ajaxConfig: this.$store.state.ajaxDefaults, cmd: 'updateconfig' });\n }\n };\n refresher.postMessage({ ajaxConfig: this.$store.state.ajaxDefaults, refreshInterval: this.$store.state.refreshInterval, cmd: 'start', actionUrl: `${this.$store.state.baseUrl}Account/refresh`, refreshToken: this.$store.state.token, token: token });\n }\n catch (ex) {\n console.log('refresher failed to initialise');\n console.log(ex);\n }\n }, \n finishLoadingMap(overlayLayers): void {\n let combinedLayers = this.baseLayers.concat(this.dataLayers).concat(overlayLayers);\n combinedLayers.sort(this.sortLayerByIndex);\n const map = this.$store.state.map.olMap;\n map.setLayers(combinedLayers); // added rest of layers and overlays in sorted order on top of base layers\n\n combinedLayers = this.dataLayers.concat(overlayLayers); // remove baselayers\n const visibleDataLayers: string[] = this.$store.getters['map/initialDataLayers']\n if (visibleDataLayers && visibleDataLayers.length > 0)\n this.setDataLayerVisibility(visibleDataLayers, combinedLayers);\n\n combinedLayers.sort(this.sortLayerByIndex); // sort this list of layers before committing to store to benefit other controls that list layers\n\n this.$store.commit('map/setDataLayers', combinedLayers);\n this.$store.commit('ui/setActivityMessage', '');\n\n // get and set attributions for toggling of layer visibility \n const frameState = this.compileFrameState(map.getView());\n combinedLayers.forEach(x => { \n x.on('change:visible', (e: any) => {\n const attributions = this.getAttributions(frameState);\n this.$store.commit('map/setAttributions', attributions);\n });\n });\n\n // the baselayer(s) also need this extra logic\n this.baseLayers.forEach(x => { \n x.on('change:visible', (e: any) => {\n const attributions = this.getAttributions(frameState);\n this.$store.commit('map/setAttributions', attributions);\n });\n }); \n\n if (this.urlFullMapPromises && this.urlFullMapPromises.length > 0) {\n Promise.all(this.urlFullMapPromises)\n .then(() => {\n this.handleInitialRoute();\n });\n }\n else {\n this.handleInitialRoute();\n }\n },\n handleInitialBaseLayer(): void {\n if (this.$store.state.map.baseLayers && this.$store.state.map.baseLayers.length > 0) {\n const baseLayer: string = this.$store.getters['map/initialBaseLayer'];\n if (baseLayer) {\n this.setBaseLayerVisible(baseLayer, this.$store.state.map.baseLayers);\n }\n else {\n let foundVisible = false;\n for (let c = 0; c < this.$store.state.map.baseLayers.length && !foundVisible; c++) {\n if (this.$store.state.map.baseLayers[c].getVisible()) {\n foundVisible = true;\n this.$store.commit('map/setCurrentBaseLayer', this.$store.state.map.baseLayers[c]);\n }\n }\n }\n }\n },\n setBaseLayerVisible(baseLayer: string, baseLayers: any[]): void {\n const found = baseLayers.find((layer) => {\n return layer.get('name') === baseLayer;\n });\n const others = baseLayers.filter((layer) => {\n return layer.get('name') !== baseLayer;\n });\n if (found !== null) {\n found.setVisible(true);\n this.$store.dispatch('map/setCurrentBaseLayer', found);\n }\n if (others && others.length > 0) {\n for (let c = 0; c < others.length; c++) {\n others[c].setVisible(false);\n }\n }\n },\n setDataLayerVisibility(visibleDataLayers: string[], dataLayers: any[]) {\n const layers = [...dataLayers];\n for (let c = 0; c < visibleDataLayers.length; c++) {\n const foundIndex = layers.findIndex((layer) => {\n return layer.get('name') === visibleDataLayers[c] && !layer.get('isExtensionLayer') && !layer.get('userAdded');\n });\n if (foundIndex !== -1) {\n const layer = layers[foundIndex];\n layers.splice(foundIndex, 1);\n layer.setVisible(true);\n const source = layer.getSource()\n if (source.overlay) {\n const newStatus = source.overlay.maxStatus ? source.overlay.maxStatus : LayerStatus.Hittable; // Cadcorp.Core.GeognoSIS.LayerStatusEnum: Invisible = 0, Visible = 1, Hittable = 2, Editable = 3 \n layer.getSource().overlay.setStatus(newStatus);\n }\n }\n }\n if (layers.length > 0) {\n for (let c = 0; c < layers.length; c++) {\n const layer = layers[c];\n if (!layer.get('isExtensionLayer') && !layer.get('userAdded')) {\n layer.setVisible(false);\n const source = layer.getSource();\n if (source.overlay) {\n source.overlay.setStatus(LayerStatus.Invisible);\n }\n }\n }\n }\n },\n handleParameters(): Promise {\n const params: IUrlParameters = this.$store.getters['getUrlParameters'];\n if(this.urlPromises.length > 0)\n this.urlPromises = [];\n if (this.urlFullMapPromises.length > 0)\n this.urlFullMapPromises = [];\n if (params !== null) { // we have a param object\n const keys = Object.keys(params);\n if (keys !== null && keys.length > 0) {//have params so handle them\n for (let c = 0; c < keys.length; c++) { // the key is either an extension id or will resolve to a function\n const id = keys[c];\n const p = params[id];\n const promises: Promise[] = p.requiresFullMap ? this.urlFullMapPromises : this.urlPromises;\n const ext: IUrlParamterHandler = this.$store.getters['extensions/getExtension'](id);// see if it's an extension \n if (ext) {// it is \n if (ext.handleUrlParameters) {// does it implement IUrlParamterHandler, if so use it\n promises.push(ext.handleUrlParameters.apply(ext, p.parameters));\n }\n }\n else {\n // something else possibly buried in a nest of namespaces\n let f = null;\n if (id.indexOf('.') === -1) {// no dots so a global function or object\n f = window[id];\n }\n else { // find our function or object\n const bits = id.split('.');\n let obj = window;\n for (let bit = 0; bit < bits.length; bit++) {\n obj = obj[bits[bit]];\n }\n f = obj;\n }\n if (typeof f === 'function') {\n promises.push(f.apply(window, p.parameters));\n }\n else if (typeof f === 'object') {\n //see if we have a handleUrlParameters function\n if (f.handleUrlParameters)\n promises.push(f.handleUrlParameters.apply(f, p.parameters))\n }\n }\n }\n }\n }\n let retVal: Promise = null;\n if (this.urlPromises && this.urlPromises.length > 0)\n retVal = Promise.all(this.urlPromises).then(() => true);\n else\n retVal = Promise.resolve(true);\n return retVal;\n },\n handleInitialRoute(): void {\n let route = this.$store.getters['getInitialRoute'];\n if(route){\n this.$router.replace({path:route });\n }\n },\n \n setCheckedIamHuman(): void {\n this.$store.commit('ui/setCheckedIamHuman', true);\n },\n /** Bing maps necessitates this function to be here and to be called from a map event such as moveend or loadend to get the frameState */\n getAttributions(frameState: any): string[] {\n const datalayers: any[] = this.$store.state.map.dataLayers.filter(x => x.getVisible && x.getVisible() && x.getSource && x.getSource()); \n const baselayers = this.$store.state.map.baseLayers.filter(x => x.getVisible && x.getVisible() && x.getSource && x.getSource());\n const layers = datalayers.concat(baselayers);\n const yearRegEx = /%year%/gmi;\n let attributions: string[] = [];\n\n layers.forEach((layer, index) => { \n const attr: Function = layer.getSource().getAttributions(); \n if (attr == undefined || attr == null) return; \n let textOrArray: string | string[];\n textOrArray = attr(frameState); // Bing maps requires a 'frameState' argument; other layer types have no parameter\n if (textOrArray instanceof Array) textOrArray = textOrArray.join('; '); \n attributions.push(textOrArray); \n });\n\n // replace %year% token with current year\n const date: Date = new Date(Date.now());\n const result = attributions.map(x => x.replace(yearRegEx, date.getFullYear().toString())); \n\n // return result\n return result.length > 0 ? result : this.$store.state.copyright; \n },\n compileFrameState(mapView) {\n return {\n viewState: {\n zoom: mapView.getZoom(),\n center: mapView.getCenter(),\n resolution: mapView.getResolution()\n },\n extent: mapView.calculateExtent()\n }\n } \n },\n beforeRouteLeave(to, from, next): void {\n this.$store.commit('ui/setNavDrawerVisible', false);\n next();\n },\n beforeMount(): void { \n this.humanDialogVisible = this.showHumanDialogSetting && !this.checkedIamHuman; \n },\n mounted(): void {\n this.$nextTick(function () { //all the dom elements will be available now so create the map\n if (!this.$store.state.map.olMap) { //no map yet, so lets set it up\n this.startLoadingMap();\n this.handleParameters()\n .then(() => {\n if (this.showHumanDialogSetting || this.humanDialogVisible) return;\n this.continueLoadingMap();\n });\n }\n else {// we have a map so we're probably coming back from a different app route\n // so lets move it to our container and redraw\n this.$store.state.map.olMap.setTarget(document.getElementById(this.mapContainerId));\n this.$store.state.map.olMap.updateSize();\n this.$store.state.map.olMap.render();\n }\n\n });\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./map.vue?vue&type=template&id=f52d5dc8&\"\nimport script from \"./map.vue?vue&type=script&lang=ts&\"\nexport * from \"./map.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f52d5dc8')) {\n api.createRecord('f52d5dc8', component.options)\n } else {\n api.reload('f52d5dc8', component.options)\n }\n module.hot.accept(\"./map.vue?vue&type=template&id=f52d5dc8&\", function () {\n api.rerender('f52d5dc8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Application/map.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-container\",\n { class: _vm.containerCss, attrs: { fluid: \"\" } },\n [\n _c(\n \"v-toolbar\",\n { attrs: { dark: _vm.dark, color: _vm.colour, dense: _vm.dense } },\n [\n _c(\"v-toolbar-title\", { class: _vm.textColourCss }, [\n _vm._v(_vm._s(_vm.title)),\n ]),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _vm._t(\"toolbarItems\"),\n _vm._v(\" \"),\n _vm.isMobile\n ? _c(\n \"v-btn\",\n {\n attrs: {\n small: \"\",\n fab: \"\",\n color: _vm.colour,\n dark: _vm.dark,\n },\n on: { click: _vm.closeClickHandler },\n },\n [\n _c(\"v-icon\", { class: _vm.textColourCss }, [\n _vm._v(\"mdi-close\"),\n ]),\n ],\n 1\n )\n : _vm._e(),\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"v-row\",\n {\n staticClass: \"y_scroll\",\n style: _vm.calcHeight,\n attrs: { \"no-gutters\": \"\" },\n },\n [\n _c(\n \"v-col\",\n {\n class: _vm.contentCss,\n style: _vm.calcWidth,\n attrs: { cols: \"12\" },\n },\n [_vm._t(\"contents\")],\n 2\n ),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue, { PropOptions } from 'Vue';\nimport Vuex from 'Vuex';\nimport Vuetify from 'Vuetify';\nimport VueRoute from 'Vue-Router';\n\nexport default Vue.extend({\n name:'application-panel-content',\n props: {\n title: { type: String, required: false } as PropOptions,\n colour: { type: String, requied: false } as PropOptions,\n dark: { type: Boolean, required: false, default:false } as PropOptions,\n dense: { type: Boolean, required: false } as PropOptions,\n containerClasses: { type: String, required: false } as PropOptions,\n contentClasses: { type: String, required: false } as PropOptions\n },\n computed: {\n contentCss(): string {\n return `panelContent fullHeight ${this.contentClasses}`;\n },\n containerCss(): string {\n return `pa-0 ${this.containerClasses}`;\n },\n calcWidth(): string {\n var width = '';\n if (this.$root.$vuetify.breakpoint.smAndDown) {\n width = `width:${this.$vuetify.breakpoint.width * 0.9}px;`;\n }\n return width;\n },\n calcHeight(): string {\n return `height:calc(100% - ${this.$vuetify.application.top}px);`;\n },\n textColourCss(): string {\n return this.$store.getters['textCssClass'];\n },\n isMobile(): boolean {\n return this.$vuetify.breakpoint.mobile;\n }\n },\n methods: {\n closeClickHandler(): void {\n this.$router.replace({ path:'/' });\n this.$store.commit('ui/setAppPanelVisible', false);\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./applicationPanelContents.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./applicationPanelContents.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./applicationPanelContents.vue?vue&type=template&id=0947e926&\"\nimport script from \"./applicationPanelContents.vue?vue&type=script&lang=ts&\"\nexport * from \"./applicationPanelContents.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0947e926')) {\n api.createRecord('0947e926', component.options)\n } else {\n api.reload('0947e926', component.options)\n }\n module.hot.accept(\"./applicationPanelContents.vue?vue&type=template&id=0947e926&\", function () {\n api.rerender('0947e926', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Panels/applicationPanelContents.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-tooltip\",\n {\n attrs: { bottom: \"\", disabled: _vm.disabled },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n attrs: {\n icon: \"\",\n \"aria-label\": _vm.ariaLabel,\n outlined: _vm.outlined,\n disabled: _vm.disabled,\n },\n on: { click: _vm.clickHandler },\n },\n on\n ),\n [_c(\"v-icon\", [_vm._v(_vm._s(_vm.icon))])],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [_vm._v(\" \"), _c(\"span\", [_vm._v(_vm._s(_vm.tooltip))])]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n import Vue from 'Vue';\nimport Vuex from 'Vuex';\nimport Vuetify from 'Vuetify';\nimport VueRoute from 'Vue-Router';\n\nexport default Vue.extend({\n name: 'tooltip-button',\n props: {\n ariaLabel: { type: String, required: true },\n tooltip: { type: String, required: true },\n icon: { type: String, required: true },\n outlined: { type: Boolean, required: false },\n disabled: { type: Boolean, required: false }\n },\n methods: {\n clickHandler() {\n this.$emit('click');\n }\n },\n computed: {\n }\n\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./button.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./button.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./button.vue?vue&type=template&id=5b13b8a2&\"\nimport script from \"./button.vue?vue&type=script&lang=ts&\"\nexport * from \"./button.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('5b13b8a2')) {\n api.createRecord('5b13b8a2', component.options)\n } else {\n api.reload('5b13b8a2', component.options)\n }\n module.hot.accept(\"./button.vue?vue&type=template&id=5b13b8a2&\", function () {\n api.rerender('5b13b8a2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/Application/button.vue\"\nexport default component.exports","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"v-data-table\", {\n attrs: {\n dense: \"\",\n headers: _vm.headers,\n items: _vm.filterItems,\n \"fixed-header\": _vm.fixedHeader,\n height: _vm.tableHeight,\n \"custom-sort\": _vm.sortFunction,\n },\n scopedSlots: _vm._u(\n [\n _vm.showFilter\n ? {\n key: \"top\",\n fn: function () {\n return [\n _c(\n \"v-layout\",\n { staticClass: \"fullWidth px-3\" },\n [\n _c(\n \"v-row\",\n { attrs: { dense: \"\" } },\n [\n _c(\"v-select\", {\n staticClass: \"mr-1\",\n attrs: {\n dense: \"\",\n label: _vm.$vuetify.lang.t(\n \"webmap.featureTable.labels.column\"\n ),\n items: _vm.availableColumns,\n \"return-object\": \"\",\n disabled: _vm.filterDisabled,\n },\n on: { change: _vm.selectedColumnChanged },\n model: {\n value: _vm.selectedColumn,\n callback: function ($$v) {\n _vm.selectedColumn = $$v\n },\n expression: \"selectedColumn\",\n },\n }),\n _vm._v(\" \"),\n _c(\"v-select\", {\n staticClass: \"mr-1\",\n attrs: {\n dense: \"\",\n label: _vm.$vuetify.lang.t(\n \"webmap.featureTable.labels.filter\"\n ),\n items: _vm.filterTypes,\n disabled: _vm.filterDisabled,\n },\n model: {\n value: _vm.filterType,\n callback: function ($$v) {\n _vm.filterType = $$v\n },\n expression: \"filterType\",\n },\n }),\n _vm._v(\" \"),\n _c(_vm.valueComponent, {\n ref: \"userInput\",\n tag: \"component\",\n staticClass: \"mr-1\",\n attrs: {\n dense: \"\",\n label: _vm.$vuetify.lang.t(\n \"webmap.featureTable.labels.value\"\n ),\n rules: _vm.filterRules,\n disabled: _vm.filterDisabled,\n \"hide-spin-buttons\": \"\",\n type: _vm.valueType,\n items: _vm.listItems,\n },\n model: {\n value: _vm.filterValue,\n callback: function ($$v) {\n _vm.filterValue = $$v\n },\n expression: \"filterValue\",\n },\n }),\n _vm._v(\" \"),\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\n \"v-tooltip\",\n {\n attrs: { left: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n {\n staticClass: \"mr-1\",\n attrs: {\n icon: \"\",\n small: \"\",\n disabled: _vm.applyFilterDisabled,\n \"aria-label\": _vm.$vuetify.lang.t(\n \"webmap.ariaLabels.filter\"\n ),\n },\n on: {\n click: _vm.applyFilterHandler,\n },\n },\n [\n _c(\"v-icon\", [\n _vm._v(\"mdi-filter-outline\"),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$vuetify.lang.t(\n \"webmap.tooltips.filter\"\n )\n )\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tooltip\",\n {\n attrs: { left: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n {\n attrs: {\n icon: \"\",\n small: \"\",\n disabled:\n _vm.removeFilterDisabled,\n \"aria-label\": _vm.$vuetify.lang.t(\n \"webmap.ariaLabels.removeFilter\"\n ),\n },\n on: {\n click: _vm.clearFilterHandler,\n },\n },\n [\n _c(\"v-icon\", [\n _vm._v(\"mdi-filter-off-outline\"),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(\n _vm._s(\n _vm.$vuetify.lang.t(\n \"webmap.tooltips.removeFilter\"\n )\n )\n ),\n ]),\n ]\n ),\n ],\n 1\n ),\n ],\n 1\n ),\n ]\n },\n proxy: true,\n }\n : null,\n _vm._l(_vm.headers, function (header) {\n return {\n key: \"header.\" + header.value,\n fn: function (ref) {\n var header = ref.header\n return [\n header.value !== \"__actions\"\n ? _c(\n \"div\",\n {\n key: header.value,\n staticClass: \"d-inline-block\",\n style: _vm.headerWidth(header),\n },\n [\n _c(\n \"div\",\n { staticClass: \"d-flex\" },\n [\n _c(\"span\", [_vm._v(_vm._s(header.text))]),\n _vm._v(\" \"),\n header.closable ? _c(\"v-spacer\") : _vm._e(),\n _vm._v(\" \"),\n header.closable\n ? _c(\n \"v-tooltip\",\n {\n attrs: { left: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-btn\",\n _vm._g(\n {\n attrs: {\n icon: \"\",\n \"x-small\": \"\",\n \"aria-label\":\n _vm.closeLabel,\n },\n on: {\n click: function ($event) {\n $event.stopPropagation()\n return _vm.removeColumn(\n header\n )\n },\n },\n },\n on\n ),\n [\n _c(\"v-icon\", [\n _vm._v(\"mdi-close\"),\n ]),\n ],\n 1\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\"span\", [\n _vm._v(_vm._s(_vm.closeToolTip)),\n ]),\n ]\n )\n : _vm._e(),\n ],\n 1\n ),\n ]\n )\n : _vm._e(),\n ]\n },\n }\n }),\n {\n key: \"item\",\n fn: function (ref) {\n var item = ref.item\n var index = ref.index\n return [\n _c(\n \"tr\",\n _vm._l(_vm.headers, function (col, columnIndex) {\n return _c(\"td\", [\n col.value !== \"__actions\"\n ? _c(\"span\", [\n _vm.isUrl(item, col)\n ? _c(\n \"a\",\n {\n attrs: {\n href: _vm.getCellData(item, col),\n target: \"_blank\",\n },\n },\n [_vm._v(_vm._s(_vm.getCellData(item, col)))]\n )\n : _c(\"span\", [\n _vm._v(_vm._s(_vm.getCellData(item, col))),\n ]),\n ])\n : _c(\n \"span\",\n [\n _c(\n \"v-tooltip\",\n {\n attrs: { left: \"\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n return [\n _c(\n \"v-icon\",\n _vm._g(\n {\n staticClass: \"mr-2\",\n attrs: {\n small: \"\",\n \"aria-label\": _vm.viewLabel,\n },\n on: {\n click: function ($event) {\n return _vm.viewClickedHandler(\n item\n )\n },\n },\n },\n on\n ),\n [_vm._v(\"mdi-eye\")]\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n },\n [\n _vm._v(\" \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.viewToolTip))]),\n ]\n ),\n ],\n 1\n ),\n ])\n }),\n 0\n ),\n ]\n },\n },\n ],\n null,\n true\n ),\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { ISchemaColumn, ITableHeader, ITableFilter, FilterTypeEnum } from '../../../../../../CommonScripts/Abstractions';\r\nimport { Feature } from 'GeoJSON';\r\ndeclare const Cadcorp: any;\r\nconst isoDateRegEx = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?(Z)?$/;\r\n\r\n/**\r\n * @class\r\n * @classdesc A factory to get data for a data table.\r\n */\r\nexport class DataTableFactory {\r\n constructor() { }\r\n getHeader(schema: ISchemaColumn[], sortable: boolean): ITableHeader[] {\r\n let headers: ITableHeader[] = null;\r\n if (schema && schema.length > 0) {\r\n headers = [];\r\n \r\n for (let c = 0; c < schema.length; c++) {\r\n const schemaCol: ISchemaColumn = schema[c];\r\n const AllowedFilters = this.getAllowedFilters(schemaCol)\r\n const header: ITableHeader = {\r\n sortable: sortable,\r\n align: 'start',\r\n text: schemaCol.name,\r\n value: schemaCol.name,\r\n type: schemaCol.type,\r\n typeName: schemaCol.typeName,\r\n sort: sortable ? this.getSortFunction(schemaCol): undefined,\r\n closable: true,\r\n filterable: AllowedFilters !== FilterTypeEnum.None,\r\n allowedFilters: AllowedFilters\r\n }\r\n headers.push(header);\r\n }\r\n const actionHeader: ITableHeader = {\r\n sortable: false,\r\n align: 'start',\r\n text: '',\r\n value: '__actions',\r\n type: null,\r\n typeName: null,\r\n closable: false,\r\n filterable: false,\r\n allowedFilters: FilterTypeEnum.None\r\n }\r\n headers.push(actionHeader);\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n getCSVRow(layer: any, rowData: any, header: ITableHeader[]): string[] {\r\n const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here\r\n\r\n const retVal = header.map((header) => {\r\n return JSON.stringify(this.getCellData(layer, rowData, header), replacer);\r\n });\r\n return retVal;\r\n }\r\n getCellData(layer: any, rowData: any, header: ITableHeader): any {\r\n let retVal = null;\r\n if (layer.getSource().overlay) {\r\n retVal = this.getSISCellData(rowData, header);\r\n } else\r\n retVal = this.getGeoJsonCellData(rowData, header);\r\n return retVal;\r\n }\r\n private getAllowedFilters(schemaCol: ISchemaColumn): FilterTypeEnum {\r\n let allowed = FilterTypeEnum.None;\r\n switch (schemaCol.type) {\r\n case 7: //date\r\n allowed = FilterTypeEnum.Equals | FilterTypeEnum.GreaterThan | FilterTypeEnum.GreaterThanEquals | FilterTypeEnum.LessThan | FilterTypeEnum.LessThanEquals;\r\n break;\r\n case 11: //boolean\r\n allowed = FilterTypeEnum.Equals;\r\n break;\r\n case 8: //string $ type columns\r\n allowed = FilterTypeEnum.Contains | FilterTypeEnum.Equals;\r\n break;\r\n // numeric types that are actually returned as numbers from geognosis\r\n case 2: //short int\r\n case 4: //single type\r\n case 5: //numeric # type column\r\n case 3: //integer type column & suffix\r\n case 6: //currency\r\n case 18://unsigned short\r\n case 16://byte\r\n case 17://unsigned byte\r\n allowed = FilterTypeEnum.Equals | FilterTypeEnum.GreaterThan | FilterTypeEnum.GreaterThanEquals | FilterTypeEnum.LessThan | FilterTypeEnum.LessThanEquals;\r\n break;\r\n // numeric types that are actually returned as strings from geognosis so filtering will be limited to equals\r\n case 19: //Unsigned long\r\n case 20: //Long Long int\r\n case 21: //Unsigned long long\r\n case 14://decimal\r\n allowed = FilterTypeEnum.Equals;\r\n break;\r\n default: //anything we don't know about is not allowed\r\n allowed = FilterTypeEnum.None;\r\n break;\r\n }\r\n return allowed;\r\n }\r\n private getGeoJsonCellData(rowData: any, header: ITableHeader): any {\r\n let retVal = null;\r\n switch (header.type) {\r\n case 8: // strings..but are they\r\n const value = rowData.properties[header.value];\r\n if (value) {\r\n retVal = Cadcorp.Core.Utils.FormatValue(value);\r\n }\r\n break;\r\n case 7: //date\r\n // create a date object\r\n if (rowData.properties[header.value]) {\r\n let tmpDate: any = new Date(rowData.properties[header.value]);\r\n retVal = Cadcorp.Core.Utils.FormatDate(tmpDate);\r\n }\r\n break;\r\n default: //anything else\r\n retVal = rowData.properties[header.value];\r\n break;\r\n }\r\n return retVal;\r\n }\r\n\r\n private getSISCellData(rowData: any, header: ITableHeader): any {\r\n let retVal = null;\r\n switch (header.type) {\r\n case 8: //string $ type columns\r\n case 5: //numeric # type column\r\n case 3: // & type column\r\n case 11: //boolean\r\n //these are the original types, apart from boolean, so do nothing\r\n // The boolean type is a javascript primitive so it gets no special treatment\r\n retVal = rowData.properties[header.value];\r\n break;\r\n case 7: //date\r\n // create a date object\r\n if (rowData.properties[header.value] && rowData.properties[header.value][header.typeName]) {\r\n let tmpDate: Date = new Date(rowData.properties[header.value][header.typeName]);\r\n retVal = Cadcorp.Core.Utils.FormatDate(tmpDate);\r\n }\r\n break;\r\n //case 19:// Unsigned Long Int\r\n //case 20:// Long Long Int\r\n //case 21:// Unsigned Long Long Int\r\n // because of their size these numbers are sent as strings, so we won't change that here\r\n default: //anything else\r\n if (rowData.properties[header.value] && rowData.properties[header.value][header.typeName])\r\n retVal = rowData.properties[header.value][header.typeName];\r\n else\r\n retVal = rowData.properties[header.value];\r\n\r\n break;\r\n }\r\n return retVal;\r\n }\r\n\r\n getSchemaColumns(layer: any): Promise {\r\n let retVal: Promise = null;\r\n if (layer.getSource().overlay) {\r\n retVal = layer.getSource().overlay.getSchemaColumns();\r\n }\r\n else {\r\n retVal = new Promise((resolve, reject) => {\r\n let features = layer.getSource()?.getFeatures();\r\n const feature = features && features.length > 0 ? features[0] : null;\r\n if (feature) {\r\n const props = feature.getProperties();\r\n const schema: ISchemaColumn[] = [];\r\n let count = 0;\r\n for (let prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n let type = this.getColumnType(props[prop]);\r\n if (type) {\r\n schema.push({\r\n name: prop,\r\n columnIndex: count,\r\n expression: prop,\r\n isHidden: false,\r\n isMapTip: false,\r\n typeName: type.typeName,\r\n type: type.type\r\n });\r\n count++;\r\n }\r\n }\r\n }\r\n resolve(schema);\r\n }\r\n else {\r\n reject('no features in layer');\r\n }\r\n\r\n });\r\n }\r\n return retVal;\r\n }\r\n private getColumnType(property: any): { type: number, typeName: string } {\r\n let retVal: { type: number, typeName: string } = null;\r\n if (property) {\r\n switch (typeof property) {\r\n case 'number':\r\n if (Number.isInteger) {\r\n if (Number.isInteger(property)) {\r\n retVal = { type: 20, typeName: 'i8' };\r\n } else {\r\n retVal = { type: 14, typeName: 'decimal' };\r\n }\r\n } else {\r\n retVal = { type: 14, typeName: 'decimal' };\r\n }\r\n break;\r\n case 'boolean':\r\n retVal = { type: 11, typeName: 'boolean' };\r\n break;\r\n case 'string':\r\n if (!isoDateRegEx.test(property)) {\r\n retVal = { type: 8, typeName: 'string' };\r\n } else {\r\n retVal = { type: 7, typeName: 'date' };\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n else\r\n retVal = { type: 8, typeName: 'string' };\r\n return retVal;\r\n }\r\n\r\n private getSortFunction(schemaCol: ISchemaColumn): (a: any, b: any) => number {\r\n const dateFunc = (a: any, b: any) => {\r\n let retVal = 0;\r\n if (a !== null && b !== null) {\r\n const aDate = new Date(a[schemaCol.typeName]);\r\n const bDate = new Date(b[schemaCol.typeName]);\r\n retVal = aDate.getTime() - bDate.getTime();\r\n }\r\n else {//1 or both values are null\r\n if (a === b)\r\n retVal = 0; //both null\r\n else if (a === null)\r\n retVal = 1;\r\n else\r\n retVal = -1;\r\n }\r\n return retVal;\r\n };\r\n const simpleFunc = (a: any, b: any) => {\r\n let retVal = 0;\r\n if (a !== null && b !== null)// no null values\r\n retVal = a - b;\r\n else {\r\n if (a == b)\r\n retVal = 0;\r\n else if (a === null)\r\n retVal = 1;\r\n else\r\n retVal = -1;\r\n }\r\n\r\n return retVal;\r\n };\r\n const stringFunc = (a: any, b: any) => {\r\n let retVal = 0;\r\n if (a !== null && b !== null)// no null values\r\n retVal = a.localeCompare(b);\r\n else {\r\n if (a == b)\r\n retVal = 0;\r\n else if (a === null)\r\n retVal = 1;\r\n else\r\n retVal = -1;\r\n }\r\n\r\n return retVal;\r\n };\r\n const objectFunc = (a: any, b: any) => {\r\n return stringFunc(a[schemaCol.typeName], b[schemaCol.typeName]);\r\n };\r\n let retVal = null;\r\n switch (schemaCol.type) {\r\n case 8: //string $ type columns\r\n retVal = stringFunc;\r\n break;\r\n case 5: //numeric # type column\r\n case 3: // & type column\r\n case 11: //boolean\r\n //these are the original types, apart from boolean, so do nothing\r\n // The boolean type is a javascript primitive so it gets no special treatment\r\n retVal = simpleFunc;\r\n break;\r\n case 7: //date\r\n retVal = dateFunc;\r\n break;\r\n default: //anything else\r\n retVal = objectFunc;\r\n break;\r\n }\r\n return retVal;\r\n }\r\n filterData(features: Feature[], filter: ITableFilter): Feature[] {\r\n let retVal: Feature[] = null;\r\n const newFilter = this.getCorrectFilter(filter)\r\n const filterFunc = this.getFilterFunction(newFilter);\r\n if (filterFunc) {\r\n retVal = features.filter((element) => {\r\n return filterFunc(element);\r\n });\r\n }\r\n else\r\n retVal = features;\r\n return retVal;\r\n }\r\n private getCorrectFilter(filter: ITableFilter): ITableFilter {\r\n let newFilter: ITableFilter = { ...filter };\r\n switch (filter.searchColumn.type) {\r\n\r\n // numeric types that are actually returned as numbers from geognosis\r\n // integer types\r\n case 2: //short int\r\n case 4: //single type\r\n case 3: //integer type column & suffix\r\n case 18://unsigned short\r\n case 16://byte\r\n case 17://unsigned byte\r\n newFilter.value = parseInt(filter.value, 10);\r\n break;\r\n //decimal types\r\n case 5: //numeric # type column\r\n case 6: //currency\r\n newFilter.value = parseFloat(filter.value);\r\n break;\r\n // types that are actually returned as strings\r\n case 7: //date\r\n case 8: //string $ column type\r\n case 19: //Unsigned long\r\n case 20: //Long Long int\r\n case 21: //Unsigned long long\r\n case 14://decimal\r\n default: //don't try to convert it\r\n newFilter.value = filter.value;\r\n break;\r\n }\r\n return newFilter;\r\n\r\n }\r\n private getFilterFunction(filter: ITableFilter): (feature: Feature) => boolean {\r\n let func = null;\r\n let testDate = null;\r\n if (filter.searchColumn.type === 7) {\r\n testDate = Date.parse(filter.value)\r\n }\r\n switch (filter.filterType) {\r\n case FilterTypeEnum.Contains:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n if (filter.searchColumn.type === 8) {// only works with string type data\r\n const value: string = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (value)\r\n retVal = value.includes(filter.value);\r\n }\r\n return retVal;\r\n }\r\n break;\r\n case FilterTypeEnum.Equals:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n const value = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (filter.searchColumn.type !== 7) {// anything other than dates\r\n retVal = value === filter.value;\r\n }\r\n else { //dates\r\n if (value) {\r\n const featureDate = Date.parse(value);\r\n retVal = featureDate === testDate;\r\n }\r\n }\r\n return retVal;\r\n }\r\n break;\r\n case FilterTypeEnum.GreaterThan:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n const value = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (filter.searchColumn.type !== 7) {// anything other than dates\r\n retVal = value > filter.value;\r\n }\r\n else { //dates\r\n if (value) {\r\n const featureDate = Date.parse(value);\r\n retVal = featureDate > testDate;\r\n }\r\n }\r\n return retVal;\r\n }\r\n break;\r\n case FilterTypeEnum.GreaterThanEquals:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n const value = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (filter.searchColumn.type !== 7) {// anything other than dates\r\n retVal = value >= filter.value;\r\n }\r\n else { //dates\r\n if (value) {\r\n const featureDate = Date.parse(value);\r\n retVal = featureDate >= testDate;\r\n }\r\n }\r\n return retVal;\r\n }\r\n break;\r\n case FilterTypeEnum.LessThan:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n const value = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (filter.searchColumn.type !== 7) {// anything other than dates\r\n retVal = value < filter.value;\r\n }\r\n else { //dates\r\n if (value) {\r\n const featureDate = Date.parse(value);\r\n retVal = featureDate < testDate;\r\n }\r\n }\r\n return retVal;\r\n }\r\n break;\r\n case FilterTypeEnum.LessThanEquals:\r\n func = (feature: Feature) => {\r\n let retVal = false;\r\n const value = this.getFeaturePropValue(feature, filter.searchColumn);\r\n if (filter.searchColumn.type !== 7) {// anything other than dates\r\n retVal = value <= filter.value;\r\n }\r\n else { //dates\r\n if (retVal) {\r\n const featureDate = Date.parse(value);\r\n retVal = featureDate <= testDate;\r\n }\r\n }\r\n return retVal;\r\n }\r\n break;\r\n default:\r\n func = null;\r\n }\r\n return func;\r\n \r\n }\r\n private getFeaturePropValue(feature: Feature, header: ITableHeader) {\r\n let retVal = null;\r\n switch (header.type) {\r\n case 8: //string $ type columns\r\n case 5: //numeric # type column\r\n case 3: // & type column\r\n case 11: //boolean\r\n //these are the original types, apart from boolean, so do nothing\r\n // The boolean type is a javascript primitive so it gets no special treatment\r\n retVal = feature.properties[header.value];\r\n break;\r\n //case 19:// Unsigned Long Int\r\n //case 20:// Long Long Int\r\n //case 21:// Unsigned Long Long Int\r\n // because of their size these numbers are sent as strings, so we won't change that here\r\n default: //anything else\r\n if (feature.properties[header.value] && feature.properties[header.value][header.typeName])\r\n retVal = feature.properties[header.value][header.typeName];\r\n else\r\n retVal = feature.properties[header.value];\r\n\r\n break;\r\n }\r\n return retVal;\r\n }\r\n}\r\n/*switch (schemaColumn.type) {\r\n case 7: //date\r\n break;\r\n case 11: //boolean\r\n break;\r\n case 8: //string\r\n case 5: //numeric\r\n break;\r\n case 6: //currency\r\n break;\r\n case 14:// decimal numbers\r\n case 4:\r\n break;\r\n case 3:\r\n break;\r\n case 2: // integer values\r\n case 20:\r\n break;\r\n case 18://unsigned integers\r\n case 19:\r\n case 21:\r\n break;\r\n default:\r\n break;\r\n}*/\r\n\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"v-menu\",\n {\n ref: \"dateMenu\",\n attrs: {\n \"no-title\": \"\",\n \"close-on-content-click\": false,\n \"return-value\": _vm.date,\n transition: \"scale-transition\",\n \"offset-y\": \"\",\n \"min-width\": \"290px\",\n disabled: _vm.disabled,\n },\n on: {\n \"update:returnValue\": function ($event) {\n _vm.date = $event\n },\n \"update:return-value\": function ($event) {\n _vm.date = $event\n },\n },\n scopedSlots: _vm._u([\n {\n key: \"activator\",\n fn: function (ref) {\n var on = ref.on\n var attrs = ref.attrs\n return [\n _c(\n \"v-text-field\",\n _vm._g(\n _vm._b(\n {\n attrs: {\n dense: \"\",\n label: _vm.$vuetify.lang.t(\n \"webmap.featureTable.labels.value\"\n ),\n \"prepend-icon\": \"mdi-calendar\",\n readonly: \"\",\n },\n model: {\n value: _vm.date,\n callback: function ($$v) {\n _vm.date = $$v\n },\n expression: \"date\",\n },\n },\n \"v-text-field\",\n attrs,\n false\n ),\n on\n )\n ),\n ]\n },\n },\n ]),\n model: {\n value: _vm.dateOpen,\n callback: function ($$v) {\n _vm.dateOpen = $$v\n },\n expression: \"dateOpen\",\n },\n },\n [\n _vm._v(\" \"),\n _c(\n \"v-date-picker\",\n {\n attrs: { \"no-title\": \"\", scrollable: \"\" },\n model: {\n value: _vm.date,\n callback: function ($$v) {\n _vm.date = $$v\n },\n expression: \"date\",\n },\n },\n [\n _c(\"v-spacer\"),\n _vm._v(\" \"),\n _c(\n \"v-btn\",\n {\n class: _vm.buttonClass,\n attrs: { color: \"primary\" },\n on: { click: _vm.dateCancelClickHandler },\n },\n [\n _vm._v(\n \"\\n \" + _vm._s(_vm.btnTextCancel) + \"\\n \"\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-btn\",\n {\n class: _vm.buttonClass,\n attrs: { color: \"primary\" },\n on: { click: _vm.dateOKClickHandler },\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.btnTextOk) + \"\\n \")]\n ),\n ],\n 1\n ),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue, { PropOptions } from 'Vue';\nimport Vuex from 'Vuex';\nimport Vuetify from 'Vuetify';\nimport VueRoute from 'Vue-Router';\nimport { ISchemaColumn, ITableHeader, ITableFilter, FilterTypeEnum } from '../../../../../../CommonScripts/Abstractions';\n\nexport default Vue.extend({\n name: 'feature-table-date',\n data(): {dateOpen: boolean, date: string} {\n return { dateOpen: false, date: this.value };\n },\n props: {\n disabled: { type: Boolean, required: false, default: false } as PropOptions,\n value: { type: String, required: false, default: (): string => new Date(Date.now()).toISOString() } as PropOptions\n },\n computed: {\n\n btnTextCancel(): string { return this.$vuetify.lang.t('webmap.buttonText.cancel'); },\n btnTextOk(): string { return this.$vuetify.lang.t('webmap.buttonText.ok'); },\n textColourCss(): string {\n return this.$store.getters['textCssClass'];\n },\n buttonClass(): string {\n return `no-text-transform ${this.textColourCss}`;\n }\n },\n methods: {\n dateOKClickHandler(): void {\n //TS2339: Property 'save' does not exist on type 'Vue | Element | Vue[] | Element[]'. errors\n (this.$refs.dateMenu as Vue & { save: (date: string) => void }).save(this.date);\n this.$emit('input', this.date);\n this.dateOpen = false;\n },\n dateCancelClickHandler(): void {\n this.dateOpen = false;\n }\n\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dateComponent.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dateComponent.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./dateComponent.vue?vue&type=template&id=019382e3&\"\nimport script from \"./dateComponent.vue?vue&type=script&lang=ts&\"\nexport * from \"./dateComponent.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('019382e3')) {\n api.createRecord('019382e3', component.options)\n } else {\n api.reload('019382e3', component.options)\n }\n module.hot.accept(\"./dateComponent.vue?vue&type=template&id=019382e3&\", function () {\n api.rerender('019382e3', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/DataTable/dateComponent.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./featureTable.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./featureTable.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue, { PropOptions } from 'Vue';\nimport Vuex from 'Vuex';\nimport { DataTableFactory } from './dataTableFactory';\nimport { ISchemaColumn, ITableHeader, ITableFilter, FilterTypeEnum } from '../../../../../../CommonScripts/Abstractions';\nimport { Feature } from 'geojson';\nimport { isUrl, isDate, isEmail, isInteger, isNumber, isUnsignedInteger, notEmpty } from '../../../Core/validation';\nimport dateCompoent from './dateComponent.vue';\nexport default Vue.extend({\n name: 'application-feature-table',\n components: {\n 'feature-table-date': dateCompoent\n },\n props: {\n headers: { type: Array as () => Array, required: true, default: () => { [] } } as PropOptions,\n items: { type: Array as () => Array, required: true, default: () => { [] } } as PropOptions,\n overlay: { type: Object, required: false, default: null } as PropOptions,\n fixedHeader: { type: Boolean, required: false, default: true } as PropOptions,\n height: { type: String, required: false, default: null } as PropOptions,\n closeLabel: { type: String, required: false, default: null } as PropOptions,\n closeToolTip: { type: String, required: false, default: null } as PropOptions,\n viewLabel: { type: String, required: false, default: null } as PropOptions,\n viewToolTip: { type: String, required: false, default: null } as PropOptions,\n showFilter: { type: Boolean, required: false, default: true } as PropOptions,\n currentFilter: { type: Object as () => ITableFilter, required: false, default: () => null } as PropOptions\n },\n data(): {\n factory: DataTableFactory, filter: ITableFilter, selectedColumn: ITableHeader, filterType: FilterTypeEnum, filterValue: any, rules: {\n notEmpty: (value: string) => string | boolean,\n isInteger: (value: string) => string | boolean,\n isUnsignedInteger: (value: string) => string | boolean,\n isNumber: (value: string) => string | boolean\n }\n } {\n return {\n factory: new DataTableFactory(), filter: null, selectedColumn: null, filterType: null, filterValue: null, rules: {\n notEmpty: (value: string) => {\n let retVal = notEmpty(value);\n if (retVal !== true)\n retVal = this.$vuetify.lang.t(retVal as string);\n return retVal;\n },\n isInteger: (value: string) => {\n let retVal = isInteger(value);\n if (retVal !== true)\n retVal = this.$vuetify.lang.t(retVal as string);\n return retVal;\n },\n isUnsignedInteger: (value: string) => {\n let retVal = isUnsignedInteger(value);\n if (retVal !== true)\n retVal = this.$vuetify.lang.t(retVal as string);\n return retVal;\n },\n isNumber: (value: string) => {\n let retVal = isNumber(value);\n if (retVal !== true)\n retVal = this.$vuetify.lang.t(retVal as string);\n return retVal;\n },\n }\n };\n },\n methods: {\n validate(): boolean {\n const ref = this.$refs['userInput'];\n let valid = true;\n if (this.selectedColumn.type !== 7) {//force validation of everything but dates\n const refValid = (ref as Vue & { validate: (param: boolean) => boolean | string }).validate(true);\n if (refValid !== true) {\n valid = false;\n }\n }\n\n return valid;\n },\n clearFilterHandler(): void {\n this.filter = null;\n this.selectedColumn = null;\n this.filterType = null;\n this.filterValue = null;\n this.$emit('filterCleared');\n },\n applyFilterHandler(): void {\n if (this.validate()) { \n const filter: ITableFilter = {\n filterType: this.filterType,\n searchColumn: this.selectedColumn,\n value: this.filterValue\n };\n this.filter = filter;\n this.$emit('filterChanged', { filter: filter });\n }\n },\n removeColumn(header: ITableHeader): void {\n this.$emit('removeHeader', { header: header });\n },\n viewClickedHandler(feature: Feature): void {\n this.$emit('view', { feature: feature });\n },\n isUrl(rowData: any, header: ITableHeader): boolean {\n let retVal = false;\n if (header.type === 8 && rowData.properties[header.value]) {//string\n let validation: boolean | string = isUrl(rowData.properties[header.value]);\n retVal = validation === true ? true : false;\n }\n return retVal;\n },\n getCellData(rowData: any, header: ITableHeader): any {\n return this.factory.getCellData(this.overlay, rowData, header);\n },\n sortFunction(items: any[], index: string[], isDesc: boolean[], locale: string, customSorters: Record number>): any[] {\n if (items.length > 0 && index.length > 0 && isDesc.length > 0 && customSorters[index[0]]) {\n items.sort((a, b): number => {\n let retVal = 0;\n if (isDesc[0])\n retVal = customSorters[index[0]](a.properties[index[0]], b.properties[index[0]]);\n else\n retVal = customSorters[index[0]](b.properties[index[0]], a.properties[index[0]]);\n return retVal;\n })\n }\n return items;\n },\n headerWidth(header: ITableHeader): string {\n let style = '';\n if (header.sortable)\n style = 'width:calc(100% - 20px)';//leave room for the sort arrow\n else\n style = 'width:100%';\n\n return style;\n },\n getFilterTypeText(filterType: FilterTypeEnum): string {\n let retVal = '';\n switch (filterType) {\n case FilterTypeEnum.None:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.none');\n break;\n case FilterTypeEnum.Contains:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.contains');\n break;\n case FilterTypeEnum.Equals:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.eq');\n break;\n case FilterTypeEnum.GreaterThan:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.gt');\n break;\n case FilterTypeEnum.GreaterThanEquals:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.gteq');\n break;\n case FilterTypeEnum.LessThan:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.lt');\n break;\n case FilterTypeEnum.LessThanEquals:\n retVal = this.$vuetify.lang.t('webmap.featureTable.filterTypes.lteq');\n break;\n }\n return retVal;\n },\n selectedColumnChanged(): void {\n this.filterValue = null;\n this.filterType = null;\n if (this.selectedColumn) {\n switch (this.selectedColumn.type) {\n case 11:\n this.filterValue = true;\n break;\n default:\n this.filterValue = null;\n }\n }\n }\n\n },\n mounted: function () {\n },\n watch: {\n currentFilter: {\n handler(newVal: ITableFilter, oldVal: ITableFilter) {\n if (newVal !== null) {\n this.filter = { ...newVal };\n this.selectedColumn = newVal.searchColumn;\n this.filterType = newVal.filterType;\n this.filterValue = newVal.value;\n }\n else {\n this.filter = null;\n this.selectedColumn = null;\n this.filterType = null;\n this.filterValue = null;\n }\n }\n }\n },\n\n computed: {\n listItems(): { text: string, value: any }[] {\n let items: { text: string, value: any }[] =[];\n if (this.selectedColumn) {\n switch (this.selectedColumn.type) {\n case 11:\n items.push({ text: this.$vuetify.lang.t('webmap.featureTable.labels.true'), value: true });\n items.push({ text: this.$vuetify.lang.t('webmap.featureTable.labels.false'), value: false });\n break;\n default:\n break;\n }\n }\n return items;\n },\n availableColumns(): ITableHeader[] {\n let retVal: ITableHeader[] = [];\n if (this.headers !== null) {\n retVal = this.headers.filter((header: ITableHeader) => {\n return header.filterable;\n });\n }\n return retVal;\n },\n filterItems(): Feature[] {\n let items: Feature[] = null;\n if (this.filter === null)\n items = this.items ? [...this.items] : [];\n else\n items = this.factory.filterData(this.items, this.filter);\n return items\n },\n filterTypes(): { text: string, value: FilterTypeEnum }[] {\n let retVal = [];\n if (this.selectedColumn) {\n if (!(this.selectedColumn.allowedFilters & FilterTypeEnum.None)) {\n for (let shift = 0; shift < 6; shift++) {\n const val = 1 << shift;\n if (this.selectedColumn.allowedFilters & val) {\n retVal.push({\n text: this.getFilterTypeText(this.selectedColumn.allowedFilters & val),\n value: val\n })\n }\n }\n }\n }\n return retVal;\n },\n valueComponent(): string {\n let retVal = 'v-text-field';\n if (this.selectedColumn !== null) {\n switch (this.selectedColumn.type) {\n case 11:\n retVal = 'v-select';\n break;\n case 7: //date\n retVal = 'feature-table-date';\n break;\n default:\n retVal = 'v-text-field';\n break;\n }\n }\n return retVal;\n },\n filterRules(): (() => boolean | string)[] {\n const rules = [];\n if (this.selectedColumn) {\n switch (this.selectedColumn.type) {\n case 11:// no rules\n case 7:\n break\n case 8:// string\n rules.push(this.rules.notEmpty);\n break;\n case 2: //integer values\n case 3:\n case 19:\n case 20:\n case 21:\n rules.push(this.rules.notEmpty);\n rules.push(this.rules.isInteger);\n break;\n default://everything else\n rules.push(this.rules.notEmpty);\n rules.push(this.rules.isNumber);\n break;\n }\n }\n return rules;\n },\n filterDisabled(): boolean {\n return this.items ? this.items.length === 0 : true;\n },\n tableHeight(): string {\n let height = this.height;\n if (this.showFilter)\n height = (`${parseInt(this.height, 10) - 48}`);\n\n return height;\n },\n removeFilterDisabled(): boolean {\n return this.filter === null;\n },\n applyFilterDisabled(): boolean {\n return this.selectedColumn === null || this.filterType === null || this.filterValue === null || this.filterDisabled;\n },\n valueType(): string {\n let type = '';\n if (this.selectedColumn) {\n switch (this.selectedColumn.type) {\n case 7: //date\n case 8: //string $ type columns\n case 11: //boolean\n //these are the original types, apart from boolean, so do nothing\n type = 'text';\n break;\n default:\n type = 'number';\n }\n }\n return type;\n },\n textColourCss(): string {\n return this.$store.getters['textCssClass'];\n },\n buttonClass(): string {\n return `no-text-transform ${this.textColourCss}`;\n }\n }\n});\n","import { render, staticRenderFns } from \"./featureTable.vue?vue&type=template&id=7d245298&\"\nimport script from \"./featureTable.vue?vue&type=script&lang=ts&\"\nexport * from \"./featureTable.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7d245298')) {\n api.createRecord('7d245298', component.options)\n } else {\n api.reload('7d245298', component.options)\n }\n module.hot.accept(\"./featureTable.vue?vue&type=template&id=7d245298&\", function () {\n api.rerender('7d245298', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/MapView/DataTable/featureTable.vue\"\nexport default component.exports","const __WEBPACK_NAMESPACE_OBJECT__ = Vuex;","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { AjaxWrapper } from '../Core/AjaxWrapper';\r\nimport { OverlayFactory } from './OverlayFactory';\r\nimport { IGeognoSisState, IRootState } from '../../../../CommonScripts/Abstractions';\r\nimport { Module } from 'Vuex';\r\n\r\nconst theState: IGeognoSisState = {\r\n overlays: null,\r\n sessionId: null,\r\n geognoSisLayerId: null,\r\n layerEpsgCode: null,\r\n groups: null,\r\n tileSize: null,\r\n sessionTimeout: null,\r\n layerIndexPrefix: null,\r\n singleTile: false,\r\n opacity: 1,\r\n extent: undefined\r\n};\r\n\r\nconst overlayState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n actions: {\r\n getOverlaysFromServer(context, payload) {\r\n var promise = null;\r\n if (context.state.overlays) {\r\n promise = context.state.overlays;\r\n }\r\n else {\r\n var ajax = new AjaxWrapper(context.rootState.ajaxDefaults);\r\n var factory = new OverlayFactory(context.state.sessionId, ajax, context.rootState.baseUrl, context.rootState.mapName, context.state.geognoSisLayerId);\r\n promise = factory.getOverlays().\r\n then(response => {\r\n context.commit('setOverlays', response);\r\n return response;\r\n });\r\n }\r\n return promise;\r\n },\r\n initialiseGeognoSIS(context) {\r\n var ajax = new AjaxWrapper(context.rootState.ajaxDefaults);\r\n\r\n return ajax.post(`${context.rootState.baseUrl}GeognoSis/${context.rootState.mapName}/${context.state.geognoSisLayerId }/Sessions`, null, null)\r\n .then(response => {\r\n context.commit('setSessionId', response.data.sessionId);\r\n context.commit('setLayerEpsgCode', `EPSG:${response.data.mapProperties.epsgCode}`);\r\n context.commit('setGroups', response.data.mapProperties.groups);\r\n context.commit('setTimeOut', response.data.timeout);\r\n\r\n return response;\r\n });\r\n },\r\n createInternalLayer(context, params) {\r\n var ajax = new AjaxWrapper(context.rootState.ajaxDefaults);\r\n var factory = new OverlayFactory(context.state.sessionId, ajax, context.rootState.baseUrl, context.rootState.mapName, context.state.geognoSisLayerId);\r\n return factory.createInternalLayer(params.overlayProperties, params.name)\r\n .then((response) => {\r\n context.commit('addOverlay', response);\r\n return response;\r\n });\r\n }\r\n },\r\n mutations: {\r\n setOverlays(state, overlays) {\r\n state.overlays = overlays;\r\n },\r\n setSessionId(state, sessionId) {\r\n state.sessionId = sessionId;\r\n },\r\n setGeognoSisLayerId(state, geognoSisLayerId) {\r\n state.geognoSisLayerId = geognoSisLayerId;\r\n },\r\n setLayerEpsgCode(state, layerEpsgCode) {\r\n state.layerEpsgCode = layerEpsgCode;\r\n },\r\n setGroups(state, groups) {\r\n state.groups = groups;\r\n },\r\n addOverlay(state, overlay) {\r\n if (state.overlays)\r\n state.overlays.push(overlay);\r\n else\r\n state.overlays = [overlay];\r\n },\r\n sortOverlays(state) {\r\n const overlays = [...state.overlays];\r\n overlays.sort((a, b) => a.overlayIndex - b.overlayIndex);\r\n state.overlays = overlays;\r\n },\r\n removeOverlay(state, overlay) {\r\n const foundIdx = state.overlays.findIndex((item) => {\r\n return item === overlay;\r\n });\r\n if (foundIdx !== -1) {\r\n state.overlays.splice(foundIdx, 1);\r\n for (let c = foundIdx; c < state.overlays.length; c++) {\r\n state.overlays[c].overlayIndex = state.overlays[c].overlayIndex - 1;\r\n }\r\n }\r\n },\r\n setTileSize(state, size: number[]) {\r\n state.tileSize = size;\r\n },\r\n setTimeOut(state, timeout: number) {\r\n state.sessionTimeout = timeout;\r\n },\r\n setLayerIndexPrefix(state, value: string) {\r\n state.layerIndexPrefix = value; \r\n },\r\n setSingleTile(state, value: boolean): void { \r\n state.singleTile = value;\r\n },\r\n setOpacity(state, value: number): void {\r\n state.opacity = value;\r\n },\r\n setExtent(state, value: Array | undefined): void {\r\n state.extent = value;\r\n }\r\n },\r\n getters: {\r\n sessionTimeout: state => {\r\n return state.sessionTimeout;\r\n },\r\n layerIndexPrefix: state => {\r\n return state.layerIndexPrefix;\r\n },\r\n getSingleTile(state: IGeognoSisState): boolean { \r\n return state.singleTile;\r\n },\r\n getOpacity(state: IGeognoSisState): number {\r\n return state.opacity;\r\n },\r\n getExtent(state: IGeognoSisState): Array | undefined {\r\n return state.extent;\r\n }\r\n }\r\n};\r\nexport default overlayState;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Module } from 'Vuex';\r\n\r\n/* Abstractions */\r\nimport { IMapState, IRootState, IWatermark } from '../../../../CommonScripts/Abstractions';\r\n\r\n/* Modules */\r\nimport geognosisState from '../GeognoSIS/overlayState';\r\n\r\nconst theState: IMapState = {\r\n olMap: null,\r\n currentLocation:null,\r\n initialMapState: null,\r\n baseLayers: null,\r\n currentBaseLayer: null,\r\n dataLayers: null,\r\n watermark: null,\r\n viewExtent: null,\r\n currentScale: null,\r\n mapTitle: null,\r\n copyright: null,\r\n resolutions: null,\r\n initialBaseLayer: null,\r\n initialDataLayers: null,\r\n attributions: []\r\n};\r\nconst yearRegEx = /%year%/gmi;\r\nconst mapState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n mutations: {\r\n setBaseLayers(state, baseLayers) {\r\n state.baseLayers = baseLayers;\r\n },\r\n addBaseLayer(state, newBaseLayer) {\r\n if (!state.baseLayers)\r\n state.baseLayers = [newBaseLayer];\r\n else\r\n state.baseLayers.push(newBaseLayer);\r\n },\r\n setCurrentBaseLayer(state, currentBaseLayer) {\r\n state.currentBaseLayer = currentBaseLayer;\r\n },\r\n setCurrentLocation(state, currentLocation) {\r\n state.currentLocation = currentLocation;\r\n },\r\n setInitialMapState(state, initialMapState) {\r\n state.initialMapState = initialMapState;\r\n },\r\n setDataLayers(state, dataLayers) {\r\n state.dataLayers = dataLayers;\r\n },\r\n addDataLayers(state, dataLayers) {\r\n if (state.dataLayers === null) {\r\n state.dataLayers = dataLayers;\r\n } else\r\n state.dataLayers.push(...dataLayers);\r\n },\r\n removeDataLayer(state, dataLayer) {\r\n if (state.dataLayers !== null) {\r\n const index = state.dataLayers.indexOf(dataLayer);\r\n if (index !== -1) {\r\n state.dataLayers.splice(index, 1);\r\n }\r\n }\r\n },\r\n setMap(state, map) {\r\n state.olMap = map;\r\n },\r\n setWatermark(state, watermark: IWatermark) {\r\n state.watermark = watermark;\r\n },\r\n setScale(state, scale: number) {\r\n state.currentScale = scale;\r\n },\r\n setMapTitle(state, title: string) {\r\n state.mapTitle = title;\r\n },\r\n setCopyright(state, copyright: string[]) {\r\n state.copyright = copyright;\r\n },\r\n setResolutions(state, resolutions: number[]) {\r\n state.resolutions = [...resolutions];\r\n },\r\n setInitialBaseLayer(state, baseLayer: string) {\r\n state.initialBaseLayer = baseLayer;\r\n },\r\n setInitialDataLayers(state, dataLayers: string[]) {\r\n state.initialDataLayers = [...dataLayers];\r\n },\r\n /** \r\n * See map.vue where this is set. \r\n * Attributions for all layers and Geognosis overlays; Bing and Open Street Maps have their own internal copyright attribution. \r\n * Other layers have customisable copyrights.\r\n * Geognosis layers need attribute 'WML::Attribution$' for their copyrights to come through.\r\n */\r\n setAttributions(state, attributions: string[]): void {\r\n state.attributions = attributions;\r\n }\r\n },\r\n getters: {\r\n /** overall map copyright (settings page) will supersede any others */\r\n attribution: (state): string[] => { \r\n return state.copyright && state.copyright.length > 0 ? state.copyright : state.attributions;\r\n },\r\n visibleDataLayers: (state): any[] => {\r\n let layers = null;\r\n if (state.dataLayers && state.dataLayers.length > 0)\r\n layers = state.dataLayers.filter((layer) => layer.getVisible());\r\n return layers;\r\n },\r\n currentScale: (state): number => {\r\n return state.currentScale;\r\n },\r\n getMapTitle: (state): string => {\r\n return state.mapTitle;\r\n },\r\n getResolutions: (state): number[] => {\r\n return state.resolutions;\r\n },\r\n visibleDataLayerNames: (state): string[] => {\r\n let layerNames: string[] = [];\r\n let layers: any[] = null;\r\n if (state.dataLayers && state.dataLayers.length > 0)\r\n layers = state.dataLayers.filter((layer) => {\r\n return layer.getVisible() && !layer.get('isExtensionLayer') && !layer.get('userAdded');\r\n });\r\n if (layers && layers.length > 0) {\r\n layerNames = layers.map((l) => {\r\n return l.get('name');\r\n });\r\n }\r\n return layerNames;\r\n },\r\n visibleBaseLayerName: (state): string => {\r\n let name = '';\r\n if (state.currentBaseLayer)\r\n name = state.currentBaseLayer.get('name');\r\n return name;\r\n },\r\n initialBaseLayer: (state): string => {\r\n return state.initialBaseLayer;\r\n },\r\n initialDataLayers: (state): string[] => {\r\n return state.initialDataLayers;\r\n },\r\n getWatermark: (state: IMapState): IWatermark => {\r\n return state.watermark;\r\n }\r\n },\r\n actions: {\r\n setCurrentBaseLayer(context, layer) {\r\n if (context.state.baseLayers !== null) {\r\n for (var c = 0; c < context.state.baseLayers.length; c++) {\r\n if (context.state.baseLayers[c] === layer) {\r\n context.state.baseLayers[c].setVisible(true);\r\n } else\r\n context.state.baseLayers[c].setVisible(false);\r\n }\r\n context.commit('setCurrentBaseLayer', layer);\r\n }\r\n },\r\n removeDataLayer(context, layer) {\r\n const source = layer.getSource();\r\n let retVal = null;\r\n if (source.overlay) {\r\n retVal = source.overlay.remove()\r\n .then(() => {\r\n context.commit('removeDataLayer', layer);\r\n context.commit('geognoSis/removeOverlay', source.overlay);\r\n });\r\n }\r\n else {\r\n context.commit('removeDataLayer', layer);\r\n retVal = Promise.resolve(layer);\r\n }\r\n return retVal;\r\n }\r\n },\r\n modules: {\r\n geognoSis: geognosisState\r\n }\r\n}\r\nexport default mapState;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Module } from 'Vuex';\r\nimport { IExtensionState, IRootState, IExtensionObject, IUrlParam } from '../../../../CommonScripts/Abstractions';\r\nimport { IExtension } from '../../../../CommonScripts/ManagerAbstractions';\r\n\r\nconst theState: IExtensionState = {\r\n extensions: null,\r\n defaultExtension: null,\r\n currentExtension: null\r\n};\r\nconst extensionState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n mutations: {\r\n setExtensions(state, extensions: IExtensionObject[]) {\r\n state.extensions = extensions;\r\n },\r\n setDefaultExtension(state, extension: IExtensionObject) {\r\n state.defaultExtension = extension;\r\n },\r\n setCurrentExtension(state, extension: IExtensionObject) {\r\n state.currentExtension = extension;\r\n }\r\n },\r\n actions: {\r\n activateExtension(context, extensionId: string) {\r\n let retVal = false;\r\n if (context.state.extensions && context.state.extensions.length > 0) {\r\n const otherActiveExtensions = context.state.extensions.filter((element) => element.id !== extensionId && element.isActive);\r\n const theExtension = context.state.extensions.filter((element) => element.id === extensionId);\r\n if (otherActiveExtensions && otherActiveExtensions.length > 0) {\r\n for (let count = 0; count < otherActiveExtensions.length; count++) {\r\n otherActiveExtensions[count].deactivate();\r\n }\r\n }\r\n if (theExtension && theExtension.length > 0 && !theExtension[0].isActive) {\r\n context.commit('setCurrentExtension', theExtension[0]);\r\n retVal = theExtension[0].activate();\r\n }\r\n }\r\n\r\n return retVal;\r\n },\r\n activateCurrent(context) {\r\n let retVal = false;\r\n if (context.state.currentExtension !== null && !context.state.currentExtension.isActive) {\r\n context.state.currentExtension.activate()\r\n }\r\n if (context.state.defaultExtension !== null && context.state.defaultExtension.isActive) {\r\n context.state.defaultExtension.deactivate();\r\n }\r\n return retVal;\r\n },\r\n activateDefault(context, keepCurrent: boolean = false) {\r\n if (context.state.extensions && context.state.extensions.length > 0) {\r\n const activeExtensions = context.state.extensions.filter((element) => element.isActive);\r\n for (let count = 0; count < activeExtensions.length; count++) {\r\n activeExtensions[count].deactivate();\r\n }\r\n }\r\n if (context.state.currentExtension !== null && !keepCurrent) {\r\n context.commit('setCurrentExtension', null);\r\n }\r\n if (context.state.defaultExtension !== null && !context.state.defaultExtension.isActive)\r\n context.state.defaultExtension.activate();\r\n return true;\r\n },\r\n getParamsFromExtensions(context, options) {\r\n let params: IUrlParam[] = []\r\n if (context.state.extensions && context.state.extensions.length > 0) {\r\n for (let extension of context.state.extensions) {\r\n if (extension.appendUrlParams)\r\n extension.appendUrlParams(params, options);\r\n }\r\n }\r\n return params;\r\n }\r\n },\r\n getters: {\r\n getExtension: (state) => (id: string): IExtensionObject => {\r\n let retVal: IExtensionObject = null;\r\n if (state.extensions !== null && state.extensions.length > 0) {\r\n const found = state.extensions.filter((element: IExtensionObject) => element.id === id);\r\n retVal = found && found.length > 0 ? found[0]: null;\r\n }\r\n return retVal;\r\n },\r\n getCurrentExtension: (state): IExtensionObject => {\r\n return state.currentExtension;\r\n }\r\n }\r\n}\r\nexport default extensionState;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IProfileMap, IProfileState, IRootState } from '../../../../CommonScripts/Abstractions';\r\nimport { Module } from 'Vuex';\r\nimport Vue from 'Vue';\r\nconst theState: IProfileState = {\r\n name: null,\r\n maps: null,\r\n canLogout: null,\r\n canEditProfile: null,\r\n showMapSwitcher: null\r\n};\r\nconst profileState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n mutations: {\r\n setName(state, name: string) {\r\n state.name = name;\r\n },\r\n setMaps(state, maps: IProfileMap[]) {\r\n state.maps = maps;\r\n },\r\n setCanLogout(state, canLogout: boolean) {\r\n state.canLogout = canLogout;\r\n },\r\n setCanEditProfile(state, canEditProfile: boolean) {\r\n state.canEditProfile = canEditProfile;\r\n },\r\n setShowMapSwitcher(state, showMapSwitcher: boolean) {\r\n state.showMapSwitcher = showMapSwitcher;\r\n }\r\n }\r\n}\r\nexport default profileState;\r\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport Vue from 'Vue';\r\nimport { Module } from 'Vuex';\r\nimport { openDB } from 'idb';\r\n\r\n// Abstractions\r\nimport { IBookmarkState, IRootState, IBookmark } from '../../../../CommonScripts/Abstractions';\r\n\r\ndeclare var Cadcorp: any;\r\n\r\nconst theState: IBookmarkState = {\r\n bookmarks: null,\r\n initialised: false\r\n};\r\nconst bookmarkState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n mutations: {\r\n setBookmarks(state, bookmarks) {\r\n state.bookmarks = bookmarks;\r\n },\r\n setInitialised(state, initialised) {\r\n state.initialised = initialised;\r\n },\r\n addBookmark(state, bookmark) {\r\n if (state.bookmarks === null) {\r\n state.bookmarks = [bookmark];\r\n }\r\n else\r\n state.bookmarks.push(bookmark);\r\n },\r\n addBookmarks(state, bookmarks) {\r\n if (state.bookmarks === null)\r\n state.bookmarks = bookmarks;\r\n else\r\n state.bookmarks.push.apply(state.bookmarks, bookmarks);\r\n },\r\n removeBookmark(state, bookmark) {\r\n var foundIndex = state.bookmarks.indexOf(bookmark);\r\n if (foundIndex !== -1) {\r\n state.bookmarks.splice(foundIndex, 1);\r\n }\r\n }\r\n },\r\n getters: {\r\n hasName: (state) => (name): boolean => {\r\n var retVal = false;\r\n if (state.bookmarks !== null && state.bookmarks.length > 0) {\r\n var found = state.bookmarks.filter((element: IBookmark) => element.name === name);\r\n retVal = found && found.length > 0;\r\n }\r\n return retVal;\r\n },\r\n homeBookmark: (state): IBookmark => {\r\n var retVal = null;\r\n if (state.bookmarks !== null && state.bookmarks.length > 0) {\r\n var found = state.bookmarks.filter((element: IBookmark) => element.isHome);\r\n retVal = found && found.length > 0 ? found[0] : null;\r\n }\r\n return retVal;\r\n }\r\n },\r\n actions: {\r\n addBookmark(context, bookmark) {\r\n var theDB = null;\r\n openDB(context.rootState.localStorageName)\r\n .then((db) => {\r\n theDB = db;\r\n return db.transaction('bookmark', 'readwrite');\r\n }).\r\n then((transaction) => {\r\n return transaction.objectStore('bookmark').add(bookmark);\r\n })\r\n .then((newKey) => {\r\n bookmark.id = newKey;\r\n context.commit('addBookmark', bookmark);\r\n theDB.close();\r\n })\r\n .catch((error) => {\r\n console.log(`error adding bookmark to database, ${error}`);\r\n }\r\n );\r\n return bookmark;\r\n },\r\n updateBookmarks(context, bookmarks) {\r\n var theDB = null;\r\n openDB(context.rootState.localStorageName)\r\n .then((db) => {\r\n theDB = db;\r\n return db.transaction('bookmark', 'readwrite');\r\n }).\r\n then((transaction) => {\r\n var pArray = [];\r\n for (var count = 0; count < bookmarks.length; count++) {\r\n var bookmark = bookmarks[count];\r\n pArray.push(transaction.objectStore('bookmark').put(bookmark).catch((error) => {\r\n console.log(`error updating bookmark ${error}`);\r\n }));\r\n }\r\n return pArray;\r\n })\r\n .then(() => {\r\n theDB.close();\r\n })\r\n .catch((error) => {\r\n console.log('error opening bookmarks database');\r\n });\r\n },\r\n getBookmarksFromServer(context) {\r\n var url = `${context.rootState.baseUrl}Bookmark/${context.rootState.mapName}`;\r\n var ajax = new Cadcorp.Core.AjaxWrapper(context.rootState.ajaxDefaults);\r\n return ajax.get(url, null)\r\n .then(response => {\r\n var bookmarks = [];\r\n if (response.data && response.data.length > 0) {\r\n for (var count = 0; count < response.data.length; count++) {\r\n var tmpBookmark = response.data[count];\r\n var location = { x: tmpBookmark.x, y: tmpBookmark.y, epsgCode: null }\r\n var bookmark = {\r\n name: tmpBookmark.name,\r\n isHome: false,\r\n isUserCreated: false,\r\n resolution: tmpBookmark.resolution,\r\n location: location,\r\n };\r\n bookmarks.push(bookmark);\r\n }\r\n context.commit('addBookmarks', bookmarks);\r\n }\r\n\r\n return bookmarks;\r\n });\r\n },\r\n getLocalBookmarks(context) {\r\n var theDB = null;\r\n return openDB(context.rootState.localStorageName)\r\n .then((db) => {\r\n theDB = db;\r\n return db.transaction('bookmark', 'readonly').objectStore('bookmark').getAll();\r\n }).\r\n then((localBookmarks) => {\r\n if (localBookmarks && localBookmarks.length > 0) {\r\n context.commit('addBookmarks', localBookmarks);\r\n }\r\n return localBookmarks;\r\n })\r\n .then((response) => {\r\n theDB.close();\r\n return response;\r\n })\r\n .catch((error) => {\r\n console.log('error opening bookmarks database');\r\n });\r\n },\r\n getLocalBookmarksForMap(context, mapName) {\r\n var theDB = null;\r\n return openDB(context.rootState.localStorageName)\r\n .then((db) => {\r\n theDB = db;\r\n return db.transaction('bookmark', 'readonly').objectStore('bookmark').getAll();\r\n }).\r\n then((localBookmarks) => {\r\n localBookmarks = localBookmarks.filter(b => b.mapName === mapName)\r\n if (localBookmarks && localBookmarks.length > 0) {\r\n context.commit('addBookmarks', localBookmarks);\r\n }\r\n return localBookmarks;\r\n })\r\n .then((response) => {\r\n theDB.close();\r\n return response;\r\n })\r\n .catch((error) => {\r\n console.log('error opening bookmarks database');\r\n });\r\n },\r\n removeUserBookmark(context, bookmark) {\r\n var theDB = null;\r\n openDB(context.rootState.localStorageName)\r\n .then((db) => {\r\n theDB = db;\r\n return db.transaction('bookmark', 'readwrite').objectStore('bookmark').delete(bookmark.id);\r\n }).\r\n then((req) => {\r\n context.commit('removeBookmark', bookmark);\r\n return;\r\n })\r\n .then(() => {\r\n theDB.close();\r\n })\r\n .catch((error) => {\r\n console.log(`error removing bookmark ${error}`);\r\n });\r\n return bookmark;\r\n }\r\n }\r\n}\r\nexport default bookmarkState;\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IMapUiState, IRootState, IInteractiveSnackbar } from '../../../../../CommonScripts/Abstractions';\r\nimport {interactiveSnackbarState} from './Notifications/interactiveSnackbarState';\r\nimport { Module } from 'Vuex';\r\n\r\nconst theState: IMapUiState = {\r\n navDrawerVisible: false,\r\n dialogVisible: false,\r\n appPanelVisible: false,\r\n activityMessage: null,\r\n errorMessage: null,\r\n navigationItems: null,\r\n contentControls: null,\r\n speedDialItems: null,\r\n notificationMessage: null,\r\n showNotification: false,\r\n toolstripItems: null,\r\n checkedIamHuman: false\r\n };\r\n\r\nexport const uiState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n actions: {\r\n },\r\n mutations: {\r\n setNavDrawerVisible(state, navDrawerVisible) {\r\n state.navDrawerVisible = navDrawerVisible;\r\n },\r\n setDialogVisible(state, dialogVisible) {\r\n state.dialogVisible = dialogVisible;\r\n },\r\n setAppPanelVisible(state, appPanelVisible) {\r\n state.appPanelVisible = appPanelVisible;\r\n },\r\n setActivityMessage(state, activityMessage) {\r\n state.activityMessage = activityMessage;\r\n },\r\n setErrorMessage(state, errorMessage) {\r\n state.errorMessage = errorMessage;\r\n },\r\n setNavigationItems(state, navigationItems) {\r\n state.navigationItems = navigationItems;\r\n },\r\n setContentControls(state, contentControls) {\r\n state.contentControls = contentControls;\r\n },\r\n setSpeedDialItems(state, speedDialItems) {\r\n state.speedDialItems = speedDialItems;\r\n },\r\n setShowNotification(state, showNotification) {\r\n state.showNotification = showNotification;\r\n },\r\n setNotificationMessage(state, notificationMessage) {\r\n state.notificationMessage = notificationMessage;\r\n },\r\n setToolstripItems(state, toolstripItems) {\r\n state.toolstripItems = toolstripItems;\r\n },\r\n setCheckedIamHuman(state, value) {\r\n state.checkedIamHuman = value;\r\n }\r\n },\r\n modules: {\r\n interactiveSnackBar: interactiveSnackbarState\r\n }\r\n};\r\n//# sourceMappingURL=overlays.js.map\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IRootStateBase, IInteractiveSnackbar } from '../../../../../../CommonScripts/Abstractions';\r\nimport { Module } from 'Vuex';\r\n\r\nconst theState: IInteractiveSnackbar = {\r\n show: false,\r\n message: '',\r\n buttonText: '',\r\n callback: () => { },\r\n showActivity: false\r\n};\r\n\r\nexport const interactiveSnackbarState: Module = {\r\n namespaced: true,\r\n state: theState,\r\n actions: {\r\n },\r\n mutations: {\r\n setShow(state, show: boolean): void {\r\n state.show = show;\r\n },\r\n setMessage(state, message: string): void {\r\n state.message = message;\r\n },\r\n setbuttonText(state, buttonText: string): void {\r\n state.buttonText = buttonText;\r\n },\r\n setCallback(state, callback: () => void) {\r\n state.callback = callback;\r\n },\r\n setInteractiveSnackBar(state, snackBar: IInteractiveSnackbar) {\r\n state.buttonText = snackBar.buttonText;\r\n state.show = snackBar.show;\r\n state.callback = snackBar.callback;\r\n state.message = snackBar.message;\r\n state.showActivity = snackBar.showActivity;\r\n }\r\n }\r\n};\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport Vue from 'Vue';\r\nimport Vuex, { StoreOptions } from 'Vuex';\r\n\r\n// Store modules\r\nimport mapState from '../ol/mapState';\r\nimport extensionState from './extensionState'\r\nimport profileState from './profileState';\r\nimport bookmarkState from './bookmarkstate';\r\n\r\n// Abstractions\r\nimport { IRootState, ISupportedCulture, IUrlParameters } from '../../../../CommonScripts/Abstractions';\r\n\r\n// Wrappers\r\nimport geognosisTileImage from '../ol/source/GeognoSISTileImage';\r\nimport { AjaxWrapper } from '../Core/AjaxWrapper';\r\nimport { LayerStatus } from '../GeognoSIS/Overlay';\r\nimport { uiState } from '../Components/MapView/uiState';\r\n\r\ndeclare const ol: any;\r\n\r\nVue.use(Vuex);\r\nconst store: StoreOptions = {\r\n state: {\r\n ajaxDefaults: {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': null\r\n }\r\n },\r\n baseUrl: null,\r\n mapName: null,\r\n localStorageName: null,\r\n loadedLanguages: {},\r\n supportedCultures: null,\r\n currentCulture: null,\r\n refreshInterval: null,\r\n token: null,\r\n userHelpUrl: null,\r\n useDarkText: false,\r\n showHumanDialog: false,\r\n initialRoute: null,\r\n urlParameters: {},\r\n cookiePolycyUrl: null\r\n },\r\n getters: {\r\n baseUrl: state => {\r\n return state.baseUrl;\r\n },\r\n currentCulture: state => {\r\n return state.currentCulture;\r\n },\r\n getUserHelpUrl: state => {\r\n return state.userHelpUrl;\r\n },\r\n useDarkText: state => {\r\n return state.useDarkText;\r\n },\r\n textCssClass: (state) => {\r\n return state.useDarkText ? 'black--text' : 'white--text';\r\n },\r\n getShowHumanDialog: state => {\r\n return state.showHumanDialog;\r\n },\r\n getInitialRoute: (state) => {\r\n return state.initialRoute;\r\n },\r\n getUrlParameters: (state) => {\r\n return state.urlParameters;\r\n },\r\n getCookiePolicyUrl: (state) => {\r\n return state.cookiePolycyUrl;\r\n }\r\n },\r\n mutations: {\r\n setBaseUrl(state, baseUrl) {\r\n state.baseUrl = baseUrl;\r\n },\r\n setAjaxDefaults(state, ajaxDefaults) {\r\n state.ajaxDefaults = ajaxDefaults;\r\n },\r\n setMapName(state, mapName) {\r\n state.mapName = mapName;\r\n },\r\n setLocalStorageName(state, localStorageName) {\r\n state.localStorageName = localStorageName;\r\n },\r\n addLanguage(state, config) {\r\n if (!state.loadedLanguages[config.culture])\r\n Vue.set(state.loadedLanguages, config.culture, config.language);\r\n },\r\n setSupportedCultures(state, supportedCultures: ISupportedCulture[]) {\r\n state.supportedCultures = supportedCultures;\r\n },\r\n setCurrentCulture(state, culture: string) {\r\n state.currentCulture = culture;\r\n },\r\n setRefreshInterval(state, newInterval: number) {\r\n state.refreshInterval = newInterval;\r\n },\r\n setRefreshToken(state, newToken: string) {\r\n state.token = newToken;\r\n },\r\n setAuthorisation(state, newToken) {\r\n state.ajaxDefaults.headers['Authorization'] = `Bearer ${newToken}`;\r\n },\r\n setUserHelpUrl(state, url: string) {\r\n state.userHelpUrl = url;\r\n },\r\n setUseDarkText(state, value: boolean) {\r\n state.useDarkText = value;\r\n },\r\n setShowHumanDialog(state, value: boolean): void {\r\n state.showHumanDialog = value;\r\n },\r\n setInitialRoute(state, value: string): void {\r\n state.initialRoute = value;\r\n },\r\n setUrlParameters(state, value: IUrlParameters): void {\r\n state.urlParameters = value;\r\n },\r\n setCookiePolycyUrl(state, value: string): void {\r\n state.cookiePolycyUrl = value;\r\n }\r\n },\r\n actions: {\r\n loadLanguage(context, payload:{culture: string}) {\r\n const url = `${context.rootState.baseUrl}${payload.culture}`;\r\n const ajax = new AjaxWrapper(context.rootState.ajaxDefaults);\r\n return ajax.get(url, null)\r\n .then((response: {data: any}) => {\r\n const culture: {culture: string, language: any} = {\r\n culture: payload.culture,\r\n language: response.data\r\n };\r\n context.commit('addLanguage', culture);\r\n return culture.language;\r\n });\r\n }\r\n },\r\n modules: {\r\n map: mapState,\r\n ui: uiState,\r\n extensions: extensionState,\r\n bookmarks: bookmarkState,\r\n profile: profileState\r\n }\r\n}\r\n\r\nexport default new Vuex.Store(store);\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { openDB } from 'idb';\r\n\r\nconst objectStores_version = {\r\n bookmark: 1,\r\n settings: 2\r\n};\r\n\r\nconst LATEST_DB_VERSION = Math.max(...Object.values(objectStores_version));\r\n\r\nexport function createLocalStorage(name: string): void {\r\n openDB(name, LATEST_DB_VERSION, {\r\n upgrade(db, oldVersion, newVersion, transaction) {\r\n if (oldVersion < objectStores_version.bookmark)\r\n if (!db.objectStoreNames.contains('bookmark'))\r\n db.createObjectStore('bookmark', { keyPath: 'id', autoIncrement: true });\r\n\r\n if (oldVersion < objectStores_version.settings)\r\n if (!db.objectStoreNames.contains('settings'))\r\n db.createObjectStore('settings');\r\n }\r\n })\r\n .then((db) => db.close())\r\n .catch((eventArgs) => console.log(`error opening ${name} db ${eventArgs}`));\r\n}\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IPreviewStyle } from '../../../../../../CommonScripts/Abstractions';\r\n\r\nfunction setUpContext(context: CanvasRenderingContext2D, style: IPreviewStyle) {\r\n if (!context.setLineDash) {\r\n context.setLineDash = function () { };\r\n }\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n context.clearRect(0, 0, width, height);\r\n const lineDash = style.stroke.dash;\r\n\r\n //this.m_canvasContext.beginPath();\r\n context.lineWidth = style.stroke.w;\r\n context.strokeStyle = `rgba(${style.stroke.r},${style.stroke.g},${style.stroke.b},${style.stroke.a})`;\r\n context.fillStyle = `rgba(${style.fill.r},${style.fill.g},${style.fill.b},${style.fill.a})`;\r\n if (style.stroke.lineJoin) {\r\n switch (style.stroke.lineJoin.toLowerCase()) {\r\n case 'round':\r\n context.lineJoin = 'round';\r\n break;\r\n case 'bevel':\r\n context.lineJoin = 'bevel';\r\n break;\r\n case 'miter':\r\n context.lineJoin = 'miter';\r\n break;\r\n }\r\n }\r\n if (style.stroke.lineCap) {\r\n switch (style.stroke.lineCap.toLowerCase()) {\r\n case 'butt':\r\n context.lineCap = 'butt';\r\n break;\r\n case 'round':\r\n context.lineCap = 'round';\r\n break;\r\n case 'square':\r\n context.lineCap = 'square';\r\n break;\r\n }\r\n }\r\n if (!context.getLineDash())\r\n context.setLineDash(lineDash);\r\n else\r\n context.setLineDash([0]);\r\n}\r\nexport function renderPolygon(context: CanvasRenderingContext2D, style: IPreviewStyle, backgroundImage: ImageData) {\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n const lineWidth = style.stroke.w;\r\n setUpContext(context, style);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n\r\n const topLeftCornerX = 20;\r\n const topLeftCornerY = 20;\r\n const canvasWidth = width - (topLeftCornerX * 2);\r\n const canvasHeight = height - (topLeftCornerX * 2);\r\n\r\n // Draw the filled rectangle\r\n context.beginPath();\r\n context.moveTo(topLeftCornerX, topLeftCornerY);\r\n context.lineTo(topLeftCornerX + canvasWidth, topLeftCornerY);\r\n context.lineTo(topLeftCornerX + canvasWidth, topLeftCornerY + canvasHeight);\r\n context.lineTo(topLeftCornerX, topLeftCornerY + canvasHeight);\r\n context.closePath();\r\n context.fill();\r\n\r\n // Draw the containing rectangle, this is done separately to stop the bleed.\r\n context.beginPath();\r\n context.moveTo(topLeftCornerX - lineWidth / 2, topLeftCornerY - lineWidth / 2);\r\n context.lineTo(topLeftCornerX + canvasWidth + lineWidth / 2, topLeftCornerY - lineWidth / 2);\r\n context.lineTo(topLeftCornerX + canvasWidth + lineWidth / 2, topLeftCornerY + canvasHeight + lineWidth / 2);\r\n context.lineTo(topLeftCornerX - lineWidth / 2, topLeftCornerY + canvasHeight + lineWidth / 2);\r\n context.closePath();\r\n context.stroke();\r\n};\r\nexport function renderLine(context: CanvasRenderingContext2D, style: IPreviewStyle, backgroundImage: ImageData) {\r\n\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n const lineWidth = style.stroke.w;\r\n setUpContext(context, style);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n const topLeftCornerX = 20;\r\n const topLeftCornerY = 20;\r\n const canvasWidth = width - (topLeftCornerX * 2);\r\n const canvasHeight = height - (topLeftCornerX * 2);\r\n\r\n // Draw the filled line\r\n context.beginPath();\r\n context.moveTo(topLeftCornerX - lineWidth / 2, topLeftCornerY - lineWidth / 2);\r\n context.lineTo(topLeftCornerX + canvasWidth / 3 + lineWidth / 2, topLeftCornerY + canvasHeight + lineWidth / 2);\r\n context.lineTo(topLeftCornerX + (canvasWidth / 3) * 2 + lineWidth / 2, topLeftCornerY - lineWidth / 2);\r\n context.lineTo(topLeftCornerX + canvasWidth + lineWidth / 2, topLeftCornerY + canvasHeight + lineWidth / 2);\r\n context.stroke();\r\n};\r\nexport function renderCircle(context: CanvasRenderingContext2D, style: IPreviewStyle, backgroundImage: ImageData) {\r\n\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n setUpContext(context, style);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n const centreX = width / 2;\r\n const centreY = height / 2;\r\n const radius = (Math.min(width, height) - 20) / 2;\r\n\r\n\r\n // Draw the filled circle\r\n context.beginPath();\r\n context.arc(centreX, centreY, radius, 0, Math.PI * 2, true);\r\n context.fill();\r\n\r\n // Draw the containing rectangle, this is done separately to stop the bleed.\r\n context.beginPath();\r\n context.arc(centreX, centreY, radius, 0, Math.PI * 2, true);\r\n context.stroke();\r\n};\r\nexport function renderText(context: CanvasRenderingContext2D, style: IPreviewStyle, backgroundImage: ImageData) {\r\n\r\n const centreX = context.canvas.width / 2;\r\n const centreY = context.canvas.height / 2;\r\n setUpContext(context, style);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n context.textAlign = 'center';\r\n context.textBaseline = 'middle';\r\n context.font = style.text.font;\r\n // Draw the text\r\n context.strokeText(style.text.text, centreX, centreY);\r\n context.fillText(style.text.text, centreX, centreY);\r\n};\r\nexport function renderPoint(context: CanvasRenderingContext2D, style: IPreviewStyle, backgroundImage: ImageData) {\r\n\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n setUpContext(context, style);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n const centreX = width / 2;\r\n const centreY = height / 2;\r\n const radius = style.point.radius;\r\n\r\n\r\n // Draw the filled circle\r\n context.beginPath();\r\n context.arc(centreX, centreY, radius, 0, Math.PI * 2, true);\r\n context.fill();\r\n\r\n // Draw the containing rectangle, this is done separately to stop the bleed.\r\n context.beginPath();\r\n context.arc(centreX, centreY, radius, 0, Math.PI * 2, true);\r\n context.stroke();\r\n};\r\nexport function renderPointImage(context: CanvasRenderingContext2D, imageUrl: string, backgroundImage: ImageData) {\r\n\r\n const width = context.canvas.width;\r\n const height = context.canvas.height;\r\n context.clearRect(0, 0, width, height);\r\n if (backgroundImage)\r\n context.putImageData(backgroundImage, 0, 0);\r\n const centreX = width / 2;\r\n const centreY = height / 2;\r\n const img = new Image();\r\n img.onload = () => {\r\n const imgWidth = img.naturalWidth;\r\n const imgHeight = img.naturalHeight;\r\n //now draw our image into the display canvas\r\n context.drawImage(img, 0, 0, imgWidth, imgHeight, centreX - (imgWidth / 2), centreY - (imgHeight / 2), imgWidth, imgHeight );\r\n }\r\n\r\n img.src = imageUrl;\r\n\r\n};\r\n\r\n","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"v-color-picker\", {\n staticClass: \"mx-auto colourPicker\",\n attrs: {\n \"hide-mode-switch\": \"\",\n \"hide-inputs\": \"\",\n mode: \"rgba\",\n \"canvas-height\": \"100\",\n width: \"300\",\n value: _vm.rgbColour,\n },\n on: { \"update:color\": _vm.updated },\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\nimport Vue, { PropOptions } from 'Vue';\nimport Vuex from 'Vuex';\nimport Vuetify from 'Vuetify';\nimport VueRoute from 'Vue-Router';\nimport { IPreviewColour } from '../../../../../../CommonScripts/Abstractions';\n\nexport default Vue.extend({\n name: 'mgr-colour-picker',\n props: {\n colour: { type: Object as () => IPreviewColour, required: true } as PropOptions\n },\n computed: {\n rgbColour(): any {\n return this.colour;\n }\n },\n methods: {\n updated(newValue: any): void {\n this.$emit('changed', { r: newValue.rgba.r, g: newValue.rgba.g, b: newValue.rgba.b, a: newValue.rgba.a, });\n }\n }\n});\n","import mod from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colourPicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/ts-loader/index.js??clonedRuleSet-2[0].rules[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colourPicker.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./colourPicker.vue?vue&type=template&id=4ae256f8&\"\nimport script from \"./colourPicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./colourPicker.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"C:\\\\Source\\\\WebMap\\\\Monthly\\\\Sites\\\\WebMap\\\\node_modules\\\\vue-hot-reload-api\\\\dist\\\\index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4ae256f8')) {\n api.createRecord('4ae256f8', component.options)\n } else {\n api.reload('4ae256f8', component.options)\n }\n module.hot.accept(\"./colourPicker.vue?vue&type=template&id=4ae256f8&\", function () {\n api.rerender('4ae256f8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"Script/Components/ManagerView/Style/colourPicker.vue\"\nexport default component.exports","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { Events as events } from './Core/Cadcorp.Web.Core.Events';\r\nimport { Geolocator as geolocator, OlCoordPositionTransformer as olCoordPositionTransformer } from './Core/Cadcorp.Web.Core.Geolocator';\r\nimport { AjaxWrapper as ajaxWrapper } from './Core/AjaxWrapper';\r\nimport {TemplateFactory as templateFactory} from './Core/TemplateFactory';\r\nimport { GeoLocatorErrorEnum as geoLocatorErrorEnum } from '../../../CommonScripts/Abstractions';\r\nimport { CookieManager as cookieManager } from './Core/CookieManager';\r\nimport { SearchFactory as searchFactory } from './Search/SearchFactory';\r\nimport { LayerFactory as layerFactory } from './ol/LayerFactory';\r\nvar Cadcorp = window['Cadcorp'];\r\nif (!Cadcorp) {\r\n Cadcorp = {};\r\n window['Cadcorp'] = Cadcorp;\r\n}\r\nif (!Cadcorp.Core)\r\n Cadcorp.Core = {};\r\nCadcorp.Core.Events = events;\r\nCadcorp.Core.GeoLocator = geolocator;\r\nCadcorp.Core.GeoLocatorErrorEnum = geoLocatorErrorEnum;\r\nCadcorp.Core.OlCoordPositionTransformer = olCoordPositionTransformer;\r\nCadcorp.Core.AjaxWrapper = ajaxWrapper;\r\nCadcorp.Core.CookieManager = cookieManager;\r\nCadcorp.Core.TemplateFactory = templateFactory;\r\nCadcorp.Core.SearchFactory = searchFactory;\r\nCadcorp.Core.LayerFactory = layerFactory;\r\n\r\nexport module Core {\r\n export const Events = events;\r\n export const Geolocator = geolocator;\r\n export const GeoLocatorErrorEnum = geoLocatorErrorEnum;\r\n export const OlCoordPositionTransformer = olCoordPositionTransformer;\r\n export const AjaxWrapper = ajaxWrapper;\r\n export const CookieManager = cookieManager;\r\n export const TemplateFactory = templateFactory;\r\n export const SearchFactory = searchFactory;\r\n export const LayerFactory = layerFactory;\r\n}\r\n\r\nimport { SchemaColumn as schemaColumn } from './GeognoSIS/SchemaColumn';\r\nimport { Item as item, CursorItem as cursorItem } from './GeognoSIS/Item';\r\nimport { IntersectExpressionBuilder as intersectExpressionBuilder } from './GeognoSIS/ExpressionBuilder';\r\nimport { GeognosisFilterExpressionBuilder as geognosisFilterExpressionBuilder } from './GeognoSIS/GeognosisFilter';\r\nimport { QueryHelper as queryHelper } from './GeognoSIS/QueryHelper';\r\nimport { JoinedOverlayQueryHelper as joinedOverlayQueryHelper } from './GeognoSIS/JoinedQueryHelper';\r\nimport { Overlay as overlay, LayerStatus as layerStatus } from './GeognoSIS/Overlay';\r\nimport { OverlayFactory as overlayFactory } from './GeognoSIS/OverlayFactory';\r\nimport { Theme as theme, HorizontalTextAlignment as horizontalTextAlignment, VerticalTextAlignment as verticalTextAlignment} from './GeognoSIS/Theme';\r\n\r\nif (!Cadcorp.Core.GeognoSIS)\r\n Cadcorp.Core.GeognoSIS = {};\r\nCadcorp.Core.GeognoSIS.SchemaColumn = schemaColumn;\r\nCadcorp.Core.GeognoSIS.Item = item;\r\nCadcorp.Core.GeognoSIS.CursorItem = cursorItem;\r\nCadcorp.Core.GeognoSIS.IntersectExpressionBuilder = intersectExpressionBuilder;\r\nCadcorp.Core.GeognoSIS.GeognosisFilterExpressionBuilder = geognosisFilterExpressionBuilder;\r\nCadcorp.Core.GeognoSIS.QueryHelper = queryHelper;\r\nCadcorp.Core.GeognoSIS.JoinedOverlayQueryHelper = joinedOverlayQueryHelper;\r\nCadcorp.Core.GeognoSIS.Overlay = overlay;\r\nCadcorp.Core.GeognoSIS.LayerStatusEnum = layerStatus;\r\nCadcorp.Core.GeognoSIS.OverlayFactory = overlayFactory;\r\nCadcorp.Core.GeognoSIS.Theme = theme;\r\nCadcorp.Core.GeognoSIS.HorizontalTextAlignmentEnum = horizontalTextAlignment;\r\nCadcorp.Core.GeognoSIS.VerticalTextAlignmentEnum = verticalTextAlignment;\r\n\r\nexport module Core.GeognoSIS {\r\n export const SchemaColumn = schemaColumn;\r\n export const Item = item;\r\n export const CursorItem = cursorItem;\r\n export const IntersectExpressionBuilder = intersectExpressionBuilder;\r\n export const QueryHelper = queryHelper;\r\n export const JoinedOverlayQueryHelper = joinedOverlayQueryHelper;\r\n export const Overlay = overlay;\r\n export const LayerStatusEnum = layerStatus;\r\n export const OverlayFactory = overlayFactory;\r\n export const Theme = theme;\r\n export const HorizontalTextAlignmentEnum = horizontalTextAlignment;\r\n export const VerticalTextAlignmentEnum = verticalTextAlignment;\r\n}\r\n\r\nimport { extend, hideLoading, removeInvalidJavascriptChars, appendParameters, formatDate, formatValue } from './Core/Utils';\r\nimport { isUrl, isNumber, validate, isEmail, notEmpty, notEmptyArray, isPostcode, isUnsignedInteger, isUnsignedDecimal } from './Core/validation';\r\nif (!Cadcorp.Core.Utils)\r\n Cadcorp.Core.Utils = {};\r\nCadcorp.Core.Utils.Extend = extend;\r\nCadcorp.Core.Utils.HideLoading = hideLoading;\r\nCadcorp.Core.Utils.RemoveInvalidJavascriptChars = removeInvalidJavascriptChars;\r\nCadcorp.Core.Utils.AppendParameters = appendParameters;\r\nCadcorp.Core.Utils.FormatDate = formatDate;\r\nCadcorp.Core.Utils.FormatValue = formatValue;\r\nCadcorp.Core.Utils.IsUrl = isUrl;\r\nCadcorp.Core.Utils.IsNumber = isNumber;\r\nCadcorp.Core.Utils.IsUnsignedDecimal = isUnsignedDecimal;\r\nCadcorp.Core.Utils.IsUnsignedInteger = isUnsignedInteger;\r\nCadcorp.Core.Utils.Validate = validate;\r\nCadcorp.Core.Utils.IsEmail = isEmail;\r\nCadcorp.Core.Utils.IsPostcode = isPostcode;\r\nCadcorp.Core.Utils.NotEmpty = notEmpty;\r\nCadcorp.Core.Utils.NotEmptyArray = notEmptyArray;\r\n\r\nexport module Core.Utils {\r\n export const Extend = extend;\r\n export const HideLoading = hideLoading;\r\n export const RemoveInvalidJavascriptChars = removeInvalidJavascriptChars;\r\n export const AppendParameters = appendParameters;\r\n export const FormatDate = formatDate;\r\n export const IsUrl = isUrl;\r\n export const IsNumber = isNumber;\r\n export const FormatValue = formatValue;\r\n}\r\n\r\nimport geognosisTileImage from './ol/source/GeognoSISTileImage';\r\nimport geognosisVector from './ol/source/GeognoSISVector';\r\nif (!Cadcorp.ol)\r\n Cadcorp.ol = {};\r\nif (!Cadcorp.ol.source)\r\n Cadcorp.ol.source = {};\r\nCadcorp.ol.source.GeognoSISTileImage = geognosisTileImage;\r\nCadcorp.ol.source.GeognoSISVector = geognosisVector;\r\nexport module ol.source {\r\n export const GeognoSISTileImage = geognosisTileImage;\r\n export const GeognoSISVector = geognosisVector;\r\n}\r\nimport applicationPanel from './Components/MapView/Panels/applicationPanel.vue';\r\nimport sidePanel from './Components/MapView/Panels/sidepanel.vue';\r\nimport attributionPanel from './Components/MapView/Panels/attributionPanel.vue';\r\nimport activitySnackBar from './Components/MapView/Notifications/activitySnackbar.vue';\r\nimport errorSnackBar from './Components/MapView/Notifications/errorSnackbar.vue';\r\nimport cookieSnackBar from './Components/MapView/Notifications/cookieSnackbar.vue';\r\nimport notificationSnackBar from './Components/MapView/Notifications/notificationSnackbar.vue';\r\nimport appControls from './Components/MapView/ContentControls/appControls.vue';\r\nimport appControl from './Components/MapView/ContentControls/contentControl.vue';\r\nimport menuItem from './Components/MapView/NavigationDrawer/navigationItem.vue';\r\nimport navigationDrawer from './Components/MapView/NavigationDrawer/navigationDrawer.vue';\r\nimport speedDial from './Components/MapView/speedDial/speedDial.vue';\r\nimport speedDialItem from './Components/MapView/speedDial/speedDialItem.vue';\r\nimport map from './Components/MapView/Application/map.vue';\r\nimport applicationPanelContent from './Components/MapView/Panels/applicationPanelContents.vue';\r\nimport button from './Components/MapView/Application/button.vue';\r\nimport { ThemeEnum as themeEnum, ButtonSizeEnum as buttonSizeEnum } from '../../../CommonScripts/Abstractions';\r\n\r\nif (!Cadcorp.Core.Components)\r\n Cadcorp.Core.Components = {};\r\nCadcorp.Core.Components.ApplicationPanel = applicationPanel;\r\nCadcorp.Core.Components.ApplicationPanelContents = applicationPanelContent;\r\nCadcorp.Core.Components.SidePanel = sidePanel;\r\nCadcorp.Core.Components.MapView = map;\r\nCadcorp.Core.Components.ActivitySnackBar = activitySnackBar;\r\nCadcorp.Core.Components.ErrorSnackBar = errorSnackBar;\r\nCadcorp.Core.Components.CookieSnackBar = cookieSnackBar;\r\nCadcorp.Core.Components.NotificationSnackBar = notificationSnackBar;\r\nCadcorp.Core.Components.ThemeEnum = themeEnum;\r\nCadcorp.Core.Components.ButtonSizeEnum = buttonSizeEnum;\r\nCadcorp.Core.Components.TooltipButton = button;\r\nCadcorp.Core.Components.AttributionPanel = attributionPanel;\r\nexport module Core.Components {\r\n export const ApplicationPanel = applicationPanel;\r\n export const ApplicationPanelContents = applicationPanelContent;\r\n export const SidePanel = sidePanel;\r\n export const ActivitySnackBar = activitySnackBar;\r\n export const ErrorSnackBar = errorSnackBar;\r\n export const CookieSnackBar = cookieSnackBar;\r\n export const NotificationSnackBar = notificationSnackBar;\r\n export const MapView = map;\r\n export const ThemeEnum = themeEnum;\r\n export const ButtonSizeEnum = buttonSizeEnum;\r\n export const TooltipButton = button;\r\n export const AttributionPanel = attributionPanel;\r\n}\r\nif (!Cadcorp.Core.Components.Navigation)\r\n Cadcorp.Core.Components.Navigation = {};\r\nCadcorp.Core.Components.Navigation.NavigationDrawer = navigationDrawer;\r\nCadcorp.Core.Components.Navigation.NavigationItem = menuItem;\r\nexport module Core.Components.Navigation {\r\n export const NavigationDrawer = navigationDrawer;\r\n export const NavigationItem = menuItem;\r\n}\r\nif (!Cadcorp.Core.Components.ContentControls)\r\n Cadcorp.Core.Components.ContentControls = {};\r\nCadcorp.Core.Components.ContentControls.AppControls = appControls;\r\nCadcorp.Core.Components.ContentControls.AppControl = appControl;\r\nCadcorp.Core.Components.ContentControls.SpeedDial = speedDial;\r\nCadcorp.Core.Components.ContentControls.SpeedDialItem = speedDialItem;\r\nexport module Core.Components.ContentControls {\r\n export const AppControls = appControls;\r\n export const AppControl = appControl;\r\n export const SpeedDial = speedDial;\r\n export const SpeedDialItem = speedDialItem;\r\n}\r\n\r\nimport featureTable from './Components/MapView/DataTable/featureTable.vue';\r\nimport { DataTableFactory } from './Components/MapView/DataTable/dataTableFactory';\r\n\r\nif (!Cadcorp.Core.Components.FeatureTable)\r\n Cadcorp.Core.Components.FeatureTable = {};\r\nCadcorp.Core.Components.FeatureTable.table = featureTable;\r\nCadcorp.Core.Components.FeatureTable.dataTableFactory = DataTableFactory;\r\n\r\nimport store from './Store/application';\r\nif (!Cadcorp.Core.Store)\r\n Cadcorp.Core.Store = {};\r\nCadcorp.Core.Store.ApplicationStore = store;\r\nexport module Core.Store {\r\n export const ApplicationStore = store;\r\n}\r\nimport { createLocalStorage } from './Store/localStorage';\r\nimport { openDB, deleteDB, wrap } from 'idb';\r\nif (!Cadcorp.Core.LocalStorage)\r\n Cadcorp.Core.LocalStorage = {};\r\nCadcorp.Core.LocalStorage.CreateLocalStorage = createLocalStorage;\r\nCadcorp.Core.LocalStorage.OpenDB = openDB;\r\nCadcorp.Core.LocalStorage.DeleteDB = deleteDB;\r\nCadcorp.Core.LocalStorage.WrapDb = wrap;\r\nexport module Core.LocalStorage {\r\n export const CreateLocalStorage = createLocalStorage;\r\n export const OpenDB = openDB;\r\n export const DeleteDB = deleteDB;\r\n export const WrapDb = wrap;\r\n}\r\nimport { renderCircle, renderLine, renderPoint, renderPolygon, renderText, renderPointImage } from './Components/ManagerView/Style/previewFunctions';\r\nimport colourPicker from './Components/ManagerView/Style/colourPicker.vue';\r\n\r\nCadcorp.Core.Style =\r\n{\r\n ColourPicker: colourPicker,\r\n PreviewFunctions: {\r\n Circle: renderCircle,\r\n Line: renderLine,\r\n Point: renderPoint,\r\n Polygon: renderPolygon,\r\n Text: renderText,\r\n PointImage: renderPointImage\r\n }\r\n}\r\n\r\n","// This is a part of the Cadcorp SIS source code. \r\n// Copyright (c) Cadcorp Limited 1991-2024 \r\nimport { IFilterExpressionBuilder, ISchemaColumn } from '../../../../CommonScripts/Abstractions';\r\n\r\nexport class GeognosisFilterExpressionBuilder implements IFilterExpressionBuilder {\r\n private m_schemaColumn: ISchemaColumn;\r\n private m_schemaColumnName: string;\r\n private m_uid: string;\r\n\r\n createExpression(map) {\r\n let retVal = '';\r\n switch (this.m_schemaColumn.type) {\r\n // numbers \r\n case 2: //Short int i2\r\n case 3: //long int i4 sis \r\n case 4: //single r4\r\n case 5: //double r8 SIS #\r\n case 6: //currency\r\n case 14: //decimal\r\n case 18: //unsigned short int ui2\r\n case 19: //unsigned long int ui4\r\n case 20: //long long int i8\r\n case 21: //unsigned long long int ui8\r\n retVal = `${this.m_schemaColumn.expression}=${this.m_uid}`;\r\n break;\r\n //date\r\n case 7: //date\r\n const date = new Date(this.m_uid);\r\n if (isNaN(date.getTime())) {\r\n break;\r\n }\r\n\r\n const pad = (num: number, size: number) => {\r\n let s = String(num);\r\n while (s.length < size) s = \"0\" + s;\r\n return s;\r\n };\r\n\r\n const YYYY = date.getUTCFullYear();\r\n const MM = pad(date.getUTCMonth() + 1, 2); // Months are 0-indexed\r\n const DD = pad(date.getUTCDate(), 2);\r\n const HH = pad(date.getUTCHours(), 2);\r\n const mm = pad(date.getUTCMinutes(), 2);\r\n const ss = pad(date.getUTCSeconds(), 2);\r\n const sss = pad(date.getUTCMilliseconds(), 3);\r\n\r\n retVal = `${this.m_schemaColumn.expression}='${YYYY}-${MM}-${DD}T${HH}:${mm}:${ss}.${sss}Z'`;\r\n break;\r\n //strings\r\n case 8: //string sis $\r\n retVal = `${this.m_schemaColumn.expression}='${this.m_uid}'`;\r\n break;\r\n //boolean types\r\n case 11: //boolean\r\n retVal = `${this.m_schemaColumn.expression}=${this.m_uid.toLowerCase}`;\r\n break;\r\n }\r\n return encodeURIComponent( retVal);\r\n }\r\n\r\n setExpressionData(schemaColumn: ISchemaColumn, uid: string) {\r\n this.m_schemaColumn = schemaColumn;\r\n this.m_schemaColumnName =schemaColumn.name;\r\n this.m_uid = uid;\r\n }\r\n}\r\n","module.exports = Vue;","module.exports = axios;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t186: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_name_\"] = self[\"webpackChunk_name_\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [387], () => (__webpack_require__(35)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","extend","destination","source","property","value","undefined","window","event","hasOwnProperty","toString","hideLoading","loadingMask","document","getElementById","addEventListener","classList","add","validRegex","removeInvalidJavascriptChars","name","replace","appendParameters","uri","params","keyParams","Object","keys","forEach","k","push","encodeURIComponent","qs","join","indexOf","formatDate","date","toLocaleString","timeZone","dateStyle","timeStyle","formatValue","schemaColumn","retVal","type","val","typeName","Date","formatValueFromSchema","test","intRegEx","unsignedIntRegEx","unsignedDecimalRegEx","floatRegEx","dateRegEx","urlRegEx","emailRegEx","postcodeRegEx","validate","regEx","error","isValid","notEmpty","regExp","returnVal","match","validateWithRegExp","trim","length","notEmptyArray","isInteger","isUnsignedInteger","isUnsignedDecimal","isNumber","isDate","err","isUrl","isEmail","isPostcode","Events","constructor","config","this","owner","m_events","isRegistered","handler","getIndex","index","c","on","un","splice","dispatchEvent","eventData","retval","handlers","object","ret","call","destroy","ThemeEnum","ButtonSizeEnum","GeoLocatorErrorEnum","PointPreviewTypeEnum","FilterTypeEnum","Geolocator","positionOptions","m_active","available","navigator","activate","Promise","resolve","reject","geolocation","getCurrentPosition","code","UnCapable","createLocation","lon","lat","epsg","x","y","epsgCode","OlCoordPositionTransformer","transform","location","TemplateFactory","createComponent","html","json","props","compiledTemplate","vueComponent","console","logic","JSON","parse","key","substr","startBody","endBody","lastIndexOf","startArgs","endArgs","Function","substring","render","staticRenderFns","component","logicErr","HorizontalTextAlignment","VerticalTextAlignment","LayerStatus","SearchFactory","createSearch","extendedConfiguration","searchConstructor","SchemaColumn","columnIndex","expression","isHidden","isMapTip","Item","properties","feature","layerIndex","sessionId","id","mapName","geometry","baseUrl","geoJSON","updateGeometry","newGeoJson","url","getUpdateGeometryUrl","ajaxWrapper","patch","then","response","geoJSONUpdatedSuccessHandler","layerId","getUpdatePropetiesUrl","getDeleteUrl","updateProperties","newValues","schemaColumns","updateObj","updateRequired","m_lastUpdateProperties","cloneProperties","schemaCol","newPropVal","oldValue","dateObj","objVal","propertiesUpdatedSuccessHandler","objectToClone","prop","eventArgs","m_lastUpdateGeoJSON","deleteItem","delete","CursorItem","super","m_cursorId","cursorId","QueryHelper","overlayInfo","queryEndpoint","nextFeaturesEndpoint","findItems","map","expressionBuilder","maxFeaturesToGet","startPosition","queryBounds","ignoreBbox","abort","queryData","getQueryData","options","signal","post","queryCompleted","data","MaxFeaturesToGet","Expression","createExpression","StartPosition","bbox","getbbox","view","getView","mapProjection","getProjection","destinationPrj","needTransformation","getCode","ol","proj","transformExtent","calculateExtent","getSize","e","returnObj","layerName","features","foundItems","a","item","next","decodeURIComponent","getNextPage","featureUrl","Next","JoinedOverlayQueryHelper","overlay","overlayIndex","m_cursorLink","dataObj","Theme","m_baseUrl","m_sessionId","m_overlayIndex","m_ajaxWrapper","m_layerId","m_mapName","listener","setDisabled","disabled","definition","propertyMap","theme","themeLegendUrl","performance","now","Overlay","m_status","scaleMin","scaleMax","abstractText","userAdded","maxStatus","ignoreLayer","metadataUuid","schema","visibility","m_visibility","status","newIndex","getSchemaColumnListUrl","getSchemaColumnBaseUrl","getSchemaColumnPropertiesBaseUrl","getPropertiesUrl","getImageUrl","getVectorUrl","getThemeBaseUrl","getItemsUrl","getQueryUrl","getNextResultsUrls","populate","pUrl","get","setProperties","remove","setStatus","newStatus","promise","Invisible","refreshOverlay","returnedData","useVector","vectorStyle","refreshInterval","errorCondition","attribution","getSchemaColumns","processSchemaList","bind","processSchemaData","oArray","pArray","all","getQueryHelper","helper","nextUrl","clearFeatures","getThemes","m_themes","count","title","sort","first","second","addTheme","newTheme","themes","addedTheme","createTheme","removeTheme","aTheme","remaining","filter","themeElement","updateTheme","foundThemes","updatedTheme","element","filterIndex","array","themeData","visibleAtScale","scale","visible","GeognoSISTileImage","TileImage","setTileUrlFunction","geognosisTileUrlFunction","photometricInterpretation","clear","changed","tileCoord","pixelRatio","projection","tileGrid","getTileGrid","getTileGridForProjection","getResolutions","tileExtent","getTileCoordExtent","tileSize","getTileSize","imageUrl","GeognoSISImage","Image","loader","extent","resolution","ratio","imageLoader","width","height","imageResolution","tileWidth","Math","ceil","tileHeight","img","onload","onerror","src","image","GeognoSISVector","Vector","setLoader","loaderFunction","vectorUrl","start","noFeaturesToGet","getFeatures","me","wrapper","format","getFormat","layerProj","readFeatures","dataProjection","featureProjection","addFeatures","links","flattenLinks","getLink","newParams","CRS","catch","log","newLinks","link","Array","isArray","rel","found","LayerFactory","createLayer","ajax","useSingleTile","layer","getNewLayer","setRefreshInterval","createVectorLayer","createImageLayer","createTileLayer","getSource","setTimeout","refreshLayer","refresh","crossOrigin","attributions","createTileGridFromProjection","Tile","opacity","isBaseLayer","allowVectorExport","getAllowVectorExport","sourceOptions","layerOptions","overlayStyle","ex","fill","colour","r","g","b","stroke","radius","style","createOLStyle","cacheSize","GeoJSON","strategy","loadingstrategy","tile","tilegrid","createXYZ","styleDefinition","Fill","color","getOlColour","getOlStroke","Style","Circle","setImage","colourDefinition","strokeDefinition","dashStyle","dash","lineCap","lineJoin","Stroke","lineDash","size","prjExtent","getExtent","resolutions","resolutionsFromExtent","TileGrid","origin","getCorner","getCornerString","getAxisOrientation","maxZoom","common","DEFAULT_MAX_ZOOM","getHeight","getWidth","maxResolution","max","z","pow","axisOrientation","IntersectExpressionBuilder","m_feature","m_overlay","layerEpsg","geoJson","newGeom","getGeometry","writeGeometry","OverlayFactory","overlays","getOverlays","processLayerList","createInternalLayer","propertiesObject","tmp","propMap","_vm","_h","$createElement","_c","_self","directives","rawName","showParent","isMobile","_e","staticClass","class","positionClass","expandoClass","attrs","click","expandoClicked","_v","show","contentCss","contentId","_t","_withStripped","contentClass","String","position","required","methods","$store","commit","dispatch","$emit","transitionCompleteHandler","mounted","$nextTick","el","computed","state","ui","appPanelVisible","$vuetify","breakpoint","mobile","__file","showPanel","initialShowPanel","Boolean","rightSmallScreenSafe","useSmallScreenOption","smAndDown","haveAttributions","_l","myAttributions","ref","refInFor","domProps","innerHTML","_s","renderedAttribution","components","created","beforeDestroy","getters","attr","bottom","timeout","scopedSlots","_u","fn","indeterminate","model","callback","$$v","message","watch","activityMessage","msg","contentControls","_g","cssClasses","fab","btnAriaLabel","small","large","loading","showLoading","contentControlItem","dark","light","to","href","target","clickHandler","icon","btnTooltip","Dark","Light","Small","Large","lang","t","ariaLabelKey","tooltipKey","contentControl","navigationItem","$event","stopPropagation","clicked","apply","arguments","navigationText","localisationKey","cssClass","clipped","temporary","app","navDrawerVisible","$set","navigationItems","haveItems","top","right","direction","btnAriaLabelClose","proxy","items","contentButtonConfig","speedDialItem","speedDialItems","btnAriaLabelView","btnTooltipClose","btnTooltipView","persistent","humanDialogVisible","humanDialogTitle","humanCheckboxText","userIsHuman","textColourCss","onConfirmHuman","btnConfirmText","fixed","useDarkText","showMenu","menuTitle","fullscreen","showInitialDialog","resizeHandler","tag","fluid","cookieManager","showCookieSnackbar","text","cookiePolicyText","acceptText","cancelText","mapContainerId","appSidePanelClass","transitionComplete","mode","panels","panel","toolstripItems","iconClass","toolstripItem","left","btnAriaLabelAccount","iconColour","dense","accountButtonClass","canViewOtherMaps","maps","label","selectLabel","mapLink","linkDisabled","selectedMap","showLogout","helpUrl","creditsUrl","method","action","buttonClass","btnTextLogout","profile","canLogout","showMapSwitcher","currentCulture","allowAnonymous","btnTooltipAccount","menuVisible","mapFeaturesVisible","appDrawVisible","CookieManager","dataLayers","baseLayers","urlPromises","urlFullMapPromises","showCookieConsent","haveConsent","cssclass","showHumanDialogSetting","dialogVisible","checkedIamHuman","navigationDrawer","applicationPanel","cookieSnackbar","errorSnackbar","speedDial","cultureSelector","notificationSnackbar","toolstrip","interactiveSnackbar","hideSearchResults","showSearch","olMap","application","updateSize","getLayerIndex","sortLayerByIndex","layerIndexA","layerIndexB","setCheckedIamHuman","continueLoadingMap","startLoadingMap","setTarget","centre","initialMapState","zoom","viewExtent","viewOptions","center","constrainResolution","enableRotation","theMap_view","View","calcScale","mPerUnit","getMetersPerUnit","round","newRes","getResolution","homeBookmark","setCenter","setResolution","Map","logo","layers","controls","once","getAttributions","frameState","initialRes","mapControls","contrlCount","addControl","watermark","layerFactory","tileUrlFunction","handleInitialBaseLayer","geognosisLayerId","geognoSis","geognoSisLayerId","finishLoadingMap","overlayLayers","AjaxWrapper","ajaxDefaults","singleTile","overlayCount","setOpacity","combinedIndex","padStart","set","initializeRefresher","pinger","Worker","postMessage","ajaxConfig","interval","cmd","actionUrl","refresher","token","headers","onmessage","refreshToken","wmJwtToken","combinedLayers","concat","setLayers","visibleDataLayers","setDataLayerVisibility","compileFrameState","handleInitialRoute","baseLayer","setBaseLayerVisible","foundVisible","getVisible","find","others","setVisible","foundIndex","findIndex","Hittable","handleParameters","p","promises","requiresFullMap","ext","handleUrlParameters","parameters","f","bits","split","obj","bit","route","$router","path","datalayers","baselayers","yearRegEx","textOrArray","result","getFullYear","copyright","mapView","viewState","getZoom","getCenter","beforeRouteLeave","from","beforeMount","containerCss","closeClickHandler","calcHeight","calcWidth","cols","requied","default","containerClasses","contentClasses","$root","ariaLabel","outlined","tooltip","filterItems","fixedHeader","tableHeight","sortFunction","showFilter","availableColumns","filterDisabled","change","selectedColumnChanged","selectedColumn","filterTypes","filterType","valueComponent","rules","filterRules","valueType","listItems","filterValue","applyFilterDisabled","applyFilterHandler","removeFilterDisabled","clearFilterHandler","header","headerWidth","closable","closeLabel","removeColumn","closeToolTip","col","getCellData","viewLabel","viewClickedHandler","viewToolTip","isoDateRegEx","DataTableFactory","getHeader","sortable","AllowedFilters","getAllowedFilters","align","getSortFunction","filterable","None","allowedFilters","actionHeader","getCSVRow","rowData","replacer","stringify","getSISCellData","getGeoJsonCellData","allowed","Equals","GreaterThan","GreaterThanEquals","LessThan","LessThanEquals","Contains","Cadcorp","Core","Utils","FormatValue","tmpDate","FormatDate","getProperties","getColumnType","Number","dateFunc","aDate","bDate","getTime","simpleFunc","stringFunc","localeCompare","objectFunc","filterData","newFilter","getCorrectFilter","filterFunc","getFilterFunction","searchColumn","parseInt","parseFloat","func","testDate","getFeaturePropValue","includes","transition","_b","readonly","dateOpen","scrollable","dateCancelClickHandler","btnTextCancel","dateOKClickHandler","btnTextOk","toISOString","$refs","dateMenu","save","currentFilter","factory","valid","isDesc","locale","customSorters","getFilterTypeText","newVal","oldVal","shift","Vuex","mapState","namespaced","currentLocation","currentBaseLayer","currentScale","mapTitle","initialBaseLayer","initialDataLayers","mutations","setBaseLayers","addBaseLayer","newBaseLayer","setCurrentBaseLayer","setCurrentLocation","setInitialMapState","setDataLayers","addDataLayers","removeDataLayer","dataLayer","setMap","setWatermark","setScale","setMapTitle","setCopyright","setResolutions","setInitialBaseLayer","setInitialDataLayers","setAttributions","getMapTitle","visibleDataLayerNames","layerNames","l","visibleBaseLayerName","getWatermark","actions","context","modules","layerEpsgCode","groups","sessionTimeout","layerIndexPrefix","getOverlaysFromServer","payload","rootState","initialiseGeognoSIS","mapProperties","overlayProperties","setOverlays","setSessionId","setGeognoSisLayerId","setLayerEpsgCode","setGroups","addOverlay","sortOverlays","removeOverlay","foundIdx","setTileSize","setTimeOut","setLayerIndexPrefix","setSingleTile","setExtent","getSingleTile","getOpacity","extensions","defaultExtension","currentExtension","setExtensions","setDefaultExtension","extension","setCurrentExtension","activateExtension","extensionId","otherActiveExtensions","isActive","theExtension","deactivate","activateCurrent","activateDefault","keepCurrent","activeExtensions","getParamsFromExtensions","appendUrlParams","getExtension","getCurrentExtension","canEditProfile","setName","setMaps","setCanLogout","setCanEditProfile","setShowMapSwitcher","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","has","transformCachableValue","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","args","unwrap","storeNames","tx","done","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","Proxy","IDBRequest","request","success","promisifyRequest","newValue","openDB","version","blocked","upgrade","blocking","terminated","indexedDB","open","openPromise","oldVersion","newVersion","db","deleteDB","deleteDatabase","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","async","storeName","store","oldTraps","bookmarks","initialised","setBookmarks","setInitialised","addBookmark","bookmark","addBookmarks","removeBookmark","hasName","isHome","theDB","localStorageName","newKey","close","updateBookmarks","put","getBookmarksFromServer","tmpBookmark","isUserCreated","getLocalBookmarks","getAll","localBookmarks","getLocalBookmarksForMap","removeUserBookmark","req","uiState","errorMessage","notificationMessage","showNotification","setNavDrawerVisible","setDialogVisible","setAppPanelVisible","setActivityMessage","setErrorMessage","setNavigationItems","setContentControls","setSpeedDialItems","setShowNotification","setNotificationMessage","setToolstripItems","interactiveSnackBar","buttonText","showActivity","setShow","setMessage","setbuttonText","setCallback","setInteractiveSnackBar","snackBar","loadedLanguages","supportedCultures","userHelpUrl","showHumanDialog","initialRoute","urlParameters","cookiePolycyUrl","getUserHelpUrl","textCssClass","getShowHumanDialog","getInitialRoute","getUrlParameters","getCookiePolicyUrl","setBaseUrl","setAjaxDefaults","setMapName","setLocalStorageName","addLanguage","culture","language","setSupportedCultures","setCurrentCulture","newInterval","setRefreshToken","newToken","setAuthorisation","setUserHelpUrl","setUseDarkText","setShowHumanDialog","setInitialRoute","setUrlParameters","setCookiePolycyUrl","loadLanguage","objectStores_version","settings","LATEST_DB_VERSION","values","createLocalStorage","contains","createObjectStore","keyPath","autoIncrement","setUpContext","setLineDash","canvas","clearRect","lineWidth","w","strokeStyle","fillStyle","toLowerCase","getLineDash","rgbColour","updated","rgba","GeoLocator","GeognoSIS","GeognosisFilterExpressionBuilder","m_schemaColumn","m_uid","isNaN","pad","num","s","YYYY","getUTCFullYear","MM","getUTCMonth","DD","getUTCDate","HH","getUTCHours","mm","getUTCMinutes","ss","getUTCSeconds","sss","getUTCMilliseconds","setExpressionData","uid","m_schemaColumnName","LayerStatusEnum","HorizontalTextAlignmentEnum","VerticalTextAlignmentEnum","Extend","HideLoading","RemoveInvalidJavascriptChars","AppendParameters","IsUrl","IsNumber","IsUnsignedDecimal","IsUnsignedInteger","Validate","IsEmail","IsPostcode","NotEmpty","NotEmptyArray","Components","ApplicationPanel","ApplicationPanelContents","SidePanel","MapView","ActivitySnackBar","ErrorSnackBar","CookieSnackBar","NotificationSnackBar","TooltipButton","AttributionPanel","attributionPanel","Navigation","NavigationDrawer","NavigationItem","ContentControls","AppControls","appControls","AppControl","SpeedDial","SpeedDialItem","FeatureTable","table","featureTable","dataTableFactory","Store","ApplicationStore","LocalStorage","CreateLocalStorage","OpenDB","DeleteDB","WrapDb","ColourPicker","colourPicker","PreviewFunctions","backgroundImage","putImageData","centreX","centreY","min","beginPath","arc","PI","Line","canvasWidth","canvasHeight","moveTo","lineTo","Point","point","Polygon","topLeftCornerX","topLeftCornerY","closePath","Text","textAlign","textBaseline","font","strokeText","fillText","PointImage","imgWidth","naturalWidth","imgHeight","naturalHeight","drawImage","module","exports","Vue","axios","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","every","n","getter","__esModule","d","o","defineProperty","enumerable","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}