hslayers-ng
Version:
HSLayers-NG mapping library
1 lines • 22 kB
Source Map (JSON)
{"version":3,"file":"hslayers-ng-common-layer-table.mjs","sources":["../../../projects/hslayers/common/layer-table/wms-layer-highlight.directive.ts","../../../projects/hslayers/common/layer-table/nested-layers-table/nested-layers-table.component.ts","../../../projects/hslayers/common/layer-table/nested-layers-table/nested-layers-table.component.html","../../../projects/hslayers/common/layer-table/layer-table.component.ts","../../../projects/hslayers/common/layer-table/layer-table.component.html","../../../projects/hslayers/common/layer-table/hslayers-ng-common-layer-table.ts"],"sourcesContent":["import {Directive, ElementRef, HostBinding, inject} from '@angular/core';\nimport {isOverflown} from 'hslayers-ng/services/utils';\n\n@Directive({\n selector: '[hsWmsLayerHighlight]',\n standalone: true,\n})\nexport class WmsLayerHighlightDirective {\n private elRef = inject(ElementRef);\n\n @HostBinding('class.hs-wms-highlighted') highlighted = false;\n\n constructor() {\n setTimeout(() => {\n this.highlighted = isOverflown(this.elRef.nativeElement);\n }, 500);\n }\n}\n","import {Component, EventEmitter, Input, Output, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsUrlWmsService} from 'hslayers-ng/services/add-data';\nimport {WmsLayerHighlightDirective} from '../wms-layer-highlight.directive';\n\n@Component({\n selector: 'hs-nested-layers-table',\n templateUrl: './nested-layers-table.component.html',\n imports: [FormsModule, TranslatePipe, WmsLayerHighlightDirective],\n})\nexport class HsNestedLayersTableComponent {\n hsUrlWmsService = inject(HsUrlWmsService);\n\n @Input() layers;\n\n @Output() layerChecked = new EventEmitter<string>();\n\n checked(layer): void {\n this.layerChecked.emit(layer);\n }\n\n isArray(maybeArray: any): boolean {\n return Array.isArray(maybeArray);\n }\n}\n","<table class=\"table table-sm table-striped table-bordered hs-url-table\" style=\"width: 100%\">\n @for (sub_layer of layers; track sub_layer['Name']) {\n <tbody>\n <tr>\n <td style=\"width: 1em\"><input type=\"checkbox\" [(ngModel)]=\"sub_layer.checked\" (change)=\"checked(sub_layer)\"\n [ngModelOptions]=\"{standalone: true}\" style=\"cursor: pointer;\" /></td>\n <td hsWmsLayerHighlight class=\"text-truncate\" style=\"max-width: 12em;\"\n [title]=\"'Title: ' + sub_layer.Title + '\\nName: ' + sub_layer.Name\"\n (click)=\"hsUrlWmsService.expandTableRow($event)\"><span>{{sub_layer.Title}}</span>\n </td>\n <!-- <td class=\"text-truncate\" style=\"width: 30%; padding-left: 1em\">{{sub_layer.Name}}</td> -->\n <td hsWmsLayerHighlight class=\"text-truncate\" style=\"max-width: 10.875em;width: 30%;\" [title]=\"sub_layer.Abstract\"\n (click)=\"hsUrlWmsService.expandTableRow($event)\">{{sub_layer.Abstract}}\n </td>\n </tr>\n @if (sub_layer.Style?.length > 1 && sub_layer.checked) {\n <tr>\n <td colspan=\"3\">\n <div class=\"d-flex align-items-baseline px-2 w-100\">\n <div class=\"d-flex align-items-baseline\" style=\"flex-grow: 1;\">\n <label class=\"control-label\">{{'COMMON.style' | translate }}:</label>\n <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"sub_layer.styleSelected\"\n [ngModelOptions]=\"{standalone: true}\">\n @for (style of sub_layer.Style; track style) {\n <option>{{style.Name}}</option>\n }\n </select>\n </div>\n </div>\n </td>\n </tr>\n }\n @if (!!sub_layer.Dimension) {\n <tr>\n <td colspan=\"3\">\n <form class=\"form\">\n @for (dimension of sub_layer.Dimension; track dimension) {\n <div class=\"form-group\">\n @if (isArray(dimension.values)) {\n <!-- TODO: Remove function call from template -->\n <label class=\"control-label\">{{dimension.name}}:</label>\n <div>\n <select class=\"form-control form-select\" [(ngModel)]=\"dimension.value\"\n [ngModelOptions]=\"{standalone: true}\">\n @for (dimension_value of dimension.values; track dimension_value) {\n <option [value]=\"dimension_value\">\n {{dimension_value}}</option>\n }\n </select>\n </div>\n } @else {\n <span class=\"text-muted\">{{'ADDLAYERS.unknownDimesion'\n | translate }}: {{dimension.name}}</span>\n }\n </div>\n }\n </form>\n </td>\n </tr>\n }\n @if (!!sub_layer.Layer) {\n <tr>\n <td colspan=\"3\" style=\"padding-left: 1em\">\n <hs-nested-layers-table style=\"display: block;\" (layerChecked)=\"checked($event)\"\n [layers]=\"sub_layer.Layer\"></hs-nested-layers-table>\n </td>\n </tr>\n }\n </tbody>\n }\n</table>\n","import {AfterContentInit, Component, Input, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {NgClass, SlicePipe} from '@angular/common';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n AddDataUrlType,\n UrlDataObject,\n HsUrlTypeServiceModel,\n Service,\n} from 'hslayers-ng/types';\nimport {\n HsAddDataCommonService,\n HsAddDataService,\n HsAddDataUrlService,\n HsUrlWmsService,\n} from 'hslayers-ng/services/add-data';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsNestedLayersTableComponent} from './nested-layers-table/nested-layers-table.component';\n\n@Component({\n selector: 'hs-layer-table',\n templateUrl: './layer-table.component.html',\n imports: [\n TranslatePipe,\n FormsModule,\n SlicePipe,\n NgClass,\n HsNestedLayersTableComponent,\n ],\n})\nexport class HsLayerTableComponent implements AfterContentInit {\n hsAddDataUrlService = inject(HsAddDataUrlService);\n hsAddDataService = inject(HsAddDataService);\n hsLanguageService = inject(HsLanguageService);\n hsUrlWmsService = inject(HsUrlWmsService);\n hsAddDataCommonService = inject(HsAddDataCommonService);\n\n @Input() injectedService: HsUrlTypeServiceModel;\n @Input() type: AddDataUrlType;\n\n data: UrlDataObject;\n checkedSubLayers = {};\n getDimensionValues: any;\n limitShown = 100;\n\n ngAfterContentInit(): void {\n this.data = this.injectedService.data;\n this.getDimensionValues = this.hsAddDataCommonService.getDimensionValues;\n }\n\n reachedLimit(): boolean {\n if (\n this.data.layers?.length > this.limitShown ||\n this.data.services?.length > this.limitShown\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Checked property event handler\n */\n changed(whichArray: 'layers' | 'services', e: MouseEvent, layer: any): void {\n this.hsAddDataUrlService.searchForChecked(this.data[whichArray]);\n /**\n * If possible calls side effect handling function defined on type service\n * e.g. query getFeature-hits for WFS\n */\n if (this.injectedService.tableLayerChecked) {\n this.injectedService.tableLayerChecked(e, layer);\n }\n }\n\n /**\n * Collapse ArcGIS MapServer expanded service. Used as a way to step back\n */\n collapseServices() {\n if (this.injectedService.collapseServices) {\n this.injectedService.collapseServices();\n }\n }\n\n async expandService(service: Service): Promise<void> {\n if (this.injectedService.expandService) {\n this.injectedService.expandService(service);\n if (\n this.injectedService.isImageService &&\n this.injectedService.isImageService()\n ) {\n const layers = await this.injectedService.getLayers();\n this.injectedService.addLayers(layers);\n }\n }\n }\n\n searchForChecked(layer): void {\n this.checkedSubLayers[layer.Name] = layer.checked;\n this.hsAddDataUrlService.addingAllowed = Object.values(\n this.checkedSubLayers,\n ).some((value) => value === true);\n }\n\n getLimitTextTranslation(): string {\n return this.hsLanguageService.getTranslation(\n 'ADDDATA.CATALOGUE.showingSubset',\n {limitShown: this.limitShown, total: this.data.layers.length},\n );\n }\n}\n","<div>\n @if (type === \"wms\") {\n <table class=\"table table-sm table-striped table-bordered hs-url-table\">\n <thead class=\"bg-secondary text-light\">\n <th style=\"width: 1.5em\"> </th>\n <th>{{ \"COMMON.title\" | translate }}</th>\n <!-- <th style=\"width:30%\">{{'COMMON.name' | translate }}</th> -->\n <th>{{ \"COMMON.abstract\" | translate }}</th>\n </thead>\n @for ( layer of data.layers | slice: 0 : limitShown; track layer.Name ) {\n <tbody>\n <tr>\n <td [attr.rowspan]=\"layer.Style?.length ? 3 : 2\" [ngClass]=\"{ 'align-middle': !layer.Layer }\">\n <input type=\"checkbox\" class=\"checkbox-lg\" [(ngModel)]=\"layer.checked\" name=\"layer\" style=\"cursor: pointer\"\n (change)=\"searchForChecked(layer)\" />\n </td>\n <td hsWmsLayerHighlight style=\"max-width: 25.375em\" class=\"text-truncate\"\n [title]=\"'Title: ' + layer.Title + '\\nName: ' + layer.Name\" (click)=\"hsUrlWmsService.expandTableRow($event)\">\n <span>{{ layer.Title }}</span>\n </td>\n <!-- <td style=\"max-width: 13.75em\" class=\"text-truncate\" [title]=\"layer.Name\">{{layer.Name}}</td> -->\n <td hsWmsLayerHighlight style=\"max-width: 10.875em; width: 30%\" class=\"text-truncate\" [title]=\"layer.Abstract\"\n (click)=\"hsUrlWmsService.expandTableRow($event)\">\n {{ layer.Abstract }}\n </td>\n </tr>\n @if (layer.Style?.length > 1 && layer.checked) {\n <tr>\n <td colspan=\"3\">\n <div class=\"d-flex align-items-baseline px-2 w-100\">\n <div class=\"d-flex align-items-baseline\" style=\"flex-grow: 1\">\n <label class=\"control-label\">{{ \"COMMON.style\" | translate }}:</label>\n <select class=\"form-control form-select-sm form-select\" [(ngModel)]=\"layer.styleSelected\"\n [ngModelOptions]=\"{ standalone: true }\">\n @for (style of layer.Style; track $index) {\n <option [ngValue]=\"style\">{{ style.Name }}</option>\n }\n </select>\n </div>\n </div>\n </td>\n </tr>\n }\n <tr [hidden]=\"!layer.Layer\">\n <td colspan=\"3\" style=\"padding-left: 1em\">\n <hs-nested-layers-table style=\"display: block\" [layers]=\"layer.Layer\"\n (layerChecked)=\"searchForChecked($event)\">\n </hs-nested-layers-table>\n </td>\n </tr>\n </tbody>\n }\n </table>\n } @else {\n <table class=\"table table-sm table-striped table-bordered\">\n <thead>\n <th class=\"border-0\" style=\"width: 1em\"> </th>\n <div class=\"d-flex justify-content-between\">\n <th class=\"border-0\">{{ \"COMMON.name\" | translate }}</th>\n @if (type === \"arcgis\" && data.serviceExpanded) {\n <button type=\"button\" class=\"btn btn-sm px-2 border-0 d-flex align-items-baseline gap-1\" (click)=\"collapseServices()\"\n [title]=\"'COMMON.back' | translate\">\n <i class=\"fa-solid fa-chevron-left text-black-50\"></i>\n <span class=\"text-black-50 fw-bold\">{{\n \"COMMON.back\" | translate\n }}</span>\n </button>\n }\n </div>\n </thead>\n @for ( service of data.services; track service.name ) {\n <tbody>\n <tr>\n <td>\n <input class=\"checkbox-lg\" type=\"checkbox\" name=\"service\" (change)=\"changed('services', $event, service)\"\n style=\"cursor: pointer\" [(ngModel)]=\"service.checked\" />\n </td>\n <td (click)=\"expandService(service)\" data-toggle=\"tooltip\"\n [title]=\"'ADDDATA.requestServiceLayers' | translate\" style=\"cursor: pointer\">\n @if(service.icon){\n <i class=\"fa-solid px-1\" [ngClass]=\"service.icon\" [title]=\"service.type\"></i>\n }\n {{ service.name }}\n <span style=\"font-size: x-small\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n </td>\n </tr>\n </tbody>\n }\n @for ( layer of data.layers; track layer[data.table.trackBy] ) {\n <tbody>\n <tr>\n <td>\n <input class=\"checkbox-lg\" type=\"checkbox\" name=\"layer\" style=\"cursor: pointer\"\n (change)=\"changed('layers', $event, layer)\" [(ngModel)]=\"layer.checked\" />\n </td>\n <td hsWmsLayerHighlight (click)=\"hsUrlWmsService.expandTableRow($event)\" class=\"text-truncate position-relative\"\n style=\"max-width: 45ch\">\n @if(layer.icon){\n <i class=\"fa-solid px-1\" [ngClass]=\"layer.icon\"></i>\n }\n <span>{{ layer[data.table.nameProperty] }}</span>\n <span class=\"hs-loader hs-loader-dark position-absolute end-0 bottom-0 me-3\" [hidden]=\"!layer.loading\"></span>\n @if (layer.featureCount === -9999) {\n <span style=\"transform: translateY(50%)\" [title]=\"'ADDLAYERS.WFS.featureCountError' | translate\"\n class=\"align-items-center bottom-50 d-flex end-0 h-75 me-3 p-2 position-absolute rounded-1 text-bg-warning\">i</span>\n }\n @if (layer.checked && type === \"wmts\") {\n <div class=\"d-flex flex-row justify-content-end align-items-baseline mt-1\">\n {{ \"COMMON.addAs\" | translate }}\n <div class=\"btn-group ms-2\">\n <button type=\"button\" class=\"btn btn-sm btn-light btn-outline-secondary\" (click)=\"layer.base = true\"\n [ngClass]=\"{ active: layer.base }\">\n {{ \"COMPOSITONKEYWORDS.Basemap\" | translate }}\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-light btn-outline-secondary\" (click)=\"layer.base = false\"\n [ngClass]=\"{ active: !layer.base }\">\n {{ \"COMMON.layer\" | translate }}\n </button>\n </div>\n </div>\n }\n @if ( layer.featureCount > 1000 && layer.checked && type === \"wfs\" ) {\n <div class=\"alert alert-primary d-flex m-1\" role=\"alert\">\n <div class=\"w-100\">\n <p class=\"mb-0\" style=\"white-space: normal\" [hidden]=\"!layer.limitFeatureCount\">\n {{ \"ADDLAYERS.WFS.selectedLayerContains\" | translate }}\n {{ layer.featureCount }}\n {{ \"ADDLAYERS.WFS.loadingToManyAtOnce\" | translate }}\n </p>\n </div>\n </div>\n }\n </td>\n </tr>\n </tbody>\n }\n </table>\n }\n @if (type === \"wms\" && reachedLimit()) {\n <div class=\"d-flex justify-content-around align-items-center m-3\">\n <span> {{ getLimitTextTranslation() }}</span>\n <div class=\"btn-group ms-2\">\n <button type=\"button\" class=\"btn btn-sm btn-light btn-outline-secondary\" (click)=\"limitShown = limitShown + 100\">\n {{ \"ADDDATA.CATALOGUE.showNext100\" | translate }}\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-light btn-outline-secondary\"\n (click)=\"limitShown = data.layers.length\">\n {{ \"ADDDATA.CATALOGUE.showAll\" | translate }}\n </button>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}