{"version":3,"file":"js/5501.js","mappings":"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","sources":["webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPointCloudMeasure.vue?095c","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPointCloudMeasure.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPointCloudMeasure.vue.ts?f525","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoPointCloudMeasure.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue?a6c4","webpack://sbs.vison/./Scripts/ts/Api/Contracts/Dtos/SmartObject/JsonSchemaDto.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoSelectField.vue?3a17","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/BaseFormInput.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoSelectField.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoSelectField.vue.ts?92b6","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoSelectField.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoTextField.vue?4105","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoTextField.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoTextField.vue.ts?3c78","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/FormInputs/VoTextField.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue.ts?217c","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoSearchBox.vue?a04c","webpack://sbs.vison/./node_modules/vue-resize/dist/vue-resize.esm.js","webpack://sbs.vison/./node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","webpack://sbs.vison/./node_modules/vue-virtual-scroller/dist/vue-virtual-scroller.esm.js","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoSearchBox.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoSearchBox.vue.ts?5475","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoSearchBox.vue","webpack://sbs.vison/./node_modules/scrollparent/scrollparent.js","webpack://sbs.vison/./node_modules/svg.js/dist/svg.js","webpack://sbs.vison/./Scripts/ts/Api/Plugins/Orano/GmaoService.ts","webpack://sbs.vison/./Scripts/ts/Api/Plugins/Orano/InjectTypes.ts","webpack://sbs.vison/./Scripts/ts/Api/Plugins/Wiw/WiwService.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/Behaviors/Measure.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/BreadcrumbPanoramaGroupsConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/EmptyNavigationListToVisibilityConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/EmptyNavigationMapToVisibilityConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/ListNavigationsConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/MapsFromNavigationMapConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/UrlConverter.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/PlayerActionConverters/index.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoPrs.vue?ad7e","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoPrs.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoPrs.vue.ts?8fdf","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoPrs.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoVentixPanel.vue?f4c2","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoVentixPanel.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoVentixPanel.vue.ts?397f","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/OranoVentixPanel.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoShareLocation.vue?999c","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoShareLocation.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoShareLocation.vue.ts?99a7","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoShareLocation.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoSmartObjectPanel.vue?06b2","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoSmartObjectPanel.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoSmartObjectPanel.vue.ts?26f1","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/VoSmartObjectPanel.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/WiwPanel.vue?b013","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/WiwPanel.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/WiwPanel.vue.ts?d3c3","webpack://sbs.vison/./Scripts/ts/App/Areas/Explore/Components/WiwPanel.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Components/VoImage.vue?e565","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Components/VoImage.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoMap.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Components/VoImage.vue.ts?e3c0","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/Components/VoImage.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoMap.vue?a07c","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoMap.vue.ts?a265","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoMap.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoPanoramaList.vue?98d0","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoPanoramaList.vue.ts","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoPanoramaList.vue.ts?ad90","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/VoPanoramaList.vue","webpack://sbs.vison/./Scripts/ts/App/Areas/Shares/RendererComponents.ts","webpack://sbs.vison/./Scripts/ts/Commons/Common.ts","webpack://sbs.vison/./Scripts/ts/Framework/Components/EventArgs/NotifyCollectionChangedEventArgs.ts","webpack://sbs.vison/./Scripts/ts/Framework/Interactivity/Behavior.ts","webpack://sbs.vison/./Scripts/ts/Framework/Interactivity/BehaviorOfT.ts","webpack://sbs.vison/./node_modules/ts-specification/dist/Specification.js"],"sourcesContent":["import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemGroup } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{style:(_vm.computedStyle)},[_c(VSystemBar,[_c('span',{staticClass:\"text-truncate\"},[_vm._v(_vm._s(_vm.localizer('JS.Plugin.MeasureTool.Title')))]),_c(VSpacer,{staticClass:\"mx-2\"}),(!_vm.toggleMinimizeContent)?_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":function($event){_vm.toggleMinimizeContent = true}}},[_vm._v(\" fa-light fa-window-minimize \")]):_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":function($event){_vm.toggleMinimizeContent = false}}},[_vm._v(\" fa-light fa-window-maximize \")])],1),_c(VCard,{class:{ 'd-none': _vm.toggleMinimizeContent },attrs:{\"width\":\"auto\",\"color\":\"#00000066\",\"rounded\":\"false\",\"dark\":\"\"}},[(!_vm.hasMeasurements)?_c(VCardText,[_c(VIcon,{attrs:{\"left\":\"\"}},[_vm._v(\"fa-light fa-circle-info\")]),_vm._v(_vm._s(_vm.localizer('JS.Plugin.MeasureTool.Tips'))+\" \")],1):_c(VList,{attrs:{\"color\":\"#00000066\",\"dense\":\"\"}},[_c(VListItemGroup,{attrs:{\"mandatory\":\"\",\"color\":_vm.selectedItemColor},on:{\"change\":_vm._lookToSelection},model:{value:(_vm.selectedItem),callback:function ($$v) {_vm.selectedItem=$$v},expression:\"selectedItem\"}},_vm._l((_vm._itemsSource),function(measure,index){return _c(VListItem,{key:index,attrs:{\"value\":measure}},[_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(measure.text))])],1)],1)}),1)],1)],1),(_vm.hasSelection)?_c(VToolbar,{attrs:{\"dense\":\"\"}},[_c(VSpacer),_c(VBtn,{attrs:{\"icon\":\"\",\"small\":\"\",\"title\":_vm.localizer('JS.Plugin.MeasureTool.TooltipShowHide')},on:{\"click\":_vm._toggleVisibility}},[(_vm.selectedItem.isEnabled())?_c(VIcon,[_vm._v(\"fa-solid fa-eye\")]):_c(VIcon,[_vm._v(\"fa-solid fa-eye-slash\")])],1),_c(VSpacer),(_vm.canToggleAxisVisibility)?_c(VBtn,{attrs:{\"icon\":\"\",\"small\":\"\",\"title\":_vm.localizer('JS.Plugin.MeasureTool.TooltipShowHideAxis')},on:{\"click\":_vm._toggleAxisVisibility}},[_c(VIcon,[_vm._v(\"fa-solid fa-ruler-triangle\")])],1):_vm._e(),_c(VSpacer),_c(VBtn,{attrs:{\"icon\":\"\",\"small\":\"\",\"title\":_vm.localizer('JS.Plugin.MeasureTool.TooltipDelete')},on:{\"click\":_vm._removeMeasure}},[_c(VIcon,[_vm._v(\"fa-solid fa-trash\")])],1),_c(VSpacer)],1):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { LineMeasure, Measurable } from 'App/Areas/Explore/Components/Behaviors/Measure';\r\nimport { NotifyCollectionChangedAction, NotifyCollectionChangedEventArgs } from 'Framework/Components/EventArgs/NotifyCollectionChangedEventArgs';\r\nimport { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { Component, UIElement, Watch } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'vo-point-cloud-measure'\r\n})\r\nexport default class VoPointCloudMeasure extends UIElement {\r\n public mounted(): void {\r\n UIElement.Bus.$on('eb-point-cloud-measure-changed', this._onMeasuresChanged);\r\n }\r\n\r\n public beforeDestroy(): void {\r\n UIElement.Bus.$off('eb-point-cloud-measure-changed', this._onMeasuresChanged);\r\n }\r\n\r\n private _onMeasuresChanged(sender: any, args: NotifyCollectionChangedEventArgs): void {\r\n let action: NotifyCollectionChangedAction = args.action;\r\n\r\n if (action == NotifyCollectionChangedAction.Add) {\r\n let newMeasure = args.newItems[0] as Measurable;\r\n\r\n this._itemsSource.push(newMeasure);\r\n this.selectedItem = newMeasure;\r\n }\r\n else if (action == NotifyCollectionChangedAction.Replace) {\r\n let updateMeasure = args.newItems[0] as Measurable;\r\n let oldMeasureIndex = this._itemsSource.indexOf(updateMeasure);\r\n this._itemsSource.splice(oldMeasureIndex, 1, updateMeasure);\r\n\r\n if (this.selectedItem != updateMeasure) {\r\n this.selectedItem = updateMeasure;\r\n }\r\n else {\r\n this.$raisePropertyChanged(nameof(this.canToggleAxisVisibility));\r\n }\r\n }\r\n else if (action == NotifyCollectionChangedAction.Remove) {\r\n let removeMeasure = args.oldItems[0] as Measurable;\r\n let oldMeasureIndex = this._itemsSource.indexOf(removeMeasure);\r\n this._itemsSource.splice(oldMeasureIndex, 1);\r\n this.selectedItem = null;\r\n }\r\n else if (action == NotifyCollectionChangedAction.Reset) {\r\n this._itemsSource.splice(0);\r\n this.selectedItem = null;\r\n }\r\n }\r\n\r\n private _lookToSelection(item: Measurable): void {\r\n if (item instanceof LineMeasure) {\r\n const meshCenter = item\r\n .getChildMeshes(true, n => n.name == 'LineMeasure')[0]\r\n .getBoundingInfo();\r\n\r\n UIElement.Bus.$emit(\r\n 'look-to-event-bus',\r\n this,\r\n meshCenter.boundingBox.center\r\n );\r\n }\r\n }\r\n\r\n private _toggleVisibility(): void {\r\n let isEnabled = this.selectedItem.isEnabled();\r\n\r\n if (isEnabled) {\r\n (this.selectedItem as LineMeasure).closeAllPopups();\r\n }\r\n\r\n this.selectedItem.setEnabled(!isEnabled);\r\n }\r\n\r\n private _toggleAxisVisibility(): void {\r\n let selectedItem = this.selectedItem as LineMeasure;\r\n\r\n selectedItem.keepAxisVisible = !selectedItem.keepAxisVisible;\r\n }\r\n\r\n private _removeMeasure(): void {\r\n let item: Measurable = this.selectedItem;\r\n let index: number = this._itemsSource.indexOf(item);\r\n this._itemsSource.splice(index, 1);\r\n this.selectedItem = null;\r\n\r\n UIElement.Bus.$emit(\r\n 'eb-point-cloud-measure-remove',\r\n this,\r\n NotifyCollectionChangedEventArgs.createOneItemIndexChange(\r\n NotifyCollectionChangedAction.Remove,\r\n item,\r\n index\r\n )\r\n );\r\n }\r\n\r\n @Watch('selectedItem')\r\n private _onActivationChanged(newValue: Measurable, oldValue: Measurable): void {\r\n if (oldValue) {\r\n oldValue.isActive = false;\r\n }\r\n\r\n if (newValue) {\r\n newValue.isActive = true;\r\n\r\n if (!newValue.isEnabled()) {\r\n this._toggleVisibility();\r\n }\r\n }\r\n }\r\n\r\n public get selectedItemColor(): string {\r\n return (this.selectedItem as LineMeasure)?.activeLineColor?.toHexString() ?? 'accent';\r\n }\r\n\r\n public get canToggleAxisVisibility(): boolean {\r\n return this.selectedItem instanceof LineMeasure\r\n && this.selectedItem.pointCount == 2;\r\n }\r\n\r\n public get hasSelection(): boolean {\r\n return this.selectedItem != null;\r\n }\r\n\r\n public get hasMeasurements(): boolean {\r\n return this._itemsSource.length > 0;\r\n }\r\n\r\n public toggleMinimizeContent: boolean = false;\r\n public selectedItem: Measurable = null;\r\n\r\n @JsonProperty({ className: 'vo-point-cloud-measure', name: 'itemsSource', type: Array })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('itemsSource', { type: Array, required: false, default: () => [] })\r\n public _itemsSource: Array;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPointCloudMeasure.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPointCloudMeasure.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoPointCloudMeasure.vue?vue&type=template&id=7bf6a751&\"\nimport script from \"./VoPointCloudMeasure.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoPointCloudMeasure.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('default-dialog',{attrs:{\"buttons\":_vm.buttons},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [(_vm.isEditMode)?_c('div',[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".UpdateTitle\")))+\" \")]):_c('div',[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".AddTitle\")))+\" \")])]},proxy:true},{key:\"default\",fn:function(ref){\nvar onOk = ref.onOk;\nreturn [_c(VContainer,{attrs:{\"fluid\":\"\"}},[_c(VRow,[_c(VCol,[_c('vo-errors-list',{attrs:{\"errors\":_vm.errors}}),(!_vm.isEditMode)?_c('div',[_c(VSubheader,[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".SelectJsonSchema\")))+\" \")]),_c(VSelect,{staticClass:\"mb-4\",attrs:{\"disabled\":_vm.isEditMode,\"items\":_vm.schemas,\"loading\":_vm.isLoading,\"return-object\":\"\",\"item-text\":\"name\",\"hide-details\":\"\",\"small-chips\":\"\"},on:{\"change\":_vm._resetDataSourceOnSchemaChanged},model:{value:(_vm.selectedSchema),callback:function ($$v) {_vm.selectedSchema=$$v},expression:\"selectedSchema\"}})],1):_vm._e(),(_vm.selectedSchema)?_c('div',[_c(VForm,{on:{\"submit\":function($event){$event.preventDefault();_vm.isFormValid && onOk()}},model:{value:(_vm.isFormValid),callback:function ($$v) {_vm.isFormValid=$$v},expression:\"isFormValid\"}},[(!_vm.isEditMode)?_c('div',[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.baseTranslationPath + \".SelectDiplayPropertyPath\")))+\" \"),_c(VSelect,{staticClass:\"mb-4\",attrs:{\"items\":_vm._availableDisplayPathProperties,\"hide-details\":\"\",\"small-chips\":\"\",\"clearable\":\"\"},model:{value:(_vm.selectedDisplayPropertyPath),callback:function ($$v) {_vm.selectedDisplayPropertyPath=$$v},expression:\"selectedDisplayPropertyPath\"}})],1):_vm._e(),_vm._l((_vm.selectedSchema.schema.properties),function(attr,key){return _c(_vm._componentSelector(attr),{key:key,tag:\"component\",attrs:{\"propertyName\":key,\"property\":attr,\"disabled\":_vm._isReadOnly(attr),\"required\":_vm._isRequired(key)},model:{value:(_vm.dataSource[key]),callback:function ($$v) {_vm.$set(_vm.dataSource, key, $$v)},expression:\"dataSource[key]\"}})})],2)],1):_vm._e()],1)],1)],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { InternalSystemType } from 'Api/Enums/InternalSystemType';\r\n\r\nexport type JsonType =\r\n | 'string'\r\n | 'null'\r\n | 'boolean'\r\n | 'array'\r\n | 'object'\r\n | 'integer'\r\n | 'number';\r\n\r\nexport type JsonFormat =\r\n | 'date-time'\r\n | 'time'\r\n | 'date'\r\n | 'duration'\r\n | 'hostname'\r\n | 'email'\r\n | 'ipv4'\r\n | 'ipv6'\r\n | 'uuid'\r\n | 'uri'\r\n | 'regex';\r\n\r\nexport type ContentEncoding =\r\n | 'quoted-printable'\r\n | 'base16'\r\n | 'base32'\r\n | 'base64';\r\n\r\nexport type JsonValue =\r\n | string\r\n | number\r\n | boolean\r\n | null\r\n | JsonObject\r\n | JsonArray;\r\n\r\nexport type JsonObject = {\r\n [key: string]: JsonValue;\r\n};\r\n\r\nexport type JsonArray = Array;\r\n\r\nexport type JsonSchema = {\r\n $id?: string;\r\n $schema?: string;\r\n $anchor?: string;\r\n $dynamicAnchor?: string;\r\n $ref?: string;\r\n $dynamicRef?: string;\r\n $defs?: Record;\r\n $comment?: string;\r\n title?: string;\r\n description?: string;\r\n type?: JsonType | Array;\r\n properties?: Record;\r\n default?: JsonValue;\r\n deprecated?: boolean;\r\n readOnly?: boolean;\r\n writeOnly?: boolean;\r\n enum?: Array;\r\n const?: JsonValue;\r\n multipleOf?: number;\r\n maximum?: number;\r\n exclusiveMaximum?: number;\r\n minimum?: number;\r\n exclusiveMinimum?: number;\r\n maxLength?: number;\r\n minLength?: number;\r\n pattern?: string;\r\n maxItems?: number;\r\n minItems?: number;\r\n uniqueItems?: boolean;\r\n maxContains?: number;\r\n minContains?: number;\r\n maxProperties?: number;\r\n minProperties?: number;\r\n required?: Array;\r\n dependentRequired?: Record>;\r\n prefixItems?: Array;\r\n items?: JsonSchema;\r\n contains?: JsonSchema;\r\n patternProperties?: Record;\r\n additionalProperties?: JsonSchema;\r\n propertyNames?: JsonSchema;\r\n unevaluatedItems?: JsonSchema;\r\n unevaluatedProperties?: JsonSchema;\r\n allOf?: Array;\r\n anyOf?: Array;\r\n oneOf?: Array;\r\n not?: JsonSchema;\r\n if?: JsonSchema;\r\n then?: JsonSchema;\r\n else?: JsonSchema;\r\n dependentSchemas?: Record;\r\n format?: JsonFormat;\r\n contentMediaType?: string;\r\n contentEncoding?: ContentEncoding;\r\n};\r\n\r\nexport type JsonSchemaDto = {\r\n jsonSchemaId: number;\r\n name: string;\r\n description?: string;\r\n schema: JsonSchema;\r\n visibility: InternalSystemType;\r\n}\r\n\r\nexport function createObjectFromSchema(jsonSchema: JsonSchema): JsonObject {\r\n return jsonSchema?.type == 'object'\r\n ? createObjectFromSchemaInternal(jsonSchema) as JsonObject\r\n : null;\r\n}\r\n\r\nfunction createObjectFromSchemaInternal(jsonSchema: JsonSchema, rootJsonSchema?: JsonSchema): JsonValue {\r\n if ('default' in jsonSchema) {\r\n return jsonSchema.default;\r\n }\r\n\r\n const [jsonType, jsonRef] = getType(jsonSchema, rootJsonSchema);\r\n\r\n switch (jsonType) {\r\n case 'null':\r\n return null;\r\n case 'string':\r\n return '';\r\n case 'number':\r\n case 'integer':\r\n return 0;\r\n case 'boolean':\r\n return false;\r\n case 'array':\r\n return [];\r\n case 'object': {\r\n const currentSchema = jsonRef ?? jsonSchema;\r\n const obj: JsonObject = {};\r\n const schemaProperties: Record = currentSchema.properties ?? {};\r\n rootJsonSchema ??= jsonSchema;\r\n\r\n for (const [key, value] of Object.entries(schemaProperties)) {\r\n obj[key] = createObjectFromSchemaInternal(value, rootJsonSchema);\r\n }\r\n\r\n return obj;\r\n }\r\n default:\r\n throw new Error('not supported type');\r\n }\r\n}\r\n\r\nfunction getType(jsonSchema: JsonSchema, rootJsonSchema?: JsonSchema): [JsonType, JsonSchema?] {\r\n if (jsonSchema.$ref) {\r\n const $defs: JsonSchema = getRef(jsonSchema.$ref, rootJsonSchema);\r\n const [subType] = getType($defs, rootJsonSchema);\r\n\r\n return [subType, $defs];\r\n }\r\n\r\n if (!('type' in jsonSchema)) {\r\n throw new Error('type should be defined');\r\n }\r\n\r\n if (!Array.isArray(jsonSchema.type)) {\r\n return [jsonSchema.type, null];\r\n }\r\n\r\n if (jsonSchema.type.some(t => t == 'null')) {\r\n return ['null'];\r\n }\r\n\r\n return [jsonSchema.type.find(t => t != 'null')];\r\n}\r\n\r\nfunction getRef(refPath: string, rootJsonSchema: JsonSchema): JsonSchema {\r\n if (refPath.startsWith('#/$defs/')) {\r\n return refPath\r\n .slice(2)\r\n .split('/')\r\n .filter(segment => segment != '')\r\n .reduce(\r\n (current: Record, segment: string) => (\r\n current && typeof current === 'object' && segment in current\r\n ? current[segment]\r\n : null),\r\n rootJsonSchema);\r\n }\r\n else if (refPath.startsWith('/')) {\r\n throw new Error('$ref not implemented');\r\n }\r\n else if (refPath.startsWith('http')) {\r\n throw new Error('$ref http not implemented');\r\n }\r\n else {\r\n throw new Error('$ref not supported');\r\n }\r\n}\r\n","import { VSelect } from 'vuetify/lib/components/VSelect';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VSelect,{attrs:{\"items\":_vm.property.enum,\"label\":_vm.propertyName,\"rules\":Array.from(_vm.validationRules()),\"outlined\":\"\"},model:{value:(_vm.propertyValue),callback:function ($$v) {_vm.propertyValue=$$v},expression:\"propertyValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { JsonSchema } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { RequiredRule, ValidationRule, ValidationRuleMixin } from 'App/Mixins/ValidationRuleMixin';\r\nimport { Mixins, Prop, VModel, Vue } from 'vue-property-decorator';\r\n\r\nconst UseMixins = Mixins(\r\n Vue,\r\n ValidationRuleMixin);\r\n\r\nexport class BaseFormInput extends UseMixins {\r\n public *validationRules(): IterableIterator {\r\n if (this.required) {\r\n yield this.requiredRule(this.propertyName);\r\n }\r\n }\r\n\r\n public get isRequired() {\r\n return this.required\r\n ? RequiredRule.Required\r\n : RequiredRule.NotRequired;\r\n }\r\n\r\n @VModel()\r\n public readonly propertyValue: T;\r\n\r\n @Prop({ type: String, required: true })\r\n public readonly propertyName: string;\r\n\r\n @Prop({ type: Object, required: true })\r\n public readonly property: JsonSchema;\r\n\r\n @Prop({ type: Boolean, required: false, default: false })\r\n public readonly required: boolean;\r\n}\r\n","import { BaseFormInput } from 'App/Areas/Shares/FormInputs/BaseFormInput';\r\nimport { Component } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'VoSelectField'\r\n})\r\nexport default class VoSelectField extends BaseFormInput {\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSelectField.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSelectField.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoSelectField.vue?vue&type=template&id=a4c9ab4a&\"\nimport script from \"./VoSelectField.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoSelectField.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VTextField,_vm._b({attrs:{\"label\":_vm.propertyName,\"rules\":Array.from(_vm.validationRules()),\"counter\":_vm.maxValueLength,\"outlined\":\"\"},model:{value:(_vm.propertyValue),callback:function ($$v) {_vm.propertyValue=$$v},expression:\"propertyValue\"}},'v-text-field',_vm.$attrs,false))}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { BaseFormInput } from 'App/Areas/Shares/FormInputs/BaseFormInput';\r\nimport { RequiredRule, ValidationRule } from 'App/Mixins/ValidationRuleMixin';\r\nimport { Component } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'VoTextField'\r\n})\r\nexport default class VoTextField extends BaseFormInput {\r\n public override *validationRules(): IterableIterator {\r\n yield *super.validationRules();\r\n\r\n const requirement: RequiredRule = this.isRequired;\r\n\r\n if (this.property.minLength) {\r\n yield this.minLengthRule(this.propertyName, this.property.minLength);\r\n }\r\n\r\n if (this.property.maxLength) {\r\n yield this.maxLengthRule(this.propertyName, this.property.maxLength);\r\n }\r\n\r\n if (this.property.pattern) {\r\n yield this.regexRule(this.propertyName, this.property.pattern);\r\n }\r\n\r\n switch (this.property.format) {\r\n case 'email':\r\n yield this.emailAdressRule(this.propertyName, requirement);\r\n break;\r\n case 'hostname':\r\n yield this.hostNameRule(this.propertyName, requirement);\r\n break;\r\n case 'ipv4':\r\n yield this.ipv4Rule(this.propertyName, requirement);\r\n break;\r\n case 'ipv6':\r\n yield this.ipv6Rule(this.propertyName, requirement);\r\n break;\r\n case 'uuid':\r\n yield this.guidRule(this.propertyName, 4, requirement);\r\n break;\r\n case 'uri':\r\n yield this.uriRule(this.propertyName, requirement);\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n public get maxValueLength(): number | undefined {\r\n return this.property.maxLength;\r\n }\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoTextField.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoTextField.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoTextField.vue?vue&type=template&id=86603456&\"\nimport script from \"./VoTextField.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoTextField.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { SmartObjectDto } from 'Api/Contracts/Dtos';\r\nimport { IQueryParameters } from 'Api/Contracts/Dtos/QueryParameters';\r\nimport { createObjectFromSchema, CreateSmartObjectInputDto, JsonObject, JsonSchema, JsonSchemaDto, JsonType, UpdateSmartObjectInputDto } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { IJsonSchemaService, ISmartObjectService } from 'Api/Contracts/Interfaces';\r\nimport { ApiException, IError, IPaginationResult } from 'Api/Dto/QueryResult';\r\nimport VoSelectField from 'App/Areas/Shares/FormInputs/VoSelectField.vue';\r\nimport VoTextField from 'App/Areas/Shares/FormInputs/VoTextField.vue';\r\nimport VoErrorsList from 'App/Areas/Shares/VoErrorsList.vue';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { BaseDialogBehavior } from 'App/Services/DialogService/BaseDialogBehavior';\r\nimport { DialogButton } from 'App/Services/DialogService/Components/DefaultDialog.vue';\r\nimport { Component, Vue } from 'Framework/Components/UIElement';\r\nimport { VueConstructor } from 'vue';\r\n\r\nexport interface IAddOrEditSmartObjectContext {\r\n projectId: number;\r\n schemaNames: Array;\r\n currentSmartObject?: SmartObjectDto;\r\n}\r\n\r\n@Component({\r\n name: 'VoAddOrEditSmartObjectDialog',\r\n components: {\r\n VoErrorsList,\r\n VoTextField,\r\n VoSelectField\r\n }\r\n})\r\nexport default class VoAddOrEditSmartObjectDialog extends BaseDialogBehavior {\r\n public created(): void {\r\n if (this.isEditMode) {\r\n this.selectedSchema = this.dataContext.currentSmartObject.schema;\r\n this.selectedDisplayPropertyPath = this.dataContext.currentSmartObject.displayPropertyPath;\r\n this.dataSource = this.dataContext.currentSmartObject.dataSource;\r\n }\r\n }\r\n\r\n public async mounted(): Promise {\r\n if (this.isEditMode) {\r\n return;\r\n }\r\n\r\n try {\r\n this.isLoading = true;\r\n\r\n const parameters: IQueryParameters = {\r\n orderBy: 'name',\r\n page: 1,\r\n pageSize: 100,\r\n filter: this._dataContext.schemaNames\r\n .map(item => `name eq '${item}'`)\r\n .join(' or ')\r\n };\r\n\r\n const response: IPaginationResult = await this._jsonSchemaService\r\n .getJsonSchemasAsync(parameters);\r\n\r\n this.schemas = response.items;\r\n }\r\n catch (ex) {\r\n if (ex instanceof ApiException) {\r\n this.errors.push(ex.error);\r\n }\r\n }\r\n finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n public async beforeOkAsync(): Promise {\r\n try {\r\n if (this.isEditMode) {\r\n const parameters: UpdateSmartObjectInputDto = {\r\n dataSource: JSON.stringify(this.dataSource),\r\n displayPropertyPath: this.selectedDisplayPropertyPath\r\n };\r\n\r\n await this._smartObjectService.updateObjectAsync(\r\n this.dataContext.currentSmartObject.assetItemId,\r\n parameters);\r\n\r\n this.dataContext.currentSmartObject.dataSource = this.dataSource;\r\n }\r\n else {\r\n const parameters: CreateSmartObjectInputDto = {\r\n projectId: this.dataContext.projectId,\r\n schemaId: this.selectedSchema.jsonSchemaId,\r\n displayPropertyPath: `/${this.selectedDisplayPropertyPath}`,\r\n dataSource: this.dataSource\r\n };\r\n\r\n await this._smartObjectService.createObjectAsync(parameters);\r\n }\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n if (ex instanceof ApiException) {\r\n this.errors.push(ex.error);\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n private _componentSelector(property: JsonSchema): VueConstructor {\r\n const jsonType: JsonType = Array.isArray(property.type)\r\n ? property.type.find(t => t != 'null')\r\n : property.type;\r\n\r\n if (jsonType == 'string') {\r\n if (property.enum) {\r\n return VoSelectField;\r\n }\r\n\r\n switch (property.format) {\r\n case 'date-time':\r\n case 'time':\r\n case 'date':\r\n case 'duration':\r\n break;\r\n case 'hostname':\r\n case 'email':\r\n case 'ipv4':\r\n case 'ipv6':\r\n case 'uuid':\r\n case 'uri':\r\n case 'regex':\r\n default:\r\n return VoTextField;\r\n }\r\n }\r\n\r\n const error: string = this.localizer(`${this.baseTranslationPath}.NotSupportedType`);\r\n\r\n return Vue.extend({\r\n template: `${error}`\r\n });\r\n }\r\n\r\n private _isRequired(propertyName: string): boolean {\r\n return this.selectedSchema.schema.required?.includes(propertyName) ?? false;\r\n }\r\n\r\n private _isReadOnly(property: JsonSchema): boolean {\r\n return property.readOnly ?? false;\r\n }\r\n\r\n private get _availableDisplayPathProperties(): Array {\r\n return Object.entries(this.selectedSchema.schema.properties)\r\n .filter(([_, schema]) => schema.type == 'string')\r\n .map(([propertyName, _]) => propertyName);\r\n }\r\n\r\n public get isEditMode(): boolean {\r\n return this.dataContext.currentSmartObject != null;\r\n }\r\n\r\n public canConfirm(): boolean {\r\n return this.isFormValid;\r\n }\r\n\r\n private _resetDataSourceOnSchemaChanged(newValue: JsonSchemaDto): void {\r\n this.dataSource = createObjectFromSchema(newValue.schema);\r\n }\r\n\r\n public isLoading: boolean = false;\r\n public schemas: Array = [];\r\n public selectedSchema: JsonSchemaDto = null;\r\n public isFormValid: boolean = false;\r\n public dataSource: JsonObject = null;\r\n public selectedDisplayPropertyPath: string = null;\r\n\r\n public readonly errors: Array = [];\r\n protected readonly buttons: DialogButton = DialogButton.OkCancel;\r\n protected readonly baseTranslationPath: string = 'Areas.Shared.VoAddSmartObjectDialog';\r\n\r\n @lazyInject(injectTypes.IJsonSchemaService)\r\n private readonly _jsonSchemaService: IJsonSchemaService;\r\n\r\n @lazyInject(injectTypes.ISmartObjectService)\r\n private readonly _smartObjectService: ISmartObjectService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoAddOrEditSmartObjectDialog.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoAddOrEditSmartObjectDialog.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoAddOrEditSmartObjectDialog.vue?vue&type=template&id=2d2294e9&\"\nimport script from \"./VoAddOrEditSmartObjectDialog.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoAddOrEditSmartObjectDialog.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VAvatar } from 'vuetify/lib/components/VAvatar';\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTreeview } from 'vuetify/lib/components/VTreeview';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VMenu,{attrs:{\"offset-y\":\"\",\"tile\":\"\",\"max-height\":\"204\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar value = ref.value;\nreturn [_c(VTextField,_vm._g({style:(_vm.computedStyle),attrs:{\"placeholder\":_vm.placeholder,\"loading\":_vm.isSearching,\"dense\":\"\",\"dark\":\"\",\"clearable\":\"\",\"solo\":\"\",\"flat\":\"\",\"hide-details\":\"\",\"background-color\":\"rgba(0,0,0,0.4)\"},on:{\"input\":_vm.onSearch},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c(VIcon,{on:{\"click\":function($event){_vm.showMenu = !_vm.showMenu}}},[(value)?[_vm._v(\" fa-solid fa-caret-up \")]:[_vm._v(\" fa-solid fa-caret-down \")]],2)]},proxy:true}],null,true),model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:\"searchText\"}},on))]}},{key:\"default\",fn:function(){return [_c(VCard,{attrs:{\"rounded\":\"t-0\"}},[(_vm.foundItems.length == 0)?_c('span',[_vm._v(_vm._s(_vm.localizer((_vm.baseTranslationPath + \".NotFound\"))))]):_c('dynamic-scroller',{ref:\"dynamicScroller\",staticStyle:{\"max-height\":\"204px\"},attrs:{\"items\":_vm.foundItems,\"min-item-size\":36},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nvar index = ref.index;\nvar active = ref.active;\nreturn [_c('dynamic-scroller-item',{attrs:{\"item\":item,\"active\":active,\"data-index\":index,\"size-dependencies\":[item.assetSource.hotspots]}},[_c(VTreeview,{attrs:{\"hoverable\":\"\",\"activatable\":\"\",\"items\":[item],\"item-key\":\"id\",\"return-object\":\"\"},on:{\"update:active\":_vm.selectOption},scopedSlots:_vm._u([{key:\"label\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{domProps:{\"innerHTML\":_vm._s(_vm._highlightingSearchResult(item.assetSource))}})]}},{key:\"prepend\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VBadge,{attrs:{\"bottom\":\"\",\"color\":\"rgba(40, 40, 40, 0.5)\",\"overlap\":\"\",\"value\":_vm.isVersioningEnabled && item.assetSource.type != _vm.AssetItemType.Hotspot},scopedSlots:_vm._u([{key:\"badge\",fn:function(){return [_c(VIcon,{attrs:{\"color\":_vm.getItemIconColor(item.assetSource)}},[_vm._v(\" \"+_vm._s(_vm.getItemIcon(item.assetSource))+\" \")])]},proxy:true}],null,true)},[_c(VAvatar,{attrs:{\"size\":\"32\"}},[_c(VImg,{attrs:{\"src\":_vm.getItemImgPreview(item.assetSource),\"aspect-ratio\":\"1\",\"width\":\"32\"},scopedSlots:_vm._u([{key:\"placeholder\",fn:function(){return [_c(VRow,{staticClass:\"fill-height ma-0\",attrs:{\"align\":\"center\",\"justify\":\"center\"}},[(item.assetSource.content)?_c(VIcon,{style:({'--background-color-icon':item.assetSource.content.color})},[_vm._v(_vm._s(_vm.getItemIcon(item.assetSource)))]):_c(VIcon,{attrs:{\"color\":\"primary\"}},[_vm._v(_vm._s(_vm.getItemIcon(item.assetSource)))])],1)]},proxy:true}],null,true)})],1)],1)]}}],null,true)})],1)]}}])})],1)]},proxy:true}]),model:{value:(_vm.showMenu),callback:function ($$v) {_vm.showMenu=$$v},expression:\"showMenu\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","function getInternetExplorerVersion() {\n\tvar ua = window.navigator.userAgent;\n\n\tvar msie = ua.indexOf('MSIE ');\n\tif (msie > 0) {\n\t\t// IE 10 or older => return version number\n\t\treturn parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n\t}\n\n\tvar trident = ua.indexOf('Trident/');\n\tif (trident > 0) {\n\t\t// IE 11 => return version number\n\t\tvar rv = ua.indexOf('rv:');\n\t\treturn parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n\t}\n\n\tvar edge = ua.indexOf('Edge/');\n\tif (edge > 0) {\n\t\t// Edge (IE 12+) => return version number\n\t\treturn parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n\t}\n\n\t// other browser\n\treturn -1;\n}\n\nvar isIE = void 0;\n\nfunction initCompat() {\n\tif (!initCompat.init) {\n\t\tinitCompat.init = true;\n\t\tisIE = getInternetExplorerVersion() !== -1;\n\t}\n}\n\nvar ResizeObserver = { render: function render() {\n\t\tvar _vm = this;var _h = _vm.$createElement;var _c = _vm._self._c || _h;return _c('div', { staticClass: \"resize-observer\", attrs: { \"tabindex\": \"-1\" } });\n\t}, staticRenderFns: [], _scopeId: 'data-v-b329ee4c',\n\tname: 'resize-observer',\n\n\tmethods: {\n\t\tcompareAndNotify: function compareAndNotify() {\n\t\t\tif (this._w !== this.$el.offsetWidth || this._h !== this.$el.offsetHeight) {\n\t\t\t\tthis._w = this.$el.offsetWidth;\n\t\t\t\tthis._h = this.$el.offsetHeight;\n\t\t\t\tthis.$emit('notify');\n\t\t\t}\n\t\t},\n\t\taddResizeHandlers: function addResizeHandlers() {\n\t\t\tthis._resizeObject.contentDocument.defaultView.addEventListener('resize', this.compareAndNotify);\n\t\t\tthis.compareAndNotify();\n\t\t},\n\t\tremoveResizeHandlers: function removeResizeHandlers() {\n\t\t\tif (this._resizeObject && this._resizeObject.onload) {\n\t\t\t\tif (!isIE && this._resizeObject.contentDocument) {\n\t\t\t\t\tthis._resizeObject.contentDocument.defaultView.removeEventListener('resize', this.compareAndNotify);\n\t\t\t\t}\n\t\t\t\tdelete this._resizeObject.onload;\n\t\t\t}\n\t\t}\n\t},\n\n\tmounted: function mounted() {\n\t\tvar _this = this;\n\n\t\tinitCompat();\n\t\tthis.$nextTick(function () {\n\t\t\t_this._w = _this.$el.offsetWidth;\n\t\t\t_this._h = _this.$el.offsetHeight;\n\t\t});\n\t\tvar object = document.createElement('object');\n\t\tthis._resizeObject = object;\n\t\tobject.setAttribute('aria-hidden', 'true');\n\t\tobject.setAttribute('tabindex', -1);\n\t\tobject.onload = this.addResizeHandlers;\n\t\tobject.type = 'text/html';\n\t\tif (isIE) {\n\t\t\tthis.$el.appendChild(object);\n\t\t}\n\t\tobject.data = 'about:blank';\n\t\tif (!isIE) {\n\t\t\tthis.$el.appendChild(object);\n\t\t}\n\t},\n\tbeforeDestroy: function beforeDestroy() {\n\t\tthis.removeResizeHandlers();\n\t}\n};\n\n// Install the components\nfunction install(Vue) {\n\tVue.component('resize-observer', ResizeObserver);\n\tVue.component('ResizeObserver', ResizeObserver);\n}\n\n// Plugin\nvar plugin = {\n\t// eslint-disable-next-line no-undef\n\tversion: \"0.4.5\",\n\tinstall: install\n};\n\n// Auto-install\nvar GlobalVue = null;\nif (typeof window !== 'undefined') {\n\tGlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n\tGlobalVue = global.Vue;\n}\nif (GlobalVue) {\n\tGlobalVue.use(plugin);\n}\n\nexport { install, ResizeObserver };\nexport default plugin;\n","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState =\n/*#__PURE__*/\nfunction () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n vnode.context.$nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && this.options.intersection.threshold || 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction bind(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction update(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unbind(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n bind(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unbind(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n bind: bind,\n update: update,\n unbind: unbind\n};\n\nfunction install(Vue) {\n Vue.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"0.4.6\",\n install: install\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","import { ResizeObserver as ResizeObserver$1 } from 'vue-resize';\nimport { ObserveVisibility } from 'vue-observe-visibility';\nimport ScrollParent from 'scrollparent';\nimport Vue from 'vue';\n\nvar config = {\n itemsLimit: 1000\n};\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _createForOfIteratorHelper(o) {\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) {\n var i = 0;\n\n var F = function () {};\n\n return {\n s: F,\n n: function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var it,\n normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function () {\n it = o[Symbol.iterator]();\n },\n n: function () {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function (e) {\n didErr = true;\n err = e;\n },\n f: function () {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nvar props = {\n items: {\n type: Array,\n required: true\n },\n keyField: {\n type: String,\n default: 'id'\n },\n direction: {\n type: String,\n default: 'vertical',\n validator: function validator(value) {\n return ['vertical', 'horizontal'].includes(value);\n }\n }\n};\nfunction simpleArray() {\n return this.items.length && _typeof(this.items[0]) !== 'object';\n}\n\nvar supportsPassive = false;\n\nif (typeof window !== 'undefined') {\n supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n}\n\nvar uid = 0;\nvar script = {\n name: 'RecycleScroller',\n components: {\n ResizeObserver: ResizeObserver$1\n },\n directives: {\n ObserveVisibility: ObserveVisibility\n },\n props: _objectSpread2({}, props, {\n itemSize: {\n type: Number,\n default: null\n },\n minItemSize: {\n type: [Number, String],\n default: null\n },\n sizeField: {\n type: String,\n default: 'size'\n },\n typeField: {\n type: String,\n default: 'type'\n },\n buffer: {\n type: Number,\n default: 200\n },\n pageMode: {\n type: Boolean,\n default: false\n },\n prerender: {\n type: Number,\n default: 0\n },\n emitUpdate: {\n type: Boolean,\n default: false\n }\n }),\n data: function data() {\n return {\n pool: [],\n totalSize: 0,\n ready: false,\n hoverKey: null\n };\n },\n computed: {\n sizes: function sizes() {\n if (this.itemSize === null) {\n var sizes = {\n '-1': {\n accumulator: 0\n }\n };\n var items = this.items;\n var field = this.sizeField;\n var minItemSize = this.minItemSize;\n var computedMinSize = 10000;\n var accumulator = 0;\n var current;\n\n for (var i = 0, l = items.length; i < l; i++) {\n current = items[i][field] || minItemSize;\n\n if (current < computedMinSize) {\n computedMinSize = current;\n }\n\n accumulator += current;\n sizes[i] = {\n accumulator: accumulator,\n size: current\n };\n } // eslint-disable-next-line\n\n\n this.$_computedMinItemSize = computedMinSize;\n return sizes;\n }\n\n return [];\n },\n simpleArray: simpleArray\n },\n watch: {\n items: function items() {\n this.updateVisibleItems(true);\n },\n pageMode: function pageMode() {\n this.applyPageMode();\n this.updateVisibleItems(false);\n },\n sizes: {\n handler: function handler() {\n this.updateVisibleItems(false);\n },\n deep: true\n }\n },\n created: function created() {\n this.$_startIndex = 0;\n this.$_endIndex = 0;\n this.$_views = new Map();\n this.$_unusedViews = new Map();\n this.$_scrollDirty = false;\n this.$_lastUpdateScrollPosition = 0; // In SSR mode, we also prerender the same number of item for the first render\n // to avoir mismatch between server and client templates\n\n if (this.prerender) {\n this.$_prerender = true;\n this.updateVisibleItems(false);\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n this.applyPageMode();\n this.$nextTick(function () {\n // In SSR mode, render the real number of visible items\n _this.$_prerender = false;\n\n _this.updateVisibleItems(true);\n\n _this.ready = true;\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.removeListeners();\n },\n methods: {\n addView: function addView(pool, index, item, key, type) {\n var view = {\n item: item,\n position: 0\n };\n var nonReactive = {\n id: uid++,\n index: index,\n used: true,\n key: key,\n type: type\n };\n Object.defineProperty(view, 'nr', {\n configurable: false,\n value: nonReactive\n });\n pool.push(view);\n return view;\n },\n unuseView: function unuseView(view) {\n var fake = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var unusedViews = this.$_unusedViews;\n var type = view.nr.type;\n var unusedPool = unusedViews.get(type);\n\n if (!unusedPool) {\n unusedPool = [];\n unusedViews.set(type, unusedPool);\n }\n\n unusedPool.push(view);\n\n if (!fake) {\n view.nr.used = false;\n view.position = -9999;\n this.$_views.delete(view.nr.key);\n }\n },\n handleResize: function handleResize() {\n this.$emit('resize');\n if (this.ready) this.updateVisibleItems(false);\n },\n handleScroll: function handleScroll(event) {\n var _this2 = this;\n\n if (!this.$_scrollDirty) {\n this.$_scrollDirty = true;\n requestAnimationFrame(function () {\n _this2.$_scrollDirty = false;\n\n var _this2$updateVisibleI = _this2.updateVisibleItems(false, true),\n continuous = _this2$updateVisibleI.continuous; // It seems sometimes chrome doesn't fire scroll event :/\n // When non continous scrolling is ending, we force a refresh\n\n\n if (!continuous) {\n clearTimeout(_this2.$_refreshTimout);\n _this2.$_refreshTimout = setTimeout(_this2.handleScroll, 100);\n }\n });\n }\n },\n handleVisibilityChange: function handleVisibilityChange(isVisible, entry) {\n var _this3 = this;\n\n if (this.ready) {\n if (isVisible || entry.boundingClientRect.width !== 0 || entry.boundingClientRect.height !== 0) {\n this.$emit('visible');\n requestAnimationFrame(function () {\n _this3.updateVisibleItems(false);\n });\n } else {\n this.$emit('hidden');\n }\n }\n },\n updateVisibleItems: function updateVisibleItems(checkItem) {\n var checkPositionDiff = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var itemSize = this.itemSize;\n var minItemSize = this.$_computedMinItemSize;\n var typeField = this.typeField;\n var keyField = this.simpleArray ? null : this.keyField;\n var items = this.items;\n var count = items.length;\n var sizes = this.sizes;\n var views = this.$_views;\n var unusedViews = this.$_unusedViews;\n var pool = this.pool;\n var startIndex, endIndex;\n var totalSize;\n\n if (!count) {\n startIndex = endIndex = totalSize = 0;\n } else if (this.$_prerender) {\n startIndex = 0;\n endIndex = this.prerender;\n totalSize = null;\n } else {\n var scroll = this.getScroll(); // Skip update if use hasn't scrolled enough\n\n if (checkPositionDiff) {\n var positionDiff = scroll.start - this.$_lastUpdateScrollPosition;\n if (positionDiff < 0) positionDiff = -positionDiff;\n\n if (itemSize === null && positionDiff < minItemSize || positionDiff < itemSize) {\n return {\n continuous: true\n };\n }\n }\n\n this.$_lastUpdateScrollPosition = scroll.start;\n var buffer = this.buffer;\n scroll.start -= buffer;\n scroll.end += buffer; // Variable size mode\n\n if (itemSize === null) {\n var h;\n var a = 0;\n var b = count - 1;\n var i = ~~(count / 2);\n var oldI; // Searching for startIndex\n\n do {\n oldI = i;\n h = sizes[i].accumulator;\n\n if (h < scroll.start) {\n a = i;\n } else if (i < count - 1 && sizes[i + 1].accumulator > scroll.start) {\n b = i;\n }\n\n i = ~~((a + b) / 2);\n } while (i !== oldI);\n\n i < 0 && (i = 0);\n startIndex = i; // For container style\n\n totalSize = sizes[count - 1].accumulator; // Searching for endIndex\n\n for (endIndex = i; endIndex < count && sizes[endIndex].accumulator < scroll.end; endIndex++) {\n }\n\n if (endIndex === -1) {\n endIndex = items.length - 1;\n } else {\n endIndex++; // Bounds\n\n endIndex > count && (endIndex = count);\n }\n } else {\n // Fixed size mode\n startIndex = ~~(scroll.start / itemSize);\n endIndex = Math.ceil(scroll.end / itemSize); // Bounds\n\n startIndex < 0 && (startIndex = 0);\n endIndex > count && (endIndex = count);\n totalSize = count * itemSize;\n }\n }\n\n if (endIndex - startIndex > config.itemsLimit) {\n this.itemsLimitError();\n }\n\n this.totalSize = totalSize;\n var view;\n var continuous = startIndex <= this.$_endIndex && endIndex >= this.$_startIndex;\n\n if (this.$_continuous !== continuous) {\n if (continuous) {\n views.clear();\n unusedViews.clear();\n\n for (var _i = 0, l = pool.length; _i < l; _i++) {\n view = pool[_i];\n this.unuseView(view);\n }\n }\n\n this.$_continuous = continuous;\n } else if (continuous) {\n for (var _i2 = 0, _l = pool.length; _i2 < _l; _i2++) {\n view = pool[_i2];\n\n if (view.nr.used) {\n // Update view item index\n if (checkItem) {\n view.nr.index = items.findIndex(function (item) {\n return keyField ? item[keyField] === view.item[keyField] : item === view.item;\n });\n } // Check if index is still in visible range\n\n\n if (view.nr.index === -1 || view.nr.index < startIndex || view.nr.index >= endIndex) {\n this.unuseView(view);\n }\n }\n }\n }\n\n var unusedIndex = continuous ? null : new Map();\n var item, type, unusedPool;\n var v;\n\n for (var _i3 = startIndex; _i3 < endIndex; _i3++) {\n item = items[_i3];\n var key = keyField ? item[keyField] : item;\n\n if (key == null) {\n throw new Error(\"Key is \".concat(key, \" on item (keyField is '\").concat(keyField, \"')\"));\n }\n\n view = views.get(key);\n\n if (!itemSize && !sizes[_i3].size) {\n if (view) this.unuseView(view);\n continue;\n } // No view assigned to item\n\n\n if (!view) {\n type = item[typeField];\n unusedPool = unusedViews.get(type);\n\n if (continuous) {\n // Reuse existing view\n if (unusedPool && unusedPool.length) {\n view = unusedPool.pop();\n view.item = item;\n view.nr.used = true;\n view.nr.index = _i3;\n view.nr.key = key;\n view.nr.type = type;\n } else {\n view = this.addView(pool, _i3, item, key, type);\n }\n } else {\n // Use existing view\n // We don't care if they are already used\n // because we are not in continous scrolling\n v = unusedIndex.get(type) || 0;\n\n if (!unusedPool || v >= unusedPool.length) {\n view = this.addView(pool, _i3, item, key, type);\n this.unuseView(view, true);\n unusedPool = unusedViews.get(type);\n }\n\n view = unusedPool[v];\n view.item = item;\n view.nr.used = true;\n view.nr.index = _i3;\n view.nr.key = key;\n view.nr.type = type;\n unusedIndex.set(type, v + 1);\n v++;\n }\n\n views.set(key, view);\n } else {\n view.nr.used = true;\n view.item = item;\n } // Update position\n\n\n if (itemSize === null) {\n view.position = sizes[_i3 - 1].accumulator;\n } else {\n view.position = _i3 * itemSize;\n }\n }\n\n this.$_startIndex = startIndex;\n this.$_endIndex = endIndex;\n if (this.emitUpdate) this.$emit('update', startIndex, endIndex); // After the user has finished scrolling\n // Sort views so text selection is correct\n\n clearTimeout(this.$_sortTimer);\n this.$_sortTimer = setTimeout(this.sortViews, 300);\n return {\n continuous: continuous\n };\n },\n getListenerTarget: function getListenerTarget() {\n var target = ScrollParent(this.$el); // Fix global scroll target for Chrome and Safari\n\n if (window.document && (target === window.document.documentElement || target === window.document.body)) {\n target = window;\n }\n\n return target;\n },\n getScroll: function getScroll() {\n var el = this.$el,\n direction = this.direction;\n var isVertical = direction === 'vertical';\n var scrollState;\n\n if (this.pageMode) {\n var bounds = el.getBoundingClientRect();\n var boundsSize = isVertical ? bounds.height : bounds.width;\n var start = -(isVertical ? bounds.top : bounds.left);\n var size = isVertical ? window.innerHeight : window.innerWidth;\n\n if (start < 0) {\n size += start;\n start = 0;\n }\n\n if (start + size > boundsSize) {\n size = boundsSize - start;\n }\n\n scrollState = {\n start: start,\n end: start + size\n };\n } else if (isVertical) {\n scrollState = {\n start: el.scrollTop,\n end: el.scrollTop + el.clientHeight\n };\n } else {\n scrollState = {\n start: el.scrollLeft,\n end: el.scrollLeft + el.clientWidth\n };\n }\n\n return scrollState;\n },\n applyPageMode: function applyPageMode() {\n if (this.pageMode) {\n this.addListeners();\n } else {\n this.removeListeners();\n }\n },\n addListeners: function addListeners() {\n this.listenerTarget = this.getListenerTarget();\n this.listenerTarget.addEventListener('scroll', this.handleScroll, supportsPassive ? {\n passive: true\n } : false);\n this.listenerTarget.addEventListener('resize', this.handleResize);\n },\n removeListeners: function removeListeners() {\n if (!this.listenerTarget) {\n return;\n }\n\n this.listenerTarget.removeEventListener('scroll', this.handleScroll);\n this.listenerTarget.removeEventListener('resize', this.handleResize);\n this.listenerTarget = null;\n },\n scrollToItem: function scrollToItem(index) {\n var scroll;\n\n if (this.itemSize === null) {\n scroll = index > 0 ? this.sizes[index - 1].accumulator : 0;\n } else {\n scroll = index * this.itemSize;\n }\n\n this.scrollToPosition(scroll);\n },\n scrollToPosition: function scrollToPosition(position) {\n if (this.direction === 'vertical') {\n this.$el.scrollTop = position;\n } else {\n this.$el.scrollLeft = position;\n }\n },\n itemsLimitError: function itemsLimitError() {\n var _this4 = this;\n\n setTimeout(function () {\n console.log('It seems the scroller element isn\\'t scrolling, so it tries to render all the items at once.', 'Scroller:', _this4.$el);\n console.log('Make sure the scroller has a fixed height (or width) and \\'overflow-y\\' (or \\'overflow-x\\') set to \\'auto\\' so it can scroll correctly and only render the items visible in the scroll viewport.');\n });\n throw new Error('Rendered items limit reached');\n },\n sortViews: function sortViews() {\n this.pool.sort(function (viewA, viewB) {\n return viewA.nr.index - viewB.nr.index;\n });\n }\n }\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n if (typeof shadowMode !== 'boolean') {\r\n createInjectorSSR = createInjector;\r\n createInjector = shadowMode;\r\n shadowMode = false;\r\n }\r\n // Vue.extend constructor export interop.\r\n const options = typeof script === 'function' ? script.options : script;\r\n // render functions\r\n if (template && template.render) {\r\n options.render = template.render;\r\n options.staticRenderFns = template.staticRenderFns;\r\n options._compiled = true;\r\n // functional template\r\n if (isFunctionalTemplate) {\r\n options.functional = true;\r\n }\r\n }\r\n // scopedId\r\n if (scopeId) {\r\n options._scopeId = scopeId;\r\n }\r\n let hook;\r\n if (moduleIdentifier) {\r\n // server build\r\n hook = function (context) {\r\n // 2.3 injection\r\n context =\r\n context || // cached call\r\n (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n // 2.2 with runInNewContext: true\r\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n context = __VUE_SSR_CONTEXT__;\r\n }\r\n // inject component styles\r\n if (style) {\r\n style.call(this, createInjectorSSR(context));\r\n }\r\n // register component module identifier for async chunk inference\r\n if (context && context._registeredComponents) {\r\n context._registeredComponents.add(moduleIdentifier);\r\n }\r\n };\r\n // used by ssr in case component is cached and beforeCreate\r\n // never gets called\r\n options._ssrRegister = hook;\r\n }\r\n else if (style) {\r\n hook = shadowMode\r\n ? function (context) {\r\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n }\r\n : function (context) {\r\n style.call(this, createInjector(context));\r\n };\r\n }\r\n if (hook) {\r\n if (options.functional) {\r\n // register for functional component in vue file\r\n const originalRender = options.render;\r\n options.render = function renderWithStyleInjection(h, context) {\r\n hook.call(context);\r\n return originalRender(h, context);\r\n };\r\n }\r\n else {\r\n // inject component registration as beforeCreate hook\r\n const existing = options.beforeCreate;\r\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n }\r\n }\r\n return script;\r\n}\n\n/* script */\nconst __vue_script__ = script;\n/* template */\nvar __vue_render__ = function() {\n var _obj, _obj$1;\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: \"observe-visibility\",\n rawName: \"v-observe-visibility\",\n value: _vm.handleVisibilityChange,\n expression: \"handleVisibilityChange\"\n }\n ],\n staticClass: \"vue-recycle-scroller\",\n class:\n ((_obj = {\n ready: _vm.ready,\n \"page-mode\": _vm.pageMode\n }),\n (_obj[\"direction-\" + _vm.direction] = true),\n _obj),\n on: {\n \"&scroll\": function($event) {\n return _vm.handleScroll($event)\n }\n }\n },\n [\n _vm.$slots.before\n ? _c(\n \"div\",\n { staticClass: \"vue-recycle-scroller__slot\" },\n [_vm._t(\"before\")],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n ref: \"wrapper\",\n staticClass: \"vue-recycle-scroller__item-wrapper\",\n style:\n ((_obj$1 = {}),\n (_obj$1[_vm.direction === \"vertical\" ? \"minHeight\" : \"minWidth\"] =\n _vm.totalSize + \"px\"),\n _obj$1)\n },\n _vm._l(_vm.pool, function(view) {\n return _c(\n \"div\",\n {\n key: view.nr.id,\n staticClass: \"vue-recycle-scroller__item-view\",\n class: { hover: _vm.hoverKey === view.nr.key },\n style: _vm.ready\n ? {\n transform:\n \"translate\" +\n (_vm.direction === \"vertical\" ? \"Y\" : \"X\") +\n \"(\" +\n view.position +\n \"px)\"\n }\n : null,\n on: {\n mouseenter: function($event) {\n _vm.hoverKey = view.nr.key;\n },\n mouseleave: function($event) {\n _vm.hoverKey = null;\n }\n }\n },\n [\n _vm._t(\"default\", null, {\n item: view.item,\n index: view.nr.index,\n active: view.nr.used\n })\n ],\n 2\n )\n }),\n 0\n ),\n _vm._v(\" \"),\n _vm.$slots.after\n ? _c(\n \"div\",\n { staticClass: \"vue-recycle-scroller__slot\" },\n [_vm._t(\"after\")],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"ResizeObserver\", { on: { notify: _vm.handleResize } })\n ],\n 1\n )\n};\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\n\n /* style */\n const __vue_inject_styles__ = undefined;\n /* scoped */\n const __vue_scope_id__ = undefined;\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = normalizeComponent(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n );\n\nvar script$1 = {\n name: 'DynamicScroller',\n components: {\n RecycleScroller: __vue_component__\n },\n inheritAttrs: false,\n provide: function provide() {\n if (typeof ResizeObserver !== 'undefined') {\n this.$_resizeObserver = new ResizeObserver(function (entries) {\n var _iterator = _createForOfIteratorHelper(entries),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var entry = _step.value;\n\n if (entry.target) {\n var event = new CustomEvent('resize', {\n detail: {\n contentRect: entry.contentRect\n }\n });\n entry.target.dispatchEvent(event);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n });\n }\n\n return {\n vscrollData: this.vscrollData,\n vscrollParent: this,\n vscrollResizeObserver: this.$_resizeObserver\n };\n },\n props: _objectSpread2({}, props, {\n minItemSize: {\n type: [Number, String],\n required: true\n }\n }),\n data: function data() {\n return {\n vscrollData: {\n active: true,\n sizes: {},\n validSizes: {},\n keyField: this.keyField,\n simpleArray: false\n }\n };\n },\n computed: {\n simpleArray: simpleArray,\n itemsWithSize: function itemsWithSize() {\n var result = [];\n var items = this.items,\n keyField = this.keyField,\n simpleArray = this.simpleArray;\n var sizes = this.vscrollData.sizes;\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var id = simpleArray ? i : item[keyField];\n var size = sizes[id];\n\n if (typeof size === 'undefined' && !this.$_undefinedMap[id]) {\n size = 0;\n }\n\n result.push({\n item: item,\n id: id,\n size: size\n });\n }\n\n return result;\n },\n listeners: function listeners() {\n var listeners = {};\n\n for (var key in this.$listeners) {\n if (key !== 'resize' && key !== 'visible') {\n listeners[key] = this.$listeners[key];\n }\n }\n\n return listeners;\n }\n },\n watch: {\n items: function items() {\n this.forceUpdate(false);\n },\n simpleArray: {\n handler: function handler(value) {\n this.vscrollData.simpleArray = value;\n },\n immediate: true\n },\n direction: function direction(value) {\n this.forceUpdate(true);\n }\n },\n created: function created() {\n this.$_updates = [];\n this.$_undefinedSizes = 0;\n this.$_undefinedMap = {};\n },\n activated: function activated() {\n this.vscrollData.active = true;\n },\n deactivated: function deactivated() {\n this.vscrollData.active = false;\n },\n methods: {\n onScrollerResize: function onScrollerResize() {\n var scroller = this.$refs.scroller;\n\n if (scroller) {\n this.forceUpdate();\n }\n\n this.$emit('resize');\n },\n onScrollerVisible: function onScrollerVisible() {\n this.$emit('vscroll:update', {\n force: false\n });\n this.$emit('visible');\n },\n forceUpdate: function forceUpdate() {\n var clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n if (clear || this.simpleArray) {\n this.vscrollData.validSizes = {};\n }\n\n this.$emit('vscroll:update', {\n force: true\n });\n },\n scrollToItem: function scrollToItem(index) {\n var scroller = this.$refs.scroller;\n if (scroller) scroller.scrollToItem(index);\n },\n getItemSize: function getItemSize(item) {\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n var id = this.simpleArray ? index != null ? index : this.items.indexOf(item) : item[this.keyField];\n return this.vscrollData.sizes[id] || 0;\n },\n scrollToBottom: function scrollToBottom() {\n var _this = this;\n\n if (this.$_scrollingToBottom) return;\n this.$_scrollingToBottom = true;\n var el = this.$el; // Item is inserted to the DOM\n\n this.$nextTick(function () {\n el.scrollTop = el.scrollHeight + 5000; // Item sizes are computed\n\n var cb = function cb() {\n el.scrollTop = el.scrollHeight + 5000;\n requestAnimationFrame(function () {\n el.scrollTop = el.scrollHeight + 5000;\n\n if (_this.$_undefinedSizes === 0) {\n _this.$_scrollingToBottom = false;\n } else {\n requestAnimationFrame(cb);\n }\n });\n };\n\n requestAnimationFrame(cb);\n });\n }\n }\n};\n\n/* script */\nconst __vue_script__$1 = script$1;\n\n/* template */\nvar __vue_render__$1 = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\n \"RecycleScroller\",\n _vm._g(\n _vm._b(\n {\n ref: \"scroller\",\n attrs: {\n items: _vm.itemsWithSize,\n \"min-item-size\": _vm.minItemSize,\n direction: _vm.direction,\n \"key-field\": \"id\"\n },\n on: { resize: _vm.onScrollerResize, visible: _vm.onScrollerVisible },\n scopedSlots: _vm._u(\n [\n {\n key: \"default\",\n fn: function(ref) {\n var itemWithSize = ref.item;\n var index = ref.index;\n var active = ref.active;\n return [\n _vm._t(\"default\", null, null, {\n item: itemWithSize.item,\n index: index,\n active: active,\n itemWithSize: itemWithSize\n })\n ]\n }\n }\n ],\n null,\n true\n )\n },\n \"RecycleScroller\",\n _vm.$attrs,\n false\n ),\n _vm.listeners\n ),\n [\n _vm._v(\" \"),\n _c(\"template\", { slot: \"before\" }, [_vm._t(\"before\")], 2),\n _vm._v(\" \"),\n _c(\"template\", { slot: \"after\" }, [_vm._t(\"after\")], 2)\n ],\n 2\n )\n};\nvar __vue_staticRenderFns__$1 = [];\n__vue_render__$1._withStripped = true;\n\n /* style */\n const __vue_inject_styles__$1 = undefined;\n /* scoped */\n const __vue_scope_id__$1 = undefined;\n /* module identifier */\n const __vue_module_identifier__$1 = undefined;\n /* functional template */\n const __vue_is_functional_template__$1 = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__$1 = normalizeComponent(\n { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 },\n __vue_inject_styles__$1,\n __vue_script__$1,\n __vue_scope_id__$1,\n __vue_is_functional_template__$1,\n __vue_module_identifier__$1,\n false,\n undefined,\n undefined,\n undefined\n );\n\nvar script$2 = {\n name: 'DynamicScrollerItem',\n inject: ['vscrollData', 'vscrollParent', 'vscrollResizeObserver'],\n props: {\n // eslint-disable-next-line vue/require-prop-types\n item: {\n required: true\n },\n watchData: {\n type: Boolean,\n default: false\n },\n\n /**\n * Indicates if the view is actively used to display an item.\n */\n active: {\n type: Boolean,\n required: true\n },\n index: {\n type: Number,\n default: undefined\n },\n sizeDependencies: {\n type: [Array, Object],\n default: null\n },\n emitResize: {\n type: Boolean,\n default: false\n },\n tag: {\n type: String,\n default: 'div'\n }\n },\n computed: {\n id: function id() {\n return this.vscrollData.simpleArray ? this.index : this.item[this.vscrollData.keyField];\n },\n size: function size() {\n return this.vscrollData.validSizes[this.id] && this.vscrollData.sizes[this.id] || 0;\n },\n finalActive: function finalActive() {\n return this.active && this.vscrollData.active;\n }\n },\n watch: {\n watchData: 'updateWatchData',\n id: function id() {\n if (!this.size) {\n this.onDataUpdate();\n }\n },\n finalActive: function finalActive(value) {\n if (!this.size) {\n if (value) {\n if (!this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes++;\n this.vscrollParent.$_undefinedMap[this.id] = true;\n }\n } else {\n if (this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes--;\n this.vscrollParent.$_undefinedMap[this.id] = false;\n }\n }\n }\n\n if (this.vscrollResizeObserver) {\n if (value) {\n this.observeSize();\n } else {\n this.unobserveSize();\n }\n } else if (value && this.$_pendingVScrollUpdate === this.id) {\n this.updateSize();\n }\n }\n },\n created: function created() {\n var _this = this;\n\n if (this.$isServer) return;\n this.$_forceNextVScrollUpdate = null;\n this.updateWatchData();\n\n if (!this.vscrollResizeObserver) {\n var _loop = function _loop(k) {\n _this.$watch(function () {\n return _this.sizeDependencies[k];\n }, _this.onDataUpdate);\n };\n\n for (var k in this.sizeDependencies) {\n _loop(k);\n }\n\n this.vscrollParent.$on('vscroll:update', this.onVscrollUpdate);\n this.vscrollParent.$on('vscroll:update-size', this.onVscrollUpdateSize);\n }\n },\n mounted: function mounted() {\n if (this.vscrollData.active) {\n this.updateSize();\n this.observeSize();\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.vscrollParent.$off('vscroll:update', this.onVscrollUpdate);\n this.vscrollParent.$off('vscroll:update-size', this.onVscrollUpdateSize);\n this.unobserveSize();\n },\n methods: {\n updateSize: function updateSize() {\n if (this.finalActive) {\n if (this.$_pendingSizeUpdate !== this.id) {\n this.$_pendingSizeUpdate = this.id;\n this.$_forceNextVScrollUpdate = null;\n this.$_pendingVScrollUpdate = null;\n this.computeSize(this.id);\n }\n } else {\n this.$_forceNextVScrollUpdate = this.id;\n }\n },\n updateWatchData: function updateWatchData() {\n var _this2 = this;\n\n if (this.watchData) {\n this.$_watchData = this.$watch('data', function () {\n _this2.onDataUpdate();\n }, {\n deep: true\n });\n } else if (this.$_watchData) {\n this.$_watchData();\n this.$_watchData = null;\n }\n },\n onVscrollUpdate: function onVscrollUpdate(_ref) {\n var force = _ref.force;\n\n // If not active, sechedule a size update when it becomes active\n if (!this.finalActive && force) {\n this.$_pendingVScrollUpdate = this.id;\n }\n\n if (this.$_forceNextVScrollUpdate === this.id || force || !this.size) {\n this.updateSize();\n }\n },\n onDataUpdate: function onDataUpdate() {\n this.updateSize();\n },\n computeSize: function computeSize(id) {\n var _this3 = this;\n\n this.$nextTick(function () {\n if (_this3.id === id) {\n var width = _this3.$el.offsetWidth;\n var height = _this3.$el.offsetHeight;\n\n _this3.applySize(width, height);\n }\n\n _this3.$_pendingSizeUpdate = null;\n });\n },\n applySize: function applySize(width, height) {\n var size = Math.round(this.vscrollParent.direction === 'vertical' ? height : width);\n\n if (size && this.size !== size) {\n if (this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes--;\n this.vscrollParent.$_undefinedMap[this.id] = undefined;\n }\n\n this.$set(this.vscrollData.sizes, this.id, size);\n this.$set(this.vscrollData.validSizes, this.id, true);\n if (this.emitResize) this.$emit('resize', this.id);\n }\n },\n observeSize: function observeSize() {\n if (!this.vscrollResizeObserver) return;\n this.vscrollResizeObserver.observe(this.$el.parentNode);\n this.$el.parentNode.addEventListener('resize', this.onResize);\n },\n unobserveSize: function unobserveSize() {\n if (!this.vscrollResizeObserver) return;\n this.vscrollResizeObserver.unobserve(this.$el.parentNode);\n this.$el.parentNode.removeEventListener('resize', this.onResize);\n },\n onResize: function onResize(event) {\n var _event$detail$content = event.detail.contentRect,\n width = _event$detail$content.width,\n height = _event$detail$content.height;\n this.applySize(width, height);\n }\n },\n render: function render(h) {\n return h(this.tag, this.$slots.default);\n }\n};\n\n/* script */\nconst __vue_script__$2 = script$2;\n\n/* template */\n\n /* style */\n const __vue_inject_styles__$2 = undefined;\n /* scoped */\n const __vue_scope_id__$2 = undefined;\n /* module identifier */\n const __vue_module_identifier__$2 = undefined;\n /* functional template */\n const __vue_is_functional_template__$2 = undefined;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__$2 = normalizeComponent(\n {},\n __vue_inject_styles__$2,\n __vue_script__$2,\n __vue_scope_id__$2,\n __vue_is_functional_template__$2,\n __vue_module_identifier__$2,\n false,\n undefined,\n undefined,\n undefined\n );\n\nfunction IdState () {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$idProp = _ref.idProp,\n idProp = _ref$idProp === void 0 ? function (vm) {\n return vm.item.id;\n } : _ref$idProp;\n\n var store = {};\n var vm = new Vue({\n data: function data() {\n return {\n store: store\n };\n }\n }); // @vue/component\n\n return {\n data: function data() {\n return {\n idState: null\n };\n },\n created: function created() {\n var _this = this;\n\n this.$_id = null;\n\n if (typeof idProp === 'function') {\n this.$_getId = function () {\n return idProp.call(_this, _this);\n };\n } else {\n this.$_getId = function () {\n return _this[idProp];\n };\n }\n\n this.$watch(this.$_getId, {\n handler: function handler(value) {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.$_id = value;\n });\n },\n immediate: true\n });\n this.$_updateIdState();\n },\n beforeUpdate: function beforeUpdate() {\n this.$_updateIdState();\n },\n methods: {\n /**\n * Initialize an idState\n * @param {number|string} id Unique id for the data\n */\n $_idStateInit: function $_idStateInit(id) {\n var factory = this.$options.idState;\n\n if (typeof factory === 'function') {\n var data = factory.call(this, this);\n vm.$set(store, id, data);\n this.$_id = id;\n return data;\n } else {\n throw new Error('[mixin IdState] Missing `idState` function on component definition.');\n }\n },\n\n /**\n * Ensure idState is created and up-to-date\n */\n $_updateIdState: function $_updateIdState() {\n var id = this.$_getId();\n\n if (id == null) {\n console.warn(\"No id found for IdState with idProp: '\".concat(idProp, \"'.\"));\n }\n\n if (id !== this.$_id) {\n if (!store[id]) {\n this.$_idStateInit(id);\n }\n\n this.idState = store[id];\n }\n }\n }\n };\n}\n\nfunction registerComponents(Vue, prefix) {\n Vue.component(\"\".concat(prefix, \"recycle-scroller\"), __vue_component__);\n Vue.component(\"\".concat(prefix, \"RecycleScroller\"), __vue_component__);\n Vue.component(\"\".concat(prefix, \"dynamic-scroller\"), __vue_component__$1);\n Vue.component(\"\".concat(prefix, \"DynamicScroller\"), __vue_component__$1);\n Vue.component(\"\".concat(prefix, \"dynamic-scroller-item\"), __vue_component__$2);\n Vue.component(\"\".concat(prefix, \"DynamicScrollerItem\"), __vue_component__$2);\n}\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"1.0.10\",\n install: function install(Vue, options) {\n var finalOptions = Object.assign({}, {\n installComponents: true,\n componentsPrefix: ''\n }, options);\n\n for (var key in finalOptions) {\n if (typeof finalOptions[key] !== 'undefined') {\n config[key] = finalOptions[key];\n }\n }\n\n if (finalOptions.installComponents) {\n registerComponents(Vue, finalOptions.componentsPrefix);\n }\n }\n};\n\nvar GlobalVue = null;\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue;\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin);\n}\n\nexport default plugin;\nexport { __vue_component__$1 as DynamicScroller, __vue_component__$2 as DynamicScrollerItem, IdState, __vue_component__ as RecycleScroller };\n//# sourceMappingURL=vue-virtual-scroller.esm.js.map\n","import { AssetItemType } from 'Api/Contracts/Dtos';\r\nimport { AssetFile, AssetHotspot, AssetItem, AssetPanoramaGroup, AssetPanoramaVersion } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { makeLocalHotspot } from 'App/Helpers/AssetHelper';\r\nimport { CoordinatesHelper } from 'App/Helpers/CoordinatesHelper';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, UIElement, Watch } from 'Framework/Components/UIElement';\r\nimport { Ref } from 'vue-property-decorator';\r\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\r\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\r\n\r\nclass SearchBoxItemResult {\r\n public constructor(assetSource: AssetItem, isVersioningEnabled: boolean = false) {\r\n this.assetSource = assetSource;\r\n this.isVersioningEnabled = isVersioningEnabled;\r\n }\r\n\r\n public get id(): string {\r\n if (this.assetSource instanceof AssetHotspot) {\r\n //Prevent duplicate id for group hotspots\r\n return `${this.assetSource.parentId}-${this.assetSource.assetItemId}`;\r\n }\r\n\r\n return this.assetSource.assetItemId.toString();\r\n }\r\n\r\n public get children(): Array {\r\n if (this.assetSource instanceof AssetPanoramaGroup) {\r\n if (this.isVersioningEnabled) {\r\n return this.assetSource.children.map(ai => new SearchBoxItemResult(ai, this.isVersioningEnabled));\r\n }\r\n\r\n const panorama = this.assetSource.children[0] as AssetPanoramaVersion;\r\n\r\n return panorama\r\n ? panorama.hotspots.map(h => new SearchBoxItemResult(h, this.isVersioningEnabled))\r\n : [];\r\n }\r\n\r\n if (this.assetSource instanceof AssetPanoramaVersion) {\r\n const panoramaGroup = this.assetSource.parent as AssetPanoramaGroup;\r\n\r\n const groupHotspots = panoramaGroup.hotspots.map(ah => makeLocalHotspot(ah, this.assetSource as AssetPanoramaVersion));\r\n\r\n const hotspots = [...this.assetSource.hotspots, ...groupHotspots];\r\n\r\n return hotspots.map(h => new SearchBoxItemResult(h, this.isVersioningEnabled));\r\n }\r\n\r\n return [];\r\n }\r\n\r\n public readonly assetSource: AssetItem;\r\n public readonly isVersioningEnabled: boolean;\r\n}\r\n\r\n@Component({\r\n name: 'vo-search-box',\r\n components: {\r\n DynamicScroller,\r\n DynamicScrollerItem,\r\n }\r\n})\r\nexport default class VoSearchBox extends UIElement {\r\n public mounted(): void {\r\n const isVersioningEnabled = this.isVersioningEnabled;\r\n\r\n this._cacheItems = Object.freeze(\r\n this._items.map(ai => Object.freeze(new SearchBoxItemResult(ai, isVersioningEnabled)))\r\n );\r\n\r\n this.foundItems = this._cacheItems;\r\n }\r\n\r\n public selectOption(options: SearchBoxItemResult[]): void {\r\n this.searchText = '';\r\n this._searchPattern = null;\r\n const [option] = options;\r\n const assetItem = option?.assetSource;\r\n\r\n if (!assetItem) {\r\n return;\r\n }\r\n\r\n if (assetItem instanceof AssetPanoramaGroup) {\r\n this.playerContext.goToPanorama(assetItem);\r\n }\r\n else if (assetItem instanceof AssetPanoramaVersion) {\r\n this.playerContext.goToPanoramaVersion(assetItem)\r\n }\r\n else if (assetItem instanceof AssetHotspot) {\r\n let panoramaId = assetItem.parentId;\r\n let coordinateInRadian = assetItem.coordinates[0];\r\n\r\n if (CoordinatesHelper.isSphericalCoordinates(coordinateInRadian)) {\r\n this.playerContext.goToPanoramaVersion(panoramaId, coordinateInRadian);\r\n }\r\n }\r\n\r\n this.foundItems = this._cacheItems;\r\n }\r\n\r\n public getItemImgPreview(item: AssetItem): string {\r\n let url: string;\r\n if (item instanceof AssetPanoramaGroup) {\r\n url = this.playerContext.getDefaultPanoramaVersion(item)?.file.links.preview;\r\n\r\n }\r\n else if (item instanceof AssetFile) {\r\n url = item.file.links.preview;\r\n }\r\n\r\n return url\r\n ? this._uriService.getAbsoluteUri(url)\r\n : '';\r\n }\r\n\r\n //TODO: Utiliser AssetHelper.getItemIcon quand les DTO Project et Explore seront fusionnés\r\n public getItemIcon(item: AssetItem): string {\r\n if (item instanceof AssetHotspot) {\r\n return item.content.icon;\r\n }\r\n if (item instanceof AssetPanoramaGroup) {\r\n return 'fa-light fa-book-atlas';\r\n }\r\n\r\n return 'fa-light fa-globe';\r\n }\r\n\r\n //TODO: Utiliser AssetHelper.getItemIconColor quand les DTO Project et Explore seront fusionnés\r\n public getItemIconColor(item: AssetItem): string {\r\n if (item instanceof AssetPanoramaGroup || item instanceof AssetPanoramaVersion) {\r\n return 'blue';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n public get placeholder(): string {\r\n return this.localizer(`${this.baseTranslationPath}.Search`);\r\n }\r\n\r\n public get isVersioningEnabled(): boolean {\r\n return this._items.some(g => g.children.length > 1);\r\n }\r\n\r\n public search(search: string): void {\r\n if (this.isSearching) {\r\n return;\r\n }\r\n\r\n this.isSearching = true;\r\n\r\n this._searchPattern = new RegExp(search, 'i');\r\n\r\n this.foundItems = Object.freeze(this._cacheItems.filter(\r\n i => this._itemMatchSearch(i)\r\n ));\r\n\r\n this.isSearching = false;\r\n }\r\n\r\n private _highlightingSearchResult(item: AssetItem): string {\r\n const label = item.name;\r\n\r\n if (!this.searchText) {\r\n return label;\r\n }\r\n\r\n return label.replace(\r\n this._searchPattern,\r\n match => (`${match}`)\r\n );\r\n }\r\n\r\n private _itemMatchSearch(item: SearchBoxItemResult): boolean {\r\n return this._searchPattern.test(item.assetSource.name)\r\n || item.children.some(c => this._itemMatchSearch(c));\r\n }\r\n\r\n @Watch('showMenu')\r\n private _onShowMenuChanged(newValue: Boolean, _oldValue: boolean) {\r\n if (newValue) {\r\n window.addEventListener('scroll', this._closeSearchBox, true);\r\n }\r\n else {\r\n window.removeEventListener('scroll', this._closeSearchBox, true);\r\n }\r\n }\r\n\r\n private _closeSearchBox(e: Event): void {\r\n if (e.target != this._dynamicScroller.$el) {\r\n this.showMenu = false;\r\n }\r\n }\r\n\r\n public onSearch: (search: string) => Promise\r\n = this.$debounce((search: string) => this.search(search), 500);\r\n\r\n public searchText: string = '';\r\n public showMenu: boolean = false;\r\n public isSearching: boolean = false;\r\n public foundItems: ReadonlyArray = [];\r\n public baseTranslationPath: string = 'Areas.Shared.VoSearchBox';\r\n\r\n public readonly AssetItemType: any = AssetItemType;\r\n\r\n @Ref('dynamicScroller')\r\n private readonly _dynamicScroller: Vue;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n @JsonProperty({ className: 'vo-search-box', name: 'items', type: Array })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('items', { type: Array, required: false, default: () => [] })\r\n public _items: Array;\r\n\r\n @JsonProperty({ className: 'vo-search-box', name: 'itemToIgnore', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('itemToIgnore', { type: Object, required: false, default: null })\r\n public _itemToIgnore: any;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n private readonly _uriService: IVisonUriService;\r\n\r\n private _cacheItems: ReadonlyArray;\r\n private _searchPattern: RegExp;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSearchBox.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSearchBox.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoSearchBox.vue?vue&type=template&id=6cf18b6b&\"\nimport script from \"./VoSearchBox.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoSearchBox.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Scrollparent = factory();\n }\n}(this, function () {\n var regex = /(auto|scroll)/;\n\n var parents = function (node, ps) {\n if (node.parentNode === null) { return ps; }\n\n return parents(node.parentNode, ps.concat([node]));\n };\n\n var style = function (node, prop) {\n return getComputedStyle(node, null).getPropertyValue(prop);\n };\n\n var overflow = function (node) {\n return style(node, \"overflow\") + style(node, \"overflow-y\") + style(node, \"overflow-x\");\n };\n\n var scroll = function (node) {\n return regex.test(overflow(node));\n };\n\n var scrollParent = function (node) {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return ;\n }\n\n var ps = parents(node.parentNode, []);\n\n for (var i = 0; i < ps.length; i += 1) {\n if (scroll(ps[i])) {\n return ps[i];\n }\n }\n\n return document.scrollingElement || document.documentElement;\n };\n\n return scrollParent;\n}));\n","/*!\n* svg.js - A lightweight library for manipulating and animating SVG.\n* @version 2.7.1\n* https://svgdotjs.github.io/\n*\n* @copyright Wout Fierens \n* @license MIT\n*\n* BUILT: Fri Nov 30 2018 10:01:55 GMT+0100 (GMT+01:00)\n*/;\n(function(root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(function(){\r\n return factory(root, root.document)\r\n })\r\n } else if (typeof exports === 'object') {\r\n module.exports = root.document ? factory(root, root.document) : function(w){ return factory(w, w.document) }\r\n } else {\r\n root.SVG = factory(root, root.document)\r\n }\r\n}(typeof window !== \"undefined\" ? window : this, function(window, document) {\r\n\r\n// Find global reference - uses 'this' by default when available,\r\n// falls back to 'window' otherwise (for bundlers like Webpack)\r\nvar globalRef = (typeof this !== \"undefined\") ? this : window;\r\n\r\n// The main wrapping element\r\nvar SVG = globalRef.SVG = function(element) {\r\n if (SVG.supported) {\r\n element = new SVG.Doc(element)\r\n\r\n if(!SVG.parser.draw)\r\n SVG.prepare()\r\n\r\n return element\r\n }\r\n}\r\n\r\n// Default namespaces\r\nSVG.ns = 'http://www.w3.org/2000/svg'\r\nSVG.xmlns = 'http://www.w3.org/2000/xmlns/'\r\nSVG.xlink = 'http://www.w3.org/1999/xlink'\r\nSVG.svgjs = 'http://svgjs.com/svgjs'\r\n\r\n// Svg support test\r\nSVG.supported = (function() {\r\n return !! document.createElementNS &&\r\n !! document.createElementNS(SVG.ns,'svg').createSVGRect\r\n})()\r\n\r\n// Don't bother to continue if SVG is not supported\r\nif (!SVG.supported) return false\r\n\r\n// Element id sequence\r\nSVG.did = 1000\r\n\r\n// Get next named element id\r\nSVG.eid = function(name) {\r\n return 'Svgjs' + capitalize(name) + (SVG.did++)\r\n}\r\n\r\n// Method for element creation\r\nSVG.create = function(name) {\r\n // create element\r\n var element = document.createElementNS(this.ns, name)\r\n\r\n // apply unique id\r\n element.setAttribute('id', this.eid(name))\r\n\r\n return element\r\n}\r\n\r\n// Method for extending objects\r\nSVG.extend = function() {\r\n var modules, methods, key, i\r\n\r\n // Get list of modules\r\n modules = [].slice.call(arguments)\r\n\r\n // Get object with extensions\r\n methods = modules.pop()\r\n\r\n for (i = modules.length - 1; i >= 0; i--)\r\n if (modules[i])\r\n for (key in methods)\r\n modules[i].prototype[key] = methods[key]\r\n\r\n // Make sure SVG.Set inherits any newly added methods\r\n if (SVG.Set && SVG.Set.inherit)\r\n SVG.Set.inherit()\r\n}\r\n\r\n// Invent new element\r\nSVG.invent = function(config) {\r\n // Create element initializer\r\n var initializer = typeof config.create == 'function' ?\r\n config.create :\r\n function() {\r\n this.constructor.call(this, SVG.create(config.create))\r\n }\r\n\r\n // Inherit prototype\r\n if (config.inherit)\r\n initializer.prototype = new config.inherit\r\n\r\n // Extend with methods\r\n if (config.extend)\r\n SVG.extend(initializer, config.extend)\r\n\r\n // Attach construct method to parent\r\n if (config.construct)\r\n SVG.extend(config.parent || SVG.Container, config.construct)\r\n\r\n return initializer\r\n}\r\n\r\n// Adopt existing svg elements\r\nSVG.adopt = function(node) {\r\n // check for presence of node\r\n if (!node) return null\r\n\r\n // make sure a node isn't already adopted\r\n if (node.instance) return node.instance\r\n\r\n // initialize variables\r\n var element\r\n\r\n // adopt with element-specific settings\r\n if (node.nodeName == 'svg')\r\n element = node.parentNode instanceof window.SVGElement ? new SVG.Nested : new SVG.Doc\r\n else if (node.nodeName == 'linearGradient')\r\n element = new SVG.Gradient('linear')\r\n else if (node.nodeName == 'radialGradient')\r\n element = new SVG.Gradient('radial')\r\n else if (SVG[capitalize(node.nodeName)])\r\n element = new SVG[capitalize(node.nodeName)]\r\n else\r\n element = new SVG.Element(node)\r\n\r\n // ensure references\r\n element.type = node.nodeName\r\n element.node = node\r\n node.instance = element\r\n\r\n // SVG.Class specific preparations\r\n if (element instanceof SVG.Doc)\r\n element.namespace().defs()\r\n\r\n // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\r\n element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {})\r\n\r\n return element\r\n}\r\n\r\n// Initialize parsing element\r\nSVG.prepare = function() {\r\n // Select document body and create invisible svg element\r\n var body = document.getElementsByTagName('body')[0]\r\n , draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0)\r\n\r\n // Create parser object\r\n SVG.parser = {\r\n body: body || document.documentElement\r\n , draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').attr('focusable', 'false').node\r\n , poly: draw.polyline().node\r\n , path: draw.path().node\r\n , native: SVG.create('svg')\r\n }\r\n}\r\n\r\nSVG.parser = {\r\n native: SVG.create('svg')\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n if(!SVG.parser.draw)\r\n SVG.prepare()\r\n}, false)\r\n\n// Storage for regular expressions\r\nSVG.regex = {\r\n // Parse unit value\r\n numberAndUnit: /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i\r\n\r\n // Parse hex value\r\n, hex: /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i\r\n\r\n // Parse rgb value\r\n, rgb: /rgb\\((\\d+),(\\d+),(\\d+)\\)/\r\n\r\n // Parse reference id\r\n, reference: /#([a-z0-9\\-_]+)/i\r\n\r\n // splits a transformation chain\r\n, transforms: /\\)\\s*,?\\s*/\r\n\r\n // Whitespace\r\n, whitespace: /\\s/g\r\n\r\n // Test hex value\r\n, isHex: /^#[a-f0-9]{3,6}$/i\r\n\r\n // Test rgb value\r\n, isRgb: /^rgb\\(/\r\n\r\n // Test css declaration\r\n, isCss: /[^:]+:[^;]+;?/\r\n\r\n // Test for blank string\r\n, isBlank: /^(\\s+)?$/\r\n\r\n // Test for numeric string\r\n, isNumber: /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i\r\n\r\n // Test for percent value\r\n, isPercent: /^-?[\\d\\.]+%$/\r\n\r\n // Test for image url\r\n, isImage: /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i\r\n\r\n // split at whitespace and comma\r\n, delimiter: /[\\s,]+/\r\n\r\n // The following regex are used to parse the d attribute of a path\r\n\r\n // Matches all hyphens which are not after an exponent\r\n, hyphen: /([^e])\\-/gi\r\n\r\n // Replaces and tests for all path letters\r\n, pathLetters: /[MLHVCSQTAZ]/gi\r\n\r\n // yes we need this one, too\r\n, isPathLetter: /[MLHVCSQTAZ]/i\r\n\r\n // matches 0.154.23.45\r\n, numbersWithDots: /((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi\r\n\r\n // matches .\r\n, dots: /\\./g\r\n}\r\n\nSVG.utils = {\r\n // Map function\r\n map: function(array, block) {\r\n var i\r\n , il = array.length\r\n , result = []\r\n\r\n for (i = 0; i < il; i++)\r\n result.push(block(array[i]))\r\n\r\n return result\r\n }\r\n\r\n // Filter function\r\n, filter: function(array, block) {\r\n var i\r\n , il = array.length\r\n , result = []\r\n\r\n for (i = 0; i < il; i++)\r\n if (block(array[i]))\r\n result.push(array[i])\r\n\r\n return result\r\n }\r\n\r\n // Degrees to radians\r\n, radians: function(d) {\r\n return d % 360 * Math.PI / 180\r\n }\r\n\r\n // Radians to degrees\r\n, degrees: function(r) {\r\n return r * 180 / Math.PI % 360\r\n }\r\n\r\n, filterSVGElements: function(nodes) {\r\n return this.filter( nodes, function(el) { return el instanceof window.SVGElement })\r\n }\r\n\r\n}\n\r\nSVG.defaults = {\r\n // Default attribute values\r\n attrs: {\r\n // fill and stroke\r\n 'fill-opacity': 1\r\n , 'stroke-opacity': 1\r\n , 'stroke-width': 0\r\n , 'stroke-linejoin': 'miter'\r\n , 'stroke-linecap': 'butt'\r\n , fill: '#000000'\r\n , stroke: '#000000'\r\n , opacity: 1\r\n // position\r\n , x: 0\r\n , y: 0\r\n , cx: 0\r\n , cy: 0\r\n // size\r\n , width: 0\r\n , height: 0\r\n // radius\r\n , r: 0\r\n , rx: 0\r\n , ry: 0\r\n // gradient\r\n , offset: 0\r\n , 'stop-opacity': 1\r\n , 'stop-color': '#000000'\r\n // text\r\n , 'font-size': 16\r\n , 'font-family': 'Helvetica, Arial, sans-serif'\r\n , 'text-anchor': 'start'\r\n }\r\n\r\n}\n// Module for color convertions\r\nSVG.Color = function(color) {\r\n var match\r\n\r\n // initialize defaults\r\n this.r = 0\r\n this.g = 0\r\n this.b = 0\r\n\r\n if(!color) return\r\n\r\n // parse color\r\n if (typeof color === 'string') {\r\n if (SVG.regex.isRgb.test(color)) {\r\n // get rgb values\r\n match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace,''))\r\n\r\n // parse numeric values\r\n this.r = parseInt(match[1])\r\n this.g = parseInt(match[2])\r\n this.b = parseInt(match[3])\r\n\r\n } else if (SVG.regex.isHex.test(color)) {\r\n // get hex values\r\n match = SVG.regex.hex.exec(fullHex(color))\r\n\r\n // parse numeric values\r\n this.r = parseInt(match[1], 16)\r\n this.g = parseInt(match[2], 16)\r\n this.b = parseInt(match[3], 16)\r\n\r\n }\r\n\r\n } else if (typeof color === 'object') {\r\n this.r = color.r\r\n this.g = color.g\r\n this.b = color.b\r\n\r\n }\r\n\r\n}\r\n\r\nSVG.extend(SVG.Color, {\r\n // Default to hex conversion\r\n toString: function() {\r\n return this.toHex()\r\n }\r\n // Build hex value\r\n, toHex: function() {\r\n return '#'\r\n + compToHex(this.r)\r\n + compToHex(this.g)\r\n + compToHex(this.b)\r\n }\r\n // Build rgb value\r\n, toRgb: function() {\r\n return 'rgb(' + [this.r, this.g, this.b].join() + ')'\r\n }\r\n // Calculate true brightness\r\n, brightness: function() {\r\n return (this.r / 255 * 0.30)\r\n + (this.g / 255 * 0.59)\r\n + (this.b / 255 * 0.11)\r\n }\r\n // Make color morphable\r\n, morph: function(color) {\r\n this.destination = new SVG.Color(color)\r\n\r\n return this\r\n }\r\n // Get morphed color at given position\r\n, at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // normalise pos\r\n pos = pos < 0 ? 0 : pos > 1 ? 1 : pos\r\n\r\n // generate morphed color\r\n return new SVG.Color({\r\n r: ~~(this.r + (this.destination.r - this.r) * pos)\r\n , g: ~~(this.g + (this.destination.g - this.g) * pos)\r\n , b: ~~(this.b + (this.destination.b - this.b) * pos)\r\n })\r\n }\r\n\r\n})\r\n\r\n// Testers\r\n\r\n// Test if given value is a color string\r\nSVG.Color.test = function(color) {\r\n color += ''\r\n return SVG.regex.isHex.test(color)\r\n || SVG.regex.isRgb.test(color)\r\n}\r\n\r\n// Test if given value is a rgb object\r\nSVG.Color.isRgb = function(color) {\r\n return color && typeof color.r == 'number'\r\n && typeof color.g == 'number'\r\n && typeof color.b == 'number'\r\n}\r\n\r\n// Test if given value is a color\r\nSVG.Color.isColor = function(color) {\r\n return SVG.Color.isRgb(color) || SVG.Color.test(color)\r\n}\n// Module for array conversion\r\nSVG.Array = function(array, fallback) {\r\n array = (array || []).valueOf()\r\n\r\n // if array is empty and fallback is provided, use fallback\r\n if (array.length == 0 && fallback)\r\n array = fallback.valueOf()\r\n\r\n // parse array\r\n this.value = this.parse(array)\r\n}\r\n\r\nSVG.extend(SVG.Array, {\r\n // Make array morphable\r\n morph: function(array) {\r\n this.destination = this.parse(array)\r\n\r\n // normalize length of arrays\r\n if (this.value.length != this.destination.length) {\r\n var lastValue = this.value[this.value.length - 1]\r\n , lastDestination = this.destination[this.destination.length - 1]\r\n\r\n while(this.value.length > this.destination.length)\r\n this.destination.push(lastDestination)\r\n while(this.value.length < this.destination.length)\r\n this.value.push(lastValue)\r\n }\r\n\r\n return this\r\n }\r\n // Clean up any duplicate points\r\n, settle: function() {\r\n // find all unique values\r\n for (var i = 0, il = this.value.length, seen = []; i < il; i++)\r\n if (seen.indexOf(this.value[i]) == -1)\r\n seen.push(this.value[i])\r\n\r\n // set new value\r\n return this.value = seen\r\n }\r\n // Get morphed array at given position\r\n, at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // generate morphed array\r\n for (var i = 0, il = this.value.length, array = []; i < il; i++)\r\n array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos)\r\n\r\n return new SVG.Array(array)\r\n }\r\n // Convert array to string\r\n, toString: function() {\r\n return this.value.join(' ')\r\n }\r\n // Real value\r\n, valueOf: function() {\r\n return this.value\r\n }\r\n // Parse whitespace separated string\r\n, parse: function(array) {\r\n array = array.valueOf()\r\n\r\n // if already is an array, no need to parse it\r\n if (Array.isArray(array)) return array\r\n\r\n return this.split(array)\r\n }\r\n // Strip unnecessary whitespace\r\n, split: function(string) {\r\n return string.trim().split(SVG.regex.delimiter).map(parseFloat)\r\n }\r\n // Reverse array\r\n, reverse: function() {\r\n this.value.reverse()\r\n\r\n return this\r\n }\r\n, clone: function() {\r\n var clone = new this.constructor()\r\n clone.value = array_clone(this.value)\r\n return clone\r\n }\r\n})\n// Poly points array\r\nSVG.PointArray = function(array, fallback) {\r\n SVG.Array.call(this, array, fallback || [[0,0]])\r\n}\r\n\r\n// Inherit from SVG.Array\r\nSVG.PointArray.prototype = new SVG.Array\r\nSVG.PointArray.prototype.constructor = SVG.PointArray\r\n\r\nSVG.extend(SVG.PointArray, {\r\n // Convert array to string\r\n toString: function() {\r\n // convert to a poly point string\r\n for (var i = 0, il = this.value.length, array = []; i < il; i++)\r\n array.push(this.value[i].join(','))\r\n\r\n return array.join(' ')\r\n }\r\n // Convert array to line object\r\n, toLine: function() {\r\n return {\r\n x1: this.value[0][0]\r\n , y1: this.value[0][1]\r\n , x2: this.value[1][0]\r\n , y2: this.value[1][1]\r\n }\r\n }\r\n // Get morphed array at given position\r\n, at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // generate morphed point string\r\n for (var i = 0, il = this.value.length, array = []; i < il; i++)\r\n array.push([\r\n this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos\r\n , this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos\r\n ])\r\n\r\n return new SVG.PointArray(array)\r\n }\r\n // Parse point string and flat array\r\n, parse: function(array) {\r\n var points = []\r\n\r\n array = array.valueOf()\r\n\r\n // if it is an array\r\n if (Array.isArray(array)) {\r\n // and it is not flat, there is no need to parse it\r\n if(Array.isArray(array[0])) {\r\n // make sure to use a clone\r\n return array.map(function (el) { return el.slice() })\r\n } else if (array[0].x != null){\r\n // allow point objects to be passed\r\n return array.map(function (el) { return [el.x, el.y] })\r\n }\r\n } else { // Else, it is considered as a string\r\n // parse points\r\n array = array.trim().split(SVG.regex.delimiter).map(parseFloat)\r\n }\r\n\r\n // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\r\n // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\r\n if (array.length % 2 !== 0) array.pop()\r\n\r\n // wrap points in two-tuples and parse points as floats\r\n for(var i = 0, len = array.length; i < len; i = i + 2)\r\n points.push([ array[i], array[i+1] ])\r\n\r\n return points\r\n }\r\n // Move point string\r\n, move: function(x, y) {\r\n var box = this.bbox()\r\n\r\n // get relative offset\r\n x -= box.x\r\n y -= box.y\r\n\r\n // move every point\r\n if (!isNaN(x) && !isNaN(y))\r\n for (var i = this.value.length - 1; i >= 0; i--)\r\n this.value[i] = [this.value[i][0] + x, this.value[i][1] + y]\r\n\r\n return this\r\n }\r\n // Resize poly string\r\n, size: function(width, height) {\r\n var i, box = this.bbox()\r\n\r\n // recalculate position of all points according to new size\r\n for (i = this.value.length - 1; i >= 0; i--) {\r\n if(box.width) this.value[i][0] = ((this.value[i][0] - box.x) * width) / box.width + box.x\r\n if(box.height) this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y\r\n }\r\n\r\n return this\r\n }\r\n // Get bounding box of points\r\n, bbox: function() {\r\n SVG.parser.poly.setAttribute('points', this.toString())\r\n\r\n return SVG.parser.poly.getBBox()\r\n }\r\n})\r\n\nvar pathHandlers = {\r\n M: function(c, p, p0) {\r\n p.x = p0.x = c[0]\r\n p.y = p0.y = c[1]\r\n\r\n return ['M', p.x, p.y]\r\n },\r\n L: function(c, p) {\r\n p.x = c[0]\r\n p.y = c[1]\r\n return ['L', c[0], c[1]]\r\n },\r\n H: function(c, p) {\r\n p.x = c[0]\r\n return ['H', c[0]]\r\n },\r\n V: function(c, p) {\r\n p.y = c[0]\r\n return ['V', c[0]]\r\n },\r\n C: function(c, p) {\r\n p.x = c[4]\r\n p.y = c[5]\r\n return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]\r\n },\r\n S: function(c, p) {\r\n p.x = c[2]\r\n p.y = c[3]\r\n return ['S', c[0], c[1], c[2], c[3]]\r\n },\r\n Q: function(c, p) {\r\n p.x = c[2]\r\n p.y = c[3]\r\n return ['Q', c[0], c[1], c[2], c[3]]\r\n },\r\n T: function(c, p) {\r\n p.x = c[0]\r\n p.y = c[1]\r\n return ['T', c[0], c[1]]\r\n },\r\n Z: function(c, p, p0) {\r\n p.x = p0.x\r\n p.y = p0.y\r\n return ['Z']\r\n },\r\n A: function(c, p) {\r\n p.x = c[5]\r\n p.y = c[6]\r\n return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]\r\n }\r\n}\r\n\r\nvar mlhvqtcsa = 'mlhvqtcsaz'.split('')\r\n\r\nfor(var i = 0, il = mlhvqtcsa.length; i < il; ++i){\r\n pathHandlers[mlhvqtcsa[i]] = (function(i){\r\n return function(c, p, p0) {\r\n if(i == 'H') c[0] = c[0] + p.x\r\n else if(i == 'V') c[0] = c[0] + p.y\r\n else if(i == 'A'){\r\n c[5] = c[5] + p.x,\r\n c[6] = c[6] + p.y\r\n }\r\n else\r\n for(var j = 0, jl = c.length; j < jl; ++j) {\r\n c[j] = c[j] + (j%2 ? p.y : p.x)\r\n }\r\n\r\n return pathHandlers[i](c, p, p0)\r\n }\r\n })(mlhvqtcsa[i].toUpperCase())\r\n}\r\n\r\n// Path points array\r\nSVG.PathArray = function(array, fallback) {\r\n SVG.Array.call(this, array, fallback || [['M', 0, 0]])\r\n}\r\n\r\n// Inherit from SVG.Array\r\nSVG.PathArray.prototype = new SVG.Array\r\nSVG.PathArray.prototype.constructor = SVG.PathArray\r\n\r\nSVG.extend(SVG.PathArray, {\r\n // Convert array to string\r\n toString: function() {\r\n return arrayToString(this.value)\r\n }\r\n // Move path string\r\n, move: function(x, y) {\r\n // get bounding box of current situation\r\n var box = this.bbox()\r\n\r\n // get relative offset\r\n x -= box.x\r\n y -= box.y\r\n\r\n if (!isNaN(x) && !isNaN(y)) {\r\n // move every point\r\n for (var l, i = this.value.length - 1; i >= 0; i--) {\r\n l = this.value[i][0]\r\n\r\n if (l == 'M' || l == 'L' || l == 'T') {\r\n this.value[i][1] += x\r\n this.value[i][2] += y\r\n\r\n } else if (l == 'H') {\r\n this.value[i][1] += x\r\n\r\n } else if (l == 'V') {\r\n this.value[i][1] += y\r\n\r\n } else if (l == 'C' || l == 'S' || l == 'Q') {\r\n this.value[i][1] += x\r\n this.value[i][2] += y\r\n this.value[i][3] += x\r\n this.value[i][4] += y\r\n\r\n if (l == 'C') {\r\n this.value[i][5] += x\r\n this.value[i][6] += y\r\n }\r\n\r\n } else if (l == 'A') {\r\n this.value[i][6] += x\r\n this.value[i][7] += y\r\n }\r\n\r\n }\r\n }\r\n\r\n return this\r\n }\r\n // Resize path string\r\n, size: function(width, height) {\r\n // get bounding box of current situation\r\n var i, l, box = this.bbox()\r\n\r\n // recalculate position of all points according to new size\r\n for (i = this.value.length - 1; i >= 0; i--) {\r\n l = this.value[i][0]\r\n\r\n if (l == 'M' || l == 'L' || l == 'T') {\r\n this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r\n this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y\r\n\r\n } else if (l == 'H') {\r\n this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r\n\r\n } else if (l == 'V') {\r\n this.value[i][1] = ((this.value[i][1] - box.y) * height) / box.height + box.y\r\n\r\n } else if (l == 'C' || l == 'S' || l == 'Q') {\r\n this.value[i][1] = ((this.value[i][1] - box.x) * width) / box.width + box.x\r\n this.value[i][2] = ((this.value[i][2] - box.y) * height) / box.height + box.y\r\n this.value[i][3] = ((this.value[i][3] - box.x) * width) / box.width + box.x\r\n this.value[i][4] = ((this.value[i][4] - box.y) * height) / box.height + box.y\r\n\r\n if (l == 'C') {\r\n this.value[i][5] = ((this.value[i][5] - box.x) * width) / box.width + box.x\r\n this.value[i][6] = ((this.value[i][6] - box.y) * height) / box.height + box.y\r\n }\r\n\r\n } else if (l == 'A') {\r\n // resize radii\r\n this.value[i][1] = (this.value[i][1] * width) / box.width\r\n this.value[i][2] = (this.value[i][2] * height) / box.height\r\n\r\n // move position values\r\n this.value[i][6] = ((this.value[i][6] - box.x) * width) / box.width + box.x\r\n this.value[i][7] = ((this.value[i][7] - box.y) * height) / box.height + box.y\r\n }\r\n\r\n }\r\n\r\n return this\r\n }\r\n // Test if the passed path array use the same path data commands as this path array\r\n, equalCommands: function(pathArray) {\r\n var i, il, equalCommands\r\n\r\n pathArray = new SVG.PathArray(pathArray)\r\n\r\n equalCommands = this.value.length === pathArray.value.length\r\n for(i = 0, il = this.value.length; equalCommands && i < il; i++) {\r\n equalCommands = this.value[i][0] === pathArray.value[i][0]\r\n }\r\n\r\n return equalCommands\r\n }\r\n // Make path array morphable\r\n, morph: function(pathArray) {\r\n pathArray = new SVG.PathArray(pathArray)\r\n\r\n if(this.equalCommands(pathArray)) {\r\n this.destination = pathArray\r\n } else {\r\n this.destination = null\r\n }\r\n\r\n return this\r\n }\r\n // Get morphed path array at given position\r\n, at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n var sourceArray = this.value\r\n , destinationArray = this.destination.value\r\n , array = [], pathArray = new SVG.PathArray()\r\n , i, il, j, jl\r\n\r\n // Animate has specified in the SVG spec\r\n // See: https://www.w3.org/TR/SVG11/paths.html#PathElement\r\n for (i = 0, il = sourceArray.length; i < il; i++) {\r\n array[i] = [sourceArray[i][0]]\r\n for(j = 1, jl = sourceArray[i].length; j < jl; j++) {\r\n array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos\r\n }\r\n // For the two flags of the elliptical arc command, the SVG spec say:\r\n // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true\r\n // Elliptical arc command as an array followed by corresponding indexes:\r\n // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\r\n // 0 1 2 3 4 5 6 7\r\n if(array[i][0] === 'A') {\r\n array[i][4] = +(array[i][4] != 0)\r\n array[i][5] = +(array[i][5] != 0)\r\n }\r\n }\r\n\r\n // Directly modify the value of a path array, this is done this way for performance\r\n pathArray.value = array\r\n return pathArray\r\n }\r\n // Absolutize and parse path to array\r\n, parse: function(array) {\r\n // if it's already a patharray, no need to parse it\r\n if (array instanceof SVG.PathArray) return array.valueOf()\r\n\r\n // prepare for parsing\r\n var i, x0, y0, s, seg, arr\r\n , x = 0\r\n , y = 0\r\n , paramCnt = { 'M':2, 'L':2, 'H':1, 'V':1, 'C':6, 'S':4, 'Q':4, 'T':2, 'A':7, 'Z':0 }\r\n\r\n if(typeof array == 'string'){\r\n\r\n array = array\r\n .replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123\r\n .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers\r\n .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen\r\n .trim() // trim\r\n .split(SVG.regex.delimiter) // split into array\r\n\r\n }else{\r\n array = array.reduce(function(prev, curr){\r\n return [].concat.call(prev, curr)\r\n }, [])\r\n }\r\n\r\n // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]\r\n var arr = []\r\n , p = new SVG.Point()\r\n , p0 = new SVG.Point()\r\n , index = 0\r\n , len = array.length\r\n\r\n do{\r\n // Test if we have a path letter\r\n if(SVG.regex.isPathLetter.test(array[index])){\r\n s = array[index]\r\n ++index\r\n // If last letter was a move command and we got no new, it defaults to [L]ine\r\n }else if(s == 'M'){\r\n s = 'L'\r\n }else if(s == 'm'){\r\n s = 'l'\r\n }\r\n\r\n arr.push(pathHandlers[s].call(null,\r\n array.slice(index, (index = index + paramCnt[s.toUpperCase()])).map(parseFloat),\r\n p, p0\r\n )\r\n )\r\n\r\n }while(len > index)\r\n\r\n return arr\r\n\r\n }\r\n // Get bounding box of path\r\n, bbox: function() {\r\n SVG.parser.path.setAttribute('d', this.toString())\r\n\r\n return SVG.parser.path.getBBox()\r\n }\r\n\r\n})\r\n\n// Module for unit convertions\r\nSVG.Number = SVG.invent({\r\n // Initialize\r\n create: function(value, unit) {\r\n // initialize defaults\r\n this.value = 0\r\n this.unit = unit || ''\r\n\r\n // parse value\r\n if (typeof value === 'number') {\r\n // ensure a valid numeric value\r\n this.value = isNaN(value) ? 0 : !isFinite(value) ? (value < 0 ? -3.4e+38 : +3.4e+38) : value\r\n\r\n } else if (typeof value === 'string') {\r\n unit = value.match(SVG.regex.numberAndUnit)\r\n\r\n if (unit) {\r\n // make value numeric\r\n this.value = parseFloat(unit[1])\r\n\r\n // normalize\r\n if (unit[5] == '%')\r\n this.value /= 100\r\n else if (unit[5] == 's')\r\n this.value *= 1000\r\n\r\n // store unit\r\n this.unit = unit[5]\r\n }\r\n\r\n } else {\r\n if (value instanceof SVG.Number) {\r\n this.value = value.valueOf()\r\n this.unit = value.unit\r\n }\r\n }\r\n\r\n }\r\n // Add methods\r\n, extend: {\r\n // Stringalize\r\n toString: function() {\r\n return (\r\n this.unit == '%' ?\r\n ~~(this.value * 1e8) / 1e6:\r\n this.unit == 's' ?\r\n this.value / 1e3 :\r\n this.value\r\n ) + this.unit\r\n }\r\n , toJSON: function() {\r\n return this.toString()\r\n }\r\n , // Convert to primitive\r\n valueOf: function() {\r\n return this.value\r\n }\r\n // Add number\r\n , plus: function(number) {\r\n number = new SVG.Number(number)\r\n return new SVG.Number(this + number, this.unit || number.unit)\r\n }\r\n // Subtract number\r\n , minus: function(number) {\r\n number = new SVG.Number(number)\r\n return new SVG.Number(this - number, this.unit || number.unit)\r\n }\r\n // Multiply number\r\n , times: function(number) {\r\n number = new SVG.Number(number)\r\n return new SVG.Number(this * number, this.unit || number.unit)\r\n }\r\n // Divide number\r\n , divide: function(number) {\r\n number = new SVG.Number(number)\r\n return new SVG.Number(this / number, this.unit || number.unit)\r\n }\r\n // Convert to different unit\r\n , to: function(unit) {\r\n var number = new SVG.Number(this)\r\n\r\n if (typeof unit === 'string')\r\n number.unit = unit\r\n\r\n return number\r\n }\r\n // Make number morphable\r\n , morph: function(number) {\r\n this.destination = new SVG.Number(number)\r\n\r\n if(number.relative) {\r\n this.destination.value += this.value\r\n }\r\n\r\n return this\r\n }\r\n // Get morphed number at given position\r\n , at: function(pos) {\r\n // Make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // Generate new morphed number\r\n return new SVG.Number(this.destination)\r\n .minus(this)\r\n .times(pos)\r\n .plus(this)\r\n }\r\n\r\n }\r\n})\r\n\n\r\nSVG.Element = SVG.invent({\r\n // Initialize node\r\n create: function(node) {\r\n // make stroke value accessible dynamically\r\n this._stroke = SVG.defaults.attrs.stroke\r\n this._event = null\r\n this._events = {}\r\n\r\n // initialize data object\r\n this.dom = {}\r\n\r\n // create circular reference\r\n if (this.node = node) {\r\n this.type = node.nodeName\r\n this.node.instance = this\r\n this._events = node._events || {}\r\n\r\n // store current attribute value\r\n this._stroke = node.getAttribute('stroke') || this._stroke\r\n }\r\n }\r\n\r\n // Add class methods\r\n, extend: {\r\n // Move over x-axis\r\n x: function(x) {\r\n return this.attr('x', x)\r\n }\r\n // Move over y-axis\r\n , y: function(y) {\r\n return this.attr('y', y)\r\n }\r\n // Move by center over x-axis\r\n , cx: function(x) {\r\n return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2)\r\n }\r\n // Move by center over y-axis\r\n , cy: function(y) {\r\n return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2)\r\n }\r\n // Move element to given x and y values\r\n , move: function(x, y) {\r\n return this.x(x).y(y)\r\n }\r\n // Move element by its center\r\n , center: function(x, y) {\r\n return this.cx(x).cy(y)\r\n }\r\n // Set width of element\r\n , width: function(width) {\r\n return this.attr('width', width)\r\n }\r\n // Set height of element\r\n , height: function(height) {\r\n return this.attr('height', height)\r\n }\r\n // Set element size to given width and height\r\n , size: function(width, height) {\r\n var p = proportionalSize(this, width, height)\r\n\r\n return this\r\n .width(new SVG.Number(p.width))\r\n .height(new SVG.Number(p.height))\r\n }\r\n // Clone element\r\n , clone: function(parent) {\r\n // write dom data to the dom so the clone can pickup the data\r\n this.writeDataToDom()\r\n\r\n // clone element and assign new id\r\n var clone = assignNewId(this.node.cloneNode(true))\r\n\r\n // insert the clone in the given parent or after myself\r\n if(parent) parent.add(clone)\r\n else this.after(clone)\r\n\r\n return clone\r\n }\r\n // Remove element\r\n , remove: function() {\r\n if (this.parent())\r\n this.parent().removeElement(this)\r\n\r\n return this\r\n }\r\n // Replace element\r\n , replace: function(element) {\r\n this.after(element).remove()\r\n\r\n return element\r\n }\r\n // Add element to given container and return self\r\n , addTo: function(parent) {\r\n return parent.put(this)\r\n }\r\n // Add element to given container and return container\r\n , putIn: function(parent) {\r\n return parent.add(this)\r\n }\r\n // Get / set id\r\n , id: function(id) {\r\n return this.attr('id', id)\r\n }\r\n // Checks whether the given point inside the bounding box of the element\r\n , inside: function(x, y) {\r\n var box = this.bbox()\r\n\r\n return x > box.x\r\n && y > box.y\r\n && x < box.x + box.width\r\n && y < box.y + box.height\r\n }\r\n // Show element\r\n , show: function() {\r\n return this.style('display', '')\r\n }\r\n // Hide element\r\n , hide: function() {\r\n return this.style('display', 'none')\r\n }\r\n // Is element visible?\r\n , visible: function() {\r\n return this.style('display') != 'none'\r\n }\r\n // Return id on string conversion\r\n , toString: function() {\r\n return this.attr('id')\r\n }\r\n // Return array of classes on the node\r\n , classes: function() {\r\n var attr = this.attr('class')\r\n\r\n return attr == null ? [] : attr.trim().split(SVG.regex.delimiter)\r\n }\r\n // Return true if class exists on the node, false otherwise\r\n , hasClass: function(name) {\r\n return this.classes().indexOf(name) != -1\r\n }\r\n // Add class to the node\r\n , addClass: function(name) {\r\n if (!this.hasClass(name)) {\r\n var array = this.classes()\r\n array.push(name)\r\n this.attr('class', array.join(' '))\r\n }\r\n\r\n return this\r\n }\r\n // Remove class from the node\r\n , removeClass: function(name) {\r\n if (this.hasClass(name)) {\r\n this.attr('class', this.classes().filter(function(c) {\r\n return c != name\r\n }).join(' '))\r\n }\r\n\r\n return this\r\n }\r\n // Toggle the presence of a class on the node\r\n , toggleClass: function(name) {\r\n return this.hasClass(name) ? this.removeClass(name) : this.addClass(name)\r\n }\r\n // Get referenced element form attribute value\r\n , reference: function(attr) {\r\n return SVG.get(this.attr(attr))\r\n }\r\n // Returns the parent element instance\r\n , parent: function(type) {\r\n var parent = this\r\n\r\n // check for parent\r\n if(!parent.node.parentNode) return null\r\n\r\n // get parent element\r\n parent = SVG.adopt(parent.node.parentNode)\r\n\r\n if(!type) return parent\r\n\r\n // loop trough ancestors if type is given\r\n while(parent && parent.node instanceof window.SVGElement){\r\n if(typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent\r\n if(!parent.node.parentNode || parent.node.parentNode.nodeName == '#document' || parent.node.parentNode.nodeName == '#document-fragment') return null // #759, #720\r\n parent = SVG.adopt(parent.node.parentNode)\r\n }\r\n }\r\n // Get parent document\r\n , doc: function() {\r\n return this instanceof SVG.Doc ? this : this.parent(SVG.Doc)\r\n }\r\n // return array of all ancestors of given type up to the root svg\r\n , parents: function(type) {\r\n var parents = [], parent = this\r\n\r\n do{\r\n parent = parent.parent(type)\r\n if(!parent || !parent.node) break\r\n\r\n parents.push(parent)\r\n } while(parent.parent)\r\n\r\n return parents\r\n }\r\n // matches the element vs a css selector\r\n , matches: function(selector){\r\n return matches(this.node, selector)\r\n }\r\n // Returns the svg node to call native svg methods on it\r\n , native: function() {\r\n return this.node\r\n }\r\n // Import raw svg\r\n , svg: function(svg) {\r\n // create temporary holder\r\n var well = document.createElement('svg')\r\n\r\n // act as a setter if svg is given\r\n if (svg && this instanceof SVG.Parent) {\r\n // dump raw svg\r\n well.innerHTML = '' + svg.replace(/\\n/, '').replace(/<([\\w:-]+)([^<]+?)\\/>/g, '<$1$2>') + ''\r\n\r\n // transplant nodes\r\n for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++)\r\n this.node.appendChild(well.firstChild.firstChild)\r\n\r\n // otherwise act as a getter\r\n } else {\r\n // create a wrapping svg element in case of partial content\r\n well.appendChild(svg = document.createElement('svg'))\r\n\r\n // write svgjs data to the dom\r\n this.writeDataToDom()\r\n\r\n // insert a copy of this node\r\n svg.appendChild(this.node.cloneNode(true))\r\n\r\n // return target element\r\n return well.innerHTML.replace(/^/, '').replace(/<\\/svg>$/, '')\r\n }\r\n\r\n return this\r\n }\r\n // write svgjs data to the dom\r\n , writeDataToDom: function() {\r\n\r\n // dump variables recursively\r\n if(this.each || this.lines){\r\n var fn = this.each ? this : this.lines();\r\n fn.each(function(){\r\n this.writeDataToDom()\r\n })\r\n }\r\n\r\n // remove previously set data\r\n this.node.removeAttribute('svgjs:data')\r\n\r\n if(Object.keys(this.dom).length)\r\n this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)) // see #428\r\n\r\n return this\r\n }\r\n // set given data to the elements data property\r\n , setData: function(o){\r\n this.dom = o\r\n return this\r\n }\r\n , is: function(obj){\r\n return is(this, obj)\r\n }\r\n }\r\n})\r\n\nSVG.easing = {\r\n '-': function(pos){return pos}\r\n, '<>':function(pos){return -Math.cos(pos * Math.PI) / 2 + 0.5}\r\n, '>': function(pos){return Math.sin(pos * Math.PI / 2)}\r\n, '<': function(pos){return -Math.cos(pos * Math.PI / 2) + 1}\r\n}\r\n\r\nSVG.morph = function(pos){\r\n return function(from, to) {\r\n return new SVG.MorphObj(from, to).at(pos)\r\n }\r\n}\r\n\r\nSVG.Situation = SVG.invent({\r\n\r\n create: function(o){\r\n this.init = false\r\n this.reversed = false\r\n this.reversing = false\r\n\r\n this.duration = new SVG.Number(o.duration).valueOf()\r\n this.delay = new SVG.Number(o.delay).valueOf()\r\n\r\n this.start = +new Date() + this.delay\r\n this.finish = this.start + this.duration\r\n this.ease = o.ease\r\n\r\n // this.loop is incremented from 0 to this.loops\r\n // it is also incremented when in an infinite loop (when this.loops is true)\r\n this.loop = 0\r\n this.loops = false\r\n\r\n this.animations = {\r\n // functionToCall: [list of morphable objects]\r\n // e.g. move: [SVG.Number, SVG.Number]\r\n }\r\n\r\n this.attrs = {\r\n // holds all attributes which are not represented from a function svg.js provides\r\n // e.g. someAttr: SVG.Number\r\n }\r\n\r\n this.styles = {\r\n // holds all styles which should be animated\r\n // e.g. fill-color: SVG.Color\r\n }\r\n\r\n this.transforms = [\r\n // holds all transformations as transformation objects\r\n // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix]\r\n ]\r\n\r\n this.once = {\r\n // functions to fire at a specific position\r\n // e.g. \"0.5\": function foo(){}\r\n }\r\n\r\n }\r\n\r\n})\r\n\r\n\r\nSVG.FX = SVG.invent({\r\n\r\n create: function(element) {\r\n this._target = element\r\n this.situations = []\r\n this.active = false\r\n this.situation = null\r\n this.paused = false\r\n this.lastPos = 0\r\n this.pos = 0\r\n // The absolute position of an animation is its position in the context of its complete duration (including delay and loops)\r\n // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1\r\n this.absPos = 0\r\n this._speed = 1\r\n }\r\n\r\n, extend: {\r\n\r\n /**\r\n * sets or returns the target of this animation\r\n * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation\r\n * @param ease function || string Function which should be used for easing or easing keyword\r\n * @param delay Number indicating the delay before the animation starts\r\n * @return target || this\r\n */\r\n animate: function(o, ease, delay){\r\n\r\n if(typeof o == 'object'){\r\n ease = o.ease\r\n delay = o.delay\r\n o = o.duration\r\n }\r\n\r\n var situation = new SVG.Situation({\r\n duration: o || 1000,\r\n delay: delay || 0,\r\n ease: SVG.easing[ease || '-'] || ease\r\n })\r\n\r\n this.queue(situation)\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * sets a delay before the next element of the queue is called\r\n * @param delay Duration of delay in milliseconds\r\n * @return this.target()\r\n */\r\n , delay: function(delay){\r\n // The delay is performed by an empty situation with its duration\r\n // attribute set to the duration of the delay\r\n var situation = new SVG.Situation({\r\n duration: delay,\r\n delay: 0,\r\n ease: SVG.easing['-']\r\n })\r\n\r\n return this.queue(situation)\r\n }\r\n\r\n /**\r\n * sets or returns the target of this animation\r\n * @param null || target SVG.Element which should be set as new target\r\n * @return target || this\r\n */\r\n , target: function(target){\r\n if(target && target instanceof SVG.Element){\r\n this._target = target\r\n return this\r\n }\r\n\r\n return this._target\r\n }\r\n\r\n // returns the absolute position at a given time\r\n , timeToAbsPos: function(timestamp){\r\n return (timestamp - this.situation.start) / (this.situation.duration/this._speed)\r\n }\r\n\r\n // returns the timestamp from a given absolute positon\r\n , absPosToTime: function(absPos){\r\n return this.situation.duration/this._speed * absPos + this.situation.start\r\n }\r\n\r\n // starts the animationloop\r\n , startAnimFrame: function(){\r\n this.stopAnimFrame()\r\n this.animationFrame = window.requestAnimationFrame(function(){ this.step() }.bind(this))\r\n }\r\n\r\n // cancels the animationframe\r\n , stopAnimFrame: function(){\r\n window.cancelAnimationFrame(this.animationFrame)\r\n }\r\n\r\n // kicks off the animation - only does something when the queue is currently not active and at least one situation is set\r\n , start: function(){\r\n // dont start if already started\r\n if(!this.active && this.situation){\r\n this.active = true\r\n this.startCurrent()\r\n }\r\n\r\n return this\r\n }\r\n\r\n // start the current situation\r\n , startCurrent: function(){\r\n this.situation.start = +new Date + this.situation.delay/this._speed\r\n this.situation.finish = this.situation.start + this.situation.duration/this._speed\r\n return this.initAnimations().step()\r\n }\r\n\r\n /**\r\n * adds a function / Situation to the animation queue\r\n * @param fn function / situation to add\r\n * @return this\r\n */\r\n , queue: function(fn){\r\n if(typeof fn == 'function' || fn instanceof SVG.Situation)\r\n this.situations.push(fn)\r\n\r\n if(!this.situation) this.situation = this.situations.shift()\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * pulls next element from the queue and execute it\r\n * @return this\r\n */\r\n , dequeue: function(){\r\n // stop current animation\r\n this.stop()\r\n\r\n // get next animation from queue\r\n this.situation = this.situations.shift()\r\n\r\n if(this.situation){\r\n if(this.situation instanceof SVG.Situation) {\r\n this.start()\r\n } else {\r\n // If it is not a SVG.Situation, then it is a function, we execute it\r\n this.situation.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n // updates all animations to the current state of the element\r\n // this is important when one property could be changed from another property\r\n , initAnimations: function() {\r\n var i, j, source\r\n var s = this.situation\r\n\r\n if(s.init) return this\r\n\r\n for(i in s.animations){\r\n source = this.target()[i]()\r\n\r\n if(!Array.isArray(source)) {\r\n source = [source]\r\n }\r\n\r\n if(!Array.isArray(s.animations[i])) {\r\n s.animations[i] = [s.animations[i]]\r\n }\r\n\r\n //if(s.animations[i].length > source.length) {\r\n // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length))\r\n //}\r\n\r\n for(j = source.length; j--;) {\r\n // The condition is because some methods return a normal number instead\r\n // of a SVG.Number\r\n if(s.animations[i][j] instanceof SVG.Number)\r\n source[j] = new SVG.Number(source[j])\r\n\r\n s.animations[i][j] = source[j].morph(s.animations[i][j])\r\n }\r\n }\r\n\r\n for(i in s.attrs){\r\n s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i])\r\n }\r\n\r\n for(i in s.styles){\r\n s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i])\r\n }\r\n\r\n s.initialTransformation = this.target().matrixify()\r\n\r\n s.init = true\r\n return this\r\n }\r\n , clearQueue: function(){\r\n this.situations = []\r\n return this\r\n }\r\n , clearCurrent: function(){\r\n this.situation = null\r\n return this\r\n }\r\n /** stops the animation immediately\r\n * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately.\r\n * @param clearQueue A Boolean indicating whether to remove queued animation as well.\r\n * @return this\r\n */\r\n , stop: function(jumpToEnd, clearQueue){\r\n var active = this.active\r\n this.active = false\r\n\r\n if(clearQueue){\r\n this.clearQueue()\r\n }\r\n\r\n if(jumpToEnd && this.situation){\r\n // initialize the situation if it was not\r\n !active && this.startCurrent()\r\n this.atEnd()\r\n }\r\n\r\n this.stopAnimFrame()\r\n\r\n return this.clearCurrent()\r\n }\r\n\r\n /** resets the element to the state where the current element has started\r\n * @return this\r\n */\r\n , reset: function(){\r\n if(this.situation){\r\n var temp = this.situation\r\n this.stop()\r\n this.situation = temp\r\n this.atStart()\r\n }\r\n return this\r\n }\r\n\r\n // Stop the currently-running animation, remove all queued animations, and complete all animations for the element.\r\n , finish: function(){\r\n\r\n this.stop(true, false)\r\n\r\n while(this.dequeue().situation && this.stop(true, false));\r\n\r\n this.clearQueue().clearCurrent()\r\n\r\n return this\r\n }\r\n\r\n // set the internal animation pointer at the start position, before any loops, and updates the visualisation\r\n , atStart: function() {\r\n return this.at(0, true)\r\n }\r\n\r\n // set the internal animation pointer at the end position, after all the loops, and updates the visualisation\r\n , atEnd: function() {\r\n if (this.situation.loops === true) {\r\n // If in a infinite loop, we end the current iteration\r\n this.situation.loops = this.situation.loop + 1\r\n }\r\n\r\n if(typeof this.situation.loops == 'number') {\r\n // If performing a finite number of loops, we go after all the loops\r\n return this.at(this.situation.loops, true)\r\n } else {\r\n // If no loops, we just go at the end\r\n return this.at(1, true)\r\n }\r\n }\r\n\r\n // set the internal animation pointer to the specified position and updates the visualisation\r\n // if isAbsPos is true, pos is treated as an absolute position\r\n , at: function(pos, isAbsPos){\r\n var durDivSpd = this.situation.duration/this._speed\r\n\r\n this.absPos = pos\r\n // If pos is not an absolute position, we convert it into one\r\n if (!isAbsPos) {\r\n if (this.situation.reversed) this.absPos = 1 - this.absPos\r\n this.absPos += this.situation.loop\r\n }\r\n\r\n this.situation.start = +new Date - this.absPos * durDivSpd\r\n this.situation.finish = this.situation.start + durDivSpd\r\n\r\n return this.step(true)\r\n }\r\n\r\n /**\r\n * sets or returns the speed of the animations\r\n * @param speed null || Number The new speed of the animations\r\n * @return Number || this\r\n */\r\n , speed: function(speed){\r\n if (speed === 0) return this.pause()\r\n\r\n if (speed) {\r\n this._speed = speed\r\n // We use an absolute position here so that speed can affect the delay before the animation\r\n return this.at(this.absPos, true)\r\n } else return this._speed\r\n }\r\n\r\n // Make loopable\r\n , loop: function(times, reverse) {\r\n var c = this.last()\r\n\r\n // store total loops\r\n c.loops = (times != null) ? times : true\r\n c.loop = 0\r\n\r\n if(reverse) c.reversing = true\r\n return this\r\n }\r\n\r\n // pauses the animation\r\n , pause: function(){\r\n this.paused = true\r\n this.stopAnimFrame()\r\n\r\n return this\r\n }\r\n\r\n // unpause the animation\r\n , play: function(){\r\n if(!this.paused) return this\r\n this.paused = false\r\n // We use an absolute position here so that the delay before the animation can be paused\r\n return this.at(this.absPos, true)\r\n }\r\n\r\n /**\r\n * toggle or set the direction of the animation\r\n * true sets direction to backwards while false sets it to forwards\r\n * @param reversed Boolean indicating whether to reverse the animation or not (default: toggle the reverse status)\r\n * @return this\r\n */\r\n , reverse: function(reversed){\r\n var c = this.last()\r\n\r\n if(typeof reversed == 'undefined') c.reversed = !c.reversed\r\n else c.reversed = reversed\r\n\r\n return this\r\n }\r\n\r\n\r\n /**\r\n * returns a float from 0-1 indicating the progress of the current animation\r\n * @param eased Boolean indicating whether the returned position should be eased or not\r\n * @return number\r\n */\r\n , progress: function(easeIt){\r\n return easeIt ? this.situation.ease(this.pos) : this.pos\r\n }\r\n\r\n /**\r\n * adds a callback function which is called when the current animation is finished\r\n * @param fn Function which should be executed as callback\r\n * @return number\r\n */\r\n , after: function(fn){\r\n var c = this.last()\r\n , wrapper = function wrapper(e){\r\n if(e.detail.situation == c){\r\n fn.call(this, c)\r\n this.off('finished.fx', wrapper) // prevent memory leak\r\n }\r\n }\r\n\r\n this.target().on('finished.fx', wrapper)\r\n\r\n return this._callStart()\r\n }\r\n\r\n // adds a callback which is called whenever one animation step is performed\r\n , during: function(fn){\r\n var c = this.last()\r\n , wrapper = function(e){\r\n if(e.detail.situation == c){\r\n fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c)\r\n }\r\n }\r\n\r\n // see above\r\n this.target().off('during.fx', wrapper).on('during.fx', wrapper)\r\n\r\n this.after(function(){\r\n this.off('during.fx', wrapper)\r\n })\r\n\r\n return this._callStart()\r\n }\r\n\r\n // calls after ALL animations in the queue are finished\r\n , afterAll: function(fn){\r\n var wrapper = function wrapper(e){\r\n fn.call(this)\r\n this.off('allfinished.fx', wrapper)\r\n }\r\n\r\n // see above\r\n this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper)\r\n\r\n return this._callStart()\r\n }\r\n\r\n // calls on every animation step for all animations\r\n , duringAll: function(fn){\r\n var wrapper = function(e){\r\n fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, e.detail.situation)\r\n }\r\n\r\n this.target().off('during.fx', wrapper).on('during.fx', wrapper)\r\n\r\n this.afterAll(function(){\r\n this.off('during.fx', wrapper)\r\n })\r\n\r\n return this._callStart()\r\n }\r\n\r\n , last: function(){\r\n return this.situations.length ? this.situations[this.situations.length-1] : this.situation\r\n }\r\n\r\n // adds one property to the animations\r\n , add: function(method, args, type){\r\n this.last()[type || 'animations'][method] = args\r\n return this._callStart()\r\n }\r\n\r\n /** perform one step of the animation\r\n * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time\r\n * @return this\r\n */\r\n , step: function(ignoreTime){\r\n\r\n // convert current time to an absolute position\r\n if(!ignoreTime) this.absPos = this.timeToAbsPos(+new Date)\r\n\r\n // This part convert an absolute position to a position\r\n if(this.situation.loops !== false) {\r\n var absPos, absPosInt, lastLoop\r\n\r\n // If the absolute position is below 0, we just treat it as if it was 0\r\n absPos = Math.max(this.absPos, 0)\r\n absPosInt = Math.floor(absPos)\r\n\r\n if(this.situation.loops === true || absPosInt < this.situation.loops) {\r\n this.pos = absPos - absPosInt\r\n lastLoop = this.situation.loop\r\n this.situation.loop = absPosInt\r\n } else {\r\n this.absPos = this.situation.loops\r\n this.pos = 1\r\n // The -1 here is because we don't want to toggle reversed when all the loops have been completed\r\n lastLoop = this.situation.loop - 1\r\n this.situation.loop = this.situation.loops\r\n }\r\n\r\n if(this.situation.reversing) {\r\n // Toggle reversed if an odd number of loops as occured since the last call of step\r\n this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2)\r\n }\r\n\r\n } else {\r\n // If there are no loop, the absolute position must not be above 1\r\n this.absPos = Math.min(this.absPos, 1)\r\n this.pos = this.absPos\r\n }\r\n\r\n // while the absolute position can be below 0, the position must not be below 0\r\n if(this.pos < 0) this.pos = 0\r\n\r\n if(this.situation.reversed) this.pos = 1 - this.pos\r\n\r\n\r\n // apply easing\r\n var eased = this.situation.ease(this.pos)\r\n\r\n // call once-callbacks\r\n for(var i in this.situation.once){\r\n if(i > this.lastPos && i <= eased){\r\n this.situation.once[i].call(this.target(), this.pos, eased)\r\n delete this.situation.once[i]\r\n }\r\n }\r\n\r\n // fire during callback with position, eased position and current situation as parameter\r\n if(this.active) this.target().fire('during', {pos: this.pos, eased: eased, fx: this, situation: this.situation})\r\n\r\n // the user may call stop or finish in the during callback\r\n // so make sure that we still have a valid situation\r\n if(!this.situation){\r\n return this\r\n }\r\n\r\n // apply the actual animation to every property\r\n this.eachAt()\r\n\r\n // do final code when situation is finished\r\n if((this.pos == 1 && !this.situation.reversed) || (this.situation.reversed && this.pos == 0)){\r\n\r\n // stop animation callback\r\n this.stopAnimFrame()\r\n\r\n // fire finished callback with current situation as parameter\r\n this.target().fire('finished', {fx:this, situation: this.situation})\r\n\r\n if(!this.situations.length){\r\n this.target().fire('allfinished')\r\n\r\n // Recheck the length since the user may call animate in the afterAll callback\r\n if(!this.situations.length){\r\n this.target().off('.fx') // there shouldnt be any binding left, but to make sure...\r\n this.active = false\r\n }\r\n }\r\n\r\n // start next animation\r\n if(this.active) this.dequeue()\r\n else this.clearCurrent()\r\n\r\n }else if(!this.paused && this.active){\r\n // we continue animating when we are not at the end\r\n this.startAnimFrame()\r\n }\r\n\r\n // save last eased position for once callback triggering\r\n this.lastPos = eased\r\n return this\r\n\r\n }\r\n\r\n // calculates the step for every property and calls block with it\r\n , eachAt: function(){\r\n var i, len, at, self = this, target = this.target(), s = this.situation\r\n\r\n // apply animations which can be called trough a method\r\n for(i in s.animations){\r\n\r\n at = [].concat(s.animations[i]).map(function(el){\r\n return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el\r\n })\r\n\r\n target[i].apply(target, at)\r\n\r\n }\r\n\r\n // apply animation which has to be applied with attr()\r\n for(i in s.attrs){\r\n\r\n at = [i].concat(s.attrs[i]).map(function(el){\r\n return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el\r\n })\r\n\r\n target.attr.apply(target, at)\r\n\r\n }\r\n\r\n // apply animation which has to be applied with style()\r\n for(i in s.styles){\r\n\r\n at = [i].concat(s.styles[i]).map(function(el){\r\n return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el\r\n })\r\n\r\n target.style.apply(target, at)\r\n\r\n }\r\n\r\n // animate initialTransformation which has to be chained\r\n if(s.transforms.length){\r\n\r\n // get initial initialTransformation\r\n at = s.initialTransformation\r\n for(i = 0, len = s.transforms.length; i < len; i++){\r\n\r\n // get next transformation in chain\r\n var a = s.transforms[i]\r\n\r\n // multiply matrix directly\r\n if(a instanceof SVG.Matrix){\r\n\r\n if(a.relative){\r\n at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos)))\r\n }else{\r\n at = at.morph(a).at(s.ease(this.pos))\r\n }\r\n continue\r\n }\r\n\r\n // when transformation is absolute we have to reset the needed transformation first\r\n if(!a.relative)\r\n a.undo(at.extract())\r\n\r\n // and reapply it after\r\n at = at.multiply(a.at(s.ease(this.pos)))\r\n\r\n }\r\n\r\n // set new matrix on element\r\n target.matrix(at)\r\n }\r\n\r\n return this\r\n\r\n }\r\n\r\n\r\n // adds an once-callback which is called at a specific position and never again\r\n , once: function(pos, fn, isEased){\r\n var c = this.last()\r\n if(!isEased) pos = c.ease(pos)\r\n\r\n c.once[pos] = fn\r\n\r\n return this\r\n }\r\n\r\n , _callStart: function() {\r\n setTimeout(function(){this.start()}.bind(this), 0)\r\n return this\r\n }\r\n\r\n }\r\n\r\n, parent: SVG.Element\r\n\r\n // Add method to parent elements\r\n, construct: {\r\n // Get fx module or create a new one, then animate with given duration and ease\r\n animate: function(o, ease, delay) {\r\n return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay)\r\n }\r\n , delay: function(delay){\r\n return (this.fx || (this.fx = new SVG.FX(this))).delay(delay)\r\n }\r\n , stop: function(jumpToEnd, clearQueue) {\r\n if (this.fx)\r\n this.fx.stop(jumpToEnd, clearQueue)\r\n\r\n return this\r\n }\r\n , finish: function() {\r\n if (this.fx)\r\n this.fx.finish()\r\n\r\n return this\r\n }\r\n // Pause current animation\r\n , pause: function() {\r\n if (this.fx)\r\n this.fx.pause()\r\n\r\n return this\r\n }\r\n // Play paused current animation\r\n , play: function() {\r\n if (this.fx)\r\n this.fx.play()\r\n\r\n return this\r\n }\r\n // Set/Get the speed of the animations\r\n , speed: function(speed) {\r\n if (this.fx)\r\n if (speed == null)\r\n return this.fx.speed()\r\n else\r\n this.fx.speed(speed)\r\n\r\n return this\r\n }\r\n }\r\n\r\n})\r\n\r\n// MorphObj is used whenever no morphable object is given\r\nSVG.MorphObj = SVG.invent({\r\n\r\n create: function(from, to){\r\n // prepare color for morphing\r\n if(SVG.Color.isColor(to)) return new SVG.Color(from).morph(to)\r\n // check if we have a list of values\r\n if(SVG.regex.delimiter.test(from)) {\r\n // prepare path for morphing\r\n if(SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to)\r\n // prepare value list for morphing\r\n else return new SVG.Array(from).morph(to)\r\n }\r\n // prepare number for morphing\r\n if(SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to)\r\n\r\n // prepare for plain morphing\r\n this.value = from\r\n this.destination = to\r\n }\r\n\r\n, extend: {\r\n at: function(pos, real){\r\n return real < 1 ? this.value : this.destination\r\n },\r\n\r\n valueOf: function(){\r\n return this.value\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.extend(SVG.FX, {\r\n // Add animatable attributes\r\n attr: function(a, v, relative) {\r\n // apply attributes individually\r\n if (typeof a == 'object') {\r\n for (var key in a)\r\n this.attr(key, a[key])\r\n\r\n } else {\r\n this.add(a, v, 'attrs')\r\n }\r\n\r\n return this\r\n }\r\n // Add animatable styles\r\n, style: function(s, v) {\r\n if (typeof s == 'object')\r\n for (var key in s)\r\n this.style(key, s[key])\r\n\r\n else\r\n this.add(s, v, 'styles')\r\n\r\n return this\r\n }\r\n // Animatable x-axis\r\n, x: function(x, relative) {\r\n if(this.target() instanceof SVG.G){\r\n this.transform({x:x}, relative)\r\n return this\r\n }\r\n\r\n var num = new SVG.Number(x)\r\n num.relative = relative\r\n return this.add('x', num)\r\n }\r\n // Animatable y-axis\r\n, y: function(y, relative) {\r\n if(this.target() instanceof SVG.G){\r\n this.transform({y:y}, relative)\r\n return this\r\n }\r\n\r\n var num = new SVG.Number(y)\r\n num.relative = relative\r\n return this.add('y', num)\r\n }\r\n // Animatable center x-axis\r\n, cx: function(x) {\r\n return this.add('cx', new SVG.Number(x))\r\n }\r\n // Animatable center y-axis\r\n, cy: function(y) {\r\n return this.add('cy', new SVG.Number(y))\r\n }\r\n // Add animatable move\r\n, move: function(x, y) {\r\n return this.x(x).y(y)\r\n }\r\n // Add animatable center\r\n, center: function(x, y) {\r\n return this.cx(x).cy(y)\r\n }\r\n // Add animatable size\r\n, size: function(width, height) {\r\n if (this.target() instanceof SVG.Text) {\r\n // animate font size for Text elements\r\n this.attr('font-size', width)\r\n\r\n } else {\r\n // animate bbox based size for all other elements\r\n var box\r\n\r\n if(!width || !height){\r\n box = this.target().bbox()\r\n }\r\n\r\n if(!width){\r\n width = box.width / box.height * height\r\n }\r\n\r\n if(!height){\r\n height = box.height / box.width * width\r\n }\r\n\r\n this.add('width' , new SVG.Number(width))\r\n .add('height', new SVG.Number(height))\r\n\r\n }\r\n\r\n return this\r\n }\r\n // Add animatable width\r\n, width: function(width) {\r\n return this.add('width', new SVG.Number(width))\r\n }\r\n // Add animatable height\r\n, height: function(height) {\r\n return this.add('height', new SVG.Number(height))\r\n }\r\n // Add animatable plot\r\n, plot: function(a, b, c, d) {\r\n // Lines can be plotted with 4 arguments\r\n if(arguments.length == 4) {\r\n return this.plot([a, b, c, d])\r\n }\r\n\r\n return this.add('plot', new (this.target().morphArray)(a))\r\n }\r\n // Add leading method\r\n, leading: function(value) {\r\n return this.target().leading ?\r\n this.add('leading', new SVG.Number(value)) :\r\n this\r\n }\r\n // Add animatable viewbox\r\n, viewbox: function(x, y, width, height) {\r\n if (this.target() instanceof SVG.Container) {\r\n this.add('viewbox', new SVG.ViewBox(x, y, width, height))\r\n }\r\n\r\n return this\r\n }\r\n, update: function(o) {\r\n if (this.target() instanceof SVG.Stop) {\r\n if (typeof o == 'number' || o instanceof SVG.Number) {\r\n return this.update({\r\n offset: arguments[0]\r\n , color: arguments[1]\r\n , opacity: arguments[2]\r\n })\r\n }\r\n\r\n if (o.opacity != null) this.attr('stop-opacity', o.opacity)\r\n if (o.color != null) this.attr('stop-color', o.color)\r\n if (o.offset != null) this.attr('offset', o.offset)\r\n }\r\n\r\n return this\r\n }\r\n})\r\n\nSVG.Box = SVG.invent({\r\n create: function(x, y, width, height) {\r\n if (typeof x == 'object' && !(x instanceof SVG.Element)) {\r\n // chromes getBoundingClientRect has no x and y property\r\n return SVG.Box.call(this, x.left != null ? x.left : x.x , x.top != null ? x.top : x.y, x.width, x.height)\r\n } else if (arguments.length == 4) {\r\n this.x = x\r\n this.y = y\r\n this.width = width\r\n this.height = height\r\n }\r\n\r\n // add center, right, bottom...\r\n fullBox(this)\r\n }\r\n, extend: {\r\n // Merge rect box with another, return a new instance\r\n merge: function(box) {\r\n var b = new this.constructor()\r\n\r\n // merge boxes\r\n b.x = Math.min(this.x, box.x)\r\n b.y = Math.min(this.y, box.y)\r\n b.width = Math.max(this.x + this.width, box.x + box.width) - b.x\r\n b.height = Math.max(this.y + this.height, box.y + box.height) - b.y\r\n\r\n return fullBox(b)\r\n }\r\n\r\n , transform: function(m) {\r\n var xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, p, bbox\r\n\r\n var pts = [\r\n new SVG.Point(this.x, this.y),\r\n new SVG.Point(this.x2, this.y),\r\n new SVG.Point(this.x, this.y2),\r\n new SVG.Point(this.x2, this.y2)\r\n ]\r\n\r\n pts.forEach(function(p) {\r\n p = p.transform(m)\r\n xMin = Math.min(xMin,p.x)\r\n xMax = Math.max(xMax,p.x)\r\n yMin = Math.min(yMin,p.y)\r\n yMax = Math.max(yMax,p.y)\r\n })\r\n\r\n bbox = new this.constructor()\r\n bbox.x = xMin\r\n bbox.width = xMax-xMin\r\n bbox.y = yMin\r\n bbox.height = yMax-yMin\r\n\r\n fullBox(bbox)\r\n\r\n return bbox\r\n }\r\n }\r\n})\r\n\r\nSVG.BBox = SVG.invent({\r\n // Initialize\r\n create: function(element) {\r\n SVG.Box.apply(this, [].slice.call(arguments))\r\n\r\n // get values if element is given\r\n if (element instanceof SVG.Element) {\r\n var box\r\n\r\n // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered\r\n try {\r\n\r\n if (!document.documentElement.contains){\r\n // This is IE - it does not support contains() for top-level SVGs\r\n var topParent = element.node\r\n while (topParent.parentNode){\r\n topParent = topParent.parentNode\r\n }\r\n if (topParent != document) throw new Exception('Element not in the dom')\r\n } else {\r\n // the element is NOT in the dom, throw error\r\n if(!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom')\r\n }\r\n\r\n // find native bbox\r\n box = element.node.getBBox()\r\n } catch(e) {\r\n if(element instanceof SVG.Shape){\r\n var clone = element.clone(SVG.parser.draw.instance).show()\r\n box = clone.node.getBBox()\r\n clone.remove()\r\n }else{\r\n box = {\r\n x: element.node.clientLeft\r\n , y: element.node.clientTop\r\n , width: element.node.clientWidth\r\n , height: element.node.clientHeight\r\n }\r\n }\r\n }\r\n\r\n SVG.Box.call(this, box)\r\n }\r\n\r\n }\r\n\r\n // Define ancestor\r\n, inherit: SVG.Box\r\n\r\n // Define Parent\r\n, parent: SVG.Element\r\n\r\n // Constructor\r\n, construct: {\r\n // Get bounding box\r\n bbox: function() {\r\n return new SVG.BBox(this)\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.BBox.prototype.constructor = SVG.BBox\r\n\r\n\r\nSVG.extend(SVG.Element, {\r\n tbox: function(){\r\n console.warn('Use of TBox is deprecated and mapped to RBox. Use .rbox() instead.')\r\n return this.rbox(this.doc())\r\n }\r\n})\r\n\r\nSVG.RBox = SVG.invent({\r\n // Initialize\r\n create: function(element) {\r\n SVG.Box.apply(this, [].slice.call(arguments))\r\n\r\n if (element instanceof SVG.Element) {\r\n SVG.Box.call(this, element.node.getBoundingClientRect())\r\n }\r\n }\r\n\r\n, inherit: SVG.Box\r\n\r\n // define Parent\r\n, parent: SVG.Element\r\n\r\n, extend: {\r\n addOffset: function() {\r\n // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\r\n this.x += window.pageXOffset\r\n this.y += window.pageYOffset\r\n return this\r\n }\r\n }\r\n\r\n // Constructor\r\n, construct: {\r\n // Get rect box\r\n rbox: function(el) {\r\n if (el) return new SVG.RBox(this).transform(el.screenCTM().inverse())\r\n return new SVG.RBox(this).addOffset()\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.RBox.prototype.constructor = SVG.RBox\r\n\nSVG.Matrix = SVG.invent({\r\n // Initialize\r\n create: function(source) {\r\n var i, base = arrayToMatrix([1, 0, 0, 1, 0, 0])\r\n\r\n // ensure source as object\r\n source = source instanceof SVG.Element ?\r\n source.matrixify() :\r\n typeof source === 'string' ?\r\n arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) :\r\n arguments.length == 6 ?\r\n arrayToMatrix([].slice.call(arguments)) :\r\n Array.isArray(source) ?\r\n arrayToMatrix(source) :\r\n typeof source === 'object' ?\r\n source : base\r\n\r\n // merge source\r\n for (i = abcdef.length - 1; i >= 0; --i)\r\n this[abcdef[i]] = source[abcdef[i]] != null ?\r\n source[abcdef[i]] : base[abcdef[i]]\r\n }\r\n\r\n // Add methods\r\n, extend: {\r\n // Extract individual transformations\r\n extract: function() {\r\n // find delta transform points\r\n var px = deltaTransformPoint(this, 0, 1)\r\n , py = deltaTransformPoint(this, 1, 0)\r\n , skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90\r\n\r\n return {\r\n // translation\r\n x: this.e\r\n , y: this.f\r\n , transformedX:(this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b)\r\n , transformedY:(this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d)\r\n // skew\r\n , skewX: -skewX\r\n , skewY: 180 / Math.PI * Math.atan2(py.y, py.x)\r\n // scale\r\n , scaleX: Math.sqrt(this.a * this.a + this.b * this.b)\r\n , scaleY: Math.sqrt(this.c * this.c + this.d * this.d)\r\n // rotation\r\n , rotation: skewX\r\n , a: this.a\r\n , b: this.b\r\n , c: this.c\r\n , d: this.d\r\n , e: this.e\r\n , f: this.f\r\n , matrix: new SVG.Matrix(this)\r\n }\r\n }\r\n // Clone matrix\r\n , clone: function() {\r\n return new SVG.Matrix(this)\r\n }\r\n // Morph one matrix into another\r\n , morph: function(matrix) {\r\n // store new destination\r\n this.destination = new SVG.Matrix(matrix)\r\n\r\n return this\r\n }\r\n // Get morphed matrix at a given position\r\n , at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // calculate morphed matrix at a given position\r\n var matrix = new SVG.Matrix({\r\n a: this.a + (this.destination.a - this.a) * pos\r\n , b: this.b + (this.destination.b - this.b) * pos\r\n , c: this.c + (this.destination.c - this.c) * pos\r\n , d: this.d + (this.destination.d - this.d) * pos\r\n , e: this.e + (this.destination.e - this.e) * pos\r\n , f: this.f + (this.destination.f - this.f) * pos\r\n })\r\n\r\n return matrix\r\n }\r\n // Multiplies by given matrix\r\n , multiply: function(matrix) {\r\n return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native()))\r\n }\r\n // Inverses matrix\r\n , inverse: function() {\r\n return new SVG.Matrix(this.native().inverse())\r\n }\r\n // Translate matrix\r\n , translate: function(x, y) {\r\n return new SVG.Matrix(this.native().translate(x || 0, y || 0))\r\n }\r\n // Scale matrix\r\n , scale: function(x, y, cx, cy) {\r\n // support uniformal scale\r\n if (arguments.length == 1) {\r\n y = x\r\n } else if (arguments.length == 3) {\r\n cy = cx\r\n cx = y\r\n y = x\r\n }\r\n\r\n return this.around(cx, cy, new SVG.Matrix(x, 0, 0, y, 0, 0))\r\n }\r\n // Rotate matrix\r\n , rotate: function(r, cx, cy) {\r\n // convert degrees to radians\r\n r = SVG.utils.radians(r)\r\n\r\n return this.around(cx, cy, new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0))\r\n }\r\n // Flip matrix on x or y, at a given offset\r\n , flip: function(a, o) {\r\n return a == 'x' ?\r\n this.scale(-1, 1, o, 0) :\r\n a == 'y' ?\r\n this.scale(1, -1, 0, o) :\r\n this.scale(-1, -1, a, o != null ? o : a)\r\n }\r\n // Skew\r\n , skew: function(x, y, cx, cy) {\r\n // support uniformal skew\r\n if (arguments.length == 1) {\r\n y = x\r\n } else if (arguments.length == 3) {\r\n cy = cx\r\n cx = y\r\n y = x\r\n }\r\n\r\n // convert degrees to radians\r\n x = SVG.utils.radians(x)\r\n y = SVG.utils.radians(y)\r\n\r\n return this.around(cx, cy, new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0))\r\n }\r\n // SkewX\r\n , skewX: function(x, cx, cy) {\r\n return this.skew(x, 0, cx, cy)\r\n }\r\n // SkewY\r\n , skewY: function(y, cx, cy) {\r\n return this.skew(0, y, cx, cy)\r\n }\r\n // Transform around a center point\r\n , around: function(cx, cy, matrix) {\r\n return this\r\n .multiply(new SVG.Matrix(1, 0, 0, 1, cx || 0, cy || 0))\r\n .multiply(matrix)\r\n .multiply(new SVG.Matrix(1, 0, 0, 1, -cx || 0, -cy || 0))\r\n }\r\n // Convert to native SVGMatrix\r\n , native: function() {\r\n // create new matrix\r\n var matrix = SVG.parser.native.createSVGMatrix()\r\n\r\n // update with current values\r\n for (var i = abcdef.length - 1; i >= 0; i--)\r\n matrix[abcdef[i]] = this[abcdef[i]]\r\n\r\n return matrix\r\n }\r\n // Convert matrix to string\r\n , toString: function() {\r\n // Construct the matrix directly, avoid values that are too small\r\n return 'matrix(' + float32String(this.a) + ',' + float32String(this.b)\r\n + ',' + float32String(this.c) + ',' + float32String(this.d)\r\n + ',' + float32String(this.e) + ',' + float32String(this.f)\r\n + ')'\r\n }\r\n }\r\n\r\n // Define parent\r\n, parent: SVG.Element\r\n\r\n // Add parent method\r\n, construct: {\r\n // Get current matrix\r\n ctm: function() {\r\n return new SVG.Matrix(this.node.getCTM())\r\n },\r\n // Get current screen matrix\r\n screenCTM: function() {\r\n /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\r\n This is needed because FF does not return the transformation matrix\r\n for the inner coordinate system when getScreenCTM() is called on nested svgs.\r\n However all other Browsers do that */\r\n if(this instanceof SVG.Nested) {\r\n var rect = this.rect(1,1)\r\n var m = rect.node.getScreenCTM()\r\n rect.remove()\r\n return new SVG.Matrix(m)\r\n }\r\n return new SVG.Matrix(this.node.getScreenCTM())\r\n }\r\n\r\n }\r\n\r\n})\r\n\nSVG.Point = SVG.invent({\r\n // Initialize\r\n create: function(x,y) {\r\n var i, source, base = {x:0, y:0}\r\n\r\n // ensure source as object\r\n source = Array.isArray(x) ?\r\n {x:x[0], y:x[1]} :\r\n typeof x === 'object' ?\r\n {x:x.x, y:x.y} :\r\n x != null ?\r\n {x:x, y:(y != null ? y : x)} : base // If y has no value, then x is used has its value\r\n\r\n // merge source\r\n this.x = source.x\r\n this.y = source.y\r\n }\r\n\r\n // Add methods\r\n, extend: {\r\n // Clone point\r\n clone: function() {\r\n return new SVG.Point(this)\r\n }\r\n // Morph one point into another\r\n , morph: function(x, y) {\r\n // store new destination\r\n this.destination = new SVG.Point(x, y)\r\n\r\n return this\r\n }\r\n // Get morphed point at a given position\r\n , at: function(pos) {\r\n // make sure a destination is defined\r\n if (!this.destination) return this\r\n\r\n // calculate morphed matrix at a given position\r\n var point = new SVG.Point({\r\n x: this.x + (this.destination.x - this.x) * pos\r\n , y: this.y + (this.destination.y - this.y) * pos\r\n })\r\n\r\n return point\r\n }\r\n // Convert to native SVGPoint\r\n , native: function() {\r\n // create new point\r\n var point = SVG.parser.native.createSVGPoint()\r\n\r\n // update with current values\r\n point.x = this.x\r\n point.y = this.y\r\n\r\n return point\r\n }\r\n // transform point with matrix\r\n , transform: function(matrix) {\r\n return new SVG.Point(this.native().matrixTransform(matrix.native()))\r\n }\r\n\r\n }\r\n\r\n})\r\n\r\nSVG.extend(SVG.Element, {\r\n\r\n // Get point\r\n point: function(x, y) {\r\n return new SVG.Point(x,y).transform(this.screenCTM().inverse());\r\n }\r\n\r\n})\r\n\nSVG.extend(SVG.Element, {\r\n // Set svg element attribute\r\n attr: function(a, v, n) {\r\n // act as full getter\r\n if (a == null) {\r\n // get an object of attributes\r\n a = {}\r\n v = this.node.attributes\r\n for (n = v.length - 1; n >= 0; n--)\r\n a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue\r\n\r\n return a\r\n\r\n } else if (typeof a == 'object') {\r\n // apply every attribute individually if an object is passed\r\n for (v in a) this.attr(v, a[v])\r\n\r\n } else if (v === null) {\r\n // remove value\r\n this.node.removeAttribute(a)\r\n\r\n } else if (v == null) {\r\n // act as a getter if the first and only argument is not an object\r\n v = this.node.getAttribute(a)\r\n return v == null ?\r\n SVG.defaults.attrs[a] :\r\n SVG.regex.isNumber.test(v) ?\r\n parseFloat(v) : v\r\n\r\n } else {\r\n // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0\r\n if (a == 'stroke-width')\r\n this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null)\r\n else if (a == 'stroke')\r\n this._stroke = v\r\n\r\n // convert image fill and stroke to patterns\r\n if (a == 'fill' || a == 'stroke') {\r\n if (SVG.regex.isImage.test(v))\r\n v = this.doc().defs().image(v, 0, 0)\r\n\r\n if (v instanceof SVG.Image)\r\n v = this.doc().defs().pattern(0, 0, function() {\r\n this.add(v)\r\n })\r\n }\r\n\r\n // ensure correct numeric values (also accepts NaN and Infinity)\r\n if (typeof v === 'number')\r\n v = new SVG.Number(v)\r\n\r\n // ensure full hex color\r\n else if (SVG.Color.isColor(v))\r\n v = new SVG.Color(v)\r\n\r\n // parse array values\r\n else if (Array.isArray(v))\r\n v = new SVG.Array(v)\r\n\r\n // if the passed attribute is leading...\r\n if (a == 'leading') {\r\n // ... call the leading method instead\r\n if (this.leading)\r\n this.leading(v)\r\n } else {\r\n // set given attribute on node\r\n typeof n === 'string' ?\r\n this.node.setAttributeNS(n, a, v.toString()) :\r\n this.node.setAttribute(a, v.toString())\r\n }\r\n\r\n // rebuild if required\r\n if (this.rebuild && (a == 'font-size' || a == 'x'))\r\n this.rebuild(a, v)\r\n }\r\n\r\n return this\r\n }\r\n})\nSVG.extend(SVG.Element, {\r\n // Add transformations\r\n transform: function(o, relative) {\r\n // get target in case of the fx module, otherwise reference this\r\n var target = this\r\n , matrix, bbox\r\n\r\n // act as a getter\r\n if (typeof o !== 'object') {\r\n // get current matrix\r\n matrix = new SVG.Matrix(target).extract()\r\n\r\n return typeof o === 'string' ? matrix[o] : matrix\r\n }\r\n\r\n // get current matrix\r\n matrix = new SVG.Matrix(target)\r\n\r\n // ensure relative flag\r\n relative = !!relative || !!o.relative\r\n\r\n // act on matrix\r\n if (o.a != null) {\r\n matrix = relative ?\r\n // relative\r\n matrix.multiply(new SVG.Matrix(o)) :\r\n // absolute\r\n new SVG.Matrix(o)\r\n\r\n // act on rotation\r\n } else if (o.rotation != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // apply transformation\r\n matrix = relative ?\r\n // relative\r\n matrix.rotate(o.rotation, o.cx, o.cy) :\r\n // absolute\r\n matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy)\r\n\r\n // act on scale\r\n } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // ensure scale values on both axes\r\n o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1\r\n o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1\r\n\r\n if (!relative) {\r\n // absolute; multiply inversed values\r\n var e = matrix.extract()\r\n o.scaleX = o.scaleX * 1 / e.scaleX\r\n o.scaleY = o.scaleY * 1 / e.scaleY\r\n }\r\n\r\n matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy)\r\n\r\n // act on skew\r\n } else if (o.skew != null || o.skewX != null || o.skewY != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // ensure skew values on both axes\r\n o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0\r\n o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0\r\n\r\n if (!relative) {\r\n // absolute; reset skew values\r\n var e = matrix.extract()\r\n matrix = matrix.multiply(new SVG.Matrix().skew(e.skewX, e.skewY, o.cx, o.cy).inverse())\r\n }\r\n\r\n matrix = matrix.skew(o.skewX, o.skewY, o.cx, o.cy)\r\n\r\n // act on flip\r\n } else if (o.flip) {\r\n if(o.flip == 'x' || o.flip == 'y') {\r\n o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset\r\n } else {\r\n if(o.offset == null) {\r\n bbox = target.bbox()\r\n o.flip = bbox.cx\r\n o.offset = bbox.cy\r\n } else {\r\n o.flip = o.offset\r\n }\r\n }\r\n\r\n matrix = new SVG.Matrix().flip(o.flip, o.offset)\r\n\r\n // act on translate\r\n } else if (o.x != null || o.y != null) {\r\n if (relative) {\r\n // relative\r\n matrix = matrix.translate(o.x, o.y)\r\n } else {\r\n // absolute\r\n if (o.x != null) matrix.e = o.x\r\n if (o.y != null) matrix.f = o.y\r\n }\r\n }\r\n\r\n return this.attr('transform', matrix)\r\n }\r\n})\r\n\r\nSVG.extend(SVG.FX, {\r\n transform: function(o, relative) {\r\n // get target in case of the fx module, otherwise reference this\r\n var target = this.target()\r\n , matrix, bbox\r\n\r\n // act as a getter\r\n if (typeof o !== 'object') {\r\n // get current matrix\r\n matrix = new SVG.Matrix(target).extract()\r\n\r\n return typeof o === 'string' ? matrix[o] : matrix\r\n }\r\n\r\n // ensure relative flag\r\n relative = !!relative || !!o.relative\r\n\r\n // act on matrix\r\n if (o.a != null) {\r\n matrix = new SVG.Matrix(o)\r\n\r\n // act on rotation\r\n } else if (o.rotation != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // apply transformation\r\n matrix = new SVG.Rotate(o.rotation, o.cx, o.cy)\r\n\r\n // act on scale\r\n } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // ensure scale values on both axes\r\n o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1\r\n o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1\r\n\r\n matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy)\r\n\r\n // act on skew\r\n } else if (o.skewX != null || o.skewY != null) {\r\n // ensure centre point\r\n ensureCentre(o, target)\r\n\r\n // ensure skew values on both axes\r\n o.skewX = o.skewX != null ? o.skewX : 0\r\n o.skewY = o.skewY != null ? o.skewY : 0\r\n\r\n matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy)\r\n\r\n // act on flip\r\n } else if (o.flip) {\r\n if(o.flip == 'x' || o.flip == 'y') {\r\n o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset\r\n } else {\r\n if(o.offset == null) {\r\n bbox = target.bbox()\r\n o.flip = bbox.cx\r\n o.offset = bbox.cy\r\n } else {\r\n o.flip = o.offset\r\n }\r\n }\r\n\r\n matrix = new SVG.Matrix().flip(o.flip, o.offset)\r\n\r\n // act on translate\r\n } else if (o.x != null || o.y != null) {\r\n matrix = new SVG.Translate(o.x, o.y)\r\n }\r\n\r\n if(!matrix) return this\r\n\r\n matrix.relative = relative\r\n\r\n this.last().transforms.push(matrix)\r\n\r\n return this._callStart()\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Element, {\r\n // Reset all transformations\r\n untransform: function() {\r\n return this.attr('transform', null)\r\n },\r\n // merge the whole transformation chain into one matrix and returns it\r\n matrixify: function() {\r\n\r\n var matrix = (this.attr('transform') || '')\r\n // split transformations\r\n .split(SVG.regex.transforms).slice(0,-1).map(function(str){\r\n // generate key => value pairs\r\n var kv = str.trim().split('(')\r\n return [kv[0], kv[1].split(SVG.regex.delimiter).map(function(str){ return parseFloat(str) })]\r\n })\r\n // merge every transformation into one matrix\r\n .reduce(function(matrix, transform){\r\n\r\n if(transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1]))\r\n return matrix[transform[0]].apply(matrix, transform[1])\r\n\r\n }, new SVG.Matrix())\r\n\r\n return matrix\r\n },\r\n // add an element to another parent without changing the visual representation on the screen\r\n toParent: function(parent) {\r\n if(this == parent) return this\r\n var ctm = this.screenCTM()\r\n var pCtm = parent.screenCTM().inverse()\r\n\r\n this.addTo(parent).untransform().transform(pCtm.multiply(ctm))\r\n\r\n return this\r\n },\r\n // same as above with parent equals root-svg\r\n toDoc: function() {\r\n return this.toParent(this.doc())\r\n }\r\n\r\n})\r\n\r\nSVG.Transformation = SVG.invent({\r\n\r\n create: function(source, inversed){\r\n\r\n if(arguments.length > 1 && typeof inversed != 'boolean'){\r\n return this.constructor.call(this, [].slice.call(arguments))\r\n }\r\n\r\n if(Array.isArray(source)){\r\n for(var i = 0, len = this.arguments.length; i < len; ++i){\r\n this[this.arguments[i]] = source[i]\r\n }\r\n } else if(typeof source == 'object'){\r\n for(var i = 0, len = this.arguments.length; i < len; ++i){\r\n this[this.arguments[i]] = source[this.arguments[i]]\r\n }\r\n }\r\n\r\n this.inversed = false\r\n\r\n if(inversed === true){\r\n this.inversed = true\r\n }\r\n\r\n }\r\n\r\n, extend: {\r\n\r\n arguments: []\r\n , method: ''\r\n\r\n , at: function(pos){\r\n\r\n var params = []\r\n\r\n for(var i = 0, len = this.arguments.length; i < len; ++i){\r\n params.push(this[this.arguments[i]])\r\n }\r\n\r\n var m = this._undo || new SVG.Matrix()\r\n\r\n m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos)\r\n\r\n return this.inversed ? m.inverse() : m\r\n\r\n }\r\n\r\n , undo: function(o){\r\n for(var i = 0, len = this.arguments.length; i < len; ++i){\r\n o[this.arguments[i]] = typeof this[this.arguments[i]] == 'undefined' ? 0 : o[this.arguments[i]]\r\n }\r\n\r\n // The method SVG.Matrix.extract which was used before calling this\r\n // method to obtain a value for the parameter o doesn't return a cx and\r\n // a cy so we use the ones that were provided to this object at its creation\r\n o.cx = this.cx\r\n o.cy = this.cy\r\n\r\n this._undo = new SVG[capitalize(this.method)](o, true).at(1)\r\n\r\n return this\r\n }\r\n\r\n }\r\n\r\n})\r\n\r\nSVG.Translate = SVG.invent({\r\n\r\n parent: SVG.Matrix\r\n, inherit: SVG.Transformation\r\n\r\n, create: function(source, inversed){\r\n this.constructor.apply(this, [].slice.call(arguments))\r\n }\r\n\r\n, extend: {\r\n arguments: ['transformedX', 'transformedY']\r\n , method: 'translate'\r\n }\r\n\r\n})\r\n\r\nSVG.Rotate = SVG.invent({\r\n\r\n parent: SVG.Matrix\r\n, inherit: SVG.Transformation\r\n\r\n, create: function(source, inversed){\r\n this.constructor.apply(this, [].slice.call(arguments))\r\n }\r\n\r\n, extend: {\r\n arguments: ['rotation', 'cx', 'cy']\r\n , method: 'rotate'\r\n , at: function(pos){\r\n var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy)\r\n return this.inversed ? m.inverse() : m\r\n }\r\n , undo: function(o){\r\n this._undo = o\r\n return this\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.Scale = SVG.invent({\r\n\r\n parent: SVG.Matrix\r\n, inherit: SVG.Transformation\r\n\r\n, create: function(source, inversed){\r\n this.constructor.apply(this, [].slice.call(arguments))\r\n }\r\n\r\n, extend: {\r\n arguments: ['scaleX', 'scaleY', 'cx', 'cy']\r\n , method: 'scale'\r\n }\r\n\r\n})\r\n\r\nSVG.Skew = SVG.invent({\r\n\r\n parent: SVG.Matrix\r\n, inherit: SVG.Transformation\r\n\r\n, create: function(source, inversed){\r\n this.constructor.apply(this, [].slice.call(arguments))\r\n }\r\n\r\n, extend: {\r\n arguments: ['skewX', 'skewY', 'cx', 'cy']\r\n , method: 'skew'\r\n }\r\n\r\n})\r\n\nSVG.extend(SVG.Element, {\r\n // Dynamic style generator\r\n style: function(s, v) {\r\n if (arguments.length == 0) {\r\n // get full style\r\n return this.node.style.cssText || ''\r\n\r\n } else if (arguments.length < 2) {\r\n // apply every style individually if an object is passed\r\n if (typeof s == 'object') {\r\n for (v in s) this.style(v, s[v])\r\n\r\n } else if (SVG.regex.isCss.test(s)) {\r\n // parse css string\r\n s = s.split(/\\s*;\\s*/)\r\n // filter out suffix ; and stuff like ;;\r\n .filter(function(e) { return !!e })\r\n .map(function(e){ return e.split(/\\s*:\\s*/) })\r\n\r\n // apply every definition individually\r\n while (v = s.pop()) {\r\n this.style(v[0], v[1])\r\n }\r\n } else {\r\n // act as a getter if the first and only argument is not an object\r\n return this.node.style[camelCase(s)]\r\n }\r\n\r\n } else {\r\n this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v\r\n }\r\n\r\n return this\r\n }\r\n})\nSVG.Parent = SVG.invent({\r\n // Initialize node\r\n create: function(element) {\r\n this.constructor.call(this, element)\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Element\r\n\r\n // Add class methods\r\n, extend: {\r\n // Returns all child elements\r\n children: function() {\r\n return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function(node) {\r\n return SVG.adopt(node)\r\n })\r\n }\r\n // Add given element at a position\r\n , add: function(element, i) {\r\n if (i == null)\r\n this.node.appendChild(element.node)\r\n else if (element.node != this.node.childNodes[i])\r\n this.node.insertBefore(element.node, this.node.childNodes[i])\r\n\r\n return this\r\n }\r\n // Basically does the same as `add()` but returns the added element instead\r\n , put: function(element, i) {\r\n this.add(element, i)\r\n return element\r\n }\r\n // Checks if the given element is a child\r\n , has: function(element) {\r\n return this.index(element) >= 0\r\n }\r\n // Gets index of given element\r\n , index: function(element) {\r\n return [].slice.call(this.node.childNodes).indexOf(element.node)\r\n }\r\n // Get a element at the given index\r\n , get: function(i) {\r\n return SVG.adopt(this.node.childNodes[i])\r\n }\r\n // Get first child\r\n , first: function() {\r\n return this.get(0)\r\n }\r\n // Get the last child\r\n , last: function() {\r\n return this.get(this.node.childNodes.length - 1)\r\n }\r\n // Iterates over all children and invokes a given block\r\n , each: function(block, deep) {\r\n var i, il\r\n , children = this.children()\r\n\r\n for (i = 0, il = children.length; i < il; i++) {\r\n if (children[i] instanceof SVG.Element)\r\n block.apply(children[i], [i, children])\r\n\r\n if (deep && (children[i] instanceof SVG.Container))\r\n children[i].each(block, deep)\r\n }\r\n\r\n return this\r\n }\r\n // Remove a given child\r\n , removeElement: function(element) {\r\n this.node.removeChild(element.node)\r\n\r\n return this\r\n }\r\n // Remove all elements in this container\r\n , clear: function() {\r\n // remove children\r\n while(this.node.hasChildNodes())\r\n this.node.removeChild(this.node.lastChild)\r\n\r\n // remove defs reference\r\n delete this._defs\r\n\r\n return this\r\n }\r\n , // Get defs\r\n defs: function() {\r\n return this.doc().defs()\r\n }\r\n }\r\n\r\n})\r\n\nSVG.extend(SVG.Parent, {\r\n\r\n ungroup: function(parent, depth) {\r\n if(depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this\r\n\r\n parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent))\r\n depth = depth || Infinity\r\n\r\n this.each(function(){\r\n if(this instanceof SVG.Defs) return this\r\n if(this instanceof SVG.Parent) return this.ungroup(parent, depth-1)\r\n return this.toParent(parent)\r\n })\r\n\r\n this.node.firstChild || this.remove()\r\n\r\n return this\r\n },\r\n\r\n flatten: function(parent, depth) {\r\n return this.ungroup(parent, depth)\r\n }\r\n\r\n})\nSVG.Container = SVG.invent({\r\n // Initialize node\r\n create: function(element) {\r\n this.constructor.call(this, element)\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Parent\r\n\r\n})\n\r\nSVG.ViewBox = SVG.invent({\r\n\r\n create: function(source) {\r\n var i, base = [0, 0, 0, 0]\r\n\r\n var x, y, width, height, box, view, we, he\r\n , wm = 1 // width multiplier\r\n , hm = 1 // height multiplier\r\n , reg = /[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?/gi\r\n\r\n if(source instanceof SVG.Element){\r\n\r\n we = source\r\n he = source\r\n view = (source.attr('viewBox') || '').match(reg)\r\n box = source.bbox\r\n\r\n // get dimensions of current node\r\n width = new SVG.Number(source.width())\r\n height = new SVG.Number(source.height())\r\n\r\n // find nearest non-percentual dimensions\r\n while (width.unit == '%') {\r\n wm *= width.value\r\n width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width())\r\n we = we.parent()\r\n }\r\n while (height.unit == '%') {\r\n hm *= height.value\r\n height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height())\r\n he = he.parent()\r\n }\r\n\r\n // ensure defaults\r\n this.x = 0\r\n this.y = 0\r\n this.width = width * wm\r\n this.height = height * hm\r\n this.zoom = 1\r\n\r\n if (view) {\r\n // get width and height from viewbox\r\n x = parseFloat(view[0])\r\n y = parseFloat(view[1])\r\n width = parseFloat(view[2])\r\n height = parseFloat(view[3])\r\n\r\n // calculate zoom accoring to viewbox\r\n this.zoom = ((this.width / this.height) > (width / height)) ?\r\n this.height / height :\r\n this.width / width\r\n\r\n // calculate real pixel dimensions on parent SVG.Doc element\r\n this.x = x\r\n this.y = y\r\n this.width = width\r\n this.height = height\r\n\r\n }\r\n\r\n }else{\r\n\r\n // ensure source as object\r\n source = typeof source === 'string' ?\r\n source.match(reg).map(function(el){ return parseFloat(el) }) :\r\n Array.isArray(source) ?\r\n source :\r\n typeof source == 'object' ?\r\n [source.x, source.y, source.width, source.height] :\r\n arguments.length == 4 ?\r\n [].slice.call(arguments) :\r\n base\r\n\r\n this.x = source[0]\r\n this.y = source[1]\r\n this.width = source[2]\r\n this.height = source[3]\r\n }\r\n\r\n\r\n }\r\n\r\n, extend: {\r\n\r\n toString: function() {\r\n return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height\r\n }\r\n , morph: function(x, y, width, height){\r\n this.destination = new SVG.ViewBox(x, y, width, height)\r\n return this\r\n }\r\n\r\n , at: function(pos) {\r\n\r\n if(!this.destination) return this\r\n\r\n return new SVG.ViewBox([\r\n this.x + (this.destination.x - this.x) * pos\r\n , this.y + (this.destination.y - this.y) * pos\r\n , this.width + (this.destination.width - this.width) * pos\r\n , this.height + (this.destination.height - this.height) * pos\r\n ])\r\n\r\n }\r\n\r\n }\r\n\r\n // Define parent\r\n, parent: SVG.Container\r\n\r\n // Add parent method\r\n, construct: {\r\n\r\n // get/set viewbox\r\n viewbox: function(x, y, width, height) {\r\n if (arguments.length == 0)\r\n // act as a getter if there are no arguments\r\n return new SVG.ViewBox(this)\r\n\r\n // otherwise act as a setter\r\n return this.attr('viewBox', new SVG.ViewBox(x, y, width, height))\r\n }\r\n\r\n }\r\n\r\n})\n// Add events to elements\r\n\r\n;[ 'click',\r\n 'dblclick',\r\n 'mousedown',\r\n 'mouseup',\r\n 'mouseover',\r\n 'mouseout',\r\n 'mousemove',\r\n 'mouseenter',\r\n 'mouseleave',\r\n 'touchstart',\r\n 'touchmove',\r\n 'touchleave',\r\n 'touchend',\r\n 'touchcancel' ].forEach(function (event) {\r\n // add event to SVG.Element\r\n SVG.Element.prototype[event] = function (f) {\r\n // bind event to element rather than element node\r\n if (f == null) {\r\n SVG.off(this, event)\r\n } else {\r\n SVG.on(this, event, f)\r\n }\r\n return this\r\n }\r\n })\r\n\r\nSVG.listenerId = 0\r\n\r\n// Add event binder in the SVG namespace\r\nSVG.on = function (node, events, listener, binding, options) {\r\n var l = listener.bind(binding || node)\r\n var n = node instanceof SVG.Element ? node.node : node\r\n\r\n // ensure instance object for nodes which are not adopted\r\n n.instance = n.instance || {_events: {}}\r\n\r\n var bag = n.instance._events\r\n\r\n // add id to listener\r\n if (!listener._svgjsListenerId) { listener._svgjsListenerId = ++SVG.listenerId }\r\n\r\n events.split(SVG.regex.delimiter).forEach(function (event) {\r\n var ev = event.split('.')[0]\r\n var ns = event.split('.')[1] || '*'\r\n\r\n // ensure valid object\r\n bag[ev] = bag[ev] || {}\r\n bag[ev][ns] = bag[ev][ns] || {}\r\n\r\n // reference listener\r\n bag[ev][ns][listener._svgjsListenerId] = l\r\n\r\n // add listener\r\n n.addEventListener(ev, l, options || false)\r\n })\r\n}\r\n\r\n// Add event unbinder in the SVG namespace\r\nSVG.off = function (node, events, listener, options) {\r\n var n = node instanceof SVG.Element ? node.node : node\r\n if (!n.instance) return\r\n\r\n // listener can be a function or a number\r\n if (typeof listener === 'function') {\r\n listener = listener._svgjsListenerId\r\n if (!listener) return\r\n }\r\n\r\n var bag = n.instance._events\r\n\r\n ;(events || '').split(SVG.regex.delimiter).forEach(function (event) {\r\n var ev = event && event.split('.')[0]\r\n var ns = event && event.split('.')[1]\r\n var namespace, l\r\n\r\n if (listener) {\r\n // remove listener reference\r\n if (bag[ev] && bag[ev][ns || '*']) {\r\n // removeListener\r\n n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false)\r\n\r\n delete bag[ev][ns || '*'][listener]\r\n }\r\n } else if (ev && ns) {\r\n // remove all listeners for a namespaced event\r\n if (bag[ev] && bag[ev][ns]) {\r\n for (l in bag[ev][ns]) { SVG.off(n, [ev, ns].join('.'), l) }\r\n\r\n delete bag[ev][ns]\r\n }\r\n } else if (ns) {\r\n // remove all listeners for a specific namespace\r\n for (event in bag) {\r\n for (namespace in bag[event]) {\r\n if (ns === namespace) { SVG.off(n, [event, ns].join('.')) }\r\n }\r\n }\r\n } else if (ev) {\r\n // remove all listeners for the event\r\n if (bag[ev]) {\r\n for (namespace in bag[ev]) { SVG.off(n, [ev, namespace].join('.')) }\r\n\r\n delete bag[ev]\r\n }\r\n } else {\r\n // remove all listeners on a given node\r\n for (event in bag) { SVG.off(n, event) }\r\n\r\n n.instance._events = {}\r\n }\r\n })\r\n}\r\n\r\nSVG.extend(SVG.Element, {\r\n // Bind given event to listener\r\n on: function (event, listener, binding, options) {\r\n SVG.on(this, event, listener, binding, options)\r\n return this\r\n },\r\n // Unbind event from listener\r\n off: function (event, listener) {\r\n SVG.off(this.node, event, listener)\r\n return this\r\n },\r\n fire: function (event, data) {\r\n // Dispatch event\r\n if (event instanceof window.Event) {\r\n this.node.dispatchEvent(event)\r\n } else {\r\n this.node.dispatchEvent(event = new SVG.CustomEvent(event, {detail: data, cancelable: true}))\r\n }\r\n this._event = event\r\n return this\r\n },\r\n event: function() {\r\n return this._event\r\n }\r\n})\r\n\n\r\nSVG.Defs = SVG.invent({\r\n // Initialize node\r\n create: 'defs'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n})\nSVG.G = SVG.invent({\r\n // Initialize node\r\n create: 'g'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Move over x-axis\r\n x: function(x) {\r\n return x == null ? this.transform('x') : this.transform({ x: x - this.x() }, true)\r\n }\r\n // Move over y-axis\r\n , y: function(y) {\r\n return y == null ? this.transform('y') : this.transform({ y: y - this.y() }, true)\r\n }\r\n // Move by center over x-axis\r\n , cx: function(x) {\r\n return x == null ? this.gbox().cx : this.x(x - this.gbox().width / 2)\r\n }\r\n // Move by center over y-axis\r\n , cy: function(y) {\r\n return y == null ? this.gbox().cy : this.y(y - this.gbox().height / 2)\r\n }\r\n , gbox: function() {\r\n\r\n var bbox = this.bbox()\r\n , trans = this.transform()\r\n\r\n bbox.x += trans.x\r\n bbox.x2 += trans.x\r\n bbox.cx += trans.x\r\n\r\n bbox.y += trans.y\r\n bbox.y2 += trans.y\r\n bbox.cy += trans.y\r\n\r\n return bbox\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a group element\r\n group: function() {\r\n return this.put(new SVG.G)\r\n }\r\n }\r\n})\r\n\nSVG.Doc = SVG.invent({\r\n // Initialize node\r\n create: function(element) {\r\n if (element) {\r\n // ensure the presence of a dom element\r\n element = typeof element == 'string' ?\r\n document.getElementById(element) :\r\n element\r\n\r\n // If the target is an svg element, use that element as the main wrapper.\r\n // This allows svg.js to work with svg documents as well.\r\n if (element.nodeName == 'svg') {\r\n this.constructor.call(this, element)\r\n } else {\r\n this.constructor.call(this, SVG.create('svg'))\r\n element.appendChild(this.node)\r\n this.size('100%', '100%')\r\n }\r\n\r\n // set svg element attributes and ensure defs node\r\n this.namespace().defs()\r\n }\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Add namespaces\r\n namespace: function() {\r\n return this\r\n .attr({ xmlns: SVG.ns, version: '1.1' })\r\n .attr('xmlns:xlink', SVG.xlink, SVG.xmlns)\r\n .attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns)\r\n }\r\n // Creates and returns defs element\r\n , defs: function() {\r\n if (!this._defs) {\r\n var defs\r\n\r\n // Find or create a defs element in this instance\r\n if (defs = this.node.getElementsByTagName('defs')[0])\r\n this._defs = SVG.adopt(defs)\r\n else\r\n this._defs = new SVG.Defs\r\n\r\n // Make sure the defs node is at the end of the stack\r\n this.node.appendChild(this._defs.node)\r\n }\r\n\r\n return this._defs\r\n }\r\n // custom parent method\r\n , parent: function() {\r\n if(!this.node.parentNode || this.node.parentNode.nodeName == '#document' || this.node.parentNode.nodeName == '#document-fragment') return null\r\n return this.node.parentNode\r\n }\r\n // Fix for possible sub-pixel offset. See:\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=608812\r\n , spof: function() {\r\n var pos = this.node.getScreenCTM()\r\n\r\n if (pos)\r\n this\r\n .style('left', (-pos.e % 1) + 'px')\r\n .style('top', (-pos.f % 1) + 'px')\r\n\r\n return this\r\n }\r\n\r\n // Removes the doc from the DOM\r\n , remove: function() {\r\n if(this.parent()) {\r\n this.parent().removeChild(this.node)\r\n }\r\n\r\n return this\r\n }\r\n , clear: function() {\r\n // remove children\r\n while(this.node.hasChildNodes())\r\n this.node.removeChild(this.node.lastChild)\r\n\r\n // remove defs reference\r\n delete this._defs\r\n\r\n // add back parser\r\n if(!SVG.parser.draw.parentNode)\r\n this.node.appendChild(SVG.parser.draw)\r\n\r\n return this\r\n }\r\n , clone: function (parent) {\r\n // write dom data to the dom so the clone can pickup the data\r\n this.writeDataToDom()\r\n\r\n // get reference to node\r\n var node = this.node\r\n\r\n // clone element and assign new id\r\n var clone = assignNewId(node.cloneNode(true))\r\n\r\n // insert the clone in the given parent or after myself\r\n if(parent) {\r\n (parent.node || parent).appendChild(clone.node)\r\n } else {\r\n node.parentNode.insertBefore(clone.node, node.nextSibling)\r\n }\r\n\r\n return clone\r\n }\r\n }\r\n\r\n})\r\n\n// ### This module adds backward / forward functionality to elements.\r\n\r\n//\r\nSVG.extend(SVG.Element, {\r\n // Get all siblings, including myself\r\n siblings: function() {\r\n return this.parent().children()\r\n }\r\n // Get the curent position siblings\r\n, position: function() {\r\n return this.parent().index(this)\r\n }\r\n // Get the next element (will return null if there is none)\r\n, next: function() {\r\n return this.siblings()[this.position() + 1]\r\n }\r\n // Get the next element (will return null if there is none)\r\n, previous: function() {\r\n return this.siblings()[this.position() - 1]\r\n }\r\n // Send given element one step forward\r\n, forward: function() {\r\n var i = this.position() + 1\r\n , p = this.parent()\r\n\r\n // move node one step forward\r\n p.removeElement(this).add(this, i)\r\n\r\n // make sure defs node is always at the top\r\n if (p instanceof SVG.Doc)\r\n p.node.appendChild(p.defs().node)\r\n\r\n return this\r\n }\r\n // Send given element one step backward\r\n, backward: function() {\r\n var i = this.position()\r\n\r\n if (i > 0)\r\n this.parent().removeElement(this).add(this, i - 1)\r\n\r\n return this\r\n }\r\n // Send given element all the way to the front\r\n, front: function() {\r\n var p = this.parent()\r\n\r\n // Move node forward\r\n p.node.appendChild(this.node)\r\n\r\n // Make sure defs node is always at the top\r\n if (p instanceof SVG.Doc)\r\n p.node.appendChild(p.defs().node)\r\n\r\n return this\r\n }\r\n // Send given element all the way to the back\r\n, back: function() {\r\n if (this.position() > 0)\r\n this.parent().removeElement(this).add(this, 0)\r\n\r\n return this\r\n }\r\n // Inserts a given element before the targeted element\r\n, before: function(element) {\r\n element.remove()\r\n\r\n var i = this.position()\r\n\r\n this.parent().add(element, i)\r\n\r\n return this\r\n }\r\n // Insters a given element after the targeted element\r\n, after: function(element) {\r\n element.remove()\r\n\r\n var i = this.position()\r\n\r\n this.parent().add(element, i + 1)\r\n\r\n return this\r\n }\r\n\r\n})\nSVG.Mask = SVG.invent({\r\n // Initialize node\r\n create: function() {\r\n this.constructor.call(this, SVG.create('mask'))\r\n\r\n // keep references to masked elements\r\n this.targets = []\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Unmask all masked elements and remove itself\r\n remove: function() {\r\n // unmask all targets\r\n for (var i = this.targets.length - 1; i >= 0; i--)\r\n if (this.targets[i])\r\n this.targets[i].unmask()\r\n this.targets = []\r\n\r\n // remove mask from parent\r\n SVG.Element.prototype.remove.call(this)\r\n\r\n return this\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create masking element\r\n mask: function() {\r\n return this.defs().put(new SVG.Mask)\r\n }\r\n }\r\n})\r\n\r\n\r\nSVG.extend(SVG.Element, {\r\n // Distribute mask to svg element\r\n maskWith: function(element) {\r\n // use given mask or create a new one\r\n this.masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element)\r\n\r\n // store reverence on self in mask\r\n this.masker.targets.push(this)\r\n\r\n // apply mask\r\n return this.attr('mask', 'url(\"#' + this.masker.attr('id') + '\")')\r\n }\r\n // Unmask element\r\n, unmask: function() {\r\n delete this.masker\r\n return this.attr('mask', null)\r\n }\r\n\r\n})\r\n\nSVG.ClipPath = SVG.invent({\r\n // Initialize node\r\n create: function() {\r\n this.constructor.call(this, SVG.create('clipPath'))\r\n\r\n // keep references to clipped elements\r\n this.targets = []\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Unclip all clipped elements and remove itself\r\n remove: function() {\r\n // unclip all targets\r\n for (var i = this.targets.length - 1; i >= 0; i--)\r\n if (this.targets[i])\r\n this.targets[i].unclip()\r\n this.targets = []\r\n\r\n // remove clipPath from parent\r\n this.parent().removeElement(this)\r\n\r\n return this\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create clipping element\r\n clip: function() {\r\n return this.defs().put(new SVG.ClipPath)\r\n }\r\n }\r\n})\r\n\r\n//\r\nSVG.extend(SVG.Element, {\r\n // Distribute clipPath to svg element\r\n clipWith: function(element) {\r\n // use given clip or create a new one\r\n this.clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element)\r\n\r\n // store reverence on self in mask\r\n this.clipper.targets.push(this)\r\n\r\n // apply mask\r\n return this.attr('clip-path', 'url(\"#' + this.clipper.attr('id') + '\")')\r\n }\r\n // Unclip element\r\n, unclip: function() {\r\n delete this.clipper\r\n return this.attr('clip-path', null)\r\n }\r\n\r\n})\nSVG.Gradient = SVG.invent({\r\n // Initialize node\r\n create: function(type) {\r\n this.constructor.call(this, SVG.create(type + 'Gradient'))\r\n\r\n // store type\r\n this.type = type\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Add a color stop\r\n at: function(offset, color, opacity) {\r\n return this.put(new SVG.Stop).update(offset, color, opacity)\r\n }\r\n // Update gradient\r\n , update: function(block) {\r\n // remove all stops\r\n this.clear()\r\n\r\n // invoke passed block\r\n if (typeof block == 'function')\r\n block.call(this, this)\r\n\r\n return this\r\n }\r\n // Return the fill id\r\n , fill: function() {\r\n return 'url(#' + this.id() + ')'\r\n }\r\n // Alias string convertion to fill\r\n , toString: function() {\r\n return this.fill()\r\n }\r\n // custom attr to handle transform\r\n , attr: function(a, b, c) {\r\n if(a == 'transform') a = 'gradientTransform'\r\n return SVG.Container.prototype.attr.call(this, a, b, c)\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create gradient element in defs\r\n gradient: function(type, block) {\r\n return this.defs().gradient(type, block)\r\n }\r\n }\r\n})\r\n\r\n// Add animatable methods to both gradient and fx module\r\nSVG.extend(SVG.Gradient, SVG.FX, {\r\n // From position\r\n from: function(x, y) {\r\n return (this._target || this).type == 'radial' ?\r\n this.attr({ fx: new SVG.Number(x), fy: new SVG.Number(y) }) :\r\n this.attr({ x1: new SVG.Number(x), y1: new SVG.Number(y) })\r\n }\r\n // To position\r\n, to: function(x, y) {\r\n return (this._target || this).type == 'radial' ?\r\n this.attr({ cx: new SVG.Number(x), cy: new SVG.Number(y) }) :\r\n this.attr({ x2: new SVG.Number(x), y2: new SVG.Number(y) })\r\n }\r\n})\r\n\r\n// Base gradient generation\r\nSVG.extend(SVG.Defs, {\r\n // define gradient\r\n gradient: function(type, block) {\r\n return this.put(new SVG.Gradient(type)).update(block)\r\n }\r\n\r\n})\r\n\r\nSVG.Stop = SVG.invent({\r\n // Initialize node\r\n create: 'stop'\r\n\r\n // Inherit from\r\n, inherit: SVG.Element\r\n\r\n // Add class methods\r\n, extend: {\r\n // add color stops\r\n update: function(o) {\r\n if (typeof o == 'number' || o instanceof SVG.Number) {\r\n o = {\r\n offset: arguments[0]\r\n , color: arguments[1]\r\n , opacity: arguments[2]\r\n }\r\n }\r\n\r\n // set attributes\r\n if (o.opacity != null) this.attr('stop-opacity', o.opacity)\r\n if (o.color != null) this.attr('stop-color', o.color)\r\n if (o.offset != null) this.attr('offset', new SVG.Number(o.offset))\r\n\r\n return this\r\n }\r\n }\r\n\r\n})\r\n\nSVG.Pattern = SVG.invent({\r\n // Initialize node\r\n create: 'pattern'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Return the fill id\r\n fill: function() {\r\n return 'url(#' + this.id() + ')'\r\n }\r\n // Update pattern by rebuilding\r\n , update: function(block) {\r\n // remove content\r\n this.clear()\r\n\r\n // invoke passed block\r\n if (typeof block == 'function')\r\n block.call(this, this)\r\n\r\n return this\r\n }\r\n // Alias string convertion to fill\r\n , toString: function() {\r\n return this.fill()\r\n }\r\n // custom attr to handle transform\r\n , attr: function(a, b, c) {\r\n if(a == 'transform') a = 'patternTransform'\r\n return SVG.Container.prototype.attr.call(this, a, b, c)\r\n }\r\n\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create pattern element in defs\r\n pattern: function(width, height, block) {\r\n return this.defs().pattern(width, height, block)\r\n }\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Defs, {\r\n // Define gradient\r\n pattern: function(width, height, block) {\r\n return this.put(new SVG.Pattern).update(block).attr({\r\n x: 0\r\n , y: 0\r\n , width: width\r\n , height: height\r\n , patternUnits: 'userSpaceOnUse'\r\n })\r\n }\r\n\r\n})\nSVG.Shape = SVG.invent({\r\n // Initialize node\r\n create: function(element) {\r\n this.constructor.call(this, element)\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Element\r\n\r\n})\n\r\nSVG.Bare = SVG.invent({\r\n // Initialize\r\n create: function(element, inherit) {\r\n // construct element\r\n this.constructor.call(this, SVG.create(element))\r\n\r\n // inherit custom methods\r\n if (inherit)\r\n for (var method in inherit.prototype)\r\n if (typeof inherit.prototype[method] === 'function')\r\n this[method] = inherit.prototype[method]\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Element\r\n\r\n // Add methods\r\n, extend: {\r\n // Insert some plain text\r\n words: function(text) {\r\n // remove contents\r\n while (this.node.hasChildNodes())\r\n this.node.removeChild(this.node.lastChild)\r\n\r\n // create text node\r\n this.node.appendChild(document.createTextNode(text))\r\n\r\n return this\r\n }\r\n }\r\n})\r\n\r\n\r\nSVG.extend(SVG.Parent, {\r\n // Create an element that is not described by SVG.js\r\n element: function(element, inherit) {\r\n return this.put(new SVG.Bare(element, inherit))\r\n }\r\n})\r\n\nSVG.Symbol = SVG.invent({\r\n // Initialize node\r\n create: 'symbol'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n, construct: {\r\n // create symbol\r\n symbol: function() {\r\n return this.put(new SVG.Symbol)\r\n }\r\n }\r\n})\r\n\nSVG.Use = SVG.invent({\r\n // Initialize node\r\n create: 'use'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // Use element as a reference\r\n element: function(element, file) {\r\n // Set lined element\r\n return this.attr('href', (file || '') + '#' + element, SVG.xlink)\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a use element\r\n use: function(element, file) {\r\n return this.put(new SVG.Use).element(element, file)\r\n }\r\n }\r\n})\nSVG.Rect = SVG.invent({\r\n // Initialize node\r\n create: 'rect'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a rect element\r\n rect: function(width, height) {\r\n return this.put(new SVG.Rect()).size(width, height)\r\n }\r\n }\r\n})\nSVG.Circle = SVG.invent({\r\n // Initialize node\r\n create: 'circle'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create circle element, based on ellipse\r\n circle: function(size) {\r\n return this.put(new SVG.Circle).rx(new SVG.Number(size).divide(2)).move(0, 0)\r\n }\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Circle, SVG.FX, {\r\n // Radius x value\r\n rx: function(rx) {\r\n return this.attr('r', rx)\r\n }\r\n // Alias radius x value\r\n, ry: function(ry) {\r\n return this.rx(ry)\r\n }\r\n})\r\n\r\nSVG.Ellipse = SVG.invent({\r\n // Initialize node\r\n create: 'ellipse'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create an ellipse\r\n ellipse: function(width, height) {\r\n return this.put(new SVG.Ellipse).size(width, height).move(0, 0)\r\n }\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, {\r\n // Radius x value\r\n rx: function(rx) {\r\n return this.attr('rx', rx)\r\n }\r\n // Radius y value\r\n, ry: function(ry) {\r\n return this.attr('ry', ry)\r\n }\r\n})\r\n\r\n// Add common method\r\nSVG.extend(SVG.Circle, SVG.Ellipse, {\r\n // Move over x-axis\r\n x: function(x) {\r\n return x == null ? this.cx() - this.rx() : this.cx(x + this.rx())\r\n }\r\n // Move over y-axis\r\n , y: function(y) {\r\n return y == null ? this.cy() - this.ry() : this.cy(y + this.ry())\r\n }\r\n // Move by center over x-axis\r\n , cx: function(x) {\r\n return x == null ? this.attr('cx') : this.attr('cx', x)\r\n }\r\n // Move by center over y-axis\r\n , cy: function(y) {\r\n return y == null ? this.attr('cy') : this.attr('cy', y)\r\n }\r\n // Set width of element\r\n , width: function(width) {\r\n return width == null ? this.rx() * 2 : this.rx(new SVG.Number(width).divide(2))\r\n }\r\n // Set height of element\r\n , height: function(height) {\r\n return height == null ? this.ry() * 2 : this.ry(new SVG.Number(height).divide(2))\r\n }\r\n // Custom size function\r\n , size: function(width, height) {\r\n var p = proportionalSize(this, width, height)\r\n\r\n return this\r\n .rx(new SVG.Number(p.width).divide(2))\r\n .ry(new SVG.Number(p.height).divide(2))\r\n }\r\n})\nSVG.Line = SVG.invent({\r\n // Initialize node\r\n create: 'line'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // Get array\r\n array: function() {\r\n return new SVG.PointArray([\r\n [ this.attr('x1'), this.attr('y1') ]\r\n , [ this.attr('x2'), this.attr('y2') ]\r\n ])\r\n }\r\n // Overwrite native plot() method\r\n , plot: function(x1, y1, x2, y2) {\r\n if (x1 == null)\r\n return this.array()\r\n else if (typeof y1 !== 'undefined')\r\n x1 = { x1: x1, y1: y1, x2: x2, y2: y2 }\r\n else\r\n x1 = new SVG.PointArray(x1).toLine()\r\n\r\n return this.attr(x1)\r\n }\r\n // Move by left top corner\r\n , move: function(x, y) {\r\n return this.attr(this.array().move(x, y).toLine())\r\n }\r\n // Set element size to given width and height\r\n , size: function(width, height) {\r\n var p = proportionalSize(this, width, height)\r\n\r\n return this.attr(this.array().size(p.width, p.height).toLine())\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a line element\r\n line: function(x1, y1, x2, y2) {\r\n // make sure plot is called as a setter\r\n // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray\r\n return SVG.Line.prototype.plot.apply(\r\n this.put(new SVG.Line)\r\n , x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]\r\n )\r\n }\r\n }\r\n})\r\n\nSVG.Polyline = SVG.invent({\r\n // Initialize node\r\n create: 'polyline'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a wrapped polyline element\r\n polyline: function(p) {\r\n // make sure plot is called as a setter\r\n return this.put(new SVG.Polyline).plot(p || new SVG.PointArray)\r\n }\r\n }\r\n})\r\n\r\nSVG.Polygon = SVG.invent({\r\n // Initialize node\r\n create: 'polygon'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a wrapped polygon element\r\n polygon: function(p) {\r\n // make sure plot is called as a setter\r\n return this.put(new SVG.Polygon).plot(p || new SVG.PointArray)\r\n }\r\n }\r\n})\r\n\r\n// Add polygon-specific functions\r\nSVG.extend(SVG.Polyline, SVG.Polygon, {\r\n // Get array\r\n array: function() {\r\n return this._array || (this._array = new SVG.PointArray(this.attr('points')))\r\n }\r\n // Plot new path\r\n, plot: function(p) {\r\n return (p == null) ?\r\n this.array() :\r\n this.clear().attr('points', typeof p == 'string' ? p : (this._array = new SVG.PointArray(p)))\r\n }\r\n // Clear array cache\r\n, clear: function() {\r\n delete this._array\r\n return this\r\n }\r\n // Move by left top corner\r\n, move: function(x, y) {\r\n return this.attr('points', this.array().move(x, y))\r\n }\r\n // Set element size to given width and height\r\n, size: function(width, height) {\r\n var p = proportionalSize(this, width, height)\r\n\r\n return this.attr('points', this.array().size(p.width, p.height))\r\n }\r\n\r\n})\r\n\n// unify all point to point elements\r\nSVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, {\r\n // Define morphable array\r\n morphArray: SVG.PointArray\r\n // Move by left top corner over x-axis\r\n, x: function(x) {\r\n return x == null ? this.bbox().x : this.move(x, this.bbox().y)\r\n }\r\n // Move by left top corner over y-axis\r\n, y: function(y) {\r\n return y == null ? this.bbox().y : this.move(this.bbox().x, y)\r\n }\r\n // Set width of element\r\n, width: function(width) {\r\n var b = this.bbox()\r\n\r\n return width == null ? b.width : this.size(width, b.height)\r\n }\r\n // Set height of element\r\n, height: function(height) {\r\n var b = this.bbox()\r\n\r\n return height == null ? b.height : this.size(b.width, height)\r\n }\r\n})\nSVG.Path = SVG.invent({\r\n // Initialize node\r\n create: 'path'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // Define morphable array\r\n morphArray: SVG.PathArray\r\n // Get array\r\n , array: function() {\r\n return this._array || (this._array = new SVG.PathArray(this.attr('d')))\r\n }\r\n // Plot new path\r\n , plot: function(d) {\r\n return (d == null) ?\r\n this.array() :\r\n this.clear().attr('d', typeof d == 'string' ? d : (this._array = new SVG.PathArray(d)))\r\n }\r\n // Clear array cache\r\n , clear: function() {\r\n delete this._array\r\n return this\r\n }\r\n // Move by left top corner\r\n , move: function(x, y) {\r\n return this.attr('d', this.array().move(x, y))\r\n }\r\n // Move by left top corner over x-axis\r\n , x: function(x) {\r\n return x == null ? this.bbox().x : this.move(x, this.bbox().y)\r\n }\r\n // Move by left top corner over y-axis\r\n , y: function(y) {\r\n return y == null ? this.bbox().y : this.move(this.bbox().x, y)\r\n }\r\n // Set element size to given width and height\r\n , size: function(width, height) {\r\n var p = proportionalSize(this, width, height)\r\n\r\n return this.attr('d', this.array().size(p.width, p.height))\r\n }\r\n // Set width of element\r\n , width: function(width) {\r\n return width == null ? this.bbox().width : this.size(width, this.bbox().height)\r\n }\r\n // Set height of element\r\n , height: function(height) {\r\n return height == null ? this.bbox().height : this.size(this.bbox().width, height)\r\n }\r\n\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a wrapped path element\r\n path: function(d) {\r\n // make sure plot is called as a setter\r\n return this.put(new SVG.Path).plot(d || new SVG.PathArray)\r\n }\r\n }\r\n})\r\n\nSVG.Image = SVG.invent({\r\n // Initialize node\r\n create: 'image'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // (re)load image\r\n load: function(url) {\r\n if (!url) return this\r\n\r\n var self = this\r\n , img = new window.Image()\r\n\r\n // preload image\r\n SVG.on(img, 'load', function() {\r\n SVG.off(img)\r\n\r\n var p = self.parent(SVG.Pattern)\r\n\r\n if(p === null) return\r\n\r\n // ensure image size\r\n if (self.width() == 0 && self.height() == 0)\r\n self.size(img.width, img.height)\r\n\r\n // ensure pattern size if not set\r\n if (p && p.width() == 0 && p.height() == 0)\r\n p.size(self.width(), self.height())\r\n\r\n // callback\r\n if (typeof self._loaded === 'function')\r\n self._loaded.call(self, {\r\n width: img.width\r\n , height: img.height\r\n , ratio: img.width / img.height\r\n , url: url\r\n })\r\n })\r\n\r\n SVG.on(img, 'error', function(e){\r\n SVG.off(img)\r\n\r\n if (typeof self._error === 'function'){\r\n self._error.call(self, e)\r\n }\r\n })\r\n\r\n return this.attr('href', (img.src = this.src = url), SVG.xlink)\r\n }\r\n // Add loaded callback\r\n , loaded: function(loaded) {\r\n this._loaded = loaded\r\n return this\r\n }\r\n\r\n , error: function(error) {\r\n this._error = error\r\n return this\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // create image element, load image and set its size\r\n image: function(source, width, height) {\r\n return this.put(new SVG.Image).load(source).size(width || 0, height || width || 0)\r\n }\r\n }\r\n\r\n})\nSVG.Text = SVG.invent({\r\n // Initialize node\r\n create: function() {\r\n this.constructor.call(this, SVG.create('text'))\r\n\r\n this.dom.leading = new SVG.Number(1.3) // store leading value for rebuilding\r\n this._rebuild = true // enable automatic updating of dy values\r\n this._build = false // disable build mode for adding multiple lines\r\n\r\n // set default font\r\n this.attr('font-family', SVG.defaults.attrs['font-family'])\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // Move over x-axis\r\n x: function(x) {\r\n // act as getter\r\n if (x == null)\r\n return this.attr('x')\r\n\r\n return this.attr('x', x)\r\n }\r\n // Move over y-axis\r\n , y: function(y) {\r\n var oy = this.attr('y')\r\n , o = typeof oy === 'number' ? oy - this.bbox().y : 0\r\n\r\n // act as getter\r\n if (y == null)\r\n return typeof oy === 'number' ? oy - o : oy\r\n\r\n return this.attr('y', typeof y.valueOf() === 'number' ? y + o : y)\r\n }\r\n // Move center over x-axis\r\n , cx: function(x) {\r\n return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2)\r\n }\r\n // Move center over y-axis\r\n , cy: function(y) {\r\n return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2)\r\n }\r\n // Set the text content\r\n , text: function(text) {\r\n // act as getter\r\n if (typeof text === 'undefined'){\r\n var text = ''\r\n var children = this.node.childNodes\r\n for(var i = 0, len = children.length; i < len; ++i){\r\n\r\n // add newline if its not the first child and newLined is set to true\r\n if(i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true){\r\n text += '\\n'\r\n }\r\n\r\n // add content of this node\r\n text += children[i].textContent\r\n }\r\n\r\n return text\r\n }\r\n\r\n // remove existing content\r\n this.clear().build(true)\r\n\r\n if (typeof text === 'function') {\r\n // call block\r\n text.call(this, this)\r\n\r\n } else {\r\n // store text and make sure text is not blank\r\n text = text.split('\\n')\r\n\r\n // build new lines\r\n for (var i = 0, il = text.length; i < il; i++)\r\n this.tspan(text[i]).newLine()\r\n }\r\n\r\n // disable build mode and rebuild lines\r\n return this.build(false).rebuild()\r\n }\r\n // Set font size\r\n , size: function(size) {\r\n return this.attr('font-size', size).rebuild()\r\n }\r\n // Set / get leading\r\n , leading: function(value) {\r\n // act as getter\r\n if (value == null)\r\n return this.dom.leading\r\n\r\n // act as setter\r\n this.dom.leading = new SVG.Number(value)\r\n\r\n return this.rebuild()\r\n }\r\n // Get all the first level lines\r\n , lines: function() {\r\n var node = (this.textPath && this.textPath() || this).node\r\n\r\n // filter tspans and map them to SVG.js instances\r\n var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function(el){\r\n return SVG.adopt(el)\r\n })\r\n\r\n // return an instance of SVG.set\r\n return new SVG.Set(lines)\r\n }\r\n // Rebuild appearance type\r\n , rebuild: function(rebuild) {\r\n // store new rebuild flag if given\r\n if (typeof rebuild == 'boolean')\r\n this._rebuild = rebuild\r\n\r\n // define position of all lines\r\n if (this._rebuild) {\r\n var self = this\r\n , blankLineOffset = 0\r\n , dy = this.dom.leading * new SVG.Number(this.attr('font-size'))\r\n\r\n this.lines().each(function() {\r\n if (this.dom.newLined) {\r\n if (!self.textPath())\r\n this.attr('x', self.attr('x'))\r\n if(this.text() == '\\n') {\r\n blankLineOffset += dy\r\n }else{\r\n this.attr('dy', dy + blankLineOffset)\r\n blankLineOffset = 0\r\n }\r\n }\r\n })\r\n\r\n this.fire('rebuild')\r\n }\r\n\r\n return this\r\n }\r\n // Enable / disable build mode\r\n , build: function(build) {\r\n this._build = !!build\r\n return this\r\n }\r\n // overwrite method from parent to set data properly\r\n , setData: function(o){\r\n this.dom = o\r\n this.dom.leading = new SVG.Number(o.leading || 1.3)\r\n return this\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create text element\r\n text: function(text) {\r\n return this.put(new SVG.Text).text(text)\r\n }\r\n // Create plain text element\r\n , plain: function(text) {\r\n return this.put(new SVG.Text).plain(text)\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.Tspan = SVG.invent({\r\n // Initialize node\r\n create: 'tspan'\r\n\r\n // Inherit from\r\n, inherit: SVG.Shape\r\n\r\n // Add class methods\r\n, extend: {\r\n // Set text content\r\n text: function(text) {\r\n if(text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '')\r\n\r\n typeof text === 'function' ? text.call(this, this) : this.plain(text)\r\n\r\n return this\r\n }\r\n // Shortcut dx\r\n , dx: function(dx) {\r\n return this.attr('dx', dx)\r\n }\r\n // Shortcut dy\r\n , dy: function(dy) {\r\n return this.attr('dy', dy)\r\n }\r\n // Create new line\r\n , newLine: function() {\r\n // fetch text parent\r\n var t = this.parent(SVG.Text)\r\n\r\n // mark new line\r\n this.dom.newLined = true\r\n\r\n // apply new hy¡n\r\n return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x())\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.extend(SVG.Text, SVG.Tspan, {\r\n // Create plain text node\r\n plain: function(text) {\r\n // clear if build mode is disabled\r\n if (this._build === false)\r\n this.clear()\r\n\r\n // create text node\r\n this.node.appendChild(document.createTextNode(text))\r\n\r\n return this\r\n }\r\n // Create a tspan\r\n, tspan: function(text) {\r\n var node = (this.textPath && this.textPath() || this).node\r\n , tspan = new SVG.Tspan\r\n\r\n // clear if build mode is disabled\r\n if (this._build === false)\r\n this.clear()\r\n\r\n // add new tspan\r\n node.appendChild(tspan.node)\r\n\r\n return tspan.text(text)\r\n }\r\n // Clear all lines\r\n, clear: function() {\r\n var node = (this.textPath && this.textPath() || this).node\r\n\r\n // remove existing child nodes\r\n while (node.hasChildNodes())\r\n node.removeChild(node.lastChild)\r\n\r\n return this\r\n }\r\n // Get length of text element\r\n, length: function() {\r\n return this.node.getComputedTextLength()\r\n }\r\n})\r\n\nSVG.TextPath = SVG.invent({\r\n // Initialize node\r\n create: 'textPath'\r\n\r\n // Inherit from\r\n, inherit: SVG.Parent\r\n\r\n // Define parent class\r\n, parent: SVG.Text\r\n\r\n // Add parent method\r\n, construct: {\r\n morphArray: SVG.PathArray\r\n // Create path for text to run on\r\n , path: function(d) {\r\n // create textPath element\r\n var path = new SVG.TextPath\r\n , track = this.doc().defs().path(d)\r\n\r\n // move lines to textpath\r\n while (this.node.hasChildNodes())\r\n path.node.appendChild(this.node.firstChild)\r\n\r\n // add textPath element as child node\r\n this.node.appendChild(path.node)\r\n\r\n // link textPath to path and add content\r\n path.attr('href', '#' + track, SVG.xlink)\r\n\r\n return this\r\n }\r\n // return the array of the path track element\r\n , array: function() {\r\n var track = this.track()\r\n\r\n return track ? track.array() : null\r\n }\r\n // Plot path if any\r\n , plot: function(d) {\r\n var track = this.track()\r\n , pathArray = null\r\n\r\n if (track) {\r\n pathArray = track.plot(d)\r\n }\r\n\r\n return (d == null) ? pathArray : this\r\n }\r\n // Get the path track element\r\n , track: function() {\r\n var path = this.textPath()\r\n\r\n if (path)\r\n return path.reference('href')\r\n }\r\n // Get the textPath child\r\n , textPath: function() {\r\n if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath')\r\n return SVG.adopt(this.node.firstChild)\r\n }\r\n }\r\n})\r\n\nSVG.Nested = SVG.invent({\r\n // Initialize node\r\n create: function() {\r\n this.constructor.call(this, SVG.create('svg'))\r\n\r\n this.style('overflow', 'visible')\r\n }\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create nested svg document\r\n nested: function() {\r\n return this.put(new SVG.Nested)\r\n }\r\n }\r\n})\nSVG.A = SVG.invent({\r\n // Initialize node\r\n create: 'a'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Link url\r\n to: function(url) {\r\n return this.attr('href', url, SVG.xlink)\r\n }\r\n // Link show attribute\r\n , show: function(target) {\r\n return this.attr('show', target, SVG.xlink)\r\n }\r\n // Link target attribute\r\n , target: function(target) {\r\n return this.attr('target', target)\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a hyperlink element\r\n link: function(url) {\r\n return this.put(new SVG.A).to(url)\r\n }\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Element, {\r\n // Create a hyperlink element\r\n linkTo: function(url) {\r\n var link = new SVG.A\r\n\r\n if (typeof url == 'function')\r\n url.call(link, link)\r\n else\r\n link.to(url)\r\n\r\n return this.parent().put(link).put(this)\r\n }\r\n\r\n})\nSVG.Marker = SVG.invent({\r\n // Initialize node\r\n create: 'marker'\r\n\r\n // Inherit from\r\n, inherit: SVG.Container\r\n\r\n // Add class methods\r\n, extend: {\r\n // Set width of element\r\n width: function(width) {\r\n return this.attr('markerWidth', width)\r\n }\r\n // Set height of element\r\n , height: function(height) {\r\n return this.attr('markerHeight', height)\r\n }\r\n // Set marker refX and refY\r\n , ref: function(x, y) {\r\n return this.attr('refX', x).attr('refY', y)\r\n }\r\n // Update marker\r\n , update: function(block) {\r\n // remove all content\r\n this.clear()\r\n\r\n // invoke passed block\r\n if (typeof block == 'function')\r\n block.call(this, this)\r\n\r\n return this\r\n }\r\n // Return the fill id\r\n , toString: function() {\r\n return 'url(#' + this.id() + ')'\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n marker: function(width, height, block) {\r\n // Create marker element in defs\r\n return this.defs().marker(width, height, block)\r\n }\r\n }\r\n\r\n})\r\n\r\nSVG.extend(SVG.Defs, {\r\n // Create marker\r\n marker: function(width, height, block) {\r\n // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\r\n return this.put(new SVG.Marker)\r\n .size(width, height)\r\n .ref(width / 2, height / 2)\r\n .viewbox(0, 0, width, height)\r\n .attr('orient', 'auto')\r\n .update(block)\r\n }\r\n\r\n})\r\n\r\nSVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path, {\r\n // Create and attach markers\r\n marker: function(marker, width, height, block) {\r\n var attr = ['marker']\r\n\r\n // Build attribute name\r\n if (marker != 'all') attr.push(marker)\r\n attr = attr.join('-')\r\n\r\n // Set marker attribute\r\n marker = arguments[1] instanceof SVG.Marker ?\r\n arguments[1] :\r\n this.doc().marker(width, height, block)\r\n\r\n return this.attr(attr, marker)\r\n }\r\n\r\n})\n// Define list of available attributes for stroke and fill\r\nvar sugar = {\r\n stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset']\r\n, fill: ['color', 'opacity', 'rule']\r\n, prefix: function(t, a) {\r\n return a == 'color' ? t : t + '-' + a\r\n }\r\n}\r\n\r\n// Add sugar for fill and stroke\r\n;['fill', 'stroke'].forEach(function(m) {\r\n var i, extension = {}\r\n\r\n extension[m] = function(o) {\r\n if (typeof o == 'undefined')\r\n return this\r\n if (typeof o == 'string' || SVG.Color.isRgb(o) || (o && typeof o.fill === 'function'))\r\n this.attr(m, o)\r\n\r\n else\r\n // set all attributes from sugar.fill and sugar.stroke list\r\n for (i = sugar[m].length - 1; i >= 0; i--)\r\n if (o[sugar[m][i]] != null)\r\n this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]])\r\n\r\n return this\r\n }\r\n\r\n SVG.extend(SVG.Element, SVG.FX, extension)\r\n\r\n})\r\n\r\nSVG.extend(SVG.Element, SVG.FX, {\r\n // Map rotation to transform\r\n rotate: function(d, cx, cy) {\r\n return this.transform({ rotation: d, cx: cx, cy: cy })\r\n }\r\n // Map skew to transform\r\n, skew: function(x, y, cx, cy) {\r\n return arguments.length == 1 || arguments.length == 3 ?\r\n this.transform({ skew: x, cx: y, cy: cx }) :\r\n this.transform({ skewX: x, skewY: y, cx: cx, cy: cy })\r\n }\r\n // Map scale to transform\r\n, scale: function(x, y, cx, cy) {\r\n return arguments.length == 1 || arguments.length == 3 ?\r\n this.transform({ scale: x, cx: y, cy: cx }) :\r\n this.transform({ scaleX: x, scaleY: y, cx: cx, cy: cy })\r\n }\r\n // Map translate to transform\r\n, translate: function(x, y) {\r\n return this.transform({ x: x, y: y })\r\n }\r\n // Map flip to transform\r\n, flip: function(a, o) {\r\n o = typeof a == 'number' ? a : o\r\n return this.transform({ flip: a || 'both', offset: o })\r\n }\r\n // Map matrix to transform\r\n, matrix: function(m) {\r\n return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m))\r\n }\r\n // Opacity\r\n, opacity: function(value) {\r\n return this.attr('opacity', value)\r\n }\r\n // Relative move over x axis\r\n, dx: function(x) {\r\n return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true)\r\n }\r\n // Relative move over y axis\r\n, dy: function(y) {\r\n return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true)\r\n }\r\n // Relative move over x and y axes\r\n, dmove: function(x, y) {\r\n return this.dx(x).dy(y)\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.FX, {\r\n // Add x and y radius\r\n radius: function(x, y) {\r\n var type = (this._target || this).type;\r\n return type == 'radial' || type == 'circle' ?\r\n this.attr('r', new SVG.Number(x)) :\r\n this.rx(x).ry(y == null ? x : y)\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Path, {\r\n // Get path length\r\n length: function() {\r\n return this.node.getTotalLength()\r\n }\r\n // Get point at length\r\n, pointAt: function(length) {\r\n return this.node.getPointAtLength(length)\r\n }\r\n})\r\n\r\nSVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, {\r\n // Set font\r\n font: function(a, v) {\r\n if (typeof a == 'object') {\r\n for (v in a) this.font(v, a[v])\r\n }\r\n\r\n return a == 'leading' ?\r\n this.leading(v) :\r\n a == 'anchor' ?\r\n this.attr('text-anchor', v) :\r\n a == 'size' || a == 'family' || a == 'weight' || a == 'stretch' || a == 'variant' || a == 'style' ?\r\n this.attr('font-'+ a, v) :\r\n this.attr(a, v)\r\n }\r\n})\r\n\nSVG.Set = SVG.invent({\r\n // Initialize\r\n create: function(members) {\r\n if (members instanceof SVG.Set) {\r\n this.members = members.members.slice()\r\n } else {\r\n Array.isArray(members) ? this.members = members : this.clear()\r\n }\r\n }\r\n\r\n // Add class methods\r\n, extend: {\r\n // Add element to set\r\n add: function() {\r\n var i, il, elements = [].slice.call(arguments)\r\n\r\n for (i = 0, il = elements.length; i < il; i++)\r\n this.members.push(elements[i])\r\n\r\n return this\r\n }\r\n // Remove element from set\r\n , remove: function(element) {\r\n var i = this.index(element)\r\n\r\n // remove given child\r\n if (i > -1)\r\n this.members.splice(i, 1)\r\n\r\n return this\r\n }\r\n // Iterate over all members\r\n , each: function(block) {\r\n for (var i = 0, il = this.members.length; i < il; i++)\r\n block.apply(this.members[i], [i, this.members])\r\n\r\n return this\r\n }\r\n // Restore to defaults\r\n , clear: function() {\r\n // initialize store\r\n this.members = []\r\n\r\n return this\r\n }\r\n // Get the length of a set\r\n , length: function() {\r\n return this.members.length\r\n }\r\n // Checks if a given element is present in set\r\n , has: function(element) {\r\n return this.index(element) >= 0\r\n }\r\n // retuns index of given element in set\r\n , index: function(element) {\r\n return this.members.indexOf(element)\r\n }\r\n // Get member at given index\r\n , get: function(i) {\r\n return this.members[i]\r\n }\r\n // Get first member\r\n , first: function() {\r\n return this.get(0)\r\n }\r\n // Get last member\r\n , last: function() {\r\n return this.get(this.members.length - 1)\r\n }\r\n // Default value\r\n , valueOf: function() {\r\n return this.members\r\n }\r\n // Get the bounding box of all members included or empty box if set has no items\r\n , bbox: function(){\r\n // return an empty box of there are no members\r\n if (this.members.length == 0)\r\n return new SVG.RBox()\r\n\r\n // get the first rbox and update the target bbox\r\n var rbox = this.members[0].rbox(this.members[0].doc())\r\n\r\n this.each(function() {\r\n // user rbox for correct position and visual representation\r\n rbox = rbox.merge(this.rbox(this.doc()))\r\n })\r\n\r\n return rbox\r\n }\r\n }\r\n\r\n // Add parent method\r\n, construct: {\r\n // Create a new set\r\n set: function(members) {\r\n return new SVG.Set(members)\r\n }\r\n }\r\n})\r\n\r\nSVG.FX.Set = SVG.invent({\r\n // Initialize node\r\n create: function(set) {\r\n // store reference to set\r\n this.set = set\r\n }\r\n\r\n})\r\n\r\n// Alias methods\r\nSVG.Set.inherit = function() {\r\n var m\r\n , methods = []\r\n\r\n // gather shape methods\r\n for(var m in SVG.Shape.prototype)\r\n if (typeof SVG.Shape.prototype[m] == 'function' && typeof SVG.Set.prototype[m] != 'function')\r\n methods.push(m)\r\n\r\n // apply shape aliasses\r\n methods.forEach(function(method) {\r\n SVG.Set.prototype[method] = function() {\r\n for (var i = 0, il = this.members.length; i < il; i++)\r\n if (this.members[i] && typeof this.members[i][method] == 'function')\r\n this.members[i][method].apply(this.members[i], arguments)\r\n\r\n return method == 'animate' ? (this.fx || (this.fx = new SVG.FX.Set(this))) : this\r\n }\r\n })\r\n\r\n // clear methods for the next round\r\n methods = []\r\n\r\n // gather fx methods\r\n for(var m in SVG.FX.prototype)\r\n if (typeof SVG.FX.prototype[m] == 'function' && typeof SVG.FX.Set.prototype[m] != 'function')\r\n methods.push(m)\r\n\r\n // apply fx aliasses\r\n methods.forEach(function(method) {\r\n SVG.FX.Set.prototype[method] = function() {\r\n for (var i = 0, il = this.set.members.length; i < il; i++)\r\n this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments)\r\n\r\n return this\r\n }\r\n })\r\n}\r\n\n\r\nSVG.extend(SVG.Element, {\r\n // Store data values on svg nodes\r\n data: function(a, v, r) {\r\n if (typeof a == 'object') {\r\n for (v in a)\r\n this.data(v, a[v])\r\n\r\n } else if (arguments.length < 2) {\r\n try {\r\n return JSON.parse(this.attr('data-' + a))\r\n } catch(e) {\r\n return this.attr('data-' + a)\r\n }\r\n\r\n } else {\r\n this.attr(\r\n 'data-' + a\r\n , v === null ?\r\n null :\r\n r === true || typeof v === 'string' || typeof v === 'number' ?\r\n v :\r\n JSON.stringify(v)\r\n )\r\n }\r\n\r\n return this\r\n }\r\n})\nSVG.extend(SVG.Element, {\r\n // Remember arbitrary data\r\n remember: function(k, v) {\r\n // remember every item in an object individually\r\n if (typeof arguments[0] == 'object')\r\n for (var v in k)\r\n this.remember(v, k[v])\r\n\r\n // retrieve memory\r\n else if (arguments.length == 1)\r\n return this.memory()[k]\r\n\r\n // store memory\r\n else\r\n this.memory()[k] = v\r\n\r\n return this\r\n }\r\n\r\n // Erase a given memory\r\n, forget: function() {\r\n if (arguments.length == 0)\r\n this._memory = {}\r\n else\r\n for (var i = arguments.length - 1; i >= 0; i--)\r\n delete this.memory()[arguments[i]]\r\n\r\n return this\r\n }\r\n\r\n // Initialize or return local memory object\r\n, memory: function() {\r\n return this._memory || (this._memory = {})\r\n }\r\n\r\n})\n// Method for getting an element by id\r\nSVG.get = function(id) {\r\n var node = document.getElementById(idFromReference(id) || id)\r\n return SVG.adopt(node)\r\n}\r\n\r\n// Select elements by query string\r\nSVG.select = function(query, parent) {\r\n return new SVG.Set(\r\n SVG.utils.map((parent || document).querySelectorAll(query), function(node) {\r\n return SVG.adopt(node)\r\n })\r\n )\r\n}\r\n\r\nSVG.extend(SVG.Parent, {\r\n // Scoped select method\r\n select: function(query) {\r\n return SVG.select(query, this.node)\r\n }\r\n\r\n})\nfunction pathRegReplace(a, b, c, d) {\r\n return c + d.replace(SVG.regex.dots, ' .')\r\n}\r\n\r\n// creates deep clone of array\r\nfunction array_clone(arr){\r\n var clone = arr.slice(0)\r\n for(var i = clone.length; i--;){\r\n if(Array.isArray(clone[i])){\r\n clone[i] = array_clone(clone[i])\r\n }\r\n }\r\n return clone\r\n}\r\n\r\n// tests if a given element is instance of an object\r\nfunction is(el, obj){\r\n return el instanceof obj\r\n}\r\n\r\n// tests if a given selector matches an element\r\nfunction matches(el, selector) {\r\n return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);\r\n}\r\n\r\n// Convert dash-separated-string to camelCase\r\nfunction camelCase(s) {\r\n return s.toLowerCase().replace(/-(.)/g, function(m, g) {\r\n return g.toUpperCase()\r\n })\r\n}\r\n\r\n// Capitalize first letter of a string\r\nfunction capitalize(s) {\r\n return s.charAt(0).toUpperCase() + s.slice(1)\r\n}\r\n\r\n// Ensure to six-based hex\r\nfunction fullHex(hex) {\r\n return hex.length == 4 ?\r\n [ '#',\r\n hex.substring(1, 2), hex.substring(1, 2)\r\n , hex.substring(2, 3), hex.substring(2, 3)\r\n , hex.substring(3, 4), hex.substring(3, 4)\r\n ].join('') : hex\r\n}\r\n\r\n// Component to hex value\r\nfunction compToHex(comp) {\r\n var hex = comp.toString(16)\r\n return hex.length == 1 ? '0' + hex : hex\r\n}\r\n\r\n// Calculate proportional width and height values when necessary\r\nfunction proportionalSize(element, width, height) {\r\n if (width == null || height == null) {\r\n var box = element.bbox()\r\n\r\n if (width == null)\r\n width = box.width / box.height * height\r\n else if (height == null)\r\n height = box.height / box.width * width\r\n }\r\n\r\n return {\r\n width: width\r\n , height: height\r\n }\r\n}\r\n\r\n// Delta transform point\r\nfunction deltaTransformPoint(matrix, x, y) {\r\n return {\r\n x: x * matrix.a + y * matrix.c + 0\r\n , y: x * matrix.b + y * matrix.d + 0\r\n }\r\n}\r\n\r\n// Map matrix array to object\r\nfunction arrayToMatrix(a) {\r\n return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }\r\n}\r\n\r\n// Parse matrix if required\r\nfunction parseMatrix(matrix) {\r\n if (!(matrix instanceof SVG.Matrix))\r\n matrix = new SVG.Matrix(matrix)\r\n\r\n return matrix\r\n}\r\n\r\n// Add centre point to transform object\r\nfunction ensureCentre(o, target) {\r\n o.cx = o.cx == null ? target.bbox().cx : o.cx\r\n o.cy = o.cy == null ? target.bbox().cy : o.cy\r\n}\r\n\r\n// PathArray Helpers\r\nfunction arrayToString(a) {\r\n for (var i = 0, il = a.length, s = ''; i < il; i++) {\r\n s += a[i][0]\r\n\r\n if (a[i][1] != null) {\r\n s += a[i][1]\r\n\r\n if (a[i][2] != null) {\r\n s += ' '\r\n s += a[i][2]\r\n\r\n if (a[i][3] != null) {\r\n s += ' '\r\n s += a[i][3]\r\n s += ' '\r\n s += a[i][4]\r\n\r\n if (a[i][5] != null) {\r\n s += ' '\r\n s += a[i][5]\r\n s += ' '\r\n s += a[i][6]\r\n\r\n if (a[i][7] != null) {\r\n s += ' '\r\n s += a[i][7]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return s + ' '\r\n}\r\n\r\n// Deep new id assignment\r\nfunction assignNewId(node) {\r\n // do the same for SVG child nodes as well\r\n for (var i = node.childNodes.length - 1; i >= 0; i--)\r\n if (node.childNodes[i] instanceof window.SVGElement)\r\n assignNewId(node.childNodes[i])\r\n\r\n return SVG.adopt(node).id(SVG.eid(node.nodeName))\r\n}\r\n\r\n// Add more bounding box properties\r\nfunction fullBox(b) {\r\n if (b.x == null) {\r\n b.x = 0\r\n b.y = 0\r\n b.width = 0\r\n b.height = 0\r\n }\r\n\r\n b.w = b.width\r\n b.h = b.height\r\n b.x2 = b.x + b.width\r\n b.y2 = b.y + b.height\r\n b.cx = b.x + b.width / 2\r\n b.cy = b.y + b.height / 2\r\n\r\n return b\r\n}\r\n\r\n// Get id from reference string\r\nfunction idFromReference(url) {\r\n var m = (url || '').toString().match(SVG.regex.reference)\r\n\r\n if (m) return m[1]\r\n}\r\n\r\n// If values like 1e-88 are passed, this is not a valid 32 bit float,\r\n// but in those cases, we are so close to 0 that 0 works well!\r\nfunction float32String(v) {\r\n return Math.abs(v) > 1e-37 ? v : 0\r\n}\r\n\r\n// Create matrix array for looping\r\nvar abcdef = 'abcdef'.split('')\r\n\n// Add CustomEvent to IE9 and IE10\r\nif (typeof window.CustomEvent !== 'function') {\r\n // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\r\n var CustomEventPoly = function(event, options) {\r\n options = options || { bubbles: false, cancelable: false, detail: undefined }\r\n var e = document.createEvent('CustomEvent')\r\n e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail)\r\n return e\r\n }\r\n\r\n CustomEventPoly.prototype = window.Event.prototype\r\n\r\n SVG.CustomEvent = CustomEventPoly\r\n} else {\r\n SVG.CustomEvent = window.CustomEvent\r\n}\r\n\r\n// requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish\r\n(function(w) {\r\n var lastTime = 0\r\n var vendors = ['moz', 'webkit']\r\n\r\n for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame']\r\n w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] ||\r\n w[vendors[x] + 'CancelRequestAnimationFrame']\r\n }\r\n\r\n w.requestAnimationFrame = w.requestAnimationFrame ||\r\n function(callback) {\r\n var currTime = new Date().getTime()\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime))\r\n\r\n var id = w.setTimeout(function() {\r\n callback(currTime + timeToCall)\r\n }, timeToCall)\r\n\r\n lastTime = currTime + timeToCall\r\n return id\r\n }\r\n\r\n w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout;\r\n\r\n}(window))\r\n\r\nreturn SVG\r\n\r\n}));\r","import { ApiException } from 'Api/Dto/QueryResult';\r\nimport { HttpClient } from 'Api/HttpClient';\r\nimport { CreateWorkRequestResult, FindWorkRequestResult, GroupeEquipement, GroupeEquipementViewResult, RgfLocalisation, RgfLocalisationViewResult, RgfLocalisationWithGroupeEquipement, RgfViewResult, RgfWithGroupeEquipements, WRHeaderCreate, WRHeaderList } from 'Api/Plugins/Orano/Dtos';\r\nimport { RgfCommon } from 'Api/Plugins/Orano/Dtos/RgfCommon';\r\nimport { IGmaoService } from 'Api/Plugins/Orano/Interfaces/IGmaoService';\r\nimport { UriService } from 'Api/Services/UriService';\r\nimport { OnlineAbsoluteUriBehavior } from 'App/Services/UriServices/AbsoluteUriBehaviors';\r\nimport { injectable } from 'inversify';\r\nimport { chunk } from 'lodash';\r\n\r\n@injectable()\r\nexport class GmaoService implements IGmaoService {\r\n public constructor(\r\n baseUri: string,\r\n apiKey: string,\r\n authorization: string\r\n ) {\r\n this._httpClient = new HttpClient(\r\n new UriService(baseUri, new OnlineAbsoluteUriBehavior())\r\n );\r\n\r\n this._apiKey = apiKey;\r\n this._authorization = authorization;\r\n }\r\n\r\n public async searchRgfAsync(\r\n searchText: string,\r\n unit: string,\r\n searchLocal: string,\r\n pageNumber: number = 1,\r\n resultsPerPage: number = 30\r\n ): Promise> {\r\n searchText = searchText ?? '';\r\n searchText = searchText.replace(\"'\", \"''\").toUpperCase();\r\n\r\n const searchQuery = `(designation like '%${searchText}%' OR \"RGF\" like '%${searchText}%')`;\r\n const searchLocationQuery = searchLocal\r\n ? `atelier='${unit}' AND salle_differentiateur like '${searchLocal}%'`\r\n : `atelier='${unit}'`;\r\n\r\n const filterQuery = searchQuery\r\n ? `(${searchQuery} AND ${searchLocationQuery})`\r\n : searchLocationQuery;\r\n\r\n const queryResult = await this._httpClient.getAsync(\r\n `server/RE-Recyclage-WS/INS_EQT_LH/views/RGF_Localisation`,\r\n null,\r\n {\r\n $orderby: 'RGF',\r\n $filter: filterQuery,\r\n $start_index: (pageNumber - 1) * resultsPerPage,\r\n $count: resultsPerPage\r\n },\r\n new Headers({\r\n keyid: this._apiKey,\r\n Authorization: this._authorization\r\n })\r\n );\r\n\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n //Chunking the RGFs to avoid the url size limit\r\n //Rgf length is 30 characters\r\n const rgfsChunks: Array> = chunk(response.elements, 20);\r\n\r\n let groupeEquipements = new Array();\r\n\r\n for (const rgfs of rgfsChunks) {\r\n const responseGroupeEquipements = await this.getPrincipaleGroupeEquipements(rgfs);\r\n\r\n groupeEquipements.push(...rgfs.map(a => Object.assign(\r\n a,\r\n responseGroupeEquipements.find(b => a.id_equipement === b.id_equipement)\r\n )));\r\n }\r\n\r\n return groupeEquipements;\r\n }\r\n\r\n public async getRgfAsync(eCode: string): Promise {\r\n const queryResult = await this._httpClient.getAsync(\r\n `server/RE-Recyclage-WS/INS_EQT_LH/views/RGF`,\r\n null,\r\n {\r\n $filter: `(id_equipement='${eCode}')`,\r\n $count: 1\r\n },\r\n new Headers({\r\n keyid: this._apiKey,\r\n Authorization: this._authorization\r\n })\r\n );\r\n\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n let rgf: RgfWithGroupeEquipements = response.elements[0] as RgfWithGroupeEquipements ?? null;\r\n\r\n if (rgf) {\r\n rgf.groupe_equipements = await this.getGroupeEquipements(rgf);\r\n }\r\n\r\n return rgf;\r\n }\r\n\r\n public async getDPsAsync(eCode: string): Promise {\r\n const queryResult = await this._httpClient.getAsync(\r\n '/C0965/getfindworkrequest/V1',\r\n null,\r\n {\r\n Ecode: eCode\r\n },\r\n new Headers({\r\n keyid: this._apiKey\r\n })\r\n );\r\n\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n const wrHeader = response.FindWorkRequestResponse.BusinessObject?.WRHeader ?? [];\r\n\r\n return Array.isArray(wrHeader)\r\n ? wrHeader\r\n : [wrHeader];\r\n }\r\n\r\n public async createDPAsync(eCode: string, title: string, description: string, originatorCode: string, jobType: string, priority: string, dateTime: Date): Promise {\r\n const isoDate = dateTime.toISOString();\r\n const date = isoDate.substring(0, 10);\r\n const time = isoDate.substring(11, 5);\r\n\r\n const queryResult = await this._httpClient.postAsync(\r\n `/C0965/postworkorderdpf/createworkrequestdpf/V1?ecode=${eCode}`,\r\n {},\r\n null,\r\n new Headers({\r\n keyid: this._apiKey,\r\n WrTaskTitle: title,\r\n WoReqDescription: description,\r\n WoReqOriginator: originatorCode,\r\n JobType: jobType,\r\n WoTskPriority: priority,\r\n WoReqNeedDate: date,\r\n WoReqNeedTime: time\r\n })\r\n );\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n const wrHeader = response.CreateWorkRequestResponse.BusinessObject?.WRHeader ?? null;\r\n\r\n return Array.isArray(wrHeader)\r\n ? wrHeader[0] ?? null\r\n : wrHeader;\r\n }\r\n\r\n private async getPrincipaleGroupeEquipements(rgfs: Array): Promise> {\r\n const filterRgfs = rgfs.map(rgf => `id_equipement='${rgf.id_equipement}'`).join(' OR ');\r\n\r\n const queryResult = await this._httpClient.getAsync(\r\n `server/RE-Recyclage-WS/INS_EQT_LH/views/RGF_Groupe_Equipement`,\r\n null,\r\n {\r\n $filter: `(${filterRgfs}) AND est_principal='P'`,\r\n $select: 'id_equipement,RGF,type_groupe,groupe,est_principal,designation_groupe,repere_plan,parent',\r\n $count: rgfs.length\r\n },\r\n new Headers({\r\n keyid: this._apiKey,\r\n Authorization: this._authorization\r\n })\r\n );\r\n\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n return response.elements;\r\n }\r\n\r\n private async getGroupeEquipements(rgf: RgfCommon): Promise> {\r\n const queryResult = await this._httpClient.getAsync(\r\n `server/RE-Recyclage-WS/INS_EQT_LH/views/RGF_Groupe_Equipement`,\r\n null,\r\n {\r\n $filter: `id_equipement='${rgf.id_equipement}'`,\r\n $select: 'id_equipement,RGF,type_groupe,groupe,est_principal,designation_groupe,repere_plan,parent'\r\n },\r\n new Headers({\r\n keyid: this._apiKey,\r\n Authorization: this._authorization\r\n })\r\n );\r\n\r\n const response = await this.handleResponseAsync(queryResult);\r\n\r\n return response.elements;\r\n }\r\n\r\n private async handleResponseAsync(response: Response): Promise {\r\n await this.handleErrorsAsync(response);\r\n\r\n return await response.json() as T;\r\n }\r\n\r\n private async handleErrorsAsync(response: Response): Promise {\r\n if (response.status >= 400) {\r\n const problemDetails = await response.json();\r\n\r\n throw new ApiException(\r\n response.status,\r\n {\r\n code: response.status.toString(),\r\n message: problemDetails,\r\n details: null,\r\n innerError: null,\r\n target: null\r\n }\r\n );\r\n }\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n private readonly _apiKey: string;\r\n private readonly _authorization: string;\r\n}\r\n","export const injectTypes = {\r\n IGmaoService: Symbol.for('IGmaoService')\r\n};\r\n","import { HttpClient } from 'Api/HttpClient';\r\nimport { UriService } from 'Api/Services';\r\nimport { OnlineAbsoluteUriBehavior } from 'App/Services/UriServices/AbsoluteUriBehaviors';\r\nimport { injectable } from 'inversify';\r\n\r\nexport const injectTypes = {\r\n IWiwContext: Symbol.for('IWiwContext'),\r\n WiwService: Symbol.for('WiwService')\r\n};\r\n\r\n@injectable()\r\nexport class WiwService {\r\n public constructor(baseUri: string, apiKey: string) {\r\n this._httpClient = new HttpClient(\r\n new UriService(`${baseUri}/api/v1`, new OnlineAbsoluteUriBehavior())\r\n );\r\n this._apiKey = apiKey;\r\n }\r\n\r\n public async loginTokenAsync(token: string): Promise {\r\n const response: Response = await this._httpClient.postAsync(\r\n '/logintoken',\r\n { token: token }\r\n );\r\n\r\n if (response.ok) {\r\n let jsonResult: ILoginResponse = await response.json() as ILoginResponse;\r\n this._httpClient.bearerToken = jsonResult.token;\r\n\r\n this._isLogged = true;\r\n return jsonResult;\r\n }\r\n else {\r\n this._httpClient.bearerToken = null;\r\n\r\n this._isLogged = false;\r\n return null;\r\n }\r\n }\r\n\r\n public async logoutAsync(): Promise {\r\n const response: Response = await this._httpClient.postAsync(\r\n '/logout',\r\n null\r\n );\r\n\r\n this._isLogged = false;\r\n return response.ok;\r\n }\r\n\r\n public async searchEntityAsync(searchTerms: string): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n '/entity/search',\r\n null,\r\n {\r\n q: searchTerms,\r\n limit: 25,\r\n filter: null\r\n }\r\n );\r\n\r\n if (!response.ok) {\r\n return [];\r\n }\r\n\r\n return await response.json() as Array;\r\n }\r\n\r\n public async getEntityAsync(entityId: string): Promise {\r\n const response: Response = await this._httpClient.getAsync(\r\n `/entity/${entityId}`\r\n );\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n return await response.json() as IEntity;\r\n }\r\n\r\n public async getCommentsOfEntityAsync(entityId: string): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n `/entity/${entityId}?reference=none&parent=none&children=none&relations=none&events=none&properties=none&stockProperties=none&externalIds=none&comments=full&tickets=none&images=none&documents=none`\r\n );\r\n\r\n if (!response.ok) {\r\n return [];\r\n }\r\n\r\n const entity = await response.json() as IEntity\r\n\r\n return entity.comments;\r\n }\r\n\r\n public async getTicketsOfEntityAsync(entityId: string): Promise> {\r\n const response: Response = await this._httpClient.getAsync(\r\n `/entity/${entityId}?reference=none&parent=none&children=none&relations=none&events=none&properties=none&stockProperties=none&externalIds=none&comments=full&comments=none&images=none&documents=none`\r\n );\r\n\r\n if (!response.ok) {\r\n return [];\r\n }\r\n\r\n const entity = await response.json() as IEntity\r\n\r\n return entity.tickets;\r\n }\r\n\r\n public async updateEntityAsync(entityId: string, uriVison: string): Promise {\r\n const response: Response = await this._httpClient.putAsync(\r\n `/entity/${entityId}?useNames=true`,\r\n {\r\n id: entityId,\r\n properties: [\r\n {\r\n name: 'Vis-On',\r\n property: 'vis_on',\r\n unit: 'string',\r\n value: uriVison\r\n }\r\n ]\r\n }\r\n );\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n return await response.json();\r\n }\r\n\r\n public async addTicketForEntityAsync(entityId: string, name: string, description: string, startDateTime: Date, endDateTime: Date): Promise {\r\n const response: Response = await this._httpClient.postAsync(\r\n `/entity/${entityId}/ticket`,\r\n {\r\n name: name,\r\n description: description,\r\n scheduledBegin: startDateTime?.toISOString(),\r\n scheduledEnd: endDateTime.toISOString()\r\n }\r\n );\r\n\r\n return response.ok;\r\n }\r\n\r\n public async addCommentForEntityAsync(entityId: string, comment: string): Promise {\r\n const response: Response = await this._httpClient.postAsync(\r\n `/entity/${entityId}/comment`,\r\n {\r\n content: comment\r\n }\r\n );\r\n\r\n return response.ok;\r\n }\r\n\r\n public async getBlobImageAsync(imageId: string): Promise {\r\n const response: Response = await this._httpClient.getAsync(\r\n `/image/${imageId}/content`\r\n );\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n return await response.blob();\r\n }\r\n\r\n public get isLogged(): boolean {\r\n return this._isLogged;\r\n }\r\n\r\n protected readonly _httpClient: HttpClient;\r\n private readonly _apiKey: string;\r\n private _isLogged: boolean;\r\n}\r\n\r\nexport interface IWiwContext {\r\n baseUriWiw: string,\r\n apiKey: string\r\n}\r\n\r\nexport interface ILoginResponse {\r\n user: IUser;\r\n serverID: string;\r\n token: string;\r\n}\r\n\r\nexport interface IUser {\r\n id: string;\r\n type: string;\r\n inheritPrincipals: any;\r\n readPrincipals: any;\r\n updatePrincipals: any;\r\n version: number;\r\n created: number;\r\n updated: number;\r\n updatedBy: string;\r\n datasources: Array;\r\n enabled: boolean;\r\n locked: boolean;\r\n expiration: number;\r\n avatar: any;\r\n preferences: IPreferences;\r\n token: any;\r\n generateToken: boolean;\r\n failedLogins: number;\r\n accountAuthorities: Array;\r\n firstname: string;\r\n lastname: string;\r\n phone: any;\r\n mobile: any;\r\n mail: string;\r\n company: string;\r\n password: any;\r\n logoutDate: any;\r\n username: string;\r\n admin: boolean;\r\n fullnameNMail: string;\r\n accountNonExpired: boolean;\r\n accountNonLocked: boolean;\r\n icalendarId: any;\r\n fullname: string;\r\n credentialsNonExpired: boolean;\r\n roles: Array;\r\n roleIds: Array;\r\n}\r\n\r\nexport interface IDatasource {\r\n uuid: string;\r\n name: any;\r\n groups: any;\r\n unit: any;\r\n type: string;\r\n sensor: boolean;\r\n twoWay: boolean;\r\n linkId: any;\r\n}\r\n\r\nexport interface IPreferences {\r\n product_notifications_interval: string;\r\n ticket_notifications_interval: string;\r\n eventaction_notifications_interval: string;\r\n special_role: string;\r\n mail_notifications: any;\r\n time_format: string;\r\n display_deactivated: boolean;\r\n timezone: string;\r\n cartography_notifications_interval: string;\r\n intervention_notifications_teammate: string;\r\n locale: string;\r\n domain_notifications_interval: string;\r\n intervention_notifications_interval: string;\r\n navigation_mode: string;\r\n intervention_notifications_owner: string;\r\n properties_extended: boolean;\r\n theme: string;\r\n date_format: string;\r\n reference_notifications_interval: string;\r\n}\r\n\r\nexport interface ISearchResult {\r\n id: string;\r\n name: string;\r\n description: string;\r\n updated: number;\r\n updateRight: boolean;\r\n activated: boolean;\r\n events: Array;\r\n template?: string;\r\n externalIds: Array;\r\n}\r\n\r\nexport interface IEvent {\r\n value: number;\r\n type: string;\r\n date: number;\r\n}\r\n\r\nexport interface IExternalID {\r\n type: string;\r\n value: string;\r\n}\r\n\r\n\r\nexport interface IEntity {\r\n id: string;\r\n name: string;\r\n description: string;\r\n updated: number;\r\n updateRight: boolean;\r\n images: Array;\r\n documents: Array;\r\n activated: boolean;\r\n properties: Array;\r\n stockPropIds: Array;\r\n events: Array;\r\n parent?: ITreeNode;\r\n children: Array;\r\n relations: Array;\r\n template?: string;\r\n tickets: Array;\r\n comments: Array;\r\n externalIds: Array;\r\n}\r\n\r\nexport interface ITreeNode {\r\n id: string;\r\n name: string;\r\n description: string;\r\n updated: number;\r\n updateRight: boolean;\r\n activated: boolean;\r\n template?: string;\r\n}\r\n\r\nexport interface IComment {\r\n content: string;\r\n date: number;\r\n id: string;\r\n author: IAuthor;\r\n}\r\n\r\nexport interface IAuthor {\r\n id: string;\r\n fullName: string;\r\n email: string;\r\n}\r\n\r\nexport interface IProperty {\r\n id: string;\r\n property: string;\r\n unit: IUnit;\r\n value: number | string;\r\n valueDate: number;\r\n valueLinks: Array;\r\n order: number;\r\n display: TextI18N;\r\n updated: number;\r\n sensor?: boolean;\r\n sensorTwoway?: boolean;\r\n sensorId?: string;\r\n stock: boolean;\r\n updateRight: boolean;\r\n treatments: Array;\r\n}\r\n\r\nexport interface ITreatment {\r\n instanceId: string;\r\n treatmentId: string;\r\n name: string;\r\n description: string;\r\n params: Array;\r\n useOnStatus: boolean;\r\n canUseOnStatus: boolean;\r\n}\r\n\r\nexport interface IParam {\r\n id: string;\r\n name: string;\r\n description: string;\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface IUnit {\r\n name: string;\r\n display: TextI18N;\r\n symbol: TextI18N;\r\n placeholder: string;\r\n as: string;\r\n}\r\n\r\nexport interface TextI18N {\r\n DE?: string;\r\n EN: string;\r\n FR: string;\r\n}\r\n\r\nexport interface IRelation {\r\n id: string;\r\n left: ILeft;\r\n right: ILeft;\r\n definition: IDefinition;\r\n name: TextI18N;\r\n description: TextI18N;\r\n direction: number;\r\n}\r\n\r\nexport interface IDefinition {\r\n id: string;\r\n name: string;\r\n display: TextI18N;\r\n description: TextI18N;\r\n}\r\n\r\nexport interface ILeft {\r\n id: string;\r\n}\r\n\r\nexport interface ITicket {\r\n id: string;\r\n name: string;\r\n description: string;\r\n created: number;\r\n scheduledBegin: number;\r\n scheduledEnd: number;\r\n}\r\n","import { AbstractMesh, ActionEvent, ActionManager, Color3, Color4, ExecuteCodeAction, IActionEvent, LinesMesh, Matrix, Mesh, MeshBuilder, PredicateCondition, Scene, StandardMaterial, Vector3 } from '@babylonjs/core';\r\nimport { AdvancedDynamicTexture, Container, Control, Ellipse, Grid, Line, Rectangle, StackPanel, TextBlock } from '@babylonjs/gui/2D';\r\nimport { PointCloud } from 'Api/Dto/PointCloud';\r\n\r\nexport class DrawablePointCloud {\r\n /**\r\n * Get cartesian coordinates in the 3d engine coordinates system.\r\n */\r\n public position3d: Vector3;\r\n\r\n /**\r\n * Get cartesian coordinates of the scan.\r\n */\r\n public pointCloudPosition: PointCloud;\r\n}\r\n\r\nexport class MeasureHelper {\r\n /**\r\n * Create a new point onto local space from global.\r\n * \r\n * @param global Point in global space\r\n * @param translation Define source translation matrix\r\n * @param rotation Define source rotation matrix\r\n */\r\n public static globalToLocal(global: Vector3 | { x: number, y: number, z: number }, translation: Matrix, rotation: Matrix): Vector3 {\r\n let local: Vector3 = Vector3.Zero();\r\n let globalSource: Vector3;\r\n\r\n if (global instanceof Vector3) {\r\n globalSource = global.clone();\r\n }\r\n else {\r\n globalSource = MeasureHelper.toVector3(global);\r\n }\r\n\r\n let invertTranslate = Matrix.Invert(translation);\r\n Vector3.TransformCoordinatesToRef(globalSource, invertTranslate, local);\r\n\r\n let invertRotate = Matrix.Invert(rotation);\r\n Vector3.TransformCoordinatesToRef(local, invertRotate, local);\r\n\r\n return local;\r\n };\r\n\r\n public static rightToLeftHandAxis(right: Vector3) {\r\n return new Vector3(\r\n -right.y,\r\n right.z,\r\n right.x\r\n );\r\n }\r\n\r\n public static leftToRightHandAxis(left: Vector3) {\r\n return new Vector3(\r\n left.z,\r\n -left.x,\r\n left.y\r\n );\r\n }\r\n\r\n public static hexToRgbaString(color: Color3 | Color4): string {\r\n if (color instanceof Color4) {\r\n return `rgba(${color.r * 255},${color.g * 255},${color.b * 255}, ${color.a})`;\r\n } else {\r\n return `rgba(${color.r * 255},${color.g * 255},${color.b * 255}, 1)`;\r\n }\r\n }\r\n\r\n public static toVector3(tuplePoint: { x: number, y: number, z: number }): Vector3 {\r\n return new Vector3(tuplePoint.x, tuplePoint.y, tuplePoint.z);\r\n }\r\n}\r\n\r\nexport abstract class Measurable extends Mesh {\r\n constructor(name: string, scene: Scene) {\r\n super(name, scene);\r\n\r\n this.scene = scene;\r\n this.points = new Array();\r\n }\r\n\r\n public abstract update(): void;\r\n\r\n public abstract canAddPoint(): boolean;\r\n\r\n public addPoint(mousePosition: Vector3, pointCloudPosition: PointCloud): DrawablePointCloud {\r\n if (!this.canAddPoint()) {\r\n return null;\r\n }\r\n\r\n let point = new DrawablePointCloud();\r\n point.position3d = mousePosition;\r\n point.pointCloudPosition = pointCloudPosition;\r\n\r\n this.points.push(point);\r\n\r\n return point;\r\n }\r\n\r\n protected onActiveChanged(newValue: boolean): void {\r\n //virtual method\r\n }\r\n\r\n protected scene: Scene;\r\n protected points: Array;\r\n\r\n public abstract get text(): string;\r\n\r\n public get pointCount(): number {\r\n return this.points.length;\r\n }\r\n\r\n private _isActive: boolean = false;\r\n public get isActive(): boolean {\r\n return this._isActive;\r\n }\r\n public set isActive(value: boolean) {\r\n if (value != this._isActive) {\r\n this._isActive = value;\r\n this.onActiveChanged(value);\r\n }\r\n }\r\n}\r\n\r\nclass PopupConnector extends Container {\r\n constructor(targetTexture: AdvancedDynamicTexture, name?: string) {\r\n super(name);\r\n\r\n let color: string = MeasureHelper.hexToRgbaString(this.connectorColor);\r\n\r\n this._targetTexture = targetTexture;\r\n\r\n this._container = new Rectangle();\r\n this._container.adaptWidthToChildren = true;\r\n this._container.adaptHeightToChildren = true;\r\n this._container.color = color\r\n this._container.background = MeasureHelper.hexToRgbaString(new Color4(0, 0, 0, 0.5));\r\n this._container.shadowBlur = 10;\r\n this._container.isVisible = false;\r\n\r\n this._targetTexture.addControl(this._container);\r\n\r\n this._sourceConnector = new Ellipse();\r\n this._sourceConnector.background = color;\r\n this._sourceConnector.widthInPixels = 6;\r\n this._sourceConnector.heightInPixels = 6;\r\n this._sourceConnector.thickness = 0;\r\n this._sourceConnector.isVisible = false;\r\n\r\n this._targetTexture.addControl(this._sourceConnector);\r\n\r\n this._connector = new Line();\r\n this._connector.color = color;\r\n this._connector.lineWidth = 1.5;\r\n this._connector.isVisible = false;\r\n this._targetTexture.addControl(this._connector);\r\n\r\n this._connector.connectedControl = this._container;\r\n\r\n this._targetTexture.addControl(this._container);\r\n\r\n this.isVisible = false;\r\n }\r\n\r\n private openClose(value: boolean): void {\r\n this.isVisible\r\n = this._container.isVisible\r\n = this._sourceConnector.isVisible\r\n = this._connector.isVisible\r\n = value;\r\n }\r\n public show(linkedMesh: AbstractMesh): void {\r\n this.openClose(true);\r\n\r\n if (this._container.linkedMesh != linkedMesh) {\r\n this._container.linkWithMesh(linkedMesh);\r\n this._sourceConnector.linkWithMesh(linkedMesh);\r\n this._connector.linkWithMesh(linkedMesh);\r\n }\r\n\r\n this._container.linkOffsetXInPixels = this._container.widthInPixels;\r\n this._container.linkOffsetYInPixels = -this._container.widthInPixels / 2;\r\n\r\n this._connector.x2 = -(this._container.widthInPixels / 2) + this._container.paddingLeftInPixels + 1;\r\n this._connector.y2 = (this._container.heightInPixels / 2) - this._container.paddingLeftInPixels - 1;\r\n }\r\n\r\n public close(): void {\r\n this.openClose(false);\r\n }\r\n\r\n private _content: Container;\r\n public set content(value: Container) {\r\n if (this._content != value) {\r\n if (!value && this._container.children.length > 0) {\r\n this._container.removeControl(this._content);\r\n }\r\n\r\n if (value) {\r\n this._container.addControl(value);\r\n }\r\n\r\n this._content = value;\r\n }\r\n }\r\n\r\n public get content(): Container {\r\n return this._content;\r\n }\r\n\r\n private _connectorColor: Color4;\r\n\r\n public get connectorColor(): Color4 {\r\n if (!this._connectorColor) {\r\n this.connectorColor = Color4.FromInts(255, 215, 0, 255);\r\n }\r\n\r\n return this._connectorColor;\r\n }\r\n\r\n public set connectorColor(value: Color4) {\r\n this._connectorColor = value;\r\n\r\n if (this._container) {\r\n this._container.color\r\n = this._sourceConnector.background\r\n = this._connector.color\r\n = MeasureHelper.hexToRgbaString(value);\r\n }\r\n }\r\n\r\n protected _container: Rectangle;\r\n protected _sourceConnector: Ellipse;\r\n protected _connector: Line;\r\n protected _targetTexture: AdvancedDynamicTexture;\r\n}\r\n\r\nexport class LineMeasure extends Measurable {\r\n constructor(name: string, renderScene: Scene) {\r\n super(name, renderScene);\r\n\r\n this._advancedTexture = AdvancedDynamicTexture.CreateFullscreenUI('UI', true, this.scene);\r\n\r\n this.pointMeshes = new Array();\r\n this._axis = new Array();\r\n this._ghostPoints = [Vector3.Zero(), new Vector3(10, 10, 10)];\r\n this._transparentMaterial = new StandardMaterial('EventLineAreaTransparentMaterial', this.scene);\r\n this._transparentMaterial.emissiveColor = Color3.White();\r\n this._transparentMaterial.alpha = 0;\r\n\r\n this.onDisposeObservable.addOnce(e => {\r\n this._advancedTexture.dispose();\r\n });\r\n }\r\n\r\n public showGhostLineAt(position: Vector3): void {\r\n if (this.points.length != 1) {\r\n return;\r\n }\r\n\r\n //Ghost start at the same first point location\r\n this._ghostPoints[0] = this.points[0].position3d;\r\n this._ghostPoints[1] = position;\r\n\r\n this._ghostLine.isVisible = true;\r\n }\r\n\r\n public hideGhostLine(): void {\r\n this._ghostLine.isVisible = false;\r\n }\r\n\r\n public closeAllPopups(): void {\r\n this._closePointInfoPopup();\r\n this._closeResultInfoPopup();\r\n }\r\n\r\n private _createPointAt(position: DrawablePointCloud): Mesh {\r\n let node = MeshBuilder.CreateSphere(\r\n `NodeMesh${this.points.length}`,\r\n {\r\n diameter: this.pointDiameter\r\n },\r\n this.scene\r\n );\r\n\r\n node.position = position.position3d;\r\n\r\n if (this._labelPickInfo == null) {\r\n this._labelPickInfo = new PopupConnector(this._advancedTexture);\r\n\r\n let stack = new StackPanel();\r\n stack.paddingLeft = stack.paddingRight = 8;\r\n stack.paddingTop = stack.paddingBottom = 8;\r\n stack.adaptWidthToChildren = true;\r\n\r\n let textX = new TextBlock('textX');\r\n textX.color = MeasureHelper.hexToRgbaString(this._xAxisColor);\r\n stack.addControl(textX);\r\n\r\n let textY = new TextBlock('textY');\r\n textY.color = MeasureHelper.hexToRgbaString(this._yAxisColor);\r\n stack.addControl(textY);\r\n\r\n let textZ = new TextBlock('textZ');\r\n textZ.color = MeasureHelper.hexToRgbaString(this._zAxisColor);\r\n stack.addControl(textZ);\r\n\r\n stack.children.forEach((element: TextBlock) => {\r\n element.resizeToFit = true;\r\n element.fontSize = '12px';\r\n element.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n element.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n });\r\n\r\n this._labelPickInfo.content = stack;\r\n }\r\n\r\n const actionManager = new ActionManager(this.scene);\r\n\r\n actionManager.registerAction(new ExecuteCodeAction(\r\n ActionManager.OnPickTrigger,\r\n e => {\r\n if (this._labelPickInfo.isVisible) {\r\n this._closePointInfoPopup(e);\r\n }\r\n else {\r\n this._openPointInfoPopup(e);\r\n }\r\n }\r\n ));\r\n\r\n actionManager.registerAction(new ExecuteCodeAction(\r\n ActionManager.OnPointerOverTrigger,\r\n e => this._openPointInfoPopup(e)\r\n ));\r\n\r\n actionManager.registerAction(new ExecuteCodeAction(\r\n ActionManager.OnPointerOutTrigger,\r\n e => this._closePointInfoPopup(e)\r\n ));\r\n\r\n node.actionManager = actionManager;\r\n\r\n //z-index\r\n node.renderingGroupId = 1;\r\n\r\n return node;\r\n }\r\n\r\n private _openPointInfoPopup(e: IActionEvent): void {\r\n let m = this.pointMeshes.findIndex(pm => pm == e.meshUnderPointer);\r\n\r\n if (m >= 0) {\r\n let pointInfo = this.points[m].pointCloudPosition;\r\n\r\n let stack = this._labelPickInfo.content as StackPanel;\r\n\r\n m++; //increment l'index pour ne plus être basé sur zero\r\n\r\n stack.children.forEach((element: TextBlock) => {\r\n let text: string;\r\n\r\n if (element.name == 'textX') {\r\n text = `x${m}: ${pointInfo.global.x.toFixed(2)}`;\r\n }\r\n else if (element.name == 'textY') {\r\n text = `y${m}: ${pointInfo.global.y.toFixed(2)}`;\r\n }\r\n else if (element.name == 'textZ') {\r\n text = `z${m}: ${pointInfo.global.z.toFixed(2)}`;\r\n }\r\n\r\n element.text = text;\r\n });\r\n\r\n if (m == 1) {\r\n this._labelPickInfo.connectorColor = Color4.FromColor3(this.startPointColor);\r\n }\r\n else if (m == 2) {\r\n this._labelPickInfo.connectorColor = Color4.FromColor3(this.endPointColor);\r\n }\r\n\r\n this._labelPickInfo.show(e.meshUnderPointer);\r\n }\r\n }\r\n\r\n private _closePointInfoPopup(e?: IActionEvent): void {\r\n if (!e) {\r\n this._labelPickInfo.close();\r\n return;\r\n }\r\n\r\n let m = this.pointMeshes.findIndex(pm => pm == e.meshUnderPointer);\r\n\r\n if (m >= 0) {\r\n this._labelPickInfo.close();\r\n }\r\n }\r\n\r\n private _createLine(): LinesMesh {\r\n let points = this.points.map(p => p.position3d);\r\n\r\n let line = MeshBuilder.CreateLines(\r\n 'LineMeasure',\r\n {\r\n points: points,\r\n updatable: true,\r\n colors: [\r\n this.lineColor,\r\n this.lineColor\r\n ]\r\n },\r\n this.scene\r\n );\r\n\r\n line.alwaysSelectAsActiveMesh = true;\r\n\r\n let eventLine = MeshBuilder.CreateTube(\r\n 'EventLineArea',\r\n {\r\n path: points,\r\n tessellation: 16,\r\n updatable: true,\r\n },\r\n this.scene\r\n );\r\n\r\n line.addChild(eventLine);\r\n\r\n let actionManager = new ActionManager(this.scene);\r\n\r\n let openCondition = new PredicateCondition(\r\n actionManager,\r\n () => this.canMeasure\r\n && this._axis != null\r\n && !this._resultInfo.isVisible\r\n );\r\n\r\n let closeCondition = new PredicateCondition(\r\n actionManager,\r\n () => this._resultInfo.isVisible\r\n );\r\n\r\n eventLine.material = this._transparentMaterial;\r\n eventLine.actionManager = actionManager;\r\n\r\n eventLine.actionManager.registerAction(\r\n new ExecuteCodeAction(\r\n ActionManager.OnPointerOverTrigger,\r\n e => this._openResultInfoPopup(e),\r\n openCondition\r\n )\r\n );\r\n\r\n eventLine.actionManager.registerAction(\r\n new ExecuteCodeAction(\r\n ActionManager.OnPointerOutTrigger,\r\n e => this._closeResultInfoPopup(),\r\n closeCondition\r\n )\r\n );\r\n\r\n eventLine.actionManager.registerAction(\r\n new ExecuteCodeAction(\r\n ActionManager.OnPickTrigger,\r\n e => {\r\n if (openCondition.isValid()) {\r\n this._openResultInfoPopup(e);\r\n }\r\n else if (closeCondition.isValid()) {\r\n this._closeResultInfoPopup();\r\n }\r\n }\r\n )\r\n );\r\n\r\n return line;\r\n }\r\n\r\n private _openResultInfoPopup(e: ActionEvent): void {\r\n this._resultInfo.connectorColor = this.lineColor;\r\n this._resultInfo.show(e.meshUnderPointer);\r\n\r\n if (!this.keepAxisVisible) {\r\n this.isAxisVisible = true;\r\n }\r\n }\r\n\r\n private _closeResultInfoPopup(): void {\r\n this._resultInfo.close();\r\n\r\n if (!this.keepAxisVisible) {\r\n this.isAxisVisible = false;\r\n }\r\n }\r\n\r\n private _createAxis(points: Array): Array {\r\n let axis = new Array(3);\r\n\r\n let zEndPointComputed = this._computeZEndPoint();\r\n let zEndPoint = MeasureHelper.rightToLeftHandAxis(zEndPointComputed.local);\r\n\r\n let axisXYIntersectComputed = this._computeXYIntersection();\r\n let axisXYIntersect = MeasureHelper.rightToLeftHandAxis(axisXYIntersectComputed.local);\r\n\r\n //x-axis\r\n axis[this._xAxis] = MeshBuilder.CreateLines(\r\n 'xAxis',\r\n {\r\n points: [\r\n axisXYIntersect,\r\n points[1].position3d\r\n ],\r\n colors: [\r\n this._xAxisColor,\r\n this._xAxisColor\r\n ]\r\n },\r\n this.scene\r\n );\r\n\r\n //y-axis\r\n axis[this._yAxis] = MeshBuilder.CreateLines(\r\n 'yAxis',\r\n {\r\n points: [\r\n axisXYIntersect,\r\n zEndPoint\r\n ],\r\n colors: [\r\n this._yAxisColor,\r\n this._yAxisColor\r\n ]\r\n },\r\n this.scene\r\n );\r\n\r\n //z-axis\r\n axis[this._zAxis] = MeshBuilder.CreateLines(\r\n 'zAxis',\r\n {\r\n points: [\r\n points[0].position3d,\r\n zEndPoint\r\n ],\r\n colors: [\r\n this._zAxisColor,\r\n this._zAxisColor\r\n ]\r\n },\r\n this.scene\r\n );\r\n\r\n axis[this._baseLine] = MeshBuilder.CreateLines(\r\n 'baseLine',\r\n {\r\n points: [\r\n points[1].position3d,\r\n zEndPoint\r\n ],\r\n colors: [\r\n this._baseLineColor,\r\n this._baseLineColor\r\n ]\r\n },\r\n this.scene\r\n );\r\n\r\n const p1: Vector3 = MeasureHelper.toVector3(points[0].pointCloudPosition.global);\r\n const p2: Vector3 = MeasureHelper.toVector3(points[1].pointCloudPosition.global);\r\n\r\n let xLength = Vector3.Distance(axisXYIntersectComputed.global, p2);\r\n let yLength = Vector3.Distance(axisXYIntersectComputed.global, zEndPointComputed.global);\r\n let zLength = Vector3.Distance(zEndPointComputed.global, p1);\r\n\r\n let baselineLength = Vector3.Distance(p2, zEndPointComputed.global);\r\n\r\n if (this._resultInfo == null) {\r\n this._resultInfo = new PopupConnector(this._advancedTexture);\r\n\r\n let grid = new Grid();\r\n grid.paddingBottom = grid.paddingTop = 8;\r\n grid.paddingLeft = grid.paddingRight = 8;\r\n grid.addColumnDefinition(30, true);\r\n grid.addColumnDefinition(110, true);\r\n\r\n grid.addRowDefinition(14, true);\r\n grid.addRowDefinition(14, true);\r\n grid.addRowDefinition(14, true);\r\n grid.addRowDefinition(14, true);\r\n grid.addRowDefinition(14, true);\r\n\r\n grid.adaptWidthToChildren = true;\r\n grid.heightInPixels = grid.rowCount * 14;\r\n\r\n //row 0\r\n let lineLength = new Rectangle();\r\n lineLength.background = MeasureHelper.hexToRgbaString(this.activeLineColor);\r\n grid.addControl(lineLength, 0, 0);\r\n\r\n let tLength = new TextBlock('tLength', this.text);\r\n tLength.color = lineLength.background;\r\n grid.addControl(tLength, 0, 1);\r\n\r\n //row 1\r\n let lineX = new Rectangle();\r\n lineX.background = MeasureHelper.hexToRgbaString(this._xAxisColor);\r\n grid.addControl(lineX, 1, 0);\r\n\r\n let tX = new TextBlock('tX', `mx (${xLength.toFixed(2)}m)`);\r\n tX.color = lineX.background;\r\n grid.addControl(tX, 1, 1);\r\n\r\n //row 2\r\n let lineY = new Rectangle();\r\n lineY.background = MeasureHelper.hexToRgbaString(this._yAxisColor);\r\n grid.addControl(lineY, 2, 0);\r\n\r\n let tY = new TextBlock('tY', `my (${yLength.toFixed(2)}m)`);\r\n tY.color = lineY.background;\r\n grid.addControl(tY, 2, 1);\r\n\r\n //row 3\r\n let lineZ = new Rectangle();\r\n lineZ.background = MeasureHelper.hexToRgbaString(this._zAxisColor);\r\n grid.addControl(lineZ, 3, 0);\r\n\r\n let tZ = new TextBlock('tZ', `mz (${zLength.toFixed(2)}m)`);\r\n tZ.color = lineZ.background;\r\n grid.addControl(tZ, 3, 1);\r\n\r\n //row 4\r\n let lineBase = new Rectangle();\r\n lineBase.background = MeasureHelper.hexToRgbaString(Color3.White());\r\n grid.addControl(lineBase, 4, 0);\r\n\r\n let tBaseLine = new TextBlock('tBase', `mb (${baselineLength.toFixed(2)}m)`);\r\n tBaseLine.color = lineBase.background;\r\n grid.addControl(tBaseLine, 4, 1);\r\n\r\n grid.children.forEach(c => {\r\n if (c instanceof TextBlock) {\r\n let tb: TextBlock = c;\r\n\r\n tb.fontSize = 12;\r\n tb.resizeToFit = true;\r\n tb.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n tb.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n tb.textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n }\r\n else if (c instanceof Rectangle) {\r\n let ln: Rectangle = c;\r\n\r\n ln.thickness = 0;\r\n ln.heightInPixels = 2;\r\n ln.paddingRightInPixels = 10;\r\n ln.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n ln.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n }\r\n });\r\n\r\n this._resultInfo.content = grid;\r\n }\r\n\r\n axis.forEach(a => {\r\n a.isVisible = this.isAxisVisible;\r\n a.alwaysSelectAsActiveMesh = true;\r\n });\r\n\r\n return axis;\r\n }\r\n\r\n private _createGhostLine(): LinesMesh {\r\n let ghostLine = MeshBuilder.CreateDashedLines(\r\n 'GhostLine',\r\n {\r\n points: this._ghostPoints,\r\n dashNb: 100,\r\n dashSize: 2,\r\n gapSize: 2,\r\n updatable: true\r\n },\r\n this.scene\r\n );\r\n\r\n ghostLine.color = new Color3(\r\n this.ghostLineColor.r,\r\n this.ghostLineColor.g,\r\n this.ghostLineColor.b\r\n );\r\n\r\n ghostLine.alwaysSelectAsActiveMesh = true;\r\n\r\n return ghostLine;\r\n }\r\n\r\n public addPoint(mousePosition: Vector3, pointCloudPosition: PointCloud): DrawablePointCloud {\r\n let newPoint = super.addPoint(mousePosition, pointCloudPosition);\r\n\r\n if (newPoint != null) {\r\n let pointCount = this.points.length;\r\n let nodeMesh = this._createPointAt(newPoint);\r\n this.addChild(nodeMesh);\r\n\r\n if (pointCount === 1) {\r\n nodeMesh.material = this._startPointMaterial;\r\n this._ghostLine = this._createGhostLine();\r\n this.addChild(this._ghostLine);\r\n }\r\n else if (pointCount === 2) {\r\n nodeMesh.material = this._endPointMaterial;\r\n\r\n this._line = this._createLine();\r\n this.addChild(this._line);\r\n\r\n this._axis = this._createAxis(this.points);\r\n this._axis.forEach(a => this.addChild(a));\r\n }\r\n\r\n this.pointMeshes.push(nodeMesh);\r\n }\r\n\r\n return newPoint;\r\n }\r\n\r\n private _computeZEndPoint(): { local: Vector3, global: Vector3 } {\r\n const p1: PointCloud = this.points[0].pointCloudPosition;\r\n const p2: PointCloud = this.points[1].pointCloudPosition;\r\n\r\n let translationMatrix = Matrix.Translation(\r\n p1.transform.translation.x,\r\n p1.transform.translation.y,\r\n p1.transform.translation.z\r\n );\r\n\r\n let rotationMatrix = Matrix.RotationAxis(\r\n MeasureHelper.toVector3(p1.transform.rotation),\r\n p1.transform.rotation.w\r\n );\r\n\r\n let global = new Vector3(\r\n p1.global.x,\r\n p1.global.y,\r\n p2.global.z\r\n );\r\n\r\n let local = MeasureHelper.globalToLocal(\r\n global,\r\n translationMatrix,\r\n rotationMatrix\r\n );\r\n\r\n return { local, global };\r\n }\r\n\r\n private _computeXYIntersection(): { local: Vector3, global: Vector3 } {\r\n const p1: PointCloud = this.points[0].pointCloudPosition;\r\n const p2: PointCloud = this.points[1].pointCloudPosition;\r\n\r\n let translationMatrix = Matrix.Translation(\r\n p1.transform.translation.x,\r\n p1.transform.translation.y,\r\n p1.transform.translation.z\r\n );\r\n\r\n let rotationMatrix = Matrix.RotationAxis(\r\n MeasureHelper.toVector3(p1.transform.rotation),\r\n p1.transform.rotation.w\r\n );\r\n\r\n //XY intersection global\r\n let global = new Vector3(\r\n p1.global.x,\r\n p2.global.y,\r\n p2.global.z,\r\n );\r\n\r\n let local = MeasureHelper.globalToLocal(\r\n global,\r\n translationMatrix,\r\n rotationMatrix\r\n );\r\n\r\n return { local, global };\r\n }\r\n\r\n public update(): void {\r\n let pointCount = this.points.length;\r\n\r\n if (pointCount === 1) {\r\n this._ghostLine = MeshBuilder.CreateDashedLines(\r\n 'GhostLine',\r\n {\r\n points: this._ghostPoints,\r\n instance: this._ghostLine,\r\n }\r\n );\r\n }\r\n\r\n if (pointCount >= 2) {\r\n this._line = MeshBuilder.CreateLines(\r\n 'LineMeasure',\r\n {\r\n points: this.points.map(p => p.position3d),\r\n instance: this._line,\r\n colors: [\r\n this.lineColor,\r\n this.lineColor\r\n ]\r\n }\r\n );\r\n }\r\n }\r\n public get text(): string {\r\n return this.formatText(this.length);\r\n }\r\n\r\n public canAddPoint(): boolean {\r\n return this.points.length < 2;\r\n }\r\n\r\n public get length(): number {\r\n return this.canMeasure\r\n ? Vector3.Distance(\r\n MeasureHelper.toVector3(this.points[0].pointCloudPosition.global),\r\n MeasureHelper.toVector3(this.points[1].pointCloudPosition.global)\r\n )\r\n : Number.NaN;\r\n }\r\n\r\n public get canMeasure(): boolean {\r\n return this.points.length == 2;\r\n }\r\n\r\n private _line: LinesMesh;\r\n private _ghostLine: LinesMesh;\r\n private _ghostPoints: Vector3[] = [];\r\n private _startPointMaterial: StandardMaterial;\r\n private _endPointMaterial: StandardMaterial;\r\n private readonly _transparentMaterial: StandardMaterial;\r\n private readonly _advancedTexture: AdvancedDynamicTexture;\r\n\r\n /** Represent control which display 3d point coordinates */\r\n private _labelPickInfo: PopupConnector;\r\n\r\n /** Represent control which display all measures results */\r\n private _resultInfo: PopupConnector;\r\n\r\n private readonly _xAxisColor: Color4 = Color4.FromHexString('#f0513fff');\r\n private readonly _yAxisColor: Color4 = Color4.FromHexString('#8dc63fff');\r\n private readonly _zAxisColor: Color4 = Color4.FromHexString('#00aeefff');\r\n private readonly _baseLineColor: Color4 = new Color4(1, 1, 1, 1);\r\n\r\n private readonly _xAxis: number = 0;\r\n private readonly _yAxis: number = 1;\r\n private readonly _zAxis: number = 2;\r\n private readonly _baseLine: number = 3;\r\n\r\n private _axis: Array;\r\n private _isAxisVisible: boolean;\r\n private _keepAxisVisible: boolean;\r\n\r\n protected pointMeshes: Array;\r\n\r\n public backgroundTextColor: Color4 = new Color4(0, 0, 0, 1);\r\n public textColor: Color4 = Color4.FromColor3(Color3.White());\r\n\r\n private _lineColor: Color4 = new Color4(1, 1, 1, 1);\r\n public get lineColor(): Color4 {\r\n return this.isActive\r\n ? this.activeLineColor\r\n : this._lineColor;\r\n }\r\n\r\n public set lineColor(value: Color4) {\r\n this._lineColor = value;\r\n }\r\n\r\n public activeLineColor: Color4 = Color4.FromInts(255, 215, 0, 255);\r\n public ghostLineColor: Color4 = new Color4(1, 0, 0);\r\n public formatText: (length: number) => string = l => l.toFixed(2);\r\n public pointDiameter: number = 3;\r\n\r\n public get isAxisVisible(): boolean {\r\n return this._isAxisVisible;\r\n }\r\n\r\n public set isAxisVisible(value: boolean) {\r\n if (this._isAxisVisible != value) {\r\n this._isAxisVisible = value;\r\n\r\n this._axis.forEach(a => a.isVisible = value);\r\n }\r\n }\r\n\r\n public get keepAxisVisible(): boolean {\r\n return this._keepAxisVisible;\r\n }\r\n\r\n public set keepAxisVisible(value: boolean) {\r\n if (this._keepAxisVisible != value) {\r\n this._keepAxisVisible = value;\r\n\r\n this.isAxisVisible = value;\r\n }\r\n }\r\n public get startPointColor(): Color3 {\r\n return this._startPointMaterial != null\r\n ? this._startPointMaterial.emissiveColor\r\n : null;\r\n }\r\n\r\n public set startPointColor(value: Color3) {\r\n if (this._startPointMaterial == null) {\r\n this._startPointMaterial = new StandardMaterial('StartPointMaterial', this.scene);\r\n }\r\n\r\n if (this._startPointMaterial.emissiveColor != value) {\r\n this._startPointMaterial.emissiveColor = value;\r\n }\r\n }\r\n\r\n public get endPointColor(): Color3 {\r\n return this._endPointMaterial != null\r\n ? this._endPointMaterial.emissiveColor\r\n : null;\r\n }\r\n\r\n public set endPointColor(value: Color3) {\r\n if (this._endPointMaterial == null) {\r\n this._endPointMaterial = new StandardMaterial('EndPointMaterial', this.scene);\r\n }\r\n\r\n if (this._endPointMaterial.emissiveColor != value) {\r\n this._endPointMaterial.emissiveColor = value;\r\n }\r\n }\r\n}\r\n","import { AssetPanoramaGroup } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\n\r\nexport function breadcrumbPanoramaGroupsConverter(playerContext: IPlayerContext, value: any): Array {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n const panoramaGroups = value as Array;\r\n\r\n return panoramaGroups.some(g => g.children.length > 1)\r\n ? panoramaGroups\r\n : [];\r\n}\r\n","import { Navigation, NavigationType } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { Visibility } from 'Framework/Components/Panel.Commons';\r\n\r\nexport function emptyNavigationListToVisibilityConverter(playerContext: IPlayerContext, value: any): Visibility {\r\n if (!Array.isArray(value)) {\r\n return Visibility.Collapsed;\r\n }\r\n\r\n const navigations = value as Array;\r\n const navigation = navigations.find(n => n.navigationType == NavigationType.List);\r\n\r\n return navigation?.maps?.length > 0\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n}\r\n","import { Navigation, NavigationType } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { Visibility } from 'Framework/Components/Panel.Commons';\r\n\r\nexport function emptyNavigationMapToVisibilityConverter(playerContext: IPlayerContext, value: any): Visibility {\r\n if (!Array.isArray(value)) {\r\n return Visibility.Collapsed;\r\n }\r\n\r\n const navigations = value as Array;\r\n const navigation = navigations.find(n => n.navigationType == NavigationType.Map);\r\n\r\n return navigation?.maps?.length > 0\r\n ? Visibility.Visible\r\n : Visibility.Collapsed;\r\n}\r\n","import { Navigation, NavigationType, OrderedPanorama } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\n\r\nexport function listNavigationsConverter(playerContext: IPlayerContext, value: any): Array {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n const navigations = value as Array;\r\n const navigation = navigations.find(n => n.navigationType == NavigationType.List);\r\n const maps: Array = [...(navigation?.maps || [])] as Array;\r\n\r\n return maps.sort((a: OrderedPanorama, b: OrderedPanorama) => a.order - b.order);\r\n}\r\n","import { Navigation, NavigationType, ProjectMap } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\n\r\n/**\r\n * Extract a list of map from Navigations property of playerContext.\r\n */\r\nexport function mapsFromNavigationMapConverter(_: IPlayerContext, value: any): Array {\r\n if (!Array.isArray(value) || value.length == 0) {\r\n return [];\r\n }\r\n\r\n const navigations = value as Array;\r\n const nodeMap = navigations.find(n => n.navigationType == NavigationType.Map);\r\n\r\n return nodeMap?.maps as Array ?? [];\r\n}\r\n","import { AppContext } from 'Api/AppContext';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { serviceProvider } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { UrlHelper } from 'Framework/Helpers/UrlHelper';\r\n\r\nexport function urlConverter(playerContext: IPlayerContext, value: any): string {\r\n let guid: string = value;\r\n let appContext = serviceProvider.get(AppContext);\r\n let uriService = serviceProvider.get(injectTypes.IVisonUriService);\r\n\r\n let url = uriService.getAbsoluteUri(`${appContext.codeCulture}/asset/video/${guid}`);\r\n url = UrlHelper.addUrlParameter(url, nameof(playerContext.token), playerContext.validatedToken);\r\n\r\n return url;\r\n}\r\n","import { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { breadcrumbPanoramaGroupsConverter } from 'App/Areas/Shares/PlayerActionConverters/BreadcrumbPanoramaGroupsConverter';\r\nimport { emptyNavigationListToVisibilityConverter } from 'App/Areas/Shares/PlayerActionConverters/EmptyNavigationListToVisibilityConverter';\r\nimport { emptyNavigationMapToVisibilityConverter } from 'App/Areas/Shares/PlayerActionConverters/EmptyNavigationMapToVisibilityConverter';\r\nimport { listNavigationsConverter } from 'App/Areas/Shares/PlayerActionConverters/ListNavigationsConverter';\r\nimport { mapsFromNavigationMapConverter } from 'App/Areas/Shares/PlayerActionConverters/MapsFromNavigationMapConverter';\r\nimport { urlConverter } from 'App/Areas/Shares/PlayerActionConverters/UrlConverter';\r\n\r\nexport type HandlerConverter = (playerContext: IPlayerContext, value: any) => any;\r\n\r\nexport interface IConverter {\r\n name: string;\r\n converter: HandlerConverter;\r\n}\r\n\r\nexport class PlayerConverter {\r\n public static getConverter(name: string): IConverter {\r\n const converter = PlayerConverter._converters[name];\r\n\r\n if (!converter) {\r\n return null;\r\n }\r\n\r\n return {\r\n name,\r\n converter\r\n };\r\n }\r\n\r\n public static get converters(): Array {\r\n return Object.keys(PlayerConverter._converters);\r\n }\r\n\r\n private static readonly _converters: Record = {\r\n urlConverter,\r\n listNavigationsConverter,\r\n emptyNavigationListToVisibilityConverter,\r\n emptyNavigationMapToVisibilityConverter,\r\n breadcrumbPanoramaGroupsConverter,\r\n mapsFromNavigationMapConverter,\r\n };\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('x-grid',{staticClass:\"orano-prs\",style:([_vm.computedStyle])},[_c('iframe',{staticStyle:{\"width\":\"100%\"},attrs:{\"src\":_vm.uriPrs}}),_c('div',{on:{\"click\":function($event){return _vm._dataContext.openOranoPrs(_vm._baseUriPrs, _vm._unit, _vm.localName)}}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { IConfiguration } from 'Api/Dto/Project';\r\nimport { AssetPanoramaVersion } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { editorBrowsable, JsonProperty } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, PropSyncWithInternal, UIElement } from 'Framework/Components/UIElement';\r\nimport urlJoin from 'url-join';\r\n\r\n@Component({\r\n name: 'orano-prs'\r\n})\r\nexport default class OranoPrs extends UIElement {\r\n public get localName(): string {\r\n if (!this._currentPanorama) {\r\n return '';\r\n }\r\n return this._dataContext.findAssetFileFromAssetId(this._currentPanorama.parentId)?.name ?? '';\r\n }\r\n\r\n public get uriPrs(): string {\r\n return urlJoin(this._baseUriPrs, `/#/svaHeader/${this._unit}/${this.localName}`).replace('#', '/#');\r\n }\r\n\r\n @JsonProperty({ className: 'orano-prs', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n @JsonProperty({ className: 'orano-prs', name: 'unit', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('unit', { type: String, default: null })\r\n public _unit: string;\r\n\r\n //Valeur de test\r\n //'http://10.48.242.195:8091/#';\r\n @JsonProperty({ className: 'orano-prs', name: 'baseUriPrs', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('baseUriPrs', { type: String, default: '' })\r\n public _baseUriPrs: string;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n @JsonProperty({ className: 'orano-prs', name: 'configuration', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('configuration', { type: Object, required: false, default: null })\r\n public _configuration: IConfiguration;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OranoPrs.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OranoPrs.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./OranoPrs.vue?vue&type=template&id=087132d8&scoped=true&\"\nimport script from \"./OranoPrs.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./OranoPrs.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./OranoPrs.vue.scss?vue&type=style&index=0&id=087132d8&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"087132d8\",\n null\n \n)\n\nexport default component.exports","import { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport Intersect from 'vuetify/lib/directives/intersect';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('x-grid',{style:([_vm.computedStyle,{width:_vm.isOpen?_vm._width:'auto'}]),attrs:{\"columnDefinitions\":_vm.isOpen ? '* auto' : 'auto'}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"pointer-events\":\"none\"},attrs:{\"column\":2}},[_c(VIcon,{staticStyle:{\"pointer-events\":\"auto\"},on:{\"click\":function($event){_vm.isOpen=!_vm.isOpen}}},[_vm._v(\" \"+_vm._s(_vm.isOpen ? 'fa-regular fa-chevron-left' : 'fa-regular fa-chevron-right')+\" \")])],1),(_vm.isOpen)?_c(VCard,{staticClass:\"o-ventix-panel d-flex flex-column\",attrs:{\"max-width\":300}},[_c(VCardTitle,{staticClass:\"pa-2\"},[_vm._v(\"Menu GMAO\")]),_c(VSheet,{staticClass:\"pa-2 primary lighten-2 d-flex flex-grow-0\"},[_c(VTextField,{attrs:{\"hide-details\":\"\",\"append-icon\":\"fa-light fa-magnifying-glass\",\"single-line\":\"\",\"solo\":\"\",\"flat\":\"\",\"outlined\":!_vm._appContext.isDarkTheme,\"dense\":\"\",\"autofocus\":\"\",\"clearable\":\"\",\"placeholder\":_vm.localizer['Search']},on:{\"input\":_vm.onSearch},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:\"searchText\"}})],1),_c(VCardText,{staticClass:\"pa-2 d-flex flex-grow-1 overflow-y-auto\",staticStyle:{\"height\":\"0\"}},[_c(VDataTable,{staticStyle:{\"width\":\"100%\"},attrs:{\"headers\":_vm.headers,\"items\":_vm.searchResults,\"loading\":_vm.pagination.isLoading,\"items-per-page\":-1,\"item-key\":\"id_equipement\",\"group-by\":\"unite_fonctionnelle\",\"dense\":\"\",\"hide-default-footer\":\"\",\"hide-default-header\":\"\",\"show-group-by\":\"\",\"disable-sort\":\"\"},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c(VCheckbox,{staticClass:\"ma-0\",attrs:{\"dense\":\"\",\"hide-details\":\"\",\"label\":\"Rechercher partout\"},on:{\"change\":function($event){return _vm.onSearch(_vm.searchText)}},model:{value:(_vm.hasSearchAnywhere),callback:function ($$v) {_vm.hasSearchAnywhere=$$v},expression:\"hasSearchAnywhere\"}})]},proxy:true},{key:\"group.header\",fn:function(ref){\nvar group = ref.group;\nvar headers = ref.headers;\nvar isOpen = ref.isOpen;\nvar toggle = ref.toggle;\nreturn [_c('td',{attrs:{\"colspan\":headers.length}},[_c(VIcon,{staticClass:\"mr-2\",attrs:{\"small\":\"\"},on:{\"click\":toggle}},[_vm._v(_vm._s(isOpen ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder'))]),_vm._v(_vm._s(group)+\" \")],1)]}},{key:\"item.nom\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('div',{staticClass:\"text-truncate\",style:({ color: _vm._getIconColor(item), width: '190px' }),attrs:{\"title\":item.designation}},[_vm._v(\" \"+_vm._s(_vm._getRgfWithoutSiteAndAtelier(item.RGF))+\" \")])]}},{key:\"item.locate\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VIcon,{attrs:{\"small\":\"\",\"draggable\":_vm.isDraggable},on:{\"dragstart\":function($event){return _vm.onStartDragItemAsync($event,item)},\"click\":function($event){return _vm.onLookToEquipment(item)}}},[_vm._v(\" \"+_vm._s(_vm.isLocate(item) ? 'fa-regular fa-eye' : 'fa-regular fa-eye-slash')+\" \")])]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":function($event){return _vm._dataContext.openOranoEquipement(item.site, item.id_equipement)}}},[_vm._v(\"fa-regular fa-arrow-up-right-from-square\")])]}},{key:\"loading\",fn:function(){return [_c('div',{staticClass:\"mt-4 text-subtitle-2\"},[_vm._v(\"Récupération des équipements depuis le serveur GMAO...\")])]},proxy:true},(_vm.hasMorePagesToLoad)?{key:\"footer\",fn:function(){return [_c(VProgressCircular,{directives:[{def: Intersect,name:\"intersect\",rawName:\"v-intersect\",value:(_vm.searchRgfNextPageAsync),expression:\"searchRgfNextPageAsync\"}],attrs:{\"indeterminate\":\"\"}})]},proxy:true}:null],null,true)})],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { AssetHotspot, AssetItem, AssetItemType, AssetPanoramaVersion as ProjectAssetPanoramaVersion, singleifyItemNames } from 'Api/Contracts/Dtos';\r\nimport { CoordinateSystem, IConfiguration, ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { ProjectPermissions } from 'Api/Enums/Permissions';\r\nimport { AssetPanoramaVersion, AssetHotspot as ExploreAssetHotspot } from 'Api/ExploreService';\r\nimport { GmaoService, injectTypes } from 'Api/Plugins/Orano';\r\nimport { RgfLocalisation, RgfLocalisationWithGroupeEquipement } from 'Api/Plugins/Orano/Dtos';\r\nimport { IGmaoService } from 'Api/Plugins/Orano/Interfaces';\r\nimport { ProjectService } from 'Api/Services';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { lazyInject, serviceProvider } from 'App/Inversify.config';\r\nimport { IHotspot } from 'Framework/Components/Controls/XView/Core';\r\nimport { JsonProperty, editorBrowsable } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, PropSync, PropSyncWithInternal, UIElement } from 'Framework/Components/UIElement';\r\nimport { EnumHelper } from 'Framework/Helpers/EnumHelper';\r\nimport { DataPagination, DataTableHeader } from 'vuetify';\r\nimport { Intersect } from 'vuetify/lib/directives';\r\n\r\n@Component({\r\n name: 'orano-ventix-panel',\r\n directives: {\r\n Intersect\r\n }\r\n})\r\nexport default class OranoVentixPanel extends UIElement {\r\n public mounted(): void {\r\n this._VentixService = new GmaoService(\r\n this._baseUriVentix,\r\n this._apiKey,\r\n this._getAuthorizationBasicToken(this._denodoUserName, this._denodoPassword)\r\n );\r\n\r\n serviceProvider\r\n .bind(injectTypes.IGmaoService)\r\n .toConstantValue(this._VentixService);\r\n\r\n UIElement.Bus.$on('player-content-loaded', () => this.onSearch(this.searchText));\r\n }\r\n\r\n public beforeDestroy(): void {\r\n UIElement.Bus.$off('player-content-loaded', () => this.onSearch(this.searchText));\r\n }\r\n\r\n public async searchRgfPageAsync(search: string = '', page: number = 1): Promise {\r\n await this._fetchData(search, page);\r\n }\r\n\r\n public async searchRgfNextPageAsync(_entries: Array, _observer: IntersectionObserver, isIntersecting: boolean): Promise {\r\n if (isIntersecting && this.hasMorePagesToLoad) {\r\n await this._fetchData(this.searchText, this.pagination.page + 1);\r\n }\r\n }\r\n\r\n public async onStartDragItemAsync(event: DragEvent, item: RgfLocalisationWithGroupeEquipement): Promise {\r\n event.dataTransfer.setData('text', JSON.stringify(item));\r\n\r\n event.dataTransfer.dropEffect = 'link';\r\n\r\n this._isDropAllowed = item.salle_differentiateur.trim() == this._getCurrentLocal();\r\n await this.$nextTick();\r\n\r\n if (this._isDropAllowed) {\r\n UIElement.Bus.$once('x-view-on-drop-item', this.onEndDragItemAsync.bind(this));\r\n }\r\n }\r\n\r\n public async onEndDragItemAsync(_: any, args: ISphericalCoordinates, event: DragEvent): Promise {\r\n this._isDropAllowed = false;\r\n\r\n const data = JSON.parse(event.dataTransfer.getData('text')) as RgfLocalisationWithGroupeEquipement;\r\n\r\n const name: string = singleifyItemNames(this._configuration.hotspots as unknown as Array, data.designation.trim());\r\n\r\n let hotspot = new AssetHotspot();\r\n hotspot.name = name;\r\n hotspot.assetItemLinkedId = null;\r\n hotspot.type = AssetItemType.Hotspot;\r\n hotspot.parentId = this._currentPanorama.assetItemId;\r\n\r\n hotspot.coordinates = [args];\r\n hotspot.coordinateSystem = CoordinateSystem.Spherical;\r\n hotspot.content = {\r\n type: 'iconRenderer',\r\n icon: 'fa-light fa-circle-info',\r\n color: this._getIconColor(data),\r\n size: (16).toString(),\r\n tooltip: name\r\n };\r\n hotspot.events = {\r\n onClick: `this.openOranoEquipement('${data.atelier}','${data.id_equipement}');`,\r\n onHover: ''\r\n };\r\n\r\n try {\r\n const results = await this._projectService.addNewAssets(\r\n this.playerContext.currentProjet.id,\r\n [hotspot],\r\n this._currentPanorama as unknown as ProjectAssetPanoramaVersion\r\n );\r\n\r\n const newAsset: IHotspot = results[0] as unknown as IHotspot;\r\n if (newAsset) {\r\n newAsset.onclick = this.playerContext.parseFunction(newAsset.events['onClick'], 'hotspot', 'hotspotElement');\r\n this._configuration.hotspots.push(newAsset);\r\n this.playerContext.currentPanorama.hotspots.push(newAsset as any);\r\n UIElement.Bus.$emit('refresh-hotspots');\r\n }\r\n }\r\n catch (ex) {\r\n //TODO : ERROR\r\n }\r\n }\r\n\r\n public onLookToEquipment(item: RgfLocalisation): void {\r\n const hs = this.allHotspot.find(ai => ai.events['onClick'] == `this.openOranoEquipement('${item.atelier}','${item.id_equipement}');`);\r\n\r\n if (hs) {\r\n let [coordinate] = hs.coordinates as Array;\r\n\r\n this.playerContext.goToPanoramaVersion(hs.parentId, coordinate);\r\n }\r\n }\r\n\r\n public isLocate(item: RgfLocalisation): boolean {\r\n return this.allHotspot.some(ai => ai.events['onClick'] == `this.openOranoEquipement('${item.atelier}','${item.id_equipement}');`);\r\n }\r\n\r\n public get allHotspot(): Array {\r\n return this.playerContext.panoramas\r\n .flatMap(g => g.children as Array)\r\n .flatMap(ai => ai.hotspots);\r\n }\r\n\r\n private async _fetchData(search: string, page: number): Promise {\r\n if (this.pagination.isLoading) {\r\n return;\r\n }\r\n\r\n this.pagination.isLoading = true;\r\n\r\n try {\r\n const local = this._getCurrentLocal();\r\n\r\n let searchResults = await this._VentixService.searchRgfAsync(\r\n search,\r\n this._unit,\r\n local,\r\n page,\r\n this.pagination.itemsPerPage\r\n );\r\n\r\n if (page == 1) {\r\n this.searchResults = searchResults;\r\n }\r\n else {\r\n this.searchResults.push(...searchResults);\r\n }\r\n\r\n this.hasMorePagesToLoad = searchResults.length > 0;\r\n this.pagination.page = page;\r\n }\r\n finally {\r\n this.pagination.isLoading = false;\r\n }\r\n }\r\n\r\n private _getAuthorizationBasicToken(userName: string, password: string): string {\r\n return 'Basic ' + btoa(`${userName}:${password}`);\r\n }\r\n\r\n private _getIconColor(item: RgfLocalisationWithGroupeEquipement): string {\r\n switch (item.type_groupe) {\r\n case 'EIP':\r\n case 'ESPN':\r\n return '#FF0000B5';\r\n case 'EDR':\r\n return '#FFA400D2';\r\n default:\r\n return '#FEE600B4';\r\n }\r\n }\r\n\r\n private _getCurrentLocal(): string {\r\n if (this.hasSearchAnywhere) {\r\n return null;\r\n }\r\n\r\n //Local format\r\n // {Unit}-{Local}.{Radius}-xxxx\r\n let local = this._currentPanorama?.name ?? null;\r\n\r\n if (local) {\r\n const match = this.localIdentifierRegex.exec(local);\r\n\r\n if (match) {\r\n local = match.groups['RoomNumber'];\r\n }\r\n }\r\n\r\n return local;\r\n }\r\n\r\n private _getRgfWithoutSiteAndAtelier(rgf: string): string {\r\n const delimiter = '.';\r\n\r\n return rgf.split(delimiter)\r\n .slice(3)\r\n .join(delimiter);\r\n }\r\n\r\n private _getUniteFonctionnelleAvecChaine(rgf: string): string {\r\n const delimiter = '.';\r\n\r\n return rgf.split(delimiter)\r\n .slice(2, 1)\r\n .join();\r\n }\r\n\r\n public get isDraggable(): boolean {\r\n return EnumHelper.hasFlag(this._appContext.user.permissions.project, ProjectPermissions.Contribute);\r\n }\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n //Valeur de test\r\n //baseUri = '/Naval-group/Vis-on/Orano/';\r\n //'https://apim-qual.orano.corp:8065/';\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'baseUriVentix', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('baseUriVentix', { type: String, default: '' })\r\n public _baseUriVentix: string;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'apiKey', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('apiKey', { type: String, default: '' })\r\n public _apiKey: string;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'denodoUserName', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('denodoUserName', { type: String, default: '' })\r\n public _denodoUserName: string;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'denodoPassword', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('denodoPassword', { type: String, default: '' })\r\n public _denodoPassword: string;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'unit', type: String })\r\n @editorBrowsable({ groupName: 'Orano' })\r\n @PropSyncWithInternal('unit', { type: String, default: null })\r\n public _unit: string;\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'configuration', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('configuration', { type: Object, required: false, default: null })\r\n public _configuration: IConfiguration;\r\n\r\n @JsonProperty({ className: 'orano-ventix-panel', name: 'isDropAllowed', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSync('isDropAllowed', { type: Boolean, required: false, default: false })\r\n public _isDropAllowed: boolean;\r\n\r\n public onSearch: any = this.$debounce((search: string) => this.searchRgfPageAsync(search), 500);\r\n\r\n public searchText: string = null;\r\n public searchResults: Array = [];\r\n public hasSearchAnywhere: boolean = false;\r\n\r\n public isOpen: boolean = false;\r\n public hasMorePagesToLoad: boolean = true;\r\n\r\n public headers: Array = [\r\n { text: 'Nom', value: 'nom' },\r\n {\r\n text: 'locate', value: 'locate',\r\n align: 'center'\r\n },\r\n {\r\n text: 'actions', value: 'actions',\r\n align: 'center'\r\n }\r\n ];\r\n\r\n public pagination: DataPagination & { isLoading: boolean } = {\r\n itemsPerPage: 20,\r\n page: 1,\r\n itemsLength: 0,\r\n pageCount: 0,\r\n pageStart: 0,\r\n pageStop: 0,\r\n isLoading: false\r\n };\r\n\r\n public readonly localIdentifierRegex = /^[^-]*-(?[\\d\\w]+)(\\.(?[\\d\\w]*))?-PO\\d*-?V\\d*-N[\\d.]*-?E[\\d.]*$/;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(ProjectService)\r\n private readonly _projectService: ProjectService;\r\n\r\n private _VentixService: IGmaoService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OranoVentixPanel.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./OranoVentixPanel.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./OranoVentixPanel.vue?vue&type=template&id=2b8aa433&scoped=true&\"\nimport script from \"./OranoVentixPanel.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./OranoVentixPanel.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./OranoVentixPanel.vue.scss?vue&type=style&index=0&id=2b8aa433&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b8aa433\",\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VTextField,{staticClass:\"pa-2\",style:([{'background-color':'rgba(0,0,0,0.4)'}, _vm.computedStyle]),attrs:{\"hide-details\":\"\",\"dense\":\"\"},on:{\"focus\":function($event){return $event.target.select()}},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm._onCopyLocationAsync}},[_c(VIcon,[_vm._v(\"fa-light fa-clipboard\")])],1),_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm._onGoToLocation}},[_c(VIcon,[_vm._v(\"fa-light fa-circle-arrow-right\")])],1)]},proxy:true}]),model:{value:(_vm.location),callback:function ($$v) {_vm.location=(typeof $$v === 'string'? $$v.trim(): $$v)},expression:\"location\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { Component, Prop, UIElement, Watch } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'vo-share-location'\r\n})\r\nexport default class VoShareLocation extends UIElement {\r\n @Watch('playerContext.currentProjet')\r\n @Watch('playerContext.currentPanorama')\r\n @Watch('playerContext.currentOrientation')\r\n @Watch('playerContext.currentFocale')\r\n public playerContextPropertyChanged(): void {\r\n this.location = 'vison://';\r\n\r\n if (this.playerContext) {\r\n let loc = {\r\n projectId: this.playerContext.currentProjet.id,\r\n assetPanoramaVersionId: this.playerContext.currentPanorama.assetItemId,\r\n orientation: this.playerContext.currentOrientation,\r\n fov: this.playerContext.currentFocale\r\n };\r\n this.location = `${this.location}${btoa(JSON.stringify(loc))}`;\r\n }\r\n }\r\n\r\n private async _onCopyLocationAsync(): Promise {\r\n await navigator.clipboard.writeText(this.location);\r\n }\r\n\r\n private _onGoToLocation(): void {\r\n const location = this.location;\r\n\r\n if (location?.startsWith('vison://')) {\r\n let loc = JSON.parse(atob(location.substring(8)));\r\n\r\n this.playerContext.goToPanoramaVersion(\r\n loc.assetPanoramaVersionId,\r\n loc.orientation,\r\n loc.fov\r\n );\r\n }\r\n }\r\n\r\n public location: string = null;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoShareLocation.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoShareLocation.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoShareLocation.vue?vue&type=template&id=ea4d704e&\"\nimport script from \"./VoShareLocation.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoShareLocation.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\nimport Intersect from 'vuetify/lib/directives/intersect';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('x-grid',{style:([_vm.computedStyle, { width: _vm.isOpen ? _vm._width : 'auto' }]),attrs:{\"columnDefinitions\":_vm.isOpen ? '* auto' : 'auto'}},[_c('div',{staticClass:\"d-flex align-center\",staticStyle:{\"pointer-events\":\"none\"},attrs:{\"column\":2}},[_c(VIcon,{staticStyle:{\"pointer-events\":\"auto\"},on:{\"click\":function($event){_vm.isOpen = !_vm.isOpen}}},[_vm._v(\" \"+_vm._s(_vm.isOpen ? 'far fa-chevron-left' : 'far fa-chevron-right')+\" \")])],1),(_vm.isOpen)?_c(VCard,{staticClass:\"d-flex flex-column\",attrs:{\"min-width\":\"200\",\"max-width\":\"540\"}},[_c(VCardTitle,{staticClass:\"text-h5 pb-0\"},[_vm._v(\" \"+_vm._s(_vm.localizer((_vm.translationPath + \".PanelName\")))+\" \")]),_c(VCardText,{staticClass:\"px-0\",staticStyle:{\"height\":\"calc(100% - (32px + 16px))\"}},[_c(VContainer,{staticClass:\"container\",attrs:{\"fluid\":\"\"}},[_c(VTextField,{attrs:{\"hide-details\":\"\",\"append-icon\":\"fa-light fa-magnifying-glass\",\"single-line\":\"\",\"solo\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\",\"clearable\":\"\",\"loading\":_vm.isLoading,\"placeholder\":_vm.localizer((_vm.translationPath + \".SearchBox\"))},on:{\"input\":_vm.onSearch,\"click:clear\":_vm._clear}}),_c(VSelect,{attrs:{\"items\":_vm._objectTypeToRetrieve,\"label\":_vm.localizer((_vm.translationPath + \".Category\")),\"multiple\":\"\",\"hide-details\":\"\",\"small-chips\":\"\",\"clearable\":\"\"},model:{value:(_vm.selectedObjectTypes),callback:function ($$v) {_vm.selectedObjectTypes=$$v},expression:\"selectedObjectTypes\"}}),_c(VList,{staticClass:\"overflow-x-hidden\"},[_c(VSubheader,[_vm._v(_vm._s(_vm.localizer((_vm.translationPath + \".FilterByZone\"))))]),_c(VListItem,[_c(VListItemAction,[_c(VCheckbox,{attrs:{\"disabled\":!_vm._currentPanorama},model:{value:(_vm.currentPanoramaOnly),callback:function ($$v) {_vm.currentPanoramaOnly=$$v},expression:\"currentPanoramaOnly\"}})],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm.localizer((_vm.translationPath + \".SearchInCurrentPanorama\"))))])],1)],1)],1),_c(VToolbar,{staticClass:\"overflow-x-hidden\",attrs:{\"color\":\"primary\",\"dense\":\"\"}},[_c(VToolbarTitle,[_vm._v(_vm._s(_vm.localizer((_vm.translationPath + \".SearchResult\"), _vm.smartObjects.length)))]),_c(VSpacer),_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm._openAddSmartObjectDialogAsync}},[_c(VIcon,[_vm._v(\" fa-light fa-plus \")])],1),_c(VBtn,{attrs:{\"icon\":\"\"},on:{\"click\":_vm._toggleDisplay}},[(_vm.displayInMosaic)?_c(VIcon,[_vm._v(\" fa-light fa-list \")]):_c(VIcon,[_vm._v(\" fa-light fa-grid-2 \")])],1)],1),(_vm.displayInMosaic)?_c(VList,{staticClass:\"overflow-y-auto\"},[_vm._l((_vm.smartObjects),function(obj,k){return [(k > 0)?_c(VDivider,{key:(\"listDivider-\" + k)}):_vm._e(),_c('div',{key:(\"listElement-\" + k),attrs:{\"draggable\":_vm.hasDragPermission},on:{\"click\":function($event){return _vm._lookAtSmartObject(obj)},\"dblclick\":function($event){return _vm._openSmartObjectDetailsDialogAsync(obj)},\"dragstart\":function($event){return _vm._onStartDragItem($event, obj)}}},[_c(VListItem,[_c(VListItemIcon,[_c(VIcon,[_vm._v(_vm._s(obj.dataSource.icon))])],1),_c(VListItemContent,[_c(VListItemTitle,[_vm._v(_vm._s(_vm._formatMemberPath(obj)))])],1),(_vm.hasDragPermission)?_c(VListItemAction,[_c(VTooltip,{attrs:{\"right\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c(VIcon,_vm._g(_vm._b({attrs:{\"small\":\"\"}},'v-icon',attrs,false),on),[_vm._v(\" fa-light fa-grip-vertical \")])]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.localizer((_vm.translationPath + \".DragAndDrop\"))))])])],1):_vm._e()],1)],1)]}),(_vm.hasMorePagesToLoad)?_c(VProgressCircular,{directives:[{def: Intersect,name:\"intersect\",rawName:\"v-intersect.quiet\",value:(_vm._onLoaderIntersectsAsync),expression:\"_onLoaderIntersectsAsync\",modifiers:{\"quiet\":true}}],staticClass:\"d-flex justify-center\",attrs:{\"indeterminate\":\"\"}}):_vm._e()],2):_c('div',{staticClass:\"overflow-y-auto overflow-x-hidden fill-height align-content-start\",attrs:{\"fluid\":\"\"}},[_c(VRow,_vm._l((_vm.smartObjects),function(obj,k){return _c(VCol,{key:(\"MosaicList-\" + k),attrs:{\"cols\":\"12\",\"md\":\"4\",\"lg\":\"4\"}},[_c('div',{attrs:{\"draggable\":_vm.hasDragPermission},on:{\"click\":function($event){return _vm._lookAtSmartObject(obj)},\"dblclick\":function($event){return _vm._openSmartObjectDetailsDialogAsync(obj)},\"dragstart\":function($event){return _vm._onStartDragItem($event, obj)}}},[_c(VCard,{attrs:{\"outlined\":\"\"}},[_c(VCardTitle,{staticClass:\"d-flex justify-center align-center\"},[_c(VIcon,{attrs:{\"dense\":\"\"}},[_vm._v(\" \"+_vm._s(obj.dataSource.icon))])],1),_c(VCardText,{staticClass:\"d-flex justify-center align-center\"},[_c('span',{staticClass:\"text-truncate\"},[_vm._v(_vm._s(_vm._formatMemberPath(obj)))])])],1)],1)])}),1),(_vm.hasMorePagesToLoad)?_c(VProgressCircular,{directives:[{def: Intersect,name:\"intersect\",rawName:\"v-intersect.quiet\",value:(_vm._onLoaderIntersectsAsync),expression:\"_onLoaderIntersectsAsync\",modifiers:{\"quiet\":true}}],staticClass:\"d-flex justify-center\",attrs:{\"indeterminate\":\"\"}}):_vm._e()],1)],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { AssetHotspot, AssetPanoramaVersion as ProjectAssetPanoramaVersion, singleifyItemNames, SmartObjectDto } from 'Api/Contracts/Dtos';\r\nimport { SmartObjectGroupingDto, SmartObjectSearchCriteriaDto } from 'Api/Contracts/Dtos/SmartObject';\r\nimport { ISmartObjectService } from 'Api/Contracts/Interfaces';\r\nimport { CoordinateSystem, IConfiguration, ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { IPaginationResult } from 'Api/Dto/QueryResult';\r\nimport { ProjectPermissions } from 'Api/Enums/Permissions';\r\nimport { AssetPanoramaVersion, AssetHotspot as ExploreAssetHotspot } from 'Api/ExploreService';\r\nimport { ProjectService } from 'Api/Services';\r\nimport VoAddOrEditSmartObjectDialog from 'App/Areas/Shares/Dialogs/VoAddOrEditSmartObjectDialog.vue';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IHotspot } from 'Framework/Components/Controls/XView/Core';\r\nimport { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, PropSync, UIElement, Watch } from 'Framework/Components/UIElement';\r\nimport { EnumHelper } from 'Framework/Helpers/EnumHelper';\r\nimport { DialogResult, IDialogService } from 'Framework/Services/IDialogService';\r\nimport { CompositeSpecification } from 'ts-specification';\r\nimport ISpecification from 'ts-specification/dist/ISpecification';\r\nimport { Intersect } from 'vuetify/lib';\r\n\r\nclass SmartObjectHotspotsSpecification extends CompositeSpecification {\r\n public constructor(hotspotNames: Array) {\r\n super();\r\n this._hotspotsNames = new Set(hotspotNames);\r\n }\r\n\r\n public isSatisfiedBy(candidate: ExploreAssetHotspot): boolean {\r\n return this._hotspotsNames.has(candidate.name);\r\n }\r\n\r\n private readonly _hotspotsNames: Set;\r\n}\r\n\r\n@Component({\r\n name: 'vo-smart-object-panel',\r\n directives: {\r\n Intersect\r\n }\r\n})\r\nexport default class VoSmartObjectPanel extends UIElement {\r\n public async mounted(): Promise {\r\n this.isOpen = this._isPanelOpen;\r\n\r\n this.currentPanoramaOnly = !!this._currentPanorama;\r\n\r\n await this._fetchObjectsAsync();\r\n }\r\n\r\n private async _fetchObjectsAsync(nextLink?: string): Promise {\r\n this.isLoading = true;\r\n\r\n if (!this.currentPanoramaOnly) {\r\n this._resetHotspotsSpecification();\r\n }\r\n\r\n try {\r\n let requestResult: IPaginationResult = null;\r\n\r\n if (nextLink) {\r\n requestResult = await this._smartObjectService.getObjectsAsync(nextLink, this.playerContext.token);\r\n this.smartObjects.push(...requestResult.items.flatMap(t => t.items));\r\n }\r\n else {\r\n requestResult = await this._smartObjectService.getObjectsAsync(\r\n this._getSearchRequest(),\r\n this.playerContext.validatedToken);\r\n\r\n const fetchedObjects = requestResult.items\r\n .flatMap(t => t.items);\r\n\r\n this.smartObjects = [];\r\n\r\n for (const smartObject of fetchedObjects) {\r\n let cachedObject = this.playerContext.smartObjects\r\n .find(so => so.assetItemId == smartObject.assetItemId);\r\n\r\n if (!cachedObject) {\r\n cachedObject = SmartObjectDto.fromJson(smartObject);\r\n this.playerContext.smartObjects.push(cachedObject);\r\n }\r\n\r\n this.smartObjects.push(cachedObject);\r\n }\r\n }\r\n\r\n this.nextLink = requestResult.nextLink;\r\n\r\n if (this.currentPanoramaOnly) {\r\n this._setHotspotsSpecification(this._qualifiedHotspotsSpecification());\r\n }\r\n\r\n this.totalObjectsCount = requestResult.totalCount;\r\n }\r\n finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n private _getSearchRequest(): SmartObjectSearchCriteriaDto {\r\n const request: SmartObjectSearchCriteriaDto = {\r\n projectId: this.projectId,\r\n types: null,\r\n page: 1,\r\n pageSize: this.resultPerload\r\n };\r\n\r\n if (this.searchText) {\r\n request.filter = this.smartObjects\r\n .filter(d => d.displayPropertyPath != null)\r\n .map(t => t.displayPropertyPath)\r\n .filter((value, index, self) => self.indexOf(value) === index)\r\n .map(so => `${so.slice(1)} contains '${this.searchText}'`)\r\n .join(' or ') || null;\r\n }\r\n\r\n if (this.currentPanoramaOnly) {\r\n request.panoramaVersionId = this._currentPanorama.assetItemId;\r\n }\r\n\r\n if (this.selectedObjectTypes.length > 0) {\r\n request.types = this.selectedObjectTypes;\r\n }\r\n\r\n return request;\r\n }\r\n\r\n private async _onLoaderIntersectsAsync(entries: Array, observer: IntersectionObserver, isIntersecting: boolean): Promise {\r\n if (isIntersecting && this.hasMorePagesToLoad && this.nextLink) {\r\n await this._fetchObjectsAsync(this.nextLink);\r\n }\r\n }\r\n\r\n private _onStartDragItem(event: DragEvent, smartObject: SmartObjectDto): void {\r\n event.dataTransfer.setData('text', JSON.stringify({\r\n id: smartObject.assetItemId,\r\n name: this._hotspotName(smartObject),\r\n type: smartObject.dataSource.$type,\r\n icon: smartObject.dataSource.icon,\r\n color: smartObject.dataSource.color,\r\n size: smartObject.dataSource.size\r\n }));\r\n\r\n event.dataTransfer.dropEffect = 'link';\r\n this._isDropAllowed = true;\r\n\r\n UIElement.Bus.$once('x-view-on-drop-item', this._onEndDragItem.bind(this));\r\n }\r\n\r\n private async _onEndDragItem(_sender: any, args: ISphericalCoordinates, event: DragEvent): Promise {\r\n this._isDropAllowed = false;\r\n const data = JSON.parse(event.dataTransfer.getData('text'));\r\n\r\n const hotspot = new AssetHotspot();\r\n\r\n hotspot.name = singleifyItemNames(\r\n this.allHotspots,\r\n data.name);\r\n\r\n hotspot.assetItemLinkedId = data.id\r\n hotspot.parentId = this._currentPanorama.assetItemId;\r\n\r\n hotspot.coordinates = [args];\r\n hotspot.coordinateSystem = CoordinateSystem.Spherical;\r\n hotspot.content = {\r\n type: 'iconRenderer',\r\n icon: data.icon,\r\n color: data.color,\r\n size: data.size,\r\n tooltip: data.name\r\n };\r\n hotspot.events = {\r\n onClick: 'this.openAsset(hotspot.assetItemLinkedId)',\r\n onHover: null\r\n };\r\n\r\n const results = await this._projectService.addNewAssets(\r\n this.playerContext.currentProjet.id,\r\n [hotspot],\r\n this._currentPanorama as unknown as ProjectAssetPanoramaVersion);\r\n\r\n const newAsset: IHotspot = results[0] as unknown as IHotspot;\r\n\r\n if (newAsset) {\r\n newAsset.onclick = this.playerContext.parseFunction(\r\n newAsset.events['onClick'],\r\n 'hotspot',\r\n 'hotspotElement');\r\n\r\n this.playerContext.currentPanorama.addChildren(\r\n ...[ExploreAssetHotspot.fromJson(newAsset)]);\r\n\r\n // openAsset need instanceOf to works\r\n if (!this.playerContext.smartObjects.some(t => t.assetItemId == hotspot.assetItemLinkedId)) {\r\n this.playerContext.smartObjects.push(SmartObjectDto.fromJson(\r\n this.smartObjects.find(t => t.assetItemId == hotspot.assetItemLinkedId)));\r\n }\r\n\r\n const specification: ISpecification = this.currentPanoramaOnly\r\n ? this._qualifiedHotspotsSpecification()\r\n : new SmartObjectHotspotsSpecification(\r\n [...this.allHotspots.map(t => t.name), hotspot.name]);\r\n\r\n this._setHotspotsSpecification(specification);\r\n\r\n UIElement.Bus.$emit('refresh-hotspots');\r\n }\r\n }\r\n\r\n private async _openSmartObjectDetailsDialogAsync(smartObject: SmartObjectDto): Promise {\r\n await this.playerContext.openSmartObjectDetailsDialogAsync(smartObject);\r\n }\r\n\r\n private async _openAddSmartObjectDialogAsync(): Promise {\r\n const dialogResult: DialogResult = await this._dialogService.openAsync(\r\n 'Shares',\r\n VoAddOrEditSmartObjectDialog,\r\n {\r\n projectId: this.projectId,\r\n schemaNames: this._objectTypeToRetrieve\r\n },\r\n {\r\n width: this._appContext.settings.dialogs.medium.width,\r\n height: this._appContext.settings.dialogs.large.height,\r\n });\r\n\r\n if (dialogResult == DialogResult.OK) {\r\n await this._fetchObjectsAsync();\r\n }\r\n }\r\n\r\n private _formatMemberPath(smartObject: SmartObjectDto): string {\r\n return smartObject.dataSource[smartObject.displayPropertyPath.substring(1)] as string;\r\n }\r\n\r\n private _qualifiedHotspotsSpecification(): ISpecification {\r\n const qualifiedSmatObjectHotspots: Array = this.currentPanoramaSmartObjectHotspots.map(t => t.name);\r\n const contentHotspots: Array = this.currentPanoramaHotspotWithoutSmartobjects.map(t => t.name);\r\n\r\n return new SmartObjectHotspotsSpecification(qualifiedSmatObjectHotspots.concat(contentHotspots));\r\n }\r\n\r\n private _lookAtSmartObject(object: SmartObjectDto): void {\r\n const hs = this.allHotspots.find(ai => ai.assetItemLinkedId == object.assetItemId);\r\n\r\n if (hs) {\r\n const [coordinate] = hs.coordinates as Array;\r\n\r\n this.playerContext.goToPanoramaVersion(hs.parentId, coordinate, 0.3);\r\n }\r\n }\r\n\r\n private _search(searchText: string = null): void {\r\n this.searchText = searchText;\r\n }\r\n\r\n private _clear(): void {\r\n this.searchText = null;\r\n }\r\n\r\n private _getobjectsByType(type: string): Array {\r\n return this.smartObjects.filter(t => t.dataSource.$type == type);\r\n }\r\n\r\n private _toggleDisplay(): void {\r\n this.displayInMosaic = !this.displayInMosaic;\r\n }\r\n\r\n private _hotspotName(smartObject: SmartObjectDto): string {\r\n return `${this._formatMemberPath(smartObject)}`;\r\n }\r\n\r\n private _setHotspotsSpecification(specification: ISpecification): void {\r\n if (this._hotspotsSpecification) {\r\n this.playerContext.hotspotsFilters.update(\r\n specification,\r\n this._hotspotsSpecification);\r\n }\r\n else {\r\n this.playerContext.hotspotsFilters.add(specification);\r\n }\r\n\r\n this._hotspotsSpecification = specification;\r\n }\r\n\r\n private _resetHotspotsSpecification(): void {\r\n if (this._hotspotsSpecification) {\r\n this.playerContext.hotspotsFilters.remove(this._hotspotsSpecification);\r\n this._hotspotsSpecification = null;\r\n }\r\n }\r\n\r\n @Watch('currentPanoramaOnly')\r\n @Watch('selectedObjectTypes')\r\n @Watch('playerContext.currentPanorama')\r\n @Watch('searchText')\r\n private async _onFilterOrSortChangeAsync(): Promise {\r\n await this._fetchObjectsAsync();\r\n }\r\n\r\n public onSearch: (search: string) => void = this.$debounce(\r\n async (search: string) => this._search(search),\r\n 500);\r\n\r\n public get hasMorePagesToLoad(): boolean {\r\n return this.smartObjects.length < this.totalObjectsCount;\r\n }\r\n\r\n public get projectId(): number {\r\n return this.playerContext?.currentProjet.id ?? 0;\r\n }\r\n\r\n public get allHotspots(): Array {\r\n return this.playerContext.panoramas\r\n .flatMap(g => g.children as Array)\r\n .flatMap(panorama => Array.from(this.playerContext\r\n .getHotposts(panorama)) as unknown as Array);\r\n }\r\n\r\n public get currentPanoramaSmartObjectHotspots(): Array {\r\n const filteredHotspots: Array = this._currentPanorama.hotspots\r\n .filter(h => this.smartObjects.map(t => t.assetItemId).includes(h.assetItemLinkedId));\r\n\r\n return this.searchText\r\n ? filteredHotspots.filter(hs => hs.name.includes(this.searchText))\r\n : filteredHotspots;\r\n }\r\n\r\n public get currentPanoramaHotspotWithoutSmartobjects(): Array {\r\n return this._currentPanorama.hotspots\r\n .filter(h => !this.playerContext.smartObjects.map(t => t.assetItemId).includes(h.assetItemLinkedId));\r\n }\r\n\r\n public get hasDragPermission(): boolean {\r\n return EnumHelper.hasFlag(this._appContext.user.permissions.project, ProjectPermissions.Contribute);\r\n }\r\n\r\n public smartObjects: Array = [];\r\n public currentPanoramaOnly: boolean = true;\r\n public nextLink: string = null;\r\n public isLoading: boolean = false;\r\n public displayInMosaic: boolean = false;\r\n public selectedObjectTypes: Array = [];\r\n public isOpen: boolean = false;\r\n public resultPerload: number = 100;\r\n public totalObjectsCount: number = 0;\r\n public searchText: string = null;\r\n\r\n public readonly translationPath: string = 'Areas.Explore.Components.SmartObjectPanel';\r\n\r\n private _hotspotsSpecification: ISpecification;\r\n @JsonProperty({ className: 'vo-smart-object-panel', name: 'isPanelOpen', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSyncWithInternal('isPanelOpen', { type: Boolean, required: false, default: false })\r\n public _isPanelOpen: boolean;\r\n\r\n @JsonProperty({ className: 'vo-smart-object-panel', name: 'objectTypeToRetrieve', type: Array })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('objectTypeToRetrieve', { type: Array, required: false, default: () => [] })\r\n public _objectTypeToRetrieve: Array;\r\n\r\n @JsonProperty({ className: 'vo-smart-object-panel', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n @JsonProperty({ className: 'vo-smart-object-panel', name: 'configuration', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('configuration', { type: Object, required: false, default: null })\r\n public _configuration: IConfiguration;\r\n\r\n @JsonProperty({ className: 'vo-smart-object-panel', name: 'isDropAllowed', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSync('isDropAllowed', { type: Boolean, required: false, default: false })\r\n public _isDropAllowed: boolean;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n @lazyInject(injectTypes.ISmartObjectService)\r\n private readonly _smartObjectService: ISmartObjectService;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(ProjectService)\r\n private readonly _projectService: ProjectService;\r\n\r\n @lazyInject(injectTypes.IDialogService)\r\n private readonly _dialogService: IDialogService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSmartObjectPanel.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoSmartObjectPanel.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoSmartObjectPanel.vue?vue&type=template&id=5f378e3e&scoped=true&\"\nimport script from \"./VoSmartObjectPanel.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoSmartObjectPanel.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./VoSmartObjectPanel.vue.scss?vue&type=style&index=0&id=5f378e3e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f378e3e\",\n null\n \n)\n\nexport default component.exports","import { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSheet } from 'vuetify/lib/components/VSheet';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('x-grid',{style:([_vm.computedStyle,{width:_vm.isOpen?_vm._width:'auto'}]),attrs:{\"columnDefinitions\":_vm.isOpen ? '* auto' : 'auto'}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"pointer-events\":\"none\"},attrs:{\"column\":2}},[_c(VIcon,{staticStyle:{\"pointer-events\":\"auto\"},on:{\"click\":function($event){_vm.isOpen=!_vm.isOpen}}},[_vm._v(\" \"+_vm._s(_vm.isOpen ? 'fa-regular fa-chevron-left' : 'fa-regular fa-chevron-right')+\" \")])],1),(_vm.isOpen)?_c(VCard,{staticClass:\"o-wiw-panel d-flex flex-column\",attrs:{\"max-width\":300}},[_c(VSheet,{staticClass:\"pa-2 primary lighten-2 d-flex flex-grow-0\"},[_c(VTextField,{attrs:{\"loading\":_vm.isSearching,\"hide-details\":\"\",\"append-icon\":\"fa-light fa-magnifying-glass\",\"single-line\":\"\",\"solo\":\"\",\"flat\":\"\",\"outlined\":!_vm._appContext.isDarkTheme,\"dense\":\"\",\"autofocus\":\"\",\"clearable\":\"\",\"placeholder\":_vm.localizer['Search']},on:{\"input\":_vm.onSearch},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:\"searchText\"}})],1),_c(VCardText,{staticClass:\"d-flex flex-grow-1\",staticStyle:{\"height\":\"0\",\"overflow-y\":\"auto\"}},[_c(VDataTable,{staticStyle:{\"width\":\"100%\"},attrs:{\"headers\":_vm.headers,\"items\":_vm.searchResults,\"loading\":_vm.isSearching,\"items-per-page\":-1,\"item-key\":\"id\",\"dense\":\"\",\"hide-default-footer\":\"\",\"hide-default-header\":\"\",\"disable-sort\":\"\"},scopedSlots:_vm._u([{key:\"item.name\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{attrs:{\"title\":item.name}},[_vm._v(_vm._s(item.name))])]}},{key:\"item.locate\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VIcon,{attrs:{\"small\":\"\",\"draggable\":_vm.isDraggable},on:{\"dragstart\":function($event){return _vm._onStartDragItem($event,item)},\"click\":function($event){return _vm._onLookToEquipment(item)}}},[_vm._v(\" \"+_vm._s(_vm.isLocate(item) ? 'fa-regular fa-eye' : 'fa-regular fa-eye-slash')+\" \")])]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c(VIcon,{attrs:{\"small\":\"\"},on:{\"click\":function($event){return _vm._dataContext.eplumeElement(item.id,null)}}},[_vm._v(\"fa-regular fa-arrow-up-right-from-square\")])]}}],null,false,1114741352)})],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AppContext } from 'Api/AppContext';\r\nimport { AssetHotspot, AssetItemType, AssetPanoramaVersion as ProjectAssetPanoramaVersion } from 'Api/Contracts/Dtos';\r\nimport { CoordinateSystem, IConfiguration, ISphericalCoordinates } from 'Api/Dto/Project';\r\nimport { ProjectPermissions } from 'Api/Enums/Permissions';\r\nimport { AssetPanoramaVersion, AssetHotspot as ExploreAssetHotspot, Project } from 'Api/ExploreService';\r\nimport { IEntity, ISearchResult, IWiwContext, injectTypes as wiwInjectTypes, WiwService } from 'Api/Plugins/Wiw/WiwService';\r\nimport { ProjectService } from 'Api/Services';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject, serviceProvider } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { IHotspot } from 'Framework/Components/Controls/XView/Core';\r\nimport { editorBrowsable, JsonProperty } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, PropSync, PropSyncWithInternal, UIElement } from 'Framework/Components/UIElement';\r\nimport { EnumHelper } from 'Framework/Helpers/EnumHelper';\r\nimport { DataTableHeader } from 'vuetify';\r\n\r\n@Component({\r\n name: 'wiw-panel'\r\n})\r\nexport default class WiwPanel extends UIElement {\r\n public mounted() {\r\n this._WiwService = new WiwService(this._baseUriWiw, this._apiKey);\r\n\r\n serviceProvider\r\n .bind(WiwService)\r\n .toConstantValue(this._WiwService);\r\n\r\n serviceProvider\r\n .bind(wiwInjectTypes.IWiwContext)\r\n .toConstantValue({\r\n baseUriWiw: this._baseUriWiw,\r\n apiKey: this._apiKey\r\n });\r\n }\r\n\r\n public async fetchDataAsync(search: string = '', page: number = 1): Promise {\r\n if (this._isFetching) {\r\n return;\r\n }\r\n\r\n this._isFetching = true;\r\n\r\n try {\r\n if (!this._WiwService.isLogged) {\r\n await this._WiwService.loginTokenAsync(this._apiKey);\r\n }\r\n\r\n let searchResults = await this._WiwService.searchEntityAsync(search);\r\n\r\n if (page == 1) {\r\n this.searchResults = searchResults;\r\n this.totalItems = 25;//searchResults.totalItemsCount;\r\n this.currentPage = 1;\r\n this.totalPages = 1;//searchResults.totalPages;\r\n }\r\n else {\r\n this.searchResults.push(...searchResults);\r\n }\r\n }\r\n finally {\r\n this._isFetching = false;\r\n }\r\n }\r\n\r\n public isLocate(item: IEntity): boolean {\r\n return this.allHotspots.some(ai => ai.events['onClick']?.startsWith(`this.eplumeElement('${item.id}',`));\r\n }\r\n\r\n private _onStartDragItem(event: DragEvent, item: IEntity): void {\r\n event.dataTransfer.setData('text', JSON.stringify({\r\n id: item.id,\r\n name: item.name\r\n }));\r\n\r\n event.dataTransfer.dropEffect = 'link';\r\n this._isDropAllowed = true;\r\n\r\n UIElement.Bus.$once('x-view-on-drop-item', this._onEndDragItem.bind(this));\r\n }\r\n\r\n private async _onEndDragItem(sender: any, args: ISphericalCoordinates, event: DragEvent): Promise {\r\n this._isDropAllowed = false;\r\n\r\n let data = JSON.parse(event.dataTransfer.getData('text'));\r\n\r\n let hotspot = new AssetHotspot();\r\n hotspot.name = data.name;\r\n hotspot.assetItemLinkedId = null;\r\n hotspot.type = AssetItemType.Hotspot;\r\n hotspot.parentId = this._currentPanorama.assetItemId;\r\n\r\n hotspot.coordinates = [args];\r\n hotspot.coordinateSystem = CoordinateSystem.Spherical;\r\n hotspot.content = {\r\n type: 'iconRenderer',\r\n icon: 'fa-light fa-circle-info',\r\n color: '#FEE600B4',\r\n size: (16).toString(),\r\n tooltip: data.name\r\n };\r\n hotspot.events = {\r\n onClick: `this.eplumeElement('${data.id}',null);`,\r\n onHover: ''\r\n };\r\n\r\n try {\r\n const results = await this._projectService.addNewAssets(\r\n this.playerContext.currentProjet.id,\r\n [hotspot],\r\n this._currentPanorama as unknown as ProjectAssetPanoramaVersion\r\n );\r\n\r\n const newAsset: IHotspot = results[0] as unknown as IHotspot;\r\n\r\n if (newAsset) {\r\n newAsset.onclick = this.playerContext.parseFunction(newAsset.events['onClick'], 'hotspot', 'hotspotElement');\r\n this._configuration.hotspots.push(newAsset);\r\n\r\n const uriPanoLookToHotspot = this._buildProjectLink(args);\r\n await this._WiwService.updateEntityAsync(data.id, uriPanoLookToHotspot);\r\n\r\n UIElement.Bus.$emit('refresh-hotspots');\r\n }\r\n }\r\n catch (ex) {\r\n //TODO : ERROR\r\n }\r\n }\r\n\r\n private _onLookToEquipment(item: IEntity): void {\r\n const hs = this.allHotspots.find(ai => ai.events['onClick']?.startsWith(`this.eplumeElement('${item.id}',`));\r\n\r\n if (hs) {\r\n let [coordinate] = hs.coordinates as Array;\r\n\r\n this.playerContext.goToPanoramaVersion(hs.parentId, coordinate);\r\n }\r\n }\r\n\r\n private _buildProjectLink(hotspotOrientation: any): string {\r\n let uri = `/${this._appContext.codeCulture}/embed/?pId=${this.project.id}&token=${this.project.token}#startPanorama=${this.playerContext.currentPanorama.assetItemId}&startOrientation=${JSON.stringify(hotspotOrientation)}`;\r\n return this._uriService.getAbsoluteUri(uri);\r\n }\r\n\r\n public get allHotspots(): Array {\r\n return this.playerContext.panoramas\r\n .flatMap(g => g.children as Array)\r\n .flatMap(ai => ai.hotspots);\r\n }\r\n\r\n public get isDraggable(): boolean {\r\n return EnumHelper.hasFlag(this._appContext.user.permissions.project, ProjectPermissions.Contribute);\r\n }\r\n\r\n public get hasMorePagesToLoad() {\r\n return this.currentPage < this.totalPages;\r\n }\r\n\r\n public get isSearching() {\r\n return this._isFetching && this.currentPage == 1;\r\n }\r\n\r\n private get project(): Project {\r\n return this.playerContext?.currentProjet;\r\n }\r\n\r\n @JsonProperty({ className: 'wiw-panel', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n @JsonProperty({ className: 'wiw-panel', name: 'baseUriWiw', type: String })\r\n @editorBrowsable({ groupName: 'WIW' })\r\n @PropSyncWithInternal('baseUriWiw', { type: String, default: '' })\r\n public _baseUriWiw: string;\r\n\r\n @JsonProperty({ className: 'wiw-panel', name: 'apiKey', type: String })\r\n @editorBrowsable({ groupName: 'WIW' })\r\n @PropSyncWithInternal('apiKey', { type: String, default: '41C9AE80235EF620966E4456408F1B07564DDDE1BB47FB200F9248F54CCD5E43' })\r\n public _apiKey: string;\r\n\r\n @JsonProperty({ className: 'wiw-panel', name: 'configuration', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('configuration', { type: Object, required: false, default: null })\r\n public _configuration: IConfiguration;\r\n\r\n @JsonProperty({ className: 'wiw-panel', name: 'isDropAllowed', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSync('isDropAllowed', { type: Boolean, required: false, default: false })\r\n public _isDropAllowed: boolean;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n public onSearch: any = this.$debounce((search: string) => this.fetchDataAsync(search), 500);\r\n\r\n public searchText: string = null;\r\n public searchResults: Array = [];\r\n public totalItems: number = 0;\r\n\r\n public currentPage: number = 1;\r\n public totalPages: number = 0;\r\n\r\n public isOpen: boolean = false;\r\n\r\n public headers: Array = [\r\n { text: 'Nom', value: 'name' },\r\n {\r\n text: 'locate', value: 'locate',\r\n align: 'center',\r\n width: '30px'\r\n },\r\n {\r\n text: 'actions', value: 'actions',\r\n align: 'center',\r\n class: 'test'\r\n }\r\n ];\r\n\r\n private _isFetching: boolean = false;\r\n\r\n @lazyInject(AppContext)\r\n private readonly _appContext: AppContext;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n private readonly _uriService: IVisonUriService;\r\n\r\n @lazyInject(ProjectService)\r\n private readonly _projectService: ProjectService;\r\n\r\n private _WiwService: WiwService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./WiwPanel.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./WiwPanel.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./WiwPanel.vue?vue&type=template&id=18ca5cb0&scoped=true&\"\nimport script from \"./WiwPanel.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./WiwPanel.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./WiwPanel.vue.scss?vue&type=style&index=0&id=18ca5cb0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"18ca5cb0\",\n null\n \n)\n\nexport default component.exports","import { VImg } from 'vuetify/lib/components/VImg';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(VImg,{style:(_vm.computedStyle),attrs:{\"max-height\":_vm.maxHeight,\"max-width\":_vm.maxWidth,\"height\":_vm.height,\"width\":_vm.width,\"src\":_vm.url,\"contain\":_vm.contain,\"alt\":_vm.alt,\"position\":_vm.position}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { editorBrowsable, HorizontalAlignment, JsonProperty, PropSyncWithInternal, VerticalAlignment } from 'Framework/Components/Panel.Commons';\r\nimport { Component, UIElement, Watch } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'vo-image'\r\n})\r\nexport default class VoImage extends UIElement {\r\n @Watch('verticalContentAlignment')\r\n @Watch('horizontalContentAlignment')\r\n private _onContentAlignmentPropertyChanged(): void {\r\n this.position = `${VoImage._horizontalAlignmentToHtml(this._horizontalContentAlignment)} ${VoImage._verticalAlignmentToHtml(this._verticalContentAlignment)}`;\r\n }\r\n\r\n private static _horizontalAlignmentToHtml(horizontalAlignment: HorizontalAlignment): string {\r\n if (horizontalAlignment == HorizontalAlignment.Left) {\r\n return 'left';\r\n }\r\n else if (horizontalAlignment == HorizontalAlignment.Right) {\r\n return 'right';\r\n }\r\n else if (horizontalAlignment == HorizontalAlignment.Center) {\r\n return 'center';\r\n }\r\n\r\n throw new TypeError('horizontalContentAlignment invalid');\r\n }\r\n\r\n private static _verticalAlignmentToHtml(verticalAlignment: VerticalAlignment): string {\r\n if (verticalAlignment == VerticalAlignment.Top) {\r\n return 'top';\r\n }\r\n else if (verticalAlignment == VerticalAlignment.Bottom) {\r\n return 'bottom';\r\n }\r\n else if (verticalAlignment == VerticalAlignment.Center) {\r\n return 'center';\r\n }\r\n\r\n throw new TypeError('verticalContentAlignment invalid');\r\n }\r\n\r\n public position: string = 'center center';\r\n\r\n @JsonProperty({ className: 'vo-image', name: 'url', type: String })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('url', { type: String, required: false, default: null })\r\n public _url: string;\r\n\r\n @JsonProperty({ className: 'vo-image', name: 'alt', type: String })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('alt', { type: String, required: false, default: null })\r\n public _alt: string;\r\n\r\n @JsonProperty({ className: 'vo-image', name: 'contain', type: Boolean })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Boolean' })\r\n @PropSyncWithInternal('contain', { type: Boolean, required: false, default: false })\r\n public _contain: boolean;\r\n\r\n @JsonProperty({ className: 'vo-image', name: 'horizontalContentAlignment', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'HorizontalAlignment' })\r\n @PropSyncWithInternal('horizontalContentAlignment', { type: Number, required: false, default: HorizontalAlignment.Center })\r\n public _horizontalContentAlignment: HorizontalAlignment;\r\n\r\n @JsonProperty({ className: 'vo-image', name: 'verticalContentAlignment', type: Number })\r\n @editorBrowsable({ groupName: 'Layout', template: 'VerticalAlignment' })\r\n @PropSyncWithInternal('verticalContentAlignment', { type: Number, required: false, default: VerticalAlignment.Center })\r\n public _verticalContentAlignment: VerticalAlignment;\r\n}\r\n","import { AssetItemType, FormType } from 'Api/Contracts/Dtos';\r\nimport { AssetHotspot, AssetMapArea, AssetPanoramaVersion, FileMap, Navigation, ProjectMap, StreetMap, StreetMapType } from 'Api/ExploreService';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { lazyInject } from 'App/Inversify.config';\r\nimport { IVisonUriService } from 'App/Services/UriServices/Core';\r\nimport { IPlanCoordinates } from 'Framework/Components/Controls/XView/Core';\r\nimport { editorBrowsable, HorizontalAlignment, JsonProperty, PropSyncWithInternal, VerticalAlignment } from 'Framework/Components/Panel.Commons';\r\nimport { Component, Prop, UIElement, Watch } from 'Framework/Components/UIElement';\r\nimport OpenSeaDragon from 'openseadragon';\r\nimport SVG from 'svg.js';\r\n\r\nenum MapSize { Hidden, Reduce, Normal, Full, Auto }\r\n\r\n@Component({\r\n name: 'vo-map'\r\n})\r\nexport default class VoMap extends UIElement {\r\n public maps: Array = null;\r\n public hasMap: boolean = false;\r\n public currentMap: ProjectMap = null;\r\n public zoom: number = 1;\r\n public selectedHotspot: AssetHotspot = null;\r\n public get hasCompass(): boolean {\r\n return this.compassConfiguration != null;\r\n }\r\n public compassPosition: any = null;\r\n\r\n @Prop({ type: Object, required: false, default: null })\r\n public playerContext: IPlayerContext;\r\n\r\n @JsonProperty({ className: 'vo-map', name: 'currentNavigation', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentNavigation', { type: Object, required: false, default: null })\r\n public _currentNavigation: Navigation;\r\n\r\n @JsonProperty({ className: 'vo-map', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n\r\n @JsonProperty({ className: 'vo-map', name: 'mapSize', type: Number })\r\n @editorBrowsable({ groupName: 'Commons', template: 'Number' })\r\n @PropSyncWithInternal('mapSize', { type: Number, required: false, default: MapSize.Normal })\r\n public _mapSize: MapSize;\r\n\r\n private seaDragonViewer: OpenSeaDragon.Viewer = null;\r\n private svgOverlay: SVG.Doc = null;\r\n private svgGroup: SVG.G = null;\r\n private isInitialize: boolean = false;\r\n private allOverlays: Array = [];\r\n private _originalMapSize: MapSize;\r\n\r\n private _originalValues: {\r\n _horizontalAlignment: HorizontalAlignment;\r\n _verticalAlignment: VerticalAlignment;\r\n _width: number,\r\n _height: number,\r\n _row: number,\r\n _column: number,\r\n _rowSpan: number,\r\n _columnSpan: number\r\n };\r\n\r\n public created(): void {\r\n if (!this._background) {\r\n this._background = 'rgba(0, 0, 0, 0.5)';\r\n }\r\n\r\n if (this.isMobile && this._mapSize == MapSize.Normal) {\r\n this._mapSize = MapSize.Reduce;\r\n }\r\n }\r\n\r\n public async mounted(): Promise {\r\n await this.$nextTick();\r\n this._originalMapSize = this._mapSize;\r\n\r\n this._originalValues = {\r\n _horizontalAlignment: this._horizontalAlignment,\r\n _verticalAlignment: this._verticalAlignment,\r\n _width: this._width,\r\n _height: this._height,\r\n _row: this._row,\r\n _column: this._column,\r\n _rowSpan: this._rowSpan,\r\n _columnSpan: this._columnSpan\r\n };\r\n\r\n if ('isInDesignMode' in this.playerContext) {\r\n //Pas de changement de taille en mode édition\r\n return;\r\n }\r\n\r\n this._updateViewportHandler = () => this.resizeSvgGroup();\r\n this._openAndResizeHandler = () => this.loadAreas(this.currentMap as FileMap);\r\n\r\n await this._updateMapDispositionAsync();\r\n await this._loadNavigationAsync(this._currentNavigation);\r\n }\r\n\r\n @Watch('currentNavigation')\r\n public async onCurrentNavigationPropertyChanged(value: Navigation, oldValue: Navigation): Promise {\r\n await this._loadNavigationAsync(value);\r\n }\r\n\r\n @Watch('currentPanorama')\r\n public onCurrentPanoramaPropertyChanged(newValue: AssetPanoramaVersion, oldValue: AssetPanoramaVersion): void {\r\n this._updateSelectedPanorama(newValue);\r\n }\r\n\r\n @Watch('selectedHotspot')\r\n public onSelectedHotspotChanged(newValue: AssetHotspot, oldValue: AssetHotspot): void {\r\n this._updateSelectedHotspot();\r\n\r\n if (this._mapSize != MapSize.Auto\r\n && newValue?.events?.onClick?.startsWith('this.goToPanorama')) {\r\n this._switchMapSizeTo(this.isMobile\r\n ? MapSize.Reduce\r\n : MapSize.Normal\r\n );\r\n }\r\n else {\r\n this._updateCompassPosition();\r\n }\r\n }\r\n\r\n @Watch('mapSize')\r\n private async _onMapSizeChangeAsync(newValue: MapSize, oldValue: MapSize): Promise {\r\n if ('isInDesignMode' in this.playerContext) {\r\n //Pas de changement de taille en mode édition\r\n return;\r\n }\r\n\r\n await this._updateMapDispositionAsync();\r\n }\r\n\r\n private async _loadNavigationAsync(navigation: Navigation): Promise {\r\n if (!navigation) {\r\n this.maps = new Array();\r\n\r\n return;\r\n }\r\n\r\n this.maps = navigation.maps as Array;\r\n\r\n let defaultMap = this.maps.find((item: FileMap) => item.isDefault) || this.maps[0];\r\n\r\n if (defaultMap instanceof FileMap) {\r\n this.hasMap = true;\r\n\r\n this.createMap(defaultMap);\r\n }\r\n\r\n if (this._currentPanorama) {\r\n this._updateSelectedPanorama(this._currentPanorama);\r\n this._updateCompassPosition();\r\n }\r\n }\r\n\r\n private _updateSelectedPanorama(panorama: AssetPanoramaVersion): void {\r\n if (!panorama) {\r\n return;\r\n }\r\n\r\n let assetItemId = panorama.parentId;\r\n\r\n let hotspotOfMap: AssetHotspot = this.maps\r\n .filter(map => map instanceof FileMap)\r\n .flatMap((map: FileMap) => map.children)\r\n .find((hotspot: AssetHotspot) => hotspot.assetItemLinkedId == assetItemId) as AssetHotspot;\r\n\r\n let map = this.maps\r\n .find(m => hotspotOfMap && m.assetItemId == hotspotOfMap.parentId);\r\n\r\n this._loadMapIf(map as FileMap);\r\n\r\n if (this.currentMap instanceof FileMap) {\r\n this.selectedHotspot = hotspotOfMap || this.currentMap.children.find((hotspot: AssetHotspot) => {\r\n return hotspot.assetItemLinkedId == assetItemId;\r\n }) as AssetHotspot;\r\n }\r\n }\r\n\r\n private _updateCompassPosition(): void {\r\n if (this.currentMap instanceof FileMap && this._currentPanorama) {\r\n let assetItemId = this._currentPanorama.parentId; //id of AssetPanoramaGroup\r\n\r\n let hotspotOfPanorama: AssetHotspot = this.currentMap.children\r\n .find((hotspot: AssetHotspot) => hotspot.assetItemLinkedId == assetItemId) as AssetHotspot;\r\n\r\n if (this.currentMap.children.indexOf(hotspotOfPanorama) >= 0) {\r\n let events = hotspotOfPanorama.events;\r\n\r\n if (events?.onClick?.startsWith('this.goToPanorama')) {\r\n let updateCompassPosition = () => {\r\n const viewer: any = this.seaDragonViewer.viewport.viewer; //type compatibility\r\n\r\n if (!viewer.source) {\r\n setTimeout(updateCompassPosition, 300);\r\n } else {\r\n let coordinate = hotspotOfPanorama.coordinates[0] as IPlanCoordinates;\r\n this.compassPosition = this.seaDragonViewer.viewport.viewportToSvgCoordinates(\r\n new OpenSeaDragon.Point(\r\n coordinate.x,\r\n coordinate.y\r\n )\r\n );\r\n }\r\n };\r\n\r\n updateCompassPosition();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.compassPosition = null;\r\n }\r\n\r\n private _updateSelectedHotspot(): void {\r\n if (this.currentMap instanceof FileMap) {\r\n let assetItemId = this._currentPanorama ? this._currentPanorama.parentId.toString() : null;\r\n\r\n if (this.allOverlays) {\r\n this.allOverlays.forEach(element => {\r\n if (element.dataset.assetItemLinkedId == assetItemId) {\r\n if (this.hasCompass) {\r\n element.style.display = 'none';\r\n }\r\n else {\r\n element.style.color = '#00FF00';\r\n }\r\n }\r\n else {\r\n element.style.display = 'block';\r\n element.style.color = (element as any).content.color;\r\n }\r\n });\r\n }\r\n\r\n if (this.svgGroup) {\r\n this.svgGroup.children().forEach(element => {\r\n if (element.attr('data-asset-item-linked-id') == assetItemId) {\r\n element.fill((element as any).content.selectedColor);\r\n }\r\n else {\r\n element.fill((element as any).content.color);\r\n }\r\n });\r\n }\r\n }\r\n else if (this.currentMap instanceof StreetMap) {\r\n throw Error('Street map not supported yet');\r\n }\r\n }\r\n\r\n public _onDisplayDefaultMap(): void {\r\n let defaultMap = this.maps.find((item: FileMap) => item.isDefault) || this.maps[0];\r\n\r\n if (defaultMap) {\r\n this._loadMapIf(defaultMap as FileMap);\r\n this._switchMapSizeTo(this._originalMapSize);\r\n }\r\n }\r\n\r\n public openLevel(assetItemLinkedId: number): void {\r\n let map = this.maps.find((item: ProjectMap) => {\r\n return item.assetItemId == assetItemLinkedId;\r\n });\r\n\r\n this._loadMapIf(map as FileMap);\r\n this._updateCompassPosition();\r\n }\r\n\r\n private _switchMapSizeTo(desiredSize: MapSize): void {\r\n if (desiredSize == MapSize.Normal && this.isMobile) {\r\n desiredSize = MapSize.Full;\r\n }\r\n\r\n if (this._mapSize != desiredSize) {\r\n this._mapSize = desiredSize;\r\n }\r\n else {\r\n this._updateCompassPosition();\r\n }\r\n }\r\n\r\n private async _updateMapDispositionAsync(): Promise {\r\n if (this._mapSize == MapSize.Full) {\r\n this._horizontalAlignment = HorizontalAlignment.Stretch;\r\n this._verticalAlignment = VerticalAlignment.Stretch;\r\n }\r\n else if (this._mapSize != MapSize.Hidden) {\r\n Object.assign(this, this._originalValues);\r\n }\r\n\r\n await this.$nextTick();\r\n\r\n if (this.seaDragonViewer) {\r\n this.seaDragonViewer.viewport.fitHorizontally();\r\n this.seaDragonViewer.viewport.fitVertically();\r\n }\r\n\r\n this._updateCompassPosition();\r\n }\r\n\r\n public get isMobile(): boolean {\r\n return this.$vuetify.breakpoint.xs;\r\n }\r\n\r\n public createMap(map: ProjectMap): void {\r\n if (!this.isInitialize ||\r\n (this.seaDragonViewer &&\r\n this.seaDragonViewer.element != this.$refs['osd-map'])) {\r\n if (this.seaDragonViewer) {\r\n this.seaDragonViewer.removeHandler('update-viewport', this._updateViewportHandler);\r\n this.seaDragonViewer.removeHandler('open', this._openAndResizeHandler);\r\n this.seaDragonViewer.removeHandler('resize', this._openAndResizeHandler);\r\n this.seaDragonViewer.destroy();\r\n }\r\n\r\n if (this.hasMap) {\r\n this.seaDragonViewer = OpenSeaDragon({\r\n id: 'osd-map',\r\n prefixUrl: this.uriService.getAbsoluteUri('/assets/'),\r\n zoomInButton: 'size-plus',\r\n zoomOutButton: 'size-minus',\r\n sequenceControlAnchor: OpenSeaDragon.ControlAnchor.NONE,\r\n minZoomImageRatio: 0,\r\n maxZoomPixelRatio: Number.POSITIVE_INFINITY\r\n });\r\n this.seaDragonViewer.addHandler('update-viewport', this._updateViewportHandler);\r\n this.seaDragonViewer.addHandler('open', this._openAndResizeHandler);\r\n this.seaDragonViewer.addHandler('resize', this._openAndResizeHandler);\r\n this.seaDragonViewer.addHandler('canvas-key', e => e.preventDefaultAction = true);\r\n\r\n this.createSvgOverlay();\r\n this.isInitialize = true;\r\n }\r\n }\r\n\r\n if (map instanceof FileMap) {\r\n this._loadMapIf(map);\r\n }\r\n else if (map instanceof StreetMap) {\r\n this.loadStreetMap(map);\r\n }\r\n }\r\n\r\n public createSvgOverlay(): void {\r\n let seaDragonOverlayDiv = this.seaDragonViewer.canvas.lastChild;\r\n\r\n this.svgOverlay = SVG(this.seaDragonViewer.canvas);\r\n this.svgOverlay.node.style.position = 'absolute';\r\n\r\n this.seaDragonViewer.canvas.insertBefore(this.svgOverlay.node, seaDragonOverlayDiv);\r\n\r\n this.svgGroup = this.svgOverlay.group();\r\n if (this.$refs.compass) {\r\n this.svgOverlay.node.appendChild((this.$refs.compass as any).$el);\r\n }\r\n }\r\n\r\n public _loadMapIf(map: FileMap): void {\r\n if (!map || this.currentMap == map) {\r\n return;\r\n }\r\n if (!this.seaDragonViewer) {\r\n return;\r\n }\r\n this.currentMap = map;\r\n\r\n\r\n if (this.playerContext.isStandalone) {\r\n const imageSource = new URL(this.uriService.getAbsoluteUri(map.file.links.optimizedImage));\r\n imageSource.searchParams.forEach((value, key) => {\r\n imageSource.searchParams.delete(key);\r\n });\r\n this.seaDragonViewer.open({\r\n type: 'image',\r\n url: imageSource.href,\r\n buildPyramid: false,\r\n crossOriginPolicy: 'use-credentials'\r\n });\r\n }\r\n else {\r\n const tilesource = this.uriService.getAbsoluteUri(map.file.links.deepzoom);\r\n const player: any = this.seaDragonViewer; //type compatibility\r\n\r\n if (this.playerContext.validatedToken) {\r\n player.ajaxWithCredentials = true;\r\n player.loadTilesWithAjax = true;\r\n\r\n player.ajaxHeaders = { token: this.playerContext.validatedToken };\r\n }\r\n else {\r\n player.ajaxWithCredentials = false;\r\n }\r\n\r\n this.seaDragonViewer.open(tilesource);\r\n }\r\n }\r\n\r\n public loadStreetMap(map: StreetMap): void {\r\n if (map.provider == StreetMapType.OpenStreetMap) {\r\n this.seaDragonViewer = OpenSeaDragon({\r\n id: 'osd-map',\r\n tileSources: [{\r\n type: 'openstreetmaps'\r\n } as any],\r\n prefixUrl: this.uriService.getAbsoluteUri('/assets/'),\r\n showNavigationControl: false,\r\n minZoomImageRatio: 0,\r\n maxZoomPixelRatio: Number.POSITIVE_INFINITY\r\n });\r\n\r\n let coordinates = map.coordinates.split(';');\r\n let lat = parseFloat(coordinates[0]);\r\n let long = parseFloat(coordinates[1]);\r\n\r\n let el = document.createElement('i');\r\n el.classList.add('fa-light', 'fa-location-pin');\r\n el.style.color = 'black';\r\n\r\n const source: OpenSeadragon.TileSource = this.seaDragonViewer.world.getItemAt(0).source;\r\n const dimensions: OpenSeadragon.Point = source.dimensions;\r\n\r\n this.seaDragonViewer.addHandler('open', (event) => {\r\n let x = (long + 180) * (dimensions.x / 360);\r\n let latRad = lat * Math.PI / 180;\r\n let mercN = Math.log(Math.tan((Math.PI / 4) + (latRad / 2)));\r\n let y = (dimensions.y / 2) - (dimensions.x * mercN / (2 * Math.PI));\r\n let point = this.seaDragonViewer.viewport.imageToViewportCoordinates(x, y);\r\n this.seaDragonViewer.addOverlay({\r\n element: el,\r\n x: point.x,\r\n y: point.y,\r\n placement: 'CENTER'\r\n });\r\n });\r\n\r\n this.seaDragonViewer.addHandler('canvas-key', e => e.preventDefaultAction = true);\r\n }\r\n }\r\n\r\n public loadAreas(map: FileMap): void {\r\n this.seaDragonViewer.clearOverlays();\r\n this.allOverlays = [];//check if valid\r\n this.svgGroup.clear();\r\n this.resizeSvgGroup();\r\n map.children.forEach((hotspot: AssetHotspot) => {\r\n let coordinates = hotspot.coordinates;\r\n let content = hotspot.content;\r\n let event = hotspot.events;\r\n let onclickCallback: Function = null;\r\n\r\n if (event?.onClick) {\r\n const onEventNameClick: string = event.onClick;\r\n\r\n if (onEventNameClick.startsWith(`this.${nameof(this.openLevel)}`)) {\r\n onclickCallback = Function('hotspot', onEventNameClick).bind(this);\r\n }\r\n else if (onEventNameClick.startsWith(`this.goToPanorama`)) {\r\n onclickCallback = (destination: AssetHotspot) => {\r\n if (this.selectedHotspot != destination) {\r\n this.selectedHotspot = destination;\r\n this.playerContext.parseFunction(onEventNameClick, 'hotspot')(destination);\r\n }\r\n }\r\n }\r\n else {\r\n onclickCallback = this.playerContext.parseFunction(onEventNameClick, 'hotspot');\r\n }\r\n }\r\n\r\n if (hotspot.type == AssetItemType.Hotspot) {\r\n let point: IPlanCoordinates = coordinates[0] as IPlanCoordinates;\r\n let newOverlay = document.createElement('i');\r\n let className = content.icon + ' map-hotspot';\r\n\r\n newOverlay.id = 'overlayMap-' + hotspot.assetItemId;\r\n newOverlay.className = className;\r\n\r\n if (content.icon?.startsWith('animated')) {\r\n newOverlay.style.backgroundColor = content.color;\r\n } else {\r\n newOverlay.style.color = content.color;\r\n }\r\n\r\n newOverlay.style.fontSize = content.size + 'px';\r\n newOverlay.style.cursor = 'pointer';\r\n newOverlay.title = content.tooltip;\r\n (newOverlay as any).content = content;\r\n this.allOverlays.push(newOverlay);\r\n newOverlay.dataset.assetItemLinkedId = hotspot.assetItemLinkedId?.toString() ?? null;\r\n\r\n this.seaDragonViewer.addOverlay({\r\n element: newOverlay,\r\n x: point.x,\r\n y: point.y,\r\n placement: 'CENTER'\r\n });\r\n\r\n const _ = new OpenSeaDragon.MouseTracker({\r\n element: newOverlay,\r\n clickHandler: (e) => {\r\n if (onclickCallback) {\r\n onclickCallback(hotspot);\r\n }\r\n }\r\n });\r\n }\r\n else if (hotspot.type == AssetItemType.MapArea) {\r\n coordinates = (hotspot as AssetMapArea).areaCoordinates;\r\n\r\n let newShape: SVG.Shape = null;\r\n let type = parseInt(content.formType);\r\n switch (type) {\r\n case FormType.Rectangle: {\r\n let origin: IPlanCoordinates = coordinates[0] as IPlanCoordinates;\r\n let size: any = coordinates[1];\r\n\r\n let svgOrigin = this.seaDragonViewer.viewport.viewportToSvgCoordinates(new OpenSeaDragon.Point(origin.x, origin.y));\r\n let svgSize = this.seaDragonViewer.viewport.viewportToSvgCoordinates(new OpenSeaDragon.Point(size.w, size.h));\r\n\r\n newShape = this.svgOverlay.rect(svgSize.x, svgSize.y).move(svgOrigin.x, svgOrigin.y);\r\n break;\r\n }\r\n case FormType.Circle: {\r\n let center: any = coordinates[0];\r\n let rayon: any = coordinates[1];\r\n\r\n let svgCenter = this.seaDragonViewer.viewport.viewportToSvgCoordinates(new OpenSeaDragon.Point(center.cx, center.cy));\r\n let svgRayon = this.seaDragonViewer.viewport.viewportToSvgCoordinates(new OpenSeaDragon.Point(rayon.r, 0));\r\n\r\n newShape = this.svgOverlay.circle(svgRayon.x * 2).center(svgCenter.x, svgCenter.y);\r\n break;\r\n }\r\n case FormType.Polygon: {\r\n let points: any = coordinates[0];\r\n let map = points.points.map(coords => {\r\n return this.seaDragonViewer.viewport.viewportToSvgCoordinates(new OpenSeaDragon.Point(coords.x, coords.y));\r\n });\r\n let pointArray = new SVG.PointArray(map);\r\n newShape = this.svgOverlay.polygon(pointArray);\r\n break;\r\n }\r\n default:\r\n }\r\n\r\n newShape.fill(content.color);\r\n newShape.attr({ 'fill-rule': 'evenodd' });\r\n newShape.attr('data-assetitemid', hotspot.assetItemId);\r\n newShape.attr('data-asset-item-linked-id', hotspot.assetItemLinkedId?.toString() ?? null);\r\n newShape.stroke(content.stroke);\r\n newShape.node.style.cursor = 'pointer';\r\n (newShape as any).content = content;\r\n this.svgGroup.add(newShape);\r\n\r\n let title = document.createElementNS('http://www.w3.org/2000/svg', 'title');\r\n title.textContent = content.tooltip;\r\n newShape.node.appendChild(title);\r\n\r\n const _ = new OpenSeaDragon.MouseTracker({\r\n element: newShape.node,\r\n clickHandler: (e) => {\r\n if (onclickCallback) {\r\n onclickCallback(hotspot);\r\n }\r\n },\r\n enterHandler: () => {\r\n let assetItemId = this._currentPanorama ? this._currentPanorama.parentId.toString() : null;\r\n\r\n if (newShape.attr('data-asset-item-linked-id') != assetItemId) {\r\n newShape.fill(content.hoverColor)\r\n }\r\n },\r\n exitHandler: () => {\r\n let assetItemId = this._currentPanorama ? this._currentPanorama.parentId.toString() : null;\r\n\r\n if (newShape.attr('data-asset-item-linked-id') != assetItemId) {\r\n newShape.fill(content.color)\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n this._updateSelectedHotspot();\r\n }\r\n\r\n private _updateViewportHandler: () => void;\r\n private _openAndResizeHandler: () => void;\r\n\r\n public resizeSvgGroup(): void {\r\n let originPoint = new OpenSeaDragon.Point(0, 0);\r\n let offset = this.seaDragonViewer.viewport.pixelFromPoint(originPoint, true);\r\n let zoom = this.seaDragonViewer.viewport.getZoom(true);\r\n\r\n const source: OpenSeadragon.TileSource = this.seaDragonViewer.world.getItemAt(0).source;\r\n const dimensions: OpenSeadragon.Point = source.dimensions;\r\n\r\n let end = this.seaDragonViewer.viewport.imageToViewportCoordinates(dimensions.x, dimensions.y);\r\n let endP = this.seaDragonViewer.viewport.pixelFromPoint(end, true);\r\n\r\n let width = endP.x - offset.x;\r\n let height = endP.y - offset.y;\r\n\r\n this.svgOverlay.node.style.top = offset.y + 'px';\r\n this.svgOverlay.node.style.left = offset.x + 'px';\r\n this.svgOverlay.node.setAttribute('width', width.toString());\r\n this.svgOverlay.node.setAttribute('height', height.toString());\r\n\r\n this.svgGroup.node.setAttribute('transform', 'scale(' + zoom + ')');\r\n this.zoom = zoom;\r\n }\r\n\r\n public get compassConfiguration(): string {\r\n return this._currentNavigation?.compassConfiguration;\r\n }\r\n\r\n public readonly MapSize: any = MapSize;\r\n\r\n @lazyInject(injectTypes.IVisonUriService)\r\n public uriService: IVisonUriService;\r\n}\r\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoImage.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoImage.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoImage.vue?vue&type=template&id=5e7c3d5d&\"\nimport script from \"./VoImage.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoImage.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSystemBar } from 'vuetify/lib/components/VSystemBar';\n\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm._mapSize != _vm.MapSize.Hidden)?_c('div',{class:['map-container', {'map-size-normal': _vm._mapSize == _vm.MapSize.Normal}],style:(_vm.computedStyle)},[_c(VSystemBar,{attrs:{\"window\":\"\",\"color\":\"transparent\"}},[(_vm.currentMap)?_c('span',{staticClass:\"mr-2 text-truncate white--text\",attrs:{\"title\":_vm.currentMap.name}},[_vm._v(_vm._s(_vm.currentMap.name))]):_vm._e(),_c(VSpacer),(_vm._mapSize != _vm.MapSize.Auto)?[(_vm._mapSize != _vm.MapSize.Reduce)?_c(VIcon,{staticClass:\"white--text\",attrs:{\"small\":!_vm.isMobile},on:{\"click\":function($event){return _vm._switchMapSizeTo(_vm.MapSize.Reduce)}}},[_vm._v(\"fa-light fa-window-minimize\")]):_vm._e(),(_vm._mapSize != _vm.MapSize.Normal && !_vm.isMobile)?_c(VIcon,{staticClass:\"white--text\",attrs:{\"small\":!_vm.isMobile},on:{\"click\":function($event){return _vm._switchMapSizeTo(_vm.MapSize.Normal)}}},[_vm._v(\"fa-light fa-window-restore\")]):_vm._e(),(_vm._mapSize != _vm.MapSize.Full)?_c(VIcon,{staticClass:\"white--text\",attrs:{\"small\":!_vm.isMobile},on:{\"click\":function($event){return _vm._switchMapSizeTo(_vm.MapSize.Full)}}},[_vm._v(\"fa-light fa-window-maximize\")]):_vm._e()]:_vm._e()],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm._mapSize != _vm.MapSize.Reduce),expression:\"_mapSize != MapSize.Reduce\"}],staticClass:\"map-content\"},[_c('div',{ref:\"osd-map\",staticClass:\"d-flex flex-grow-1\",attrs:{\"id\":\"osd-map\"}}),_c('x-compass',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasCompass && _vm._currentPanorama && _vm.compassPosition),expression:\"hasCompass && _currentPanorama && compassPosition\"}],ref:\"compass\",attrs:{\"scale\":_vm.zoom,\"north\":_vm._currentPanorama && _vm._currentPanorama.northOrientation,\"currentOrientation\":_vm.playerContext.currentOrientation,\"currentFocale\":_vm.playerContext.currentFocale,\"coordinates\":_vm.compassPosition,\"configuration\":_vm.compassConfiguration}}),_c('div',{staticClass:\"map-toolbar mr-2 my-2\",attrs:{\"dense\":\"\"}},[_c(VBtn,{attrs:{\"fab\":\"\",\"tile\":\"\",\"small\":\"\"},on:{\"click\":_vm._onDisplayDefaultMap}},[_c(VIcon,[_vm._v(\"fa-light fa-house\")])],1),_c(VBtn,{attrs:{\"id\":\"size-plus\",\"fab\":\"\",\"tile\":\"\",\"small\":\"\"}},[_c(VIcon,[_vm._v(\"fa-light fa-plus\")])],1),_c(VBtn,{attrs:{\"id\":\"size-minus\",\"fab\":\"\",\"tile\":\"\",\"small\":\"\"}},[_c(VIcon,[_vm._v(\"fa-light fa-minus\")])],1)],1)],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoMap.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoMap.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoMap.vue?vue&type=template&id=23d72efd&scoped=true&\"\nimport script from \"./VoMap.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoMap.vue.ts?vue&type=script&lang=ts&\"\nimport style0 from \"./VoMap.vue.scss?vue&type=style&index=0&id=23d72efd&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23d72efd\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('x-toggle',{style:(_vm.computedStyle),attrs:{\"toggle-element-id\":\"toggle\"},scopedSlots:_vm._u([{key:\"header\",fn:function(props){return [_c('div',{staticStyle:{\"text-align\":\"center\",\"pointer-events\":\"none\"}},[(props.isOpen)?_c('i',{staticClass:\"fa-light fa-angle-down\",staticStyle:{\"font-size\":\"38px\",\"cursor\":\"pointer\",\"padding\":\"0 0.4rem\"},attrs:{\"id\":\"toggle\"}}):(!props.isOpen)?_c('i',{staticClass:\"fa-light fa-angle-up\",staticStyle:{\"font-size\":\"38px\",\"cursor\":\"pointer\",\"padding\":\"0 0.4rem\"},attrs:{\"id\":\"toggle\"}}):_vm._e()])]}},{key:\"content\",fn:function(){return [_c('div',{staticStyle:{\"background-color\":\"rgba(40, 40, 43, 0.7)\"}},[_c('x-item-presenter',{staticStyle:{\"padding\":\"10px 0\"},attrs:{\"items\":_vm.itemsSource,\"height\":154},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [(_vm._dataContext && 'isInDesignMode' in _vm._dataContext)?_c('div',{staticStyle:{\"width\":\"10rem\",\"height\":\"7.5rem\",\"border\":\"1px dashed grey\"}}):(_vm._dataContext)?_c('x-panorama-preview',{staticClass:\"white--text\",attrs:{\"name\":props.item.name,\"guid\":_vm._dataContext.findPanoramaFileFromAssetId(props.item.assetItemLinkedId).file.guid,\"is-selected\":_vm._currentPanorama && _vm._currentPanorama.parentId == props.item.assetItemLinkedId},on:{\"click\":function($event){return _vm._dataContext.goToPanorama(props.item.assetItemLinkedId)}}}):_vm._e()]}}])})],1)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { AssetPanoramaVersion, OrderedPanorama } from 'Api/ExploreService';\r\nimport XPanoramaPreview from 'App/Areas/Explore/Components/PanoramaPreview.vue';\r\nimport { IPlayerContext } from 'App/Areas/Shares/IPlayerContext';\r\nimport XItemPresenter from 'Framework/Components/Controls/ItemPresenter.vue';\r\nimport XToggle from 'Framework/Components/Controls/Toggle.vue';\r\nimport { editorBrowsable, JsonProperty, PropSyncWithInternal } from 'Framework/Components/Panel.Commons';\r\nimport { Component, UIElement } from 'Framework/Components/UIElement';\r\n\r\n@Component({\r\n name: 'vo-panorama-list',\r\n components: {\r\n XToggle,\r\n XItemPresenter,\r\n XPanoramaPreview\r\n }\r\n})\r\nexport default class VoPanoramaList extends UIElement {\r\n @JsonProperty({ className: 'vo-panorama-list', name: 'itemsSource', type: Array })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('itemsSource', { type: Array, required: false, default: () => [] })\r\n public _itemsSource: Array;\r\n\r\n @JsonProperty({ className: 'vo-panorama-list', name: 'currentPanorama', type: Object })\r\n @editorBrowsable({ groupName: 'Commons' })\r\n @PropSyncWithInternal('currentPanorama', { type: Object, required: false, default: null })\r\n public _currentPanorama: AssetPanoramaVersion;\r\n}\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPanoramaList.vue.ts?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!./VoPanoramaList.vue.ts?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VoPanoramaList.vue?vue&type=template&id=4cd4df2b&\"\nimport script from \"./VoPanoramaList.vue.ts?vue&type=script&lang=ts&\"\nexport * from \"./VoPanoramaList.vue.ts?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { AppContext, ExperimentalFeature } from 'Api/AppContext';\r\nimport { BasePage } from 'App/Areas/BasePage';\r\nimport OranoPrs from 'App/Areas/Explore/Components/OranoPrs.vue';\r\nimport OranoVentixPanel from 'App/Areas/Explore/Components/OranoVentixPanel.vue';\r\nimport VoPanoramaBreadcrumb from 'App/Areas/Explore/Components/VoPanoramaBreadcrumb.vue';\r\nimport VoPointCloudMeasure from 'App/Areas/Explore/Components/VoPointCloudMeasure.vue';\r\nimport VoShareLocation from 'App/Areas/Explore/Components/VoShareLocation.vue';\r\nimport VoSmartObjectPanel from 'App/Areas/Explore/Components/VoSmartObjectPanel.vue';\r\nimport WiwPanel from 'App/Areas/Explore/Components/WiwPanel.vue';\r\nimport VoImage from 'App/Areas/Shares/Components/VoImage.vue';\r\nimport VoMap from 'App/Areas/Shares/VoMap.vue';\r\nimport VoPanoramaList from 'App/Areas/Shares/VoPanoramaList.vue';\r\nimport VoSearchBox from 'App/Areas/Shares/VoSearchBox.vue';\r\nimport { injectTypes } from 'App/injectTypes';\r\nimport { serviceProvider } from 'App/Inversify.config';\r\nimport XGrid from 'Framework/Components/Controls/XGrid.vue';\r\nimport XMediaPlayer from 'Framework/Components/Controls/XMediaPlayer.vue';\r\nimport XView from 'Framework/Components/Controls/XView/XView.vue';\r\nimport { Container } from 'inversify';\r\nimport { VueConstructor } from 'vue/types/vue';\r\n\r\nconst componentContainer = new Container({ skipBaseClassChecks: true });\r\ncomponentContainer.parent = serviceProvider;\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(XGrid);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(XView);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoMap);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoPanoramaList);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoPanoramaBreadcrumb);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoSearchBox);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoPointCloudMeasure);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(XMediaPlayer);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(OranoVentixPanel);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(OranoPrs);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(WiwPanel);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoShareLocation);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoImage);\r\n\r\ncomponentContainer\r\n .bind(injectTypes.IComponent)\r\n .toConstantValue(VoSmartObjectPanel);\r\n\r\nexport function getComponents(): Array {\r\n const components = componentContainer.getAll(injectTypes.IComponent);\r\n const experimentalFeatures = componentContainer.parent.get(AppContext).experimentalFeatures;\r\n\r\n return components.filter(componentClass => {\r\n const requiredFeatures: ExperimentalFeature = Reflect.getMetadata('experimental:component', componentClass);\r\n return !requiredFeatures || experimentalFeatures.hasFlag(requiredFeatures);\r\n });\r\n}\r\n\r\nexport function getComponentFromType(type: string): VueConstructor {\r\n let componentName = BasePage.hyphenate(type);\r\n\r\n return getComponents()\r\n .find(c => (c as any).extendOptions.name == componentName);\r\n}\r\n","export class EventDispatcher {\r\n // Create a dummy DOM element \r\n private readonly dummy = document.createTextNode('');\r\n\r\n // Create custom wrappers with nicer names\r\n public off = this.dummy.removeEventListener.bind(this.dummy);\r\n public on = this.dummy.addEventListener.bind(this.dummy);\r\n public trigger(eventName: string, data: any) {\r\n if (!eventName) return;\r\n const e = new CustomEvent(eventName, { 'detail': data });\r\n this.dummy.dispatchEvent(e);\r\n }\r\n}\r\n\r\n\r\ndeclare global {\r\n interface ObjectConstructor {\r\n resolve(path: string, obj: any): string;\r\n }\r\n var __webpack_public_path__: string;\r\n\r\n interface HTMLAudioElement {\r\n stop(): void;\r\n }\r\n\r\n interface HTMLVideoElement {\r\n stop(): void;\r\n }\r\n}\r\n\r\nAudio.prototype.stop = function (): void {\r\n this.pause();\r\n this.currentTime = 0;\r\n}\r\n\r\nHTMLVideoElement.prototype.stop = function (): void {\r\n this.pause();\r\n this.currentTime = 0;\r\n}\r\n\r\nlet filterRecursive = function* (predicate: (any) => boolean, array: Array, childrenPath: string, chilPredicate: (any) => boolean = null): Iterable {\r\n if (predicate && Array.isArray(array)) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (predicate(array[i])) {\r\n yield array[i];\r\n }\r\n\r\n if (childrenPath) {\r\n yield* filterRecursive(chilPredicate || predicate, array[i][childrenPath], childrenPath);\r\n }\r\n }\r\n }\r\n}\r\n\r\nObject.resolve = Object.resolve || function (path, obj) {\r\n return path.split('.').reduce(function (prev, curr) {\r\n return prev ? prev[curr] : undefined\r\n }, obj || self);\r\n};\r\n\r\nexport {\r\n filterRecursive\r\n}\r\n","export enum NotifyCollectionChangedAction {\r\n /** An item was added to the collection. */\r\n Add = 0,\r\n\r\n /** An item was removed from the collection. */\r\n Remove = 1,\r\n\r\n /** An item was replaced in the collection. */\r\n Replace = 2,\r\n\r\n /** An item was moved within the collection. */\r\n Move = 3,\r\n\r\n /** The content of the collection was cleared. */\r\n Reset = 4\r\n}\r\n\r\nexport class NotifyCollectionChangedEventArgs {\r\n private constructor(\r\n action: NotifyCollectionChangedAction,\r\n changedItems?: Array,\r\n startingIndex?: number,\r\n index?: number,\r\n newItems?: Array,\r\n oldItems?: Array,\r\n oldIndex?: number\r\n ) {\r\n\r\n if (action == NotifyCollectionChangedAction.Reset) {\r\n this.initializeAdd(action, newItems, startingIndex);\r\n }\r\n else if (action == NotifyCollectionChangedAction.Replace) {\r\n this.initializeMoveOrReplace(action, newItems, oldItems, startingIndex, oldIndex);\r\n }\r\n else if (action == NotifyCollectionChangedAction.Move) {\r\n this.initializeMoveOrReplace(action, newItems, oldItems, index, oldIndex);\r\n }\r\n else {\r\n this.initilizeAddOrRemove(action, changedItems, index);\r\n }\r\n }\r\n\r\n\r\n public static createReset(): NotifyCollectionChangedEventArgs {\r\n return new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, null, -1);\r\n }\r\n\r\n public static createOneItemChange(action: NotifyCollectionChangedAction, changedItem: any): NotifyCollectionChangedEventArgs {\r\n if (action == NotifyCollectionChangedAction.Reset) {\r\n return NotifyCollectionChangedEventArgs.createReset();\r\n }\r\n else {\r\n return NotifyCollectionChangedEventArgs.createOneItemIndexChange(action, changedItem, -1);\r\n }\r\n }\r\n\r\n public static createOneItemIndexChange(action: NotifyCollectionChangedAction, changedItem: any, index: number): NotifyCollectionChangedEventArgs {\r\n if (action == NotifyCollectionChangedAction.Reset) {\r\n return NotifyCollectionChangedEventArgs.createReset();\r\n }\r\n else {\r\n return new NotifyCollectionChangedEventArgs(action, [changedItem], null, index);\r\n }\r\n }\r\n\r\n public static createMultiItemsChange(action: NotifyCollectionChangedAction, changedItems: Array): NotifyCollectionChangedEventArgs {\r\n if (action == NotifyCollectionChangedAction.Reset) {\r\n return NotifyCollectionChangedEventArgs.createReset();\r\n }\r\n else {\r\n return NotifyCollectionChangedEventArgs.createMultiItemChangeOrReset(action, changedItems, -1);\r\n }\r\n }\r\n\r\n public static createMultiItemChangeOrReset(action: NotifyCollectionChangedAction, changedItems: Array, startingIndex: number): NotifyCollectionChangedEventArgs {\r\n if (action == NotifyCollectionChangedAction.Reset) {\r\n return NotifyCollectionChangedEventArgs.createReset();\r\n }\r\n else {\r\n return new NotifyCollectionChangedEventArgs(action, changedItems, null, startingIndex);\r\n }\r\n }\r\n\r\n public static createOneItemReplace(newItem: any, oldItem: any): NotifyCollectionChangedEventArgs {\r\n return NotifyCollectionChangedEventArgs.createOneItemReplaceIndex(newItem, oldItem, -1)\r\n }\r\n\r\n public static createOneItemReplaceIndex(newItem: any, oldItem: any, index: number): NotifyCollectionChangedEventArgs {\r\n let oldStartingIndex = index;\r\n\r\n return new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, null, null, index, [newItem], [oldItem], oldStartingIndex);\r\n }\r\n\r\n public static createMultiItemReplace(newItems: Array, oldItems: Array): NotifyCollectionChangedEventArgs {\r\n return NotifyCollectionChangedEventArgs.createMultiItemReplaceIndex(newItems, oldItems, -1);\r\n }\r\n\r\n public static createMultiItemReplaceIndex(newItems: Array, oldItems: Array, startingIndex: number): NotifyCollectionChangedEventArgs {\r\n return new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, null, startingIndex, null, newItems, oldItems, startingIndex);\r\n }\r\n\r\n public static createOneItemMove(changedItem: any, index: number, oldIndex: number): NotifyCollectionChangedEventArgs {\r\n return NotifyCollectionChangedEventArgs.createMultiItemMove([changedItem], index, oldIndex);\r\n }\r\n\r\n public static createMultiItemMove(changedItems: Array, index: number, oldIndex: number): NotifyCollectionChangedEventArgs {\r\n return new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Move, changedItems, null, index, null, null, oldIndex);\r\n }\r\n\r\n private initilizeAddOrRemove(action: NotifyCollectionChangedAction, changedItems: Array, startingIndex: number): void {\r\n if (action == NotifyCollectionChangedAction.Add) {\r\n this.initializeAdd(action, changedItems, startingIndex);\r\n }\r\n else if (action == NotifyCollectionChangedAction.Remove) {\r\n this.initializeRemove(action, changedItems, startingIndex);\r\n }\r\n else {\r\n throw new Error(`Unsupported action: ${action}`);\r\n }\r\n }\r\n\r\n private initializeAdd(action: NotifyCollectionChangedAction, newItems: Array, newStartingIndex: number): void {\r\n this._action = action;\r\n this._newItems = newItems;\r\n this._newStartingIndex = newStartingIndex;\r\n }\r\n\r\n private initializeRemove(action: NotifyCollectionChangedAction, oldItems: Array, oldStartingIndex: number): void {\r\n this._action = action;\r\n this._oldItems = oldItems;\r\n this._oldStartingIndex = oldStartingIndex;\r\n }\r\n\r\n private initializeMoveOrReplace(action: NotifyCollectionChangedAction, newItems: Array, oldItems: Array, startingIndex: number, oldStartingIndex: number): void {\r\n this.initializeAdd(action, newItems, startingIndex);\r\n this.initializeRemove(action, oldItems, oldStartingIndex);\r\n }\r\n\r\n private _action: NotifyCollectionChangedAction;\r\n /** The action that caused the event. */\r\n public get action(): NotifyCollectionChangedAction {\r\n return this._action;\r\n }\r\n\r\n private _newStartingIndex: number = -1;\r\n /** The index where the change occurred. */\r\n public get NewStartingIndex(): number {\r\n return this._newStartingIndex;\r\n }\r\n\r\n private _newItems: Array;\r\n /** The items affected by the change. */\r\n public get newItems(): Array {\r\n return this._newItems;\r\n }\r\n\r\n private _oldStartingIndex: number = -1;\r\n /** The old index where the change occurred (for Move events).*/\r\n public get OldStartingIndex(): number {\r\n return this._oldStartingIndex;\r\n }\r\n\r\n private _oldItems: Array;\r\n /** The old items affected by the change (for Replace events). */\r\n public get oldItems(): Array {\r\n return this._oldItems;\r\n }\r\n}\r\n","import { IAttachedObject } from 'Framework/Components/IAttachedObject';\r\nimport { UIElement } from 'Framework/Components/UIElement';\r\n\r\nexport abstract class BehaviorBase extends UIElement implements IAttachedObject {\r\n public attach(element: UIElement): void {\r\n if (element && element != this.associatedElement) {\r\n this.associatedElement = element;\r\n this.onAssociatedElementChanged();\r\n this.onAttached();\r\n }\r\n }\r\n\r\n public detach(): void {\r\n if (this.associatedElement != null) {\r\n this.onDetaching();\r\n this.associatedElement = null;\r\n this.onAssociatedElementChanged();\r\n }\r\n }\r\n\r\n private onAssociatedElementChanged(): void {\r\n UIElement.Bus.$emit('associated-element-changed');\r\n }\r\n\r\n protected abstract onAttached(): void;\r\n\r\n protected abstract onDetaching(): void;\r\n\r\n protected get isAttached(): boolean {\r\n return this.associatedElement != null;\r\n }\r\n\r\n associatedElement: UIElement = null;\r\n}\r\n","import { UIElement } from 'Framework/Components/UIElement';\r\nimport { BehaviorBase } from 'Framework/Interactivity/Behavior';\r\n\r\nexport abstract class Behavior extends BehaviorBase {\r\n public get associatedObject(): T {\r\n return this.associatedElement as T;\r\n }\r\n}\r\n","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar CompositeSpecification = (function () {\n function CompositeSpecification() {\n }\n CompositeSpecification.prototype.and = function (other) {\n return new AndSpecification(this, other);\n };\n CompositeSpecification.prototype.andNot = function (other) {\n return new AndNotSpecification(this, other);\n };\n CompositeSpecification.prototype.or = function (other) {\n return new OrSpecification(this, other);\n };\n CompositeSpecification.prototype.orNot = function (other) {\n return new OrNotSpecification(this, other);\n };\n CompositeSpecification.prototype.not = function () {\n return new NotSpecification(this);\n };\n return CompositeSpecification;\n}());\nexports.CompositeSpecification = CompositeSpecification;\nvar AndSpecification = (function (_super) {\n __extends(AndSpecification, _super);\n function AndSpecification(left, right) {\n _super.call(this);\n this.left = left;\n this.right = right;\n }\n AndSpecification.prototype.isSatisfiedBy = function (candidate) {\n return this.left.isSatisfiedBy(candidate) && this.right.isSatisfiedBy(candidate);\n };\n AndSpecification.prototype.toString = function () {\n return '(' + this.left.toString() + ' and ' + this.right.toString() + ')';\n };\n return AndSpecification;\n}(CompositeSpecification));\nexports.AndSpecification = AndSpecification;\nvar AndNotSpecification = (function (_super) {\n __extends(AndNotSpecification, _super);\n function AndNotSpecification() {\n _super.apply(this, arguments);\n }\n AndNotSpecification.prototype.isSatisfiedBy = function (candidate) {\n return _super.prototype.isSatisfiedBy.call(this, candidate) !== true;\n };\n AndNotSpecification.prototype.toString = function () {\n return 'not ' + _super.prototype.toString.call(this);\n };\n return AndNotSpecification;\n}(AndSpecification));\nexports.AndNotSpecification = AndNotSpecification;\nvar OrSpecification = (function (_super) {\n __extends(OrSpecification, _super);\n function OrSpecification(left, right) {\n _super.call(this);\n this.left = left;\n this.right = right;\n }\n OrSpecification.prototype.isSatisfiedBy = function (candidate) {\n return this.left.isSatisfiedBy(candidate) || this.right.isSatisfiedBy(candidate);\n };\n OrSpecification.prototype.toString = function () {\n return '(' + this.left.toString() + ' or ' + this.right.toString() + ')';\n };\n return OrSpecification;\n}(CompositeSpecification));\nexports.OrSpecification = OrSpecification;\nvar OrNotSpecification = (function (_super) {\n __extends(OrNotSpecification, _super);\n function OrNotSpecification() {\n _super.apply(this, arguments);\n }\n OrNotSpecification.prototype.isSatisfiedBy = function (candidate) {\n return _super.prototype.isSatisfiedBy.call(this, candidate) !== true;\n };\n OrNotSpecification.prototype.toString = function () {\n return 'not ' + _super.prototype.toString.call(this);\n };\n return OrNotSpecification;\n}(OrSpecification));\nexports.OrNotSpecification = OrNotSpecification;\nvar NotSpecification = (function (_super) {\n __extends(NotSpecification, _super);\n function NotSpecification(other) {\n _super.call(this);\n this.other = other;\n }\n NotSpecification.prototype.isSatisfiedBy = function (candidate) {\n return !this.other.isSatisfiedBy(candidate);\n };\n NotSpecification.prototype.toString = function () {\n return '(not ' + this.other.toString() + ')';\n };\n return NotSpecification;\n}(CompositeSpecification));\nexports.NotSpecification = NotSpecification;\nvar RangeSpecification = (function (_super) {\n __extends(RangeSpecification, _super);\n function RangeSpecification(a, b) {\n _super.call(this);\n this.a = a;\n this.b = b;\n }\n RangeSpecification.prototype.isSatisfiedBy = function (candidate) {\n return candidate >= this.a && candidate <= this.b;\n };\n RangeSpecification.prototype.toString = function () {\n return 'range (' + this.a + ', ' + this.b + ')';\n };\n return RangeSpecification;\n}(CompositeSpecification));\nexports.RangeSpecification = RangeSpecification;\n//# sourceMappingURL=Specification.js.map"],"names":["render","_vm","this","_h","$createElement","_c","_self","style","VSystemBar","staticClass","_v","_s","localizer","VSpacer","toggleMinimizeContent","VIcon","attrs","on","$event","VCard","class","hasMeasurements","VList","VListItemGroup","selectedItemColor","_lookToSelection","model","value","callback","$$v","selectedItem","expression","_l","measure","index","VListItem","key","text","VToolbar","VBtn","_toggleVisibility","isEnabled","_toggleAxisVisibility","_e","_removeMeasure","staticRenderFns","VoPointCloudMeasure","UIElement","mounted","_onMeasuresChanged","beforeDestroy","sender","args","action","NotifyCollectionChangedAction","newMeasure","newItems","_itemsSource","push","updateMeasure","oldMeasureIndex","indexOf","splice","$raisePropertyChanged","removeMeasure","oldItems","item","LineMeasure","meshCenter","getChildMeshes","n","name","getBoundingInfo","boundingBox","center","closeAllPopups","setEnabled","keepAxisVisible","NotifyCollectionChangedEventArgs","_onActivationChanged","newValue","oldValue","isActive","activeLineColor","toHexString","canToggleAxisVisibility","pointCount","hasSelection","length","__decorate","Watch","JsonProperty","className","type","Array","editorBrowsable","groupName","PropSyncWithInternal","required","default","Component","component","buttons","scopedSlots","_u","fn","baseTranslationPath","proxy","ref","onOk","VContainer","VRow","VCol","errors","isEditMode","VSubheader","VSelect","schemas","isLoading","_resetDataSourceOnSchemaChanged","selectedSchema","VForm","preventDefault","isFormValid","_availableDisplayPathProperties","selectedDisplayPropertyPath","schema","attr","_componentSelector","tag","_isReadOnly","_isRequired","dataSource","$set","createObjectFromSchema","jsonSchema","createObjectFromSchemaInternal","rootJsonSchema","jsonType","jsonRef","getType","currentSchema","obj","schemaProperties","properties","Object","entries","Error","$ref","$defs","getRef","subType","isArray","some","t","find","refPath","startsWith","slice","split","filter","segment","reduce","current","property","enum","propertyName","from","validationRules","propertyValue","UseMixins","Mixins","Vue","ValidationRuleMixin","BaseFormInput","requiredRule","isRequired","RequiredRule","VModel","Prop","String","Boolean","VoSelectField","VTextField","_b","maxValueLength","$attrs","VoTextField","super","requirement","minLength","minLengthRule","maxLength","maxLengthRule","pattern","regexRule","format","emailAdressRule","hostNameRule","ipv4Rule","ipv6Rule","guidRule","uriRule","VoAddOrEditSmartObjectDialog","BaseDialogBehavior","DialogButton","created","dataContext","currentSmartObject","displayPropertyPath","parameters","orderBy","page","pageSize","_dataContext","schemaNames","map","join","response","_jsonSchemaService","getJsonSchemasAsync","items","ex","ApiException","error","JSON","stringify","_smartObjectService","updateObjectAsync","assetItemId","projectId","schemaId","jsonSchemaId","createObjectAsync","template","includes","readOnly","_","canConfirm","lazyInject","injectTypes","components","VoErrorsList","VMenu","_g","placeholder","isSearching","onSearch","showMenu","searchText","foundItems","staticStyle","active","assetSource","hotspots","VTreeview","selectOption","domProps","_highlightingSearchResult","VBadge","isVersioningEnabled","AssetItemType","Hotspot","getItemIconColor","getItemIcon","VAvatar","VImg","getItemImgPreview","content","color","getInternetExplorerVersion","ua","window","navigator","userAgent","msie","parseInt","substring","trident","rv","edge","isIE","initCompat","init","_scopeId","methods","compareAndNotify","_w","$el","offsetWidth","offsetHeight","$emit","addResizeHandlers","_resizeObject","contentDocument","defaultView","addEventListener","removeResizeHandlers","onload","removeEventListener","_this","$nextTick","object","document","createElement","setAttribute","appendChild","data","install","version","GlobalVue","g","use","_typeof","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","toString","call","processOptions","options","throttle","delay","timeout","lastState","currentArgs","arguments","undefined","throttled","state","_len","_key","leading","apply","concat","clearTimeout","setTimeout","_clear","deepEqual","val1","val2","VisibilityState","el","vnode","observer","frozen","createObserver","destroyObserver","result","entry","once","_ref","throttleOptions","_leading","oldResult","IntersectionObserver","intersectingEntry","e","isIntersecting","intersectionRatio","threshold","intersection","context","observe","disconnect","get","bind","_ref2","console","warn","_vue_visibilityState","update","_ref3","unbind","ObserveVisibility","directive","config","itemsLimit","_defineProperty","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","source","forEach","getOwnPropertyDescriptors","defineProperties","_unsupportedIterableToArray","o","minLen","_arrayLikeToArray","test","len","_createForOfIteratorHelper","F","s","done","f","it","err","normalCompletion","didErr","step","next","return","keyField","direction","validator","simpleArray","supportsPassive","opts","uid","script","ResizeObserver","directives","itemSize","Number","minItemSize","sizeField","typeField","buffer","pageMode","prerender","emitUpdate","pool","totalSize","ready","hoverKey","computed","sizes","accumulator","field","computedMinSize","l","size","$_computedMinItemSize","watch","updateVisibleItems","applyPageMode","handler","deep","$_startIndex","$_endIndex","$_views","Map","$_unusedViews","$_scrollDirty","$_lastUpdateScrollPosition","$_prerender","removeListeners","addView","view","position","nonReactive","id","used","unuseView","fake","unusedViews","nr","unusedPool","set","delete","handleResize","handleScroll","event","_this2","requestAnimationFrame","_this2$updateVisibleI","continuous","$_refreshTimout","handleVisibilityChange","isVisible","_this3","boundingClientRect","width","height","checkItem","startIndex","endIndex","checkPositionDiff","count","views","scroll","getScroll","positionDiff","start","end","h","oldI","a","b","Math","ceil","itemsLimitError","$_continuous","clear","_i","_i2","findIndex","v","unusedIndex","_i3","pop","$_sortTimer","sortViews","getListenerTarget","documentElement","body","scrollState","isVertical","bounds","getBoundingClientRect","boundsSize","top","left","innerHeight","innerWidth","scrollTop","clientHeight","scrollLeft","clientWidth","addListeners","listenerTarget","passive","scrollToItem","scrollToPosition","_this4","log","sort","viewA","viewB","normalizeComponent","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","hook","_compiled","functional","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","originalRender","existing","beforeCreate","__vue_script__","__vue_render__","_obj","_obj$1","rawName","$slots","before","_t","hover","transform","mouseenter","mouseleave","after","notify","__vue_staticRenderFns__","_withStripped","__vue_inject_styles__","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_component__","script$1","RecycleScroller","inheritAttrs","provide","$_resizeObserver","_step","_iterator","CustomEvent","detail","contentRect","dispatchEvent","vscrollData","vscrollParent","vscrollResizeObserver","validSizes","itemsWithSize","$_undefinedMap","listeners","$listeners","forceUpdate","immediate","$_updates","$_undefinedSizes","activated","deactivated","onScrollerResize","scroller","$refs","onScrollerVisible","force","getItemSize","scrollToBottom","$_scrollingToBottom","scrollHeight","cb","__vue_script__$1","__vue_render__$1","resize","visible","itemWithSize","slot","__vue_staticRenderFns__$1","__vue_inject_styles__$1","__vue_scope_id__$1","__vue_module_identifier__$1","__vue_is_functional_template__$1","__vue_component__$1","script$2","inject","watchData","sizeDependencies","emitResize","finalActive","onDataUpdate","observeSize","unobserveSize","$_pendingVScrollUpdate","updateSize","$isServer","$_forceNextVScrollUpdate","updateWatchData","_loop","k","$watch","$on","onVscrollUpdate","onVscrollUpdateSize","$off","$_pendingSizeUpdate","computeSize","$_watchData","applySize","round","parentNode","onResize","unobserve","_event$detail$content","__vue_script__$2","__vue_inject_styles__$2","__vue_scope_id__$2","__vue_module_identifier__$2","__vue_is_functional_template__$2","__vue_component__$2","registerComponents","prefix","finalOptions","assign","installComponents","componentsPrefix","SearchBoxItemResult","AssetHotspot","parentId","children","AssetPanoramaGroup","ai","panorama","AssetPanoramaVersion","panoramaGroup","groupHotspots","ah","makeLocalHotspot","VoSearchBox","$debounce","search","_cacheItems","freeze","_items","_searchPattern","option","assetItem","playerContext","goToPanorama","goToPanoramaVersion","panoramaId","coordinateInRadian","coordinates","CoordinatesHelper","url","getDefaultPanoramaVersion","file","links","preview","AssetFile","_uriService","getAbsoluteUri","icon","RegExp","_itemMatchSearch","label","replace","match","c","_onShowMenuChanged","_oldValue","_closeSearchBox","_dynamicScroller","Ref","DynamicScroller","DynamicScrollerItem","regex","parents","node","ps","prop","getComputedStyle","getPropertyValue","overflow","scrollParent","HTMLElement","SVGElement","scrollingElement","root","factory","globalRef","SVG","element","supported","Doc","parser","draw","prepare","ns","xmlns","xlink","svgjs","createElementNS","createSVGRect","did","eid","capitalize","create","extend","modules","Set","inherit","invent","initializer","construct","Container","adopt","nodeName","Nested","Gradient","Element","namespace","defs","setData","parse","getAttribute","getElementsByTagName","nested","poly","polyline","path","native","numberAndUnit","hex","rgb","reference","transforms","whitespace","isHex","isRgb","isCss","isBlank","isNumber","isPercent","isImage","delimiter","hyphen","pathLetters","isPathLetter","numbersWithDots","dots","utils","array","block","il","radians","d","PI","degrees","r","filterSVGElements","nodes","defaults","fill","stroke","opacity","x","y","cx","cy","rx","ry","offset","Color","exec","fullHex","toHex","compToHex","toRgb","brightness","morph","destination","at","pos","isColor","fallback","valueOf","lastValue","lastDestination","settle","seen","string","trim","parseFloat","reverse","clone","array_clone","PointArray","toLine","x1","y1","x2","y2","points","move","box","bbox","isNaN","getBBox","pathHandlers","M","p","p0","L","H","V","C","S","Q","T","Z","A","mlhvqtcsa","j","jl","toUpperCase","PathArray","arrayToString","equalCommands","pathArray","sourceArray","destinationArray","paramCnt","pathRegReplace","prev","curr","Point","unit","isFinite","toJSON","plus","number","minus","times","divide","to","relative","_stroke","_event","_events","dom","proportionalSize","writeDataToDom","assignNewId","cloneNode","remove","removeElement","addTo","put","putIn","inside","show","hide","classes","hasClass","addClass","removeClass","toggleClass","matches","doc","selector","svg","well","Parent","innerHTML","firstChild","childNodes","each","lines","removeAttribute","is","easing","cos","sin","MorphObj","Situation","reversed","reversing","duration","Date","finish","ease","loop","loops","animations","styles","FX","_target","situations","situation","paused","lastPos","absPos","_speed","animate","queue","timeToAbsPos","timestamp","absPosToTime","startAnimFrame","stopAnimFrame","animationFrame","cancelAnimationFrame","startCurrent","initAnimations","shift","dequeue","stop","initialTransformation","matrixify","clearQueue","clearCurrent","jumpToEnd","atEnd","reset","temp","atStart","isAbsPos","durDivSpd","speed","pause","last","play","progress","easeIt","wrapper","off","_callStart","during","eased","afterAll","duringAll","method","ignoreTime","absPosInt","lastLoop","max","floor","min","fire","fx","eachAt","self","Matrix","multiply","undo","extract","matrix","isEased","real","G","num","Text","plot","viewbox","ViewBox","Stop","Box","fullBox","merge","m","xMin","Infinity","xMax","yMin","yMax","pts","BBox","contains","Exception","topParent","Shape","clientLeft","clientTop","tbox","rbox","RBox","addOffset","pageXOffset","pageYOffset","screenCTM","inverse","base","arrayToMatrix","abcdef","px","deltaTransformPoint","py","skewX","atan2","transformedX","sqrt","transformedY","skewY","scaleX","scaleY","rotation","parseMatrix","translate","scale","around","rotate","flip","skew","tan","createSVGMatrix","float32String","ctm","getCTM","rect","getScreenCTM","point","createSVGPoint","matrixTransform","attributes","nodeValue","image","Image","setAttributeNS","rebuild","ensureCentre","Rotate","Scale","Skew","Translate","untransform","str","kv","toParent","pCtm","toDoc","Transformation","inversed","params","_undo","cssText","camelCase","insertBefore","has","first","removeChild","hasChildNodes","lastChild","_defs","ungroup","depth","Defs","flatten","we","he","wm","hm","reg","zoom","listenerId","events","listener","binding","bag","_svgjsListenerId","ev","Event","cancelable","gbox","trans","group","getElementById","spof","nextSibling","siblings","previous","forward","backward","front","back","Mask","targets","unmask","mask","maskWith","masker","ClipPath","unclip","clip","clipWith","clipper","gradient","fy","Pattern","patternUnits","Bare","words","createTextNode","symbol","Use","Rect","Circle","circle","Ellipse","ellipse","Line","line","Polyline","Polygon","polygon","_array","morphArray","Path","load","img","_loaded","ratio","_error","src","loaded","_rebuild","_build","oy","nodeType","newLined","textContent","build","tspan","newLine","textPath","blankLineOffset","dy","plain","Tspan","dx","getComputedTextLength","TextPath","track","link","linkTo","Marker","marker","sugar","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","toLowerCase","charAt","comp","w","idFromReference","abs","extension","dmove","radius","getTotalLength","pointAt","getPointAtLength","font","members","elements","remember","memory","forget","_memory","select","query","querySelectorAll","CustomEventPoly","bubbles","createEvent","initCustomEvent","lastTime","vendors","currTime","getTime","timeToCall","GmaoService","baseUri","apiKey","authorization","_httpClient","HttpClient","UriService","OnlineAbsoluteUriBehavior","_apiKey","_authorization","searchLocal","pageNumber","resultsPerPage","searchQuery","searchLocationQuery","filterQuery","queryResult","getAsync","$orderby","$filter","$start_index","$count","Headers","keyid","Authorization","handleResponseAsync","rgfsChunks","chunk","groupeEquipements","rgfs","responseGroupeEquipements","getPrincipaleGroupeEquipements","id_equipement","eCode","rgf","groupe_equipements","getGroupeEquipements","Ecode","wrHeader","FindWorkRequestResponse","BusinessObject","WRHeader","title","description","originatorCode","jobType","priority","dateTime","isoDate","toISOString","date","time","postAsync","WrTaskTitle","WoReqDescription","WoReqOriginator","JobType","WoTskPriority","WoReqNeedDate","WoReqNeedTime","CreateWorkRequestResponse","filterRgfs","$select","handleErrorsAsync","json","status","problemDetails","code","message","details","innerError","injectable","IGmaoService","for","IWiwContext","WiwService","token","ok","jsonResult","bearerToken","_isLogged","searchTerms","q","limit","entityId","entity","comments","tickets","uriVison","putAsync","startDateTime","endDateTime","scheduledBegin","scheduledEnd","comment","imageId","blob","isLogged","DrawablePointCloud","MeasureHelper","global","translation","globalSource","local","Vector3","toVector3","invertTranslate","invertRotate","right","z","Color4","tuplePoint","Measurable","Mesh","scene","addPoint","mousePosition","pointCloudPosition","canAddPoint","position3d","onActiveChanged","_isActive","PopupConnector","targetTexture","hexToRgbaString","connectorColor","_targetTexture","_container","Rectangle","adaptWidthToChildren","adaptHeightToChildren","background","shadowBlur","addControl","_sourceConnector","widthInPixels","heightInPixels","thickness","_connector","lineWidth","connectedControl","openClose","linkedMesh","linkWithMesh","linkOffsetXInPixels","linkOffsetYInPixels","paddingLeftInPixels","close","_content","removeControl","_connectorColor","renderScene","Color3","toFixed","_advancedTexture","AdvancedDynamicTexture","pointMeshes","_axis","_ghostPoints","_transparentMaterial","StandardMaterial","emissiveColor","alpha","onDisposeObservable","addOnce","dispose","showGhostLineAt","_ghostLine","hideGhostLine","_closePointInfoPopup","_closeResultInfoPopup","_createPointAt","MeshBuilder","diameter","pointDiameter","_labelPickInfo","stack","StackPanel","paddingLeft","paddingRight","paddingTop","paddingBottom","textX","TextBlock","_xAxisColor","textY","_yAxisColor","textZ","_zAxisColor","resizeToFit","fontSize","horizontalAlignment","Control","textHorizontalAlignment","actionManager","ActionManager","registerAction","ExecuteCodeAction","_openPointInfoPopup","renderingGroupId","pm","meshUnderPointer","pointInfo","startPointColor","endPointColor","_createLine","updatable","colors","lineColor","alwaysSelectAsActiveMesh","eventLine","tessellation","addChild","openCondition","PredicateCondition","canMeasure","_resultInfo","closeCondition","material","_openResultInfoPopup","isValid","isAxisVisible","_createAxis","axis","zEndPointComputed","_computeZEndPoint","zEndPoint","rightToLeftHandAxis","axisXYIntersectComputed","_computeXYIntersection","axisXYIntersect","_xAxis","_yAxis","_zAxis","_baseLine","_baseLineColor","p1","p2","xLength","yLength","zLength","baselineLength","grid","Grid","addColumnDefinition","addRowDefinition","rowCount","lineLength","tLength","lineX","tX","lineY","tY","lineZ","tZ","lineBase","tBaseLine","tb","textVerticalAlignment","ln","paddingRightInPixels","verticalAlignment","_createGhostLine","ghostLine","dashNb","dashSize","gapSize","ghostLineColor","newPoint","nodeMesh","_startPointMaterial","_endPointMaterial","_line","translationMatrix","rotationMatrix","globalToLocal","formatText","NaN","_lineColor","_isAxisVisible","_keepAxisVisible","breadcrumbPanoramaGroupsConverter","panoramaGroups","emptyNavigationListToVisibilityConverter","Visibility","navigations","navigation","navigationType","NavigationType","maps","emptyNavigationMapToVisibilityConverter","listNavigationsConverter","order","mapsFromNavigationMapConverter","nodeMap","urlConverter","guid","appContext","serviceProvider","AppContext","uriService","codeCulture","UrlHelper","validatedToken","PlayerConverter","converter","_converters","converters","computedStyle","uriPrs","openOranoPrs","_baseUriPrs","_unit","localName","OranoPrs","_currentPanorama","findAssetFileFromAssetId","urlJoin","isOpen","_width","VSheet","_appContext","isDarkTheme","VDataTable","headers","searchResults","pagination","VCheckbox","hasSearchAnywhere","toggle","_getIconColor","designation","_getRgfWithoutSiteAndAtelier","RGF","isDraggable","onStartDragItemAsync","onLookToEquipment","isLocate","openOranoEquipement","site","VProgressCircular","def","OranoVentixPanel","searchRgfPageAsync","align","itemsPerPage","itemsLength","pageCount","pageStart","pageStop","_VentixService","_baseUriVentix","_getAuthorizationBasicToken","_denodoUserName","_denodoPassword","toConstantValue","_fetchData","_entries","_observer","hasMorePagesToLoad","dataTransfer","dropEffect","_isDropAllowed","salle_differentiateur","_getCurrentLocal","onEndDragItemAsync","getData","singleifyItemNames","_configuration","hotspot","assetItemLinkedId","coordinateSystem","CoordinateSystem","tooltip","onClick","atelier","onHover","results","_projectService","addNewAssets","currentProjet","newAsset","onclick","parseFunction","currentPanorama","hs","allHotspot","coordinate","panoramas","flatMap","searchRgfAsync","userName","password","btoa","type_groupe","localIdentifierRegex","groups","_getUniteFonctionnelleAvecChaine","EnumHelper","user","permissions","project","ProjectPermissions","PropSync","ProjectService","Intersect","_onCopyLocationAsync","_onGoToLocation","location","VoShareLocation","playerContextPropertyChanged","loc","assetPanoramaVersionId","orientation","currentOrientation","fov","currentFocale","clipboard","writeText","atob","translationPath","_objectTypeToRetrieve","selectedObjectTypes","VListItemAction","currentPanoramaOnly","smartObjects","_openAddSmartObjectDialogAsync","_toggleDisplay","VDivider","hasDragPermission","_lookAtSmartObject","_openSmartObjectDetailsDialogAsync","_onStartDragItem","VListItemIcon","_formatMemberPath","VTooltip","modifiers","SmartObjectHotspotsSpecification","CompositeSpecification","hotspotNames","_hotspotsNames","isSatisfiedBy","candidate","VoSmartObjectPanel","async","_search","_isPanelOpen","_fetchObjectsAsync","nextLink","_resetHotspotsSpecification","requestResult","getObjectsAsync","_getSearchRequest","fetchedObjects","smartObject","cachedObject","so","SmartObjectDto","_setHotspotsSpecification","_qualifiedHotspotsSpecification","totalObjectsCount","totalCount","request","types","resultPerload","panoramaVersionId","_hotspotName","$type","_onEndDragItem","_sender","allHotspots","addChildren","ExploreAssetHotspot","specification","openSmartObjectDetailsDialogAsync","dialogResult","_dialogService","openAsync","settings","dialogs","medium","large","DialogResult","qualifiedSmatObjectHotspots","currentPanoramaSmartObjectHotspots","contentHotspots","currentPanoramaHotspotWithoutSmartobjects","_getobjectsByType","displayInMosaic","_hotspotsSpecification","hotspotsFilters","getHotposts","filteredHotspots","_onLookToEquipment","eplumeElement","WiwPanel","fetchDataAsync","_WiwService","_baseUriWiw","wiwInjectTypes","baseUriWiw","_isFetching","loginTokenAsync","searchEntityAsync","totalItems","currentPage","totalPages","uriPanoLookToHotspot","_buildProjectLink","updateEntityAsync","hotspotOrientation","uri","maxHeight","maxWidth","contain","alt","VoImage","_onContentAlignmentPropertyChanged","VoImage_1","_horizontalAlignmentToHtml","_horizontalContentAlignment","_verticalAlignmentToHtml","_verticalContentAlignment","HorizontalAlignment","VerticalAlignment","MapSize","_mapSize","Hidden","Normal","currentMap","Auto","Reduce","isMobile","_switchMapSizeTo","Full","hasCompass","compassPosition","northOrientation","compassConfiguration","_onDisplayDefaultMap","VoMap","_background","_originalMapSize","_originalValues","_horizontalAlignment","_verticalAlignment","_height","_row","_column","_rowSpan","_columnSpan","_updateViewportHandler","resizeSvgGroup","_openAndResizeHandler","loadAreas","_updateMapDispositionAsync","_loadNavigationAsync","_currentNavigation","onCurrentPanoramaPropertyChanged","_updateSelectedPanorama","onSelectedHotspotChanged","_updateSelectedHotspot","_updateCompassPosition","defaultMap","isDefault","FileMap","hasMap","createMap","hotspotOfMap","_loadMapIf","selectedHotspot","hotspotOfPanorama","updateCompassPosition","viewer","seaDragonViewer","viewport","viewportToSvgCoordinates","OpenSeaDragon","allOverlays","dataset","display","svgGroup","selectedColor","StreetMap","openLevel","desiredSize","fitHorizontally","fitVertically","$vuetify","breakpoint","xs","isInitialize","removeHandler","destroy","prefixUrl","zoomInButton","zoomOutButton","sequenceControlAnchor","minZoomImageRatio","maxZoomPixelRatio","POSITIVE_INFINITY","addHandler","preventDefaultAction","createSvgOverlay","loadStreetMap","seaDragonOverlayDiv","canvas","svgOverlay","compass","isStandalone","imageSource","URL","optimizedImage","searchParams","open","href","buildPyramid","crossOriginPolicy","tilesource","deepzoom","player","ajaxWithCredentials","loadTilesWithAjax","ajaxHeaders","provider","StreetMapType","tileSources","showNavigationControl","lat","long","classList","world","getItemAt","dimensions","latRad","mercN","imageToViewportCoordinates","addOverlay","placement","clearOverlays","onclickCallback","onEventNameClick","Function","newOverlay","backgroundColor","cursor","clickHandler","areaCoordinates","newShape","formType","FormType","origin","svgOrigin","svgSize","rayon","svgCenter","svgRayon","coords","pointArray","enterHandler","hoverColor","exitHandler","originPoint","pixelFromPoint","getZoom","endP","itemsSource","findPanoramaFileFromAssetId","VoPanoramaList","XToggle","XItemPresenter","XPanoramaPreview","componentContainer","skipBaseClassChecks","getComponents","getAll","experimentalFeatures","componentClass","requiredFeatures","Reflect","getMetadata","hasFlag","getComponentFromType","componentName","BasePage","extendOptions","XGrid","XView","VoPanoramaBreadcrumb","XMediaPlayer","Audio","currentTime","HTMLVideoElement","filterRecursive","predicate","childrenPath","chilPredicate","resolve","changedItems","startingIndex","oldIndex","Reset","initializeAdd","Replace","initializeMoveOrReplace","Move","initilizeAddOrRemove","changedItem","createReset","createOneItemIndexChange","createMultiItemChangeOrReset","newItem","oldItem","createOneItemReplaceIndex","oldStartingIndex","createMultiItemReplaceIndex","createMultiItemMove","Add","Remove","initializeRemove","newStartingIndex","_action","_newItems","_newStartingIndex","_oldItems","_oldStartingIndex","NewStartingIndex","OldStartingIndex","BehaviorBase","attach","associatedElement","onAssociatedElementChanged","onAttached","detach","onDetaching","isAttached","Behavior","associatedObject","__extends","hasOwnProperty","__","and","other","AndSpecification","andNot","AndNotSpecification","or","OrSpecification","orNot","OrNotSpecification","not","NotSpecification","exports","_super","RangeSpecification"],"sourceRoot":""}