{"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};","/**\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}","const 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};","import { 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};","import { 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\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/**\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: string;\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\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","import { 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","import { 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}","import { 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","import { 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","import { 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}","import { 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","import { 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};","import { 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};","import { 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","import { 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;","import { 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;","//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;","import { 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 expandGroups: false,\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 expandGroups: false,\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 private 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}","import { 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};","import {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}","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\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');\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\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\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\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\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\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\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\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\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\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\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\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\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\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 } 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 if (this.$store.state.map.watermark) {\n const watermarlUrl = this.$store.state.map.watermark.url;\n const watermarkLayer = new ol.layer.Tile({ map: map, opacity: this.$store.state.map.watermark.opacity, source: new ol.source.TileImage({ crossOrigin: 'anonymous', tileUrlFunction: function (tileCoord, pixelRatio, projection) { return watermarlUrl; } }) });\n }\n this.handleInitialBaseLayer();\n \n }\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\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 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 }","import { 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","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\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\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.$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;","import { 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;","import { IMapState, IRootState } from '../../../../CommonScripts/Abstractions';\r\nimport geognosisState from '../GeognoSIS/overlayState';\r\nimport { AjaxWrapper } from '../Core/AjaxWrapper';\r\nimport { Module } from 'Vuex';\r\nimport Vue from 'Vue';\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) {\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 },\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;","import { Module } from 'Vuex';\r\nimport { IExtensionState, IRootState, IExtensionObject, IUrlParam } from '../../../../CommonScripts/Abstractions';\r\n\r\nconst theState: IExtensionState = {\r\n extensions: null,\r\n defaultExtension: 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 },\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 retVal = theExtension[0].activate();\r\n }\r\n }\r\n\r\n return retVal;\r\n },\r\n activateDefault(context) {\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.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 }\r\n}\r\nexport default extensionState;","import { 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;","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","import 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;","import { 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","import { 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};","import 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);","import { 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}","import { 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","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\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","import { 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","import { 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}","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","expandGroups","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","watermarlUrl","tileUrlFunction","handleInitialBaseLayer","geognosisLayerId","geognoSis","geognoSisLayerId","finishLoadingMap","overlayLayers","AjaxWrapper","ajaxDefaults","layerFactory","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","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","setExtensions","setDefaultExtension","extension","activateExtension","extensionId","otherActiveExtensions","isActive","theExtension","deactivate","activateDefault","activeExtensions","getParamsFromExtensions","appendUrlParams","getExtension","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":""}