UNPKG

sic-mapping-toolkit

Version:

SICMapping Toolkit es una biblioteca para Angular que permite la creación de aplicaciones de Web Mapping por medio de OpenLayers

186 lines 23.8 kB
import VectorSource from "ol/source/Vector"; import VectorLayer from "ol/layer/Vector"; import cuid from "cuid"; import { MapEvents } from "./map-event-type.enum"; const HIGHLIGHT_ZINDEX = 1000; const defaultOptions = { hasHighlight: true, hasSnap: false, }; export class SICMap { constructor(map, options) { this.map = map; this.id = options.id || cuid(); this.layers = []; this.eventHandlers = {}; MapEvents.forEach((x) => { this.eventHandlers[x] = []; }); this.map.on(MapEvents, (evt) => { if (this.eventHandlers[evt.type]) { const special = this.eventHandlers[evt.type].filter((x) => x.priority === "SPECIAL"); const high = this.eventHandlers[evt.type].filter((x) => x.priority === "HIGH"); const normal = this.eventHandlers[evt.type].filter((x) => x.priority === "NORMAL"); const low = this.eventHandlers[evt.type].filter((x) => x.priority === "LOW"); if (high.length > 0) { [...high, ...special].forEach((x) => x.fn(evt)); } else if (normal.length > 0) { [...normal, ...special].forEach((x) => x.fn(evt)); } else { [...low, ...special].forEach((x) => x.fn(evt)); } } }); if (options.hasHighlight) { this.highlightSource = new VectorSource({ wrapX: true }); const highlightLayer = new VectorLayer({ source: this.highlightSource, zIndex: HIGHLIGHT_ZINDEX, }); this.map.addLayer(highlightLayer); } } static initMap(map, options = {}) { return new SICMap(map, Object.assign(Object.assign({}, defaultOptions), options)); } get Id() { return this.id; } // Métodos para capas setBaseLayer(layer) { this.baseLayer = layer; this.baseLayer.Layer.setZIndex(-1); this.map.addLayer(layer.Layer); return this.baseLayer.Id; } clearBaseLayer() { if (!!this.baseLayer) { this.map.removeLayer(this.baseLayer.Layer); this.baseLayer = null; } } addLayer(layer) { this.layers.push(layer); this.map.addLayer(layer.Layer); return layer.Id; } removeLayer(id) { const layer = this.layers.find((l) => l.Id === id); if (!!layer) { this.map.removeLayer(layer.Layer); } this.layers = this.layers.filter((l) => l.Id !== id); } // Métodos para popup en el mapa (ol overlays) addOverlay(popupOverlay) { this.map.addOverlay(popupOverlay); } removeOverlay(popupOverlay) { this.map.removeOverlay(popupOverlay); } // Manejo de Eventos addEventHandler(eventType, handler, priority = "NORMAL") { if (!this.eventHandlers[eventType]) { this.eventHandlers[eventType] = []; } const key = eventType + "." + cuid(); const eventHandler = { key, priority, fn: handler, }; this.eventHandlers[eventType].push(eventHandler); return key; } removeEventHandler(id) { const evtType = id.split(".")[0]; const idx = this.eventHandlers[evtType].reduce((a, b, i) => (b.key === id ? i : a), -1); if (idx === -1) { return; } this.eventHandlers[evtType] = [ ...this.eventHandlers[evtType].slice(0, idx), ...this.eventHandlers[evtType].slice(idx + 1), ]; } // Métodos para agregar interacciones addInteraction(interaction) { this.map.addInteraction(interaction); } removeInteraction(interaction) { this.map.removeInteraction(interaction); } // Métodos para agregar MapControls addControl(control) { this.map.addControl(control); } removeControl(control) { this.map.removeControl(control); } // Métodos de dibujo drawFeatures(features, style) { if (!!this.highlightSource) { features.forEach((f) => { f.setStyle(style); this.highlightSource.addFeature(f); }); } else { throw new Error("No highlight source available"); } } clearFeatures(featureIdPrefix) { if (!this.highlightSource) { throw new Error("No highlight source available"); } if (featureIdPrefix) { this.highlightSource .getFeatures() .filter((f) => f.getId().toString().startsWith(featureIdPrefix)) .forEach((f) => this.highlightSource.removeFeature(f)); } else { this.highlightSource.clear(); } } // Métodos de la vista getViewExtent() { return this.map.getView().calculateExtent(this.map.getSize()); } getViewResolution() { return this.map.getView().getResolution(); } moveTo(extent, animated = true) { this.map.getView().fit(extent, { duration: animated ? 500 : 0, }); } getZoom() { return this.map.getView().getZoom(); } setZoom(zoom, animated = true) { if (animated) { this.map.getView().animate({ zoom, duration: 500 }); } else { this.map.getView().setZoom(zoom); } } getCenter() { return this.map.getView().getCenter(); } setCenter(center, animated = true) { if (animated) { this.map.getView().animate({ center, duration: 500 }); } else { this.map.getView().setCenter(center); } } detectSizeChange() { this.map.updateSize(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ljLW1hcHBpbmctdG9vbGtpdC9zcmMvbGliL21vZGVscy9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFHMUMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFnQjlCLE1BQU0sY0FBYyxHQUFnQjtJQUNsQyxZQUFZLEVBQUUsSUFBSTtJQUNsQixPQUFPLEVBQUUsS0FBSztDQUNmLENBQUM7QUFFRixNQUFNLE9BQU8sTUFBTTtJQVdqQixZQUE0QixHQUFRLEVBQUUsT0FBb0I7UUFBOUIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNsQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxD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SSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQXdCLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDakQsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2RDthQUFNO1lBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFwIGZyb20gXCJvbC9NYXBcIjtcbmltcG9ydCBGZWF0dXJlIGZyb20gXCJvbC9GZWF0dXJlXCI7XG5pbXBvcnQgU3R5bGUgZnJvbSBcIm9sL3N0eWxlL1N0eWxlXCI7XG5pbXBvcnQgeyBPdmVybGF5LCBJbnRlcmFjdGlvbiB9IGZyb20gXCJvbFwiO1xuaW1wb3J0IHsgRXh0ZW50IH0gZnJvbSBcIm9sL2V4dGVudFwiO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tIFwib2wvc291cmNlL1ZlY3RvclwiO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gXCJvbC9sYXllci9WZWN0b3JcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJvbC9jb250cm9sL0NvbnRyb2xcIjtcbmltcG9ydCB7IFNJQ0xheWVyIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCBjdWlkIGZyb20gXCJjdWlkXCI7XG5cbmltcG9ydCB7IE1hcEV2ZW50VHlwZSwgTWFwRXZlbnRzIH0gZnJvbSBcIi4vbWFwLWV2ZW50LXR5cGUuZW51bVwiO1xuXG5jb25zdCBISUdITElHSFRfWklOREVYID0gMTAwMDtcblxuaW50ZXJmYWNlIE1hcGFPcHRpb25zIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGhhc0hpZ2hsaWdodD86IGJvb2xlYW47XG4gIGhhc1NuYXA/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBNYXBFdmVudEhhbmRsZXJQcmlvcml0eSA9IFwiTE9XXCIgfCBcIk5PUk1BTFwiIHwgXCJISUdIXCIgfCBcIlNQRUNJQUxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBhRXZlbnRIYW5kbGVyIHtcbiAga2V5OiBzdHJpbmc7XG4gIHByaW9yaXR5OiBNYXBFdmVudEhhbmRsZXJQcmlvcml0eTtcbiAgZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE1hcGFPcHRpb25zID0ge1xuICBoYXNIaWdobGlnaHQ6IHRydWUsXG4gIGhhc1NuYXA6IGZhbHNlLFxufTtcblxuZXhwb3J0IGNsYXNzIFNJQ01hcCB7XG4gIHByaXZhdGUgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBoaWdobGlnaHRTb3VyY2U6IFZlY3RvclNvdXJjZTtcbiAgcHJpdmF0ZSBldmVudEhhbmRsZXJzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PE1hcGFFdmVudEhhbmRsZXI+IH07XG4gIHByaXZhdGUgYmFzZUxheWVyOiBTSUNMYXllcjtcbiAgcHJpdmF0ZSBsYXllcnM6IEFycmF5PFNJQ0xheWVyPjtcblxuICBwdWJsaWMgc3RhdGljIGluaXRNYXAobWFwOiBNYXAsIG9wdGlvbnM6IE1hcGFPcHRpb25zID0ge30pOiBTSUNNYXAge1xuICAgIHJldHVybiBuZXcgU0lDTWFwKG1hcCwgeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBtYXA6IE1hcCwgb3B0aW9uczogTWFwYU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCB8fCBjdWlkKCk7XG4gICAgdGhpcy5sYXllcnMgPSBbXTtcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICBNYXBFdmVudHMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgdGhpcy5ldmVudEhhbmRsZXJzW3hdID0gW107XG4gICAgfSk7XG5cbiAgICB0aGlzLm1hcC5vbihNYXBFdmVudHMsIChldnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmV2ZW50SGFuZGxlcnNbZXZ0LnR5cGVdKSB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWwgPSB0aGlzLmV2ZW50SGFuZGxlcnNbZXZ0LnR5cGVdLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4geC5wcmlvcml0eSA9PT0gXCJTUEVDSUFMXCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaGlnaCA9IHRoaXMuZXZlbnRIYW5kbGVyc1tldnQudHlwZV0uZmlsdGVyKFxuICAgICAgICAgICh4KSA9PiB4LnByaW9yaXR5ID09PSBcIkhJR0hcIlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBub3JtYWwgPSB0aGlzLmV2ZW50SGFuZGxlcnNbZXZ0LnR5cGVdLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4geC5wcmlvcml0eSA9PT0gXCJOT1JNQUxcIlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsb3cgPSB0aGlzLmV2ZW50SGFuZGxlcnNbZXZ0LnR5cGVdLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4geC5wcmlvcml0eSA9PT0gXCJMT1dcIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChoaWdoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBbLi4uaGlnaCwgLi4uc3BlY2lhbF0uZm9yRWFjaCgoeCkgPT4geC5mbihldnQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgIFsuLi5ub3JtYWwsIC4uLnNwZWNpYWxdLmZvckVhY2goKHgpID0+IHguZm4oZXZ0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgWy4uLmxvdywgLi4uc3BlY2lhbF0uZm9yRWFjaCgoeCkgPT4geC5mbihldnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMuaGFzSGlnaGxpZ2h0KSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodFNvdXJjZSA9IG5ldyBWZWN0b3JTb3VyY2UoeyB3cmFwWDogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodExheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgc291cmNlOiB0aGlzLmhpZ2hsaWdodFNvdXJjZSxcbiAgICAgICAgekluZGV4OiBISUdITElHSFRfWklOREVYLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcC5hZGRMYXllcihoaWdobGlnaHRMYXllcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvLyBNw6l0b2RvcyBwYXJhIGNhcGFzXG4gIHNldEJhc2VMYXllcihsYXllcjogU0lDTGF5ZXIpIHtcbiAgICB0aGlzLmJhc2VMYXllciA9IGxheWVyO1xuICAgIHRoaXMuYmFzZUxheWVyLkxheWVyLnNldFpJbmRleCgtMSk7XG4gICAgdGhpcy5tYXAuYWRkTGF5ZXIobGF5ZXIuTGF5ZXIpO1xuICAgIHJldHVybiB0aGlzLmJhc2VMYXllci5JZDtcbiAgfVxuXG4gIGNsZWFyQmFzZUxheWVyKCkge1xuICAgIGlmICghIXRoaXMuYmFzZUxheWVyKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcih0aGlzLmJhc2VMYXllci5MYXllcik7XG4gICAgICB0aGlzLmJhc2VMYXllciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF5ZXIobGF5ZXI6IFNJQ0xheWVyKSB7XG4gICAgdGhpcy5sYXllcnMucHVzaChsYXllcik7XG4gICAgdGhpcy5tYXAuYWRkTGF5ZXIobGF5ZXIuTGF5ZXIpO1xuICAgIHJldHVybiBsYXllci5JZDtcbiAgfVxuXG4gIHJlbW92ZUxheWVyKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzLmZpbmQoKGwpID0+IGwuSWQgPT09IGlkKTtcbiAgICBpZiAoISFsYXllcikge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIuTGF5ZXIpO1xuICAgIH1cbiAgICB0aGlzLmxheWVycyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5JZCAhPT0gaWQpO1xuICB9XG5cbiAgLy8gTcOpdG9kb3MgcGFyYSBwb3B1cCBlbiBlbCBtYXBhIChvbCBvdmVybGF5cylcbiAgYWRkT3ZlcmxheShwb3B1cE92ZXJsYXk6IE92ZXJsYXkpIHtcbiAgICB0aGlzLm1hcC5hZGRPdmVybGF5KHBvcHVwT3ZlcmxheSk7XG4gIH1cblxuICByZW1vdmVPdmVybGF5KHBvcHVwT3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHRoaXMubWFwLnJlbW92ZU92ZXJsYXkocG9wdXBPdmVybGF5KTtcbiAgfVxuXG4gIC8vIE1hbmVqbyBkZSBFdmVudG9zXG4gIGFkZEV2ZW50SGFuZGxlcihcbiAgICBldmVudFR5cGU6IE1hcEV2ZW50VHlwZSxcbiAgICBoYW5kbGVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAgcHJpb3JpdHk6IE1hcEV2ZW50SGFuZGxlclByaW9yaXR5ID0gXCJOT1JNQUxcIlxuICApOiBhbnkge1xuICAgIGlmICghdGhpcy5ldmVudEhhbmRsZXJzW2V2ZW50VHlwZV0pIHtcbiAgICAgIHRoaXMuZXZlbnRIYW5kbGVyc1tldmVudFR5cGVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gZXZlbnRUeXBlICsgXCIuXCIgKyBjdWlkKCk7XG4gICAgY29uc3QgZXZlbnRIYW5kbGVyOiBNYXBhRXZlbnRIYW5kbGVyID0ge1xuICAgICAga2V5LFxuICAgICAgcHJpb3JpdHksXG4gICAgICBmbjogaGFuZGxlcixcbiAgICB9O1xuXG4gICAgdGhpcy5ldmVudEhhbmRsZXJzW2V2ZW50VHlwZV0ucHVzaChldmVudEhhbmRsZXIpO1xuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50SGFuZGxlcihpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZXZ0VHlwZSA9IGlkLnNwbGl0KFwiLlwiKVswXTtcbiAgICBjb25zdCBpZHggPSB0aGlzLmV2ZW50SGFuZGxlcnNbZXZ0VHlwZV0ucmVkdWNlKFxuICAgICAgKGEsIGIsIGkpID0+IChiLmtleSA9PT0gaWQgPyBpIDogYSksXG4gICAgICAtMVxuICAgICk7XG5cbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXZlbnRIYW5kbGVyc1tldnRUeXBlXSA9IFtcbiAgICAgIC4uLnRoaXMuZXZlbnRIYW5kbGVyc1tldnRUeXBlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgLi4udGhpcy5ldmVudEhhbmRsZXJzW2V2dFR5cGVdLnNsaWNlKGlkeCArIDEpLFxuICAgIF07XG4gIH1cblxuICAvLyBNw6l0b2RvcyBwYXJhIGFncmVnYXIgaW50ZXJhY2Npb25lc1xuICBhZGRJbnRlcmFjdGlvbihpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24pIHtcbiAgICB0aGlzLm1hcC5hZGRJbnRlcmFjdGlvbihpbnRlcmFjdGlvbik7XG4gIH1cblxuICByZW1vdmVJbnRlcmFjdGlvbihpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb24pIHtcbiAgICB0aGlzLm1hcC5yZW1vdmVJbnRlcmFjdGlvbihpbnRlcmFjdGlvbik7XG4gIH1cblxuICAvLyBNw6l0b2RvcyBwYXJhIGFncmVnYXIgTWFwQ29udHJvbHNcbiAgYWRkQ29udHJvbChjb250cm9sOiBDb250cm9sKSB7XG4gICAgdGhpcy5tYXAuYWRkQ29udHJvbChjb250cm9sKTtcbiAgfVxuXG4gIHJlbW92ZUNvbnRyb2woY29udHJvbDogQ29udHJvbCkge1xuICAgIHRoaXMubWFwLnJlbW92ZUNvbnRyb2woY29udHJvbCk7XG4gIH1cblxuICAvLyBNw6l0b2RvcyBkZSBkaWJ1am9cbiAgZHJhd0ZlYXR1cmVzKGZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPiwgc3R5bGU/OiBTdHlsZSkge1xuICAgIGlmICghIXRoaXMuaGlnaGxpZ2h0U291cmNlKSB7XG4gICAgICBmZWF0dXJlcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIGYuc2V0U3R5bGUoc3R5bGUpO1xuICAgICAgICB0aGlzLmhpZ2hsaWdodFNvdXJjZS5hZGRGZWF0dXJlKGYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGhpZ2hsaWdodCBzb3VyY2UgYXZhaWxhYmxlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmVhdHVyZXMoZmVhdHVyZUlkUHJlZml4OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaGlnaGxpZ2h0U291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBoaWdobGlnaHQgc291cmNlIGF2YWlsYWJsZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoZmVhdHVyZUlkUHJlZml4KSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodFNvdXJjZVxuICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAuZmlsdGVyKChmKSA9PiBmLmdldElkKCkudG9TdHJpbmcoKS5zdGFydHNXaXRoKGZlYXR1cmVJZFByZWZpeCkpXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiB0aGlzLmhpZ2hsaWdodFNvdXJjZS5yZW1vdmVGZWF0dXJlKGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWdobGlnaHRTb3VyY2UuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0b2RvcyBkZSBsYSB2aXN0YVxuICBnZXRWaWV3RXh0ZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXRWaWV3KCkuY2FsY3VsYXRlRXh0ZW50KHRoaXMubWFwLmdldFNpemUoKSk7XG4gIH1cblxuICBnZXRWaWV3UmVzb2x1dGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKTtcbiAgfVxuXG4gIG1vdmVUbyhleHRlbnQ6IEV4dGVudCwgYW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgdGhpcy5tYXAuZ2V0VmlldygpLmZpdChleHRlbnQsIHtcbiAgICAgIGR1cmF0aW9uOiBhbmltYXRlZCA/IDUwMCA6IDAsXG4gICAgfSk7XG4gIH1cblxuICBnZXRab29tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldFZpZXcoKS5nZXRab29tKCk7XG4gIH1cblxuICBzZXRab29tKHpvb206IG51bWJlciwgYW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgaWYgKGFuaW1hdGVkKSB7XG4gICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuYW5pbWF0ZSh7IHpvb20sIGR1cmF0aW9uOiA1MDAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFwLmdldFZpZXcoKS5zZXRab29tKHpvb20pO1xuICAgIH1cbiAgfVxuXG4gIGdldENlbnRlcigpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0VmlldygpLmdldENlbnRlcigpO1xuICB9XG5cbiAgc2V0Q2VudGVyKGNlbnRlcjogW251bWJlciwgbnVtYmVyXSwgYW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgaWYgKGFuaW1hdGVkKSB7XG4gICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuYW5pbWF0ZSh7IGNlbnRlciwgZHVyYXRpb246IDUwMCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAuZ2V0VmlldygpLnNldENlbnRlcihjZW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGRldGVjdFNpemVDaGFuZ2UoKSB7XG4gICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICB9XG59XG4iXX0=