QGIS/resources/server/api/ogc/static/landingpage/js/chunk-744799cf.0eb406dc.js.map
Alessandro Pasotti 6edfc994c9 Remove footer
2020-11-26 09:39:22 +01:00

1 line
752 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///./node_modules/core-js/internals/same-value.js","webpack:///./src/views/WebGis.vue?5e36","webpack:///./src/components/MapToolbar.vue?e8f1","webpack:///src/components/MapToolbar.vue","webpack:///./src/components/MapToolbar.vue?9694","webpack:///../../../src/components/VGrid/VLayout.ts","webpack:///./src/components/MapToolbar.vue?f0aa","webpack:///./src/components/MapFooter.vue?4eb1","webpack:///src/components/MapFooter.vue","webpack:///./src/components/MapFooter.vue?7f65","webpack:///./src/components/MapFooter.vue","webpack:///./src/components/LeftSidebar.vue?4f10","webpack:///./src/components/LayerTree.vue?82cb","webpack:///./src/components/LayerTreeNode.vue?c0a9","webpack:///src/components/LayerTreeNode.vue","webpack:///./src/components/LayerTreeNode.vue?80c8","webpack:///../../../src/mixins/menuable/index.ts","webpack:///../../../src/components/VMenu/VMenu.ts","webpack:///../../../src/components/VTooltip/VTooltip.ts","webpack:///./src/components/LayerTreeNode.vue?5616","webpack:///src/components/LayerTree.vue","webpack:///./src/components/LayerTree.vue?df48","webpack:///./src/components/LayerTree.vue?7b3e","webpack:///./src/components/IdentifyResults.vue?c057","webpack:///src/components/IdentifyResults.vue","webpack:///./src/components/IdentifyResults.vue?8d92","webpack:///../../../src/components/VDataTable/VSimpleTable.ts","webpack:///./src/components/IdentifyResults.vue","webpack:///src/components/LeftSidebar.vue","webpack:///./src/components/LeftSidebar.vue?10a7","webpack:///../../../src/components/VNavigationDrawer/VNavigationDrawer.ts","webpack:///./src/components/LeftSidebar.vue","webpack:///./src/components/AttributeTable.vue?39ed","webpack:///src/components/AttributeTable.vue","webpack:///./src/components/AttributeTable.vue?632c","webpack:///../../../src/components/VChip/VChip.ts","webpack:///../../../src/components/VChip/index.ts","webpack:///../../../src/components/VMenu/index.ts","webpack:///../../../src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///../../../src/components/VSubheader/VSubheader.ts","webpack:///../../../src/components/VSubheader/index.ts","webpack:///../../../src/components/VSelect/VSelectList.ts","webpack:///../../../src/components/VLabel/VLabel.ts","webpack:///../../../src/components/VLabel/index.ts","webpack:///../../../src/components/VMessages/VMessages.ts","webpack:///../../../src/components/VMessages/index.ts","webpack:///../../../src/mixins/validatable/index.ts","webpack:///../../../src/components/VInput/VInput.ts","webpack:///../../../src/components/VInput/index.ts","webpack:///../../../src/components/VCounter/VCounter.ts","webpack:///../../../src/components/VCounter/index.ts","webpack:///../../../src/mixins/intersectable/index.ts","webpack:///../../../src/components/VTextField/VTextField.ts","webpack:///../../../src/mixins/comparable/index.ts","webpack:///../../../src/mixins/filterable/index.ts","webpack:///../../../src/components/VSelect/VSelect.ts","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///../../../src/components/VCombobox/VCombobox.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../../../src/components/VDataTable/mixins/header.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderMobile.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderDesktop.ts","webpack:///../../src/util/dedupeModelListeners.ts","webpack:///../../src/util/rebuildFunctionalSlots.ts","webpack:///../../../src/components/VDataTable/VDataTableHeader.ts","webpack:///../../../src/components/VDataTable/Row.ts","webpack:///../../../src/components/VDataTable/RowGroup.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts","webpack:///./src/components/AttributeTable.vue?0b91","webpack:///./src/js/WmsSource.js","webpack:///src/views/WebGis.vue","webpack:///./src/views/WebGis.vue?9f19","webpack:///../../../src/components/VAppBar/VAppBarNavIcon.ts","webpack:///./src/views/WebGis.vue?5f2f","webpack:///./node_modules/vuetify-loader/lib/runtime/installDirectives.js","webpack:///./node_modules/core-js/modules/es.object.is.js","webpack:///./src/components/LayerTree.vue?1d29","webpack:///./src/components/MapToolbar.vue?3255","webpack:///./node_modules/leaflet/dist/images/marker-icon-2x.png","webpack:///./node_modules/leaflet/dist/images/marker-icon.png","webpack:///./node_modules/reproject/index.js","webpack:///./node_modules/core-js/modules/es.string.search.js","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./node_modules/proj4/lib/global.js","webpack:///./node_modules/proj4/lib/constants/values.js","webpack:///./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack:///./node_modules/proj4/lib/constants/units.js","webpack:///./node_modules/proj4/lib/match.js","webpack:///./node_modules/proj4/lib/projString.js","webpack:///./node_modules/wkt-parser/parser.js","webpack:///./node_modules/wkt-parser/process.js","webpack:///./node_modules/wkt-parser/index.js","webpack:///./node_modules/proj4/lib/defs.js","webpack:///./node_modules/proj4/lib/parseCode.js","webpack:///./node_modules/proj4/lib/extend.js","webpack:///./node_modules/proj4/lib/common/msfnz.js","webpack:///./node_modules/proj4/lib/common/sign.js","webpack:///./node_modules/proj4/lib/common/adjust_lon.js","webpack:///./node_modules/proj4/lib/common/tsfnz.js","webpack:///./node_modules/proj4/lib/common/phi2z.js","webpack:///./node_modules/proj4/lib/projections/merc.js","webpack:///./node_modules/proj4/lib/projections/longlat.js","webpack:///./node_modules/proj4/lib/projections.js","webpack:///./node_modules/proj4/lib/constants/Ellipsoid.js","webpack:///./node_modules/proj4/lib/deriveConstants.js","webpack:///./node_modules/proj4/lib/constants/Datum.js","webpack:///./node_modules/proj4/lib/datum.js","webpack:///./node_modules/proj4/lib/Proj.js","webpack:///./node_modules/proj4/lib/datumUtils.js","webpack:///./node_modules/proj4/lib/datum_transform.js","webpack:///./node_modules/proj4/lib/adjust_axis.js","webpack:///./node_modules/proj4/lib/common/toPoint.js","webpack:///./node_modules/proj4/lib/checkSanity.js","webpack:///./node_modules/proj4/lib/transform.js","webpack:///./node_modules/proj4/lib/core.js","webpack:///./node_modules/mgrs/mgrs.js","webpack:///./node_modules/proj4/lib/Point.js","webpack:///./node_modules/proj4/lib/common/pj_enfn.js","webpack:///./node_modules/proj4/lib/common/pj_mlfn.js","webpack:///./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack:///./node_modules/proj4/lib/projections/tmerc.js","webpack:///./node_modules/proj4/lib/common/sinh.js","webpack:///./node_modules/proj4/lib/common/hypot.js","webpack:///./node_modules/proj4/lib/common/log1py.js","webpack:///./node_modules/proj4/lib/common/asinhy.js","webpack:///./node_modules/proj4/lib/common/gatg.js","webpack:///./node_modules/proj4/lib/common/clens.js","webpack:///./node_modules/proj4/lib/common/cosh.js","webpack:///./node_modules/proj4/lib/common/clens_cmplx.js","webpack:///./node_modules/proj4/lib/projections/etmerc.js","webpack:///./node_modules/proj4/lib/common/adjust_zone.js","webpack:///./node_modules/proj4/lib/projections/utm.js","webpack:///./node_modules/proj4/lib/common/srat.js","webpack:///./node_modules/proj4/lib/projections/gauss.js","webpack:///./node_modules/proj4/lib/projections/sterea.js","webpack:///./node_modules/proj4/lib/projections/stere.js","webpack:///./node_modules/proj4/lib/projections/somerc.js","webpack:///./node_modules/proj4/lib/projections/omerc.js","webpack:///./node_modules/proj4/lib/projections/lcc.js","webpack:///./node_modules/proj4/lib/projections/krovak.js","webpack:///./node_modules/proj4/lib/common/mlfn.js","webpack:///./node_modules/proj4/lib/common/e0fn.js","webpack:///./node_modules/proj4/lib/common/e1fn.js","webpack:///./node_modules/proj4/lib/common/e2fn.js","webpack:///./node_modules/proj4/lib/common/e3fn.js","webpack:///./node_modules/proj4/lib/common/gN.js","webpack:///./node_modules/proj4/lib/common/adjust_lat.js","webpack:///./node_modules/proj4/lib/common/imlfn.js","webpack:///./node_modules/proj4/lib/projections/cass.js","webpack:///./node_modules/proj4/lib/common/qsfnz.js","webpack:///./node_modules/proj4/lib/projections/laea.js","webpack:///./node_modules/proj4/lib/common/asinz.js","webpack:///./node_modules/proj4/lib/projections/aea.js","webpack:///./node_modules/proj4/lib/projections/gnom.js","webpack:///./node_modules/proj4/lib/common/iqsfnz.js","webpack:///./node_modules/proj4/lib/projections/cea.js","webpack:///./node_modules/proj4/lib/projections/eqc.js","webpack:///./node_modules/proj4/lib/projections/poly.js","webpack:///./node_modules/proj4/lib/projections/nzmg.js","webpack:///./node_modules/proj4/lib/projections/mill.js","webpack:///./node_modules/proj4/lib/projections/sinu.js","webpack:///./node_modules/proj4/lib/projections/moll.js","webpack:///./node_modules/proj4/lib/projections/eqdc.js","webpack:///./node_modules/proj4/lib/projections/vandg.js","webpack:///./node_modules/proj4/lib/projections/aeqd.js","webpack:///./node_modules/proj4/lib/projections/ortho.js","webpack:///./node_modules/proj4/lib/projections/qsc.js","webpack:///./node_modules/proj4/lib/projections/robin.js","webpack:///./node_modules/proj4/lib/projections/geocent.js","webpack:///./node_modules/proj4/projs.js","webpack:///./node_modules/proj4/lib/index.js","webpack:///./src/components/AttributeTable.vue?4ceb","webpack:///./src/components/LayerTreeNode.vue?fae0","webpack:///../../../src/components/VDivider/index.ts","webpack:///./node_modules/leaflet/dist/images/marker-shadow.png","webpack:///./src/views/WebGis.vue?b3ab"],"names":["module","exports","Object","is","x","y","_vm","this","_h","$createElement","_c","_self","attrs","status","error","length","_e","on","$event","stopPropagation","expandedSidebar","_v","_s","project","title","map","showIdentify","setLayerVisibility","class","attributeTableTypename","activeTool","directives","name","rawName","value","expression","ref","staticStyle","setMap","capabilities","wmsOutputCrsList","includes","baseMap","staticClass","staticRenderFns","zoomIn","zoomOut","active","onIdentifyToolClicked","props","methods","$store","state","computed","component","VBtn","VIcon","VLayout","mapScaleDenominator","VCol","VFooter","VRow","model","callback","$$v","drawer","activeTab","key","scopedSlots","_u","fn","_g","toggleBaseMap","_l","toc","element","entry","uniqueKey","toggleLayer","toggleGroup","node","tree_id_hash","is_layer","layer_type","children","expanded","visible","preventDefault","showContextMenu","typename","description","child","uuid","isVisible","child_node","showMenu","onMouseLeave","item","onContextMenuOptionClicked","domProps","icon","data","mounted","uuidv4","scaleMinDenom","scaleMaxDenom","$emit","commit","console","log","e","clientX","clientY","$nextTick","options","push","baseMixins","mixins","allowOverflow","light","dark","maxWidth","type","Number","default","minWidth","nudgeBottom","nudgeLeft","nudgeRight","nudgeTop","nudgeWidth","offsetOverflow","openOnClick","positionX","positionY","zIndex","absoluteX","absoluteY","activatedBy","activatorFixed","dimensions","activator","top","left","bottom","right","width","height","offsetTop","scrollHeight","offsetLeft","content","hasJustFocused","hasWindow","inputActivator","isContentActive","pageWidth","pageYOffset","stackClass","stackMinZIndex","computedLeft","a","c","activatorLeft","attach","Math","isNaN","parseInt","computedTop","hasActivator","$slots","$scopedSlots","watch","disabled","val","isActive","beforeMount","window","absolutePosition","activate","calcLeft","calcXOverflow","calcTop","calcYOverflow","xOverflow","documentHeight","toTop","contentHeight","totalHeight","isOverflowing","callActivate","callDeactivate","checkForPageYOffset","checkActivatorFixed","el","deactivate","genActivatorListeners","listeners","onClick","getInnerHeight","document","getOffsetLeft","getOffsetTop","getRoundedBoundedClientRect","rect","measure","style","sneakPeek","requestAnimationFrame","cb","startTransition","Promise","resolve","updateDimensions","provide","isInMenu","theme","ClickOutside","Resize","auto","closeOnClick","closeOnContentClick","disableKeys","maxHeight","offsetX","offsetY","openOnHover","origin","transition","Boolean","calculatedTopAuto","defaultOffset","listIndex","resizeTimeout","selectedIndex","tiles","activeTile","calculatedLeft","menuWidth","parseFloat","calculatedMaxHeight","calculatedMaxWidth","calculatedMinWidth","calculatedTop","hasClickableTiles","find","tile","styles","transformOrigin","activeZIndex","next","prev","classList","remove","created","$attrs","hasOwnProperty","calcScrollPosition","$el","$refs","maxScrollTop","calcLeftAuto","calcTopAuto","Array","tileDistanceFromMenuTop","firstTileOffsetTop","changeListIndex","closeConditional","target","contains","genActivatorAttributes","attributes","id","genTransition","genDirectives","handler","include","genContent","role","menuable__content__active","contentClass","click","keydown","onKeyDown","$listeners","getTiles","querySelectorAll","mouseEnterHandler","mouseLeaveHandler","nextTile","prevTile","setTimeout","onResize","clearTimeout","render","arg","h","showLazyContent","root","closeDelay","fixed","openDelay","tag","String","closeDependents","unknown","activatorTop","classes","computedTransition","opacity","setBackgroundColor","VExpandTransition","VList","VListItem","VListItemIcon","VListItemTitle","VMenu","VTooltip","projectId","components","LayerTreeNode","findLayerNode","i","res","findNodeByHash","basemap","setGroupNodeVisibility","groupNode","VCard","VCardText","identifyResults","feature","zoomToFeature","proxy","highlightLayer","clearLayers","addData","setView","getBounds","getCenter","dense","fixedHeader","themeClasses","genWrapper","wrapper","VCardTitle","VContainer","VProgressLinear","VSimpleTable","LayerTree","IdentifyResults","currentTab","get","set","newValue","isInNav","Touch","clipped","disableResizeWatcher","disableRouteWatcher","expandOnHover","floating","app","miniVariant","miniVariantWidth","permanent","src","stateless","temporary","touchless","isMouseover","touchArea","applicationProperty","computedMaxHeight","$vuetify","application","computedTransform","computedWidth","isMiniVariant","hasApp","isBottom","isMobile","reactsToClick","reactsToMobile","reactsToResize","reactsToRoute","showOverlay","translate","transform","$route","removeOverlay","calculateTouchArea","parent","parentRect","genAppend","genPosition","genBackground","image","img","VImg","getOpenDependentElements","swipeRight","genListeners","transitionend","resizeEvent","slot","genPrepend","genBorder","init","onRouteChange","swipeLeft","updateApplication","updateMiniVariant","VNavigationDrawer","VTab","VTabItem","VTabs","onCloseButtonClicked","hasSearchError","filterText","searchableFields","filterField","currentPage","sortBy","sortDesc","numberMatched","tableHeaders","loading","tableData","itemsPerPageOptions","itemsPerPageText","keys","wms_layers_map","values","text","field","fieldNames","fieldAliases","aliases","loadData","activeClass","chipGroup","close","closeIcon","draggable","filter","filterIcon","label","link","outlined","pill","textColor","proxyClass","groupClasses","hasClose","isClickable","breakingProps","original","replacement","genFilter","genClose","size","tabindex","color","setTextColor","functional","ripple","indeterminate","indeterminateIcon","onIcon","offIcon","center","mergeData","f","inset","action","hideSelected","items","itemDisabled","itemText","itemValue","noDataText","noFilter","searchInput","selectedItems","parsedItems","tileActiveClass","staticNoDataTile","undefined","mousedown","genTileContent","genAction","VListItemAction","inputValue","input","genDivider","VDivider","genFilteredText","getMaskedCharacters","end","start","genHighlight","middle","genHeader","index","genTile","hasItem","getDisabled","_uid","scopedSlot","needsTile","innerHTML","getText","indexOf","getValue","itemsLength","absolute","focused","for","ctx","position","genChildren","genMessage","message","errorCount","errorMessages","messages","readonly","rules","success","successMessages","validateOnBlur","required","errorBucket","hasColor","hasFocused","hasInput","isFocused","isResetting","lazyValue","valid","computedColor","isDark","hasError","internalErrorMessages","hasSuccess","internalSuccessMessages","externalError","hasMessages","validationTarget","hasState","shouldValidate","genInternalMessages","internalMessages","internalValue","isDisabled","form","isInteractive","isReadonly","validations","slice","validationState","newVal","deep","register","beforeDestroy","unregister","reset","resetValidation","validate","force","rule","inheritAttrs","appendIcon","backgroundColor","hideDetails","hint","persistentHint","prependIcon","hasMouseDown","computedId","hasDetails","messagesToDisplay","hasHint","hasLabel","isDirty","isLabelActive","validation","validationResult","showDetails","beforeCreate","$options","genControl","genDefaultSlot","genIcon","extraData","eventName","hasListener","listeners$","mouseup","genInputSlot","onMouseUp","genLabel","genMessages","genSlot","genPrependSlot","genAppendSlot","onMouseDown","max","isGreater","onObserve","destroyed","onVisible","dirtyTypes","appendOuterIcon","autofocus","clearable","clearIcon","counter","counterValue","filled","flat","fullWidth","placeholder","prefix","prependInnerIcon","reverse","rounded","shaped","singleLine","solo","soloInverted","suffix","badInput","labelWidth","prefixWidth","prependWidth","initialValue","isBooted","isClearing","computedCounterValue","hasCounter","isEnclosed","isSingle","isSolo","labelPosition","offset","labelValue","rtl","showLabel","focus","blur","clearableCallback","genPrependInnerSlot","genIconSlot","prepend","genClearIcon","genCounter","attrs$","genFieldset","genLegend","span","genInput","messagesNode","counterNode","genTextFieldSlot","genAffix","onBlur","onFocus","onInput","setLabelWidth","scrollWidth","setPrefixWidth","setPrependWidth","tryAutofocus","updateValue","valueComparator","defaultMenuProps","cacheItems","chips","deletableChips","disableLookup","eager","itemColor","menuProps","multiple","openOnClear","returnObject","smallChips","cachedItems","menuIsBooted","isMenuActive","lastItem","keyboardLookupPrefix","keyboardLookupLastTime","allItems","filterDuplicates","concat","computedItems","computedOwns","dynamicHeight","hasChips","hasSlot","listData","scopeId","$vnode","context","lang","t","select","selectItem","staticList","VSelectList","virtualizedItems","$_menuProps","menuCanShow","normalisedProps","split","acc","p","immediate","activateMenu","getContent","uniqueValues","arr","findExistingIndex","menu","genChipSelection","small","JSON","genCommaSelection","last","selections","autocomplete","keypress","onKeyPress","genHiddenInput","genList","genListWithSlot","slots","slotName","genMenu","scroll","onScroll","genSelections","genSelection","genSlotSelection","selection","selected","getMenuIndex","onChipInput","setValue","isAppendInner","onEscDown","KEYBOARD_LOOKUP_THRESHOLD","now","performance","findIndex","keyCode","onUpDown","onTabDown","onSpaceDown","onMenuActiveChange","showMoreItems","scrollTop","setMenuIndex","setSelectedItems","v","oldValue","appendInner","autoSelectFirst","queryText","hideNoData","lazySearch","selectedValues","hasDisplayedItems","filteredItems","some","currentRange","selectedItem","internalSearch","isAnyValueAllowed","searchIsDirty","isSearching","oldVal","onFilteredItemsChanged","onInternalSearchChanged","updateMenuDimensions","changeSelectedIndex","deleteCurrentItem","curIndex","curItem","lastIndex","nextIndex","nextItem","setSearch","updateSelf","onCopy","currentItem","currentItemText","event","delimiters","editingIndex","delimiter","d","chip","dblclick","onEnterDown","selectionStart","updateEditing","updateCombobox","isUsingSlot","updateTags","menuIndex","onPaste","pastedItemText","customSort","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","locale","disableSort","disablePagination","disableFiltering","search","customFilter","serverItemsLength","internalOptions","sortDiff","groupDiff","pageCount","pageStart","pageStop","isGrouped","pagination","sortItems","paginateItems","groupedItems","groupItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","toggle","by","oldBy","desc","oldDesc","byIndex","k","s","prevIcon","nextIcon","firstIcon","lastIcon","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","genDataItemsPerPageOption","genItemsPerPageSelect","computedIPPO","ippo","genPaginationInfo","genIcons","before","after","VData","itemKey","singleSelect","mobileBreakpoint","singleExpand","noResultsText","loadingText","hideDefaultFooter","footerProps","selectableKey","expansion","internalCurrentItems","everyItem","selectableItems","every","someItems","sanitizedFooterProps","removedProps","prop","toggleSelectAll","isSelectable","isSelected","emit","old","isExpanded","expand","createItemProps","genEmptyWrapper","genEmpty","noData","filteredItemsLength","noResults","genItems","empty","genFooter","genDefaultScopedSlot","outerProps","headers","sortIcon","showGroupBy","genSelectAll","genSortIcon","sortByText","genSortChip","sortIndex","beingSorted","isDesc","sortable","asc","genSortSelect","change","header","sortHeaders","th","tr","genGroupByToggle","getAria","$t","ariaSort","ariaLabel","scope","mobile","dedupeModelListeners","VDataTableHeaderMobile","VDataTableHeaderDesktop","computedSlots","columns","regularSlot","textAlign","divider","headerClass","summaryClass","hideDefaultHeader","mobileRowChildren","filterFn","searchTableItems","matchesColumnFilters","headersWithCustomFilters","matchesSearchTerm","headersWithoutCustomFilters","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","colspan","columnSorters","reduce","sanitizedHeaderProps","computedItemsPerPage","firstOption","calcWidths","customFilterWithColumns","customSortWithHeaders","VDataIterator","genCaption","genColgroup","genLoading","genHeaders","genGroupedRows","genRows","genDefaultGroupedRow","isOpen","toggleFn","removeFn","column","RowGroup","genScopedRows","genDefaultRows","rows","genDefaultExpandedRow","headerRow","genDefaultSimpleRow","expandedRow","MobileRow","contextmenu","genBody","body","genFooters","simpleProps","proxySlot","VCombobox","VDataTable","VSpacer","VTextField","WmsSource","WMS","Source","extend","identify","evt","layers","getIdentifyLayers","getFeatureInfo","containerPoint","latlng","showFeatureInfo","createOverlay","untiled","overlayOptions","opt","overlay","_url","tileLayer","point","params","getFeatureInfoParams","url","L","Util","getParamString","done","result","hideWaiting","parseFeatureInfo","call","showWaiting","ajax","info","wmsParams","_overlay","updateWmsParams","_map","join","infoParams","request","query_layers","X","round","Y","info_format","WITH_GEOMETRY","source","iconRetinaUrl","iconUrl","shadowUrl","_refocusOnMap","LMap","LTileLayer","MapToolbar","MapFooter","Error","LeftSidebar","AttributeTable","wms_source","projects","tocs","initializeMap","initializeToc","dispatch","mapObject","loadMap","getOrderedLayerTypenames","forEach","refreshOverlay","_onResize","nodes","layer","symbols","_subLayers","removeSubLayer","getLayer","new_sub_layers","findLayerNodeByTypename","initial_extent","west","south","east","north","jl","fitBounds","tileSize","transparent","format","dpi","devicePixelRatio","onGetFeatureInfo","onGetFeatureInfoStarted","onGetFeatureInfoParamsEnded","onError","that","updateMapScale","llmap","parse","queryable","layerList","_getLayers","scaleDenom","defaultSlot","VApp","VAppBar","VAppBarNavIcon","VMain","VOverlay","VProgressCircular","VToolbarTitle","VToolbar","extendOptions","$","stat","proj4","isXY","list","traverseCoords","coordinates","coord","clone","obj","copy","constructor","attr","traverseGeoJson","geometryCb","nodeCb","geojson","r","self","bind","geometry","features","geometries","detectCrs","projs","crs","crsInfo","properties","code","stringify","determineCrs","Proj","calcBbox","min","MAX_VALUE","_gj","xy","reproject","from","to","transformFunc","forward","coords","transformed","transformGeometryCoords","gj","transformBbox","bbox","toWgs84","WGS84","fixRegExpWellKnownSymbolLogic","anObject","requireObjectCoercible","sameValue","regExpExec","SEARCH","nativeSearch","maybeCallNative","regexp","O","searcher","RegExp","rx","S","previousLastIndex","getOwnPropertyDescriptor","toLength","notARegExp","correctIsRegExpLogic","IS_PURE","nativeEndsWith","endsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","prototype","writable","proto","forced","searchString","endPosition","arguments","len","defs","GOOGLE","PJD_3PARAM","PJD_7PARAM","PJD_WGS84","PJD_NODATUM","SEC_TO_RAD","HALF_PI","PI","SIXTH","RA4","RA6","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","ft","to_meter","ignoredChar","match","testkey","processedKey","lkey","toLowerCase","replace","paramName","paramVal","paramOutname","paramObj","defData","trim","proj","datum","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","alpha","lonc","longc","x_0","x0","y_0","y0","k_0","k0","b","r_a","R_A","zone","utmSouth","towgs84","datum_params","units","unit","from_greenwich","pm","nadgrids","datumCode","axis","legalAxis","substr","NEUTRAL","KEYWORD","NUMBER","QUOTED","AFTERQUOTE","ENDED","whitespace","latin","keyword","endThings","digets","Parser","level","place","stack","currentObject","parseString","txt","parser","output","mapit","isArray","unshift","thing","out","newObj","sExpr","shift","convert","readCharicter","char","test","neutral","quoted","afterquote","number","word","afterItem","pop","newObjects","rename","outName","inName","d2r","cleanWKT","wkt","projName","local","PROJECTION","AXIS","axisOrder","ii","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","ratio","sphere","ellps","TOWGS84","isFinite","renamer","lisp","def","charAt","apply","EPSG","ESRI","IAU2000","global","testObj","testDef","codeWords","testWKT","codes","checkMercator","auth","checkProjStr","ext","testProj","maybeProjStr","property","destination","con","eccent","sinphi","cosphi","sqrt","abs","sign","com","pow","tan","phi","dphi","eccnth","atan","ts","sin","es","cos","msfnz","lon","lat","adjust_lon","tsfnz","inverse","exp","phi2z","names","identity","pt","merc","longlat","projStore","add","n","ellipseName","eccentricity","a2","b2","ep2","ellipse","datum_type","wgs84","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","Projection","srsCode","json","parseCode","ourProj","projections","datumDef","sphere_","ecc","datumObj","compareDatums","dest","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","z","Infinity","geocentricToGeodetic","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","genau","genau2","maxiter","Z","atan2","geocentricToWgs84","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricFromWgs84","x_tmp","y_tmp","z_tmp","checkParams","xin","yin","zin","denorm","array","m","checkCoord","num","TypeError","checkNotWGS","toPoint","checkSanity","adjust_axis","datum_transform","transformer","transformedArray","NaN","splice","checkProj","oProj","fromProj","toProj","single","NUM_100K_SETS","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","I","ll","accuracy","encode","LLtoUTM","mgrs","UTMtoLL","decode","toUpperCase","degToRad","deg","radToDeg","rad","LongOrigin","eccPrimeSquared","N","T","C","A","M","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","LongRad","floor","UTMEasting","UTMNorthing","northing","easting","zoneNumber","zoneLetter","getLetterDesignator","utm","N1","T1","C1","R1","D","mu","phi1Rad","e1","topRight","LetterDesignator","seasting","snorthing","get100kID","setParm","get100kSetForZone","setColumn","setRow","getLetter100kID","row","parm","colOrigin","charCodeAt","rowOrigin","colInt","rowInt","rollover","twoLetter","fromCharCode","mgrsString","testChar","hunK","sb","substring","east100k","getEastingFromChar","north100k","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","curCol","eastingValue","rewindMarker","curRow","northingValue","Point","warn","fromMGRS","mgrsStr","toMGRS","C00","C02","C04","C06","C08","C22","C44","C46","C48","C66","C68","C88","en","cphi","sphi","MAX_ITER","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","acos","pj_inv_mlfn","tan_phi","ds","g","temp","asin","log1py","hypot","cos_2B","B","pp","h1","h2","hr","arg_r","hr1","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","arg_i","cosh_arg_i","cosh","j","hi1","hi","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","tmp","clens_cmplx","dependsOn","adjust_zone","etmerc","esinp","rc","phic0","ratexp","K","srat","DEL_TOL","gauss","sinc0","cosc0","R2","sinc","cosc","cosl","rho","ssfn_","phit","eccen","coslat0","sinlat0","cons","ms1","X0","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","Chi","phy0","lambda0","sinPhy0","semiMajorAxis","invF","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","rotI","rotB","lambda","phy","prevPhy","iteration","no_off","no_rot","bl","fl","gl","t0","dl","t1","t2","hl","pl","dlon12","dlon10","gamma0","uc","us","vs","ql","sl","tl","vl","ul","POSITIVE_INFINITY","qp","sp","tp","vp","up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","ns","f0","rh1","theta","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","u","deltav","eps","ro","czech","fi1","ok","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","asq","cl","dd","ml1","phi1","imlfn","nl1","rl1","tl1","dsq","adjust_lat","S_POLE","N_POLE","EQUIT","OBLIQ","mode","qsfnz","mmf","apa","authset","rq","xmf","ymf","sinb1","cosb1","sinph0","cosph0","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","cosz","sinz","authlat","P00","P01","P02","P10","P11","P20","APA","beta","sin_po","cos_po","qs1","qs2","t3","qs0","ns0","qs","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","ksp","iqsfnz","dlat","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_re1","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_re1","z_n_im1","delta_x","delta_y","z_n_re","z_n_im","iterations","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","V","delta_theta","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","G","H","GH","Hs","kp","cos_c","s2","s3","s4","s5","cosAz","Ee","F","sinpsi","FACE_ENUM","FRONT","RIGHT","BACK","LEFT","TOP","BOTTOM","AREA_ENUM","AREA_0","AREA_1","AREA_2","AREA_3","face","one_minus_f","one_minus_f_squared","area","sinlon","qsc_shift_lon_origin","qsc_fwd_equat_face_theta","nu","cosmu","tannu","tantheta","invert_sign","xa","lp","slon","COEFS_X","COEFS_Y","FXC","FYC","RC1","NODES","poly3_val","coefs","poly3_der","newton_rapshon","f_df","max_err","iters","upd","tmerc","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","poly","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","defaultDatum","version"],"mappings":"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","file":"js/chunk-744799cf.0eb406dc.js","sourcesContent":["// `SameValue` abstract operation\n// https://tc39.github.io/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"id\":\"project\"}},[(_vm.status == \"loading\" && _vm.error.length == 0)?_c('v-overlay',{attrs:{\"light\":\"\"}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"lime\",\"size\":\"64\"}})],1):_vm._e(),(_vm.error.length > 0)?_c('Error',{attrs:{\"error\":_vm.error}}):[_c('v-app-bar',{attrs:{\"app\":\"\",\"dense\":\"\",\"collapse-on-scroll\":\"\",\"clipped-left\":\"\",\"color\":\"green\",\"dark\":\"\"}},[_c('v-app-bar-nav-icon',{on:{\"click\":function($event){$event.stopPropagation();_vm.expandedSidebar = !_vm.expandedSidebar}}}),(_vm.project)?_c('v-toolbar-title',[_vm._v(_vm._s(_vm.project.title))]):_vm._e(),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\",\"title\":\"Home Page\",\"to\":\"/\"}},[_c('v-icon',[_vm._v(\"mdi-home-circle\")])],1)],1),_c('LeftSidebar',{attrs:{\"map\":_vm.map,\"project\":_vm.project,\"drawer\":_vm.expandedSidebar,\"showIdentify\":_vm.showIdentify},on:{\"setLayerVisibility\":_vm.setLayerVisibility}}),_c('v-main',{class:_vm.attributeTableTypename ? \"show-table\" : ''},[_c('v-container',{class:\"fill-height activetool-\" +\n _vm.activeTool +\n (_vm.expandedSidebar ? ' expanded-sidebar' : ''),attrs:{\"id\":\"map\",\"fluid\":\"\"}},[_c('v-layout',[_c('l-map',{directives:[{name:\"resize\",rawName:\"v-resize\",value:(_vm.onResize),expression:\"onResize\"}],ref:\"map\",staticStyle:{\"z-index\":\"0\"},on:{\"ready\":_vm.setMap}},[(\n _vm.project &&\n _vm.project.capabilities.wmsOutputCrsList.includes('EPSG:3857')\n )?_c('l-tile-layer',{attrs:{\"visible\":_vm.baseMap == 'openstreetmap',\"url\":\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\",\"attribution\":\"&copy; <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors\"}}):_vm._e()],1)],1)],1)],1),(_vm.attributeTableTypename)?_c('AttributeTable',{class:_vm.expandedSidebar ? 'mb-4 attributetable-small' : 'mb-4',attrs:{\"project\":_vm.project,\"map\":this.map}}):_vm._e(),_c('MapToolbar',{staticClass:\"map-toolbar\",attrs:{\"map\":_vm.map,\"project\":_vm.project}}),_c('MapFooter')]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-layout',{attrs:{\"column\":\"\"}},[_c('v-btn',{staticClass:\"btn-fix\",attrs:{\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"orange\"},on:{\"click\":function($event){return _vm.map.zoomIn()}}},[_c('v-icon',[_vm._v(\"mdi-plus\")])],1),_c('v-btn',{staticClass:\"btn-fix mt-1\",attrs:{\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"orange\"},on:{\"click\":function($event){return _vm.map.zoomOut()}}},[_c('v-icon',[_vm._v(\"mdi-minus\")])],1),_c('v-btn',{staticClass:\"btn-fix mt-3\",class:{ active: _vm.activeTool == \"identify\"},attrs:{\"depressed\":_vm.activeTool == \"identify\",\"dark\":\"\",\"fab\":\"\",\"small\":\"\",\"color\":\"blue\"},on:{\"click\":function($event){return _vm.onIdentifyToolClicked()}}},[_c('v-icon',[_vm._v(\"mdi-information-outline\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"," /**\n * Map toolbar\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n <template>\n <!--v-toolbar light floating-->\n <v-layout column>\n <v-btn class=\"btn-fix\" dark fab small @click=\"map.zoomIn()\" color=\"orange\">\n <v-icon>mdi-plus</v-icon>\n </v-btn>\n <v-btn class=\"btn-fix mt-1\" dark fab small @click=\"map.zoomOut()\" color=\"orange\">\n <v-icon>mdi-minus</v-icon>\n </v-btn>\n <v-btn\n class=\"btn-fix mt-3\"\n v-bind:class=\"{ active: activeTool == `identify`}\"\n :depressed=\"activeTool == `identify`\"\n dark\n fab\n small\n color=\"blue\"\n @click=\"onIdentifyToolClicked()\"\n >\n <v-icon>mdi-information-outline</v-icon>\n </v-btn>\n <!-- not yet implemented:\n v-btn class=\"btn-fix mt-1\" dark fab small @click=\"map._onResize()\" color=\"blue\">\n <v-icon>mdi-selection-drag</v-icon>\n </v-btn-->\n </v-layout>\n <!--/v-toolbar-->\n</template>\n\n<style lang=\"scss\" scoped>\n</style>\n\n<script>\nexport default {\n name: \"MapToolbar\",\n props: {\n map: Object\n },\n methods: {\n onIdentifyToolClicked() {\n this.$store.state.activeTool =\n this.activeTool == \"identify\" ? \"\" : \"identify\";\n //console.log(this.$store.state.activeTool);\n }\n },\n computed: {\n activeTool() {\n return this.$store.state.activeTool;\n }\n }\n};\n</script>\n\n<style scoped lang=\"scss\">\n:not(.active).btn-fix:focus::before {\n opacity: 0 !important;\n}\n.active::before {\n opacity: 0.24 !important;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=script&lang=js&\"","import './_grid.sass'\n\nimport Grid from './grid'\n\nexport default Grid('layout')\n","import { render, staticRenderFns } from \"./MapToolbar.vue?vue&type=template&id=2fb0ba75&scoped=true&\"\nimport script from \"./MapToolbar.vue?vue&type=script&lang=js&\"\nexport * from \"./MapToolbar.vue?vue&type=script&lang=js&\"\nimport style1 from \"./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2fb0ba75\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VIcon,VLayout})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{attrs:{\"color\":\"lime\",\"app\":\"\"}},[_c('v-layout',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"align\":\"left\"}}),_c('v-col',{attrs:{\"align\":\"right\"}},[_c('span',[_vm._v(\"Scale 1:\"+_vm._s(this.mapScaleDenominator()))])])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Map Footer\n *\n * Author: elpaso@itopen.it\n * Date: 2020-10-28\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n<v-footer color=\"lime\" app>\n <v-layout>\n <v-row no-gutters>\n <v-col align=\"left\">\n <!-- your logo/ad here -->\n </v-col>\n <v-col align=\"right\">\n <span>Scale 1:{{ this.mapScaleDenominator() }}</span>\n </v-col>\n </v-row>\n </v-layout>\n</v-footer>\n</template>\n\n<script>\nexport default {\n name: \"MapFooter\",\n methods: {\n mapScaleDenominator() {\n return Math.round(this.$store.state.mapScaleDenominator).toLocaleString();\n }\n }\n}\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapFooter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapFooter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MapFooter.vue?vue&type=template&id=0ddfe758&\"\nimport script from \"./MapFooter.vue?vue&type=script&lang=js&\"\nexport * from \"./MapFooter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCol,VFooter,VLayout,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"absolute\":\"\",\"hide-overlay\":\"\",\"stateless\":\"\",\"width\":\"300px\"},model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}},[_c('v-tabs',{staticClass:\"mt-12 mb-10\",attrs:{\"grow\":\"\"},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('v-tab',{key:\"0\"},[_vm._v(\"Legend\")]),(_vm.showIdentify)?_c('v-tab',{key:\"1\"},[_vm._v(\"Results\")]):_vm._e(),_c('v-tab-item',{key:\"0\"},[_c('LayerTree',{attrs:{\"project\":_vm.project,\"map\":_vm.map},on:{\"setLayerVisibility\":_vm.setLayerVisibility}})],1),(_vm.showIdentify)?_c('v-tab-item',{key:\"1\"},[_c('IdentifyResults',{attrs:{\"map\":_vm.map}})],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.project)?_c('v-card',{staticClass:\"mx-auto layertree-container\",attrs:{\"flat\":\"\"}},[_c('v-card-text',[_c('div',{staticClass:\"base-map\"},[_c('div',{staticClass:\"v-treeview-node\"},[_c('v-icon',{attrs:{\"color\":\"light-green lighten-3\"}},[_vm._v(\"mdi-checkerboard\")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleBaseMap('openstreetmap')}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.baseMap == \"openstreetmap\" ? \"marked\" : \"blank-outline\"))])],1)]}}],null,false,1060783928)},[_vm._v(\" Toggle base map visibility \")]),_c('span',{staticClass:\"group-title\"},[_vm._v(\"OpenStreetMap\")])],1)]),_vm._l((_vm.project.toc.children),function(element,entry){return _c('div',{key:_vm.uniqueKey(entry),attrs:{\"id\":\"layertree\"}},[_c('LayerTreeNode',{attrs:{\"node\":element},on:{\"toggleLayer\":_vm.toggleLayer,\"toggleGroup\":_vm.toggleGroup}})],1)})],2)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":_vm.node.tree_id_hash}},[(_vm.node.is_layer && _vm.node.layer_type == 'vector')?_c('div',{staticClass:\"v-treeview-node\"},[_c('div',{staticClass:\"node-title\"},[(_vm.node.children.length)?_c('v-icon',{attrs:{\"data-toggle\":\"collapse\",\"aria-expanded\":_vm.node.expanded ? 'true' : 'false',\"aria-controls\":\"'node-' + node.tree_id_hash\"},on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded}}},[_vm._v(\"mdi-menu-\"+_vm._s(_vm.node.expanded ? \"down\" : \"right\"))]):_vm._e(),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleLayer(_vm.node.tree_id_hash)}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.node.visible ? \"marked\" : \"blank-outline\"))])],1)]}}],null,false,242933132)},[_vm._v(\" Toggle layer visibility \")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"group-title\",on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded},\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.showContextMenu($event)}}},on),[_vm._v(_vm._s(_vm.node.title))])]}}],null,false,138915419)},[_c('div',[_vm._v(\" \"+_vm._s(_vm.node.title)+\" \"),_c('i',[_vm._v(\"(\"+_vm._s(_vm.node.typename)+\")\")])]),(_vm.node.description)?_c('div',[_vm._v(_vm._s(_vm.node.description))]):_vm._e()])],1),(_vm.node.layer_type == 'vector' && _vm.node.children.length)?[_c('v-expand-transition',[(_vm.node.expanded)?_c('div',{staticClass:\"vector-legend\",on:{\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return (function () {})($event)}}},_vm._l((_vm.node.children),function(child){return _c('div',{key:child.title + _vm.uuid(),staticClass:\"v-treeview-node layer-legend\",attrs:{\"id\":'node-' + _vm.node.tree_id_hash,\"aria-expanded\":_vm.node.expanded ? 'true' : 'false'}},[(_vm.isVisible(child))?_c('div',{staticClass:\"v-treeview-node vector-legend-entry\"},[(child.icon)?_c('img',{staticClass:\"symbol\",attrs:{\"src\":(\"data:image/png;base64,\" + (child.icon))}}):_c('span',{staticClass:\"symbol\"}),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"vector-legend-entry-label\"},on),[_vm._v(_vm._s(child.title))])]}}],null,true)},[_c('div',[_vm._v(_vm._s(child.title))])])],1):_vm._e()])}),0):_vm._e()])]:_vm._e()],2):_c('div',[(_vm.node.layer_type != 'raster')?_c('v-icon',{on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded}}},[_vm._v(\"mdi-menu-\"+_vm._s(_vm.node.expanded ? \"down\" : \"right\"))]):_c('v-icon',{attrs:{\"color\":\"light-green lighten-3\"}},[_vm._v(\"mdi-checkerboard\")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleGroup(_vm.node.tree_id_hash)}}},on),[_c('v-icon',[_vm._v(\"mdi-checkbox-\"+_vm._s(_vm.node.visible ? \"marked\" : \"blank-outline\"))])],1)]}}])},[_vm._v(\" Toggle group visibility \")]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({staticClass:\"group-title\",on:{\"click\":function($event){_vm.node.expanded = !_vm.node.expanded},\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return (function () {})($event)}}},on),[_vm._v(_vm._s(_vm.node.title))])]}}])},[_c('div',[_vm._v(_vm._s(_vm.node.title))]),(_vm.node.description)?_c('div',[_vm._v(_vm._s(_vm.node.description))]):_vm._e()]),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.node.expanded),expression:\"node.expanded\"}],class:\"group-container group-father-of-\" + _vm.node.children.length,attrs:{\"id\":'node-' + _vm.node.tree_id_hash}},_vm._l((_vm.node.children),function(child_node){return _c('LayerTreeNode',{key:child_node.tree_id_hash,attrs:{\"node\":child_node},on:{\"toggleLayer\":_vm.toggleLayer,\"toggleGroup\":_vm.toggleGroup}})}),1)])],1),_c('v-menu',{attrs:{\"value\":_vm.showMenu,\"close-on-content-click\":true,\"close-on-click\":false,\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"}},[_c('div',{on:{\"mouseleave\":_vm.onMouseLeave}},[_c('v-list',_vm._l((_vm.options),function(item){return _c('v-list-item',{key:item.name,on:{\"click\":function($event){return _vm.onContextMenuOptionClicked(item.name, _vm.node.typename)}}},[_c('v-list-item-icon',[_c('v-icon',{domProps:{\"textContent\":_vm._s(item.icon)}})],1),_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * LayerTreeNode\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n <div :id=\"node.tree_id_hash\">\n <div\n class=\"v-treeview-node\"\n v-if=\"node.is_layer && node.layer_type == 'vector'\"\n >\n <div class=\"node-title\">\n <v-icon\n data-toggle=\"collapse\"\n :aria-expanded=\"node.expanded ? 'true' : 'false'\"\n aria-controls=\"'node-' + node.tree_id_hash\"\n @click=\"node.expanded = !node.expanded\"\n v-if=\"node.children.length\"\n >mdi-menu-{{ node.expanded ? `down` : `right` }}</v-icon\n >\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn v-on=\"on\" icon @click=\"toggleLayer(node.tree_id_hash)\">\n <v-icon\n >mdi-checkbox-{{\n node.visible ? `marked` : `blank-outline`\n }}</v-icon\n >\n </v-btn>\n </template>\n Toggle layer visibility\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <span\n v-on=\"on\"\n class=\"group-title\"\n @click=\"node.expanded = !node.expanded\"\n @contextmenu.prevent.stop=\"showContextMenu($event)\"\n >{{ node.title }}</span\n >\n </template>\n <div>\n {{ node.title }}\n <i>({{ node.typename }})</i>\n </div>\n <div v-if=\"node.description\">{{ node.description }}</div>\n </v-tooltip>\n </div>\n\n <template v-if=\"node.layer_type == 'vector' && node.children.length\">\n <v-expand-transition>\n <div\n class=\"vector-legend\"\n v-if=\"node.expanded\"\n @contextmenu.prevent.stop=\"function () {}\"\n >\n <div\n class=\"v-treeview-node layer-legend\"\n v-for=\"child in node.children\"\n :id=\"'node-' + node.tree_id_hash\"\n :key=\"child.title + uuid()\"\n :aria-expanded=\"node.expanded ? 'true' : 'false'\"\n >\n <div\n v-if=\"isVisible(child)\"\n class=\"v-treeview-node vector-legend-entry\"\n >\n <img\n v-if=\"child.icon\"\n class=\"symbol\"\n :src=\"`data:image/png;base64,${child.icon}`\"\n />\n <span v-else class=\"symbol\" />\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <span class=\"vector-legend-entry-label\" v-on=\"on\">{{\n child.title\n }}</span>\n </template>\n <div>{{ child.title }}</div>\n </v-tooltip>\n </div>\n </div>\n </div>\n </v-expand-transition>\n </template>\n </div>\n <div v-else>\n <!-- it's a group or a raster -->\n <v-icon\n @click=\"node.expanded = !node.expanded\"\n v-if=\"node.layer_type != 'raster'\"\n >mdi-menu-{{ node.expanded ? `down` : `right` }}</v-icon\n >\n <v-icon v-else color=\"light-green lighten-3\">mdi-checkerboard</v-icon>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn v-on=\"on\" icon @click=\"toggleGroup(node.tree_id_hash)\">\n <v-icon\n >mdi-checkbox-{{\n node.visible ? `marked` : `blank-outline`\n }}</v-icon\n >\n </v-btn>\n </template>\n Toggle group visibility\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <span\n v-on=\"on\"\n class=\"group-title\"\n @click=\"node.expanded = !node.expanded\"\n @contextmenu.prevent.stop=\"function () {}\"\n >{{ node.title }}</span\n >\n </template>\n <div>{{ node.title }}</div>\n <div v-if=\"node.description\">{{ node.description }}</div>\n </v-tooltip>\n\n <v-expand-transition>\n <div\n :class=\"`group-container group-father-of-` + node.children.length\"\n :id=\"'node-' + node.tree_id_hash\"\n v-show=\"node.expanded\"\n >\n <LayerTreeNode\n :node=\"child_node\"\n v-on:toggleLayer=\"toggleLayer\"\n v-on:toggleGroup=\"toggleGroup\"\n v-for=\"child_node in node.children\"\n :key=\"child_node.tree_id_hash\"\n />\n </div>\n </v-expand-transition>\n </div>\n\n <!-- Context menu -->\n <v-menu\n :value=\"showMenu\"\n :close-on-content-click=\"true\"\n :close-on-click=\"false\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <div @mouseleave=\"onMouseLeave\">\n <v-list>\n <v-list-item\n v-for=\"item in options\"\n :key=\"item.name\"\n @click=\"onContextMenuOptionClicked(item.name, node.typename)\"\n >\n <v-list-item-icon>\n <v-icon v-text=\"item.icon\"></v-icon>\n </v-list-item-icon>\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </div>\n </v-menu>\n </div>\n</template>\n\n<script>\nconst uuidv4 = require(\"uuid/v4\");\nexport default {\n name: \"LayerTreeNode\",\n props: {\n node: {},\n },\n data() {\n return {\n x: 0,\n y: 0,\n // Trick to make sure menu appears on the first click! (see mounted)\n showMenu: true,\n };\n },\n mounted() {\n // Trick to make sure menu appears on the first click!\n this.showMenu = false;\n },\n methods: {\n uuid() {\n return uuidv4();\n },\n /**\n * Checks for legend item map scale\n */\n isVisible(child) {\n let scaleMaxDenom = child.scaleMaxDenom;\n let scaleMinDenom = child.scaleMinDenom;\n let mapScaleDenominator = this.$store.state.mapScaleDenominator;\n if (scaleMinDenom && mapScaleDenominator < scaleMinDenom) {\n return false;\n }\n if (scaleMaxDenom && mapScaleDenominator > scaleMaxDenom) {\n return false;\n }\n return true;\n },\n toggleLayer(tree_id_hash) {\n this.$emit(\"toggleLayer\", tree_id_hash);\n },\n toggleGroup(tree_id_hash) {\n this.$emit(\"toggleGroup\", tree_id_hash);\n },\n onContextMenuOptionClicked(name, typename) {\n //console.log(\"onContextMenuOptionClicked\", name, typename);\n if (name == \"attributes\") {\n this.$store.commit(\"setAttributeTableLayerTypename\", typename);\n } else {\n console.log(\"Menu item:\", name, typename);\n }\n },\n showContextMenu(e) {\n e.preventDefault();\n this.showMenu = false;\n this.x = e.clientX;\n this.y = e.clientY;\n this.$nextTick(() => {\n this.showMenu = true;\n });\n },\n onMouseLeave() {\n this.showMenu = false;\n },\n },\n computed: {\n options() {\n let options = [];\n if (this.node[\"wfs_enabled\"]) {\n options.push({\n title: \"Attribute Table\",\n name: \"attributes\",\n icon: \"mdi-table-large\",\n });\n }\n /* Not in scope for first release\n options.push({\n title: \"Download\",\n name: \"download\",\n icon: \"mdi-download\"\n });\n */\n return options;\n },\n },\n};\n</script>\n\n<style scoped>\n@import \"https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css\";\n\n.group-title {\n cursor: pointer;\n overflow: hidden;\n}\n\n.group-container {\n margin-left: 2em;\n}\n\n.group-title,\n.node-title,\n.vector-legend-entry {\n white-space: nowrap;\n}\n.vector-legend-entry span {\n margin-left: 10px;\n}\n.vector-legend-entry img.symbol {\n vertical-align: middle;\n height: 16px;\n width: 16px;\n}\n.vector-legend-entry span.symbol {\n vertical-align: middle;\n display: inline-block;\n height: 16px;\n width: 16px;\n margin-left: 0;\n}\n\n.vector-legend {\n margin-left: 1.3em;\n}\n.vector-legend-entry-label {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.layer-legend {\n margin-left: 16px;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=script&lang=js&\"","// Mixins\nimport Positionable from '../positionable'\nimport Stackable from '../stackable'\nimport Activatable from '../activatable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nconst baseMixins = mixins(\n Stackable,\n Positionable,\n Activatable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n attach: boolean | string | Element\n offsetY: boolean\n offsetX: boolean\n $refs: {\n content: HTMLElement\n activator: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n name: 'menuable',\n\n props: {\n allowOverflow: Boolean,\n light: Boolean,\n dark: Boolean,\n maxWidth: {\n type: [Number, String],\n default: 'auto',\n },\n minWidth: [Number, String],\n nudgeBottom: {\n type: [Number, String],\n default: 0,\n },\n nudgeLeft: {\n type: [Number, String],\n default: 0,\n },\n nudgeRight: {\n type: [Number, String],\n default: 0,\n },\n nudgeTop: {\n type: [Number, String],\n default: 0,\n },\n nudgeWidth: {\n type: [Number, String],\n default: 0,\n },\n offsetOverflow: Boolean,\n openOnClick: Boolean,\n positionX: {\n type: Number,\n default: null,\n },\n positionY: {\n type: Number,\n default: null,\n },\n zIndex: {\n type: [Number, String],\n default: null,\n },\n },\n\n data: () => ({\n absoluteX: 0,\n absoluteY: 0,\n activatedBy: null as EventTarget | null,\n activatorFixed: false,\n dimensions: {\n activator: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n offsetLeft: 0,\n },\n content: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n },\n },\n hasJustFocused: false,\n hasWindow: false,\n inputActivator: false,\n isContentActive: false,\n pageWidth: 0,\n pageYOffset: 0,\n stackClass: 'v-menu__content--active',\n stackMinZIndex: 6,\n }),\n\n computed: {\n computedLeft () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n const activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0\n const minWidth = Math.max(a.width, c.width)\n let left = 0\n left += this.left ? activatorLeft - (minWidth - a.width) : activatorLeft\n if (this.offsetX) {\n const maxWidth = isNaN(Number(this.maxWidth))\n ? a.width\n : Math.min(a.width, Number(this.maxWidth))\n\n left += this.left ? -maxWidth : a.width\n }\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return left\n },\n computedTop () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n let top = 0\n\n if (this.top) top += a.height - c.height\n if (this.attach !== false) top += a.offsetTop\n else top += a.top + this.pageYOffset\n if (this.offsetY) top += this.top ? -a.height : a.height\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n return top\n },\n hasActivator (): boolean {\n return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator\n },\n },\n\n watch: {\n disabled (val) {\n val && this.callDeactivate()\n },\n isActive (val) {\n if (this.disabled) return\n\n val ? this.callActivate() : this.callDeactivate()\n },\n positionX: 'updateDimensions',\n positionY: 'updateDimensions',\n },\n\n beforeMount () {\n this.hasWindow = typeof window !== 'undefined'\n },\n\n methods: {\n absolutePosition () {\n return {\n offsetTop: 0,\n offsetLeft: 0,\n scrollHeight: 0,\n top: this.positionY || this.absoluteY,\n bottom: this.positionY || this.absoluteY,\n left: this.positionX || this.absoluteX,\n right: this.positionX || this.absoluteX,\n height: 0,\n width: 0,\n }\n },\n activate () {},\n calcLeft (menuWidth: number) {\n return convertToUnit(this.attach !== false\n ? this.computedLeft\n : this.calcXOverflow(this.computedLeft, menuWidth))\n },\n calcTop () {\n return convertToUnit(this.attach !== false\n ? this.computedTop\n : this.calcYOverflow(this.computedTop))\n },\n calcXOverflow (left: number, menuWidth: number) {\n const xOverflow = left + menuWidth - this.pageWidth + 12\n\n if ((!this.left || this.right) && xOverflow > 0) {\n left = Math.max(left - xOverflow, 0)\n } else {\n left = Math.max(left, 12)\n }\n\n return left + this.getOffsetLeft()\n },\n calcYOverflow (top: number) {\n const documentHeight = this.getInnerHeight()\n const toTop = this.pageYOffset + documentHeight\n const activator = this.dimensions.activator\n const contentHeight = this.dimensions.content.height\n const totalHeight = top + contentHeight\n const isOverflowing = toTop < totalHeight\n\n // If overflowing bottom and offset\n // TODO: set 'bottom' position instead of 'top'\n if (isOverflowing &&\n this.offsetOverflow &&\n // If we don't have enough room to offset\n // the overflow, don't offset\n activator.top > contentHeight\n ) {\n top = this.pageYOffset + (activator.top - contentHeight)\n // If overflowing bottom\n } else if (isOverflowing && !this.allowOverflow) {\n top = toTop - contentHeight - 12\n // If overflowing top\n } else if (top < this.pageYOffset && !this.allowOverflow) {\n top = this.pageYOffset + 12\n }\n\n return top < 12 ? 12 : top\n },\n callActivate () {\n if (!this.hasWindow) return\n\n this.activate()\n },\n callDeactivate () {\n this.isContentActive = false\n\n this.deactivate()\n },\n checkForPageYOffset () {\n if (this.hasWindow) {\n this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop()\n }\n },\n checkActivatorFixed () {\n if (this.attach !== false) return\n let el = this.getActivator()\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n this.activatorFixed = true\n return\n }\n el = el.offsetParent as HTMLElement\n }\n this.activatorFixed = false\n },\n deactivate () {},\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n const onClick = listeners.click\n\n listeners.click = (e: MouseEvent & KeyboardEvent & FocusEvent) => {\n if (this.openOnClick) {\n onClick && onClick(e)\n }\n\n this.absoluteX = e.clientX\n this.absoluteY = e.clientY\n }\n\n return listeners\n },\n getInnerHeight () {\n if (!this.hasWindow) return 0\n\n return window.innerHeight ||\n document.documentElement.clientHeight\n },\n getOffsetLeft () {\n if (!this.hasWindow) return 0\n\n return window.pageXOffset ||\n document.documentElement.scrollLeft\n },\n getOffsetTop () {\n if (!this.hasWindow) return 0\n\n return window.pageYOffset ||\n document.documentElement.scrollTop\n },\n getRoundedBoundedClientRect (el: Element) {\n const rect = el.getBoundingClientRect()\n return {\n top: Math.round(rect.top),\n left: Math.round(rect.left),\n bottom: Math.round(rect.bottom),\n right: Math.round(rect.right),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n }\n },\n measure (el: HTMLElement) {\n if (!el || !this.hasWindow) return null\n\n const rect = this.getRoundedBoundedClientRect(el)\n\n // Account for activator margin\n if (this.attach !== false) {\n const style = window.getComputedStyle(el)\n\n rect.left = parseInt(style.marginLeft!)\n rect.top = parseInt(style.marginTop!)\n }\n\n return rect\n },\n sneakPeek (cb: () => void) {\n requestAnimationFrame(() => {\n const el = this.$refs.content\n\n if (!el || el.style.display !== 'none') {\n cb()\n return\n }\n\n el.style.display = 'inline-block'\n cb()\n el.style.display = 'none'\n })\n },\n startTransition () {\n return new Promise<void>(resolve => requestAnimationFrame(() => {\n this.isContentActive = this.hasJustFocused = this.isActive\n resolve()\n }))\n },\n updateDimensions () {\n this.hasWindow = typeof window !== 'undefined'\n this.checkActivatorFixed()\n this.checkForPageYOffset()\n this.pageWidth = document.documentElement.clientWidth\n\n const dimensions: any = {\n activator: { ...this.dimensions.activator },\n content: { ...this.dimensions.content },\n }\n\n // Activator should already be shown\n if (!this.hasActivator || this.absolute) {\n dimensions.activator = this.absolutePosition()\n } else {\n const activator = this.getActivator()\n if (!activator) return\n\n dimensions.activator = this.measure(activator)\n dimensions.activator.offsetLeft = activator.offsetLeft\n if (this.attach !== false) {\n // account for css padding causing things to not line up\n // this is mostly for v-autocomplete, hopefully it won't break anything\n dimensions.activator.offsetTop = activator.offsetTop\n } else {\n dimensions.activator.offsetTop = 0\n }\n }\n\n // Display and hide to get dimensions\n this.sneakPeek(() => {\n this.$refs.content && (dimensions.content = this.measure(this.$refs.content))\n\n this.dimensions = dimensions\n })\n },\n },\n})\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VThemeProvider } from '../VThemeProvider'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Returnable from '../../mixins/returnable'\nimport Roundable from '../../mixins/roundable'\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { removed } from '../../util/console'\nimport {\n convertToUnit,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeDirective, VNodeData } from 'vue'\n\nconst baseMixins = mixins(\n Dependent,\n Delayable,\n Detachable,\n Menuable,\n Returnable,\n Roundable,\n Toggleable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-menu',\n\n provide (): object {\n return {\n isInMenu: true,\n // Pass theme through to default slot\n theme: this.theme,\n }\n },\n\n directives: {\n ClickOutside,\n Resize,\n },\n\n props: {\n auto: Boolean,\n closeOnClick: {\n type: Boolean,\n default: true,\n },\n closeOnContentClick: {\n type: Boolean,\n default: true,\n },\n disabled: Boolean,\n disableKeys: Boolean,\n maxHeight: {\n type: [Number, String],\n default: 'auto',\n },\n offsetX: Boolean,\n offsetY: Boolean,\n openOnClick: {\n type: Boolean,\n default: true,\n },\n openOnHover: Boolean,\n origin: {\n type: String,\n default: 'top left',\n },\n transition: {\n type: [Boolean, String],\n default: 'v-menu-transition',\n },\n },\n\n data () {\n return {\n calculatedTopAuto: 0,\n defaultOffset: 8,\n hasJustFocused: false,\n listIndex: -1,\n resizeTimeout: 0,\n selectedIndex: null as null | number,\n tiles: [] as HTMLElement[],\n }\n },\n\n computed: {\n activeTile (): HTMLElement | undefined {\n return this.tiles[this.listIndex]\n },\n calculatedLeft (): string {\n const menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth))\n\n if (!this.auto) return this.calcLeft(menuWidth) || '0'\n\n return convertToUnit(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) || '0'\n },\n calculatedMaxHeight (): string {\n const height = this.auto\n ? '200px'\n : convertToUnit(this.maxHeight)\n\n return height || '0'\n },\n calculatedMaxWidth (): string {\n return convertToUnit(this.maxWidth) || '0'\n },\n calculatedMinWidth (): string {\n if (this.minWidth) {\n return convertToUnit(this.minWidth) || '0'\n }\n\n const minWidth = Math.min(\n this.dimensions.activator.width +\n Number(this.nudgeWidth) +\n (this.auto ? 16 : 0),\n Math.max(this.pageWidth - 24, 0)\n )\n\n const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth))\n ? minWidth\n : parseInt(this.calculatedMaxWidth)\n\n return convertToUnit(Math.min(\n calculatedMaxWidth,\n minWidth\n )) || '0'\n },\n calculatedTop (): string {\n const top = !this.auto\n ? this.calcTop()\n : convertToUnit(this.calcYOverflow(this.calculatedTopAuto))\n\n return top || '0'\n },\n hasClickableTiles (): boolean {\n return Boolean(this.tiles.find(tile => tile.tabIndex > -1))\n },\n styles (): object {\n return {\n maxHeight: this.calculatedMaxHeight,\n minWidth: this.calculatedMinWidth,\n maxWidth: this.calculatedMaxWidth,\n top: this.calculatedTop,\n left: this.calculatedLeft,\n transformOrigin: this.origin,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n watch: {\n isActive (val) {\n if (!val) this.listIndex = -1\n },\n isContentActive (val) {\n this.hasJustFocused = val\n },\n listIndex (next, prev) {\n if (next in this.tiles) {\n const tile = this.tiles[next]\n tile.classList.add('v-list-item--highlighted')\n this.$refs.content.scrollTop = tile.offsetTop - tile.clientHeight\n }\n\n prev in this.tiles &&\n this.tiles[prev].classList.remove('v-list-item--highlighted')\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('full-width')) {\n removed('full-width', this)\n }\n },\n\n mounted () {\n this.isActive && this.callActivate()\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(() => {\n // Once transitioning, calculate scroll and top position\n this.startTransition().then(() => {\n if (this.$refs.content) {\n this.calculatedTopAuto = this.calcTopAuto()\n this.auto && (this.$refs.content.scrollTop = this.calcScrollPosition())\n }\n })\n })\n },\n calcScrollPosition () {\n const $el = this.$refs.content\n const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement\n const maxScrollTop = $el.scrollHeight - $el.offsetHeight\n\n return activeTile\n ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2))\n : $el.scrollTop\n },\n calcLeftAuto () {\n return parseInt(this.dimensions.activator.left - this.defaultOffset * 2)\n },\n calcTopAuto () {\n const $el = this.$refs.content\n const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement | null\n\n if (!activeTile) {\n this.selectedIndex = null\n }\n\n if (this.offsetY || !activeTile) {\n return this.computedTop\n }\n\n this.selectedIndex = Array.from(this.tiles).indexOf(activeTile)\n\n const tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition()\n const firstTileOffsetTop = ($el.querySelector('.v-list-item') as HTMLElement).offsetTop\n\n return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop - 1\n },\n changeListIndex (e: KeyboardEvent) {\n // For infinite scroll and autocomplete, re-evaluate children\n this.getTiles()\n\n if (!this.isActive || !this.hasClickableTiles) {\n return\n } else if (e.keyCode === keyCodes.tab) {\n this.isActive = false\n return\n } else if (e.keyCode === keyCodes.down) {\n this.nextTile()\n } else if (e.keyCode === keyCodes.up) {\n this.prevTile()\n } else if (e.keyCode === keyCodes.enter && this.listIndex !== -1) {\n this.tiles[this.listIndex].click()\n } else { return }\n // One of the conditions was met, prevent default action (#2988)\n e.preventDefault()\n },\n closeConditional (e: Event) {\n const target = e.target as HTMLElement\n\n return this.isActive &&\n !this._isDestroyed &&\n this.closeOnClick &&\n !this.$refs.content.contains(target)\n },\n genActivatorAttributes () {\n const attributes = Activatable.options.methods.genActivatorAttributes.call(this)\n\n if (this.activeTile && this.activeTile.id) {\n return {\n ...attributes,\n 'aria-activedescendant': this.activeTile.id,\n }\n }\n\n return attributes\n },\n genActivatorListeners () {\n const listeners = Menuable.options.methods.genActivatorListeners.call(this)\n\n if (!this.disableKeys) {\n listeners.keydown = this.onKeyDown\n }\n\n return listeners\n },\n genTransition (): VNode {\n const content = this.genContent()\n\n if (!this.transition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n },\n }, [content])\n },\n genDirectives (): VNodeDirective[] {\n const directives: VNodeDirective[] = [{\n name: 'show',\n value: this.isContentActive,\n }]\n\n // Do not add click outside for hover menu\n if (!this.openOnHover && this.closeOnClick) {\n directives.push({\n name: 'click-outside',\n value: {\n handler: () => { this.isActive = false },\n closeConditional: this.closeConditional,\n include: () => [this.$el, ...this.getOpenDependentElements()],\n },\n })\n }\n\n return directives\n },\n genContent (): VNode {\n const options = {\n attrs: {\n ...this.getScopeIdAttrs(),\n role: 'role' in this.$attrs ? this.$attrs.role : 'menu',\n },\n staticClass: 'v-menu__content',\n class: {\n ...this.rootThemeClasses,\n ...this.roundedClasses,\n 'v-menu__content--auto': this.auto,\n 'v-menu__content--fixed': this.activatorFixed,\n menuable__content__active: this.isActive,\n [this.contentClass.trim()]: true,\n },\n style: this.styles,\n directives: this.genDirectives(),\n ref: 'content',\n on: {\n click: (e: Event) => {\n const target = e.target as HTMLElement\n\n if (target.getAttribute('disabled')) return\n if (this.closeOnContentClick) this.isActive = false\n },\n keydown: this.onKeyDown,\n },\n } as VNodeData\n\n if (this.$listeners.scroll) {\n options.on = options.on || {}\n options.on.scroll = this.$listeners.scroll\n }\n\n if (!this.disabled && this.openOnHover) {\n options.on = options.on || {}\n options.on.mouseenter = this.mouseEnterHandler\n }\n\n if (this.openOnHover) {\n options.on = options.on || {}\n options.on.mouseleave = this.mouseLeaveHandler\n }\n\n return this.$createElement('div', options, this.getContentSlot())\n },\n getTiles () {\n if (!this.$refs.content) return\n\n this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item'))\n },\n mouseEnterHandler () {\n this.runDelay('open', () => {\n if (this.hasJustFocused) return\n\n this.hasJustFocused = true\n this.isActive = true\n })\n },\n mouseLeaveHandler (e: MouseEvent) {\n // Prevent accidental re-activation\n this.runDelay('close', () => {\n if (this.$refs.content.contains(e.relatedTarget as HTMLElement)) return\n\n requestAnimationFrame(() => {\n this.isActive = false\n this.callDeactivate()\n })\n })\n },\n nextTile () {\n const tile = this.tiles[this.listIndex + 1]\n\n if (!tile) {\n if (!this.tiles.length) return\n\n this.listIndex = -1\n this.nextTile()\n\n return\n }\n\n this.listIndex++\n if (tile.tabIndex === -1) this.nextTile()\n },\n prevTile () {\n const tile = this.tiles[this.listIndex - 1]\n\n if (!tile) {\n if (!this.tiles.length) return\n\n this.listIndex = this.tiles.length\n this.prevTile()\n\n return\n }\n\n this.listIndex--\n if (tile.tabIndex === -1) this.prevTile()\n },\n onKeyDown (e: KeyboardEvent) {\n if (e.keyCode === keyCodes.esc) {\n // Wait for dependent elements to close first\n setTimeout(() => { this.isActive = false })\n const activator = this.getActivator()\n this.$nextTick(() => activator && activator.focus())\n } else if (\n !this.isActive &&\n [keyCodes.up, keyCodes.down].includes(e.keyCode)\n ) {\n this.isActive = true\n }\n\n // Allow for isActive watcher to generate tile list\n this.$nextTick(() => this.changeListIndex(e))\n },\n onResize () {\n if (!this.isActive) return\n\n // Account for screen resize\n // and orientation change\n // eslint-disable-next-line no-unused-expressions\n this.$refs.content.offsetWidth\n this.updateDimensions()\n\n // When resizing to a smaller width\n // content width is evaluated before\n // the new activator width has been\n // set, causing it to not size properly\n // hacky but will revisit in the future\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.updateDimensions, 100)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-menu',\n class: {\n 'v-menu--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n },\n directives: [{\n arg: '500',\n name: 'resize',\n value: this.onResize,\n }],\n }\n\n return h('div', data, [\n !this.activator && this.genActivator(),\n this.showLazyContent(() => [\n this.$createElement(VThemeProvider, {\n props: {\n root: true,\n light: this.light,\n dark: this.dark,\n },\n }, [this.genTransition()]),\n ]),\n ])\n },\n})\n","import './VTooltip.sass'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Colorable from '../../mixins/colorable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Helpers\nimport { convertToUnit, keyCodes, getSlotType } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Delayable, Dependent, Detachable, Menuable, Toggleable).extend({\n name: 'v-tooltip',\n\n props: {\n closeDelay: {\n type: [Number, String],\n default: 0,\n },\n disabled: Boolean,\n fixed: {\n type: Boolean,\n default: true,\n },\n openDelay: {\n type: [Number, String],\n default: 0,\n },\n openOnHover: {\n type: Boolean,\n default: true,\n },\n tag: {\n type: String,\n default: 'span',\n },\n transition: String,\n },\n\n data: () => ({\n calculatedMinWidth: 0,\n closeDependents: false,\n }),\n\n computed: {\n calculatedLeft (): string {\n const { activator, content } = this.dimensions\n const unknown = !this.bottom && !this.left && !this.top && !this.right\n const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left\n let left = 0\n\n if (this.top || this.bottom || unknown) {\n left = (\n activatorLeft +\n (activator.width / 2) -\n (content.width / 2)\n )\n } else if (this.left || this.right) {\n left = (\n activatorLeft +\n (this.right ? activator.width : -content.width) +\n (this.right ? 10 : -10)\n )\n }\n\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return `${this.calcXOverflow(left, this.dimensions.content.width)}px`\n },\n calculatedTop (): string {\n const { activator, content } = this.dimensions\n const activatorTop = this.attach !== false ? activator.offsetTop : activator.top\n let top = 0\n\n if (this.top || this.bottom) {\n top = (\n activatorTop +\n (this.bottom ? activator.height : -content.height) +\n (this.bottom ? 10 : -10)\n )\n } else if (this.left || this.right) {\n top = (\n activatorTop +\n (activator.height / 2) -\n (content.height / 2)\n )\n }\n\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n return `${this.calcYOverflow(top + this.pageYOffset)}px`\n },\n classes (): object {\n return {\n 'v-tooltip--top': this.top,\n 'v-tooltip--right': this.right,\n 'v-tooltip--bottom': this.bottom,\n 'v-tooltip--left': this.left,\n 'v-tooltip--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n }\n },\n computedTransition (): string {\n if (this.transition) return this.transition\n\n return this.isActive ? 'scale-transition' : 'fade-transition'\n },\n offsetY (): boolean {\n return this.top || this.bottom\n },\n offsetX (): boolean {\n return this.left || this.right\n },\n styles (): object {\n return {\n left: this.calculatedLeft,\n maxWidth: convertToUnit(this.maxWidth),\n minWidth: convertToUnit(this.minWidth),\n opacity: this.isActive ? 0.9 : 0,\n top: this.calculatedTop,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n beforeMount () {\n this.$nextTick(() => {\n this.value && this.callActivate()\n })\n },\n\n mounted () {\n if (getSlotType(this, 'activator', true) === 'v-slot') {\n consoleError(`v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'`, this)\n }\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(this.startTransition)\n },\n deactivate () {\n this.runDelay('close')\n },\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n listeners.focus = (e: Event) => {\n this.getActivator(e)\n this.runDelay('open')\n }\n listeners.blur = (e: Event) => {\n this.getActivator(e)\n this.runDelay('close')\n }\n listeners.keydown = (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.esc) {\n this.getActivator(e)\n this.runDelay('close')\n }\n }\n\n return listeners\n },\n genTransition () {\n const content = this.genContent()\n\n if (!this.computedTransition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [content])\n },\n genContent () {\n return this.$createElement(\n 'div',\n this.setBackgroundColor(this.color, {\n staticClass: 'v-tooltip__content',\n class: {\n [this.contentClass]: true,\n menuable__content__active: this.isActive,\n 'v-tooltip__content--fixed': this.activatorFixed,\n },\n style: this.styles,\n attrs: this.getScopeIdAttrs(),\n directives: [{\n name: 'show',\n value: this.isContentActive,\n }],\n ref: 'content',\n }),\n this.getContentSlot()\n )\n },\n },\n\n render (h): VNode {\n return h(this.tag, {\n staticClass: 'v-tooltip',\n class: this.classes,\n }, [\n this.showLazyContent(() => [this.genTransition()]),\n this.genActivator(),\n ])\n },\n})\n","import { render, staticRenderFns } from \"./LayerTreeNode.vue?vue&type=template&id=356b38a4&scoped=true&\"\nimport script from \"./LayerTreeNode.vue?vue&type=script&lang=js&\"\nexport * from \"./LayerTreeNode.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LayerTreeNode.vue?vue&type=style&index=0&id=356b38a4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"356b38a4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VExpandTransition } from 'vuetify/lib/components/transitions';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VExpandTransition,VIcon,VList,VListItem,VListItemIcon,VListItemTitle,VMenu,VTooltip})\n","/**\n * Layer tree\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n <v-card flat class=\"mx-auto layertree-container\" v-if=\"project\">\n <v-card-text>\n <!-- OSM base map -->\n <div class=\"base-map\">\n <div class=\"v-treeview-node\">\n <v-icon color=\"light-green lighten-3\">mdi-checkerboard</v-icon>\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn v-on=\"on\" icon @click=\"toggleBaseMap('openstreetmap')\">\n <v-icon\n >mdi-checkbox-{{\n baseMap == \"openstreetmap\" ? `marked` : `blank-outline`\n }}</v-icon\n >\n </v-btn>\n </template>\n Toggle base map visibility\n </v-tooltip>\n <span class=\"group-title\">OpenStreetMap</span>\n </div>\n </div>\n <!-- TOC tree -->\n <div\n id=\"layertree\"\n v-for=\"(element, entry) in project.toc.children\"\n :key=\"uniqueKey(entry)\"\n >\n <LayerTreeNode\n :node=\"element\"\n v-on:toggleLayer=\"toggleLayer\"\n v-on:toggleGroup=\"toggleGroup\"\n />\n </div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport LayerTreeNode from \"@/components/LayerTreeNode.vue\";\nconst uuidv4 = require(\"uuid/v4\");\nexport default {\n name: \"LayerTree\",\n props: {\n projectId: String,\n project: {},\n drawer: null,\n map: null,\n },\n components: {\n LayerTreeNode,\n },\n data: function () {\n return {\n uniqueKey: function () {\n return uuidv4();\n },\n };\n },\n computed: {\n baseMap() {\n return this.$store.state.baseMap;\n },\n },\n methods: {\n /**\n * Find a layer node from typename and children\n */\n findLayerNode(typename, children) {\n if (children) {\n for (let i = 0; i < children.length; ++i) {\n if (children[i].typename == typename) {\n return children[i];\n }\n let res = this.findLayerNode(typename, children[i].children);\n if (res) {\n return res;\n }\n }\n }\n },\n /**\n * Find a node from tree id hash and children\n */\n findNodeByHash(tree_id_hash, children) {\n if (children) {\n for (let i = 0; i < children.length; ++i) {\n if (children[i].tree_id_hash == tree_id_hash) {\n return children[i];\n }\n let res = this.findNodeByHash(tree_id_hash, children[i].children);\n if (res) {\n return res;\n }\n }\n }\n },\n /**\n * Toggle a single layer by tree id hash\n */\n toggleLayer(tree_id_hash) {\n let node = this.findNodeByHash(tree_id_hash, this.project.toc.children);\n if (node) {\n node.visible = !node.visible;\n this.$emit(\"setLayerVisibility\", node.typename, node.visible);\n }\n },\n /**\n * Toggle a single basemap by name\n */\n toggleBaseMap(basemap) {\n if (this.baseMap == basemap) {\n basemap = \"\";\n }\n this.$store.commit(\"setBaseMap\", basemap);\n },\n /**\n * Toggle a group by tree id hash\n */\n toggleGroup(tree_id_hash) {\n let node = this.findNodeByHash(tree_id_hash, this.project.toc.children);\n if (node) {\n this.setGroupNodeVisibility(node, !node.visible);\n }\n },\n /**\n * Recursively set a group node visibility\n */\n setGroupNodeVisibility(groupNode, visible) {\n groupNode.visible = visible;\n // Emit if it's a layer\n if (groupNode.is_layer) {\n this.$emit(\"setLayerVisibility\", groupNode.typename, visible);\n }\n if (groupNode.children) {\n for (let i = 0; i < groupNode.children.length; ++i) {\n this.setGroupNodeVisibility(groupNode.children[i], visible);\n }\n }\n },\n },\n};\n</script>\n\n<style>\n.leaflet-top.layertree-toggle-container {\n top: 8.5rem;\n}\n\n#layertree-toggle {\n cursor: pointer;\n}\n\nul.layer-group {\n padding-left: 1em;\n}\n\n.b-sidebar-body > div > ul.layer-group {\n padding-left: 0;\n}\n\n.v-navigation-drawer {\n z-index: 5000;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayerTree.vue?vue&type=template&id=381fae00&\"\nimport script from \"./LayerTree.vue?vue&type=script&lang=js&\"\nexport * from \"./LayerTree.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LayerTree.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { 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 { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"mx-auto\"},[[(_vm.identifyResults.features)?_c('v-row',[_c('v-col',{staticClass:\"col-auto\"},_vm._l((_vm.identifyResults.features),function(feature){return _c('v-card',{key:feature.id,staticClass:\"mx-auto mb-4\"},[_c('v-card-title',[_c('v-row',[_c('v-col',[_vm._v(_vm._s(feature.id))]),(feature.geometry)?_c('v-col',{staticClass:\"col-auto\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.zoomToFeature(feature)}}},on),[_c('v-icon',[_vm._v(\"mdi-magnify-plus\")])],1)]}}],null,true)},[_vm._v(\" Zoom to feature \")])],1):_vm._e()],1)],1),_c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',_vm._l((feature.properties),function(value,name){return _c('tr',{key:name},[_c('th',[_vm._v(_vm._s(name))]),_c('td',[_vm._v(_vm._s(value))])])}),0)]},proxy:true}],null,true)})],1)}),1)],1):_c('v-row',[_c('v-progress-linear',{attrs:{\"indeterminate\":\"\",\"query\":\"\"}})],1)]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Identify\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n <v-container class=\"mx-auto\">\n <template>\n <v-row v-if=\"identifyResults.features\">\n <v-col class=\"col-auto\">\n <v-card\n class=\"mx-auto mb-4\"\n v-for=\"feature in identifyResults.features\"\n :key=\"feature.id\"\n >\n <v-card-title>\n <v-row>\n <v-col>{{ feature.id }}</v-col>\n <v-col class=\"col-auto\" v-if=\"feature.geometry\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-btn v-on=\"on\" icon @click=\"zoomToFeature(feature)\">\n <v-icon>mdi-magnify-plus</v-icon>\n </v-btn>\n </template>\n Zoom to feature\n </v-tooltip>\n </v-col>\n </v-row>\n </v-card-title>\n <v-simple-table dense>\n <template v-slot:default>\n <tbody>\n <tr v-for=\"(value, name) in feature.properties\" :key=\"name\">\n <th>{{ name }}</th>\n <td>{{ value }}</td>\n </tr>\n </tbody>\n </template>\n </v-simple-table>\n </v-card>\n </v-col>\n </v-row>\n <v-row v-else>\n <v-progress-linear indeterminate query></v-progress-linear>\n </v-row>\n </template>\n </v-container>\n</template>\n\n<script>\nimport reproject from \"reproject\";\nexport default {\n name: \"IdentifyResults\",\n props: {\n drawer: null,\n map: null\n },\n computed: {\n identifyResults() {\n //console.log(\"Computed\", this.$store.state.identifyResults.features);\n return this.$store.state.identifyResults;\n }\n },\n methods: {\n zoomToFeature(feature) {\n this.map.highlightLayer.clearLayers();\n this.map.highlightLayer.addData(\n reproject.toWgs84(feature, this.map.options.crs.code)\n );\n this.map.setView(this.map.highlightLayer.getBounds().getCenter());\n }\n }\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentifyResults.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IdentifyResults.vue?vue&type=script&lang=js&\"","import './VSimpleTable.sass'\n\nimport { convertToUnit } from '../../util/helpers'\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\nexport default mixins(Themeable).extend({\n name: 'v-simple-table',\n\n props: {\n dense: Boolean,\n fixedHeader: Boolean,\n height: [Number, String],\n },\n\n computed: {\n classes (): Record<string, boolean> {\n return {\n 'v-data-table--dense': this.dense,\n 'v-data-table--fixed-height': !!this.height && !this.fixedHeader,\n 'v-data-table--fixed-header': this.fixedHeader,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genWrapper () {\n return this.$slots.wrapper || this.$createElement('div', {\n staticClass: 'v-data-table__wrapper',\n style: {\n height: convertToUnit(this.height),\n },\n }, [\n this.$createElement('table', this.$slots.default),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-data-table',\n class: this.classes,\n }, [\n this.$slots.top,\n this.genWrapper(),\n this.$slots.bottom,\n ])\n },\n})\n","import { render, staticRenderFns } from \"./IdentifyResults.vue?vue&type=template&id=c2647a2a&\"\nimport script from \"./IdentifyResults.vue?vue&type=script&lang=js&\"\nexport * from \"./IdentifyResults.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VCol,VContainer,VIcon,VProgressLinear,VRow,VSimpleTable,VTooltip})\n","/**\n * Left sidebar\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n <v-navigation-drawer absolute hide-overlay stateless width=\"300px\" v-model=\"drawer\">\n <v-tabs class=\"mt-12 mb-10\" grow v-model=\"activeTab\">\n <v-tab key=\"0\">Legend</v-tab>\n <v-tab key=\"1\" v-if=\"showIdentify\">Results</v-tab>\n\n <v-tab-item key=\"0\">\n <LayerTree :project=\"project\" v-on:setLayerVisibility=\"setLayerVisibility\" :map=\"map\" />\n </v-tab-item>\n\n <v-tab-item key=\"1\" v-if=\"showIdentify\">\n <IdentifyResults :map=\"map\" />\n </v-tab-item>\n </v-tabs>\n </v-navigation-drawer>\n</template>\n\n\n<script>\nimport LayerTree from \"@/components/LayerTree.vue\";\nimport IdentifyResults from \"@/components/IdentifyResults.vue\";\n\nexport default {\n name: \"LeftSidebar\",\n components: {\n LayerTree,\n IdentifyResults\n },\n props: {\n drawer: null,\n project: null,\n showIdentify: null,\n map: null\n },\n data: function() {\n return {\n currentTab: 0\n };\n },\n methods: {\n /**\n * Forward to parent\n */\n setLayerVisibility(typename, visible) {\n this.$emit(\"setLayerVisibility\", typename, visible);\n }\n },\n watch: {\n identifyResults() {\n this.currentTab = 1;\n }\n },\n computed: {\n activeTab: {\n get() {\n return this.currentTab;\n },\n set(newValue) {\n this.currentTab = newValue;\n }\n },\n identifyResults() {\n return this.$store.state.identifyResults;\n }\n }\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LeftSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LeftSidebar.vue?vue&type=script&lang=js&\"","// Styles\nimport './VNavigationDrawer.sass'\n\n// Components\nimport VImg, { srcObject } from '../VImg/VImg'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Colorable from '../../mixins/colorable'\nimport Dependent from '../../mixins/dependent'\nimport Mobile from '../../mixins/mobile'\nimport Overlayable from '../../mixins/overlayable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeDirective, PropType } from 'vue'\nimport { TouchWrapper } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Applicationable('left', [\n 'isActive',\n 'isMobile',\n 'miniVariant',\n 'expandOnHover',\n 'permanent',\n 'right',\n 'temporary',\n 'width',\n ]),\n Colorable,\n Dependent,\n Mobile,\n Overlayable,\n SSRBootable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-navigation-drawer',\n\n provide (): object {\n return {\n isInNav: this.tag === 'nav',\n }\n },\n\n directives: {\n ClickOutside,\n Resize,\n Touch,\n },\n\n props: {\n bottom: Boolean,\n clipped: Boolean,\n disableResizeWatcher: Boolean,\n disableRouteWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n height: {\n type: [Number, String],\n default (): string {\n return this.app ? '100vh' : '100%'\n },\n },\n miniVariant: Boolean,\n miniVariantWidth: {\n type: [Number, String],\n default: 56,\n },\n permanent: Boolean,\n right: Boolean,\n src: {\n type: [String, Object] as PropType<string | srcObject>,\n default: '',\n },\n stateless: Boolean,\n tag: {\n type: String,\n default (): string {\n return this.app ? 'nav' : 'aside'\n },\n },\n temporary: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256,\n },\n value: null as unknown as PropType<any>,\n },\n\n data: () => ({\n isMouseover: false,\n touchArea: {\n left: 0,\n right: 0,\n },\n stackMinZIndex: 6,\n }),\n\n computed: {\n /**\n * Used for setting an app value from a dynamic\n * property. Called from applicationable.js\n */\n applicationProperty (): string {\n return this.right ? 'right' : 'left'\n },\n classes (): object {\n return {\n 'v-navigation-drawer': true,\n 'v-navigation-drawer--absolute': this.absolute,\n 'v-navigation-drawer--bottom': this.bottom,\n 'v-navigation-drawer--clipped': this.clipped,\n 'v-navigation-drawer--close': !this.isActive,\n 'v-navigation-drawer--fixed': !this.absolute && (this.app || this.fixed),\n 'v-navigation-drawer--floating': this.floating,\n 'v-navigation-drawer--is-mobile': this.isMobile,\n 'v-navigation-drawer--is-mouseover': this.isMouseover,\n 'v-navigation-drawer--mini-variant': this.isMiniVariant,\n 'v-navigation-drawer--custom-mini-variant': Number(this.miniVariantWidth) !== 56,\n 'v-navigation-drawer--open': this.isActive,\n 'v-navigation-drawer--open-on-hover': this.expandOnHover,\n 'v-navigation-drawer--right': this.right,\n 'v-navigation-drawer--temporary': this.temporary,\n ...this.themeClasses,\n }\n },\n computedMaxHeight (): number | null {\n if (!this.hasApp) return null\n\n const computedMaxHeight = (\n this.$vuetify.application.bottom +\n this.$vuetify.application.footer +\n this.$vuetify.application.bar\n )\n\n if (!this.clipped) return computedMaxHeight\n\n return computedMaxHeight + this.$vuetify.application.top\n },\n computedTop (): number {\n if (!this.hasApp) return 0\n\n let computedTop = this.$vuetify.application.bar\n\n computedTop += this.clipped\n ? this.$vuetify.application.top\n : 0\n\n return computedTop\n },\n computedTransform (): number {\n if (this.isActive) return 0\n if (this.isBottom) return 100\n return this.right ? 100 : -100\n },\n computedWidth (): string | number {\n return this.isMiniVariant ? this.miniVariantWidth : this.width\n },\n hasApp (): boolean {\n return (\n this.app &&\n (!this.isMobile && !this.temporary)\n )\n },\n isBottom (): boolean {\n return this.bottom && this.isMobile\n },\n isMiniVariant (): boolean {\n return (\n !this.expandOnHover &&\n this.miniVariant\n ) || (\n this.expandOnHover &&\n !this.isMouseover\n )\n },\n isMobile (): boolean {\n return (\n !this.stateless &&\n !this.permanent &&\n Mobile.options.computed.isMobile.call(this)\n )\n },\n reactsToClick (): boolean {\n return (\n !this.stateless &&\n !this.permanent &&\n (this.isMobile || this.temporary)\n )\n },\n reactsToMobile (): boolean {\n return (\n this.app &&\n !this.disableResizeWatcher &&\n !this.permanent &&\n !this.stateless &&\n !this.temporary\n )\n },\n reactsToResize (): boolean {\n return !this.disableResizeWatcher && !this.stateless\n },\n reactsToRoute (): boolean {\n return (\n !this.disableRouteWatcher &&\n !this.stateless &&\n (this.temporary || this.isMobile)\n )\n },\n showOverlay (): boolean {\n return (\n !this.hideOverlay &&\n this.isActive &&\n (this.isMobile || this.temporary)\n )\n },\n styles (): object {\n const translate = this.isBottom ? 'translateY' : 'translateX'\n const styles = {\n height: convertToUnit(this.height),\n top: !this.isBottom ? convertToUnit(this.computedTop) : 'auto',\n maxHeight: this.computedMaxHeight != null\n ? `calc(100% - ${convertToUnit(this.computedMaxHeight)})`\n : undefined,\n transform: `${translate}(${convertToUnit(this.computedTransform, '%')})`,\n width: convertToUnit(this.computedWidth),\n }\n\n return styles\n },\n },\n\n watch: {\n $route: 'onRouteChange',\n isActive (val) {\n this.$emit('input', val)\n },\n /**\n * When mobile changes, adjust the active state\n * only when there has been a previous value\n */\n isMobile (val, prev) {\n !val &&\n this.isActive &&\n !this.temporary &&\n this.removeOverlay()\n\n if (prev == null ||\n !this.reactsToResize ||\n !this.reactsToMobile\n ) return\n\n this.isActive = !val\n },\n permanent (val) {\n // If enabling prop enable the drawer\n if (val) this.isActive = true\n },\n showOverlay (val) {\n if (val) this.genOverlay()\n else this.removeOverlay()\n },\n value (val) {\n if (this.permanent) return\n\n if (val == null) {\n this.init()\n return\n }\n\n if (val !== this.isActive) this.isActive = val\n },\n expandOnHover: 'updateMiniVariant',\n isMouseover (val) {\n this.updateMiniVariant(!val)\n },\n },\n\n beforeMount () {\n this.init()\n },\n\n methods: {\n calculateTouchArea () {\n const parent = this.$el.parentNode as Element\n\n if (!parent) return\n\n const parentRect = parent.getBoundingClientRect()\n\n this.touchArea = {\n left: parentRect.left + 50,\n right: parentRect.right - 50,\n }\n },\n closeConditional () {\n return this.isActive && !this._isDestroyed && this.reactsToClick\n },\n genAppend () {\n return this.genPosition('append')\n },\n genBackground () {\n const props = {\n height: '100%',\n width: '100%',\n src: this.src,\n }\n\n const image = this.$scopedSlots.img\n ? this.$scopedSlots.img(props)\n : this.$createElement(VImg, { props })\n\n return this.$createElement('div', {\n staticClass: 'v-navigation-drawer__image',\n }, [image])\n },\n genDirectives (): VNodeDirective[] {\n const directives = [{\n name: 'click-outside',\n value: {\n handler: () => { this.isActive = false },\n closeConditional: this.closeConditional,\n include: this.getOpenDependentElements,\n },\n }]\n\n if (!this.touchless && !this.stateless) {\n directives.push({\n name: 'touch',\n value: {\n parent: true,\n left: this.swipeLeft,\n right: this.swipeRight,\n },\n } as any)\n }\n\n return directives\n },\n genListeners () {\n const on: Record<string, (e: Event) => void> = {\n transitionend: (e: Event) => {\n if (e.target !== e.currentTarget) return\n this.$emit('transitionend', e)\n\n // IE11 does not support new Event('resize')\n const resizeEvent = document.createEvent('UIEvents')\n resizeEvent.initUIEvent('resize', true, false, window, 0)\n window.dispatchEvent(resizeEvent)\n },\n }\n\n if (this.miniVariant) {\n on.click = () => this.$emit('update:mini-variant', false)\n }\n\n if (this.expandOnHover) {\n on.mouseenter = () => (this.isMouseover = true)\n on.mouseleave = () => (this.isMouseover = false)\n }\n\n return on\n },\n genPosition (name: 'prepend' | 'append') {\n const slot = getSlot(this, name)\n\n if (!slot) return slot\n\n return this.$createElement('div', {\n staticClass: `v-navigation-drawer__${name}`,\n }, slot)\n },\n genPrepend () {\n return this.genPosition('prepend')\n },\n genContent () {\n return this.$createElement('div', {\n staticClass: 'v-navigation-drawer__content',\n }, this.$slots.default)\n },\n genBorder () {\n return this.$createElement('div', {\n staticClass: 'v-navigation-drawer__border',\n })\n },\n init () {\n if (this.permanent) {\n this.isActive = true\n } else if (this.stateless ||\n this.value != null\n ) {\n this.isActive = this.value\n } else if (!this.temporary) {\n this.isActive = !this.isMobile\n }\n },\n onRouteChange () {\n if (this.reactsToRoute && this.closeConditional()) {\n this.isActive = false\n }\n },\n swipeLeft (e: TouchWrapper) {\n if (this.isActive && this.right) return\n this.calculateTouchArea()\n\n if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n if (this.right &&\n e.touchstartX >= this.touchArea.right\n ) this.isActive = true\n else if (!this.right && this.isActive) this.isActive = false\n },\n swipeRight (e: TouchWrapper) {\n if (this.isActive && !this.right) return\n this.calculateTouchArea()\n\n if (Math.abs(e.touchendX - e.touchstartX) < 100) return\n if (!this.right &&\n e.touchstartX <= this.touchArea.left\n ) this.isActive = true\n else if (this.right && this.isActive) this.isActive = false\n },\n /**\n * Update the application layout\n */\n updateApplication () {\n if (\n !this.isActive ||\n this.isMobile ||\n this.temporary ||\n !this.$el\n ) return 0\n\n const width = Number(this.computedWidth)\n\n return isNaN(width) ? this.$el.clientWidth : width\n },\n updateMiniVariant (val: boolean) {\n if (this.miniVariant !== val) this.$emit('update:mini-variant', val)\n },\n },\n\n render (h): VNode {\n const children = [\n this.genPrepend(),\n this.genContent(),\n this.genAppend(),\n this.genBorder(),\n ]\n\n if (this.src || getSlot(this, 'img')) children.unshift(this.genBackground())\n\n return h(this.tag, this.setBackgroundColor(this.color, {\n class: this.classes,\n style: this.styles,\n directives: this.genDirectives(),\n on: this.genListeners(),\n }), children)\n },\n})\n","import { render, staticRenderFns } from \"./LeftSidebar.vue?vue&type=template&id=2c5f2279&\"\nimport script from \"./LeftSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./LeftSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VNavigationDrawer,VTab,VTabItem,VTabs})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{attrs:{\"level\":\"2\"}},[_c('v-card-text',[_c('v-btn',{staticClass:\"btn-close\",attrs:{\"icon\":\"\"},on:{\"click\":_vm.onCloseButtonClicked}},[_c('v-icon',[_vm._v(\"mdi-close\")])],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.title)+\" \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Filter\",\"hint\":\"Case sensitive, use * to match any character\",\"dense\":\"\",\"error\":this.hasSearchError,\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.filterText),callback:function ($$v) {_vm.filterText=$$v},expression:\"filterText\"}}),_c('v-spacer'),_c('v-combobox',{attrs:{\"items\":_vm.searchableFields,\"label\":\"Search field ...\",\"no-filter\":\"\",\"hide-details\":\"\",\"dense\":\"\"},model:{value:(_vm.filterField),callback:function ($$v) {_vm.filterField=$$v},expression:\"filterField\"}})],1),_c('v-data-table',{attrs:{\"dense\":\"\",\"item-key\":\"itemKeyInternalIdentifier\",\"page\":_vm.currentPage,\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc,\"server-items-length\":_vm.numberMatched,\"no-data-text\":\"Attribute table has no data, search is case-sensitive, use * to match any character.\",\"loading\":_vm.tableHeaders.length == 0 || _vm.loading,\"headers\":_vm.tableHeaders,\"items\":_vm.tableData,\"items-per-page\":5,\"footer-props\":{\n itemsPerPageOptions: [5],\n itemsPerPageText: ''\n }},on:{\"update:page\":function($event){_vm.currentPage=$event},\"update:sortBy\":function($event){_vm.sortBy=$event},\"update:sort-by\":function($event){_vm.sortBy=$event},\"update:sortDesc\":function($event){_vm.sortDesc=$event},\"update:sort-desc\":function($event){_vm.sortDesc=$event}},scopedSlots:_vm._u([{key:\"item.zoomToFeature\",fn:function(ref){\n var item = ref.item;\nreturn [_c('v-icon',{on:{\"click\":function($event){return _vm.zoomToFeature(item.feature)}}},[_vm._v(\"mdi-magnify\")])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Attribute table\n *\n * Author: elpaso@itopen.it\n * Date: 2020-06-30\n * Copyright: Copyright 2020, ItOpen\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n */\n<template>\n <v-card level=\"2\">\n <v-card-text>\n <v-btn class=\"btn-close\" icon @click=\"onCloseButtonClicked\">\n <v-icon>mdi-close</v-icon>\n </v-btn>\n <v-card-title>\n {{ title }}\n <v-spacer></v-spacer>\n <v-text-field\n v-model=\"filterText\"\n append-icon=\"mdi-magnify\"\n label=\"Filter\"\n hint=\"Case sensitive, use * to match any character\"\n dense\n :error=\"this.hasSearchError\"\n single-line\n hide-details\n ></v-text-field>\n <v-spacer></v-spacer>\n <v-combobox\n v-model=\"filterField\"\n :items=\"searchableFields\"\n label=\"Search field ...\"\n no-filter\n hide-details\n dense\n ></v-combobox>\n </v-card-title>\n\n <v-data-table\n dense\n item-key=\"itemKeyInternalIdentifier\"\n :page.sync=\"currentPage\"\n :sort-by.sync=\"sortBy\"\n :sort-desc.sync=\"sortDesc\"\n :server-items-length=\"numberMatched\"\n no-data-text=\"Attribute table has no data, search is case-sensitive, use * to match any character.\"\n :loading=\"tableHeaders.length == 0 || loading\"\n :headers=\"tableHeaders\"\n :items=\"tableData\"\n :items-per-page=\"5\"\n :footer-props=\"{\n itemsPerPageOptions: [5],\n itemsPerPageText: ''\n }\"\n >\n <template v-slot:item.zoomToFeature=\"{ item }\">\n <v-icon @click=\"zoomToFeature(item.feature)\">mdi-magnify</v-icon>\n </template>\n </v-data-table>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nconst uuidv4 = require(\"uuid/v4\");\nexport default {\n name: \"AttributeTable\",\n props: {\n project: null,\n map: null\n },\n computed: {\n /**\n * Layer identifier for WFS3: layer id or short name or name\n */\n typename() {\n return this.$store.state.attributeTableTypename;\n },\n /**\n * Get layer name from typename\n */\n title() {\n return Object.keys(this.project.wms_layers_map).find(\n key => this.project.wms_layers_map[key] === this.typename\n );\n },\n searchableFields() {\n let layerId = this.project.wms_layers_typename_id_map[this.typename];\n let values = [];\n let fieldNames = Object.keys(this.project.wms_layers[layerId][\"fields\"]);\n for (let i = 0; i < fieldNames.length; i++) {\n let field = this.project.wms_layers[layerId][\"fields\"][fieldNames[i]];\n values.push({\n text: field[\"label\"],\n value: fieldNames[i]\n });\n }\n return values;\n },\n fieldAliases() {\n let layerId = this.project.wms_layers_typename_id_map[this.typename];\n let aliases = {};\n let fieldNames = Object.keys(this.project.wms_layers[layerId][\"fields\"]);\n for (let i = 0; i < fieldNames.length; i++) {\n let field = this.project.wms_layers[layerId][\"fields\"][fieldNames[i]];\n aliases[fieldNames[i]] = field[\"label\"];\n }\n return aliases;\n },\n hasSearchError() {\n return this.error > 0 && this.filterText.length;\n }\n },\n data() {\n return {\n error: null,\n currentPage: 1,\n sortBy: null,\n sortDesc: null,\n tableData: [],\n tableHeaders: [],\n numberMatched: 0,\n filterField: null,\n filterText: \"\",\n loading: false\n };\n },\n mounted() {\n this.loadData();\n },\n watch: {\n currentPage() {\n this.loadData();\n },\n sortBy() {\n this.loadData();\n },\n sortDesc() {\n this.loadData();\n },\n typename() {\n this.loadData();\n },\n filterField() {\n if (this.filterText) this.loadData();\n },\n filterText() {\n if (!this.filterField) {\n this.filterField = this.searchableFields[0];\n } else {\n this.loadData();\n }\n }\n },\n methods: {\n onCloseButtonClicked() {\n this.$store.commit(\"clearAttributeTableTypename\");\n },\n /**\n * Load table data from WFS3\n */\n async loadData() {\n try {\n this.error = null;\n this.loading = true;\n let offset = (this.currentPage - 1) * 5;\n let sorting = \"\";\n if (this.sortBy) {\n sorting = \"&sortby=\" + encodeURIComponent(this.sortBy);\n if (this.sortDesc) {\n sorting += \"&sortdesc=1\";\n }\n }\n let filter = \"\";\n if (this.filterField && this.filterText) {\n filter = `&${this.filterField.value}=${this.filterText}`;\n }\n fetch(\n `/project/${this.project.id}/wfs3/collections/${this.typename}/items.json?limit=5&offset=${offset}${sorting}${filter}`\n )\n .then(response => {\n if (!response) {\n throw Error(\n `Error fetching attribute table data from QGIS Server`\n );\n }\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(json => {\n if (json.features.length) {\n let headers = [{ text: \"\", value: \"zoomToFeature\" }];\n for (let k in json.features[0].properties) {\n headers.push({\n text: k,\n value: this.fieldAliases[k] ? this.fieldAliases[k] : k\n });\n }\n this.tableHeaders = headers;\n let data = [];\n for (let i = 0; i < json.features.length; i++) {\n let dataRow = json.features[i].properties;\n dataRow[\"feature\"] = json.features[i];\n dataRow[\"itemKeyInternalIdentifier\"] = uuidv4();\n data.push(dataRow);\n }\n this.tableData = data;\n this.numberMatched = json.numberMatched;\n } else {\n this.tableData = [];\n }\n })\n .catch(error => {\n this.error = error.message;\n this.tableData = [];\n });\n } catch (error) {\n this.error = error.message;\n this.tableData = [];\n }\n this.loading = false;\n },\n zoomToFeature(feature) {\n this.map.highlightLayer.clearLayers();\n this.map.highlightLayer.addData(feature);\n this.map.setView(this.map.highlightLayer.getBounds().getCenter());\n }\n }\n};\n</script>\n\n<style scoped>\n.btn-close {\n float: right;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=script&lang=js&\"","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator<string>,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType<any>,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n","import VMenu from './VMenu'\n\nexport { VMenu }\nexport default VMenu\n","import './VSimpleCheckbox.sass'\n\nimport ripple from '../../directives/ripple'\n\nimport Vue, { VNode, VNodeDirective } from 'vue'\nimport { VIcon } from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'v-simple-checkbox',\n\n functional: true,\n\n directives: {\n ripple,\n },\n\n props: {\n ...Colorable.options.props,\n ...Themeable.options.props,\n disabled: Boolean,\n ripple: {\n type: Boolean,\n default: true,\n },\n value: Boolean,\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n },\n\n render (h, { props, data, listeners }): VNode {\n const children = []\n\n if (props.ripple && !props.disabled) {\n const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n staticClass: 'v-input--selection-controls__ripple',\n directives: [{\n name: 'ripple',\n value: { center: true },\n }] as VNodeDirective[],\n }))\n\n children.push(ripple)\n }\n\n let icon = props.offIcon\n if (props.indeterminate) icon = props.indeterminateIcon\n else if (props.value) icon = props.onIcon\n\n children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n props: {\n disabled: props.disabled,\n dark: props.dark,\n light: props.light,\n },\n }), icon))\n\n const classes = {\n 'v-simple-checkbox': true,\n 'v-simple-checkbox--disabled': props.disabled,\n }\n\n return h('div',\n mergeData(data, {\n class: classes,\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n\n if (data.on && data.on.input && !props.disabled) {\n wrapInArray(data.on.input).forEach(f => f(!props.value))\n }\n },\n },\n }), children)\n },\n})\n","// Styles\nimport './VSubheader.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-subheader',\n\n props: {\n inset: Boolean,\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-subheader',\n class: {\n 'v-subheader--inset': this.inset,\n ...this.themeClasses,\n },\n attrs: this.$attrs,\n on: this.$listeners,\n }, this.$slots.default)\n },\n})\n","import VSubheader from './VSubheader'\n\nexport { VSubheader }\nexport default VSubheader\n","// Components\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VDivider from '../VDivider'\nimport VSubheader from '../VSubheader'\nimport {\n VList,\n VListItem,\n VListItemAction,\n VListItemContent,\n VListItemTitle,\n} from '../VList'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport {\n escapeHTML,\n getPropertyFromItem,\n} from '../../util/helpers'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, PropType, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { SelectItemKey } from 'vuetify/types'\n\ntype ListTile = { item: any, disabled?: null | boolean, value?: boolean, index: number };\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n name: 'v-select-list',\n\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n action: Boolean,\n dense: Boolean,\n hideSelected: Boolean,\n items: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n itemDisabled: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'disabled',\n },\n itemText: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'text',\n },\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value',\n },\n noDataText: String,\n noFilter: Boolean,\n searchInput: null as unknown as PropType<any>,\n selectedItems: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n },\n\n computed: {\n parsedItems (): any[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n tileActiveClass (): string {\n return Object.keys(this.setTextColor(this.color).class || {}).join(' ')\n },\n staticNoDataTile (): VNode {\n const tile = {\n attrs: {\n role: undefined,\n },\n on: {\n mousedown: (e: Event) => e.preventDefault(), // Prevent onBlur from being called\n },\n }\n\n return this.$createElement(VListItem, tile, [\n this.genTileContent(this.noDataText),\n ])\n },\n },\n\n methods: {\n genAction (item: object, inputValue: any): VNode {\n return this.$createElement(VListItemAction, [\n this.$createElement(VSimpleCheckbox, {\n props: {\n color: this.color,\n value: inputValue,\n },\n on: {\n input: () => this.$emit('select', item),\n },\n }),\n ])\n },\n genDivider (props: { [key: string]: any }) {\n return this.$createElement(VDivider, { props })\n },\n genFilteredText (text: string) {\n text = text || ''\n\n if (!this.searchInput || this.noFilter) return escapeHTML(text)\n\n const { start, middle, end } = this.getMaskedCharacters(text)\n\n return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`\n },\n genHeader (props: { [key: string]: any }): VNode {\n return this.$createElement(VSubheader, { props }, props.header)\n },\n genHighlight (text: string): string {\n return `<span class=\"v-list-item__mask\">${escapeHTML(text)}</span>`\n },\n getMaskedCharacters (text: string): {\n start: string\n middle: string\n end: string\n } {\n const searchInput = (this.searchInput || '').toString().toLocaleLowerCase()\n const index = text.toLocaleLowerCase().indexOf(searchInput)\n\n if (index < 0) return { start: '', middle: text, end: '' }\n\n const start = text.slice(0, index)\n const middle = text.slice(index, index + searchInput.length)\n const end = text.slice(index + searchInput.length)\n return { start, middle, end }\n },\n genTile ({\n item,\n index,\n disabled = null,\n value = false,\n }: ListTile): VNode | VNode[] | undefined {\n if (!value) value = this.hasItem(item)\n\n if (item === Object(item)) {\n disabled = disabled !== null\n ? disabled\n : this.getDisabled(item)\n }\n\n const tile = {\n attrs: {\n // Default behavior in list does not\n // contain aria-selected by default\n 'aria-selected': String(value),\n id: `list-item-${this._uid}-${index}`,\n role: 'option',\n },\n on: {\n mousedown: (e: Event) => {\n // Prevent onBlur from being called\n e.preventDefault()\n },\n click: () => disabled || this.$emit('select', item),\n },\n props: {\n activeClass: this.tileActiveClass,\n disabled,\n ripple: true,\n inputValue: value,\n },\n }\n\n if (!this.$scopedSlots.item) {\n return this.$createElement(VListItem, tile, [\n this.action && !this.hideSelected && this.items.length > 0\n ? this.genAction(item, value)\n : null,\n this.genTileContent(item, index),\n ])\n }\n\n const parent = this\n const scopedSlot = this.$scopedSlots.item({\n parent,\n item,\n attrs: {\n ...tile.attrs,\n ...tile.props,\n },\n on: tile.on,\n })\n\n return this.needsTile(scopedSlot)\n ? this.$createElement(VListItem, tile, scopedSlot)\n : scopedSlot\n },\n genTileContent (item: any, index = 0): VNode {\n const innerHTML = this.genFilteredText(this.getText(item))\n\n return this.$createElement(VListItemContent,\n [this.$createElement(VListItemTitle, {\n domProps: { innerHTML },\n })]\n )\n },\n hasItem (item: object) {\n return this.parsedItems.indexOf(this.getValue(item)) > -1\n },\n needsTile (slot: VNode[] | undefined) {\n return slot!.length !== 1 ||\n slot![0].componentOptions == null ||\n slot![0].componentOptions.Ctor.options.name !== 'v-list-item'\n },\n getDisabled (item: object) {\n return Boolean(getPropertyFromItem(item, this.itemDisabled, false))\n },\n getText (item: object) {\n return String(getPropertyFromItem(item, this.itemText, item))\n },\n getValue (item: object) {\n return getPropertyFromItem(item, this.itemValue, this.getText(item))\n },\n },\n\n render (): VNode {\n const children: VNodeChildren = []\n const itemsLength = this.items.length\n for (let index = 0; index < itemsLength; index++) {\n const item = this.items[index]\n\n if (this.hideSelected &&\n this.hasItem(item)\n ) continue\n\n if (item == null) children.push(this.genTile({ item, index }))\n else if (item.header) children.push(this.genHeader(item))\n else if (item.divider) children.push(this.genDivider(item))\n else children.push(this.genTile({ item, index }))\n }\n\n children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile)\n\n this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item'])\n\n this.$slots['append-item'] && children.push(this.$slots['append-item'])\n\n return this.$createElement(VList, {\n staticClass: 'v-select-list',\n class: this.themeClasses,\n attrs: {\n role: 'listbox',\n tabindex: -1,\n },\n props: { dense: this.dense },\n }, children)\n },\n})\n","// Styles\nimport './VLabel.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n name: 'v-label',\n\n functional: true,\n\n props: {\n absolute: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n disabled: Boolean,\n focused: Boolean,\n for: String,\n left: {\n type: [Number, String],\n default: 0,\n },\n right: {\n type: [Number, String],\n default: 'auto',\n },\n value: Boolean,\n },\n\n render (h, ctx): VNode {\n const { children, listeners, props } = ctx\n const data = {\n staticClass: 'v-label',\n class: {\n 'v-label--active': props.value,\n 'v-label--is-disabled': props.disabled,\n ...functionalThemeClasses(ctx),\n },\n attrs: {\n for: props.for,\n 'aria-hidden': !props.for,\n },\n on: listeners,\n style: {\n left: convertToUnit(props.left),\n right: convertToUnit(props.right),\n position: props.absolute ? 'absolute' : 'relative',\n },\n ref: 'label',\n }\n\n return h('label', Colorable.options.methods.setTextColor(props.focused && props.color, data), children)\n },\n})\n","import VLabel from './VLabel'\n\nexport { VLabel }\nexport default VLabel\n","// Styles\nimport './VMessages.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../util/mixins'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n name: 'v-messages',\n\n props: {\n value: {\n type: Array,\n default: () => ([]),\n } as PropValidator<string[]>,\n },\n\n methods: {\n genChildren () {\n return this.$createElement('transition-group', {\n staticClass: 'v-messages__wrapper',\n attrs: {\n name: 'message-transition',\n tag: 'div',\n },\n }, this.value.map(this.genMessage))\n },\n genMessage (message: string, key: number) {\n return this.$createElement('div', {\n staticClass: 'v-messages__message',\n key,\n }, getSlot(this, 'default', { message, key }) || [message])\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.color, {\n staticClass: 'v-messages',\n class: this.themeClasses,\n }), [this.genChildren()])\n },\n})\n","import VMessages from './VMessages'\n\nexport { VMessages }\nexport default VMessages\n","// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage>,\n readonly: Boolean,\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage>,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled || (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly || (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : undefined\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n","// Styles\nimport './VInput.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VLabel from '../VLabel'\nimport VMessages from '../VMessages'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Validatable from '../../mixins/validatable'\n\n// Utilities\nimport {\n convertToUnit,\n getSlot,\n kebabCase,\n} from '../../util/helpers'\nimport mergeData from '../../util/mergeData'\n\n// Types\nimport { VNode, VNodeData, PropType } from 'vue'\nimport mixins from '../../util/mixins'\nimport { InputValidationRule } from 'vuetify/types'\n\nconst baseMixins = mixins(\n BindsAttrs,\n Validatable,\n)\n\ninterface options extends InstanceType<typeof baseMixins> {\n /* eslint-disable-next-line camelcase */\n $_modelEvent: string\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n name: 'v-input',\n\n inheritAttrs: false,\n\n props: {\n appendIcon: String,\n backgroundColor: {\n type: String,\n default: '',\n },\n dense: Boolean,\n height: [Number, String],\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n id: String,\n label: String,\n loading: Boolean,\n persistentHint: Boolean,\n prependIcon: String,\n value: null as any as PropType<any>,\n },\n\n data () {\n return {\n lazyValue: this.value,\n hasMouseDown: false,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-input--has-state': this.hasState,\n 'v-input--hide-details': !this.showDetails,\n 'v-input--is-label-active': this.isLabelActive,\n 'v-input--is-dirty': this.isDirty,\n 'v-input--is-disabled': this.isDisabled,\n 'v-input--is-focused': this.isFocused,\n // <v-switch loading>.loading === '' so we can't just cast to boolean\n 'v-input--is-loading': this.loading !== false && this.loading != null,\n 'v-input--is-readonly': this.isReadonly,\n 'v-input--dense': this.dense,\n ...this.themeClasses,\n }\n },\n computedId (): string {\n return this.id || `input-${this._uid}`\n },\n hasDetails (): boolean {\n return this.messagesToDisplay.length > 0\n },\n hasHint (): boolean {\n return !this.hasMessages &&\n !!this.hint &&\n (this.persistentHint || this.isFocused)\n },\n hasLabel (): boolean {\n return !!(this.$slots.label || this.label)\n },\n // Proxy for `lazyValue`\n // This allows an input\n // to function without\n // a provided model\n internalValue: {\n get (): any {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n this.$emit(this.$_modelEvent, val)\n },\n },\n isDirty (): boolean {\n return !!this.lazyValue\n },\n isLabelActive (): boolean {\n return this.isDirty\n },\n messagesToDisplay (): string[] {\n if (this.hasHint) return [this.hint]\n\n if (!this.hasMessages) return []\n\n return this.validations.map((validation: string | InputValidationRule) => {\n if (typeof validation === 'string') return validation\n\n const validationResult = validation(this.internalValue)\n\n return typeof validationResult === 'string' ? validationResult : ''\n }).filter(message => message !== '')\n },\n showDetails (): boolean {\n return this.hideDetails === false || (this.hideDetails === 'auto' && this.hasDetails)\n },\n },\n\n watch: {\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeCreate () {\n // v-radio-group needs to emit a different event\n // https://github.com/vuetifyjs/vuetify/issues/4752\n this.$_modelEvent = (this.$options.model && this.$options.model.event) || 'input'\n },\n\n methods: {\n genContent () {\n return [\n this.genPrependSlot(),\n this.genControl(),\n this.genAppendSlot(),\n ]\n },\n genControl () {\n return this.$createElement('div', {\n staticClass: 'v-input__control',\n }, [\n this.genInputSlot(),\n this.genMessages(),\n ])\n },\n genDefaultSlot () {\n return [\n this.genLabel(),\n this.$slots.default,\n ]\n },\n genIcon (\n type: string,\n cb?: (e: Event) => void,\n extraData: VNodeData = {}\n ) {\n const icon = (this as any)[`${type}Icon`]\n const eventName = `click:${kebabCase(type)}`\n const hasListener = !!(this.listeners$[eventName] || cb)\n\n const data = mergeData({\n attrs: {\n 'aria-label': hasListener ? kebabCase(type).split('-')[0] + ' icon' : undefined,\n color: this.validationState,\n dark: this.dark,\n disabled: this.isDisabled,\n light: this.light,\n },\n on: !hasListener\n ? undefined\n : {\n click: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n\n this.$emit(eventName, e)\n cb && cb(e)\n },\n // Container has g event that will\n // trigger menu open if enclosed\n mouseup: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n },\n },\n }, extraData)\n\n return this.$createElement('div', {\n staticClass: `v-input__icon`,\n class: type ? `v-input__icon--${kebabCase(type)}` : undefined,\n }, [\n this.$createElement(\n VIcon,\n data,\n icon\n ),\n ])\n },\n genInputSlot () {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor, {\n staticClass: 'v-input__slot',\n style: { height: convertToUnit(this.height) },\n on: {\n click: this.onClick,\n mousedown: this.onMouseDown,\n mouseup: this.onMouseUp,\n },\n ref: 'input-slot',\n }), [this.genDefaultSlot()])\n },\n genLabel () {\n if (!this.hasLabel) return null\n\n return this.$createElement(VLabel, {\n props: {\n color: this.validationState,\n dark: this.dark,\n disabled: this.isDisabled,\n focused: this.hasState,\n for: this.computedId,\n light: this.light,\n },\n }, this.$slots.label || this.label)\n },\n genMessages () {\n if (!this.showDetails) return null\n\n return this.$createElement(VMessages, {\n props: {\n color: this.hasHint ? '' : this.validationState,\n dark: this.dark,\n light: this.light,\n value: this.messagesToDisplay,\n },\n attrs: {\n role: this.hasMessages ? 'alert' : null,\n },\n scopedSlots: {\n default: props => getSlot(this, 'message', props),\n },\n })\n },\n genSlot (\n type: string,\n location: string,\n slot: (VNode | VNode[])[]\n ) {\n if (!slot.length) return null\n\n const ref = `${type}-${location}`\n\n return this.$createElement('div', {\n staticClass: `v-input__${ref}`,\n ref,\n }, slot)\n },\n genPrependSlot () {\n const slot = []\n\n if (this.$slots.prepend) {\n slot.push(this.$slots.prepend)\n } else if (this.prependIcon) {\n slot.push(this.genIcon('prepend'))\n }\n\n return this.genSlot('prepend', 'outer', slot)\n },\n genAppendSlot () {\n const slot = []\n\n // Append icon for text field was really\n // an appended inner icon, v-text-field\n // will overwrite this method in order to obtain\n // backwards compat\n if (this.$slots.append) {\n slot.push(this.$slots.append)\n } else if (this.appendIcon) {\n slot.push(this.genIcon('append'))\n }\n\n return this.genSlot('append', 'outer', slot)\n },\n onClick (e: Event) {\n this.$emit('click', e)\n },\n onMouseDown (e: Event) {\n this.hasMouseDown = true\n this.$emit('mousedown', e)\n },\n onMouseUp (e: Event) {\n this.hasMouseDown = false\n this.$emit('mouseup', e)\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.validationState, {\n staticClass: 'v-input',\n class: this.classes,\n }), this.genContent())\n },\n})\n","import VInput from './VInput'\n\nexport { VInput }\nexport default VInput\n","// Styles\nimport './VCounter.sass'\n\n// Mixins\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n name: 'v-counter',\n\n functional: true,\n\n props: {\n value: {\n type: [Number, String],\n default: '',\n },\n max: [Number, String],\n },\n\n render (h, ctx): VNode {\n const { props } = ctx\n const max = parseInt(props.max, 10)\n const value = parseInt(props.value, 10)\n const content = max ? `${value} / ${max}` : String(props.value)\n const isGreater = max && (value > max)\n\n return h('div', {\n staticClass: 'v-counter',\n class: {\n 'error--text': isGreater,\n ...functionalThemeClasses(ctx),\n },\n }, content)\n },\n})\n","import VCounter from './VCounter'\n\nexport { VCounter }\nexport default VCounter\n","// Directives\nimport Intersect from '../../directives/intersect'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\n\nexport default function intersectable (options: { onVisible: string[] }) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {\n // do nothing because intersection observer is not available\n return Vue.extend({ name: 'intersectable' })\n }\n\n return Vue.extend({\n name: 'intersectable',\n\n mounted () {\n Intersect.inserted(this.$el as HTMLElement, {\n name: 'intersect',\n value: this.onObserve,\n })\n },\n\n destroyed () {\n Intersect.unbind(this.$el as HTMLElement)\n },\n\n methods: {\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n if (!isIntersecting) return\n\n for (let i = 0, length = options.onVisible.length; i < length; i++) {\n const callback = (this as any)[options.onVisible[i]]\n\n if (typeof callback === 'function') {\n callback()\n continue\n }\n\n consoleWarn(options.onVisible[i] + ' method is not available on the instance but referenced in intersectable mixin options')\n }\n },\n },\n })\n}\n","// Styles\nimport './VTextField.sass'\n\n// Extensions\nimport VInput from '../VInput'\n\n// Components\nimport VCounter from '../VCounter'\nimport VLabel from '../VLabel'\n\n// Mixins\nimport Intersectable from '../../mixins/intersectable'\nimport Loadable from '../../mixins/loadable'\nimport Validatable from '../../mixins/validatable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Utilities\nimport { convertToUnit, keyCodes } from '../../util/helpers'\nimport { breaking, consoleWarn } from '../../util/console'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, PropType } from 'vue/types'\n\nconst baseMixins = mixins(\n VInput,\n Intersectable({\n onVisible: [\n 'setLabelWidth',\n 'setPrefixWidth',\n 'setPrependWidth',\n 'tryAutofocus',\n ],\n }),\n Loadable,\n)\ninterface options extends InstanceType<typeof baseMixins> {\n $refs: {\n label: HTMLElement\n input: HTMLInputElement\n 'prepend-inner': HTMLElement\n prefix: HTMLElement\n suffix: HTMLElement\n }\n}\n\nconst dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n name: 'v-text-field',\n\n directives: { ripple },\n\n inheritAttrs: false,\n\n props: {\n appendOuterIcon: String,\n autofocus: Boolean,\n clearable: Boolean,\n clearIcon: {\n type: String,\n default: '$clear',\n },\n counter: [Boolean, Number, String],\n counterValue: Function as PropType<(value: any) => number>,\n filled: Boolean,\n flat: Boolean,\n fullWidth: Boolean,\n label: String,\n outlined: Boolean,\n placeholder: String,\n prefix: String,\n prependInnerIcon: String,\n reverse: Boolean,\n rounded: Boolean,\n shaped: Boolean,\n singleLine: Boolean,\n solo: Boolean,\n soloInverted: Boolean,\n suffix: String,\n type: {\n type: String,\n default: 'text',\n },\n },\n\n data: () => ({\n badInput: false,\n labelWidth: 0,\n prefixWidth: 0,\n prependWidth: 0,\n initialValue: null,\n isBooted: false,\n isClearing: false,\n }),\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-text-field': true,\n 'v-text-field--full-width': this.fullWidth,\n 'v-text-field--prefix': this.prefix,\n 'v-text-field--single-line': this.isSingle,\n 'v-text-field--solo': this.isSolo,\n 'v-text-field--solo-inverted': this.soloInverted,\n 'v-text-field--solo-flat': this.flat,\n 'v-text-field--filled': this.filled,\n 'v-text-field--is-booted': this.isBooted,\n 'v-text-field--enclosed': this.isEnclosed,\n 'v-text-field--reverse': this.reverse,\n 'v-text-field--outlined': this.outlined,\n 'v-text-field--placeholder': this.placeholder,\n 'v-text-field--rounded': this.rounded,\n 'v-text-field--shaped': this.shaped,\n }\n },\n computedColor (): string | undefined {\n const computedColor = Validatable.options.computed.computedColor.call(this)\n\n if (!this.soloInverted || !this.isFocused) return computedColor\n\n return this.color || 'primary'\n },\n computedCounterValue (): number {\n if (typeof this.counterValue === 'function') {\n return this.counterValue(this.internalValue)\n }\n return (this.internalValue || '').toString().length\n },\n hasCounter (): boolean {\n return this.counter !== false && this.counter != null\n },\n hasDetails (): boolean {\n return VInput.options.computed.hasDetails.call(this) || this.hasCounter\n },\n internalValue: {\n get (): any {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n this.$emit('input', this.lazyValue)\n },\n },\n isDirty (): boolean {\n return this.lazyValue?.toString().length > 0 || this.badInput\n },\n isEnclosed (): boolean {\n return (\n this.filled ||\n this.isSolo ||\n this.outlined\n )\n },\n isLabelActive (): boolean {\n return this.isDirty || dirtyTypes.includes(this.type)\n },\n isSingle (): boolean {\n return (\n this.isSolo ||\n this.singleLine ||\n this.fullWidth ||\n // https://material.io/components/text-fields/#filled-text-field\n (this.filled && !this.hasLabel)\n )\n },\n isSolo (): boolean {\n return this.solo || this.soloInverted\n },\n labelPosition (): Record<'left' | 'right', string | number | undefined> {\n let offset = (this.prefix && !this.labelValue) ? this.prefixWidth : 0\n\n if (this.labelValue && this.prependWidth) offset -= this.prependWidth\n\n return (this.$vuetify.rtl === this.reverse) ? {\n left: offset,\n right: 'auto',\n } : {\n left: 'auto',\n right: offset,\n }\n },\n showLabel (): boolean {\n return this.hasLabel && (!this.isSingle || (!this.isLabelActive && !this.placeholder))\n },\n labelValue (): boolean {\n return !this.isSingle &&\n Boolean(this.isFocused || this.isLabelActive || this.placeholder)\n },\n },\n\n watch: {\n labelValue: 'setLabelWidth',\n outlined: 'setLabelWidth',\n label () {\n this.$nextTick(this.setLabelWidth)\n },\n prefix () {\n this.$nextTick(this.setPrefixWidth)\n },\n isFocused: 'updateValue',\n value (val) {\n this.lazyValue = val\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('box')) {\n breaking('box', 'filled', this)\n }\n\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('browser-autocomplete')) {\n breaking('browser-autocomplete', 'autocomplete', this)\n }\n\n /* istanbul ignore if */\n if (this.shaped && !(this.filled || this.outlined || this.isSolo)) {\n consoleWarn('shaped should be used with either filled or outlined', this)\n }\n },\n\n mounted () {\n this.autofocus && this.tryAutofocus()\n this.setLabelWidth()\n this.setPrefixWidth()\n this.setPrependWidth()\n requestAnimationFrame(() => (this.isBooted = true))\n },\n\n methods: {\n /** @public */\n focus () {\n this.onFocus()\n },\n /** @public */\n blur (e?: Event) {\n // https://github.com/vuetifyjs/vuetify/issues/5913\n // Safari tab order gets broken if called synchronous\n window.requestAnimationFrame(() => {\n this.$refs.input && this.$refs.input.blur()\n })\n },\n clearableCallback () {\n this.$refs.input && this.$refs.input.focus()\n this.$nextTick(() => this.internalValue = null)\n },\n genAppendSlot () {\n const slot = []\n\n if (this.$slots['append-outer']) {\n slot.push(this.$slots['append-outer'] as VNode[])\n } else if (this.appendOuterIcon) {\n slot.push(this.genIcon('appendOuter'))\n }\n\n return this.genSlot('append', 'outer', slot)\n },\n genPrependInnerSlot () {\n const slot = []\n\n if (this.$slots['prepend-inner']) {\n slot.push(this.$slots['prepend-inner'] as VNode[])\n } else if (this.prependInnerIcon) {\n slot.push(this.genIcon('prependInner'))\n }\n\n return this.genSlot('prepend', 'inner', slot)\n },\n genIconSlot () {\n const slot = []\n\n if (this.$slots['append']) {\n slot.push(this.$slots['append'] as VNode[])\n } else if (this.appendIcon) {\n slot.push(this.genIcon('append'))\n }\n\n return this.genSlot('append', 'inner', slot)\n },\n genInputSlot () {\n const input = VInput.options.methods.genInputSlot.call(this)\n\n const prepend = this.genPrependInnerSlot()\n\n if (prepend) {\n input.children = input.children || []\n input.children.unshift(prepend)\n }\n\n return input\n },\n genClearIcon () {\n if (!this.clearable) return null\n\n const data = this.isDirty ? undefined : { attrs: { disabled: true } }\n\n return this.genSlot('append', 'inner', [\n this.genIcon('clear', this.clearableCallback, data),\n ])\n },\n genCounter () {\n if (!this.hasCounter) return null\n\n const max = this.counter === true ? this.attrs$.maxlength : this.counter\n\n return this.$createElement(VCounter, {\n props: {\n dark: this.dark,\n light: this.light,\n max,\n value: this.computedCounterValue,\n },\n })\n },\n genControl () {\n return VInput.options.methods.genControl.call(this)\n },\n genDefaultSlot () {\n return [\n this.genFieldset(),\n this.genTextFieldSlot(),\n this.genClearIcon(),\n this.genIconSlot(),\n this.genProgress(),\n ]\n },\n genFieldset () {\n if (!this.outlined) return null\n\n return this.$createElement('fieldset', {\n attrs: {\n 'aria-hidden': true,\n },\n }, [this.genLegend()])\n },\n genLabel () {\n if (!this.showLabel) return null\n\n const data = {\n props: {\n absolute: true,\n color: this.validationState,\n dark: this.dark,\n disabled: this.isDisabled,\n focused: !this.isSingle && (this.isFocused || !!this.validationState),\n for: this.computedId,\n left: this.labelPosition.left,\n light: this.light,\n right: this.labelPosition.right,\n value: this.labelValue,\n },\n }\n\n return this.$createElement(VLabel, data, this.$slots.label || this.label)\n },\n genLegend () {\n const width = !this.singleLine && (this.labelValue || this.isDirty) ? this.labelWidth : 0\n const span = this.$createElement('span', {\n domProps: { innerHTML: '&#8203;' },\n })\n\n return this.$createElement('legend', {\n style: {\n width: !this.isSingle ? convertToUnit(width) : undefined,\n },\n }, [span])\n },\n genInput () {\n const listeners = Object.assign({}, this.listeners$)\n delete listeners['change'] // Change should not be bound externally\n\n return this.$createElement('input', {\n style: {},\n domProps: {\n value: (this.type === 'number' && Object.is(this.lazyValue, -0)) ? '-0' : this.lazyValue,\n },\n attrs: {\n ...this.attrs$,\n autofocus: this.autofocus,\n disabled: this.isDisabled,\n id: this.computedId,\n placeholder: this.placeholder,\n readonly: this.isReadonly,\n type: this.type,\n },\n on: Object.assign(listeners, {\n blur: this.onBlur,\n input: this.onInput,\n focus: this.onFocus,\n keydown: this.onKeyDown,\n }),\n ref: 'input',\n })\n },\n genMessages () {\n if (!this.showDetails) return null\n\n const messagesNode = VInput.options.methods.genMessages.call(this)\n const counterNode = this.genCounter()\n\n return this.$createElement('div', {\n staticClass: 'v-text-field__details',\n }, [\n messagesNode,\n counterNode,\n ])\n },\n genTextFieldSlot () {\n return this.$createElement('div', {\n staticClass: 'v-text-field__slot',\n }, [\n this.genLabel(),\n this.prefix ? this.genAffix('prefix') : null,\n this.genInput(),\n this.suffix ? this.genAffix('suffix') : null,\n ])\n },\n genAffix (type: 'prefix' | 'suffix') {\n return this.$createElement('div', {\n class: `v-text-field__${type}`,\n ref: type,\n }, this[type])\n },\n onBlur (e?: Event) {\n this.isFocused = false\n e && this.$nextTick(() => this.$emit('blur', e))\n },\n onClick () {\n if (this.isFocused || this.isDisabled || !this.$refs.input) return\n\n this.$refs.input.focus()\n },\n onFocus (e?: Event) {\n if (!this.$refs.input) return\n\n if (document.activeElement !== this.$refs.input) {\n return this.$refs.input.focus()\n }\n\n if (!this.isFocused) {\n this.isFocused = true\n e && this.$emit('focus', e)\n }\n },\n onInput (e: Event) {\n const target = e.target as HTMLInputElement\n this.internalValue = target.value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n if (e.keyCode === keyCodes.enter) this.$emit('change', this.internalValue)\n\n this.$emit('keydown', e)\n },\n onMouseDown (e: Event) {\n // Prevent input from being blurred\n if (e.target !== this.$refs.input) {\n e.preventDefault()\n e.stopPropagation()\n }\n\n VInput.options.methods.onMouseDown.call(this, e)\n },\n onMouseUp (e: Event) {\n if (this.hasMouseDown) this.focus()\n\n VInput.options.methods.onMouseUp.call(this, e)\n },\n setLabelWidth () {\n if (!this.outlined) return\n\n this.labelWidth = this.$refs.label\n ? Math.min(this.$refs.label.scrollWidth * 0.75 + 6, (this.$el as HTMLElement).offsetWidth - 24)\n : 0\n },\n setPrefixWidth () {\n if (!this.$refs.prefix) return\n\n this.prefixWidth = this.$refs.prefix.offsetWidth\n },\n setPrependWidth () {\n if (!this.outlined || !this.$refs['prepend-inner']) return\n\n this.prependWidth = this.$refs['prepend-inner'].offsetWidth\n },\n tryAutofocus () {\n if (\n !this.autofocus ||\n typeof document === 'undefined' ||\n !this.$refs.input ||\n document.activeElement === this.$refs.input\n ) return false\n\n this.$refs.input.focus()\n\n return true\n },\n updateValue (val: boolean) {\n // Sets validationState from validatable\n this.hasColor = val\n\n if (val) {\n this.initialValue = this.lazyValue\n } else if (this.initialValue !== this.lazyValue) {\n this.$emit('change', this.lazyValue)\n }\n },\n },\n})\n","import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'comparable',\n props: {\n valueComparator: {\n type: Function,\n default: deepEqual,\n } as PropValidator<typeof deepEqual>,\n },\n})\n","import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'filterable',\n\n props: {\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n },\n})\n","// Styles\nimport '../VTextField/VTextField.sass'\nimport './VSelect.sass'\n\n// Components\nimport VChip from '../VChip'\nimport VMenu from '../VMenu'\nimport VSelectList from './VSelectList'\n\n// Extensions\nimport VInput from '../VInput'\nimport VTextField from '../VTextField/VTextField'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Filterable from '../../mixins/filterable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { getPropertyFromItem, getObjectValueByPath, keyCodes } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { VNode, VNodeDirective, PropType, VNodeData } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { SelectItemKey } from 'vuetify/types'\n\nexport const defaultMenuProps = {\n closeOnClick: false,\n closeOnContentClick: false,\n disableKeys: true,\n openOnClick: false,\n maxHeight: 304,\n}\n\n// Types\nconst baseMixins = mixins(\n VTextField,\n Comparable,\n Filterable\n)\n\ninterface options extends InstanceType<typeof baseMixins> {\n $refs: {\n menu: InstanceType<typeof VMenu>\n label: HTMLElement\n input: HTMLInputElement\n 'prepend-inner': HTMLElement\n 'append-inner': HTMLElement\n prefix: HTMLElement\n suffix: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default baseMixins.extend<options>().extend({\n name: 'v-select',\n\n directives: {\n ClickOutside,\n },\n\n props: {\n appendIcon: {\n type: String,\n default: '$dropdown',\n },\n attach: {\n type: null as unknown as PropType<string | boolean | Element | VNode>,\n default: false,\n },\n cacheItems: Boolean,\n chips: Boolean,\n clearable: Boolean,\n deletableChips: Boolean,\n disableLookup: Boolean,\n eager: Boolean,\n hideSelected: Boolean,\n items: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n itemColor: {\n type: String,\n default: 'primary',\n },\n itemDisabled: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'disabled',\n },\n itemText: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'text',\n },\n itemValue: {\n type: [String, Array, Function] as PropType<SelectItemKey>,\n default: 'value',\n },\n menuProps: {\n type: [String, Array, Object],\n default: () => defaultMenuProps,\n },\n multiple: Boolean,\n openOnClear: Boolean,\n returnObject: Boolean,\n smallChips: Boolean,\n },\n\n data () {\n return {\n cachedItems: this.cacheItems ? this.items : [],\n menuIsBooted: false,\n isMenuActive: false,\n lastItem: 20,\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n lazyValue: this.value !== undefined\n ? this.value\n : this.multiple ? [] : undefined,\n selectedIndex: -1,\n selectedItems: [] as any[],\n keyboardLookupPrefix: '',\n keyboardLookupLastTime: 0,\n }\n },\n\n computed: {\n /* All items that the select has */\n allItems (): object[] {\n return this.filterDuplicates(this.cachedItems.concat(this.items))\n },\n classes (): object {\n return {\n ...VTextField.options.computed.classes.call(this),\n 'v-select': true,\n 'v-select--chips': this.hasChips,\n 'v-select--chips--small': this.smallChips,\n 'v-select--is-menu-active': this.isMenuActive,\n 'v-select--is-multi': this.multiple,\n }\n },\n /* Used by other components to overwrite */\n computedItems (): object[] {\n return this.allItems\n },\n computedOwns (): string {\n return `list-${this._uid}`\n },\n computedCounterValue (): number {\n return this.multiple\n ? this.selectedItems.length\n : (this.getText(this.selectedItems[0]) || '').toString().length\n },\n directives (): VNodeDirective[] | undefined {\n return this.isFocused ? [{\n name: 'click-outside',\n value: {\n handler: this.blur,\n closeConditional: this.closeConditional,\n },\n }] : undefined\n },\n dynamicHeight () {\n return 'auto'\n },\n hasChips (): boolean {\n return this.chips || this.smallChips\n },\n hasSlot (): boolean {\n return Boolean(this.hasChips || this.$scopedSlots.selection)\n },\n isDirty (): boolean {\n return this.selectedItems.length > 0\n },\n listData (): object {\n const scopeId = this.$vnode && (this.$vnode.context!.$options as { [key: string]: any })._scopeId\n const attrs = scopeId ? {\n [scopeId]: true,\n } : {}\n\n return {\n attrs: {\n ...attrs,\n id: this.computedOwns,\n },\n props: {\n action: this.multiple,\n color: this.itemColor,\n dense: this.dense,\n hideSelected: this.hideSelected,\n items: this.virtualizedItems,\n itemDisabled: this.itemDisabled,\n itemText: this.itemText,\n itemValue: this.itemValue,\n noDataText: this.$vuetify.lang.t(this.noDataText),\n selectedItems: this.selectedItems,\n },\n on: {\n select: this.selectItem,\n },\n scopedSlots: {\n item: this.$scopedSlots.item,\n },\n }\n },\n staticList (): VNode {\n if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n consoleError('assert: staticList should not be called if slots are used')\n }\n\n return this.$createElement(VSelectList, this.listData)\n },\n virtualizedItems (): object[] {\n return (this.$_menuProps as any).auto\n ? this.computedItems\n : this.computedItems.slice(0, this.lastItem)\n },\n menuCanShow: () => true,\n $_menuProps (): object {\n let normalisedProps = typeof this.menuProps === 'string'\n ? this.menuProps.split(',')\n : this.menuProps\n\n if (Array.isArray(normalisedProps)) {\n normalisedProps = normalisedProps.reduce((acc, p) => {\n acc[p.trim()] = true\n return acc\n }, {})\n }\n\n return {\n ...defaultMenuProps,\n eager: this.eager,\n value: this.menuCanShow && this.isMenuActive,\n nudgeBottom: normalisedProps.offsetY ? 1 : 0, // convert to int\n ...normalisedProps,\n }\n },\n },\n\n watch: {\n internalValue (val) {\n this.initialValue = val\n this.setSelectedItems()\n },\n isMenuActive (val) {\n window.setTimeout(() => this.onMenuActiveChange(val))\n },\n items: {\n immediate: true,\n handler (val) {\n if (this.cacheItems) {\n // Breaks vue-test-utils if\n // this isn't calculated\n // on the next tick\n this.$nextTick(() => {\n this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))\n })\n }\n\n this.setSelectedItems()\n },\n },\n },\n\n methods: {\n /** @public */\n blur (e?: Event) {\n VTextField.options.methods.blur.call(this, e)\n this.isMenuActive = false\n this.isFocused = false\n this.selectedIndex = -1\n },\n /** @public */\n activateMenu () {\n if (\n !this.isInteractive ||\n this.isMenuActive\n ) return\n\n this.isMenuActive = true\n },\n clearableCallback () {\n this.setValue(this.multiple ? [] : undefined)\n this.setMenuIndex(-1)\n this.$nextTick(() => this.$refs.input && this.$refs.input.focus())\n\n if (this.openOnClear) this.isMenuActive = true\n },\n closeConditional (e: Event) {\n if (!this.isMenuActive) return true\n\n return (\n !this._isDestroyed &&\n\n // Click originates from outside the menu content\n // Multiple selects don't close when an item is clicked\n (!this.getContent() ||\n !this.getContent().contains(e.target as Node)) &&\n\n // Click originates from outside the element\n this.$el &&\n !this.$el.contains(e.target as Node) &&\n e.target !== this.$el\n )\n },\n filterDuplicates (arr: any[]) {\n const uniqueValues = new Map()\n for (let index = 0; index < arr.length; ++index) {\n const item = arr[index]\n const val = this.getValue(item)\n\n // TODO: comparator\n !uniqueValues.has(val) && uniqueValues.set(val, item)\n }\n return Array.from(uniqueValues.values())\n },\n findExistingIndex (item: object) {\n const itemValue = this.getValue(item)\n\n return (this.internalValue || []).findIndex((i: object) => this.valueComparator(this.getValue(i), itemValue))\n },\n getContent () {\n return this.$refs.menu && this.$refs.menu.$refs.content\n },\n genChipSelection (item: object, index: number) {\n const isDisabled = (\n !this.isInteractive ||\n this.getDisabled(item)\n )\n\n return this.$createElement(VChip, {\n staticClass: 'v-chip--select',\n attrs: { tabindex: -1 },\n props: {\n close: this.deletableChips && !isDisabled,\n disabled: isDisabled,\n inputValue: index === this.selectedIndex,\n small: this.smallChips,\n },\n on: {\n click: (e: MouseEvent) => {\n if (isDisabled) return\n\n e.stopPropagation()\n\n this.selectedIndex = index\n },\n 'click:close': () => this.onChipInput(item),\n },\n key: JSON.stringify(this.getValue(item)),\n }, this.getText(item))\n },\n genCommaSelection (item: object, index: number, last: boolean) {\n const color = index === this.selectedIndex && this.computedColor\n const isDisabled = (\n !this.isInteractive ||\n this.getDisabled(item)\n )\n\n return this.$createElement('div', this.setTextColor(color, {\n staticClass: 'v-select__selection v-select__selection--comma',\n class: {\n 'v-select__selection--disabled': isDisabled,\n },\n key: JSON.stringify(this.getValue(item)),\n }), `${this.getText(item)}${last ? '' : ', '}`)\n },\n genDefaultSlot (): (VNode | VNode[] | null)[] {\n const selections = this.genSelections()\n const input = this.genInput()\n\n // If the return is an empty array\n // push the input\n if (Array.isArray(selections)) {\n selections.push(input)\n // Otherwise push it into children\n } else {\n selections.children = selections.children || []\n selections.children.push(input)\n }\n\n return [\n this.genFieldset(),\n this.$createElement('div', {\n staticClass: 'v-select__slot',\n directives: this.directives,\n }, [\n this.genLabel(),\n this.prefix ? this.genAffix('prefix') : null,\n selections,\n this.suffix ? this.genAffix('suffix') : null,\n this.genClearIcon(),\n this.genIconSlot(),\n this.genHiddenInput(),\n ]),\n this.genMenu(),\n this.genProgress(),\n ]\n },\n genIcon (\n type: string,\n cb?: (e: Event) => void,\n extraData?: VNodeData\n ) {\n const icon = VInput.options.methods.genIcon.call(this, type, cb, extraData)\n\n if (type === 'append') {\n // Don't allow the dropdown icon to be focused\n icon.children![0].data = mergeData(icon.children![0].data!, {\n attrs: {\n tabindex: icon.children![0].componentOptions!.listeners && '-1',\n 'aria-hidden': 'true',\n 'aria-label': undefined,\n },\n })\n }\n\n return icon\n },\n genInput (): VNode {\n const input = VTextField.options.methods.genInput.call(this)\n\n delete input.data!.attrs!.name\n\n input.data = mergeData(input.data!, {\n domProps: { value: null },\n attrs: {\n readonly: true,\n type: 'text',\n 'aria-readonly': String(this.isReadonly),\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n on: { keypress: this.onKeyPress },\n })\n\n return input\n },\n genHiddenInput (): VNode {\n return this.$createElement('input', {\n domProps: { value: this.lazyValue },\n attrs: {\n type: 'hidden',\n name: this.attrs$.name,\n },\n })\n },\n genInputSlot (): VNode {\n const render = VTextField.options.methods.genInputSlot.call(this)\n\n render.data!.attrs = {\n ...render.data!.attrs,\n role: 'button',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': String(this.isMenuActive),\n 'aria-owns': this.computedOwns,\n }\n\n return render\n },\n genList (): VNode {\n // If there's no slots, we can use a cached VNode to improve performance\n if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {\n return this.genListWithSlot()\n } else {\n return this.staticList\n }\n },\n genListWithSlot (): VNode {\n const slots = ['prepend-item', 'no-data', 'append-item']\n .filter(slotName => this.$slots[slotName])\n .map(slotName => this.$createElement('template', {\n slot: slotName,\n }, this.$slots[slotName]))\n // Requires destructuring due to Vue\n // modifying the `on` property when passed\n // as a referenced object\n return this.$createElement(VSelectList, {\n ...this.listData,\n }, slots)\n },\n genMenu (): VNode {\n const props = this.$_menuProps as any\n props.activator = this.$refs['input-slot']\n\n // Attach to root el so that\n // menu covers prepend/append icons\n if (\n // TODO: make this a computed property or helper or something\n this.attach === '' || // If used as a boolean prop (<v-menu attach>)\n this.attach === true || // If bound to a boolean (<v-menu :attach=\"true\">)\n this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))\n ) {\n props.attach = this.$el\n } else {\n props.attach = this.attach\n }\n\n return this.$createElement(VMenu, {\n attrs: { role: undefined },\n props,\n on: {\n input: (val: boolean) => {\n this.isMenuActive = val\n this.isFocused = val\n },\n scroll: this.onScroll,\n },\n ref: 'menu',\n }, [this.genList()])\n },\n genSelections (): VNode {\n let length = this.selectedItems.length\n const children = new Array(length)\n\n let genSelection\n if (this.$scopedSlots.selection) {\n genSelection = this.genSlotSelection\n } else if (this.hasChips) {\n genSelection = this.genChipSelection\n } else {\n genSelection = this.genCommaSelection\n }\n\n while (length--) {\n children[length] = genSelection(\n this.selectedItems[length],\n length,\n length === children.length - 1\n )\n }\n\n return this.$createElement('div', {\n staticClass: 'v-select__selections',\n }, children)\n },\n genSlotSelection (item: object, index: number): VNode[] | undefined {\n return this.$scopedSlots.selection!({\n attrs: {\n class: 'v-chip--select',\n },\n parent: this,\n item,\n index,\n select: (e: Event) => {\n e.stopPropagation()\n this.selectedIndex = index\n },\n selected: index === this.selectedIndex,\n disabled: !this.isInteractive,\n })\n },\n getMenuIndex () {\n return this.$refs.menu ? (this.$refs.menu as { [key: string]: any }).listIndex : -1\n },\n getDisabled (item: object) {\n return getPropertyFromItem(item, this.itemDisabled, false)\n },\n getText (item: object) {\n return getPropertyFromItem(item, this.itemText, item)\n },\n getValue (item: object) {\n return getPropertyFromItem(item, this.itemValue, this.getText(item))\n },\n onBlur (e?: Event) {\n e && this.$emit('blur', e)\n },\n onChipInput (item: object) {\n if (this.multiple) this.selectItem(item)\n else this.setValue(null)\n // If all items have been deleted,\n // open `v-menu`\n if (this.selectedItems.length === 0) {\n this.isMenuActive = true\n } else {\n this.isMenuActive = false\n }\n this.selectedIndex = -1\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n if (!this.isAppendInner(e.target)) {\n this.isMenuActive = true\n }\n\n if (!this.isFocused) {\n this.isFocused = true\n this.$emit('focus')\n }\n\n this.$emit('click', e)\n },\n onEscDown (e: Event) {\n e.preventDefault()\n if (this.isMenuActive) {\n e.stopPropagation()\n this.isMenuActive = false\n }\n },\n onKeyPress (e: KeyboardEvent) {\n if (\n this.multiple ||\n !this.isInteractive ||\n this.disableLookup\n ) return\n\n const KEYBOARD_LOOKUP_THRESHOLD = 1000 // milliseconds\n const now = performance.now()\n if (now - this.keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n this.keyboardLookupPrefix = ''\n }\n this.keyboardLookupPrefix += e.key.toLowerCase()\n this.keyboardLookupLastTime = now\n\n const index = this.allItems.findIndex(item => {\n const text = (this.getText(item) || '').toString()\n\n return text.toLowerCase().startsWith(this.keyboardLookupPrefix)\n })\n const item = this.allItems[index]\n if (index !== -1) {\n this.lastItem = Math.max(this.lastItem, index + 5)\n this.setValue(this.returnObject ? item : this.getValue(item))\n this.$nextTick(() => this.$refs.menu.getTiles())\n setTimeout(() => this.setMenuIndex(index))\n }\n },\n onKeyDown (e: KeyboardEvent) {\n if (this.isReadonly && e.keyCode !== keyCodes.tab) return\n\n const keyCode = e.keyCode\n const menu = this.$refs.menu\n\n // If enter, space, open menu\n if ([\n keyCodes.enter,\n keyCodes.space,\n ].includes(keyCode)) this.activateMenu()\n\n this.$emit('keydown', e)\n\n if (!menu) return\n\n // If menu is active, allow default\n // listIndex change from menu\n if (this.isMenuActive && keyCode !== keyCodes.tab) {\n this.$nextTick(() => {\n menu.changeListIndex(e)\n this.$emit('update:list-index', menu.listIndex)\n })\n }\n\n // If menu is not active, up and down can do\n // one of 2 things. If multiple, opens the\n // menu, if not, will cycle through all\n // available options\n if (\n !this.isMenuActive &&\n [keyCodes.up, keyCodes.down].includes(keyCode)\n ) return this.onUpDown(e)\n\n // If escape deactivate the menu\n if (keyCode === keyCodes.esc) return this.onEscDown(e)\n\n // If tab - select item or close menu\n if (keyCode === keyCodes.tab) return this.onTabDown(e)\n\n // If space preventDefault\n if (keyCode === keyCodes.space) return this.onSpaceDown(e)\n },\n onMenuActiveChange (val: boolean) {\n // If menu is closing and mulitple\n // or menuIndex is already set\n // skip menu index recalculation\n if (\n (this.multiple && !val) ||\n this.getMenuIndex() > -1\n ) return\n\n const menu = this.$refs.menu\n\n if (!menu || !this.isDirty) return\n\n // When menu opens, set index of first active item\n for (let i = 0; i < menu.tiles.length; i++) {\n if (menu.tiles[i].getAttribute('aria-selected') === 'true') {\n this.setMenuIndex(i)\n break\n }\n }\n },\n onMouseUp (e: MouseEvent) {\n if (\n this.hasMouseDown &&\n e.which !== 3 &&\n this.isInteractive\n ) {\n // If append inner is present\n // and the target is itself\n // or inside, toggle menu\n if (this.isAppendInner(e.target)) {\n this.$nextTick(() => (this.isMenuActive = !this.isMenuActive))\n // If user is clicking in the container\n // and field is enclosed, activate it\n } else if (this.isEnclosed) {\n this.isMenuActive = true\n }\n }\n\n VTextField.options.methods.onMouseUp.call(this, e)\n },\n onScroll () {\n if (!this.isMenuActive) {\n requestAnimationFrame(() => (this.getContent().scrollTop = 0))\n } else {\n if (this.lastItem > this.computedItems.length) return\n\n const showMoreItems = (\n this.getContent().scrollHeight -\n (this.getContent().scrollTop +\n this.getContent().clientHeight)\n ) < 200\n\n if (showMoreItems) {\n this.lastItem += 20\n }\n }\n },\n onSpaceDown (e: KeyboardEvent) {\n e.preventDefault()\n },\n onTabDown (e: KeyboardEvent) {\n const menu = this.$refs.menu\n\n if (!menu) return\n\n const activeTile = menu.activeTile\n\n // An item that is selected by\n // menu-index should toggled\n if (\n !this.multiple &&\n activeTile &&\n this.isMenuActive\n ) {\n e.preventDefault()\n e.stopPropagation()\n\n activeTile.click()\n } else {\n // If we make it here,\n // the user has no selected indexes\n // and is probably tabbing out\n this.blur(e)\n }\n },\n onUpDown (e: KeyboardEvent) {\n const menu = this.$refs.menu\n\n if (!menu) return\n\n e.preventDefault()\n\n // Multiple selects do not cycle their value\n // when pressing up or down, instead activate\n // the menu\n if (this.multiple) return this.activateMenu()\n\n const keyCode = e.keyCode\n\n // Cycle through available values to achieve\n // select native behavior\n menu.isBooted = true\n\n window.requestAnimationFrame(() => {\n menu.getTiles()\n keyCodes.up === keyCode ? menu.prevTile() : menu.nextTile()\n menu.activeTile && menu.activeTile.click()\n })\n },\n selectItem (item: object) {\n if (!this.multiple) {\n this.setValue(this.returnObject ? item : this.getValue(item))\n this.isMenuActive = false\n } else {\n const internalValue = (this.internalValue || []).slice()\n const i = this.findExistingIndex(item)\n\n i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item)\n this.setValue(internalValue.map((i: object) => {\n return this.returnObject ? i : this.getValue(i)\n }))\n\n // When selecting multiple\n // adjust menu after each\n // selection\n this.$nextTick(() => {\n this.$refs.menu &&\n (this.$refs.menu as { [key: string]: any }).updateDimensions()\n })\n\n // We only need to reset list index for multiple\n // to keep highlight when an item is toggled\n // on and off\n if (!this.multiple) return\n\n const listIndex = this.getMenuIndex()\n\n this.setMenuIndex(-1)\n\n // There is no item to re-highlight\n // when selections are hidden\n if (this.hideSelected) return\n\n this.$nextTick(() => this.setMenuIndex(listIndex))\n }\n },\n setMenuIndex (index: number) {\n this.$refs.menu && ((this.$refs.menu as { [key: string]: any }).listIndex = index)\n },\n setSelectedItems () {\n const selectedItems = []\n const values = !this.multiple || !Array.isArray(this.internalValue)\n ? [this.internalValue]\n : this.internalValue\n\n for (const value of values) {\n const index = this.allItems.findIndex(v => this.valueComparator(\n this.getValue(v),\n this.getValue(value)\n ))\n\n if (index > -1) {\n selectedItems.push(this.allItems[index])\n }\n }\n\n this.selectedItems = selectedItems\n },\n setValue (value: any) {\n const oldValue = this.internalValue\n this.internalValue = value\n value !== oldValue && this.$emit('change', value)\n },\n isAppendInner (target: any) {\n // return true if append inner is present\n // and the target is itself or inside\n const appendInner = this.$refs['append-inner']\n\n return appendInner && (appendInner === target || appendInner.contains(target))\n },\n },\n})\n","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType<string | undefined>,\n default: undefined,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | undefined {\n return this.lazySearch\n },\n set (val: any) {\n this.lazySearch = val\n\n this.$emit('update:search-input', val)\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = undefined\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n this.setMenuIndex(-1)\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n this.setMenuIndex(0)\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : undefined)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = undefined\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n VSelect.options.methods.onKeyDown.call(this, e)\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (!this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (!this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData!.setData('text/plain', currentItemText)\n event.clipboardData!.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n","// Styles\nimport '../VAutocomplete/VAutocomplete.sass'\n\n// Extensions\nimport VSelect from '../VSelect/VSelect'\nimport VAutocomplete from '../VAutocomplete/VAutocomplete'\n\n// Utils\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\n\n/* @vue/component */\nexport default VAutocomplete.extend({\n name: 'v-combobox',\n\n props: {\n delimiters: {\n type: Array,\n default: () => ([]),\n } as PropValidator<string[]>,\n returnObject: {\n type: Boolean,\n default: true,\n },\n },\n\n data: () => ({\n editingIndex: -1,\n }),\n\n computed: {\n computedCounterValue (): number {\n return this.multiple\n ? this.selectedItems.length\n : (this.internalSearch || '').toString().length\n },\n hasSlot (): boolean {\n return VSelect.options.computed.hasSlot.call(this) || this.multiple\n },\n isAnyValueAllowed (): boolean {\n return true\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems ||\n (!!this.$slots['no-data'] && !this.hideNoData)\n },\n },\n\n methods: {\n onInternalSearchChanged (val: any) {\n if (\n val &&\n this.multiple &&\n this.delimiters.length\n ) {\n const delimiter = this.delimiters.find(d => val.endsWith(d))\n if (delimiter != null) {\n this.internalSearch = val.slice(0, val.length - delimiter.length)\n this.updateTags()\n }\n }\n\n this.updateMenuDimensions()\n },\n genInput () {\n const input = VAutocomplete.options.methods.genInput.call(this)\n\n delete input.data!.attrs!.name\n input.data!.on!.paste = this.onPaste\n\n return input\n },\n genChipSelection (item: object, index: number) {\n const chip = VSelect.options.methods.genChipSelection.call(this, item, index)\n\n // Allow user to update an existing value\n if (this.multiple) {\n chip.componentOptions!.listeners! = {\n ...chip.componentOptions!.listeners!,\n dblclick: () => {\n this.editingIndex = index\n this.internalSearch = this.getText(item)\n this.selectedIndex = -1\n },\n }\n }\n\n return chip\n },\n onChipInput (item: object) {\n VSelect.options.methods.onChipInput.call(this, item)\n\n this.editingIndex = -1\n },\n // Requires a manual definition\n // to overwrite removal in v-autocomplete\n onEnterDown (e: Event) {\n e.preventDefault()\n // If has menu index, let v-select-list handle\n if (this.getMenuIndex() > -1) return\n\n this.$nextTick(this.updateSelf)\n },\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n if (!this.autoSelectFirst) return\n\n VAutocomplete.options.methods.onFilteredItemsChanged.call(this, val, oldVal)\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n VSelect.options.methods.onKeyDown.call(this, e)\n\n // If user is at selection index of 0\n // create a new tag\n if (this.multiple &&\n keyCode === keyCodes.left &&\n this.$refs.input.selectionStart === 0\n ) {\n this.updateSelf()\n } else if (keyCode === keyCodes.enter) {\n this.onEnterDown(e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onTabDown (e: KeyboardEvent) {\n // When adding tags, if searching and\n // there is not a filtered options,\n // add the value to the tags list\n if (this.multiple &&\n this.internalSearch &&\n this.getMenuIndex() === -1\n ) {\n e.preventDefault()\n e.stopPropagation()\n\n return this.updateTags()\n }\n\n VAutocomplete.options.methods.onTabDown.call(this, e)\n },\n selectItem (item: object) {\n // Currently only supports items:<string[]>\n if (this.editingIndex > -1) {\n this.updateEditing()\n } else {\n VAutocomplete.options.methods.selectItem.call(this, item)\n }\n },\n setSelectedItems () {\n if (this.internalValue == null ||\n this.internalValue === ''\n ) {\n this.selectedItems = []\n } else {\n this.selectedItems = this.multiple ? this.internalValue : [this.internalValue]\n }\n },\n setValue (value?: any) {\n VSelect.options.methods.setValue.call(this, value ?? this.internalSearch)\n },\n updateEditing () {\n const value = this.internalValue.slice()\n value[this.editingIndex] = this.internalSearch\n\n this.setValue(value)\n\n this.editingIndex = -1\n },\n updateCombobox () {\n const isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips\n\n // If search is not dirty and is\n // using slot, do nothing\n if (isUsingSlot && !this.searchIsDirty) return\n\n // The internal search is not matching\n // the internal value, update the input\n if (this.internalSearch !== this.getText(this.internalValue)) this.setValue()\n\n // Reset search if using slot\n // to avoid a double input\n if (isUsingSlot) this.internalSearch = undefined\n },\n updateSelf () {\n this.multiple ? this.updateTags() : this.updateCombobox()\n },\n updateTags () {\n const menuIndex = this.getMenuIndex()\n\n // If the user is not searching\n // and no menu item is selected\n // do nothing\n if (menuIndex < 0 &&\n !this.searchIsDirty\n ) return\n\n if (this.editingIndex > -1) {\n return this.updateEditing()\n }\n\n const index = this.selectedItems.indexOf(this.internalSearch)\n // If it already exists, do nothing\n // this might need to change to bring\n // the duplicated item to the last entered\n if (index > -1) {\n const internalValue = this.internalValue.slice()\n internalValue.splice(index, 1)\n\n this.setValue(internalValue)\n }\n\n // If menu index is greater than 1\n // the selection is handled elsewhere\n // TODO: find out where\n if (menuIndex > -1) return (this.internalSearch = null)\n\n this.selectItem(this.internalSearch)\n this.internalSearch = null\n },\n onPaste (event: ClipboardEvent) {\n if (!this.multiple || this.searchIsDirty) return\n\n const pastedItemText = event.clipboardData!.getData('text/vnd.vuetify.autocomplete.item+plain')\n if (pastedItemText && this.findExistingIndex(pastedItemText as any) === -1) {\n event.preventDefault()\n VSelect.options.methods.selectItem.call(this, pastedItemText as any)\n }\n },\n },\n})\n","// Helpers\nimport { wrapInArray, sortItems, deepEqual, groupItems, searchItems, fillArray } from '../../util/helpers'\nimport Vue, { VNode } from 'vue'\n\n// Types\nimport {\n DataOptions,\n DataPagination,\n DataScopeProps,\n DataSortFunction,\n DataGroupFunction,\n DataSearchFunction,\n ItemGroup,\n} from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n name: 'v-data',\n\n inheritAttrs: false,\n\n props: {\n items: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n options: {\n type: Object,\n default: () => ({}),\n } as PropValidator<Partial<DataOptions>>,\n sortBy: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<string | string[]>,\n sortDesc: {\n type: [Boolean, Array],\n default: () => [],\n } as PropValidator<boolean | boolean[]>,\n customSort: {\n type: Function,\n default: sortItems,\n } as PropValidator<DataSortFunction>,\n mustSort: Boolean,\n multiSort: Boolean,\n page: {\n type: Number,\n default: 1,\n },\n itemsPerPage: {\n type: Number,\n default: 10,\n },\n groupBy: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<string | string[]>,\n groupDesc: {\n type: [Boolean, Array],\n default: () => [],\n } as PropValidator<boolean | boolean[]>,\n customGroup: {\n type: Function,\n default: groupItems,\n } as PropValidator<DataGroupFunction>,\n locale: {\n type: String,\n default: 'en-US',\n },\n disableSort: Boolean,\n disablePagination: Boolean,\n disableFiltering: Boolean,\n search: String,\n customFilter: {\n type: Function,\n default: searchItems,\n } as PropValidator<DataSearchFunction>,\n serverItemsLength: {\n type: Number,\n default: -1,\n },\n },\n\n data () {\n let internalOptions: DataOptions = {\n page: this.page,\n itemsPerPage: this.itemsPerPage,\n sortBy: wrapInArray(this.sortBy),\n sortDesc: wrapInArray(this.sortDesc),\n groupBy: wrapInArray(this.groupBy),\n groupDesc: wrapInArray(this.groupDesc),\n mustSort: this.mustSort,\n multiSort: this.multiSort,\n }\n\n if (this.options) {\n internalOptions = Object.assign(internalOptions, this.options)\n }\n\n const { sortBy, sortDesc, groupBy, groupDesc } = internalOptions\n const sortDiff = sortBy.length - sortDesc.length\n const groupDiff = groupBy.length - groupDesc.length\n\n if (sortDiff > 0) {\n internalOptions.sortDesc.push(...fillArray(sortDiff, false))\n }\n\n if (groupDiff > 0) {\n internalOptions.groupDesc.push(...fillArray(groupDiff, false))\n }\n\n return {\n internalOptions,\n }\n },\n\n computed: {\n itemsLength (): number {\n return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length\n },\n pageCount (): number {\n return this.internalOptions.itemsPerPage <= 0\n ? 1\n : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage)\n },\n pageStart (): number {\n if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0\n\n return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage\n },\n pageStop (): number {\n if (this.internalOptions.itemsPerPage === -1) return this.itemsLength\n if (!this.items.length) return 0\n\n return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage)\n },\n isGrouped (): boolean {\n return !!this.internalOptions.groupBy.length\n },\n pagination (): DataPagination {\n return {\n page: this.internalOptions.page,\n itemsPerPage: this.internalOptions.itemsPerPage,\n pageStart: this.pageStart,\n pageStop: this.pageStop,\n pageCount: this.pageCount,\n itemsLength: this.itemsLength,\n }\n },\n filteredItems (): any[] {\n let items = this.items.slice()\n\n if (!this.disableFiltering && this.serverItemsLength <= 0) {\n items = this.customFilter(items, this.search)\n }\n\n return items\n },\n computedItems (): any[] {\n let items = this.filteredItems.slice()\n\n if (!this.disableSort && this.serverItemsLength <= 0) {\n items = this.sortItems(items)\n }\n\n if (!this.disablePagination && this.serverItemsLength <= 0) {\n items = this.paginateItems(items)\n }\n\n return items\n },\n groupedItems (): ItemGroup<any>[] | null {\n return this.isGrouped ? this.groupItems(this.computedItems) : null\n },\n scopedProps (): DataScopeProps {\n const props = {\n sort: this.sort,\n sortArray: this.sortArray,\n group: this.group,\n items: this.computedItems,\n options: this.internalOptions,\n updateOptions: this.updateOptions,\n pagination: this.pagination,\n groupedItems: this.groupedItems,\n originalItemsLength: this.items.length,\n }\n\n return props\n },\n computedOptions (): DataOptions {\n return { ...this.options } as DataOptions\n },\n },\n\n watch: {\n computedOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n\n this.updateOptions(options)\n },\n deep: true,\n immediate: true,\n },\n internalOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n this.$emit('update:options', options)\n },\n deep: true,\n immediate: true,\n },\n page (page: number) {\n this.updateOptions({ page })\n },\n 'internalOptions.page' (page: number) {\n this.$emit('update:page', page)\n },\n itemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage })\n },\n 'internalOptions.itemsPerPage' (itemsPerPage: number) {\n this.$emit('update:items-per-page', itemsPerPage)\n },\n sortBy (sortBy: string | string[]) {\n this.updateOptions({ sortBy: wrapInArray(sortBy) })\n },\n 'internalOptions.sortBy' (sortBy: string[], old: string[]) {\n !deepEqual(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0])\n },\n sortDesc (sortDesc: boolean | boolean[]) {\n this.updateOptions({ sortDesc: wrapInArray(sortDesc) })\n },\n 'internalOptions.sortDesc' (sortDesc: boolean[], old: boolean[]) {\n !deepEqual(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0])\n },\n groupBy (groupBy: string | string[]) {\n this.updateOptions({ groupBy: wrapInArray(groupBy) })\n },\n 'internalOptions.groupBy' (groupBy: string[], old: string[]) {\n !deepEqual(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0])\n },\n groupDesc (groupDesc: boolean | boolean[]) {\n this.updateOptions({ groupDesc: wrapInArray(groupDesc) })\n },\n 'internalOptions.groupDesc' (groupDesc: boolean[], old: boolean[]) {\n !deepEqual(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0])\n },\n multiSort (multiSort: boolean) {\n this.updateOptions({ multiSort })\n },\n 'internalOptions.multiSort' (multiSort: boolean) {\n this.$emit('update:multi-sort', multiSort)\n },\n mustSort (mustSort: boolean) {\n this.updateOptions({ mustSort })\n },\n 'internalOptions.mustSort' (mustSort: boolean) {\n this.$emit('update:must-sort', mustSort)\n },\n pageCount: {\n handler (pageCount: number) {\n this.$emit('page-count', pageCount)\n },\n immediate: true,\n },\n computedItems: {\n handler (computedItems: any[]) {\n this.$emit('current-items', computedItems)\n },\n immediate: true,\n },\n pagination: {\n handler (pagination: DataPagination, old: DataPagination) {\n if (deepEqual(pagination, old)) return\n this.$emit('pagination', this.pagination)\n },\n immediate: true,\n },\n },\n\n methods: {\n toggle (key: string, oldBy: string[], oldDesc: boolean[], page: number, mustSort: boolean, multiSort: boolean) {\n let by = oldBy.slice()\n let desc = oldDesc.slice()\n const byIndex = by.findIndex((k: string) => k === key)\n\n if (byIndex < 0) {\n if (!multiSort) {\n by = []\n desc = []\n }\n\n by.push(key)\n desc.push(false)\n } else if (byIndex >= 0 && !desc[byIndex]) {\n desc[byIndex] = true\n } else if (!mustSort) {\n by.splice(byIndex, 1)\n desc.splice(byIndex, 1)\n } else {\n desc[byIndex] = false\n }\n\n // Reset page to 1 if sortBy or sortDesc have changed\n if (!deepEqual(by, oldBy) || !deepEqual(desc, oldDesc)) {\n page = 1\n }\n\n return { by, desc, page }\n },\n group (key: string): void {\n const { by: groupBy, desc: groupDesc, page } = this.toggle(\n key,\n this.internalOptions.groupBy,\n this.internalOptions.groupDesc,\n this.internalOptions.page,\n true,\n false\n )\n this.updateOptions({ groupBy, groupDesc, page })\n },\n sort (key: string | string[]): void {\n if (Array.isArray(key)) return this.sortArray(key)\n\n const { by: sortBy, desc: sortDesc, page } = this.toggle(\n key,\n this.internalOptions.sortBy,\n this.internalOptions.sortDesc,\n this.internalOptions.page,\n this.internalOptions.mustSort,\n this.internalOptions.multiSort\n )\n this.updateOptions({ sortBy, sortDesc, page })\n },\n sortArray (sortBy: string[]) {\n const sortDesc = sortBy.map(s => {\n const i = this.internalOptions.sortBy.findIndex((k: string) => k === s)\n return i > -1 ? this.internalOptions.sortDesc[i] : false\n })\n\n this.updateOptions({ sortBy, sortDesc })\n },\n updateOptions (options: any) {\n this.internalOptions = {\n ...this.internalOptions,\n ...options,\n page: this.serverItemsLength < 0\n ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount))\n : options.page || this.internalOptions.page,\n }\n },\n sortItems (items: any[]): any[] {\n let sortBy = this.internalOptions.sortBy\n let sortDesc = this.internalOptions.sortDesc\n\n if (this.internalOptions.groupBy.length) {\n sortBy = [...this.internalOptions.groupBy, ...sortBy]\n sortDesc = [...this.internalOptions.groupDesc, ...sortDesc]\n }\n\n return this.customSort(items, sortBy, sortDesc, this.locale)\n },\n groupItems (items: any[]): ItemGroup<any>[] {\n return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc)\n },\n paginateItems (items: any[]): any[] {\n // Make sure we don't try to display non-existant page if items suddenly change\n // TODO: Could possibly move this to pageStart/pageStop?\n if (this.serverItemsLength === -1 && items.length <= this.pageStart) {\n this.internalOptions.page = Math.max(1, this.internalOptions.page - 1)\n }\n\n return items.slice(this.pageStart, this.pageStop)\n },\n },\n\n render (): VNode {\n return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps) as any\n },\n})\n","import './VDataFooter.sass'\n\n// Components\nimport VSelect from '../VSelect/VSelect'\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn'\n\n// Types\nimport Vue, { VNode, VNodeChildrenArrayContents, PropType } from 'vue'\nimport { DataPagination, DataOptions, DataItemsPerPageOption } from 'vuetify/types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n name: 'v-data-footer',\n\n props: {\n options: {\n type: Object as PropType<DataOptions>,\n required: true,\n },\n pagination: {\n type: Object as PropType<DataPagination>,\n required: true,\n },\n itemsPerPageOptions: {\n type: Array,\n default: () => ([5, 10, 15, -1]),\n } as PropValidator<DataItemsPerPageOption[]>,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n firstIcon: {\n type: String,\n default: '$first',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText',\n },\n itemsPerPageAllText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageAll',\n },\n showFirstLastPage: Boolean,\n showCurrentPage: Boolean,\n disablePagination: Boolean,\n disableItemsPerPage: Boolean,\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText',\n },\n },\n\n computed: {\n disableNextPageIcon (): boolean {\n return this.options.itemsPerPage <= 0 ||\n this.options.page * this.options.itemsPerPage >= this.pagination.itemsLength ||\n this.pagination.pageStop < 0\n },\n computedDataItemsPerPageOptions (): any[] {\n return this.itemsPerPageOptions.map(option => {\n if (typeof option === 'object') return option\n else return this.genDataItemsPerPageOption(option)\n })\n },\n },\n\n methods: {\n updateOptions (obj: object) {\n this.$emit('update:options', Object.assign({}, this.options, obj))\n },\n onFirstPage () {\n this.updateOptions({ page: 1 })\n },\n onPreviousPage () {\n this.updateOptions({ page: this.options.page - 1 })\n },\n onNextPage () {\n this.updateOptions({ page: this.options.page + 1 })\n },\n onLastPage () {\n this.updateOptions({ page: this.pagination.pageCount })\n },\n onChangeItemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage, page: 1 })\n },\n genDataItemsPerPageOption (option: number) {\n return {\n text: option === -1 ? this.$vuetify.lang.t(this.itemsPerPageAllText) : String(option),\n value: option,\n }\n },\n genItemsPerPageSelect () {\n let value = this.options.itemsPerPage\n const computedIPPO = this.computedDataItemsPerPageOptions\n\n if (computedIPPO.length <= 1) return null\n\n if (!computedIPPO.find(ippo => ippo.value === value)) value = computedIPPO[0]\n\n return this.$createElement('div', {\n staticClass: 'v-data-footer__select',\n }, [\n this.$vuetify.lang.t(this.itemsPerPageText),\n this.$createElement(VSelect, {\n attrs: {\n 'aria-label': this.itemsPerPageText,\n },\n props: {\n disabled: this.disableItemsPerPage,\n items: computedIPPO,\n value,\n hideDetails: true,\n auto: true,\n minWidth: '75px',\n },\n on: {\n input: this.onChangeItemsPerPage,\n },\n }),\n ])\n },\n genPaginationInfo () {\n let children: VNodeChildrenArrayContents = ['']\n\n if (this.pagination.itemsLength && this.pagination.itemsPerPage) {\n const itemsLength = this.pagination.itemsLength\n const pageStart = this.pagination.pageStart + 1\n const pageStop = itemsLength < this.pagination.pageStop || this.pagination.pageStop < 0\n ? itemsLength\n : this.pagination.pageStop\n\n children = this.$scopedSlots['page-text']\n ? [this.$scopedSlots['page-text']!({ pageStart, pageStop, itemsLength })]\n : [this.$vuetify.lang.t(this.pageText, pageStart, pageStop, itemsLength)]\n }\n\n return this.$createElement('div', {\n class: 'v-data-footer__pagination',\n }, children)\n },\n genIcon (click: Function, disabled: boolean, label: string, icon: string): VNode {\n return this.$createElement(VBtn, {\n props: {\n disabled: disabled || this.disablePagination,\n icon: true,\n text: true,\n // dark: this.dark, // TODO: add mixin\n // light: this.light // TODO: add mixin\n },\n on: {\n click,\n },\n attrs: {\n 'aria-label': label, // TODO: Localization\n },\n }, [this.$createElement(VIcon, icon)])\n },\n genIcons () {\n const before: VNodeChildrenArrayContents = []\n const after: VNodeChildrenArrayContents = []\n\n before.push(this.genIcon(\n this.onPreviousPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.prevPage'),\n this.$vuetify.rtl ? this.nextIcon : this.prevIcon\n ))\n\n after.push(this.genIcon(\n this.onNextPage,\n this.disableNextPageIcon,\n this.$vuetify.lang.t('$vuetify.dataFooter.nextPage'),\n this.$vuetify.rtl ? this.prevIcon : this.nextIcon\n ))\n\n if (this.showFirstLastPage) {\n before.unshift(this.genIcon(\n this.onFirstPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.firstPage'),\n this.$vuetify.rtl ? this.lastIcon : this.firstIcon\n ))\n\n after.push(this.genIcon(\n this.onLastPage,\n this.options.page >= this.pagination.pageCount || this.options.itemsPerPage === -1,\n this.$vuetify.lang.t('$vuetify.dataFooter.lastPage'),\n this.$vuetify.rtl ? this.firstIcon : this.lastIcon\n ))\n }\n\n return [\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-before',\n }, before),\n this.showCurrentPage && this.$createElement('span', [this.options.page.toString()]),\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-after',\n }, after),\n ]\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-data-footer',\n }, [\n this.genItemsPerPageSelect(),\n this.genPaginationInfo(),\n this.genIcons(),\n ])\n },\n})\n","// Components\nimport { VData } from '../VData'\nimport VDataFooter from './VDataFooter'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, camelizeObjectKeys } from '../../util/helpers'\nimport { breaking, removed } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { DataItemProps, DataScopeProps } from 'vuetify/types'\n\n/* @vue/component */\nexport default mixins(\n Mobile,\n Themeable\n).extend({\n name: 'v-data-iterator',\n\n props: {\n ...VData.options.props, // TODO: filter out props not used\n itemKey: {\n type: String,\n default: 'id',\n },\n value: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n singleSelect: Boolean,\n expanded: {\n type: Array,\n default: () => [],\n } as PropValidator<any[]>,\n mobileBreakpoint: {\n ...Mobile.options.props.mobileBreakpoint,\n default: 600,\n },\n singleExpand: Boolean,\n loading: [Boolean, String],\n noResultsText: {\n type: String,\n default: '$vuetify.dataIterator.noResultsText',\n },\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText',\n },\n hideDefaultFooter: Boolean,\n footerProps: Object,\n selectableKey: {\n type: String,\n default: 'isSelectable',\n },\n },\n\n data: () => ({\n selection: {} as Record<string, any>,\n expansion: {} as Record<string, boolean>,\n internalCurrentItems: [] as any[],\n }),\n\n computed: {\n everyItem (): boolean {\n return !!this.selectableItems.length && this.selectableItems.every((i: any) => this.isSelected(i))\n },\n someItems (): boolean {\n return this.selectableItems.some((i: any) => this.isSelected(i))\n },\n sanitizedFooterProps (): Record<string, any> {\n return camelizeObjectKeys(this.footerProps)\n },\n selectableItems (): any[] {\n return this.internalCurrentItems.filter(item => this.isSelectable(item))\n },\n },\n\n watch: {\n value: {\n handler (value: any[]) {\n this.selection = value.reduce((selection, item) => {\n selection[getObjectValueByPath(item, this.itemKey)] = item\n return selection\n }, {})\n },\n immediate: true,\n },\n selection (value: Record<string, boolean>, old: Record<string, boolean>) {\n if (deepEqual(Object.keys(value), Object.keys(old))) return\n\n this.$emit('input', Object.values(value))\n },\n expanded: {\n handler (value: any[]) {\n this.expansion = value.reduce((expansion, item) => {\n expansion[getObjectValueByPath(item, this.itemKey)] = true\n return expansion\n }, {})\n },\n immediate: true,\n },\n expansion (value: Record<string, boolean>, old: Record<string, boolean>) {\n if (deepEqual(value, old)) return\n const keys = Object.keys(value).filter(k => value[k])\n const expanded = !keys.length ? [] : this.items.filter(i => keys.includes(String(getObjectValueByPath(i, this.itemKey))))\n this.$emit('update:expanded', expanded)\n },\n },\n\n created () {\n const breakingProps = [\n ['disable-initial-sort', 'sort-by'],\n ['filter', 'custom-filter'],\n ['pagination', 'options'],\n ['total-items', 'server-items-length'],\n ['hide-actions', 'hide-default-footer'],\n ['rows-per-page-items', 'footer-props.items-per-page-options'],\n ['rows-per-page-text', 'footer-props.items-per-page-text'],\n ['prev-icon', 'footer-props.prev-icon'],\n ['next-icon', 'footer-props.next-icon'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n\n const removedProps = [\n 'expand',\n 'content-class',\n 'content-props',\n 'content-tag',\n ]\n\n /* istanbul ignore next */\n removedProps.forEach(prop => {\n if (this.$attrs.hasOwnProperty(prop)) removed(prop)\n })\n },\n\n methods: {\n toggleSelectAll (value: boolean): void {\n const selection = Object.assign({}, this.selection)\n\n for (let i = 0; i < this.selectableItems.length; i++) {\n const item = this.selectableItems[i]\n\n if (!this.isSelectable(item)) continue\n\n const key = getObjectValueByPath(item, this.itemKey)\n if (value) selection[key] = item\n else delete selection[key]\n }\n\n this.selection = selection\n this.$emit('toggle-select-all', { items: this.internalCurrentItems, value })\n },\n isSelectable (item: any): boolean {\n return getObjectValueByPath(item, this.selectableKey) !== false\n },\n isSelected (item: any): boolean {\n return !!this.selection[getObjectValueByPath(item, this.itemKey)] || false\n },\n select (item: any, value = true, emit = true): void {\n if (!this.isSelectable(item)) return\n\n const selection = this.singleSelect ? {} : Object.assign({}, this.selection)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) selection[key] = item\n else delete selection[key]\n\n if (this.singleSelect && emit) {\n const keys = Object.keys(this.selection)\n const old = keys.length && getObjectValueByPath(this.selection[keys[0]], this.itemKey)\n old && old !== key && this.$emit('item-selected', { item: this.selection[old], value: false })\n }\n this.selection = selection\n emit && this.$emit('item-selected', { item, value })\n },\n isExpanded (item: any): boolean {\n return this.expansion[getObjectValueByPath(item, this.itemKey)] || false\n },\n expand (item: any, value = true): void {\n const expansion = this.singleExpand ? {} : Object.assign({}, this.expansion)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) expansion[key] = true\n else delete expansion[key]\n\n this.expansion = expansion\n this.$emit('item-expanded', { item, value })\n },\n createItemProps (item: any): DataItemProps {\n return {\n item,\n select: (v: boolean) => this.select(item, v),\n isSelected: this.isSelected(item),\n expand: (v: boolean) => this.expand(item, v),\n isExpanded: this.isExpanded(item),\n isMobile: this.isMobile,\n }\n },\n genEmptyWrapper (content: VNodeChildren) {\n return this.$createElement('div', content)\n },\n genEmpty (originalItemsLength: number, filteredItemsLength: number) {\n if (originalItemsLength === 0 && this.loading) {\n const loading = this.$slots['loading'] || this.$vuetify.lang.t(this.loadingText)\n return this.genEmptyWrapper(loading)\n } else if (originalItemsLength === 0) {\n const noData = this.$slots['no-data'] || this.$vuetify.lang.t(this.noDataText)\n return this.genEmptyWrapper(noData)\n } else if (filteredItemsLength === 0) {\n const noResults = this.$slots['no-results'] || this.$vuetify.lang.t(this.noResultsText)\n return this.genEmptyWrapper(noResults)\n }\n\n return null\n },\n genItems (props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n if (this.$scopedSlots.default) {\n return this.$scopedSlots.default({\n ...props,\n isSelected: this.isSelected,\n select: this.select,\n isExpanded: this.isExpanded,\n expand: this.expand,\n })\n }\n\n if (this.$scopedSlots.item) {\n return props.items.map((item: any) => this.$scopedSlots.item!(this.createItemProps(item)))\n }\n\n return []\n },\n genFooter (props: DataScopeProps) {\n if (this.hideDefaultFooter) return null\n\n const data = {\n props: {\n ...this.sanitizedFooterProps,\n options: props.options,\n pagination: props.pagination,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n }\n\n const scopedSlots = getPrefixedScopedSlots('footer.', this.$scopedSlots)\n\n return this.$createElement(VDataFooter, {\n scopedSlots,\n ...data,\n })\n },\n genDefaultScopedSlot (props: any) {\n const outerProps = {\n ...props,\n someItems: this.someItems,\n everyItem: this.everyItem,\n toggleSelectAll: this.toggleSelectAll,\n }\n\n return this.$createElement('div', {\n staticClass: 'v-data-iterator',\n }, [\n getSlot(this, 'header', outerProps, true),\n this.genItems(props),\n this.genFooter(props),\n getSlot(this, 'footer', outerProps, true),\n ])\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: this.$props,\n on: {\n 'update:options': (v: any, old: any) => !deepEqual(v, old) && this.$emit('update:options', v),\n 'update:page': (v: any) => this.$emit('update:page', v),\n 'update:items-per-page': (v: any) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: any) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: any) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: any) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: any) => this.$emit('update:group-desc', v),\n pagination: (v: any, old: any) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot,\n },\n })\n },\n})\n","import { VDataTable } from '../'\nimport VIcon from '../../VIcon'\nimport VSimpleCheckbox from '../../VCheckbox/VSimpleCheckbox'\nimport ripple from '../../../directives/ripple'\n\nimport Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../../util/mixins'\nimport { DataOptions, DataTableHeader } from 'vuetify/types'\n\ntype VDataTableInstance = InstanceType<typeof VDataTable>\n\ninterface options extends Vue {\n dataTable: VDataTableInstance\n}\n\nexport default mixins<options>().extend({\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => ([]),\n } as PropValidator<DataTableHeader[]>,\n options: {\n type: Object,\n default: () => ({\n page: 1,\n itemsPerPage: 10,\n sortBy: [],\n sortDesc: [],\n groupBy: [],\n groupDesc: [],\n multiSort: false,\n mustSort: false,\n }),\n } as PropValidator<DataOptions>,\n sortIcon: {\n type: String,\n default: '$sort',\n },\n everyItem: Boolean,\n someItems: Boolean,\n showGroupBy: Boolean,\n singleSelect: Boolean,\n disableSort: Boolean,\n },\n\n methods: {\n genSelectAll () {\n const data = {\n props: {\n value: this.everyItem,\n indeterminate: !this.everyItem && this.someItems,\n },\n on: {\n input: (v: boolean) => this.$emit('toggle-select-all', v),\n },\n }\n\n if (this.$scopedSlots['data-table-select']) {\n return this.$scopedSlots['data-table-select']!(data)\n }\n\n return this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n ...data,\n })\n },\n genSortIcon () {\n return this.$createElement(VIcon, {\n staticClass: 'v-data-table-header__icon',\n props: {\n size: 18,\n },\n }, [this.sortIcon])\n },\n },\n})\n","import { VNode, VNodeChildrenArrayContents } from 'vue'\nimport mixins from '../../util/mixins'\nimport VSelect from '../VSelect/VSelect'\nimport VChip from '../VChip'\nimport header from './mixins/header'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-mobile',\n\n props: {\n sortByText: {\n type: String,\n default: '$vuetify.dataTable.sortBy',\n },\n },\n\n methods: {\n genSortChip (props: any) {\n const children: VNodeChildrenArrayContents = [props.item.text]\n\n const sortIndex = this.options.sortBy.findIndex(k => k === props.item.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n children.push(this.$createElement('div', {\n staticClass: 'v-chip__close',\n class: {\n sortable: true,\n active: beingSorted,\n asc: beingSorted && !isDesc,\n desc: beingSorted && isDesc,\n },\n }, [this.genSortIcon()]))\n\n return this.$createElement(VChip, {\n staticClass: 'sortable',\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('sort', props.item.value)\n },\n },\n }, children)\n },\n genSortSelect (items: any[]) {\n return this.$createElement(VSelect, {\n props: {\n label: this.$vuetify.lang.t(this.sortByText),\n items,\n hideDetails: true,\n multiple: this.options.multiSort,\n value: this.options.multiSort ? this.options.sortBy : this.options.sortBy[0],\n menuProps: { closeOnContentClick: true },\n },\n on: {\n change: (v: string | string[]) => this.$emit('sort', v),\n },\n scopedSlots: {\n selection: props => this.genSortChip(props),\n },\n })\n },\n },\n\n render (h): VNode {\n const children: VNodeChildrenArrayContents = []\n\n const header = this.headers.find(h => h.value === 'data-table-select')\n if (header && !this.singleSelect) {\n children.push(this.$createElement('div', {\n class: [\n 'v-data-table-header-mobile__select',\n ...wrapInArray(header.class),\n ],\n attrs: {\n width: header.width,\n },\n }, [this.genSelectAll()]))\n }\n\n const sortHeaders = this.headers\n .filter(h => h.sortable !== false && h.value !== 'data-table-select')\n .map(h => ({\n text: h.text,\n value: h.value,\n }))\n\n if (!this.disableSort && sortHeaders.length) {\n children.push(this.genSortSelect(sortHeaders))\n }\n\n const th = h('th', [h('div', { staticClass: 'v-data-table-header-mobile__wrapper' }, children)])\n\n const tr = h('tr', [th])\n\n return h('thead', {\n staticClass: 'v-data-table-header v-data-table-header-mobile',\n }, [tr])\n },\n})\n","// Helpers\nimport { VNode, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport header from './mixins/header'\nimport { wrapInArray, convertToUnit } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-desktop',\n\n methods: {\n genGroupByToggle (header: DataTableHeader) {\n return this.$createElement('span', {\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('group', header.value)\n },\n },\n }, ['group'])\n },\n getAria (beingSorted: boolean, isDesc: boolean) {\n const $t = (key: string) => this.$vuetify.lang.t(`$vuetify.dataTable.ariaLabel.${key}`)\n\n let ariaSort = 'none'\n let ariaLabel = [\n $t('sortNone'),\n $t('activateAscending'),\n ]\n\n if (!beingSorted) {\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n }\n\n if (isDesc) {\n ariaSort = 'descending'\n ariaLabel = [\n $t('sortDescending'),\n $t(this.options.mustSort ? 'activateAscending' : 'activateNone'),\n ]\n } else {\n ariaSort = 'ascending'\n ariaLabel = [\n $t('sortAscending'),\n $t('activateDescending'),\n ]\n }\n\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n },\n genHeader (header: DataTableHeader) {\n const data: Required<Pick<VNodeData, 'attrs' | 'on' | 'class' | 'style'>> = {\n attrs: {\n role: 'columnheader',\n scope: 'col',\n 'aria-label': header.text || '',\n },\n style: {\n width: convertToUnit(header.width),\n minWidth: convertToUnit(header.width),\n },\n class: [\n `text-${header.align || 'start'}`,\n ...wrapInArray(header.class),\n header.divider && 'v-data-table__divider',\n ],\n on: {},\n }\n const children = []\n\n if (header.value === 'data-table-select' && !this.singleSelect) {\n return this.$createElement('th', data, [this.genSelectAll()])\n }\n\n children.push(\n this.$scopedSlots[header.value]\n ? this.$scopedSlots[header.value]!({ header })\n : this.$createElement('span', [header.text])\n )\n\n if (!this.disableSort && (header.sortable || !header.hasOwnProperty('sortable'))) {\n data.on['click'] = () => this.$emit('sort', header.value)\n\n const sortIndex = this.options.sortBy.findIndex(k => k === header.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n data.class.push('sortable')\n\n const { ariaLabel, ariaSort } = this.getAria(beingSorted, isDesc)\n\n data.attrs['aria-label'] += `${header.text ? ': ' : ''}${ariaLabel}`\n data.attrs['aria-sort'] = ariaSort\n\n if (beingSorted) {\n data.class.push('active')\n data.class.push(isDesc ? 'desc' : 'asc')\n }\n\n if (header.align === 'end') children.unshift(this.genSortIcon())\n else children.push(this.genSortIcon())\n\n if (this.options.multiSort && beingSorted) {\n children.push(this.$createElement('span', { class: 'v-data-table-header__sort-badge' }, [String(sortIndex + 1)]))\n }\n }\n\n if (this.showGroupBy && header.groupable !== false) children.push(this.genGroupByToggle(header))\n\n return this.$createElement('th', data, children)\n },\n },\n\n render (): VNode {\n return this.$createElement('thead', {\n staticClass: 'v-data-table-header',\n }, [\n this.$createElement('tr', this.headers.map(header => this.genHeader(header))),\n ])\n },\n})\n","import { VNodeData } from 'vue'\n\n/**\n * Removes duplicate `@input` listeners when\n * using v-model with functional components\n *\n * @see https://github.com/vuetifyjs/vuetify/issues/4460\n */\nexport default function dedupeModelListeners (data: VNodeData): void {\n if (data.model && data.on && data.on.input) {\n if (Array.isArray(data.on.input)) {\n const i = data.on.input.indexOf(data.model.callback)\n if (i > -1) data.on.input.splice(i, 1)\n } else {\n delete data.on.input\n }\n }\n}\n","import { CreateElement, VNode } from 'vue'\n\nexport default function rebuildFunctionalSlots (slots: { [key: string]: VNode[] | undefined }, h: CreateElement) {\n const children: VNode[] = []\n\n for (const slot in slots) {\n if (slots.hasOwnProperty(slot)) {\n children.push(h('template', { slot }, slots[slot]))\n }\n }\n\n return children\n}\n","// Styles\nimport './VDataTableHeader.sass'\n\n// Components\nimport VDataTableHeaderMobile from './VDataTableHeaderMobile'\nimport VDataTableHeaderDesktop from './VDataTableHeaderDesktop'\n\n// Mixins\nimport header from './mixins/header'\n\n// Utilities\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport mergeData from '../../util/mergeData'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'v-data-table-header',\n\n functional: true,\n\n props: {\n ...header.options.props,\n mobile: Boolean,\n },\n\n render (h, { props, data, slots }) {\n dedupeModelListeners(data)\n const children = rebuildSlots(slots(), h)\n\n data = mergeData(data, { props })\n\n if (props.mobile) {\n return h(VDataTableHeaderMobile, data, children)\n } else {\n return h(VDataTableHeaderDesktop, data, children)\n }\n },\n})\n","// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DataTableHeader } from 'vuetify/types'\n\n// Utils\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType<DataTableHeader[]>,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n const regularSlot = computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({ item: props.item, header, value }))\n } else if (regularSlot) {\n children.push(regularSlot)\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const textAlign = `text-${header.align || 'start'}`\n\n return h('td', {\n class: {\n [textAlign]: true,\n 'v-data-table__divider': header.divider,\n },\n }, children)\n })\n\n return h('tr', data, columns)\n },\n})\n","import Vue, { VNode } from 'vue'\n\nexport default Vue.extend({\n name: 'row-group',\n\n functional: true,\n\n props: {\n value: {\n type: Boolean,\n default: true,\n },\n headerClass: {\n type: String,\n default: 'v-row-group__header',\n },\n contentClass: String,\n summaryClass: {\n type: String,\n default: 'v-row-group__summary',\n },\n },\n\n render (h, { slots, props }): VNode {\n const computedSlots = slots()\n const children = []\n\n if (computedSlots['column.header']) {\n children.push(h('tr', {\n staticClass: props.headerClass,\n }, computedSlots['column.header']))\n } else if (computedSlots['row.header']) {\n children.push(...computedSlots['row.header'])\n }\n\n if (computedSlots['row.content'] && props.value) children.push(...computedSlots['row.content'])\n\n if (computedSlots['column.summary']) {\n children.push(h('tr', {\n staticClass: props.summaryClass,\n }, computedSlots['column.summary']))\n } else if (computedSlots['row.summary']) {\n children.push(...computedSlots['row.summary'])\n }\n\n return children as any\n },\n})\n","import Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType<DataTableHeader[]>,\n hideDefaultHeader: Boolean,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n const classes = {\n 'v-data-table__mobile-row': true,\n }\n\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n const regularSlot = computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({ item: props.item, header, value }))\n } else if (regularSlot) {\n children.push(regularSlot)\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const mobileRowChildren = [\n h('div', {\n staticClass: 'v-data-table__mobile-row__cell',\n }, children),\n ]\n\n if (header.value !== 'dataTableSelect' && !props.hideDefaultHeader) {\n mobileRowChildren.unshift(\n h('div', {\n staticClass: 'v-data-table__mobile-row__header',\n }, [header.text])\n )\n }\n\n return h('td', { class: classes }, mobileRowChildren)\n })\n\n return h('tr', { ...data, staticClass: 'v-data-table__mobile-table-row' }, columns)\n },\n})\n","import './VDataTable.sass'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DataTableHeader,\n DataTableFilterFunction,\n DataScopeProps,\n DataOptions,\n DataPagination,\n DataTableCompareFunction,\n DataItemsPerPageOption,\n ItemGroup,\n RowClassFunction,\n DataTableItemProps,\n} from 'vuetify/types'\n\n// Components\nimport { VData } from '../VData'\nimport { VDataFooter, VDataIterator } from '../VDataIterator'\nimport VBtn from '../VBtn'\nimport VDataTableHeader from './VDataTableHeader'\n// import VVirtualTable from './VVirtualTable'\nimport VIcon from '../VIcon'\nimport Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'\nimport { breaking } from '../../util/console'\nimport { mergeClasses } from '../../util/mergeData'\n\nfunction filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {\n return (header: DataTableHeader) => {\n const value = getObjectValueByPath(item, header.value)\n return header.filter ? header.filter(value, search, item) : filter(value, search, item)\n }\n}\n\nfunction searchTableItems (\n items: any[],\n search: string | null,\n headersWithCustomFilters: DataTableHeader[],\n headersWithoutCustomFilters: DataTableHeader[],\n customFilter: DataTableFilterFunction\n) {\n search = typeof search === 'string' ? search.trim() : null\n\n return items.filter(item => {\n // Headers with custom filters are evaluated whether or not a search term has been provided.\n // We need to match every filter to be included in the results.\n const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))\n\n // Headers without custom filters are only filtered by the `search` property if it is defined.\n // We only need a single column to match the search term to be included in the results.\n const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))\n\n return matchesColumnFilters && matchesSearchTerm\n })\n}\n\n/* @vue/component */\nexport default mixins(\n VDataIterator,\n Loadable,\n).extend({\n name: 'v-data-table',\n\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => [],\n } as PropValidator<DataTableHeader[]>,\n showSelect: Boolean,\n showExpand: Boolean,\n showGroupBy: Boolean,\n // TODO: Fix\n // virtualRows: Boolean,\n height: [Number, String],\n hideDefaultHeader: Boolean,\n caption: String,\n dense: Boolean,\n headerProps: Object,\n calculateWidths: Boolean,\n fixedHeader: Boolean,\n headersLength: Number,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n customFilter: {\n type: Function,\n default: defaultFilter,\n } as PropValidator<typeof defaultFilter>,\n itemClass: {\n type: [String, Function],\n default: () => '',\n } as PropValidator<RowClassFunction | string>,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n },\n\n data () {\n return {\n internalGroupBy: [] as string[],\n openCache: {} as { [key: string]: boolean },\n widths: [] as number[],\n }\n },\n\n computed: {\n computedHeaders (): DataTableHeader[] {\n if (!this.headers) return []\n const headers = this.headers.filter(h => h.value === undefined || !this.internalGroupBy.find(v => v === h.value))\n const defaultHeader = { text: '', sortable: false, width: '1px' }\n\n if (this.showSelect) {\n const index = headers.findIndex(h => h.value === 'data-table-select')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-select' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n if (this.showExpand) {\n const index = headers.findIndex(h => h.value === 'data-table-expand')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-expand' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n return headers\n },\n colspanAttrs (): object | undefined {\n return this.isMobile ? undefined : {\n colspan: this.headersLength || this.computedHeaders.length,\n }\n },\n columnSorters (): Record<string, DataTableCompareFunction> {\n return this.computedHeaders.reduce<Record<string, DataTableCompareFunction>>((acc, header) => {\n if (header.sort) acc[header.value] = header.sort\n return acc\n }, {})\n },\n headersWithCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n headersWithoutCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n sanitizedHeaderProps (): Record<string, any> {\n return camelizeObjectKeys(this.headerProps)\n },\n computedItemsPerPage (): number {\n const itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage\n const itemsPerPageOptions: DataItemsPerPageOption[] | undefined = this.sanitizedFooterProps.itemsPerPageOptions\n\n if (\n itemsPerPageOptions &&\n !itemsPerPageOptions.find(item => typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage)\n ) {\n const firstOption = itemsPerPageOptions[0]\n return typeof firstOption === 'object' ? firstOption.value : firstOption\n }\n\n return itemsPerPage\n },\n },\n\n created () {\n const breakingProps = [\n ['sort-icon', 'header-props.sort-icon'],\n ['hide-headers', 'hide-default-header'],\n ['select-all', 'show-select'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n mounted () {\n // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {\n // const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)\n // if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })\n // }\n\n if (this.calculateWidths) {\n window.addEventListener('resize', this.calcWidths)\n this.calcWidths()\n }\n },\n\n beforeDestroy () {\n if (this.calculateWidths) {\n window.removeEventListener('resize', this.calcWidths)\n }\n },\n\n methods: {\n calcWidths () {\n this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)\n },\n customFilterWithColumns (items: any[], search: string) {\n return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)\n },\n customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {\n return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)\n },\n createItemProps (item: any): DataTableItemProps {\n const props = VDataIterator.options.methods.createItemProps.call(this, item)\n\n return Object.assign(props, { headers: this.computedHeaders })\n },\n genCaption (props: DataScopeProps) {\n if (this.caption) return [this.$createElement('caption', [this.caption])]\n\n return getSlot(this, 'caption', props, true)\n },\n genColgroup (props: DataScopeProps) {\n return this.$createElement('colgroup', this.computedHeaders.map(header => {\n return this.$createElement('col', {\n class: {\n divider: header.divider,\n },\n })\n }))\n },\n genLoading () {\n const th = this.$createElement('th', {\n staticClass: 'column',\n attrs: this.colspanAttrs,\n }, [this.genProgress()])\n\n const tr = this.$createElement('tr', {\n staticClass: 'v-data-table__progress',\n }, [th])\n\n return this.$createElement('thead', [tr])\n },\n genHeaders (props: DataScopeProps) {\n const data = {\n props: {\n ...this.sanitizedHeaderProps,\n headers: this.computedHeaders,\n options: props.options,\n mobile: this.isMobile,\n showGroupBy: this.showGroupBy,\n someItems: this.someItems,\n everyItem: this.everyItem,\n singleSelect: this.singleSelect,\n disableSort: this.disableSort,\n },\n on: {\n sort: props.sort,\n group: props.group,\n 'toggle-select-all': this.toggleSelectAll,\n },\n }\n\n const children: VNodeChildrenArrayContents = [getSlot(this, 'header', data)]\n\n if (!this.hideDefaultHeader) {\n const scopedSlots = getPrefixedScopedSlots('header.', this.$scopedSlots)\n children.push(this.$createElement(VDataTableHeader, {\n ...data,\n scopedSlots,\n }))\n }\n\n if (this.loading) children.push(this.genLoading())\n\n return children\n },\n genEmptyWrapper (content: VNodeChildrenArrayContents) {\n return this.$createElement('tr', {\n staticClass: 'v-data-table__empty-wrapper',\n }, [\n this.$createElement('td', {\n attrs: this.colspanAttrs,\n }, content),\n ])\n },\n genItems (items: any[], props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n return props.groupedItems\n ? this.genGroupedRows(props.groupedItems, props)\n : this.genRows(items, props)\n },\n genGroupedRows (groupedItems: ItemGroup<any>[], props: DataScopeProps) {\n return groupedItems.map(group => {\n if (!this.openCache.hasOwnProperty(group.name)) this.$set(this.openCache, group.name, true)\n\n if (this.$scopedSlots.group) {\n return this.$scopedSlots.group({\n group: group.name,\n options: props.options,\n items: group.items,\n headers: this.computedHeaders,\n })\n } else {\n return this.genDefaultGroupedRow(group.name, group.items, props)\n }\n })\n },\n genDefaultGroupedRow (group: string, items: any[], props: DataScopeProps) {\n const isOpen = !!this.openCache[group]\n const children: VNodeChildren = [\n this.$createElement('template', { slot: 'row.content' }, this.genRows(items, props)),\n ]\n const toggleFn = () => this.$set(this.openCache, group, !this.openCache[group])\n const removeFn = () => props.updateOptions({ groupBy: [], groupDesc: [] })\n\n if (this.$scopedSlots['group.header']) {\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [\n this.$scopedSlots['group.header']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders, isOpen, toggle: toggleFn, remove: removeFn }),\n ]))\n } else {\n const toggle = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: toggleFn,\n },\n }, [this.$createElement(VIcon, [isOpen ? '$minus' : '$plus'])])\n\n const remove = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: removeFn,\n },\n }, [this.$createElement(VIcon, ['$close'])])\n\n const column = this.$createElement('td', {\n staticClass: 'text-start',\n attrs: this.colspanAttrs,\n }, [toggle, `${props.options.groupBy[0]}: ${group}`, remove])\n\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [column]))\n }\n\n if (this.$scopedSlots['group.summary']) {\n children.push(this.$createElement('template', { slot: 'column.summary' }, [\n this.$scopedSlots['group.summary']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders, isOpen, toggle: toggleFn }),\n ]))\n }\n\n return this.$createElement(RowGroup, {\n key: group,\n props: {\n value: isOpen,\n },\n }, children)\n },\n genRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots.item ? this.genScopedRows(items, props) : this.genDefaultRows(items, props)\n },\n genScopedRows (items: any[], props: DataScopeProps) {\n const rows = []\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n rows.push(this.$scopedSlots.item!({\n ...this.createItemProps(item),\n index: i,\n }))\n\n if (this.isExpanded(item)) {\n rows.push(this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders }))\n }\n }\n\n return rows\n },\n genDefaultRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots['expanded-item']\n ? items.map(item => this.genDefaultExpandedRow(item))\n : items.map(item => this.genDefaultSimpleRow(item))\n },\n genDefaultExpandedRow (item: any): VNode {\n const isExpanded = this.isExpanded(item)\n const classes = {\n 'v-data-table__expanded v-data-table__expanded__row': isExpanded,\n }\n const headerRow = this.genDefaultSimpleRow(item, classes)\n const expandedRow = this.$createElement('tr', {\n staticClass: 'v-data-table__expanded v-data-table__expanded__content',\n }, [this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders })])\n\n return this.$createElement(RowGroup, {\n props: {\n value: isExpanded,\n },\n }, [\n this.$createElement('template', { slot: 'row.header' }, [headerRow]),\n this.$createElement('template', { slot: 'row.content' }, [expandedRow]),\n ])\n },\n genDefaultSimpleRow (item: any, classes: Record<string, boolean> = {}): VNode {\n const scopedSlots = getPrefixedScopedSlots('item.', this.$scopedSlots)\n\n const data = this.createItemProps(item)\n\n if (this.showSelect) {\n const slot = scopedSlots['data-table-select']\n scopedSlots['data-table-select'] = slot ? () => slot(data) : () => this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n props: {\n value: data.isSelected,\n disabled: !this.isSelectable(item),\n },\n on: {\n input: (val: boolean) => data.select(val),\n },\n })\n }\n\n if (this.showExpand) {\n const slot = scopedSlots['data-table-expand']\n scopedSlots['data-table-expand'] = slot ? () => slot(data) : () => this.$createElement(VIcon, {\n staticClass: 'v-data-table__expand-icon',\n class: {\n 'v-data-table__expand-icon--active': data.isExpanded,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n data.expand(!data.isExpanded)\n },\n },\n }, [this.expandIcon])\n }\n\n return this.$createElement(this.isMobile ? MobileRow : Row, {\n key: getObjectValueByPath(item, this.itemKey),\n class: mergeClasses(\n { ...classes, 'v-data-table__selected': data.isSelected },\n getPropertyFromItem(item, this.itemClass)\n ),\n props: {\n headers: this.computedHeaders,\n hideDefaultHeader: this.hideDefaultHeader,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: {\n // TODO: for click, the first argument should be the event, and the second argument should be data,\n // but this is a breaking change so it's for v3\n click: () => this.$emit('click:row', item, data),\n contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),\n dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),\n },\n })\n },\n genBody (props: DataScopeProps): VNode | string | VNodeChildren {\n const data = {\n ...props,\n expand: this.expand,\n headers: this.computedHeaders,\n isExpanded: this.isExpanded,\n isMobile: this.isMobile,\n isSelected: this.isSelected,\n select: this.select,\n }\n\n if (this.$scopedSlots.body) {\n return this.$scopedSlots.body!(data)\n }\n\n return this.$createElement('tbody', [\n getSlot(this, 'body.prepend', data, true),\n this.genItems(props.items, props),\n getSlot(this, 'body.append', data, true),\n ])\n },\n genFooters (props: DataScopeProps) {\n const data = {\n props: {\n options: props.options,\n pagination: props.pagination,\n itemsPerPageText: '$vuetify.dataTable.itemsPerPageText',\n ...this.sanitizedFooterProps,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n widths: this.widths,\n headers: this.computedHeaders,\n }\n\n const children: VNodeChildren = [\n getSlot(this, 'footer', data, true),\n ]\n\n if (!this.hideDefaultFooter) {\n children.push(this.$createElement(VDataFooter, {\n ...data,\n scopedSlots: getPrefixedScopedSlots('footer.', this.$scopedSlots),\n }))\n }\n\n return children\n },\n genDefaultScopedSlot (props: DataScopeProps): VNode {\n const simpleProps = {\n height: this.height,\n fixedHeader: this.fixedHeader,\n dense: this.dense,\n }\n\n // if (this.virtualRows) {\n // return this.$createElement(VVirtualTable, {\n // props: Object.assign(simpleProps, {\n // items: props.items,\n // height: this.height,\n // rowHeight: this.dense ? 24 : 48,\n // headerHeight: this.dense ? 32 : 48,\n // // TODO: expose rest of props from virtual table?\n // }),\n // scopedSlots: {\n // items: ({ items }) => this.genItems(items, props) as any,\n // },\n // }, [\n // this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),\n // this.proxySlot('bottom', this.genFooters(props)),\n // ])\n // }\n\n return this.$createElement(VSimpleTable, {\n props: simpleProps,\n }, [\n this.proxySlot('top', getSlot(this, 'top', props, true)),\n this.genCaption(props),\n this.genColgroup(props),\n this.genHeaders(props),\n this.genBody(props),\n this.proxySlot('bottom', this.genFooters(props)),\n ])\n },\n proxySlot (slot: string, content: VNodeChildren) {\n return this.$createElement('template', { slot }, content)\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: {\n ...this.$props,\n customFilter: this.customFilterWithColumns,\n customSort: this.customSortWithHeaders,\n itemsPerPage: this.computedItemsPerPage,\n },\n on: {\n 'update:options': (v: DataOptions, old: DataOptions) => {\n this.internalGroupBy = v.groupBy || []\n !deepEqual(v, old) && this.$emit('update:options', v)\n },\n 'update:page': (v: number) => this.$emit('update:page', v),\n 'update:items-per-page': (v: number) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: string | string[]) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: boolean | boolean[]) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: string | string[]) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: boolean | boolean[]) => this.$emit('update:group-desc', v),\n pagination: (v: DataPagination, old: DataPagination) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot as any,\n },\n })\n },\n})\n","import { render, staticRenderFns } from \"./AttributeTable.vue?vue&type=template&id=6b1b8591&scoped=true&\"\nimport script from \"./AttributeTable.vue?vue&type=script&lang=js&\"\nexport * from \"./AttributeTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6b1b8591\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { 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 { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VCombobox,VDataTable,VIcon,VSpacer,VTextField})\n","/**\n * Override leaflet WMS for custom get feature info\n */\nimport L from \"leaflet\"\nimport WMS from \"leaflet-wms/leaflet.wms.js\"\n\nvar WmsSource = WMS.Source.extend({\n identify: function(evt) {\n if (this.options[\"activeTool\"]() == \"identify\") {\n // Identify map features in response to map clicks. To customize this\n // behavior, create a class extending wms.Source and override one or\n // more of the following hook functions.\n\n var layers = this.getIdentifyLayers()\n if (!layers.length) {\n return\n }\n this.getFeatureInfo(evt.containerPoint, evt.latlng, layers, this.showFeatureInfo)\n }\n },\n // Overridden to avoid custom methods to be leaked into the URL\n createOverlay: function(untiled) {\n // Create overlay with all options other than untiled & identify\n var overlayOptions = {}\n for (var opt in this.options) {\n if (\n opt != \"untiled\" &&\n opt != \"identify\" &&\n // Added:\n opt != \"activeTool\" &&\n opt != \"onGetFeatureInfo\" &&\n opt != \"onGetFeatureInfoStarted\" &&\n opt != \"onGetFeatureInfoParamsEnded\" &&\n opt != \"onError\"\n ) {\n overlayOptions[opt] = this.options[opt]\n }\n }\n if (untiled) {\n return WMS.overlay(this._url, overlayOptions)\n } else {\n return WMS.tileLayer(this._url, overlayOptions)\n }\n },\n getFeatureInfo: function(point, latlng, layers, callback) {\n // Request WMS GetFeatureInfo and call callback with results\n // (split from identify() to faciliate use outside of map events)\n var params = this.getFeatureInfoParams(point, layers),\n url = this._url + L.Util.getParamString(params, this._url)\n\n this.showWaiting()\n this.ajax(url, done)\n\n function done(result) {\n this.hideWaiting()\n var text = this.parseFeatureInfo(result, url)\n callback.call(this, latlng, text)\n }\n },\n showFeatureInfo: function(latlng, info) {\n try {\n this.options[\"onGetFeatureInfo\"](latlng, info)\n } catch (error) {\n this.options[\"onError\"](error)\n }\n },\n showWaiting: function() {\n try {\n this.options[\"onGetFeatureInfoStarted\"]()\n } catch (error) {\n // do nothing\n }\n },\n // Overridden to set info_format to json\n getFeatureInfoParams: function(point, layers) {\n // Hook to generate parameters for WMS service GetFeatureInfo request\n var wmsParams, overlay\n if (this.options.untiled) {\n // Use existing overlay\n wmsParams = this._overlay.wmsParams\n } else {\n // Create overlay instance to leverage updateWmsParams\n overlay = this.createOverlay(true)\n overlay.updateWmsParams(this._map)\n wmsParams = overlay.wmsParams\n wmsParams.layers = layers.join(\",\")\n }\n var infoParams = {\n request: \"GetFeatureInfo\",\n query_layers: layers.join(\",\"),\n X: Math.round(point.x),\n Y: Math.round(point.y),\n info_format: \"application/json\",\n WITH_GEOMETRY: 1,\n }\n let result = L.extend({}, wmsParams, infoParams)\n try {\n result = this.options[\"onGetFeatureInfoParamsEnded\"](result)\n } catch (error) {\n // Do nothing\n }\n return result\n },\n})\n\nexport default {\n source(url, options) {\n return new WmsSource(url, options)\n },\n}\n","<template>\n <v-app id=\"project\">\n <v-overlay light v-if=\"status == `loading` && error.length == 0\">\n <v-progress-circular\n indeterminate\n color=\"lime\"\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <Error v-if=\"error.length > 0\" :error=\"error\" />\n <template v-else>\n <v-app-bar app dense collapse-on-scroll clipped-left color=\"green\" dark>\n <v-app-bar-nav-icon\n @click.stop=\"expandedSidebar = !expandedSidebar\"\n ></v-app-bar-nav-icon>\n <v-toolbar-title v-if=\"project\">{{ project.title }}</v-toolbar-title>\n <v-spacer></v-spacer>\n <v-btn icon title=\"Home Page\" to=\"/\">\n <v-icon>mdi-home-circle</v-icon>\n </v-btn>\n </v-app-bar>\n <LeftSidebar\n :map=\"map\"\n :project=\"project\"\n :drawer=\"expandedSidebar\"\n :showIdentify=\"showIdentify\"\n v-on:setLayerVisibility=\"setLayerVisibility\"\n />\n <v-main :class=\"attributeTableTypename ? `show-table` : ''\">\n <v-container\n id=\"map\"\n :class=\"\n `fill-height activetool-` +\n activeTool +\n (expandedSidebar ? ' expanded-sidebar' : '')\n \"\n fluid\n >\n <v-layout>\n <l-map\n ref=\"map\"\n v-resize=\"onResize\"\n @ready=\"setMap\"\n style=\"z-index: 0\"\n >\n <l-tile-layer\n :visible=\"baseMap == 'openstreetmap'\"\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n v-if=\"\n project &&\n project.capabilities.wmsOutputCrsList.includes('EPSG:3857')\n \"\n attribution=\"&copy; &lt;a href='https://www.openstreetmap.org/copyright'&gt;OpenStreetMap&lt;/a&gt; contributors\"\n ></l-tile-layer>\n </l-map>\n </v-layout>\n </v-container>\n </v-main>\n\n <AttributeTable\n :class=\"expandedSidebar ? 'mb-4 attributetable-small' : 'mb-4'\"\n v-if=\"attributeTableTypename\"\n :project=\"project\"\n :map=\"this.map\"\n />\n\n <MapToolbar class=\"map-toolbar\" :map=\"map\" :project=\"project\" />\n\n <MapFooter />\n </template>\n </v-app>\n</template>\n\n<script>\nimport MapToolbar from \"@/components/MapToolbar.vue\";\nimport MapFooter from \"@/components/MapFooter.vue\";\nimport LeftSidebar from \"@/components/LeftSidebar.vue\";\nimport AttributeTable from \"@/components/AttributeTable.vue\";\nimport Error from \"@/components/Error.vue\";\nimport { LMap, LTileLayer } from \"vue2-leaflet\";\nimport WmsSource from \"@/js/WmsSource.js\";\nimport \"leaflet/dist/leaflet.css\";\nimport { latLng, Polygon } from \"leaflet\";\nimport L from \"leaflet\";\nimport Utils from \"@/js/Utils.js\";\n\n// Patch for https://github.com/Leaflet/Leaflet/issues/4968#issuecomment-269750768\ndelete L.Icon.Default.prototype._getIconUrl;\n\nL.Icon.Default.mergeOptions({\n iconRetinaUrl: require(\"leaflet/dist/images/marker-icon-2x.png\"),\n iconUrl: require(\"leaflet/dist/images/marker-icon.png\"),\n shadowUrl: require(\"leaflet/dist/images/marker-shadow.png\"),\n});\n// end patch\n\nL.Control.include({\n _refocusOnMap: L.Util.falseFn, // Do nothing.\n});\n\nexport default {\n name: \"WebGis\",\n props: { projectId: String },\n components: {\n LMap,\n LTileLayer,\n MapToolbar,\n MapFooter,\n Error,\n LeftSidebar,\n AttributeTable,\n },\n data: function () {\n return {\n map: {},\n wms_source: {},\n expandedSidebar: false,\n // Whether the identify tab must be automatically shown\n showIdentify: false,\n };\n },\n computed: {\n project() {\n return this.$store.state.projects[this.projectId];\n },\n attributeTableTypename() {\n return this.$store.state.attributeTableTypename;\n },\n toc() {\n return this.$store.state.tocs[this.projectId];\n },\n status() {\n return this.$store.state.status;\n },\n error() {\n let error = this.$store.state.error;\n this.$store.commit(\"clearError\");\n return error;\n },\n activeTool() {\n return this.$store.state.activeTool;\n },\n baseMap() {\n return this.$store.state.baseMap;\n },\n },\n watch: {\n project() {\n this.initializeMap();\n },\n toc() {\n this.initializeToc();\n },\n },\n mounted() {\n this.$store.commit(\"clearAttributeTableTypename\");\n this.$store.dispatch(\"setStatus\", `loading`);\n\n if (!this.project) {\n this.$store.dispatch(\"getProject\", this.projectId);\n } else {\n //console.log(\"Project already loaded ...\");\n this.setMap(this.$refs[\"map\"].mapObject);\n this.initializeMap();\n }\n },\n methods: {\n setMap() {\n this.map = this.$refs[\"map\"].mapObject;\n },\n /**\n * Called when project has been fetched\n */\n initializeMap() {\n //console.log(`Initializing map for project ${this.project.id}`);\n if (!this.project.toc) {\n //console.log(`initializeMap error: no project toc!`);\n }\n this.loadMap(this.project);\n Object.values(this.getOrderedLayerTypenames()).forEach((typename) => {\n if (!this.project.toc) {\n //console.log(`Loading layer ${title} failed: no toc!`);\n }\n let node = this.findLayerNodeByTypename(\n typename,\n this.project.toc.children\n );\n if (node && node.visible) {\n //console.log(`Loading layer ${typename}`);\n this.wms_source._subLayers[node.typename] = this.wms_source.getLayer(\n node.typename\n );\n } else if (!node) {\n console.log(`Could not find layer node: ${typename}`);\n } else if (!node.visible) {\n //console.log(`Not loading layer (not visible): ${typename}`);\n }\n });\n //console.log(this.wms_source._subLayers);\n this.wms_source.refreshOverlay();\n\n // Fetch TOC\n if (!this.toc) {\n let layers = Utils.getAllLayers(this.project);\n this.$store.dispatch(\"getToc\", { projectId: this.projectId, layers });\n }\n\n this.$nextTick(() => {\n this.map.zoomControl.remove();\n });\n this.$store.dispatch(\"setStatus\", `project`);\n },\n onResize() {\n this.$refs[\"map\"].mapObject._onResize();\n },\n /**\n * Called when TOC was fetched\n */\n initializeToc() {\n this.toc.nodes.forEach((layer) => {\n let node = this.findLayerNode(layer.title, this.project.toc.children);\n if (node) {\n if (layer.icon) {\n node.children.push(layer);\n } else {\n layer.symbols.forEach((symbol) => node.children.push(symbol));\n }\n }\n });\n },\n /**\n * Toggles a layer by typename\n */\n setLayerVisibility(typename, visible) {\n if (typename in this.wms_source._subLayers && !visible) {\n //console.log(`Removing layer: ${typename}`);\n this.wms_source.removeSubLayer(typename);\n } else if (visible && !(typename in this.wms_source._subLayers)) {\n // We need to respect drawing order!\n this.wms_source._subLayers[typename] = this.wms_source.getLayer(\n typename\n );\n let new_sub_layers = {};\n for (const _type_name of this.getOrderedLayerTypenames()) {\n if (_type_name in this.wms_source._subLayers) {\n //console.log(`Adding layer: ${typename}`);\n new_sub_layers[_type_name] = this.wms_source._subLayers[_type_name];\n }\n }\n this.wms_source._subLayers = new_sub_layers;\n this.wms_source.refreshOverlay();\n } else {\n console.log(`Nothing to do for: ${typename} - ${visible}`);\n }\n },\n /**\n * Find a layer by title\n */\n findLayerNode(title, children) {\n if (children) {\n for (let i = 0; i < children.length; ++i) {\n if (children[i].title == title) {\n return children[i];\n }\n let res = this.findLayerNode(title, children[i].children);\n if (res) {\n return res;\n }\n }\n }\n },\n /**\n * Find a layer by typename\n */\n findLayerNodeByTypename(typename, children) {\n if (children) {\n for (let i = 0; i < children.length; ++i) {\n if (children[i].typename == typename) {\n return children[i];\n }\n let res = this.findLayerNode(typename, children[i].children);\n if (res) {\n return res;\n }\n }\n }\n },\n /**\n * Loads map\n */\n loadMap(project) {\n let west = project.geographic_extent[0];\n let south = project.geographic_extent[1];\n let east = project.geographic_extent[2];\n let north = project.geographic_extent[3];\n if (project.initial_extent) {\n west = project.initial_extent[0];\n south = project.initial_extent[1];\n east = project.initial_extent[2];\n north = project.initial_extent[3];\n }\n let p1 = new latLng(south, west);\n let p2 = new latLng(north, west);\n let p3 = new latLng(north, east);\n let p4 = new latLng(south, east);\n let polygonPoints = [p1, p2, p3, p4];\n let jl = new Polygon(polygonPoints, { fill: false }); // Don't: .addTo(this.map);\n this.map.setView(jl.getBounds().getCenter());\n if (\n jl.getBounds().getEast() != jl.getBounds().getWest() &&\n jl.getBounds().getNorth() != jl.getBounds().getSouth()\n ) {\n this.map.fitBounds(jl.getBounds());\n }\n let that = this;\n this.wms_source = WmsSource.source(`/project/` + project.id + `/?`, {\n tileSize: 512,\n transparent: true,\n format: \"image/png\",\n dpi: window.devicePixelRatio * 96,\n onGetFeatureInfo: this.onGetFeatureInfo,\n onGetFeatureInfoStarted: this.onGetFeatureInfoStarted,\n onGetFeatureInfoParamsEnded: this.onGetFeatureInfoParamsEnded,\n onError: this.onError,\n activeTool() {\n return that.activeTool;\n },\n }).addTo(this.map);\n\n // Add an highlight layer to the map\n let highlightLayer = L.geoJson(\n { features: [] },\n {\n style: function (/* feature */) {\n return {\n weight: 2,\n opacity: 1,\n color: \"yellow\",\n };\n },\n onEachFeature: function (feature, layer) {\n layer.on({\n mouseover: function (e) {\n e;\n //console.log(e.target, feature);\n },\n mouseout: function (e) {\n e;\n //console.log(e.target);\n },\n click: function (e) {\n e;\n //console.log(e.target);\n },\n });\n },\n }\n ).addTo(this.map);\n this.map.highlightLayer = highlightLayer;\n\n L.control.scale().addTo(this.map);\n\n this.updateMapScale();\n this.map.on(\"move\", this.updateMapScale, this);\n\n // For debugging and development: add llmap to window\n window.llmap = this.map;\n },\n /**\n * GFI results\n */\n onGetFeatureInfo(latLng, info) {\n this.$store.commit(\"setIdentifyResults\", {\n identifyResults: JSON.parse(info),\n });\n },\n /**\n * GFI start: show sidebar and results tab\n */\n onGetFeatureInfoStarted() {\n this.map.highlightLayer.clearLayers();\n if (this.$store.state.activeTool == \"identify\") {\n this.showIdentify = true;\n this.$store.commit(\"clearIdentifyResults\");\n this.expandedSidebar = true;\n } else {\n this.showIdentify = false;\n }\n },\n /**\n * Called to exclude layers not queryable\n */\n onGetFeatureInfoParamsEnded(result) {\n //console.log(result);\n let query_layers = result.query_layers.split(\",\");\n let queryable = [];\n for (let i = 0; i < query_layers.length; ++i) {\n if (\n this.project.wms_layers_queryable.includes(\n this.project.wms_layers_typename_id_map[query_layers[i]]\n )\n ) {\n queryable.push(query_layers[i]);\n }\n }\n result.query_layers = queryable;\n return result;\n },\n /**\n * Error handler for the map source WMS layer\n */\n onError(error) {\n console.log(\"Error:\", error);\n this.$store.commit(\"setError\", error.message);\n },\n /**\n * Convenience: return ordered list of layer typenames from the toc\n * the order is reversed, because of WMS drawing order\n */\n getOrderedLayerTypenames() {\n let _getLayers = (parent, layerList) => {\n if (parent.is_layer) {\n layerList.push(parent.typename);\n } else {\n for (let i = 0; i < parent.children.length; ++i) {\n _getLayers(parent.children[i], layerList);\n }\n }\n };\n let layerList = [];\n _getLayers(this.project.toc, layerList);\n //console.log(layerList)\n return layerList.reverse();\n },\n /**\n * Compute map scale\n */\n updateMapScale() {\n let map = this.map;\n let width = map.getSize().x;\n let bounds = map.getBounds();\n let extentHeight = bounds.getNorth() - bounds.getSouth();\n let minLon = bounds.getWest();\n let maxLon = bounds.getEast();\n let midLat = bounds.getSouth() + extentHeight / 2;\n let conversionFactor = 39.3700787;\n let dpi = 96 * window.devicePixelRatio; // this.$store.state.dpi;\n let dpm = dpi * conversionFactor;\n let physicalWidth = width / dpm;\n let delta = map.distance(\n L.latLng(midLat, minLon),\n L.latLng(midLat, maxLon)\n );\n let scaleDenom = delta / physicalWidth;\n this.$store.commit(\"setMapScaleDenominator\", scaleDenom);\n return scaleDenom;\n },\n },\n};\n</script>\n\n<style>\n#wrapper {\n height: 100%;\n}\n\n.alert-danger {\n position: absolute;\n top: 4em;\n margin: 0 8em;\n z-index: 10000;\n}\n\n#map {\n padding: 0;\n}\n\n#map.activetool-identify .leaflet-grab {\n cursor: pointer !important;\n}\n\n.v-main.show-table {\n padding-bottom: 0 !important;\n}\n.map-toolbar {\n position: fixed;\n top: 90px;\n right: 30px;\n}\n\n.leaflet-container {\n background-color: white;\n}\n\n.attributetable-small {\n margin-left: 300px;\n}\n\n.expanded-sidebar .leaflet-left {\n left: 300px !important;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=script&lang=js&\"","// Components\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn/VBtn'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'v-app-bar-nav-icon',\n\n functional: true,\n\n render (h, { slots, listeners, props, data }) {\n const d = Object.assign(data, {\n staticClass: (`v-app-bar__nav-icon ${data.staticClass || ''}`).trim(),\n props: {\n ...props,\n icon: true,\n },\n on: listeners,\n })\n\n const defaultSlot = slots().default\n\n return h(VBtn, d, defaultSlot || [h(VIcon, '$menu')])\n },\n})\n","import { render, staticRenderFns } from \"./WebGis.vue?vue&type=template&id=59bf9c59&\"\nimport script from \"./WebGis.vue?vue&type=script&lang=js&\"\nexport * from \"./WebGis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WebGis.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VAppBarNavIcon,VBtn,VContainer,VIcon,VLayout,VMain,VOverlay,VProgressCircular,VSpacer,VToolbarTitle})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Resize from 'vuetify/lib/directives/resize'\ninstallDirectives(component, {Resize})\n","// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function installDirectives (component, directives) {\n var options = typeof component.exports === 'function'\n ? component.exports.extendOptions\n : component.options\n\n if (typeof component.exports === 'function') {\n options.directives = component.exports.options.directives\n }\n\n options.directives = options.directives || {}\n\n for (var i in directives) {\n options.directives[i] = options.directives[i] || directives[i]\n }\n}\n","var $ = require('../internals/export');\nvar is = require('../internals/same-value');\n\n// `Object.is` method\n// https://tc39.github.io/ecma262/#sec-object.is\n$({ target: 'Object', stat: true }, {\n is: is\n});\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTree.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapToolbar.vue?vue&type=style&index=1&id=2fb0ba75&scoped=true&lang=scss&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcY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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=\"","'use strict';\n\nvar proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4');\n// Checks if `list` looks like a `[x, y]`.\nfunction isXY(list) {\n return list.length >= 2 &&\n typeof list[0] === 'number' &&\n typeof list[1] === 'number';\n}\n\nfunction traverseCoords(coordinates, callback) {\n if (isXY(coordinates)) return callback(coordinates);\n return coordinates.map(function(coord){return traverseCoords(coord, callback);});\n}\n\n// Simplistic shallow clone that will work for a normal GeoJSON object.\nfunction clone(obj) {\n if (null == obj || 'object' !== typeof obj) return obj;\n var copy = obj.constructor();\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];\n }\n return copy;\n}\n\nfunction traverseGeoJson(geometryCb, nodeCb, geojson) {\n if (geojson == null) return geojson;\n\n var r = clone(geojson);\n var self = traverseGeoJson.bind(this, geometryCb, nodeCb);\n\n switch (geojson.type) {\n case 'Feature':\n r.geometry = self(geojson.geometry);\n break;\n case 'FeatureCollection':\n r.features = r.features.map(self);\n break;\n case 'GeometryCollection':\n r.geometries = r.geometries.map(self);\n break;\n default:\n geometryCb(r);\n break;\n }\n\n if (nodeCb) nodeCb(r);\n\n return r;\n}\n\nfunction detectCrs(geojson, projs) {\n var crsInfo = geojson.crs,\n crs;\n\n if (crsInfo === undefined) {\n throw new Error('Unable to detect CRS, GeoJSON has no \"crs\" property.');\n }\n\n if (crsInfo.type === 'name') {\n crs = projs[crsInfo.properties.name];\n } else if (crsInfo.type === 'EPSG') {\n crs = projs['EPSG:' + crsInfo.properties.code];\n }\n\n if (!crs) {\n throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo));\n }\n\n return crs;\n}\n\nfunction determineCrs(crs, projs) {\n if (typeof crs === 'string' || crs instanceof String) {\n return projs[crs] || proj4.Proj(crs);\n }\n\n return crs;\n}\n\nfunction calcBbox(geojson) {\n var min = [Number.MAX_VALUE, Number.MAX_VALUE],\n max = [-Number.MAX_VALUE, -Number.MAX_VALUE];\n traverseGeoJson(function(_gj) {\n traverseCoords(_gj.coordinates, function(xy) {\n min[0] = Math.min(min[0], xy[0]);\n min[1] = Math.min(min[1], xy[1]);\n max[0] = Math.max(max[0], xy[0]);\n max[1] = Math.max(max[1], xy[1]);\n });\n }, null, geojson);\n return [min[0], min[1], max[0], max[1]];\n}\n\nfunction reproject(geojson, from, to, projs) {\n projs = projs || {};\n if (!from) {\n from = detectCrs(geojson, projs);\n } else {\n from = determineCrs(from, projs);\n }\n\n to = determineCrs(to, projs);\n \n var transformFunc = proj4(from, to).forward.bind(transformFunc);\n\n function transform(coords) {\n var transformed = transformFunc(coords);\n if (coords.length === 3 && coords[2] !== undefined && transformed[2] === undefined) {\n // If the projection doesn't explicitly handle Z coordinate, retain the old one.\n transformed[2] = coords[2];\n }\n return transformed;\n }\n\n var transformGeometryCoords = function(gj) {\n // No easy way to put correct CRS info into the GeoJSON,\n // and definitely wrong to keep the old, so delete it.\n if (gj.crs) {\n delete gj.crs;\n }\n gj.coordinates = traverseCoords(gj.coordinates, transform);\n }\n\n var transformBbox = function(gj) {\n if (gj.bbox) {\n gj.bbox = calcBbox(gj);\n }\n }\n\n return traverseGeoJson(transformGeometryCoords, transformBbox, geojson);\n}\n\nmodule.exports = {\n detectCrs: detectCrs,\n\n reproject: reproject,\n\n reverse: function(geojson) {\n return traverseGeoJson(function(gj) {\n gj.coordinates = traverseCoords(gj.coordinates, function(xy) {\n return [ xy[1], xy[0] ];\n });\n }, null, geojson);\n },\n\n toWgs84: function(geojson, from, projs) {\n return reproject(geojson, from, proj4.WGS84, projs);\n }\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative(nativeSearch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = String(searchString);\n return nativeEndsWith\n ? nativeEndsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n ft: {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'ENGINEERINGCRS':\n case 'ENGCRS':\n case 'FITTED_CS':\n case 'LOCAL_DATUM':\n case 'DATUM':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\n\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n } else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n } else {\n if (typeof wkt.PROJECTION === 'object') {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n } else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.AXIS) {\n var axisOrder = '';\n for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n var axis = wkt.AXIS[i];\n var descriptor = axis[0].toLowerCase();\n if (descriptor.indexOf('north') !== -1) {\n axisOrder += 'n';\n } else if (descriptor.indexOf('south') !== -1) {\n axisOrder += 's';\n } else if (descriptor.indexOf('east') !== -1) {\n axisOrder += 'e';\n } else if (descriptor.indexOf('west') !== -1) {\n axisOrder += 'w';\n }\n }\n if (axisOrder.length === 2) {\n axisOrder += 'u';\n }\n if (axisOrder.length === 3) {\n wkt.axis = axisOrder;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = wkt.UNIT.convert;\n }\n }\n }\n var geogcs = wkt.GEOGCS;\n if (wkt.type === 'GEOGCS') {\n geogcs = wkt;\n }\n if (geogcs) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (geogcs.DATUM) {\n wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n } else {\n wkt.datumCode = geogcs.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = 'rnb72';\n }\n if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n wkt.ellps = 'intl';\n }\n\n wkt.a = geogcs.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n }\n\n if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n wkt.datum_params = geogcs.DATUM.TOWGS84;\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = 'osgb36';\n }\n if (~wkt.datumCode.indexOf('osni_1952')) {\n wkt.datumCode = 'osni52';\n }\n if (~wkt.datumCode.indexOf('tm65')\n || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n wkt.datumCode = 'ire65';\n }\n if (wkt.datumCode === 'ch1903+') {\n wkt.datumCode = 'ch1903';\n }\n if (~wkt.datumCode.indexOf('israel')) {\n wkt.datumCode = 'isr93';\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return input * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['false_easting', 'False_Easting'],\n ['false_northing', 'False_Northing'],\n ['central_meridian', 'Central_Meridian'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_Of_Center'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longitude_of_center', 'Longitude_of_center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['azimuth', 'Azimuth'],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\n var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n towgs84: \"606.0,23.0,413.0\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n towgs84: \"653.0,-212.0,449.0\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n};\n\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\n\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\n\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\n\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\n\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\n\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback(srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calulated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {PJD_3PARAM, PJD_7PARAM, PJD_NODATUM} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n // Do we need to go through geocentric coordinates?\n if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source.es, source.a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n case 'w':\n case 'n':\n case 's':\n out[t] = v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n }\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords) {\n return transformer(fromProj, toProj, coords);\n },\n inverse: function (coords) {\n return transformer(toProj, fromProj, coords);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (this.es === undefined || this.es <= 0) {\n throw new Error('incorrect elliptical usage');\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {EPSLN, HALF_PI, FORTPI} from '../constants/values';\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() {\n this.no_off = this.no_off || false;\n this.no_rot = this.no_rot || false;\n\n if (isNaN(this.k0)) {\n this.k0 = 1;\n }\n var sinlat = Math.sin(this.lat0);\n var coslat = Math.cos(this.lat0);\n var con = this.e * sinlat;\n\n this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n var t0 = tsfnz(this.e, this.lat0, sinlat);\n var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n if (dl * dl < 1) {\n dl = 1;\n }\n var fl;\n var gl;\n if (!isNaN(this.longc)) {\n //Central point and azimuth method\n\n if (this.lat0 >= 0) {\n fl = dl + Math.sqrt(dl * dl - 1);\n }\n else {\n fl = dl - Math.sqrt(dl * dl - 1);\n }\n this.el = fl * Math.pow(t0, this.bl);\n gl = 0.5 * (fl - 1 / fl);\n this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n }\n else {\n //2 points method\n var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n if (this.lat0 >= 0) {\n this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n else {\n this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n var hl = Math.pow(t1, this.bl);\n var ll = Math.pow(t2, this.bl);\n fl = this.el / hl;\n gl = 0.5 * (fl - 1 / fl);\n var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n var pl = (ll - hl) / (ll + hl);\n var dlon12 = adjust_lon(this.long1 - this.long2);\n this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n this.long0 = adjust_lon(this.long0);\n var dlon10 = adjust_lon(this.long1 - this.long0);\n this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n }\n\n if (this.no_off) {\n this.uc = 0;\n }\n else {\n if (this.lat0 >= 0) {\n this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n else {\n this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n }\n\n}\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var dlon = adjust_lon(lon - this.long0);\n var us, vs;\n var con;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n if (lat > 0) {\n con = -1;\n }\n else {\n con = 1;\n }\n vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n us = -1 * con * HALF_PI * this.al / this.bl;\n }\n else {\n var t = tsfnz(this.e, lat, Math.sin(lat));\n var ql = this.el / Math.pow(t, this.bl);\n var sl = 0.5 * (ql - 1 / ql);\n var tl = 0.5 * (ql + 1 / ql);\n var vl = Math.sin(this.bl * (dlon));\n var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n vs = Number.POSITIVE_INFINITY;\n }\n else {\n vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n }\n if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n us = this.al * this.bl * (dlon);\n }\n else {\n us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n }\n }\n\n if (this.no_rot) {\n p.x = this.x0 + us;\n p.y = this.y0 + vs;\n }\n else {\n\n us -= this.uc;\n p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n }\n return p;\n}\n\nexport function inverse(p) {\n var us, vs;\n if (this.no_rot) {\n vs = p.y - this.y0;\n us = p.x - this.x0;\n }\n else {\n vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n us += this.uc;\n }\n var qp = Math.exp(-1 * this.bl * vs / this.al);\n var sp = 0.5 * (qp - 1 / qp);\n var tp = 0.5 * (qp + 1 / qp);\n var vp = Math.sin(this.bl * us / this.al);\n var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n if (Math.abs(up - 1) < EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n }\n else if (Math.abs(up + 1) < EPSLN) {\n p.x = this.long0;\n p.y = -1 * HALF_PI;\n }\n else {\n p.y = phi2z(this.e, ts);\n p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n }\n return p;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n\n // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n //double c_lat; /* center latitude */\n //double c_lon; /* center longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AttributeTable.vue?vue&type=style&index=0&id=6b1b8591&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=style&index=0&id=356b38a4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerTreeNode.vue?vue&type=style&index=0&id=356b38a4&scoped=true&lang=css&\"","import VDivider from './VDivider'\n\nexport { VDivider }\nexport default VDivider\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WebGis.vue?vue&type=style&index=0&lang=css&\""],"sourceRoot":""}