1{"version":3,"sources":["webpack:///./node_modules/core-js/internals/same-value.js","webpack:///./src/views/WebGis.vue?1083","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/LeftSidebar.vue?983e","webpack:///./src/components/LayerTree.vue?1907","webpack:///./src/components/LayerTreeNode.vue?f65c","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/views/WebGis.vue?6431","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/VDivider/index.ts","webpack:///./node_modules/leaflet/dist/images/marker-shadow.png","webpack:///./src/components/LayerTreeNode.vue?d307"],"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","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","child_node","showMenu","onMouseLeave","item","onContextMenuOptionClicked","domProps","icon","data","mounted","$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","uuidv4","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","VCol","VContainer","VProgressLinear","VRow","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","Error","LeftSidebar","AttributeTable","wms_source","projects","tocs","initializeMap","initializeToc","dispatch","mapObject","loadMap","getOrderedLayerTypenames","forEach","_subLayers","refreshOverlay","_onResize","nodes","layer","symbols","removeSubLayer","getLayer","new_sub_layers","findLayerNodeByTypename","initial_extent","west","south","east","north","jl","fitBounds","tileSize","transparent","format","dpi","devicePixelRatio","onGetFeatureInfo","onGetFeatureInfoStarted","onGetFeatureInfoParamsEnded","onError","that","llmap","parse","queryable","layerList","_getLayers","defaultSlot","VApp","VAppBar","VAppBarNavIcon","VFooter","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-5cedae10.b1aed77d.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-\" + _vm.activeTool,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\":\"© <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('v-footer',{attrs:{\"color\":\"lime\",\"app\":\"\"}},[_vm._v(\" Hand crafted with \"),_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-heart\")]),_vm._v(\"by \"),_c('a',{attrs:{\"href\":\"https://www.qcooperative.net\",\"target\":\"_blank\"}},[_vm._v(\"QCooperative\")])],1)]],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-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},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,staticClass:\"v-treeview-node layer-legend\",attrs:{\"id\":'node-' + _vm.node.tree_id_hash,\"aria-expanded\":_vm.node.expanded ? 'true' : 'false'}},[_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)])}),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 :id=\"'node-' + node.tree_id_hash\"\n class=\"v-treeview-node layer-legend\"\n v-for=\"child in node.children\"\n :key=\"child.title\"\n :aria-expanded=\"node.expanded ? 'true' : 'false'\"\n >\n <div class=\"v-treeview-node vector-legend-entry\">\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>\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 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=24ffc513&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=24ffc513&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 \"24ffc513\",\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 },\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=7d2c24b6&\"\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\" />\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=a2d39c5c&\"\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: '​' },\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=\"`fill-height activetool-` + activeTool\"\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=\"© <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> 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 <v-footer color=\"lime\" app>\n Hand crafted with\n <v-icon color=\"red\">mdi-heart</v-icon>by\n <a href=\"https://www.qcooperative.net\" target=\"_blank\">QCooperative</a>\n </v-footer>\n </template>\n </v-app>\n</template>\n\n<script>\nimport MapToolbar from \"@/components/MapToolbar.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 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 console.log(e.target, feature);\n },\n mouseout: function (e) {\n console.log(e.target);\n },\n click: function (e) {\n console.log(e.target);\n },\n });\n },\n }\n ).addTo(this.map);\n this.map.highlightLayer = highlightLayer;\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};\n</script>\n\n<style scoped>\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</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=9be950ce&scoped=true&\"\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&id=9be950ce&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 \"9be950ce\",\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 { VFooter } from 'vuetify/lib/components/VFooter';\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,VFooter,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--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&id=9be950ce&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!./WebGis.vue?vue&type=style&index=0&id=9be950ce&scoped=true&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 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!./LayerTreeNode.vue?vue&type=style&index=0&id=24ffc513&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=24ffc513&scoped=true&lang=css&\""],"sourceRoot":""}