From f0eb555f98a9d3a4a0745a30e09369ce92993e7b Mon Sep 17 00:00:00 2001 From: fbma Date: Thu, 29 Apr 2021 12:09:33 +0200 Subject: [PATCH] v1.0.1 --- dist/api.json | 7 ++++--- dist/lyrcompare.ol.min.css | 2 +- dist/lyrcompare.ol.min.js | 2 +- dist/lyrcompare.ol.min.js.map | 2 +- package.json | 2 +- src/api.json | 7 ++++--- test/dev.html | 6 +++--- test/prod.html | 6 +++--- 8 files changed, 18 insertions(+), 16 deletions(-) diff --git a/dist/api.json b/dist/api.json index 2825a84a..d9579289 100644 --- a/dist/api.json +++ b/dist/api.json @@ -68,11 +68,12 @@ "name": "LyrCompare", "description": "Comparación entre capas", "text": "Plugin que permite comparar varias capas sobre una cartografía base. La extensión de las capas sobre lienzo vienen definidas por la posición del ratón o por el punto medio del lienzo.", - "version": "1.0.0", - "date": "Junio, 2020", + "version": "1.0.1", + "date": "Abril, 2021", "author": "", "org": "Consejería de Hacienda, Industria y Energía. Junta de Andalucía.", "tags": "mapea,plugin", - "icon": "./facade/assets/icons/icons.svg" + "icon": "./facade/assets/icons/icons.svg", + "compatibility":["6"] } } diff --git a/dist/lyrcompare.ol.min.css b/dist/lyrcompare.ol.min.css index 478484a4..548e130b 100644 --- a/dist/lyrcompare.ol.min.css +++ b/dist/lyrcompare.ol.min.css @@ -1 +1 @@ -div.m-panel.m-plugin-lyrcompare.opened>.g-cartografia-flecha-izquierda{color:#e8f5e9}.m-plugin-lyrcompare.collapsed>div.m-panel-controls{display:none!important}.m-areas>div.m-area.m-right>div.m-plugin-lyrcompare.opened>button.m-panel-btn{position:absolute;left:-2.53rem;color:#fff;background-color:#71a7d3}.m-areas>div.m-area.m-left>div.m-plugin-lyrcompare.opened>button.m-panel-btn{position:absolute;right:-2.53rem;left:unset!important;color:#fff;background-color:#71a7d3}.m-lyrcompare-container{text-align:center}.div-m-lyrcompare-panel{padding-top:1px;width:19rem}.div-m-lyrcompare-transparent-opacity{display:flex;align-items:center;color:#000;padding:4% 5px 5px 8%}.m-lyrcompare-effect-buttoms{padding:8px 0 2px}.m-panel.m-plugin-lyrcompare.collapsed>.m-panel-btn.lyrcompare-icon{color:#71a7d3}.m-lyrcompare-container .big-buttom{font-size:32px;background:none;border:none;cursor:pointer;opacity:.75;transition:all .25s ease;color:#404040;outline:none}.div-m-lyrcompare-panel>hr:nth-child(4){border:1px solid #e0e0e0}.m-lyrcompare-container .big-buttom:hover,.m-lyrcompare-container .buttom-pressed-hcurtain,.m-lyrcompare-container .buttom-pressed-hcurtain:hover,.m-lyrcompare-container .buttom-pressed-multicurtain,.m-lyrcompare-container .buttom-pressed-multicurtain:hover,.m-lyrcompare-container .buttom-pressed-vcurtain,.m-lyrcompare-container .buttom-pressed-vcurtain:hover{color:#71a7d3}.m-lyrcompare-container input[type=range]{-webkit-appearance:none;width:59%;height:8px;padding-left:4%}.m-lyrcompare-container input[type=range]::-webkit-slider-runnable-track{width:100%;height:2px;cursor:pointer;background:rgba(0,0,0,.31);border-radius:12px}.m-lyrcompare-container input[type=range]::-webkit-slider-thumb{height:10px;width:10px;cursor:pointer;border-radius:15px;-webkit-appearance:none;margin-top:-4px;background-color:#71a7d3}.m-lyrcompare-container input[type=range]::-moz-range-track{width:100%;height:2px;cursor:pointer;background:rgba(0,0,0,.31);border-radius:12px}.m-lyrcompare-container input[type=range]::-moz-range-thumb{height:10px;width:10px;cursor:pointer;border:none;background:#fff;-webkit-appearance:none;margin-top:20px;background:#94bdde}.m-lyrcompare-select{position:relative;display:flex;align-items:center;padding:0 5px 5px 8%;color:#000}.m-lyrcompare-select select{font-family:Muli,"sans-serif"!important;display:inline-block;width:75%;cursor:pointer;outline:0;border:0 solid #000;border-radius:0;background:#e6e6e6;color:#000;appearance:none;-webkit-appearance:none;-moz-appearance:none;margin-left:4%;white-space:nowrap;padding:3px 11% 3px 10px}div#m-lyrcompare-titulo{border-bottom:1.5px solid rgba(0,0,0,.12);display:block;font-size:15px;height:40px;line-height:40px;padding:0 5px;text-align:center;width:100%}@-moz-document url-prefix(){.m-lyrcompare-select select{padding:1px 10px}}.m-lyrcompare-select select::-ms-expand{display:none}.m-lyrcompare-select select:focus,.m-lyrcompare-select select:hover{background:#e6e6e6}.m-lyrcompare-select select:disabled{opacity:.5;pointer-events:none}.m-lyrcompare-select_arrow{position:absolute;top:-1px;right:1em;pointer-events:none;border-color:#7b7b7b transparent transparent;border-style:solid;border-width:8px 5px 0;background-color:#e6e6e6;margin:1em}.m-plugin-lyrcompare .icon-flecha-izquierda:before{content:"\e91d"}.m-plugin-lyrcompare-hidden{display:none}@font-face{font-family:lyrcompare;src:url(data:application/vnd.ms-fontobject;base64,/AwAAFgMAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAF1HybgAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yD2oGBwAAALwAAABgY21hcACruyoAAAEcAAAAZGdhc3AAAAAQAAABgAAAAAhnbHlmY3rgVQAAAYgAAAhUaGVhZBj1DHQAAAncAAAANmhoZWEHIQN1AAAKFAAAACRobXR4Lb8ASQAACjgAAAA4bG9jYQzcCu4AAApwAAAAHm1heHAAEwBWAAAKkAAAACBuYW1lmUoJ+wAACrAAAAGGcG9zdAADAAAAAAw4AAAAIAADA8wBkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOnEA2b/ZwCZA2YAmQAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABABIAAAADgAIAAIABgABACDoAekH6cT//f//AAAAAAAg6AHpAOnE//3//wAB/+MYAxcFFkkAAwABAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAEAAD/7AO4AxEAEwAnADsATwAAARUUBwYjISInJj0BNDc2MyEyFxYTFRQHBgchIicmPQE0NzY3ITIXFgEVFAcGIyEiJyY9ATQ3NjMhMhcWExUUBwYHISInJj0BNDc2NyEyFxYBuBcWHf7bHhUWFhUeASUeFRYBFxYd/tseFRYWFR4BJR4VFgIBFhcd/tsdFhUVFh0BJR4WFQEWFx3+2x0WFRUWHQElHhYVARHdHRYVFRYd3R0WFRUWAZnbHhUWARcWHdseFhUBFhf+Ld0dFhUVFh3dHRYVFRYBmdseFRYBFxYd2x4WFQEWFwAAAAMAAP+iA7gDEQAIABIALgAAFzEnJjIXHgEXJREhESEyNjc+ARMRFAYHDgEjISImJy4BNxE0Njc+ATMhMhYXHgFbEgMBAwMBDQMT/pMBWwQHAgMCSg4NDiES/P8SIQ0ODgENDg0gEwMBEyAODQ4UEgMDAwINEgKB/W0CAwIHArv9SRMgDg0ODg0OIRICtxMgDg0ODg0OIQAAAwAA/6IDuAMRAAoAEgAuAAAXIREhERQWFx4BNwUlITI2NzYGExEUBgcOASMhIiYnLgE3ETQ2Nz4BMyEyFhceAVsBXf6RAwMDBgMDA/6jAVsEBwIDClYODQ4hEvz/EiENDg4BDQ4NIBMDARMgDg0OFAKT/X8EBgMDAwECAgIDAgkCy/1JEyAODQ4ODQ4hEgK3EyAODQ4ODQ4hAAAAAwAA/+wDuAMRABsANwBTAAATIgYHDgEdARQWFx4BMyE+ATc+AT0BLgEnLgEjMyIGBw4BHQEUFhceATMhPgE3PgE9ATQmJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQEuAScuASNJDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ/bDxkLCwoKCwsZDwElDxkMCwsMCgsaD/zbDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ8DEQwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsLDAoLGg/bDhoLCwwBCwsLGQ/bDxkMCwv+SAoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoAAAADAAD/7AO4AxEAGwA3AFMAABMiBgcOAR0BFBYXHgEzIT4BNz4BPQEuAScuASMzIgYHDgEdARQWFx4BMyE+ATc+AT0BNCYnLgEjASIGBw4BHQEUFhceATMhMjY3PgE9ATQmJy4BI0kPGgoLCwsLChoPASUOGgsLDAELCwsZD9sPGQsLCgoLCxkPASUPGQwLCwwKCxoP/tsPGQsLCgoLCxkPASUPGQwLCwwKCxoPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLCwwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsL/kgKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKAAAAAAMAAP/sA7gDEQAbADcAUwAAEyIGBw4BHQEUFhceATMhPgE3PgE9AS4BJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQEuAScuASMzIgYHDgEdARQWFx4BMyEyNjc+AT0BNCYnLgEjSQ8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkP/tsPGgoLCwsLChoPASUOGgsLDAELCwsZD9sPGQsLCgoLCxkPASUPGQwLCwwKCxoPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLC/5ICgsLGQ/dDxkLCwoKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoAAAAAAwAA/+wDuAMRABsANwBTAAABIgYHDgEdARQWFx4BMyE+ATc+AT0BNCYnLgEjASIGBw4BHQEUFhceATMhMjY3PgE9AS4BJy4BIzMiBgcOAR0BFBYXHgEzITI2Nz4BPQE0JicuASMCSQ8ZCwsKCgsLGQ8BJQ8ZDAsLDAoLGg/82w8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkP2w8ZCwsKCgsLGQ8BJQ8ZDAsLDAoLGg8DEQwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsL/kgKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoKCwsZD90PGQsLCgAAAAADAAD/ogO4AxEACAAQACQAABchESERFBcWNyURIREhMjc2ExEUBwYHISInJjcRNDc2NyEyFxZbAV3+kQYGBgMT/pMBWwgFBUobHCX8/yUbHAEbGiYDASYbGhQCk/1/BwYGARICgf1tBQUCv/1JJhsaARscJQK3JhsaARscAAAAAAQAAP/sA7gDEQATACcAOwBPAAABFRQHBiMhIicmPQE0NzYzITIXFhMVFAcGByEiJyY9ATQ3NjchMhcWARUUBwYjISInJj0BNDc2MyEyFxYTFRQHBgchIicmPQE0NzY3ITIXFgG4FxYd/tseFRYWFR4BJR4VFgEXFh3+2x4VFhYVHgElHhUWAgEWFx3+2x0WFRUWHQElHhYVARYXHf7bHRYVFRYdASUeFhUBEd0dFhUVFh3dHRYVFRYBmdseFRYBFxYd2x4WFQEWF/4t3R0WFRUWHd0dFhUVFgGZ2x4VFgEXFh3bHhYVARYXAAAAAwBJ//IDtwLOABMAJwA7AAAlFRQHBiMhIicmPQE0NzYzITIXFhEVFAcGIyEiJyY9ATQ3NjMhMhcWERUUBwYjISInJj0BNDc2MyEyFxYDtwsLD/zcDwsLCwsPAyQPCwsLCw/83A8LCwsLDwMkDwsLCwsP/NwPCwsLCw8DJA8LC2BJDwsLCwsPSQ8LCwsLARZKDgsLCwsOSg4LCwsLARZJDwsLCwsPSQ8LCwsLAAEAAAAAAABu8lEXXw889QALBAAAAAAA2w9kYgAAAADbD2RiAAD/ogO4AxEAAAAIAAIAAAAAAAAAAQAAA2b/ZwAABAAAAP//A7gAAQAAAAAAAAAAAAAAAAAAAA4EAAAAAAAAAAAAAAAEAAAAA7cAAAPBAAADwQAAA8EAAAPBAAADwQAAA8EAAAPBAAADwQAABAAASQAAAAAACgAUAB4AlADgAS4BqgImAqIDHgNeA9QEKgAAAAEAAAAOAFQABAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA);src:url(data:application/vnd.ms-fontobject;base64,/AwAAFgMAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAF1HybgAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yD2oGBwAAALwAAABgY21hcACruyoAAAEcAAAAZGdhc3AAAAAQAAABgAAAAAhnbHlmY3rgVQAAAYgAAAhUaGVhZBj1DHQAAAncAAAANmhoZWEHIQN1AAAKFAAAACRobXR4Lb8ASQAACjgAAAA4bG9jYQzcCu4AAApwAAAAHm1heHAAEwBWAAAKkAAAACBuYW1lmUoJ+wAACrAAAAGGcG9zdAADAAAAAAw4AAAAIAADA8wBkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOnEA2b/ZwCZA2YAmQAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABABIAAAADgAIAAIABgABACDoAekH6cT//f//AAAAAAAg6AHpAOnE//3//wAB/+MYAxcFFkkAAwABAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAEAAD/7AO4AxEAEwAnADsATwAAARUUBwYjISInJj0BNDc2MyEyFxYTFRQHBgchIicmPQE0NzY3ITIXFgEVFAcGIyEiJyY9ATQ3NjMhMhcWExUUBwYHISInJj0BNDc2NyEyFxYBuBcWHf7bHhUWFhUeASUeFRYBFxYd/tseFRYWFR4BJR4VFgIBFhcd/tsdFhUVFh0BJR4WFQEWFx3+2x0WFRUWHQElHhYVARHdHRYVFRYd3R0WFRUWAZnbHhUWARcWHdseFhUBFhf+Ld0dFhUVFh3dHRYVFRYBmdseFRYBFxYd2x4WFQEWFwAAAAMAAP+iA7gDEQAIABIALgAAFzEnJjIXHgEXJREhESEyNjc+ARMRFAYHDgEjISImJy4BNxE0Njc+ATMhMhYXHgFbEgMBAwMBDQMT/pMBWwQHAgMCSg4NDiES/P8SIQ0ODgENDg0gEwMBEyAODQ4UEgMDAwINEgKB/W0CAwIHArv9SRMgDg0ODg0OIRICtxMgDg0ODg0OIQAAAwAA/6IDuAMRAAoAEgAuAAAXIREhERQWFx4BNwUlITI2NzYGExEUBgcOASMhIiYnLgE3ETQ2Nz4BMyEyFhceAVsBXf6RAwMDBgMDA/6jAVsEBwIDClYODQ4hEvz/EiENDg4BDQ4NIBMDARMgDg0OFAKT/X8EBgMDAwECAgIDAgkCy/1JEyAODQ4ODQ4hEgK3EyAODQ4ODQ4hAAAAAwAA/+wDuAMRABsANwBTAAATIgYHDgEdARQWFx4BMyE+ATc+AT0BLgEnLgEjMyIGBw4BHQEUFhceATMhPgE3PgE9ATQmJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQEuAScuASNJDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ/bDxkLCwoKCwsZDwElDxkMCwsMCgsaD/zbDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ8DEQwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsLDAoLGg/bDhoLCwwBCwsLGQ/bDxkMCwv+SAoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoAAAADAAD/7AO4AxEAGwA3AFMAABMiBgcOAR0BFBYXHgEzIT4BNz4BPQEuAScuASMzIgYHDgEdARQWFx4BMyE+ATc+AT0BNCYnLgEjASIGBw4BHQEUFhceATMhMjY3PgE9ATQmJy4BI0kPGgoLCwsLChoPASUOGgsLDAELCwsZD9sPGQsLCgoLCxkPASUPGQwLCwwKCxoP/tsPGQsLCgoLCxkPASUPGQwLCwwKCxoPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLCwwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsL/kgKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKAAAAAAMAAP/sA7gDEQAbADcAUwAAEyIGBw4BHQEUFhceATMhPgE3PgE9AS4BJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQEuAScuASMzIgYHDgEdARQWFx4BMyEyNjc+AT0BNCYnLgEjSQ8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkP/tsPGgoLCwsLChoPASUOGgsLDAELCwsZD9sPGQsLCgoLCxkPASUPGQwLCwwKCxoPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLC/5ICgsLGQ/dDxkLCwoKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoAAAAAAwAA/+wDuAMRABsANwBTAAABIgYHDgEdARQWFx4BMyE+ATc+AT0BNCYnLgEjASIGBw4BHQEUFhceATMhMjY3PgE9AS4BJy4BIzMiBgcOAR0BFBYXHgEzITI2Nz4BPQE0JicuASMCSQ8ZCwsKCgsLGQ8BJQ8ZDAsLDAoLGg/82w8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkP2w8ZCwsKCgsLGQ8BJQ8ZDAsLDAoLGg8DEQwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsL/kgKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoKCwsZD90PGQsLCgAAAAADAAD/ogO4AxEACAAQACQAABchESERFBcWNyURIREhMjc2ExEUBwYHISInJjcRNDc2NyEyFxZbAV3+kQYGBgMT/pMBWwgFBUobHCX8/yUbHAEbGiYDASYbGhQCk/1/BwYGARICgf1tBQUCv/1JJhsaARscJQK3JhsaARscAAAAAAQAAP/sA7gDEQATACcAOwBPAAABFRQHBiMhIicmPQE0NzYzITIXFhMVFAcGByEiJyY9ATQ3NjchMhcWARUUBwYjISInJj0BNDc2MyEyFxYTFRQHBgchIicmPQE0NzY3ITIXFgG4FxYd/tseFRYWFR4BJR4VFgEXFh3+2x4VFhYVHgElHhUWAgEWFx3+2x0WFRUWHQElHhYVARYXHf7bHRYVFRYdASUeFhUBEd0dFhUVFh3dHRYVFRYBmdseFRYBFxYd2x4WFQEWF/4t3R0WFRUWHd0dFhUVFgGZ2x4VFgEXFh3bHhYVARYXAAAAAwBJ//IDtwLOABMAJwA7AAAlFRQHBiMhIicmPQE0NzYzITIXFhEVFAcGIyEiJyY9ATQ3NjMhMhcWERUUBwYjISInJj0BNDc2MyEyFxYDtwsLD/zcDwsLCwsPAyQPCwsLCw/83A8LCwsLDwMkDwsLCwsP/NwPCwsLCw8DJA8LC2BJDwsLCwsPSQ8LCwsLARZKDgsLCwsOSg4LCwsLARZJDwsLCwsPSQ8LCwsLAAEAAAAAAABu8lEXXw889QALBAAAAAAA2w9kYgAAAADbD2RiAAD/ogO4AxEAAAAIAAIAAAAAAAAAAQAAA2b/ZwAABAAAAP//A7gAAQAAAAAAAAAAAAAAAAAAAA4EAAAAAAAAAAAAAAAEAAAAA7cAAAPBAAADwQAAA8EAAAPBAAADwQAAA8EAAAPBAAADwQAABAAASQAAAAAACgAUAB4AlADgAS4BqgImAqIDHgNeA9QEKgAAAAEAAAAOAFQABAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA#iefix) format("embedded-opentype"),url(data:font/ttf;base64,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) format("truetype"),url(data:font/woff;base64,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) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Imx5cmNvbXBhcmUiIGhvcml6LWFkdi14PSIxMDI0Ij4KPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iODcwLjg1MDQzOTg4MjY5OCIgZGVzY2VudD0iLTE1My4xNDk1NjAxMTczMDIwNiIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMjQiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDsiIGQ9IiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU4MDE7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZSIgaG9yaXotYWR2LXg9Ijk1MSIgZD0iTTQzOS43MjUgMjcyLjcxOXYtMjIwLjM3NXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjEuNTI1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIxLjUyNXQtMjEuNTI1IDUxLjI1djIyMC4zNzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIxLjUyNWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjEuNTI1dDIyLjU1LTUxLjI1ek00MzkuNzI1IDcxMS40MTl2LTIxOS4zNXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjIuNTVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjIuNTV0LTIxLjUyNSA1MS4yNXYyMTkuMzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIyLjU1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMi41NXQyMi41NS01MS4yNXpNOTUyLjIyNiAyNzIuNzE5di0yMjAuMzc1cTAtMjkuNzI1LTIyLjU1LTUxLjI1dC01MS4yNS0yMS41MjVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjEuNTI1dC0yMS41MjUgNTEuMjV2MjIwLjM3NXEwIDI5LjcyNSAyMS41MjUgNTEuMjV0NTEuMjUgMjEuNTI1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMS41MjV0MjIuNTUtNTEuMjV6TTk1Mi4yMjYgNzExLjQxOXYtMjE5LjM1cTAtMjkuNzI1LTIyLjU1LTUxLjI1dC01MS4yNS0yMi41NWgtMjkzLjE1cS0yOS43MjUgMC01MS4yNSAyMi41NXQtMjEuNTI1IDUxLjI1djIxOS4zNXEwIDI5LjcyNSAyMS41MjUgNTEuMjV0NTEuMjUgMjIuNTVoMjkzLjE1cTI5LjcyNSAwIDUxLjI1LTIyLjU1dDIyLjU1LTUxLjI1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDA7IiBnbHlwaC1uYW1lPSJjb2x1bW5zLTIiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik05MS4yMjUtMjAuNDMydjBsLTE4LjQ1IDE4LjQ1Yy0zLjM4MiAzLjM4Mi0yLjY1OCAzLjcyIDEuNDQyLTAuMzhzMCAwIDE3LjAwOC0xOC4wNzB6TTg3OC40MjYtMS45ODJ2NjQwLjYyNmgtMzY1LjkyNXYtNjU5LjA3NmgzNDcuNDc1YzUuNDY2IDAgOS45MDkgMS43MDkgMTMuMzI1IDUuMTI1czUuMTI1IDcuODU5IDUuMTI1IDEzLjMyNXpNOTUyLjIyNiA2OTIuOTY5di02OTQuOTUxYzAtMjUuMjg0LTkuMjI1LTQ2LjgwOS0yNy42NzUtNjQuNTc1cy0zOS45NzUtMjYuOTkxLTY0LjU3NS0yNy42NzVoLTc2OC43NTFjLTI0LjYgMC00Ni4xMjUgOS4yMjUtNjQuNTc1IDI3LjY3NXMtMjcuMzM0IDM5Ljk3NS0yNi42NSA2NC41NzV2Njk0Ljk1MWMwIDI1LjI4NCA4Ljg4NCA0Ni44MDkgMjYuNjUgNjQuNTc1czM5LjI5MSAyNi45OTEgNjQuNTc1IDI3LjY3NWg3NjguNzUxYzI1LjI4NCAwIDQ2LjgwOS05LjIyNSA2NC41NzUtMjcuNjc1czI2Ljk5MS0zOS45NzUgMjcuNjc1LTY0LjU3NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZ2x5cGgtbmFtZT0iY29sdW1ucy0xIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNOTEuMjI1LTIwLjQzMmgzNDguNXY2NTkuMDc2aC0zNjYuOTV2LTY0MC42MjZjMC00Ljc4NCAyLjA1MC05LjIyNSA2LjE1LTEzLjMyNXM4LjItNS44MDkgMTIuMy01LjEyNXpNODYxLjk1MS0yMS45ODdsLTM0OS40NSAxLjU1NmgzNDcuNDc1YzUuNDY2IDAgOS45MDkgMS43MDkgMTMuMzI1IDUuMTI1cy01Ljg4NC02LjcwNi0xMS4zNS02LjY4MXpNOTUyLjIyNiA2OTIuOTY5di02OTQuOTUxYzAtMjUuMjg0LTkuMjI1LTQ2LjgwOS0yNy42NzUtNjQuNTc1cy0zOS45NzUtMjYuOTkxLTY0LjU3NS0yNy42NzVoLTc2OC43NTFjLTI0LjYgMC00Ni4xMjUgOS4yMjUtNjQuNTc1IDI3LjY3NXMtMjcuMzM0IDM5Ljk3NS0yNi42NSA2NC41NzV2Njk0Ljk1MWMwIDI1LjI4NCA4Ljg4NCA0Ni44MDkgMjYuNjUgNjQuNTc1czM5LjI5MSAyNi45OTEgNjQuNTc1IDI3LjY3NWg3NjguNzUxYzI1LjI4NCAwIDQ2LjgwOS05LjIyNSA2NC41NzUtMjcuNjc1czI2Ljk5MS0zOS45NzUgMjcuNjc1LTY0LjU3NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAyOyIgZ2x5cGgtbmFtZT0idGgtbGFyZ2UtNCIgaG9yaXotYWR2LXg9Ijk2MSIgZD0iTTcyLjc1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg4LTguMjM0LTUxLjIzOC0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzOC0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM0IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek01ODUuMjU5IDc4NS4yMzVjLTE5LjgxNi0wLjY4NC0zNi44ODctOC4yMzQtNTEuMjM3LTIyLjU4NHMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM4di0yMTkuMzM5YzAtMTkuMTM0IDcuMTcxLTM2LjIwNCAyMS41MjEtNTEuMjM4czMxLjQyMS0yMi41ODQgNTEuMjM3LTIyLjU4NGgyOTMuMTYxYzE5LjEzNCAwLjY4NCAzNi4yMDQgOC4yMzQgNTEuMjM4IDIyLjU4NHMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzh2MjE5LjMzOWMtMC42ODQgMTkuMTM0LTguMjM0IDM2LjIwNC0yMi41ODQgNTEuMjM4cy0zMS40MjEgMjIuNTg0LTUxLjIzOCAyMi41ODR6TTcyLjc1OSAzNDUuNDk0Yy0xOS44MTYgMC0zNi44ODgtNy4xNzEtNTEuMjM4LTIxLjUyMXMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM3di0yMjAuNDAzYzAtMTkuODE2IDcuMTcxLTM2Ljg4NyAyMS41MjEtNTEuMjM3czMxLjQyMS0yMS41MjEgNTEuMjM4LTIxLjUyMWgyOTMuMTYxYzE5LjEzNCAwIDM2LjIwNCA3LjE3MSA1MS4yMzggMjEuNTIxczIyLjU4NCAzMS40MjEgMjIuNTg0IDUxLjIzN3YyMjAuNDAzYy0wLjY4NCAxOS44MTYtOC4yMzQgMzYuODg3LTIyLjU4NCA1MS4yMzdzLTMxLjQyMSAyMS41MjEtNTEuMjM4IDIxLjUyMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAzOyIgZ2x5cGgtbmFtZT0idGgtbGFyZ2UtMyIgaG9yaXotYWR2LXg9Ijk2MSIgZD0iTTcyLjc1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg4LTguMjM0LTUxLjIzOC0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzOC0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM0IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek01ODUuMjU5IDc4NS4yMzVjLTE5LjgxNi0wLjY4NC0zNi44ODctOC4yMzQtNTEuMjM3LTIyLjU4NHMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM4di0yMTkuMzM5YzAtMTkuMTM0IDcuMTcxLTM2LjIwNCAyMS41MjEtNTEuMjM4czMxLjQyMS0yMi41ODQgNTEuMjM3LTIyLjU4NGgyOTMuMTYxYzE5LjEzNCAwLjY4NCAzNi4yMDQgOC4yMzQgNTEuMjM4IDIyLjU4NHMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzh2MjE5LjMzOWMtMC42ODQgMTkuMTM0LTguMjM0IDM2LjIwNC0yMi41ODQgNTEuMjM4cy0zMS40MjEgMjIuNTg0LTUxLjIzOCAyMi41ODR6TTU4NS4yNTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg3LTcuMTcxLTUxLjIzNy0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzNy0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM0IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGdseXBoLW5hbWU9InRoLWxhcmdlLTIiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik03Mi43NTkgNzg1LjIzNWMtMTkuODE2LTAuNjg0LTM2Ljg4OC04LjIzNC01MS4yMzgtMjIuNTg0cy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzh2LTIxOS4zMzljMC0xOS4xMzQgNy4xNzEtMzYuMjA0IDIxLjUyMS01MS4yMzhzMzEuNDIxLTIyLjU4NCA1MS4yMzgtMjIuNTg0aDI5My4xNjFjMTkuMTM0IDAuNjg0IDM2LjIwNCA4LjIzNCA1MS4yMzggMjIuNTg0czIyLjU4NCAzMS40MjEgMjIuNTg0IDUxLjIzOHYyMTkuMzM5Yy0wLjY4NCAxOS4xMzQtOC4yMzQgMzYuMjA0LTIyLjU4NCA1MS4yMzhzLTMxLjQyMSAyMi41ODQtNTEuMjM4IDIyLjU4NHpNNzIuNzU5IDM0NS40OTRjLTE5LjgxNiAwLTM2Ljg4OC03LjE3MS01MS4yMzgtMjEuNTIxcy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzd2LTIyMC40MDNjMC0xOS44MTYgNy4xNzEtMzYuODg3IDIxLjUyMS01MS4yMzdzMzEuNDIxLTIxLjUyMSA1MS4yMzgtMjEuNTIxaDI5My4xNjFjMTkuMTM0IDAgMzYuMjA0IDcuMTcxIDUxLjIzOCAyMS41MjFzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM3djIyMC40MDNjLTAuNjg0IDE5LjgxNi04LjIzNCAzNi44ODctMjIuNTg0IDUxLjIzN3MtMzEuNDIxIDIxLjUyMS01MS4yMzggMjEuNTIxek01ODUuMjU5IDM0NS40OTRjLTE5LjgxNiAwLTM2Ljg4Ny03LjE3MS01MS4yMzctMjEuNTIxcy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzd2LTIyMC40MDNjMC0xOS44MTYgNy4xNzEtMzYuODg3IDIxLjUyMS01MS4yMzdzMzEuNDIxLTIxLjUyMSA1MS4yMzctMjEuNTIxaDI5My4xNjFjMTkuMTM0IDAgMzYuMjA0IDcuMTcxIDUxLjIzOCAyMS41MjFzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM3djIyMC40MDNjLTAuNjg0IDE5LjgxNi04LjIzNCAzNi44ODctMjIuNTg0IDUxLjIzN3MtMzEuNDIxIDIxLjUyMS01MS4yMzggMjEuNTIxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDU7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZS0xIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNNTg1LjI1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg3LTguMjM0LTUxLjIzNy0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzNy0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM1IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek03Mi43NTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg4LTcuMTcxLTUxLjIzOC0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzOC0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM1IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6TTU4NS4yNTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg3LTcuMTcxLTUxLjIzNy0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzNy0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM0IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNjsiIGdseXBoLW5hbWU9ImNvbHVtbnMxIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNOTEuMjI1LTIwLjQzMmgzNDguNXY2NTkuMDc2aC0zNjYuOTV2LTY0MC42MjZxMC03LjE3NSA2LjE1LTEzLjMyNXQxMi4zLTUuMTI1ek04NzguNDI2LTEuOTgydjY0MC42MjZoLTM2NS45MjV2LTY1OS4wNzZoMzQ3LjQ3NXE4LjIgMCAxMy4zMjUgNS4xMjV0NS4xMjUgMTMuMzI1ek05NTIuMjI2IDY5Mi45Njl2LTY5NC45NTFxMC0zNy45MjUtMjcuNjc1LTY0LjU3NXQtNjQuNTc1LTI3LjY3NWgtNzY4Ljc1MXEtMzYuOSAwLTY0LjU3NSAyNy42NzV0LTI2LjY1IDY0LjU3NXY2OTQuOTUxcTAgMzcuOTI1IDI2LjY1IDY0LjU3NXQ2NC41NzUgMjcuNjc1aDc2OC43NTFxMzcuOTI1IDAgNjQuNTc1LTI3LjY3NXQyNy42NzUtNjQuNTc1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDc7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZTEiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik00MzkuNzI1IDI3Mi43MTl2LTIyMC4zNzVxMC0yOS43MjUtMjIuNTUtNTEuMjV0LTUxLjI1LTIxLjUyNWgtMjkzLjE1cS0yOS43MjUgMC01MS4yNSAyMS41MjV0LTIxLjUyNSA1MS4yNXYyMjAuMzc1cTAgMjkuNzI1IDIxLjUyNSA1MS4yNXQ1MS4yNSAyMS41MjVoMjkzLjE1cTI5LjcyNSAwIDUxLjI1LTIxLjUyNXQyMi41NS01MS4yNXpNNDM5LjcyNSA3MTEuNDE5di0yMTkuMzVxMC0yOS43MjUtMjIuNTUtNTEuMjV0LTUxLjI1LTIyLjU1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIyLjU1dC0yMS41MjUgNTEuMjV2MjE5LjM1cTAgMjkuNzI1IDIxLjUyNSA1MS4yNXQ1MS4yNSAyMi41NWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjIuNTV0MjIuNTUtNTEuMjV6TTk1Mi4yMjYgMjcyLjcxOXYtMjIwLjM3NXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjEuNTI1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIxLjUyNXQtMjEuNTI1IDUxLjI1djIyMC4zNzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIxLjUyNWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjEuNTI1dDIyLjU1LTUxLjI1ek05NTIuMjI2IDcxMS40MTl2LTIxOS4zNXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjIuNTVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjIuNTV0LTIxLjUyNSA1MS4yNXYyMTkuMzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIyLjU1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMi41NXQyMi41NS01MS4yNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOWM0OyIgZ2x5cGgtbmFtZT0ic2ltYm9sby1tZW51MiIgZD0iTTk1MC44NTcgOTYuMDAxdi03My4xNDNxMC0xNC44NTctMTAuODU3LTI1LjcxNHQtMjUuNzE0LTEwLjg1N2gtODA0LjU3MXEtMTQuODU3IDAtMjUuNzE0IDEwLjg1N3QtMTAuODU3IDI1LjcxNHY3My4xNDNxMCAxNC44NTcgMTAuODU3IDI1LjcxNHQyNS43MTQgMTAuODU3aDgwNC41NzFxMTQuODU3IDAgMjUuNzE0LTEwLjg1N3QxMC44NTctMjUuNzE0ek05NTAuODU3IDM4OC41NzJ2LTczLjE0M3EwLTE0Ljg1Ny0xMC44NTctMjUuNzE0dC0yNS43MTQtMTAuODU3aC04MDQuNTcxcS0xNC44NTcgMC0yNS43MTQgMTAuODU3dC0xMC44NTcgMjUuNzE0djczLjE0M3EwIDE0Ljg1NyAxMC44NTcgMjUuNzE0dDI1LjcxNCAxMC44NTdoODA0LjU3MXExNC44NTcgMCAyNS43MTQtMTAuODU3dDEwLjg1Ny0yNS43MTR6TTk1MC44NTcgNjgxLjE0NHYtNzMuMTQzcTAtMTQuODU3LTEwLjg1Ny0yNS43MTR0LTI1LjcxNC0xMC44NTdoLTgwNC41NzFxLTE0Ljg1NyAwLTI1LjcxNCAxMC44NTd0LTEwLjg1NyAyNS43MTR2NzMuMTQzcTAgMTQuODU3IDEwLjg1NyAyNS43MTR0MjUuNzE0IDEwLjg1N2g4MDQuNTcxcTE0Ljg1NyAwIDI1LjcxNC0xMC44NTd0MTAuODU3LTI1LjcxNHoiIC8+CjwvZm9udD48L2RlZnM+PC9zdmc+#lyrcompare) format("svg");font-weight:400;font-style:normal;font-display:block}[class*=lyrcompare-icon-],[class^=lyrcompare-icon-]{speak:none;line-height:1}.lyrcompare-icon:before,[class*=lyrcompare-icon-],[class^=lyrcompare-icon-]{font-family:lyrcompare!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lyrcompare-icon:before{display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;line-height:1em;margin-left:.2em;content:"\e906"}.lyrcompare-icon-th-large-1:before{content:"\e905";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-2:before{content:"\e904";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-3:before{content:"\e903";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-4:before{content:"\e902";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-1:before{content:"\e901";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-2:before,.lyrcompare-icon-columns-3:before{content:"\e900";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-3:before{transform:rotate(270deg);display:inline-block}.lyrcompare-icon-columns-4:before{content:"\e901";color:#71a7d3;font-size:1.4rem;transform:rotate(-90deg);display:inline-block}.lyrcompare-icon-th-large:before{content:"\e801"}.lyrcompare-icon-columns:before{content:"\e906"}.lyrcompare-icon-columns-rotate:before{content:"\e906";display:inline-block;transform:rotate(270deg)}.lyrcompare-swipe-control{display:block;position:absolute;height:2.5rem;width:2.5rem;top:0;left:0;visibility:hidden}.lyrcompare-swipe-control.horizontal,.lyrcompare-swipe-control.vertical,.lyrcompare-swipe-control.vertical.horizontal{visibility:visible}.lyrcompare-swipe-control .control-icon:before{content:"\e9c4";font-family:lyrcompare;position:absolute;display:block;font-size:1.3rem;text-align:center;line-height:2.5rem;margin:0 auto;width:2.5rem;color:#94bdde;border-radius:50rem;box-shadow:0 2px 4px rgba(0,0,0,.51),0 -1px 0 rgba(0,0,0,.02);background-color:#fff;z-index:3}.lyrcompare-swipe-control.vertical:before{content:"";background:#fff;display:block;position:absolute;height:250vh;width:.5rem;top:-125vh;left:1rem;cursor:ew-resize}.lyrcompare-swipe-control.horizontal:after{content:"";background:#fff;display:block;position:absolute;width:250vw;height:.5rem;left:-125vw;top:1rem;cursor:ns-resize}.lyrcompare-swipe-control .control-icon{cursor:grabbing;visibility:hidden}.lyrcompare-swipe-control.horizontal.static:after,.lyrcompare-swipe-control.static,.lyrcompare-swipe-control.vertical.static:before{cursor:auto!important}.lyrcompare-swipe-control.static .control-icon{visibility:hidden!important}.lyrcompare-swipe-control.dynamic .control-icon{visibility:visible!important}.lyrcompare-swipe-control.off,.lyrcompare-swipe-control.off .control-icon{visibility:hidden} \ No newline at end of file +div.m-panel.m-plugin-lyrcompare.opened>.g-cartografia-flecha-izquierda{color:#e8f5e9}.m-plugin-lyrcompare.collapsed>div.m-panel-controls{display:none!important}.m-areas>div.m-area.m-right>div.m-plugin-lyrcompare.opened>button.m-panel-btn{position:absolute;left:-2.53rem;color:#fff;background-color:#71a7d3}.m-areas>div.m-area.m-left>div.m-plugin-lyrcompare.opened>button.m-panel-btn{position:absolute;right:-2.53rem;left:unset!important;color:#fff;background-color:#71a7d3}.m-lyrcompare-container{text-align:center}.div-m-lyrcompare-panel{padding-top:1px;width:19rem}.div-m-lyrcompare-transparent-opacity{display:flex;align-items:center;color:#000;padding:4% 5px 5px 8%}.m-lyrcompare-effect-buttoms{padding:8px 0 2px}.m-panel.m-plugin-lyrcompare.collapsed>.m-panel-btn.lyrcompare-icon{color:#71a7d3}.m-lyrcompare-container .big-buttom{font-size:32px;background:none;border:none;cursor:pointer;opacity:.75;transition:all .25s ease;color:#404040;outline:none}.div-m-lyrcompare-panel>hr:nth-child(4){border:1px solid #e0e0e0}.m-lyrcompare-container .big-buttom:hover,.m-lyrcompare-container .buttom-pressed-hcurtain,.m-lyrcompare-container .buttom-pressed-hcurtain:hover,.m-lyrcompare-container .buttom-pressed-multicurtain,.m-lyrcompare-container .buttom-pressed-multicurtain:hover,.m-lyrcompare-container .buttom-pressed-vcurtain,.m-lyrcompare-container .buttom-pressed-vcurtain:hover{color:#71a7d3}.m-lyrcompare-container input[type=range]{-webkit-appearance:none;width:59%;height:8px;padding-left:4%}.m-lyrcompare-container input[type=range]::-webkit-slider-runnable-track{width:100%;height:2px;cursor:pointer;background:rgba(0,0,0,.31);border-radius:12px}.m-lyrcompare-container input[type=range]::-webkit-slider-thumb{height:10px;width:10px;cursor:pointer;border-radius:15px;-webkit-appearance:none;margin-top:-4px;background-color:#71a7d3}.m-lyrcompare-container input[type=range]::-moz-range-track{width:100%;height:2px;cursor:pointer;background:rgba(0,0,0,.31);border-radius:12px}.m-lyrcompare-container input[type=range]::-moz-range-thumb{height:10px;width:10px;cursor:pointer;border:none;background:#fff;-webkit-appearance:none;margin-top:20px;background:#94bdde}.m-lyrcompare-select{position:relative;display:flex;align-items:center;padding:0 5px 5px 8%;color:#000}.m-lyrcompare-select select{font-family:Muli,"sans-serif"!important;display:inline-block;width:75%;cursor:pointer;outline:0;border:0 solid #000;border-radius:0;background:#e6e6e6;color:#000;appearance:none;-webkit-appearance:none;-moz-appearance:none;margin-left:4%;white-space:nowrap;padding:3px 11% 3px 10px}div#m-lyrcompare-titulo{border-bottom:1.5px solid rgba(0,0,0,.12156862745098039);display:block;font-size:15px;height:40px;line-height:40px;padding:0 5px;text-align:center;width:100%}@-moz-document url-prefix(){.m-lyrcompare-select select{padding:1px 10px}}.m-lyrcompare-select select::-ms-expand{display:none}.m-lyrcompare-select select:focus,.m-lyrcompare-select select:hover{background:#e6e6e6}.m-lyrcompare-select select:disabled{opacity:.5;pointer-events:none}.m-lyrcompare-select_arrow{position:absolute;top:-1px;right:1em;pointer-events:none;border-color:#7b7b7b transparent transparent;border-style:solid;border-width:8px 5px 0;background-color:#e6e6e6;margin:1em}.m-plugin-lyrcompare .icon-flecha-izquierda:before{content:"\e91d"}.m-plugin-lyrcompare-hidden{display:none}@font-face{font-family:lyrcompare;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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#iefix) format("embedded-opentype"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg9qBgcAAAC8AAAAYGNtYXAAq7sqAAABHAAAAGRnYXNwAAAAEAAAAYAAAAAIZ2x5ZmN64FUAAAGIAAAIVGhlYWQY9Qx0AAAJ3AAAADZoaGVhByEDdQAAChQAAAAkaG10eC2/AEkAAAo4AAAAOGxvY2EM3AruAAAKcAAAAB5tYXhwABMAVgAACpAAAAAgbmFtZZlKCfsAAAqwAAABhnBvc3QAAwAAAAAMOAAAACAAAwPMAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpxANm/2cAmQNmAJkAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQASAAAAA4ACAACAAYAAQAg6AHpB+nE//3//wAAAAAAIOgB6QDpxP/9//8AAf/jGAMXBRZJAAMAAQAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAABAAA/+wDuAMRABMAJwA7AE8AAAEVFAcGIyEiJyY9ATQ3NjMhMhcWExUUBwYHISInJj0BNDc2NyEyFxYBFRQHBiMhIicmPQE0NzYzITIXFhMVFAcGByEiJyY9ATQ3NjchMhcWAbgXFh3+2x4VFhYVHgElHhUWARcWHf7bHhUWFhUeASUeFRYCARYXHf7bHRYVFRYdASUeFhUBFhcd/tsdFhUVFh0BJR4WFQER3R0WFRUWHd0dFhUVFgGZ2x4VFgEXFh3bHhYVARYX/i3dHRYVFRYd3R0WFRUWAZnbHhUWARcWHdseFhUBFhcAAAADAAD/ogO4AxEACAASAC4AABcxJyYyFx4BFyURIREhMjY3PgETERQGBw4BIyEiJicuATcRNDY3PgEzITIWFx4BWxIDAQMDAQ0DE/6TAVsEBwIDAkoODQ4hEvz/EiENDg4BDQ4NIBMDARMgDg0OFBIDAwMCDRICgf1tAgMCBwK7/UkTIA4NDg4NDiESArcTIA4NDg4NDiEAAAMAAP+iA7gDEQAKABIALgAAFyERIREUFhceATcFJSEyNjc2BhMRFAYHDgEjISImJy4BNxE0Njc+ATMhMhYXHgFbAV3+kQMDAwYDAwP+owFbBAcCAwpWDg0OIRL8/xIhDQ4OAQ0ODSATAwETIA4NDhQCk/1/BAYDAwMBAgICAwIJAsv9SRMgDg0ODg0OIRICtxMgDg0ODg0OIQAAAAMAAP/sA7gDEQAbADcAUwAAEyIGBw4BHQEUFhceATMhPgE3PgE9AS4BJy4BIzMiBgcOAR0BFBYXHgEzIT4BNz4BPQE0JicuASMBIgYHDgEdARQWFx4BMyEyNjc+AT0BLgEnLgEjSQ8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkP2w8ZCwsKCgsLGQ8BJQ8ZDAsLDAoLGg/82w8aCgsLCwsKGg8BJQ4aCwsMAQsLCxkPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLCwwKCxoP2w4aCwsMAQsLCxkP2w8ZDAsL/kgKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKAAAAAwAA/+wDuAMRABsANwBTAAATIgYHDgEdARQWFx4BMyE+ATc+AT0BLgEnLgEjMyIGBw4BHQEUFhceATMhPgE3PgE9ATQmJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQE0JicuASNJDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ/bDxkLCwoKCwsZDwElDxkMCwsMCgsaD/7bDxkLCwoKCwsZDwElDxkMCwsMCgsaDwMRDAoLGg/bDhoLCwwBCwsLGQ/bDxkMCwsMCgsaD9sOGgsLDAELCwsZD9sPGQwLC/5ICgsLGQ/dDxkLCwoKCwsZD90PGQsLCgAAAAADAAD/7AO4AxEAGwA3AFMAABMiBgcOAR0BFBYXHgEzIT4BNz4BPQEuAScuASMBIgYHDgEdARQWFx4BMyEyNjc+AT0BLgEnLgEjMyIGBw4BHQEUFhceATMhMjY3PgE9ATQmJy4BI0kPGgoLCwsLChoPASUOGgsLDAELCwsZD/7bDxoKCwsLCwoaDwElDhoLCwwBCwsLGQ/bDxkLCwoKCwsZDwElDxkMCwsMCgsaDwMRDAoLGg/bDhoLCwwBCwsLGQ/bDxkMCwv+SAoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKAAAAAAMAAP/sA7gDEQAbADcAUwAAASIGBw4BHQEUFhceATMhPgE3PgE9ATQmJy4BIwEiBgcOAR0BFBYXHgEzITI2Nz4BPQEuAScuASMzIgYHDgEdARQWFx4BMyEyNjc+AT0BNCYnLgEjAkkPGQsLCgoLCxkPASUPGQwLCwwKCxoP/NsPGgoLCwsLChoPASUOGgsLDAELCwsZD9sPGQsLCgoLCxkPASUPGQwLCwwKCxoPAxEMCgsaD9sOGgsLDAELCwsZD9sPGQwLC/5ICgsLGQ/dDxkLCwoKCwsZD90PGQsLCgoLCxkP3Q8ZCwsKCgsLGQ/dDxkLCwoAAAAAAwAA/6IDuAMRAAgAEAAkAAAXIREhERQXFjclESERITI3NhMRFAcGByEiJyY3ETQ3NjchMhcWWwFd/pEGBgYDE/6TAVsIBQVKGxwl/P8lGxwBGxomAwEmGxoUApP9fwcGBgESAoH9bQUFAr/9SSYbGgEbHCUCtyYbGgEbHAAAAAAEAAD/7AO4AxEAEwAnADsATwAAARUUBwYjISInJj0BNDc2MyEyFxYTFRQHBgchIicmPQE0NzY3ITIXFgEVFAcGIyEiJyY9ATQ3NjMhMhcWExUUBwYHISInJj0BNDc2NyEyFxYBuBcWHf7bHhUWFhUeASUeFRYBFxYd/tseFRYWFR4BJR4VFgIBFhcd/tsdFhUVFh0BJR4WFQEWFx3+2x0WFRUWHQElHhYVARHdHRYVFRYd3R0WFRUWAZnbHhUWARcWHdseFhUBFhf+Ld0dFhUVFh3dHRYVFRYBmdseFRYBFxYd2x4WFQEWFwAAAAMASf/yA7cCzgATACcAOwAAJRUUBwYjISInJj0BNDc2MyEyFxYRFRQHBiMhIicmPQE0NzYzITIXFhEVFAcGIyEiJyY9ATQ3NjMhMhcWA7cLCw/83A8LCwsLDwMkDwsLCwsP/NwPCwsLCw8DJA8LCwsLD/zcDwsLCwsPAyQPCwtgSQ8LCwsLD0kPCwsLCwEWSg4LCwsLDkoOCwsLCwEWSQ8LCwsLD0kPCwsLCwABAAAAAAAAbvJRF18PPPUACwQAAAAAANsPZGIAAAAA2w9kYgAA/6IDuAMRAAAACAACAAAAAAAAAAEAAANm/2cAAAQAAAD//wO4AAEAAAAAAAAAAAAAAAAAAAAOBAAAAAAAAAAAAAAABAAAAAO3AAADwQAAA8EAAAPBAAADwQAAA8EAAAPBAAADwQAAA8EAAAQAAEkAAAAAAAoAFAAeAJQA4AEuAaoCJgKiAx4DXgPUBCoAAAABAAAADgBUAAQAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"),url(data:font/woff;base64,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) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9Imx5cmNvbXBhcmUiIGhvcml6LWFkdi14PSIxMDI0Ij4KPGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iODcwLjg1MDQzOTg4MjY5OCIgZGVzY2VudD0iLTE1My4xNDk1NjAxMTczMDIwNiIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjEwMjQiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDsiIGQ9IiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU4MDE7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZSIgaG9yaXotYWR2LXg9Ijk1MSIgZD0iTTQzOS43MjUgMjcyLjcxOXYtMjIwLjM3NXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjEuNTI1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIxLjUyNXQtMjEuNTI1IDUxLjI1djIyMC4zNzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIxLjUyNWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjEuNTI1dDIyLjU1LTUxLjI1ek00MzkuNzI1IDcxMS40MTl2LTIxOS4zNXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjIuNTVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjIuNTV0LTIxLjUyNSA1MS4yNXYyMTkuMzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIyLjU1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMi41NXQyMi41NS01MS4yNXpNOTUyLjIyNiAyNzIuNzE5di0yMjAuMzc1cTAtMjkuNzI1LTIyLjU1LTUxLjI1dC01MS4yNS0yMS41MjVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjEuNTI1dC0yMS41MjUgNTEuMjV2MjIwLjM3NXEwIDI5LjcyNSAyMS41MjUgNTEuMjV0NTEuMjUgMjEuNTI1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMS41MjV0MjIuNTUtNTEuMjV6TTk1Mi4yMjYgNzExLjQxOXYtMjE5LjM1cTAtMjkuNzI1LTIyLjU1LTUxLjI1dC01MS4yNS0yMi41NWgtMjkzLjE1cS0yOS43MjUgMC01MS4yNSAyMi41NXQtMjEuNTI1IDUxLjI1djIxOS4zNXEwIDI5LjcyNSAyMS41MjUgNTEuMjV0NTEuMjUgMjIuNTVoMjkzLjE1cTI5LjcyNSAwIDUxLjI1LTIyLjU1dDIyLjU1LTUxLjI1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDA7IiBnbHlwaC1uYW1lPSJjb2x1bW5zLTIiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik05MS4yMjUtMjAuNDMydjBsLTE4LjQ1IDE4LjQ1Yy0zLjM4MiAzLjM4Mi0yLjY1OCAzLjcyIDEuNDQyLTAuMzhzMCAwIDE3LjAwOC0xOC4wNzB6TTg3OC40MjYtMS45ODJ2NjQwLjYyNmgtMzY1LjkyNXYtNjU5LjA3NmgzNDcuNDc1YzUuNDY2IDAgOS45MDkgMS43MDkgMTMuMzI1IDUuMTI1czUuMTI1IDcuODU5IDUuMTI1IDEzLjMyNXpNOTUyLjIyNiA2OTIuOTY5di02OTQuOTUxYzAtMjUuMjg0LTkuMjI1LTQ2LjgwOS0yNy42NzUtNjQuNTc1cy0zOS45NzUtMjYuOTkxLTY0LjU3NS0yNy42NzVoLTc2OC43NTFjLTI0LjYgMC00Ni4xMjUgOS4yMjUtNjQuNTc1IDI3LjY3NXMtMjcuMzM0IDM5Ljk3NS0yNi42NSA2NC41NzV2Njk0Ljk1MWMwIDI1LjI4NCA4Ljg4NCA0Ni44MDkgMjYuNjUgNjQuNTc1czM5LjI5MSAyNi45OTEgNjQuNTc1IDI3LjY3NWg3NjguNzUxYzI1LjI4NCAwIDQ2LjgwOS05LjIyNSA2NC41NzUtMjcuNjc1czI2Ljk5MS0zOS45NzUgMjcuNjc1LTY0LjU3NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZ2x5cGgtbmFtZT0iY29sdW1ucy0xIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNOTEuMjI1LTIwLjQzMmgzNDguNXY2NTkuMDc2aC0zNjYuOTV2LTY0MC42MjZjMC00Ljc4NCAyLjA1MC05LjIyNSA2LjE1LTEzLjMyNXM4LjItNS44MDkgMTIuMy01LjEyNXpNODYxLjk1MS0yMS45ODdsLTM0OS40NSAxLjU1NmgzNDcuNDc1YzUuNDY2IDAgOS45MDkgMS43MDkgMTMuMzI1IDUuMTI1cy01Ljg4NC02LjcwNi0xMS4zNS02LjY4MXpNOTUyLjIyNiA2OTIuOTY5di02OTQuOTUxYzAtMjUuMjg0LTkuMjI1LTQ2LjgwOS0yNy42NzUtNjQuNTc1cy0zOS45NzUtMjYuOTkxLTY0LjU3NS0yNy42NzVoLTc2OC43NTFjLTI0LjYgMC00Ni4xMjUgOS4yMjUtNjQuNTc1IDI3LjY3NXMtMjcuMzM0IDM5Ljk3NS0yNi42NSA2NC41NzV2Njk0Ljk1MWMwIDI1LjI4NCA4Ljg4NCA0Ni44MDkgMjYuNjUgNjQuNTc1czM5LjI5MSAyNi45OTEgNjQuNTc1IDI3LjY3NWg3NjguNzUxYzI1LjI4NCAwIDQ2LjgwOS05LjIyNSA2NC41NzUtMjcuNjc1czI2Ljk5MS0zOS45NzUgMjcuNjc1LTY0LjU3NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAyOyIgZ2x5cGgtbmFtZT0idGgtbGFyZ2UtNCIgaG9yaXotYWR2LXg9Ijk2MSIgZD0iTTcyLjc1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg4LTguMjM0LTUxLjIzOC0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzOC0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM0IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek01ODUuMjU5IDc4NS4yMzVjLTE5LjgxNi0wLjY4NC0zNi44ODctOC4yMzQtNTEuMjM3LTIyLjU4NHMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM4di0yMTkuMzM5YzAtMTkuMTM0IDcuMTcxLTM2LjIwNCAyMS41MjEtNTEuMjM4czMxLjQyMS0yMi41ODQgNTEuMjM3LTIyLjU4NGgyOTMuMTYxYzE5LjEzNCAwLjY4NCAzNi4yMDQgOC4yMzQgNTEuMjM4IDIyLjU4NHMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzh2MjE5LjMzOWMtMC42ODQgMTkuMTM0LTguMjM0IDM2LjIwNC0yMi41ODQgNTEuMjM4cy0zMS40MjEgMjIuNTg0LTUxLjIzOCAyMi41ODR6TTcyLjc1OSAzNDUuNDk0Yy0xOS44MTYgMC0zNi44ODgtNy4xNzEtNTEuMjM4LTIxLjUyMXMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM3di0yMjAuNDAzYzAtMTkuODE2IDcuMTcxLTM2Ljg4NyAyMS41MjEtNTEuMjM3czMxLjQyMS0yMS41MjEgNTEuMjM4LTIxLjUyMWgyOTMuMTYxYzE5LjEzNCAwIDM2LjIwNCA3LjE3MSA1MS4yMzggMjEuNTIxczIyLjU4NCAzMS40MjEgMjIuNTg0IDUxLjIzN3YyMjAuNDAzYy0wLjY4NCAxOS44MTYtOC4yMzQgMzYuODg3LTIyLjU4NCA1MS4yMzdzLTMxLjQyMSAyMS41MjEtNTEuMjM4IDIxLjUyMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAzOyIgZ2x5cGgtbmFtZT0idGgtbGFyZ2UtMyIgaG9yaXotYWR2LXg9Ijk2MSIgZD0iTTcyLjc1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg4LTguMjM0LTUxLjIzOC0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzOC0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM0IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek01ODUuMjU5IDc4NS4yMzVjLTE5LjgxNi0wLjY4NC0zNi44ODctOC4yMzQtNTEuMjM3LTIyLjU4NHMtMjEuNTIxLTMxLjQyMS0yMS41MjEtNTEuMjM4di0yMTkuMzM5YzAtMTkuMTM0IDcuMTcxLTM2LjIwNCAyMS41MjEtNTEuMjM4czMxLjQyMS0yMi41ODQgNTEuMjM3LTIyLjU4NGgyOTMuMTYxYzE5LjEzNCAwLjY4NCAzNi4yMDQgOC4yMzQgNTEuMjM4IDIyLjU4NHMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzh2MjE5LjMzOWMtMC42ODQgMTkuMTM0LTguMjM0IDM2LjIwNC0yMi41ODQgNTEuMjM4cy0zMS40MjEgMjIuNTg0LTUxLjIzOCAyMi41ODR6TTU4NS4yNTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg3LTcuMTcxLTUxLjIzNy0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzNy0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM0IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGdseXBoLW5hbWU9InRoLWxhcmdlLTIiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik03Mi43NTkgNzg1LjIzNWMtMTkuODE2LTAuNjg0LTM2Ljg4OC04LjIzNC01MS4yMzgtMjIuNTg0cy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzh2LTIxOS4zMzljMC0xOS4xMzQgNy4xNzEtMzYuMjA0IDIxLjUyMS01MS4yMzhzMzEuNDIxLTIyLjU4NCA1MS4yMzgtMjIuNTg0aDI5My4xNjFjMTkuMTM0IDAuNjg0IDM2LjIwNCA4LjIzNCA1MS4yMzggMjIuNTg0czIyLjU4NCAzMS40MjEgMjIuNTg0IDUxLjIzOHYyMTkuMzM5Yy0wLjY4NCAxOS4xMzQtOC4yMzQgMzYuMjA0LTIyLjU4NCA1MS4yMzhzLTMxLjQyMSAyMi41ODQtNTEuMjM4IDIyLjU4NHpNNzIuNzU5IDM0NS40OTRjLTE5LjgxNiAwLTM2Ljg4OC03LjE3MS01MS4yMzgtMjEuNTIxcy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzd2LTIyMC40MDNjMC0xOS44MTYgNy4xNzEtMzYuODg3IDIxLjUyMS01MS4yMzdzMzEuNDIxLTIxLjUyMSA1MS4yMzgtMjEuNTIxaDI5My4xNjFjMTkuMTM0IDAgMzYuMjA0IDcuMTcxIDUxLjIzOCAyMS41MjFzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM3djIyMC40MDNjLTAuNjg0IDE5LjgxNi04LjIzNCAzNi44ODctMjIuNTg0IDUxLjIzN3MtMzEuNDIxIDIxLjUyMS01MS4yMzggMjEuNTIxek01ODUuMjU5IDM0NS40OTRjLTE5LjgxNiAwLTM2Ljg4Ny03LjE3MS01MS4yMzctMjEuNTIxcy0yMS41MjEtMzEuNDIxLTIxLjUyMS01MS4yMzd2LTIyMC40MDNjMC0xOS44MTYgNy4xNzEtMzYuODg3IDIxLjUyMS01MS4yMzdzMzEuNDIxLTIxLjUyMSA1MS4yMzctMjEuNTIxaDI5My4xNjFjMTkuMTM0IDAgMzYuMjA0IDcuMTcxIDUxLjIzOCAyMS41MjFzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM3djIyMC40MDNjLTAuNjg0IDE5LjgxNi04LjIzNCAzNi44ODctMjIuNTg0IDUxLjIzN3MtMzEuNDIxIDIxLjUyMS01MS4yMzggMjEuNTIxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDU7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZS0xIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNNTg1LjI1OSA3ODUuMjM1Yy0xOS44MTYtMC42ODQtMzYuODg3LTguMjM0LTUxLjIzNy0yMi41ODRzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzOHYtMjE5LjMzOWMwLTE5LjEzNCA3LjE3MS0zNi4yMDQgMjEuNTIxLTUxLjIzOHMzMS40MjEtMjIuNTg0IDUxLjIzNy0yMi41ODRoMjkzLjE2MWMxOS4xMzQgMC42ODQgMzYuMjA0IDguMjM1IDUxLjIzOCAyMi41ODRzMjIuNTg0IDMxLjQyMSAyMi41ODQgNTEuMjM4djIxOS4zMzljLTAuNjg0IDE5LjEzNC04LjIzNCAzNi4yMDQtMjIuNTg0IDUxLjIzOHMtMzEuNDIxIDIyLjU4NC01MS4yMzggMjIuNTg0ek03Mi43NTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg4LTcuMTcxLTUxLjIzOC0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzOC0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM1IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6TTU4NS4yNTkgMzQ1LjQ5NGMtMTkuODE2IDAtMzYuODg3LTcuMTcxLTUxLjIzNy0yMS41MjFzLTIxLjUyMS0zMS40MjEtMjEuNTIxLTUxLjIzN3YtMjIwLjQwM2MwLTE5LjgxNiA3LjE3MS0zNi44ODcgMjEuNTIxLTUxLjIzN3MzMS40MjEtMjEuNTIxIDUxLjIzNy0yMS41MjFoMjkzLjE2MWMxOS4xMzQgMCAzNi4yMDQgNy4xNzEgNTEuMjM4IDIxLjUyMXMyMi41ODQgMzEuNDIxIDIyLjU4NCA1MS4yMzd2MjIwLjQwM2MtMC42ODQgMTkuODE2LTguMjM0IDM2Ljg4Ny0yMi41ODQgNTEuMjM3cy0zMS40MjEgMjEuNTIxLTUxLjIzOCAyMS41MjF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNjsiIGdseXBoLW5hbWU9ImNvbHVtbnMxIiBob3Jpei1hZHYteD0iOTYxIiBkPSJNOTEuMjI1LTIwLjQzMmgzNDguNXY2NTkuMDc2aC0zNjYuOTV2LTY0MC42MjZxMC03LjE3NSA2LjE1LTEzLjMyNXQxMi4zLTUuMTI1ek04NzguNDI2LTEuOTgydjY0MC42MjZoLTM2NS45MjV2LTY1OS4wNzZoMzQ3LjQ3NXE4LjIgMCAxMy4zMjUgNS4xMjV0NS4xMjUgMTMuMzI1ek05NTIuMjI2IDY5Mi45Njl2LTY5NC45NTFxMC0zNy45MjUtMjcuNjc1LTY0LjU3NXQtNjQuNTc1LTI3LjY3NWgtNzY4Ljc1MXEtMzYuOSAwLTY0LjU3NSAyNy42NzV0LTI2LjY1IDY0LjU3NXY2OTQuOTUxcTAgMzcuOTI1IDI2LjY1IDY0LjU3NXQ2NC41NzUgMjcuNjc1aDc2OC43NTFxMzcuOTI1IDAgNjQuNTc1LTI3LjY3NXQyNy42NzUtNjQuNTc1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDc7IiBnbHlwaC1uYW1lPSJ0aC1sYXJnZTEiIGhvcml6LWFkdi14PSI5NjEiIGQ9Ik00MzkuNzI1IDI3Mi43MTl2LTIyMC4zNzVxMC0yOS43MjUtMjIuNTUtNTEuMjV0LTUxLjI1LTIxLjUyNWgtMjkzLjE1cS0yOS43MjUgMC01MS4yNSAyMS41MjV0LTIxLjUyNSA1MS4yNXYyMjAuMzc1cTAgMjkuNzI1IDIxLjUyNSA1MS4yNXQ1MS4yNSAyMS41MjVoMjkzLjE1cTI5LjcyNSAwIDUxLjI1LTIxLjUyNXQyMi41NS01MS4yNXpNNDM5LjcyNSA3MTEuNDE5di0yMTkuMzVxMC0yOS43MjUtMjIuNTUtNTEuMjV0LTUxLjI1LTIyLjU1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIyLjU1dC0yMS41MjUgNTEuMjV2MjE5LjM1cTAgMjkuNzI1IDIxLjUyNSA1MS4yNXQ1MS4yNSAyMi41NWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjIuNTV0MjIuNTUtNTEuMjV6TTk1Mi4yMjYgMjcyLjcxOXYtMjIwLjM3NXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjEuNTI1aC0yOTMuMTVxLTI5LjcyNSAwLTUxLjI1IDIxLjUyNXQtMjEuNTI1IDUxLjI1djIyMC4zNzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIxLjUyNWgyOTMuMTVxMjkuNzI1IDAgNTEuMjUtMjEuNTI1dDIyLjU1LTUxLjI1ek05NTIuMjI2IDcxMS40MTl2LTIxOS4zNXEwLTI5LjcyNS0yMi41NS01MS4yNXQtNTEuMjUtMjIuNTVoLTI5My4xNXEtMjkuNzI1IDAtNTEuMjUgMjIuNTV0LTIxLjUyNSA1MS4yNXYyMTkuMzVxMCAyOS43MjUgMjEuNTI1IDUxLjI1dDUxLjI1IDIyLjU1aDI5My4xNXEyOS43MjUgMCA1MS4yNS0yMi41NXQyMi41NS01MS4yNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOWM0OyIgZ2x5cGgtbmFtZT0ic2ltYm9sby1tZW51MiIgZD0iTTk1MC44NTcgOTYuMDAxdi03My4xNDNxMC0xNC44NTctMTAuODU3LTI1LjcxNHQtMjUuNzE0LTEwLjg1N2gtODA0LjU3MXEtMTQuODU3IDAtMjUuNzE0IDEwLjg1N3QtMTAuODU3IDI1LjcxNHY3My4xNDNxMCAxNC44NTcgMTAuODU3IDI1LjcxNHQyNS43MTQgMTAuODU3aDgwNC41NzFxMTQuODU3IDAgMjUuNzE0LTEwLjg1N3QxMC44NTctMjUuNzE0ek05NTAuODU3IDM4OC41NzJ2LTczLjE0M3EwLTE0Ljg1Ny0xMC44NTctMjUuNzE0dC0yNS43MTQtMTAuODU3aC04MDQuNTcxcS0xNC44NTcgMC0yNS43MTQgMTAuODU3dC0xMC44NTcgMjUuNzE0djczLjE0M3EwIDE0Ljg1NyAxMC44NTcgMjUuNzE0dDI1LjcxNCAxMC44NTdoODA0LjU3MXExNC44NTcgMCAyNS43MTQtMTAuODU3dDEwLjg1Ny0yNS43MTR6TTk1MC44NTcgNjgxLjE0NHYtNzMuMTQzcTAtMTQuODU3LTEwLjg1Ny0yNS43MTR0LTI1LjcxNC0xMC44NTdoLTgwNC41NzFxLTE0Ljg1NyAwLTI1LjcxNCAxMC44NTd0LTEwLjg1NyAyNS43MTR2NzMuMTQzcTAgMTQuODU3IDEwLjg1NyAyNS43MTR0MjUuNzE0IDEwLjg1N2g4MDQuNTcxcTE0Ljg1NyAwIDI1LjcxNC0xMC44NTd0MTAuODU3LTI1LjcxNHoiIC8+CjwvZm9udD48L2RlZnM+PC9zdmc+#lyrcompare) format("svg");font-weight:400;font-style:normal;font-display:block}[class*=lyrcompare-icon-],[class^=lyrcompare-icon-]{speak:none;line-height:1}.lyrcompare-icon:before,[class*=lyrcompare-icon-],[class^=lyrcompare-icon-]{font-family:lyrcompare!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lyrcompare-icon:before{display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;line-height:1em;margin-left:.2em;content:"\e906"}.lyrcompare-icon-th-large-1:before{content:"\e905";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-2:before{content:"\e904";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-3:before{content:"\e903";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-th-large-4:before{content:"\e902";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-1:before{content:"\e901";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-2:before,.lyrcompare-icon-columns-3:before{content:"\e900";color:#71a7d3;font-size:1.4rem}.lyrcompare-icon-columns-3:before{transform:rotate(270deg);display:inline-block}.lyrcompare-icon-columns-4:before{content:"\e901";color:#71a7d3;font-size:1.4rem;transform:rotate(-90deg);display:inline-block}.lyrcompare-icon-th-large:before{content:"\e801"}.lyrcompare-icon-columns:before{content:"\e906"}.lyrcompare-icon-columns-rotate:before{content:"\e906";display:inline-block;transform:rotate(270deg)}.lyrcompare-swipe-control{display:block;position:absolute;height:2.5rem;width:2.5rem;top:0;left:0;visibility:hidden}.lyrcompare-swipe-control.horizontal,.lyrcompare-swipe-control.vertical,.lyrcompare-swipe-control.vertical.horizontal{visibility:visible}.lyrcompare-swipe-control .control-icon:before{content:"\e9c4";font-family:lyrcompare;position:absolute;display:block;font-size:1.3rem;text-align:center;line-height:2.5rem;margin:0 auto;width:2.5rem;color:#94bdde;border-radius:50rem;box-shadow:0 2px 4px rgba(0,0,0,.51),0 -1px 0 rgba(0,0,0,.02);background-color:#fff;z-index:3}.lyrcompare-swipe-control.vertical:before{content:"";background:#fff;display:block;position:absolute;height:250vh;width:.5rem;top:-125vh;left:1rem;cursor:ew-resize}.lyrcompare-swipe-control.horizontal:after{content:"";background:#fff;display:block;position:absolute;width:250vw;height:.5rem;left:-125vw;top:1rem;cursor:ns-resize}.lyrcompare-swipe-control .control-icon{cursor:grabbing;visibility:hidden}.lyrcompare-swipe-control.horizontal.static:after,.lyrcompare-swipe-control.static,.lyrcompare-swipe-control.vertical.static:before{cursor:auto!important}.lyrcompare-swipe-control.static .control-icon{visibility:hidden!important}.lyrcompare-swipe-control.dynamic .control-icon{visibility:visible!important}.lyrcompare-swipe-control.off,.lyrcompare-swipe-control.off .control-icon{visibility:hidden} \ No newline at end of file diff --git a/dist/lyrcompare.ol.min.js b/dist/lyrcompare.ol.min.js index 5dee1b5d..d8582f4d 100644 --- a/dist/lyrcompare.ol.min.js +++ b/dist/lyrcompare.ol.min.js @@ -1,2 +1,2 @@ -!function(e){var t={};function o(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(i,r,function(t){return e[t]}.bind(null,r));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=5)}([function(e,t){e.exports='
\n
{{translations.tooltip}}
\n
\n
\n \n \n \n
\n
\n \n \n
\n
\n \n \n \n
\n
\n {{#if options}}\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n \x3c!--Multi Curtain--\x3e\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n {{/if}}\n
\n
'},function(e){e.exports=JSON.parse('{"tooltip":"Layer Comparison","tooltip_vcurtain":"Vertical curtain","tooltip_hcurtain":"Horizontal curtain","tooltip_multicurtain":"Multi curtain","layers":"Layehrs","radius":"Radius","opacity":"Opacity","static":"Static","dynamic":"Dynamic","mixed":"Mixed","layer":"Layer","opacity_tooltip":"Opacity of the layers (0-100%)","dynamic_tooltip":"Division between layers is fixed by mouse position","mixed_tooltip":"Division between layers is dragged by mouse","static_tooltip":"Division between layers is fixed 50%","lyrLeftSelect_tooltip":"Select layer on the left","lyrRightSelect_tooltip":"Select layer on the right","advice_sameLayer":"One layer in different places is not allowed","no_layers_plugin":"The number of layers is insufficient to apply the effect","repeated_layers":"Selected layers cannot be repeated"}')},function(e){e.exports=JSON.parse('{"tooltip":"Comparador de capas","tooltip_vcurtain":"Cortina vertical","tooltip_hcurtain":"Cortina horizontal","tooltip_multicurtain":"Multivista","layers":"Capas","radius":"Radio","opacity":"Opacidad","static":"Estático","dynamic":"Dinámico","mixed":"Mixto","layer":"Capa","opacity_tooltip":"Opacidad de las capas que se comparan (0-100%)","dynamic_tooltip":"La división la marca la posición del cursor","mixed_tooltip":"La división se arrastra con el ratón","static_tooltip":"La división es fija en el centro del mapa","lyrLeftSelect_tooltip":"Selecciona la capa de la izquierda","lyrRightSelect_tooltip":"Selecciona la capa de la derecha","advice_sameLayer":"No puede cargarse la misma capa en varios sitios","no_layers_plugin":"El número de capas es insuficiente para aplicar el efecto","repeated_layers":"Las capas seleccionadas no se pueden repetir"}')},function(e){e.exports=JSON.parse('{"url":{"name":"lyrcompare","separator":"*!"},"constructor":"M.plugin.LyrCompare","parameters":[{"type":"object","properties":[{"type":"simple","name":"position","possibleValues":["TL","TR","BL","BR"],"position":0},{"type":"simple","name":"layers","position":1},{"type":"boolean","name":"collapsible","position":2},{"type":"boolean","name":"collapsed","position":3},{"type":"simple","name":"staticDivision","position":4},{"type":"simple","name":"opacityVal","position":5},{"type":"simple","name":"comparisonMode","position":6},{"type":"simple","name":"defaultLyrA","position":7},{"type":"simple","name":"defaultLyrB","position":8},{"type":"simple","name":"defaultLyrC","position":9},{"type":"simple","name":"defaultLyrD","position":10},{"type":"boolean","name":"interface","position":11}]}],"files":{"ol":{"scripts":["lyrcompare.ol.min.js"],"styles":["lyrcompare.ol.min.css"]}},"metadata":{"name":"LyrCompare","description":"Comparación entre capas","text":"Plugin que permite comparar varias capas sobre una cartografía base. La extensión de las capas sobre lienzo vienen definidas por la posición del ratón o por el punto medio del lienzo.","version":"1.0.0","date":"Junio, 2020","author":"","org":"Consejería de Hacienda, Industria y Energía. Junta de Andalucía.","tags":"mapea,plugin","icon":"./facade/assets/icons/icons.svg"}}')},function(e,t,o){},function(e,t,o){"use strict";o.r(t);o(4);function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:S(),o=g(t),i="";return M.utils.isNullOrEmpty(o)?console.warn("The translation '".concat(t,"' has not been defined.")):i=e.split(".").reduce((function(e,t){return e[t]}),o),i};function C(e){return(C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function D(e){return function(e){if(Array.isArray(e)){for(var t=0,o=new Array(e.length);t0)&&this.on(M.evt.ADDED_TO_MAP,(function(e){t.activateCurtain()})),this.map=e,new Promise((function(e,o){if(t.layers=t.transformToLayers(t.layers),t.layers.length>=2){3===t.comparisonMode&&t.layers.length<4&&(M.dialog.error(L("no_layers_plugin"),"lyrcompare"),t.comparisonMode=0);var i=t.allLayerLoad();if(i)t.setFunctionsAndCompile(e);else var r=setInterval((function(){(i=t.allLayerLoad())&&(clearInterval(r),t.setFunctionsAndCompile(e))}),200)}else M.dialog.error(L("no_layers_plugin"),"lyrcompare")}))}},{key:"setFunctionsAndCompile",value:function(e){var t=this,o={jsonp:!0,vars:{options:this.layers.map((function(e){return e instanceof Object?{name:e.name,legend:e.legend}:{name:e,legend:e}})),comparisonMode:this.comparisonMode,translations:{tooltip:L("tooltip"),tooltip_vcurtain:L("tooltip_vcurtain"),tooltip_hcurtain:L("tooltip_hcurtain"),tooltip_multicurtain:L("tooltip_multicurtain"),opacity:L("opacity"),static:L("static"),dynamic:L("dynamic"),mixed:L("mixed"),layer:L("layer"),opacity_tooltip:L("opacity_tooltip"),static_tooltip:L("static_tooltip"),dynamic_tooltip:L("dynamic_tooltip"),mixed_tooltip:L("mixed_tooltip"),lyrLeftSelect_tooltip:L("lyrLeftSelect_tooltip"),lyrRightSelect_tooltip:L("lyrRightSelect_tooltip")}}};return Handlebars.registerHelper("ifCond",(function(e,t,o){return e===t?o.fn(this):o.inverse(this)})),this.template=M.template.compileSync(b.a,o),this.setEventsAndValues(),this.updateControls(),0==this.layers.length?M.dialog.error(L("no_layers_plugin")):this.template.querySelectorAll('button[id^="m-lyrcompare-"]').forEach((function(e,o){e.addEventListener("click",(function(e){return 0===t.comparisonMode?(t.comparisonMode=o+1,void t.activateCurtain()):t.comparisonMode===o+1?(t.comparisonMode=0,void t.deactivateCurtain()):(t.comparisonMode=o+1,t.updateControls(),void t.getImpl().setComparisonMode(t.comparisonMode))}))})),e(this.template)}},{key:"setEventsAndValues",value:function(){var e=this;this.template.querySelector("#input-transparent-opacity").value=this.opacityVal,this.template.querySelector("#input-transparent-opacity").addEventListener("input",(function(t){e.opacityVal=Number(t.target.value),e.getImpl().setOpacity(e.opacityVal)})),1===this.staticDivision?this.template.querySelector("#div-m-lyrcompare-transparent-static").checked=!0:0===this.staticDivision?this.template.querySelector("#div-m-lyrcompare-transparent-dynamic").checked=!0:this.template.querySelector("#div-m-lyrcompare-transparent-mixed").checked=!0,this.template.querySelector("#div-m-lyrcompare-transparent-dynamic").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelector("#div-m-lyrcompare-transparent-static").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelector("#div-m-lyrcompare-transparent-mixed").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(t){t.addEventListener("change",(function(o){var i=e.layers.filter((function(e){return e.name===o.target.value})),r=[];if("m-lyrcompare-lyrA"===t.id?r=[i[0].name,e.layerSelectedB.name,e.layerSelectedC.name,e.layerSelectedD.name]:"m-lyrcompare-lyrB"===t.id?r=[e.layerSelectedA.name,i[0].name,e.layerSelectedC.name,e.layerSelectedD.name]:"m-lyrcompare-lyrC"===t.id?r=[e.layerSelectedA.name,e.layerSelectedB.name,i[0].name,e.layerSelectedD.name]:"m-lyrcompare-lyrD"===t.id&&(r=[e.layerSelectedA.name,e.layerSelectedB.name,e.layerSelectedC.name,i[0].name]),!1===e.checkLayersAreDifferent.apply(e,D(r)))return M.dialog.info(L("advice_sameLayer")),"m-lyrcompare-lyrA"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedA.name:"m-lyrcompare-lyrB"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedB.name:"m-lyrcompare-lyrC"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedC.name:"m-lyrcompare-lyrD"===t.id&&(e.template.querySelector("#"+t.id).value=e.layerSelectedD.name),!1;"m-lyrcompare-lyrA"===t.id?(i[0].name===e.layerSelectedC.name&&(e.layerSelectedC.setVisible(!1),e.layerSelectedC=e.layerSelectedA,e.template.querySelector("#m-lyrcompare-lyrC").value=e.layerSelectedA.name),i[0].name===e.layerSelectedD.name&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=e.layerSelectedA,e.template.querySelector("#m-lyrcompare-lyrD").value=e.layerSelectedA.name)):"m-lyrcompare-lyrB"===t.id&&(i[0].name===e.layerSelectedC.name&&(e.layerSelectedC.setVisible(!1),e.layerSelectedC=e.layerSelectedB,e.template.querySelector("#m-lyrcompare-lyrC").value=e.layerSelectedB.name),i[0].name===e.layerSelectedD.name&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=e.layerSelectedB,e.template.querySelector("#m-lyrcompare-lyrD").value=e.layerSelectedB.name)),"m-lyrcompare-lyrA"===t.id?(e.layerSelectedA.setVisible(!1),e.layerSelectedA=i[0]):"m-lyrcompare-lyrB"===t.id?(e.layerSelectedB.setVisible(!1),e.layerSelectedB=i[0]):"m-lyrcompare-lyrC"===t.id?(e.layerSelectedC.setVisible(!1),e.layerSelectedC=i[0]):"m-lyrcompare-lyrD"===t.id&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=i[0]),e.removeEffectsComparison(),e.getImpl().effectSelectedCurtain(e.layerSelectedA,e.layerSelectedB,e.layerSelectedC,e.layerSelectedD,e.opacityVal,e.staticDivision,e.comparisonMode)}))}))}},{key:"checkLayersAreDifferent",value:function(e,t,o,i){if(1===this.comparisonMode||2===this.comparisonMode){if(e===t)return!1}else{var r=[e,t,o,i];if(r.length!==r.unique().length)return!1}return!0}},{key:"activateCurtain",value:function(){this.activeDefault(),this.getImpl().effectSelectedCurtain(this.layerSelectedA,this.layerSelectedB,this.layerSelectedC,this.layerSelectedD,this.opacityVal,this.staticDivision,this.comparisonMode),this.updateControls()}},{key:"activeDefault",value:function(){null===this.layerSelectedA&&(this.layerSelectedA=this.layers[this.defaultLyrA],this.template.querySelector("#m-lyrcompare-lyrA").selectedIndex=this.defaultLyrA),null===this.layerSelectedB&&(this.layerSelectedB=this.layers[this.defaultLyrB],this.template.querySelector("#m-lyrcompare-lyrB").selectedIndex=this.defaultLyrB),null===this.layerSelectedC&&(this.layerSelectedC=this.layers[this.defaultLyrC],this.template.querySelector("#m-lyrcompare-lyrC").selectedIndex=this.defaultLyrC),null===this.layerSelectedD&&(this.layerSelectedD=this.layers[this.defaultLyrD],this.template.querySelector("#m-lyrcompare-lyrD").selectedIndex=this.defaultLyrD)}},{key:"deactivateCurtain",value:function(){this.comparisonMode=0,null!==this.layerSelectedA&&null!==this.layerSelectedB&&(this.layerSelectedA.setVisible(!1),this.layerSelectedB.setVisible(!1)),null!==this.layerSelectedC&&null!==this.layerSelectedD&&void 0!==this.layerSelectedC&&void 0!==this.layerSelectedD&&(this.layerSelectedC.setVisible(!1),this.layerSelectedD.setVisible(!1)),this.removeEffectsComparison(),this.updateControls()}},{key:"removeEffectsComparison",value:function(){this.getImpl().removeEffectsCurtain()}},{key:"updateControls",value:function(){this.removeActivate(),this.activateByMode();var e=document.querySelector(".lyrcompare-swipe-control");if(0==this.comparisonMode)return this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(e){e.disabled=!0})),void(this.template.querySelector("input").disabled=!0);1===this.comparisonMode?(e&&(e.style.opacity="1"),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-columns-2"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-columns-1"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrA").disabled=!1,this.template.querySelector("#m-lyrcompare-lyrB").disabled=!1):2===this.comparisonMode?(e&&(e.style.opacity="1"),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-columns-4"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-columns-3"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrA").disabled=!1,this.template.querySelector("#m-lyrcompare-lyrB").disabled=!1):3===this.comparisonMode&&(e&&(e.style.opacity="1"),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(e){e.disabled=!1})),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-th-large-1"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-th-large-2"),this.template.querySelector("#m-lyrcompare-lyrC-lbl").classList.add("lyrcompare-icon-th-large-3"),this.template.querySelector("#m-lyrcompare-lyrD-lbl").classList.add("lyrcompare-icon-th-large-4"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrC-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrD-cont").style.display="block"),this.template.querySelector("input").disabled=!1}},{key:"activateByMode",value:function(){1===this.comparisonMode?this.template.querySelector("#m-lyrcompare-vcurtain").classList.add("buttom-pressed-vcurtain"):2===this.comparisonMode?this.template.querySelector("#m-lyrcompare-hcurtain").classList.add("buttom-pressed-hcurtain"):3===this.comparisonMode&&this.template.querySelector("#m-lyrcompare-multicurtain").classList.add("buttom-pressed-multicurtain")}},{key:"removeActivate",value:function(){this.template.querySelector("#m-lyrcompare-vcurtain").classList.remove("buttom-pressed-vcurtain"),this.template.querySelector("#m-lyrcompare-hcurtain").classList.remove("buttom-pressed-hcurtain"),this.template.querySelector("#m-lyrcompare-multicurtain").classList.remove("buttom-pressed-multicurtain"),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').disabled=!0,this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrC-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrD-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList="",this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList="";var e=document.querySelector(".lyrcompare-swipe-control");e&&(e.style.opacity="0")}},{key:"removeCurtainLayers",value:function(e){var t=this;e.forEach((function(e){if(e instanceof Object){if(e instanceof Object){var o=t.map.getLayers().filter((function(t){return e.name.includes(t.name)}))[t.map.getLayers().filter((function(t){return e.name.includes(t.name)})).length-1];t.map.removeLayers(o)}}else if(e.indexOf("*")>=0){var i=e.split("*")[3],r=t.map.getLayers().filter((function(e){return i.includes(e.name)}))[t.map.getLayers().filter((function(e){return i.includes(e.name)})).length-1];t.map.removeLayers(r)}else{var a=t.map.getLayers().filter((function(t){return e.includes(t.name)}))[t.map.getLayers().filter((function(t){return e.includes(t.name)})).length-1];t.map.removeLayers(a)}}))}},{key:"allLayerLoad",value:function(){return void 0!==this.layers[0].load&&(void 0!==this.layers[1].load||void 0===this.layers[2]||void 0===this.layers[3]||void 0!==this.layers[2].load&&void 0!==this.layers[3].load)}},{key:"transformToLayers",value:function(e){var t=e.map((function(e){var t=null;if(e instanceof Object){if(e instanceof Object){var o=this.map.getLayers().filter((function(t){return e.name.includes(t.name)}))[0];t=this.isValidLayer(o)?o:null}}else if(e.indexOf("*")>=0){var i=e.split("*");"WMS"==i[0].toUpperCase()?(t=new M.layer.WMS({url:i[2],name:i[3]}),this.map.getLayers().filter((function(e){return t.name.includes(e.name)})).length>0&&this.map.removeLayers(this.map.getLayers().filter((function(e){return t.name.includes(e.name)}))[0]),this.map.addLayers(t)):"WMTS"==i[0].toUpperCase()&&(t=new M.layer.WMTS({url:i[1],name:i[2]}),this.map.addLayers(t))}else{var r=this.map.getLayers().filter((function(t){return e.includes(t.name)}))[0];t=this.isValidLayer(r)?r:null}if(null!==t)return null===t.getImpl().getOL3Layer()?setTimeout((function(){"WMS"===t.type?t.load=!0:"WMTS"===t.type&&(t.load=!0)}),1e3):t.load=!0,t.displayInLayerSwitcher=!1,t.setVisible(!1),t;this.layers.remove(e)}),this);return void 0===t[0]?[]:t}},{key:"isValidLayer",value:function(e){return"WMTS"===e.type||"WMS"===e.type}},{key:"equals",value:function(e){return e instanceof t}},{key:"getLayersNames",value:function(){return this.layers.map((function(e){return e.name}))}}])&&w(o.prototype,i),r&&w(o,r),t}(),q=o(3);function x(e){return(x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function V(e,t){for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=P(this,j(t).call(this))).name_="lyrcompare",e.error_=!1,e.layers=[],void 0===o.layers||o.layers.length<2?(M.dialog.error(L("no_layers_plugin"),"lyrcompare"),e.error_=!0):Array.isArray(o.layers)?e.layers=o.layers:e.layers=o.layers.split(","),e.controls_=[],e.map_=null,!1===e.error_){e.position=["TR","TL","BL","BR"].includes(o.position)?o.position:"TR",e.collapsed=o.collapsed,void 0===e.collapsed&&(e.collapsed=!0),e.collapsible=o.collapsible,void 0===e.collapsible&&(e.collapsible=!0),e.staticDivision=void 0===o.staticDivision?1:parseInt(o.staticDivision),void 0===o.opacityVal?e.opacityVal=100:(e.opacityVal=parseInt(o.opacityVal),e.opacityVal<=0?e.opacityVal=0:e.opacityVal>=100&&(e.opacityVal=100)),void 0===o.comparisonMode?e.comparisonMode=0:(e.comparisonMode=parseInt(o.comparisonMode),(e.comparisonMode<=0||e.comparisonMode>3)&&(e.comparisonMode=0)),e.metadata_=q.metadata,e.tooltip_=o.tooltip||L("tooltip"),e.interface=void 0===o.interface||o.interface,void 0===o.defaultLyrA?e.defaultLyrA=0:e.defaultLyrA=parseInt(o.defaultLyrA),void 0===o.defaultLyrB?e.defaultLyrB=0!==e.defaultLyrA?0:1:e.defaultLyrB=parseInt(o.defaultLyrB),e.defaultLyrA===e.defaultLyrB&&(M.dialog.error(L("repeated_layers"),"lyrcompare"),e.error_=!0),void 0===o.defaultLyrC?e.defaultLyrC=2:e.defaultLyrC=parseInt(o.defaultLyrC),e.defaultLyrA!==e.defaultLyrC&&e.defaultLyrB!==e.defaultLyrC||(M.dialog.error(L("repeated_layers"),"lyrcompare"),e.error_=!0),void 0===o.defaultLyrD?e.defaultLyrD=3:e.defaultLyrD=parseInt(o.defaultLyrD),e.defaultLyrA!==e.defaultLyrD&&e.defaultLyrB!==e.defaultLyrD&&e.defaultLyrC!==e.defaultLyrD||(M.dialog.error(L("repeated_layers"),"lyrcompare"),e.error_=!0)}return e}var o,i,r;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&I(e,t)}(t,M.Plugin),o=t,(i=[{key:"addTo",value:function(e){this.map_=e;var t={layers:this.layers,collapsible:this.collapsible,collapsed:this.collapsed,staticDivision:this.staticDivision,opacityVal:this.opacityVal,comparisonMode:this.comparisonMode,defaultLyrA:this.defaultLyrA,defaultLyrB:this.defaultLyrB,defaultLyrC:this.defaultLyrC,defaultLyrD:this.defaultLyrD,interface:this.interface};this.control_=new B(t),this.controls_.push(this.control_),this.error_?0!==e.getPlugins("lyrcompare").length&&e.removePlugins(e.getPlugins("lyrcompare")):(this.interface?this.panel_=new M.ui.Panel("panelLyrcompare",{collapsible:this.collapsible,collapsed:this.collapsed,position:M.ui.position[this.position],className:"m-plugin-lyrcompare",collapsedButtonClass:"lyrcompare-icon",tooltip:this.tooltip_}):this.panel_=new M.ui.Panel("panelLyrcompare",{collapsible:!1,collapsed:!0,position:M.ui.position[this.position],className:"m-plugin-lyrcompare-hidden"}),this.panel_.addControls(this.controls_),e.addPanels(this.panel_))}},{key:"destroy",value:function(){this.deactivate();var e=document.querySelector(".lyrcompare-swipe-control");e&&e.remove(),this.map_.removeControls([this.control_]),this.control_.removeCurtainLayers(this.control_.getLayersNames());var t=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];this.name_=t[0],this.error_=t[1],this.layers=t[2],this.controls_=t[3],this.map_=t[4],this.position=t[5],this.collapsed=t[6],this.collapsible=t[7],this.staticDivision=t[8],this.opacityVal=t[9],this.comparisonMode=t[10],this.metadata_=t[11],this.tooltip_=t[12],this.interface=t[13],this.defaultLyrA=t[14],this.defaultLyrB=t[15],this.defaultLyrC=t[16],this.defaultLyrD=t[17]}},{key:"getMetadata",value:function(){return this.metadata_}},{key:"getAPIRest",value:function(){return"".concat(this.name,"=").concat(this.position,"*!").concat(this.layers.join(","),"*!").concat(this.collapsible,"*!").concat(this.collapsed,"*!").concat(this.staticDivision,"*!").concat(this.opacityVal,"*!").concat(this.comparisonMode,"*!").concat(this.defaultLyrA,"*!").concat(this.defaultLyrB,"*!").concat(this.defaultLyrC,"*!").concat(this.defaultLyrD,"*!").concat(this.interface)}},{key:"activate",value:function(){this.control_.activateCurtain()}},{key:"deactivate",value:function(){this.control_.deactivateCurtain()}},{key:"equals",value:function(e){return e instanceof t}},{key:"name",get:function(){return this.name_}}])&&V(o.prototype,i),r&&V(o,r),t}();window.M.plugin||(window.M.plugin={}),window.M.control||(window.M.control={}),window.M.impl||(window.M.impl={}),window.M.impl.control||(window.M.impl.control={}),window.M.plugin.LyrCompare=E,window.M.control.LyrCompareControl=B,window.M.impl.control.CurtainInteraction=c,window.M.impl.control.Lyrcomparecontrol=f}]); +!function(e){var t={};function r(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(o,i,function(t){return e[t]}.bind(null,i));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=5)}([function(e,t){e.exports='
\n
{{translations.tooltip}}
\n
\n
\n \n \n \n
\n
\n \n \n
\n
\n \n \n \n
\n
\n {{#if options}}\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n \x3c!--Multi Curtain--\x3e\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n {{/if}}\n
\n
'},function(e){e.exports=JSON.parse('{"tooltip":"Layer Comparison","tooltip_vcurtain":"Vertical curtain","tooltip_hcurtain":"Horizontal curtain","tooltip_multicurtain":"Multi curtain","layers":"Layehrs","radius":"Radius","opacity":"Opacity","static":"Static","dynamic":"Dynamic","mixed":"Mixed","layer":"Layer","opacity_tooltip":"Opacity of the layers (0-100%)","dynamic_tooltip":"Division between layers is fixed by mouse position","mixed_tooltip":"Division between layers is dragged by mouse","static_tooltip":"Division between layers is fixed 50%","lyrLeftSelect_tooltip":"Select layer on the left","lyrRightSelect_tooltip":"Select layer on the right","advice_sameLayer":"One layer in different places is not allowed","no_layers_plugin":"The number of layers is insufficient to apply the effect","repeated_layers":"Selected layers cannot be repeated"}')},function(e){e.exports=JSON.parse('{"tooltip":"Comparador de capas","tooltip_vcurtain":"Cortina vertical","tooltip_hcurtain":"Cortina horizontal","tooltip_multicurtain":"Multivista","layers":"Capas","radius":"Radio","opacity":"Opacidad","static":"Estático","dynamic":"Dinámico","mixed":"Mixto","layer":"Capa","opacity_tooltip":"Opacidad de las capas que se comparan (0-100%)","dynamic_tooltip":"La división la marca la posición del cursor","mixed_tooltip":"La división se arrastra con el ratón","static_tooltip":"La división es fija en el centro del mapa","lyrLeftSelect_tooltip":"Selecciona la capa de la izquierda","lyrRightSelect_tooltip":"Selecciona la capa de la derecha","advice_sameLayer":"No puede cargarse la misma capa en varios sitios","no_layers_plugin":"El número de capas es insuficiente para aplicar el efecto","repeated_layers":"Las capas seleccionadas no se pueden repetir"}')},function(e){e.exports=JSON.parse('{"url":{"name":"lyrcompare","separator":"*!"},"constructor":"M.plugin.LyrCompare","parameters":[{"type":"object","properties":[{"type":"simple","name":"position","possibleValues":["TL","TR","BL","BR"],"position":0},{"type":"simple","name":"layers","position":1},{"type":"boolean","name":"collapsible","position":2},{"type":"boolean","name":"collapsed","position":3},{"type":"simple","name":"staticDivision","position":4},{"type":"simple","name":"opacityVal","position":5},{"type":"simple","name":"comparisonMode","position":6},{"type":"simple","name":"defaultLyrA","position":7},{"type":"simple","name":"defaultLyrB","position":8},{"type":"simple","name":"defaultLyrC","position":9},{"type":"simple","name":"defaultLyrD","position":10},{"type":"boolean","name":"interface","position":11}]}],"files":{"ol":{"scripts":["lyrcompare.ol.min.js"],"styles":["lyrcompare.ol.min.css"]}},"metadata":{"name":"LyrCompare","description":"Comparación entre capas","text":"Plugin que permite comparar varias capas sobre una cartografía base. La extensión de las capas sobre lienzo vienen definidas por la posición del ratón o por el punto medio del lienzo.","version":"1.0.1","date":"Abril, 2021","author":"","org":"Consejería de Hacienda, Industria y Energía. Junta de Andalucía.","tags":"mapea,plugin","icon":"./facade/assets/icons/icons.svg","compatibility":["6"]}}')},function(e,t,r){},function(e,t,r){"use strict";r.r(t);r(4);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:D(),r=w(t),o="";return M.utils.isNullOrEmpty(r)?console.warn("The translation '".concat(t,"' has not been defined.")):o=e.split(".").reduce((function(e,t){return e[t]}),r),o};function O(e){return(O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function B(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return k(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return k(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r0)&&this.on(M.evt.ADDED_TO_MAP,(function(e){t.activateCurtain()})),this.map=e,new Promise((function(e,r){if(t.layers=t.transformToLayers(t.layers),t.layers.length>=2){3===t.comparisonMode&&t.layers.length<4&&(M.dialog.error(A("no_layers_plugin"),"lyrcompare"),t.comparisonMode=0);var o=t.allLayerLoad();if(o)t.setFunctionsAndCompile(e);else var i=setInterval((function(){(o=t.allLayerLoad())&&(clearInterval(i),t.setFunctionsAndCompile(e))}),200)}else M.dialog.error(A("no_layers_plugin"),"lyrcompare")}))}},{key:"setFunctionsAndCompile",value:function(e){var t=this,r={jsonp:!0,vars:{options:this.layers.map((function(e){return e instanceof Object?{name:e.name,legend:e.legend}:{name:e,legend:e}})),comparisonMode:this.comparisonMode,translations:{tooltip:A("tooltip"),tooltip_vcurtain:A("tooltip_vcurtain"),tooltip_hcurtain:A("tooltip_hcurtain"),tooltip_multicurtain:A("tooltip_multicurtain"),opacity:A("opacity"),static:A("static"),dynamic:A("dynamic"),mixed:A("mixed"),layer:A("layer"),opacity_tooltip:A("opacity_tooltip"),static_tooltip:A("static_tooltip"),dynamic_tooltip:A("dynamic_tooltip"),mixed_tooltip:A("mixed_tooltip"),lyrLeftSelect_tooltip:A("lyrLeftSelect_tooltip"),lyrRightSelect_tooltip:A("lyrRightSelect_tooltip")}}};return Handlebars.registerHelper("ifCond",(function(e,t,r){return e===t?r.fn(this):r.inverse(this)})),this.template=M.template.compileSync(L.a,r),this.setEventsAndValues(),this.updateControls(),0==this.layers.length?M.dialog.error(A("no_layers_plugin")):this.template.querySelectorAll('button[id^="m-lyrcompare-"]').forEach((function(e,r){e.addEventListener("click",(function(e){return 0===t.comparisonMode?(t.comparisonMode=r+1,void t.activateCurtain()):t.comparisonMode===r+1?(t.comparisonMode=0,void t.deactivateCurtain()):(t.comparisonMode=r+1,t.updateControls(),void t.getImpl().setComparisonMode(t.comparisonMode))}))})),e(this.template)}},{key:"setEventsAndValues",value:function(){var e=this;this.template.querySelector("#input-transparent-opacity").value=this.opacityVal,this.template.querySelector("#input-transparent-opacity").addEventListener("input",(function(t){e.opacityVal=Number(t.target.value),e.getImpl().setOpacity(e.opacityVal)})),1===this.staticDivision?this.template.querySelector("#div-m-lyrcompare-transparent-static").checked=!0:0===this.staticDivision?this.template.querySelector("#div-m-lyrcompare-transparent-dynamic").checked=!0:this.template.querySelector("#div-m-lyrcompare-transparent-mixed").checked=!0,this.template.querySelector("#div-m-lyrcompare-transparent-dynamic").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelector("#div-m-lyrcompare-transparent-static").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelector("#div-m-lyrcompare-transparent-mixed").addEventListener("change",(function(t){e.staticDivision=Number(t.target.value),e.getImpl().setStaticDivision(e.staticDivision)})),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(t){t.addEventListener("change",(function(r){var o=e.layers.filter((function(e){return e.name===r.target.value})),i=[];if("m-lyrcompare-lyrA"===t.id?i=[o[0].name,e.layerSelectedB.name,e.layerSelectedC.name,e.layerSelectedD.name]:"m-lyrcompare-lyrB"===t.id?i=[e.layerSelectedA.name,o[0].name,e.layerSelectedC.name,e.layerSelectedD.name]:"m-lyrcompare-lyrC"===t.id?i=[e.layerSelectedA.name,e.layerSelectedB.name,o[0].name,e.layerSelectedD.name]:"m-lyrcompare-lyrD"===t.id&&(i=[e.layerSelectedA.name,e.layerSelectedB.name,e.layerSelectedC.name,o[0].name]),!1===e.checkLayersAreDifferent.apply(e,B(i)))return M.dialog.info(A("advice_sameLayer")),"m-lyrcompare-lyrA"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedA.name:"m-lyrcompare-lyrB"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedB.name:"m-lyrcompare-lyrC"===t.id?e.template.querySelector("#"+t.id).value=e.layerSelectedC.name:"m-lyrcompare-lyrD"===t.id&&(e.template.querySelector("#"+t.id).value=e.layerSelectedD.name),!1;"m-lyrcompare-lyrA"===t.id?(o[0].name===e.layerSelectedC.name&&(e.layerSelectedC.setVisible(!1),e.layerSelectedC=e.layerSelectedA,e.template.querySelector("#m-lyrcompare-lyrC").value=e.layerSelectedA.name),o[0].name===e.layerSelectedD.name&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=e.layerSelectedA,e.template.querySelector("#m-lyrcompare-lyrD").value=e.layerSelectedA.name)):"m-lyrcompare-lyrB"===t.id&&(o[0].name===e.layerSelectedC.name&&(e.layerSelectedC.setVisible(!1),e.layerSelectedC=e.layerSelectedB,e.template.querySelector("#m-lyrcompare-lyrC").value=e.layerSelectedB.name),o[0].name===e.layerSelectedD.name&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=e.layerSelectedB,e.template.querySelector("#m-lyrcompare-lyrD").value=e.layerSelectedB.name)),"m-lyrcompare-lyrA"===t.id?(e.layerSelectedA.setVisible(!1),e.layerSelectedA=o[0]):"m-lyrcompare-lyrB"===t.id?(e.layerSelectedB.setVisible(!1),e.layerSelectedB=o[0]):"m-lyrcompare-lyrC"===t.id?(e.layerSelectedC.setVisible(!1),e.layerSelectedC=o[0]):"m-lyrcompare-lyrD"===t.id&&(e.layerSelectedD.setVisible(!1),e.layerSelectedD=o[0]),e.removeEffectsComparison(),e.getImpl().effectSelectedCurtain(e.layerSelectedA,e.layerSelectedB,e.layerSelectedC,e.layerSelectedD,e.opacityVal,e.staticDivision,e.comparisonMode)}))}))}},{key:"checkLayersAreDifferent",value:function(e,t,r,o){if(1===this.comparisonMode||2===this.comparisonMode){if(e===t)return!1}else{var i=[e,t,r,o];if(i.length!==i.unique().length)return!1}return!0}},{key:"activateCurtain",value:function(){this.activeDefault(),this.getImpl().effectSelectedCurtain(this.layerSelectedA,this.layerSelectedB,this.layerSelectedC,this.layerSelectedD,this.opacityVal,this.staticDivision,this.comparisonMode),this.updateControls()}},{key:"activeDefault",value:function(){null===this.layerSelectedA&&(this.layerSelectedA=this.layers[this.defaultLyrA],this.template.querySelector("#m-lyrcompare-lyrA").selectedIndex=this.defaultLyrA),null===this.layerSelectedB&&(this.layerSelectedB=this.layers[this.defaultLyrB],this.template.querySelector("#m-lyrcompare-lyrB").selectedIndex=this.defaultLyrB),null===this.layerSelectedC&&(this.layerSelectedC=this.layers[this.defaultLyrC],this.template.querySelector("#m-lyrcompare-lyrC").selectedIndex=this.defaultLyrC),null===this.layerSelectedD&&(this.layerSelectedD=this.layers[this.defaultLyrD],this.template.querySelector("#m-lyrcompare-lyrD").selectedIndex=this.defaultLyrD)}},{key:"deactivateCurtain",value:function(){this.comparisonMode=0,null!==this.layerSelectedA&&null!==this.layerSelectedB&&(this.layerSelectedA.setVisible(!1),this.layerSelectedB.setVisible(!1)),null!==this.layerSelectedC&&null!==this.layerSelectedD&&void 0!==this.layerSelectedC&&void 0!==this.layerSelectedD&&(this.layerSelectedC.setVisible(!1),this.layerSelectedD.setVisible(!1)),this.removeEffectsComparison(),this.updateControls()}},{key:"removeEffectsComparison",value:function(){this.getImpl().removeEffectsCurtain()}},{key:"updateControls",value:function(){this.removeActivate(),this.activateByMode();var e=document.querySelector(".lyrcompare-swipe-control");if(0==this.comparisonMode)return this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(e){e.disabled=!0})),void(this.template.querySelector("input").disabled=!0);1===this.comparisonMode?(e&&(e.style.opacity="1"),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-columns-2"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-columns-1"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrA").disabled=!1,this.template.querySelector("#m-lyrcompare-lyrB").disabled=!1):2===this.comparisonMode?(e&&(e.style.opacity="1"),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-columns-4"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-columns-3"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrA").disabled=!1,this.template.querySelector("#m-lyrcompare-lyrB").disabled=!1):3===this.comparisonMode&&(e&&(e.style.opacity="1"),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').forEach((function(e){e.disabled=!1})),this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList.add("lyrcompare-icon-th-large-1"),this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList.add("lyrcompare-icon-th-large-2"),this.template.querySelector("#m-lyrcompare-lyrC-lbl").classList.add("lyrcompare-icon-th-large-3"),this.template.querySelector("#m-lyrcompare-lyrD-lbl").classList.add("lyrcompare-icon-th-large-4"),this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrC-cont").style.display="block",this.template.querySelector("#m-lyrcompare-lyrD-cont").style.display="block"),this.template.querySelector("input").disabled=!1}},{key:"activateByMode",value:function(){1===this.comparisonMode?this.template.querySelector("#m-lyrcompare-vcurtain").classList.add("buttom-pressed-vcurtain"):2===this.comparisonMode?this.template.querySelector("#m-lyrcompare-hcurtain").classList.add("buttom-pressed-hcurtain"):3===this.comparisonMode&&this.template.querySelector("#m-lyrcompare-multicurtain").classList.add("buttom-pressed-multicurtain")}},{key:"removeActivate",value:function(){this.template.querySelector("#m-lyrcompare-vcurtain").classList.remove("buttom-pressed-vcurtain"),this.template.querySelector("#m-lyrcompare-hcurtain").classList.remove("buttom-pressed-hcurtain"),this.template.querySelector("#m-lyrcompare-multicurtain").classList.remove("buttom-pressed-multicurtain"),this.template.querySelectorAll('select[id^="m-lyrcompare-"]').disabled=!0,this.template.querySelector("#m-lyrcompare-lyrA-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrB-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrC-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrD-cont").style.display="none",this.template.querySelector("#m-lyrcompare-lyrA-lbl").classList="",this.template.querySelector("#m-lyrcompare-lyrB-lbl").classList="";var e=document.querySelector(".lyrcompare-swipe-control");e&&(e.style.opacity="0")}},{key:"removeCurtainLayers",value:function(e){var t=this;e.forEach((function(e){if(e instanceof Object){if(e instanceof Object){var r=t.map.getLayers().filter((function(t){return e.name.includes(t.name)}))[t.map.getLayers().filter((function(t){return e.name.includes(t.name)})).length-1];t.map.removeLayers(r)}}else if(e.indexOf("*")>=0){var o=e.split("*")[3],i=t.map.getLayers().filter((function(e){return o.includes(e.name)}))[t.map.getLayers().filter((function(e){return o.includes(e.name)})).length-1];t.map.removeLayers(i)}else{var a=t.map.getLayers().filter((function(t){return e.includes(t.name)}))[t.map.getLayers().filter((function(t){return e.includes(t.name)})).length-1];t.map.removeLayers(a)}}))}},{key:"allLayerLoad",value:function(){return void 0!==this.layers[0].load&&(void 0!==this.layers[1].load||void 0===this.layers[2]||void 0===this.layers[3]||void 0!==this.layers[2].load&&void 0!==this.layers[3].load)}},{key:"transformToLayers",value:function(e){var t=e.map((function(e){var t=null;if(e instanceof Object){if(e instanceof Object){var r=this.map.getLayers().filter((function(t){return e.name.includes(t.name)}))[0];t=this.isValidLayer(r)?r:null}}else if(e.indexOf("*")>=0){var o=e.split("*");"WMS"==o[0].toUpperCase()?(t=new M.layer.WMS({url:o[2],name:o[3]}),this.map.getLayers().filter((function(e){return t.name.includes(e.name)})).length>0&&this.map.removeLayers(this.map.getLayers().filter((function(e){return t.name.includes(e.name)}))[0]),this.map.addLayers(t)):"WMTS"==o[0].toUpperCase()&&(t=new M.layer.WMTS({url:o[1],name:o[2]}),this.map.addLayers(t))}else{var i=this.map.getLayers().filter((function(t){return e.includes(t.name)}))[0];t=this.isValidLayer(i)?i:null}if(null!==t)return null===t.getImpl().getOL3Layer()?setTimeout((function(){("WMS"===t.type||"WMTS"===t.type)&&(t.load=!0)}),1e3):t.load=!0,t.displayInLayerSwitcher=!1,t.setVisible(!1),t;this.layers.remove(e)}),this);return void 0===t[0]?[]:t}},{key:"isValidLayer",value:function(e){return"WMTS"===e.type||"WMS"===e.type}},{key:"equals",value:function(e){return e instanceof a}},{key:"getLayersNames",value:function(){return this.layers.map((function(e){return e.name}))}}])&&q(t.prototype,r),o&&q(t,o),a}(),R=r(3);function E(e){return(E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function z(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};if(T(this,a),(e=i.call(this)).name_="lyrcompare",e.error_=!1,e.layers=[],void 0===t.layers||t.layers.length<2?(M.dialog.error(A("no_layers_plugin"),"lyrcompare"),e.error_=!0):Array.isArray(t.layers)?e.layers=t.layers:e.layers=t.layers.split(","),e.controls_=[],e.map_=null,!1===e.error_){var r=["TR","TL","BL","BR"];e.position=r.includes(t.position)?t.position:"TR",e.collapsed=t.collapsed,void 0===e.collapsed&&(e.collapsed=!0),e.collapsible=t.collapsible,void 0===e.collapsible&&(e.collapsible=!0),e.staticDivision=void 0===t.staticDivision?1:parseInt(t.staticDivision),void 0===t.opacityVal?e.opacityVal=100:(e.opacityVal=parseInt(t.opacityVal),e.opacityVal<=0?e.opacityVal=0:e.opacityVal>=100&&(e.opacityVal=100)),void 0===t.comparisonMode?e.comparisonMode=0:(e.comparisonMode=parseInt(t.comparisonMode),(e.comparisonMode<=0||e.comparisonMode>3)&&(e.comparisonMode=0)),e.metadata_=R.metadata,e.tooltip_=t.tooltip||A("tooltip"),e.interface=void 0===t.interface||t.interface,void 0===t.defaultLyrA?e.defaultLyrA=0:e.defaultLyrA=parseInt(t.defaultLyrA),void 0===t.defaultLyrB?e.defaultLyrB=0!==e.defaultLyrA?0:1:e.defaultLyrB=parseInt(t.defaultLyrB),e.defaultLyrA===e.defaultLyrB&&(M.dialog.error(A("repeated_layers"),"lyrcompare"),e.error_=!0),void 0===t.defaultLyrC?e.defaultLyrC=2:e.defaultLyrC=parseInt(t.defaultLyrC),e.defaultLyrA!==e.defaultLyrC&&e.defaultLyrB!==e.defaultLyrC||(M.dialog.error(A("repeated_layers"),"lyrcompare"),e.error_=!0),void 0===t.defaultLyrD?e.defaultLyrD=3:e.defaultLyrD=parseInt(t.defaultLyrD),e.defaultLyrA!==e.defaultLyrD&&e.defaultLyrB!==e.defaultLyrD&&e.defaultLyrC!==e.defaultLyrD||(M.dialog.error(A("repeated_layers"),"lyrcompare"),e.error_=!0)}return e}return t=a,(r=[{key:"addTo",value:function(e){this.map_=e;var t={layers:this.layers,collapsible:this.collapsible,collapsed:this.collapsed,staticDivision:this.staticDivision,opacityVal:this.opacityVal,comparisonMode:this.comparisonMode,defaultLyrA:this.defaultLyrA,defaultLyrB:this.defaultLyrB,defaultLyrC:this.defaultLyrC,defaultLyrD:this.defaultLyrD,interface:this.interface};this.control_=new I(t),this.controls_.push(this.control_),this.error_?0!==e.getPlugins("lyrcompare").length&&e.removePlugins(e.getPlugins("lyrcompare")):(this.interface?this.panel_=new M.ui.Panel("panelLyrcompare",{collapsible:this.collapsible,collapsed:this.collapsed,position:M.ui.position[this.position],className:"m-plugin-lyrcompare",collapsedButtonClass:"lyrcompare-icon",tooltip:this.tooltip_}):this.panel_=new M.ui.Panel("panelLyrcompare",{collapsible:!1,collapsed:!0,position:M.ui.position[this.position],className:"m-plugin-lyrcompare-hidden"}),this.panel_.addControls(this.controls_),e.addPanels(this.panel_))}},{key:"destroy",value:function(){this.deactivate();var e=document.querySelector(".lyrcompare-swipe-control");e&&e.remove(),this.map_.removeControls([this.control_]),this.control_.removeCurtainLayers(this.control_.getLayersNames());var t=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];this.name_=t[0],this.error_=t[1],this.layers=t[2],this.controls_=t[3],this.map_=t[4],this.position=t[5],this.collapsed=t[6],this.collapsible=t[7],this.staticDivision=t[8],this.opacityVal=t[9],this.comparisonMode=t[10],this.metadata_=t[11],this.tooltip_=t[12],this.interface=t[13],this.defaultLyrA=t[14],this.defaultLyrB=t[15],this.defaultLyrC=t[16],this.defaultLyrD=t[17]}},{key:"name",get:function(){return this.name_}},{key:"getMetadata",value:function(){return this.metadata_}},{key:"getAPIRest",value:function(){return"".concat(this.name,"=").concat(this.position,"*!").concat(this.layers.join(","),"*!").concat(this.collapsible,"*!").concat(this.collapsed,"*!").concat(this.staticDivision,"*!").concat(this.opacityVal,"*!").concat(this.comparisonMode,"*!").concat(this.defaultLyrA,"*!").concat(this.defaultLyrB,"*!").concat(this.defaultLyrC,"*!").concat(this.defaultLyrD,"*!").concat(this.interface)}},{key:"activate",value:function(){this.control_.activateCurtain()}},{key:"deactivate",value:function(){this.control_.deactivateCurtain()}},{key:"equals",value:function(e){return e instanceof a}}])&&z(t.prototype,r),o&&z(t,o),a}();window.M.plugin||(window.M.plugin={}),window.M.control||(window.M.control={}),window.M.impl||(window.M.impl={}),window.M.impl.control||(window.M.impl.control={}),window.M.plugin.LyrCompare=J,window.M.control.LyrCompareControl=I,window.M.impl.control.CurtainInteraction=y,window.M.impl.control.Lyrcomparecontrol=S}]); //# sourceMappingURL=lyrcompare.ol.min.js.map \ No newline at end of file diff --git a/dist/lyrcompare.ol.min.js.map b/dist/lyrcompare.ol.min.js.map index f200ffbc..e190c400 100644 --- a/dist/lyrcompare.ol.min.js.map +++ b/dist/lyrcompare.ol.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/lyrcompare.html","webpack:///./src/impl/ol/js/CurtainInteraction.js","webpack:///./src/impl/ol/js/lyrcomparecontrol.js","webpack:///./src/facade/js/i18n/language.js","webpack:///./src/facade/js/lyrcomparecontrol.js","webpack:///./src/facade/js/lyrcompare.js","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CurtainInteraction","options","layers_","swipeClicked","ol","interaction","Pointer","handleDownEvent","setPosition","handleUpEvent","handleMoveEvent","optionsE","pos","opacityVal","layerA","lyrA","map","layer","getImpl","getOL3Layer","filter","addLayerA","layerB","lyrB","addLayerB","undefined","lyrC","lyrD","layerC","addLayerC","layerD","addLayerD","this","getMap","length","precompose","Observable","unByKey","postcompose","renderSync","setMap","createSwipeControl","on","precomposeA_","postcomposeA_","precomposeB_","postcomposeB_","precomposeC_","postcomposeC_","precomposeD_","postcomposeD_","setOpacity","staticDivision","updatePosition","comparisonMode","setVisible","layers","Array","push","k","splice","e","pixel","pointerEvent","buttons","lienzoMapa","map_","getSize","moveSwipeControl","swipeControl","document","querySelector","classList","style","left","offsetWidth","top","offsetHeight","ctx","context","ratio","frameState","pixelRatio","save","beginPath","rect","canvas","width","clip","restore","height","swipeIcon","createElement","add","append","addEventListener","b","Lyrcomparecontrol","M","impl","Control","html","olMap","getMapImpl","transparentInteraction_","addInteraction","setComparisonMode","setStaticDivision","setVisibilityLayersCD","addLayer","removeInteraction","removeLayer","translations","en","es","getLang","res","language","getTranslation","lang","getValue","keyPath","translation","utils","isNullOrEmpty","console","warn","split","reduce","prev","current","unique","a","indexOf","LyrCompareControl","values","isUndefined","LyrcompareImplControl","exception","collapsible","collapsed","layerSelectedA","layerSelectedB","layerSelectedC","layerSelectedD","template","defaultLyrA","defaultLyrB","defaultLyrC","defaultLyrD","evt","ADDED_TO_MAP","activateCurtain","Promise","success","fail","transformToLayers","dialog","error","getValueTranslate","isLoad","allLayerLoad","setFunctionsAndCompile","idInterval","setInterval","clearInterval","jsonp","vars","legend","tooltip","tooltip_vcurtain","tooltip_hcurtain","tooltip_multicurtain","opacity","static","dynamic","mixed","opacity_tooltip","static_tooltip","dynamic_tooltip","mixed_tooltip","lyrLeftSelect_tooltip","lyrRightSelect_tooltip","Handlebars","registerHelper","v1","v2","fn","inverse","compileSync","setEventsAndValues","updateControls","querySelectorAll","forEach","button","deactivateCurtain","Number","target","checked","item","lstLayers","id","checkLayersAreDifferent","info","removeEffectsComparison","effectSelectedCurtain","lyerA","lyerB","lyerC","lyerD","compLyers","activeDefault","selectedIndex","removeEffectsCurtain","removeActivate","activateByMode","swapControl","disabled","display","remove","layerByObject","getLayers","includes","removeLayers","layerByUrl","layerByName","load","transform","newLayer","isValidLayer","urlLayer","toUpperCase","WMS","url","addLayers","WMTS","setTimeout","type","displayInLayerSwitcher","control","LyrCompare","name_","error_","isArray","controls_","position","parseInt","metadata_","api","metadata","tooltip_","Plugin","interface","control_","getPlugins","removePlugins","panel_","ui","Panel","className","collapsedButtonClass","addControls","addPanels","deactivate","removeControls","removeCurtainLayers","getLayersNames","join","plugin","window","M$plugin$LyrCompare","M$control$LyrCompareControl","M$impl$control$CurtainInteraction","M$impl$control$Lyrcomparecontrol"],"mappings":"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","file":"lyrcompare.ol.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","module.exports = \"
\\n
{{translations.tooltip}}
\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n
\\n {{#if options}}\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\";","/**\n * @module M/impl/control/CurtainInteraction\n\n */\nexport default class CurtainInteraction extends ol.interaction.Pointer {\n /**\n * @classdesc\n * Main constructor of the CurtainInteraction.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @api stable\n */\n constructor(options) {\n super(options);\n this.layers_ = [];\n\n this.swipeClicked = false;\n\n ol.interaction.Pointer.call(this, {\n handleDownEvent: this.setPosition,\n handleUpEvent: () => this.swipeClicked = false,\n handleMoveEvent: this.setPosition,\n });\n\n // Default options\n const optionsE = options || {};\n\n this.pos = false;\n this.opacityVal = (optionsE.opacityVal || 100);\n\n const layerA = [optionsE.lyrA].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerA(layerA);\n\n const layerB = [optionsE.lyrB].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerB(layerB);\n\n if (optionsE.lyrC !== undefined && optionsE.lyrD !== undefined) {\n const layerC = [optionsE.lyrC].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerC(layerC);\n\n const layerD = [optionsE.lyrD].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerD(layerD);\n }\n }\n\n /** Set the map > start postcompose\n */\n\n setMap(map) {\n if (this.getMap()) {\n for (let i = 0; i < this.layers_.length; i += 1) {\n if (this.layers_[i].precompose) ol.Observable.unByKey(this.layers_[i].precompose);\n if (this.layers_[i].postcompose) ol.Observable.unByKey(this.layers_[i].postcompose);\n this.layers_[i].precompose = this.layers_[i].postcompose = null;\n }\n this.getMap().renderSync();\n }\n ol.interaction.Pointer.prototype.setMap.call(this, map);\n if (map) {\n this.createSwipeControl();\n this.layers_[0].precompose = this.layers_[0].on('precompose', this.precomposeA_.bind(this));\n this.layers_[0].postcompose = this.layers_[0].on('postcompose', this.postcomposeA_.bind(this));\n this.layers_[1].precompose = this.layers_[1].on('precompose', this.precomposeB_.bind(this));\n this.layers_[1].postcompose = this.layers_[1].on('postcompose', this.postcomposeB_.bind(this));\n this.layers_[0].precompose = this.layers_[0].on('prerender', this.precomposeA_.bind(this));\n this.layers_[0].postcompose = this.layers_[0].on('postrender', this.postcomposeA_.bind(this));\n this.layers_[1].precompose = this.layers_[1].on('prerender', this.precomposeB_.bind(this));\n this.layers_[1].postcompose = this.layers_[1].on('postrender', this.postcomposeB_.bind(this));\n if (this.layers_[2] !== undefined && this.layers_[3] !== undefined) {\n this.layers_[2].precompose = this.layers_[2].on('precompose', this.precomposeC_.bind(this));\n this.layers_[2].postcompose = this.layers_[2].on('postcompose', this.postcomposeC_.bind(this));\n this.layers_[3].precompose = this.layers_[3].on('precompose', this.precomposeD_.bind(this));\n this.layers_[3].postcompose = this.layers_[3].on('postcompose', this.postcomposeD_.bind(this));\n this.layers_[2].precompose = this.layers_[2].on('prerender', this.precomposeC_.bind(this));\n this.layers_[2].postcompose = this.layers_[2].on('postrender', this.postcomposeC_.bind(this));\n this.layers_[3].precompose = this.layers_[3].on('prerender', this.precomposeD_.bind(this));\n this.layers_[3].postcompose = this.layers_[3].on('postrender', this.postcomposeD_.bind(this));\n }\n map.renderSync();\n }\n }\n\n /** \n * Set opacity level\n * \n * @param {integer} opacityVal\n */\n setOpacity(opacityVal) {\n this.opacityVal = opacityVal;\n if (this.getMap()) {\n for (let i = 0; i < this.layers_.length; i += 1) {\n this.layers_[i].setOpacity(this.opacityVal / 100);\n }\n }\n }\n\n /** \n * Set param staticDivision\n * \n * @param {integer} staticDivision\n */\n setStaticDivision(staticDivision) {\n this.staticDivision = staticDivision;\n this.updatePosition();\n }\n\n /** \n * Set param comparisonMode\n * \n * @param {integer} comparisonMode\n */\n setComparisonMode(comparisonMode) {\n this.comparisonMode = comparisonMode;\n this.updatePosition();\n }\n\n /**\n * Set Visibility on layers C & D\n *\n * @public\n * @function\n * @api stable\n */\n setVisibilityLayersCD() {\n if ((this.layers_[2] !== undefined && this.layers_[3] !== undefined) && (this.comparisonMode === 1 || this.comparisonMode === 2)) {\n this.layers_[2].setVisible(false);\n this.layers_[3].setVisible(false);\n } else if (this.layers_[2] !== undefined && this.layers_[3] !== undefined) {\n this.layers_[2].setVisible(true);\n this.layers_[3].setVisible(true);\n }\n }\n\n\n /** \n * Add Layer A to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerA(layers) {\n\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeA_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeA_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeA_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeA_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer B to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerB(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeB_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeB_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeB_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeB_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer C to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerC(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeC_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeC_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeC_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeC_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer D to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerD(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeD_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeD_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeD_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeD_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n\n }\n\n /**\n * Remove a layer to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n removeLayer(layers) {\n\n if (!(layers instanceof Array)) {\n layers = [layers];\n }\n for (let i = 0; i < layers.length; i += 1) {\n let k;\n for (k = 0; k < this.layers_.length; k += 1) {\n if (this.layers_[k] === layers[i]) {\n break;\n }\n }\n if (k !== this.layers_.length && this.getMap()) {\n if (this.layers_[k].precompose) ol.Observable.unByKey(this.layers_[k].precompose);\n if (this.layers_[k].postcompose) ol.Observable.unByKey(this.layers_[k].postcompose);\n this.layers_.splice(k, 1);\n this.getMap().renderSync();\n }\n }\n }\n\n /**\n * Set position of the clip\n * \n * @param {ol.Pixel|ol.MapBrowserEvent}\n */\n setPosition(e) {\n if ((this.staticDivision === 2 && this.swipeClicked) || this.staticDivision !== 2) {\n if (e.pixel) {\n this.pos = e.pixel;\n } else if (e && e instanceof Array) {\n this.pos = e;\n } else {\n e = [-10000000, -10000000];\n }\n if (this.staticDivision === 2 && e.pointerEvent.buttons !== 1) {\n const lienzoMapa = this.map_.getSize();\n this.pos = [lienzoMapa[0] / 2, lienzoMapa[1] / 2];\n this.swipeClicked = false;\n }\n if (this.getMap()) this.getMap().renderSync();\n this.moveSwipeControl();\n }\n }\n /**\n * Update position of the clip\n * \n */\n updatePosition() {\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl) {\n if (this.comparisonMode == 1) {\n swipeControl.classList = 'lyrcompare-swipe-control vertical' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n } else if (this.comparisonMode == 2) {\n swipeControl.classList = 'lyrcompare-swipe-control horizontal' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n } else if (this.comparisonMode == 3) {\n swipeControl.classList = 'lyrcompare-swipe-control vertical horizontal' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n }\n }\n if (this.getMap()) {\n const lienzoMapa = this.map_.getSize();\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n this.pos = [lienzoMapa[0] / 2, lienzoMapa[1] / 2];\n this.swipeClicked = false;\n this.getMap().renderSync();\n }\n }\n\n /* @private\n */\n precomposeA_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 1) {\n ctx.rect(0, 0, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1]); //e2m: left fixed\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, 0, lienzoMapa[0], lienzoMapa[1] * ratio / 2 - margenClip * ratio);//e2m: up fixed\n } else if (this.comparisonMode == 3) {\n ctx.rect(0, 0, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1] / 2);//e2m: up&left fixed\n }\n }\n else {\n if (this.comparisonMode == 1) {\n ctx.rect(0, 0, this.pos[0] - margenClip * ratio, lienzoMapa[1]); //e2m: left dynamic\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, 0, ctx.canvas.width, this.pos[1] * ratio - margenClip * ratio); //e2m: up dynamic\n } else if (this.comparisonMode == 3) {\n ctx.rect(0, 0, this.pos[0] - margenClip * ratio, this.pos[1] - margenClip * ratio); //e2m: up&left dynamic\n }\n }\n\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeA_(e) {\n e.context.restore();\n }\n\n /* @private\n */\n precomposeB_(e) {\n\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 1) {\n ctx.rect(lienzoMapa[0] * ratio / 2 + margenClip * ratio, 0, ctx.canvas.width - lienzoMapa[0] * ratio / 2, lienzoMapa[1]); //e2m: Right fixed\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, lienzoMapa[1] * ratio / 2 + margenClip * ratio, ctx.canvas.width, ctx.canvas.height - lienzoMapa[1] * ratio / 2); //e2m: Down fixed\n } else if (this.comparisonMode == 3) {\n ctx.rect(lienzoMapa[0] * ratio / 2, 0, ctx.canvas.width - lienzoMapa[0] * ratio / 2, lienzoMapa[1] / 2); //e2m: up&right fixed\n }\n } else {\n if (this.comparisonMode == 1) {\n ctx.rect(this.pos[0], 0, lienzoMapa[0] - this.pos[0], lienzoMapa[1]); //e2m: Right dynamic\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, this.pos[1], ctx.canvas.width, ctx.canvas.height - this.pos[1]); //e2m: Down dynamic\n } else if (this.comparisonMode == 3) {\n ctx.rect(this.pos[0], 0, lienzoMapa[0] - this.pos[0], this.pos[1]); //e2m: up&right dynamic\n }\n\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n\n\n }\n\n /* @private\n */\n postcomposeB_(e) {\n e.context.restore();\n }\n\n precomposeC_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 3) {\n ctx.rect(0, lienzoMapa[1] * ratio / 2, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1]); //e2m: down&left fixed\n }\n }\n else {\n if (this.comparisonMode == 3) {\n ctx.rect(0, this.pos[1] * ratio, this.pos[0] * ratio - margenClip * ratio, (lienzoMapa[1] - this.pos[1]) * ratio - margenClip * ratio); //e2m: down&left dynamic\n }\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeC_(e) {\n e.context.restore();\n }\n\n precomposeD_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 3) {\n ctx.rect(lienzoMapa[0] * ratio / 2, lienzoMapa[1] * ratio / 2, ctx.canvas.width * ratio / 2 - margenClip * ratio, ctx.canvas.height * ratio / 2 - margenClip * ratio); //e2m: down&right fixed\n }\n }\n else {\n if (this.comparisonMode == 3) {\n ctx.rect(this.pos[0] * ratio, this.pos[1] * ratio, (ctx.canvas.width - this.pos[0]) * ratio - margenClip * ratio, (ctx.canvas.height - this.pos[1]) * ratio - margenClip * ratio); //e2m: down&right dynamic\n }\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeD_(e) {\n e.context.restore();\n }\n /**\n * Create the swipe indicator\n * \n */\n createSwipeControl() {\n let swipeControl;\n let swipeIcon;\n if (document.querySelector('.lyrcompare-swipe-control') == null) {\n swipeControl = document.createElement('div');\n swipeControl.classList.add('lyrcompare-swipe-control');\n swipeIcon = document.createElement('div');\n swipeIcon.classList.add('control-icon');\n swipeControl.append(swipeIcon);\n document.querySelector('.ol-overlaycontainer-stopevent').append(swipeControl);\n } else {\n swipeControl = document.querySelector('.lyrcompare-swipe-control');\n swipeIcon = document.querySelector('.lyrcompare-swipe-control .control-icon');\n }\n swipeControl.addEventListener('mousedown', () => this.swipeClicked = true);\n swipeControl.addEventListener('mouseup', () => this.swipeClicked = false);\n swipeControl.addEventListener('touchstart', () => this.swipeClicked = true);\n swipeControl.addEventListener('touchend', () => this.swipeClicked = false);\n this.updatePosition();\n }\n\n /**\n * Move the swipe indicator\n * \n */\n moveSwipeControl() {\n const lienzoMapa = this.map_.getSize();\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl && this.getMap()) {\n if (this.staticDivision == 0 || this.staticDivision == 2) {\n if (this.comparisonMode == 1) {\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n swipeControl.style.left = (this.pos[0]) - (swipeControl.offsetWidth / 2) + 'px';\n } else if (this.comparisonMode == 2) {\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (this.pos[1]) - (swipeControl.offsetHeight / 2) + 'px';\n } else if (this.comparisonMode == 3) {\n swipeControl.style.left = (this.pos[0]) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (this.pos[1]) - (swipeControl.offsetHeight / 2) + 'px';\n }\n } else {\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n }\n }\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(b) {\n super.setActive(b);\n }\n}","/**\n * @module M/impl/control/Lyrcomparecontrol\n */\nimport CurtainInteraction from 'impl/CurtainInteraction';\n\n\nexport default class Lyrcomparecontrol extends M.impl.Control {\n /**\n * This function adds the control to the specified map\n *\n * @public\n * @function\n * @param {M.Map} map to add the plugin\n * @param {HTMLElement} html of the plugin\n * @api stable\n */\n addTo(map, html) {\n // super addTo - don't delete\n this.map = map;\n this.olMap = map.getMapImpl();\n\n super.addTo(map, html);\n }\n\n /**\n * Effects on the layer\n *\n * @public\n * @function\n * @param { M.Layer } layer layer to which to assign an effect\n * @param { Number } opacityVal nivel de opacidad\n * @api stable\n */\n effectSelectedCurtain(lyrA, lyrB, lyrC, lyrD, opacityVal, staticDivision, comparisonMode) {\n lyrA.setVisible(true);\n lyrB.setVisible(true);\n\n this.transparentInteraction_ = new CurtainInteraction({\n opacityVal,\n lyrA,\n lyrB,\n lyrC,\n lyrD\n });\n\n this.olMap.addInteraction(this.transparentInteraction_);\n this.setOpacity(opacityVal);\n this.setComparisonMode(comparisonMode);\n this.setStaticDivision(staticDivision);\n }\n\n /**\n * Layer visibility\n *\n * @public\n * @function\n * @param { Number } opacityVal opacidad de las capas\n * @api stable\n */\n setVisibilityLayersCD() {\n\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setVisibilityLayersCD();\n\n }\n\n /**\n * Layers opacity\n *\n * @public\n * @function\n * @param { Number } opacityVal opacidad de las capas\n * @api stable\n */\n setOpacity(opacityVal) {\n\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setOpacity(opacityVal);\n\n }\n\n /**\n * Layers comparison mode\n *\n * @public\n * @function\n * @param { Number } comparisonMode opacidad de las capas\n * @api stable\n */\n setComparisonMode(comparisonMode) {\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setComparisonMode(comparisonMode);\n this.setVisibilityLayersCD();\n\n }\n\n /**\n * Set staticDivision\n *\n * @public\n * @function\n * @param { Number } staticDivision establece el tipo de división\n * @api stable\n */\n\n setStaticDivision(staticDivision) {\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setStaticDivision(staticDivision);\n }\n\n /**\n * Set layer\n *\n * @public\n * @function\n * @param { M.layer } layer layer to assign effect\n * @api stable\n */\n addLayer(layer) {\n this.transparentInteraction_.addLayer(layer.getImpl().getOL3Layer());\n }\n\n /**\n * Remove effects\n *\n * @public\n * @function\n * @api stable\n */\n removeEffectsCurtain() {\n this.olMap.removeInteraction(this.transparentInteraction_);\n \n }\n\n\n /**\n * Remove layer\n *\n * @public\n * @function\n * @param { M.layer } layer to remove\n * @api stable\n */\n removeLayer(layer) {\n this.transparentInteraction_.removeLayer(layer.getImpl().getOL3Layer());\n\n }\n\n}\n","import en from './en';\nimport es from './es';\n\n/**\n * Default object with es and en translate.\n *\n * @const\n * @type {object}\n */\nconst translations = {\n en,\n es,\n};\n\nconst getLang = () => {\n let res = 'es';\n if (typeof M.language.getLang === 'function') {\n res = M.language.getLang();\n }\n\n return res;\n};\n\n/**\n * This function sets a new language translate.\n * @param {string} lang\n * @param {JSON} json\n * @public\n * @api\n */\nexport const addTranslation = (lang, json) => {\n translations[lang] = json;\n};\n\n/**\n * This function gets a language translate.\n *\n * @param {string} lang\n * @return {JSON}\n * @public\n * @api\n */\nexport const getTranslation = (lang) => {\n return translations[lang];\n};\n\n/**\n * This function gets a language value from key\n *\n * @public\n * @param {string}\n * @param {string}\n * @return {string}\n * @public\n * @api\n */\n\nexport const getValue = (keyPath, lang = getLang()) => {\n const translation = getTranslation(lang);\n let value = '';\n if (M.utils.isNullOrEmpty(translation)) {\n /* eslint-disable no-console */\n console.warn(`The translation '${lang}' has not been defined.`);\n } else {\n value = keyPath.split('.').reduce((prev, current) => prev[current], translation);\n }\n\n return value;\n};\n","/**\n * @module M/control/LyrCompareControl\n */\n\nimport LyrcompareImplControl from 'impl/lyrcomparecontrol';\nimport template from 'templates/lyrcompare';\nimport {\n getValue as getValueTranslate\n} from './i18n/language';\n\nArray.prototype.unique = function (a) {\n return function () {\n return this.filter(a)\n }\n}(function (a, b, c) {\n return c.indexOf(a, b + 1) < 0\n});\n\nexport default class LyrCompareControl extends M.Control {\n /**\n * @classdesc\n * Main constructor of the class. Creates a PluginControl\n * control\n *\n * @constructor\n * @extends {M.Control}\n * @api stable\n */\n constructor(values) {\n // 1. Checks if the implementation can create PluginControl\n if (M.utils.isUndefined(LyrcompareImplControl)) {\n M.exception('La implementación usada no puede crear controles LyrCompareControl');\n }\n // 2. Implementation of this control\n const impl = new LyrcompareImplControl();\n super(impl, 'LyrCompare');\n\n /**\n * All layers\n * @public\n * @public {Array}\n */\n this.layers = values.layers;\n\n /**\n * Collapsible\n * @public\n * @public {boolean}\n */\n this.collapsible = values.collapsible;\n\n /**\n * Collapsed\n * @public\n * @public {boolean}\n */\n this.collapsed = values.collapsed;\n\n /**\n * Nivel de opacidad\n * @private\n * @type {Number}\n */\n this.opacityVal = values.opacityVal;\n\n /**\n * Layer selected A\n * @public\n * @type {M.layer}\n */\n this.layerSelectedA = null;\n\n /**\n * Layer selected B\n * @public\n * @type {M.layer}\n */\n this.layerSelectedB = null;\n\n /**\n * Layer selected C\n * @public\n * @type {M.layer}\n */\n this.layerSelectedC = null;\n\n /**\n * Layer selected D\n * @public\n * @type {M.layer}\n */\n this.layerSelectedD = null;\n\n /**\n * Template\n * @public\n * @type { HTMLElement }\n */\n this.template = null;\n\n /**\n * Static Division selected\n * @private\n * @type {Number}\n */\n this.staticDivision = values.staticDivision;\n\n /**\n * Opacity Value\n * @private\n * @type {Number}\n */\n this.opacityVal = values.opacityVal;\n\n /**\n * Comparison mode\n * @private\n * @type {Number}\n */\n this.comparisonMode = values.comparisonMode;\n\n /**\n * Layer A default\n * @private\n * @type {Number}\n */\n this.defaultLyrA = values.defaultLyrA;\n\n /**\n * Layer B default\n * @private\n * @type {Number}\n */\n this.defaultLyrB = values.defaultLyrB;\n\n /**\n * Layer C default\n * @private\n * @type {Number}\n */\n this.defaultLyrC = values.defaultLyrC;\n\n /**\n * Layer D default\n * @private\n * @type {Number}\n */\n this.defaultLyrD = values.defaultLyrD;\n\n /** Show interface\n *@public\n *@type{boolean}\n */\n this.interface = values.interface;\n }\n\n /**\n * This function creates the view\n *\n * @public\n * @function\n * @param {M.Map} map to add the control\n * @api stable\n */\n createView(map) {\n if (this.interface === false || this.comparisonMode > 0) {\n this.on(M.evt.ADDED_TO_MAP, (e) => {\n this.activateCurtain();\n })\n }\n this.map = map;\n return new Promise((success, fail) => {\n this.layers = this.transformToLayers(this.layers);\n if (this.layers.length >= 2) {\n if (this.comparisonMode === 3 && this.layers.length < 4) {\n M.dialog.error(getValueTranslate('no_layers_plugin'), 'lyrcompare');\n this.comparisonMode = 0;\n }\n let isLoad = this.allLayerLoad();\n if (isLoad) {\n this.setFunctionsAndCompile(success);\n } else {\n const idInterval = setInterval(() => {\n isLoad = this.allLayerLoad();\n if (isLoad) {\n clearInterval(idInterval);\n this.setFunctionsAndCompile(success);\n }\n },\n 200);\n }\n } else {\n M.dialog.error(getValueTranslate('no_layers_plugin'), 'lyrcompare');\n }\n });\n }\n\n /**\n * This function set plugin behavior and compile template\n *\n * @public\n * @function\n * @param { function } success to promise\n * @api stable\n */\n setFunctionsAndCompile(success) {\n let layers = this.layers.map(function (layer) {\n return layer instanceof Object ? {\n name: layer.name,\n legend: layer.legend\n } : {\n name: layer,\n legend: layer\n };\n });\n\n const options = {\n jsonp: true,\n vars: {\n options: layers,\n comparisonMode: this.comparisonMode,\n translations: {\n tooltip: getValueTranslate('tooltip'),\n tooltip_vcurtain: getValueTranslate('tooltip_vcurtain'),\n tooltip_hcurtain: getValueTranslate('tooltip_hcurtain'),\n tooltip_multicurtain: getValueTranslate('tooltip_multicurtain'),\n opacity: getValueTranslate('opacity'),\n static: getValueTranslate('static'),\n dynamic: getValueTranslate('dynamic'),\n mixed: getValueTranslate('mixed'),\n layer: getValueTranslate('layer'),\n opacity_tooltip: getValueTranslate('opacity_tooltip'),\n static_tooltip: getValueTranslate('static_tooltip'),\n dynamic_tooltip: getValueTranslate('dynamic_tooltip'),\n mixed_tooltip: getValueTranslate('mixed_tooltip'),\n lyrLeftSelect_tooltip: getValueTranslate('lyrLeftSelect_tooltip'),\n lyrRightSelect_tooltip: getValueTranslate('lyrRightSelect_tooltip')\n }\n }\n }\n\n //config a helper in Handlebars for embedding conditionals in template\n Handlebars.registerHelper('ifCond', function (v1, v2, options) {\n if (v1 === v2) {\n return options.fn(this);\n }\n return options.inverse(this);\n });\n\n //template with default options\n this.template = M.template.compileSync(template, options);\n this.setEventsAndValues();\n this.updateControls();\n\n if (this.layers.length == 0) {\n M.dialog.error(getValueTranslate('no_layers_plugin'));\n } else {\n //e2m: Toogle activate/desactivate vcurtain, hcurtain, multicurtain ---> comparisonMode = 1, 2, 3\n this.template.querySelectorAll('button[id^=\"m-lyrcompare-\"]')\n .forEach((button, i) => {\n button.addEventListener('click', evt => {\n if (this.comparisonMode === 0) {\n this.comparisonMode = i + 1;\n this.activateCurtain();\n return;\n } else if (this.comparisonMode === i + 1) {\n this.comparisonMode = 0;\n this.deactivateCurtain();\n return;\n } else {\n //Cambiamos de modo de visualización sin apagar/encender la interacción\n this.comparisonMode = i + 1;\n this.updateControls();\n this.getImpl().setComparisonMode(this.comparisonMode);\n }\n })\n });\n }\n return success(this.template);\n }\n\n\n /**\n * This function set events and values to template\n *\n * @public\n * @function\n * @api stable\n */\n setEventsAndValues() {\n //opacity control\n this.template.querySelector('#input-transparent-opacity').value = this.opacityVal;\n this.template.querySelector('#input-transparent-opacity').addEventListener('input', (evt) => {\n this.opacityVal = Number(evt.target.value);\n this.getImpl().setOpacity(this.opacityVal);\n });\n\n //division selector\n if (this.staticDivision === 1) {\n this.template.querySelector('#div-m-lyrcompare-transparent-static').checked = true;\n } else if (this.staticDivision === 0) {\n this.template.querySelector('#div-m-lyrcompare-transparent-dynamic').checked = true;\n } else {\n this.template.querySelector('#div-m-lyrcompare-transparent-mixed').checked = true;\n }\n\n this.template.querySelector('#div-m-lyrcompare-transparent-dynamic').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelector('#div-m-lyrcompare-transparent-static').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelector('#div-m-lyrcompare-transparent-mixed').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n\n item.addEventListener('change', evt => {\n\n const layer = this.layers.filter(function (layer) {\n\n return layer.name === evt.target.value\n\n });\n\n let lstLayers = [];\n\n if (item.id === \"m-lyrcompare-lyrA\") {\n\n lstLayers = [layer[0].name, this.layerSelectedB.name, this.layerSelectedC.name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n\n lstLayers = [this.layerSelectedA.name, layer[0].name, this.layerSelectedC.name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n\n lstLayers = [this.layerSelectedA.name, this.layerSelectedB.name, layer[0].name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n\n lstLayers = [this.layerSelectedA.name, this.layerSelectedB.name, this.layerSelectedC.name, layer[0].name];\n\n }\n\n //e2m: de esta forma pasamos los parámetros en forma de array\n\n if (this.checkLayersAreDifferent(...lstLayers) === false) {\n M.dialog.info(getValueTranslate('advice_sameLayer'));\n if (item.id === \"m-lyrcompare-lyrA\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedA.name\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedB.name\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedC.name\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedD.name\n }\n return false;\n }\n\n if (item.id === \"m-lyrcompare-lyrA\") {\n if (layer[0].name === this.layerSelectedC.name) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = this.layerSelectedA;\n this.template.querySelector('#m-lyrcompare-lyrC').value = this.layerSelectedA.name\n }\n\n if (layer[0].name === this.layerSelectedD.name) {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = this.layerSelectedA;\n this.template.querySelector('#m-lyrcompare-lyrD').value = this.layerSelectedA.name\n }\n\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n if (layer[0].name === this.layerSelectedC.name) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = this.layerSelectedB;\n this.template.querySelector('#m-lyrcompare-lyrC').value = this.layerSelectedB.name\n }\n\n if (layer[0].name === this.layerSelectedD.name) {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = this.layerSelectedB;\n this.template.querySelector('#m-lyrcompare-lyrD').value = this.layerSelectedB.name\n }\n\n }\n if (item.id === \"m-lyrcompare-lyrA\") {\n this.layerSelectedA.setVisible(false);\n this.layerSelectedA = layer[0];\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n this.layerSelectedB.setVisible(false);\n this.layerSelectedB = layer[0];\n\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = layer[0];\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = layer[0];\n }\n this.removeEffectsComparison();\n this.getImpl().effectSelectedCurtain(this.layerSelectedA, this.layerSelectedB, this.layerSelectedC, this.layerSelectedD, this.opacityVal, this.staticDivision, this.comparisonMode);\n\n })\n })\n }\n\n /**\n * This function checks selected layers are diferent\n *\n * @public\n * @function\n * @api stable\n * @param { string } lyerA layer 1\n * @param { string } lyerB layer 2\n * @param { string } lyerC layer 3\n * @param { string } lyerD layer 4\n\n * @return {Boolean}\n */\n checkLayersAreDifferent(lyerA, lyerB, lyerC, lyerD) {\n if ((this.comparisonMode === 1) || (this.comparisonMode === 2)) {\n if (lyerA === lyerB) {\n return false\n }\n } else {\n let compLyers = [lyerA, lyerB, lyerC, lyerD];\n if (compLyers.length !== compLyers.unique().length) {\n return false\n }\n }\n return true;\n }\n\n /**\n * Activate Select/Input\n *\n * @public\n * @function\n * @api stable\n */\n activateCurtain() {\n this.activeDefault();\n this.getImpl().effectSelectedCurtain(this.layerSelectedA, this.layerSelectedB, this.layerSelectedC, this.layerSelectedD, this.opacityVal, this.staticDivision, this.comparisonMode);\n this.updateControls();\n }\n\n /**\n * Activate default values\n *\n * @public\n * @function\n * @api stable\n */\n activeDefault() {\n if (this.layerSelectedA === null) {\n this.layerSelectedA = this.layers[this.defaultLyrA];\n this.template.querySelector('#m-lyrcompare-lyrA').selectedIndex = this.defaultLyrA;\n }\n if (this.layerSelectedB === null) {\n this.layerSelectedB = this.layers[this.defaultLyrB];\n this.template.querySelector('#m-lyrcompare-lyrB').selectedIndex = this.defaultLyrB;\n }\n if (this.layerSelectedC === null) {\n this.layerSelectedC = this.layers[this.defaultLyrC];\n this.template.querySelector('#m-lyrcompare-lyrC').selectedIndex = this.defaultLyrC;\n }\n if (this.layerSelectedD === null) {\n this.layerSelectedD = this.layers[this.defaultLyrD];\n this.template.querySelector('#m-lyrcompare-lyrD').selectedIndex = this.defaultLyrD;\n }\n }\n\n /**\n * Deactivate Select/Input\n *\n * @public\n * @function\n * @api stable\n */\n deactivateCurtain() {\n this.comparisonMode = 0;\n if (this.layerSelectedA !== null && this.layerSelectedB !== null) {\n this.layerSelectedA.setVisible(false);\n this.layerSelectedB.setVisible(false);\n }\n if (this.layerSelectedC !== null && this.layerSelectedD !== null && this.layerSelectedC !== undefined && this.layerSelectedD !== undefined) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedD.setVisible(false);\n }\n this.removeEffectsComparison();\n this.updateControls();\n }\n\n\n /**\n * This function is called to remove the effects\n *\n * @public\n * @function\n * @api stable\n */\n removeEffectsComparison() {\n this.getImpl().removeEffectsCurtain();\n }\n\n /**\n * This procedure updates texts in controls\n *\n */\n updateControls() {\n\n this.removeActivate();\n this.activateByMode();\n\n const swapControl = document.querySelector('.lyrcompare-swipe-control');\n if (this.comparisonMode == 0) {\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n item.disabled = true;\n });\n this.template.querySelector('input').disabled = true; //Deshabilita el range del radio\n return;\n } else if (this.comparisonMode === 1) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-columns-2\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-columns-1\");\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrA').disabled = false;\n this.template.querySelector('#m-lyrcompare-lyrB').disabled = false;\n } else if (this.comparisonMode === 2) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-columns-4\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-columns-3\");\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrA').disabled = false;\n this.template.querySelector('#m-lyrcompare-lyrB').disabled = false;\n } else if (this.comparisonMode === 3) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n item.disabled = false;\n });\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-th-large-1\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-th-large-2\");\n this.template.querySelector('#m-lyrcompare-lyrC-lbl').classList.add(\"lyrcompare-icon-th-large-3\");\n this.template.querySelector('#m-lyrcompare-lyrD-lbl').classList.add(\"lyrcompare-icon-th-large-4\");\n\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrC-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrD-cont').style.display = 'block';\n }\n this.template.querySelector('input').disabled = false; //Habilita el range del radio\n }\n\n activateByMode() {\n if (this.comparisonMode === 1) {\n this.template.querySelector('#m-lyrcompare-vcurtain').classList.add('buttom-pressed-vcurtain'); //VCurtain pulsado\n } else if (this.comparisonMode === 2) {\n this.template.querySelector('#m-lyrcompare-hcurtain').classList.add('buttom-pressed-hcurtain'); //HCurtain pulsado\n } else if (this.comparisonMode === 3) {\n this.template.querySelector('#m-lyrcompare-multicurtain').classList.add('buttom-pressed-multicurtain'); //MultiCurtain pulsado\n }\n }\n\n\n removeActivate() {\n this.template.querySelector('#m-lyrcompare-vcurtain').classList.remove('buttom-pressed-vcurtain');\n this.template.querySelector('#m-lyrcompare-hcurtain').classList.remove('buttom-pressed-hcurtain');\n this.template.querySelector('#m-lyrcompare-multicurtain').classList.remove('buttom-pressed-multicurtain');\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').disabled = true;\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrC-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrD-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList = '';\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList = '';\n const swapControl = document.querySelector('.lyrcompare-swipe-control');\n if (swapControl) {\n swapControl.style.opacity = '0';\n }\n }\n\n /**\n * This function remove the Curtain layers\n *\n * @public\n * @function\n * @api stable\n */\n removeCurtainLayers(layers) {\n layers.forEach(layer => {\n if (!(layer instanceof Object)) {\n if (layer.indexOf('*') >= 0) {\n const urlLayer = layer.split('*');\n let name = urlLayer[3]\n const layerByUrl = this.map.getLayers().filter(l => name.includes(l.name))[this.map.getLayers().filter(l => name.includes(l.name)).length - 1];\n this.map.removeLayers(layerByUrl);\n\n } else {\n const layerByName = this.map.getLayers().filter(l => layer.includes(l.name))[this.map.getLayers().filter(l => layer.includes(l.name)).length - 1];\n this.map.removeLayers(layerByName);\n }\n } else if (layer instanceof Object) {\n const layerByObject = this.map.getLayers().filter(l => layer.name.includes(l.name))[this.map.getLayers().filter(l => layer.name.includes(l.name)).length - 1];\n this.map.removeLayers(layerByObject);\n }\n });\n }\n\n allLayerLoad() {\n if (this.layers[0].load === undefined || this.layers[1].load === undefined &&\n (this.layers[2] !== undefined && this.layers[3] !== undefined && (this.layers[2].load === undefined || this.layers[3].load === undefined))) {\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Transform StringLayers to Mapea M.Layer\n * @public\n * @function\n * @api stable\n * @param {string}\n * @return\n */\n transformToLayers(layers) {\n const transform = layers.map(function (layer) {\n let newLayer = null;\n if (!(layer instanceof Object)) {\n if (layer.indexOf('*') >= 0) {\n const urlLayer = layer.split('*');\n if (urlLayer[0].toUpperCase() == 'WMS') {\n newLayer = new M.layer.WMS({\n url: urlLayer[2],\n name: urlLayer[3]\n });\n if (this.map.getLayers().filter(l => newLayer.name.includes(l.name)).length > 0) {\n this.map.removeLayers(this.map.getLayers().filter(l => newLayer.name.includes(l.name))[0]);\n }\n this.map.addLayers(newLayer);\n } else if (urlLayer[0].toUpperCase() == 'WMTS') {\n newLayer = new M.layer.WMTS({\n url: urlLayer[1],\n name: urlLayer[2]\n });\n this.map.addLayers(newLayer);\n }\n } else {\n const layerByName = this.map.getLayers().filter(l => layer.includes(l.name))[0];\n newLayer = this.isValidLayer(layerByName) ? layerByName : null;\n }\n } else if (layer instanceof Object) {\n const layerByObject = this.map.getLayers().filter(l => layer.name.includes(l.name))[0];\n newLayer = this.isValidLayer(layerByObject) ? layerByObject : null;\n }\n\n if (newLayer !== null) {\n if (newLayer.getImpl().getOL3Layer() === null) {\n setTimeout(() => {\n if (newLayer.type === 'WMS') {\n newLayer.load = true;\n } else if (newLayer.type === 'WMTS') {\n newLayer.load = true;\n }\n }, 1000);\n } else {\n newLayer.load = true;\n }\n newLayer.displayInLayerSwitcher = false;\n newLayer.setVisible(false);\n return newLayer\n } else {\n this.layers.remove(layer);\n }\n\n }, this);\n return (transform[0] === undefined) ? [] : transform;\n }\n /**\n * This function transform string to M.Layer\n *\n * @public\n * @function\n * @api stable\n * @param {string}\n * @return {Boolean}\n */\n isValidLayer(layer) {\n return layer.type === 'WMTS' || layer.type === 'WMS';\n }\n\n /**\n * This function compares controls\n *\n * @public\n * @function\n * @param {M.Control} control to compare\n * @api stable\n * @return {Boolean}\n */\n equals(control) {\n return control instanceof LyrCompareControl;\n }\n\n getLayersNames() {\n return this.layers.map(l => l.name);\n }\n\n\n}","/**\n * @module M/plugin/LyrCompare\n */\nimport 'assets/css/lyrcompare';\nimport LyrCompareControl from './lyrcomparecontrol';\nimport api from '../../api';\nimport {\n getValue\n} from './i18n/language';\n\nexport default class LyrCompare extends M.Plugin {\n /**\n * @classdesc\n * Main facade plugin object. This class creates a plugin\n * object which has an implementation Object\n *\n * @constructor\n * @extends {M.Plugin}\n * @param {Object} options plugin configuration options\n * @api stable\n */\n constructor(options = {}) {\n super();\n\n /**\n * Name plugin\n * @private\n * @type {String}\n */\n this.name_ = 'lyrcompare';\n\n /** Error control\n *@private\n *@type{boolean}\n */\n this.error_ = false;\n\n /**\n * Layer names that will have effects\n * @public\n * Value: the names separated with commas\n * @type {Array}\n */\n this.layers = [];\n if (options.layers === undefined || options.layers.length < 2) {\n M.dialog.error(getValue('no_layers_plugin'), 'lyrcompare');\n this.error_ = true;\n } else {\n if (Array.isArray(options.layers)) {\n this.layers = options.layers;\n } else {\n this.layers = options.layers.split(\",\");\n }\n }\n\n /**\n * Array of controls\n * @private\n * @type {Array}\n */\n this.controls_ = [];\n\n\n /**\n * Facade of the map\n * @private\n * @type {M.Map}\n */\n this.map_ = null;\n\n if (this.error_ === false) {\n\n /**\n * Position of the Plugin\n * @public\n * Posible values: TR | TL | BL | BR\n * @type {String}\n */\n const positions = ['TR', 'TL', 'BL', 'BR'];\n this.position = positions.includes(options.position) ? options.position : 'TR';\n\n /**\n * Collapsed attribute\n * @public\n * @type {boolean}\n */\n this.collapsed = options.collapsed;\n if (this.collapsed === undefined) this.collapsed = true;\n\n /**\n * Collapsible attribute\n * @public\n * @type {boolean}\n */\n this.collapsible = options.collapsible;\n if (this.collapsible === undefined) this.collapsible = true;\n\n /**\n * staticDivision\n * Value: number in range 0 - 2\n * 0 - Dynamic\n * 1 - Static\n * 2 - Mixed\n * @type {number}\n * @public\n */\n this.staticDivision = options.staticDivision === undefined ? 1 : parseInt(options.staticDivision);\n\n /**\n * Opacity\n * Value: number in range 0 - 100\n * @type {number}\n * @public\n */\n if (options.opacityVal === undefined) {\n this.opacityVal = 100;\n } else {\n this.opacityVal = parseInt(options.opacityVal);\n if (this.opacityVal <= 0) {\n this.opacityVal = 0;\n } else if (this.opacityVal >= 100) {\n this.opacityVal = 100;\n }\n }\n\n /**\n * Comparison Mode\n * Value: number in range 0 - 3\n * 0 - Off\n * 1 - Vertical Comparison\n * 2 - Horizontal Comparison\n * 3 - Multiple Comparison (4 layers)\n * @type {number}\n * @public\n */\n if (options.comparisonMode === undefined) {\n this.comparisonMode = 0;\n } else {\n this.comparisonMode = parseInt(options.comparisonMode);\n if (this.comparisonMode <= 0 || this.comparisonMode > 3) {\n this.comparisonMode = 0;\n }\n }\n\n /**\n * Metadata from api.json\n * @private\n * @type {Object}\n */\n this.metadata_ = api.metadata;\n\n /**\n *@private\n *@type { string }\n */\n this.tooltip_ = options.tooltip || getValue('tooltip');\n\n /** Show interface\n *@public\n *@type{boolean}\n */\n this.interface = options.interface === undefined ? true : options.interface;\n\n /**\n * Default Layer A\n * Value: number in range 0 - Max quantity of layers\n * Default 0\n * @type {number}\n * @public\n */\n if (options.defaultLyrA === undefined) {\n this.defaultLyrA = 0;\n } else {\n this.defaultLyrA = parseInt(options.defaultLyrA);\n }\n\n /**\n * Default Layer B\n * Value: number in range 0 - Max quantity of layers\n * Default 0 or 1 if defaultLyrA is 0\n * @type {number}\n * @public\n */\n if (options.defaultLyrB === undefined) {\n this.defaultLyrB = this.defaultLyrA !== 0 ? 0 : 1;\n } else {\n this.defaultLyrB = parseInt(options.defaultLyrB);\n }\n if (this.defaultLyrA === this.defaultLyrB) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n\n /**\n * Default Layer C\n * Value: number in range 0 - Max quantity of layers\n * Default 2\n * @type {number}\n * @public\n */\n if (options.defaultLyrC === undefined) {\n this.defaultLyrC = 2;\n } else {\n this.defaultLyrC = parseInt(options.defaultLyrC);\n }\n if ((this.defaultLyrA === this.defaultLyrC) || (this.defaultLyrB === this.defaultLyrC)) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n\n /**\n * Default Layer D\n * Value: number in range 0 - Max quantity of layers\n * Default 3\n * @type {number}\n * @public\n */\n if (options.defaultLyrD === undefined) {\n this.defaultLyrD = 3;\n } else {\n this.defaultLyrD = parseInt(options.defaultLyrD);\n }\n if ((this.defaultLyrA === this.defaultLyrD) || (this.defaultLyrB === this.defaultLyrD) || (this.defaultLyrC === this.defaultLyrD)) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n }\n }\n\n /**\n * This function adds this plugin into the map\n *\n * @public\n * @function\n * @param {M.Map} map the map to add the plugin\n * @api stable\n */\n addTo(map) {\n this.map_ = map;\n const values = {\n layers: this.layers,\n collapsible: this.collapsible,\n collapsed: this.collapsed,\n staticDivision: this.staticDivision,\n opacityVal: this.opacityVal,\n comparisonMode: this.comparisonMode,\n defaultLyrA: this.defaultLyrA,\n defaultLyrB: this.defaultLyrB,\n defaultLyrC: this.defaultLyrC,\n defaultLyrD: this.defaultLyrD,\n interface: this.interface,\n };\n this.control_ = new LyrCompareControl(values);\n this.controls_.push(this.control_);\n if (this.error_) {\n const plugin = map.getPlugins('lyrcompare');\n if (plugin.length !== 0) map.removePlugins(map.getPlugins('lyrcompare'))\n } else {\n if (this.interface) {\n this.panel_ = new M.ui.Panel('panelLyrcompare', {\n collapsible: this.collapsible,\n collapsed: this.collapsed,\n position: M.ui.position[this.position],\n className: 'm-plugin-lyrcompare',\n collapsedButtonClass: 'lyrcompare-icon',\n tooltip: this.tooltip_,\n });\n } else {\n this.panel_ = new M.ui.Panel('panelLyrcompare', {\n collapsible: false,\n collapsed: true,\n position: M.ui.position[this.position],\n className: 'm-plugin-lyrcompare-hidden',\n });\n }\n this.panel_.addControls(this.controls_);\n map.addPanels(this.panel_);\n }\n }\n\n\n /**\n * This function destroys this plugin\n *\n * @public\n * @function\n * @api stable\n */\n destroy() {\n this.deactivate();\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl) {\n swipeControl.remove();\n }\n this.map_.removeControls([this.control_]);\n this.control_.removeCurtainLayers(this.control_.getLayersNames());\n [this.name_, this.error_, this.layers, this.controls_, this.map_, this.position, this.collapsed, this.collapsible,\n this.staticDivision, this.opacityVal, this.comparisonMode, this.metadata_, this.tooltip_, this.interface, this.defaultLyrA,\n this.defaultLyrB, this.defaultLyrC, this.defaultLyrD\n ] = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null];\n }\n\n /**\n * This function gets name plugin\n * @getter\n * @public\n * @returns {string}\n * @api stable\n */\n get name() {\n return this.name_;\n }\n\n /**\n * This function gets metadata plugin\n *\n * @public\n * @getter\n * @api stable\n * @return {Object}\n */\n getMetadata() {\n return this.metadata_;\n }\n\n /**\n * Get the API REST Parameters of the plugin\n *\n * @function\n * @public\n * @api\n */\n getAPIRest() {\n return `${this.name}=${this.position}*!${this.layers.join(',')}*!${this.collapsible}*!${this.collapsed}*!${this.staticDivision}*!${this.opacityVal}*!${this.comparisonMode}*!${this.defaultLyrA}*!${this.defaultLyrB}*!${this.defaultLyrC}*!${this.defaultLyrD}*!${this.interface}`;\n }\n\n /**\n * Activate plugin\n *\n * @function\n * @public\n * @api\n */\n activate() {\n this.control_.activateCurtain();\n }\n\n /**\n * Desactivate plugin\n *\n * @function\n * @public\n * @api\n */\n deactivate() {\n this.control_.deactivateCurtain();\n }\n\n /**\n * This\n function compare\n *\n * @public\n * @function\n * @param {M.plugin} plugin to compare\n * @api stable\n */\n equals(plugin) {\n if (plugin instanceof LyrCompare) {\n return true;\n }\n return false;\n }\n}","import M$plugin$LyrCompare from '/home/desarrollo/projects/guadaltel/MAPEA/CHIE/mapea-publico/src/plugins/v5/lyrcompare/src/facade/js/lyrcompare';\nimport M$control$LyrCompareControl from '/home/desarrollo/projects/guadaltel/MAPEA/CHIE/mapea-publico/src/plugins/v5/lyrcompare/src/facade/js/lyrcomparecontrol';\nimport M$impl$control$CurtainInteraction from '/home/desarrollo/projects/guadaltel/MAPEA/CHIE/mapea-publico/src/plugins/v5/lyrcompare/src/impl/ol/js/CurtainInteraction';\nimport M$impl$control$Lyrcomparecontrol from '/home/desarrollo/projects/guadaltel/MAPEA/CHIE/mapea-publico/src/plugins/v5/lyrcompare/src/impl/ol/js/lyrcomparecontrol';\n\nif (!window.M.plugin) window.M.plugin = {};\nif (!window.M.control) window.M.control = {};\nif (!window.M.impl) window.M.impl = {};\nif (!window.M.impl.control) window.M.impl.control = {};\nwindow.M.plugin.LyrCompare = M$plugin$LyrCompare;\nwindow.M.control.LyrCompareControl = M$control$LyrCompareControl;\nwindow.M.impl.control.CurtainInteraction = M$impl$control$CurtainInteraction;\nwindow.M.impl.control.Lyrcomparecontrol = M$impl$control$Lyrcomparecontrol;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/lyrcompare.html","webpack:///./src/impl/ol/js/CurtainInteraction.js","webpack:///./src/impl/ol/js/lyrcomparecontrol.js","webpack:///./src/facade/js/i18n/language.js","webpack:///./src/facade/js/lyrcomparecontrol.js","webpack:///./src/facade/js/lyrcompare.js","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CurtainInteraction","ol","interaction","Pointer","options","layers_","swipeClicked","handleDownEvent","setPosition","handleUpEvent","handleMoveEvent","optionsE","pos","opacityVal","layerA","lyrA","map","layer","getImpl","getOL3Layer","filter","addLayerA","layerB","lyrB","addLayerB","undefined","lyrC","lyrD","layerC","addLayerC","layerD","addLayerD","this","getMap","length","precompose","Observable","unByKey","postcompose","renderSync","setMap","createSwipeControl","on","precomposeA_","postcomposeA_","precomposeB_","postcomposeB_","precomposeC_","postcomposeC_","precomposeD_","postcomposeD_","setOpacity","staticDivision","updatePosition","comparisonMode","setVisible","layers","Array","push","k","splice","e","pixel","pointerEvent","buttons","lienzoMapa","map_","getSize","moveSwipeControl","swipeControl","document","querySelector","classList","style","left","offsetWidth","top","offsetHeight","ctx","context","ratio","frameState","pixelRatio","save","beginPath","rect","canvas","width","clip","restore","height","swipeIcon","createElement","add","append","addEventListener","b","Lyrcomparecontrol","M","impl","Control","html","olMap","getMapImpl","transparentInteraction_","addInteraction","setComparisonMode","setStaticDivision","setVisibilityLayersCD","addLayer","removeInteraction","removeLayer","translations","en","es","getLang","res","language","getTranslation","lang","getValue","keyPath","translation","utils","isNullOrEmpty","console","warn","split","reduce","prev","current","unique","a","indexOf","LyrCompareControl","values","isUndefined","LyrcompareImplControl","exception","collapsible","collapsed","layerSelectedA","layerSelectedB","layerSelectedC","layerSelectedD","template","defaultLyrA","defaultLyrB","defaultLyrC","defaultLyrD","evt","ADDED_TO_MAP","activateCurtain","Promise","success","fail","transformToLayers","dialog","error","getValueTranslate","isLoad","allLayerLoad","setFunctionsAndCompile","idInterval","setInterval","clearInterval","jsonp","vars","legend","tooltip","tooltip_vcurtain","tooltip_hcurtain","tooltip_multicurtain","opacity","static","dynamic","mixed","opacity_tooltip","static_tooltip","dynamic_tooltip","mixed_tooltip","lyrLeftSelect_tooltip","lyrRightSelect_tooltip","Handlebars","registerHelper","v1","v2","fn","inverse","compileSync","setEventsAndValues","updateControls","querySelectorAll","forEach","button","deactivateCurtain","Number","target","checked","item","lstLayers","id","checkLayersAreDifferent","info","removeEffectsComparison","effectSelectedCurtain","lyerA","lyerB","lyerC","lyerD","compLyers","activeDefault","selectedIndex","removeEffectsCurtain","removeActivate","activateByMode","swapControl","disabled","display","remove","layerByObject","getLayers","includes","removeLayers","layerByUrl","layerByName","load","transform","newLayer","isValidLayer","urlLayer","toUpperCase","WMS","url","addLayers","WMTS","setTimeout","type","displayInLayerSwitcher","control","LyrCompare","Plugin","name_","error_","isArray","controls_","positions","position","parseInt","metadata_","api","metadata","tooltip_","interface","control_","getPlugins","removePlugins","panel_","ui","Panel","className","collapsedButtonClass","addControls","addPanels","deactivate","removeControls","removeCurtainLayers","getLayersNames","join","plugin","window","M$plugin$LyrCompare","M$control$LyrCompareControl","M$impl$control$CurtainInteraction","M$impl$control$Lyrcomparecontrol"],"mappings":"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","file":"lyrcompare.ol.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","module.exports = \"
\\n
{{translations.tooltip}}
\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n
\\n {{#if options}}\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\";","/**\n * @module M/impl/control/CurtainInteraction\n\n */\nexport default class CurtainInteraction extends ol.interaction.Pointer {\n /**\n * @classdesc\n * Main constructor of the CurtainInteraction.\n *\n * @constructor\n * @extends {ol.interaction.Pointer}\n * @api stable\n */\n constructor(options) {\n super(options);\n this.layers_ = [];\n\n this.swipeClicked = false;\n\n ol.interaction.Pointer.call(this, {\n handleDownEvent: this.setPosition,\n handleUpEvent: () => this.swipeClicked = false,\n handleMoveEvent: this.setPosition,\n });\n\n // Default options\n const optionsE = options || {};\n\n this.pos = false;\n this.opacityVal = (optionsE.opacityVal || 100);\n\n const layerA = [optionsE.lyrA].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerA(layerA);\n\n const layerB = [optionsE.lyrB].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerB(layerB);\n\n if (optionsE.lyrC !== undefined && optionsE.lyrD !== undefined) {\n const layerC = [optionsE.lyrC].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerC(layerC);\n\n const layerD = [optionsE.lyrD].map(layer => layer.getImpl().getOL3Layer()).filter(layer => layer != null);\n this.addLayerD(layerD);\n }\n }\n\n /** Set the map > start postcompose\n */\n\n setMap(map) {\n if (this.getMap()) {\n for (let i = 0; i < this.layers_.length; i += 1) {\n if (this.layers_[i].precompose) ol.Observable.unByKey(this.layers_[i].precompose);\n if (this.layers_[i].postcompose) ol.Observable.unByKey(this.layers_[i].postcompose);\n this.layers_[i].precompose = this.layers_[i].postcompose = null;\n }\n this.getMap().renderSync();\n }\n ol.interaction.Pointer.prototype.setMap.call(this, map);\n if (map) {\n this.createSwipeControl();\n this.layers_[0].precompose = this.layers_[0].on('precompose', this.precomposeA_.bind(this));\n this.layers_[0].postcompose = this.layers_[0].on('postcompose', this.postcomposeA_.bind(this));\n this.layers_[1].precompose = this.layers_[1].on('precompose', this.precomposeB_.bind(this));\n this.layers_[1].postcompose = this.layers_[1].on('postcompose', this.postcomposeB_.bind(this));\n this.layers_[0].precompose = this.layers_[0].on('prerender', this.precomposeA_.bind(this));\n this.layers_[0].postcompose = this.layers_[0].on('postrender', this.postcomposeA_.bind(this));\n this.layers_[1].precompose = this.layers_[1].on('prerender', this.precomposeB_.bind(this));\n this.layers_[1].postcompose = this.layers_[1].on('postrender', this.postcomposeB_.bind(this));\n if (this.layers_[2] !== undefined && this.layers_[3] !== undefined) {\n this.layers_[2].precompose = this.layers_[2].on('precompose', this.precomposeC_.bind(this));\n this.layers_[2].postcompose = this.layers_[2].on('postcompose', this.postcomposeC_.bind(this));\n this.layers_[3].precompose = this.layers_[3].on('precompose', this.precomposeD_.bind(this));\n this.layers_[3].postcompose = this.layers_[3].on('postcompose', this.postcomposeD_.bind(this));\n this.layers_[2].precompose = this.layers_[2].on('prerender', this.precomposeC_.bind(this));\n this.layers_[2].postcompose = this.layers_[2].on('postrender', this.postcomposeC_.bind(this));\n this.layers_[3].precompose = this.layers_[3].on('prerender', this.precomposeD_.bind(this));\n this.layers_[3].postcompose = this.layers_[3].on('postrender', this.postcomposeD_.bind(this));\n }\n map.renderSync();\n }\n }\n\n /** \n * Set opacity level\n * \n * @param {integer} opacityVal\n */\n setOpacity(opacityVal) {\n this.opacityVal = opacityVal;\n if (this.getMap()) {\n for (let i = 0; i < this.layers_.length; i += 1) {\n this.layers_[i].setOpacity(this.opacityVal / 100);\n }\n }\n }\n\n /** \n * Set param staticDivision\n * \n * @param {integer} staticDivision\n */\n setStaticDivision(staticDivision) {\n this.staticDivision = staticDivision;\n this.updatePosition();\n }\n\n /** \n * Set param comparisonMode\n * \n * @param {integer} comparisonMode\n */\n setComparisonMode(comparisonMode) {\n this.comparisonMode = comparisonMode;\n this.updatePosition();\n }\n\n /**\n * Set Visibility on layers C & D\n *\n * @public\n * @function\n * @api stable\n */\n setVisibilityLayersCD() {\n if ((this.layers_[2] !== undefined && this.layers_[3] !== undefined) && (this.comparisonMode === 1 || this.comparisonMode === 2)) {\n this.layers_[2].setVisible(false);\n this.layers_[3].setVisible(false);\n } else if (this.layers_[2] !== undefined && this.layers_[3] !== undefined) {\n this.layers_[2].setVisible(true);\n this.layers_[3].setVisible(true);\n }\n }\n\n\n /** \n * Add Layer A to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerA(layers) {\n\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeA_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeA_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeA_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeA_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer B to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerB(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeB_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeB_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeB_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeB_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer C to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerC(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeC_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeC_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeC_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeC_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n }\n\n /** \n * Add Layer D to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n addLayerD(layers) {\n if (!(layers instanceof Array)) layers = [layers];\n const l = {\n layer: layers[0]\n };\n if (this.getMap()) {\n l.precompose = layers[0].on('precompose', this.precomposeD_.bind(this));\n l.postcompose = layers[0].on('postcompose', this.postcomposeD_.bind(this));\n l.precompose = layers[0].on('prerender', this.precomposeD_.bind(this));\n l.postcompose = layers[0].on('postrender', this.postcomposeD_.bind(this));\n this.getMap().renderSync();\n }\n this.layers_.push(layers[0]);\n\n }\n\n /**\n * Remove a layer to clip\n * \n * @param {ol.layer|Array} layer to clip\n */\n removeLayer(layers) {\n\n if (!(layers instanceof Array)) {\n layers = [layers];\n }\n for (let i = 0; i < layers.length; i += 1) {\n let k;\n for (k = 0; k < this.layers_.length; k += 1) {\n if (this.layers_[k] === layers[i]) {\n break;\n }\n }\n if (k !== this.layers_.length && this.getMap()) {\n if (this.layers_[k].precompose) ol.Observable.unByKey(this.layers_[k].precompose);\n if (this.layers_[k].postcompose) ol.Observable.unByKey(this.layers_[k].postcompose);\n this.layers_.splice(k, 1);\n this.getMap().renderSync();\n }\n }\n }\n\n /**\n * Set position of the clip\n * \n * @param {ol.Pixel|ol.MapBrowserEvent}\n */\n setPosition(e) {\n if ((this.staticDivision === 2 && this.swipeClicked) || this.staticDivision !== 2) {\n if (e.pixel) {\n this.pos = e.pixel;\n } else if (e && e instanceof Array) {\n this.pos = e;\n } else {\n e = [-10000000, -10000000];\n }\n if (this.staticDivision === 2 && e.pointerEvent.buttons !== 1) {\n const lienzoMapa = this.map_.getSize();\n this.pos = [lienzoMapa[0] / 2, lienzoMapa[1] / 2];\n this.swipeClicked = false;\n }\n if (this.getMap()) this.getMap().renderSync();\n this.moveSwipeControl();\n }\n }\n /**\n * Update position of the clip\n * \n */\n updatePosition() {\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl) {\n if (this.comparisonMode == 1) {\n swipeControl.classList = 'lyrcompare-swipe-control vertical' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n } else if (this.comparisonMode == 2) {\n swipeControl.classList = 'lyrcompare-swipe-control horizontal' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n } else if (this.comparisonMode == 3) {\n swipeControl.classList = 'lyrcompare-swipe-control vertical horizontal' + (this.staticDivision == 1 ? ' static' : ' dynamic');\n }\n }\n if (this.getMap()) {\n const lienzoMapa = this.map_.getSize();\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n this.pos = [lienzoMapa[0] / 2, lienzoMapa[1] / 2];\n this.swipeClicked = false;\n this.getMap().renderSync();\n }\n }\n\n /* @private\n */\n precomposeA_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 1) {\n ctx.rect(0, 0, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1]); //e2m: left fixed\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, 0, lienzoMapa[0], lienzoMapa[1] * ratio / 2 - margenClip * ratio);//e2m: up fixed\n } else if (this.comparisonMode == 3) {\n ctx.rect(0, 0, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1] / 2);//e2m: up&left fixed\n }\n }\n else {\n if (this.comparisonMode == 1) {\n ctx.rect(0, 0, this.pos[0] - margenClip * ratio, lienzoMapa[1]); //e2m: left dynamic\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, 0, ctx.canvas.width, this.pos[1] * ratio - margenClip * ratio); //e2m: up dynamic\n } else if (this.comparisonMode == 3) {\n ctx.rect(0, 0, this.pos[0] - margenClip * ratio, this.pos[1] - margenClip * ratio); //e2m: up&left dynamic\n }\n }\n\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeA_(e) {\n e.context.restore();\n }\n\n /* @private\n */\n precomposeB_(e) {\n\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 1) {\n ctx.rect(lienzoMapa[0] * ratio / 2 + margenClip * ratio, 0, ctx.canvas.width - lienzoMapa[0] * ratio / 2, lienzoMapa[1]); //e2m: Right fixed\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, lienzoMapa[1] * ratio / 2 + margenClip * ratio, ctx.canvas.width, ctx.canvas.height - lienzoMapa[1] * ratio / 2); //e2m: Down fixed\n } else if (this.comparisonMode == 3) {\n ctx.rect(lienzoMapa[0] * ratio / 2, 0, ctx.canvas.width - lienzoMapa[0] * ratio / 2, lienzoMapa[1] / 2); //e2m: up&right fixed\n }\n } else {\n if (this.comparisonMode == 1) {\n ctx.rect(this.pos[0], 0, lienzoMapa[0] - this.pos[0], lienzoMapa[1]); //e2m: Right dynamic\n } else if (this.comparisonMode == 2) {\n ctx.rect(0, this.pos[1], ctx.canvas.width, ctx.canvas.height - this.pos[1]); //e2m: Down dynamic\n } else if (this.comparisonMode == 3) {\n ctx.rect(this.pos[0], 0, lienzoMapa[0] - this.pos[0], this.pos[1]); //e2m: up&right dynamic\n }\n\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n\n\n }\n\n /* @private\n */\n postcomposeB_(e) {\n e.context.restore();\n }\n\n precomposeC_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 3) {\n ctx.rect(0, lienzoMapa[1] * ratio / 2, lienzoMapa[0] / 2 * ratio - margenClip * ratio, lienzoMapa[1]); //e2m: down&left fixed\n }\n }\n else {\n if (this.comparisonMode == 3) {\n ctx.rect(0, this.pos[1] * ratio, this.pos[0] * ratio - margenClip * ratio, (lienzoMapa[1] - this.pos[1]) * ratio - margenClip * ratio); //e2m: down&left dynamic\n }\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeC_(e) {\n e.context.restore();\n }\n\n precomposeD_(e) {\n const ctx = e.context;\n const ratio = e.frameState.pixelRatio;\n const lienzoMapa = this.map_.getSize();\n let margenClip = 0; //Stroke size in pixels.\n //e2m: Canvas size --> lienzoMapa\n //e2m: Mouse coordinates --> this.pos\n\n ctx.save();\n ctx.beginPath();\n if (this.staticDivision == 1) {\n if (this.comparisonMode == 3) {\n ctx.rect(lienzoMapa[0] * ratio / 2, lienzoMapa[1] * ratio / 2, ctx.canvas.width * ratio / 2 - margenClip * ratio, ctx.canvas.height * ratio / 2 - margenClip * ratio); //e2m: down&right fixed\n }\n }\n else {\n if (this.comparisonMode == 3) {\n ctx.rect(this.pos[0] * ratio, this.pos[1] * ratio, (ctx.canvas.width - this.pos[0]) * ratio - margenClip * ratio, (ctx.canvas.height - this.pos[1]) * ratio - margenClip * ratio); //e2m: down&right dynamic\n }\n }\n if (margenClip > 0) {\n ctx.lineWidth = 2 * margenClip * ratio;\n ctx.strokeStyle = 'rgba(0, 102, 204, 0.9)';\n ctx.stroke();\n }\n ctx.clip();\n }\n\n /* @private\n */\n postcomposeD_(e) {\n e.context.restore();\n }\n /**\n * Create the swipe indicator\n * \n */\n createSwipeControl() {\n let swipeControl;\n let swipeIcon;\n if (document.querySelector('.lyrcompare-swipe-control') == null) {\n swipeControl = document.createElement('div');\n swipeControl.classList.add('lyrcompare-swipe-control');\n swipeIcon = document.createElement('div');\n swipeIcon.classList.add('control-icon');\n swipeControl.append(swipeIcon);\n document.querySelector('.ol-overlaycontainer-stopevent').append(swipeControl);\n } else {\n swipeControl = document.querySelector('.lyrcompare-swipe-control');\n swipeIcon = document.querySelector('.lyrcompare-swipe-control .control-icon');\n }\n swipeControl.addEventListener('mousedown', () => this.swipeClicked = true);\n swipeControl.addEventListener('mouseup', () => this.swipeClicked = false);\n swipeControl.addEventListener('touchstart', () => this.swipeClicked = true);\n swipeControl.addEventListener('touchend', () => this.swipeClicked = false);\n this.updatePosition();\n }\n\n /**\n * Move the swipe indicator\n * \n */\n moveSwipeControl() {\n const lienzoMapa = this.map_.getSize();\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl && this.getMap()) {\n if (this.staticDivision == 0 || this.staticDivision == 2) {\n if (this.comparisonMode == 1) {\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n swipeControl.style.left = (this.pos[0]) - (swipeControl.offsetWidth / 2) + 'px';\n } else if (this.comparisonMode == 2) {\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (this.pos[1]) - (swipeControl.offsetHeight / 2) + 'px';\n } else if (this.comparisonMode == 3) {\n swipeControl.style.left = (this.pos[0]) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (this.pos[1]) - (swipeControl.offsetHeight / 2) + 'px';\n }\n } else {\n swipeControl.style.left = (lienzoMapa[0] / 2) - (swipeControl.offsetWidth / 2) + 'px';\n swipeControl.style.top = (lienzoMapa[1] / 2) - (swipeControl.offsetHeight / 2) + 'px';\n }\n }\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(b) {\n super.setActive(b);\n }\n}","/**\n * @module M/impl/control/Lyrcomparecontrol\n */\nimport CurtainInteraction from 'impl/CurtainInteraction';\n\n\nexport default class Lyrcomparecontrol extends M.impl.Control {\n /**\n * This function adds the control to the specified map\n *\n * @public\n * @function\n * @param {M.Map} map to add the plugin\n * @param {HTMLElement} html of the plugin\n * @api stable\n */\n addTo(map, html) {\n // super addTo - don't delete\n this.map = map;\n this.olMap = map.getMapImpl();\n\n super.addTo(map, html);\n }\n\n /**\n * Effects on the layer\n *\n * @public\n * @function\n * @param { M.Layer } layer layer to which to assign an effect\n * @param { Number } opacityVal nivel de opacidad\n * @api stable\n */\n effectSelectedCurtain(lyrA, lyrB, lyrC, lyrD, opacityVal, staticDivision, comparisonMode) {\n lyrA.setVisible(true);\n lyrB.setVisible(true);\n\n this.transparentInteraction_ = new CurtainInteraction({\n opacityVal,\n lyrA,\n lyrB,\n lyrC,\n lyrD\n });\n\n this.olMap.addInteraction(this.transparentInteraction_);\n this.setOpacity(opacityVal);\n this.setComparisonMode(comparisonMode);\n this.setStaticDivision(staticDivision);\n }\n\n /**\n * Layer visibility\n *\n * @public\n * @function\n * @param { Number } opacityVal opacidad de las capas\n * @api stable\n */\n setVisibilityLayersCD() {\n\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setVisibilityLayersCD();\n\n }\n\n /**\n * Layers opacity\n *\n * @public\n * @function\n * @param { Number } opacityVal opacidad de las capas\n * @api stable\n */\n setOpacity(opacityVal) {\n\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setOpacity(opacityVal);\n\n }\n\n /**\n * Layers comparison mode\n *\n * @public\n * @function\n * @param { Number } comparisonMode opacidad de las capas\n * @api stable\n */\n setComparisonMode(comparisonMode) {\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setComparisonMode(comparisonMode);\n this.setVisibilityLayersCD();\n\n }\n\n /**\n * Set staticDivision\n *\n * @public\n * @function\n * @param { Number } staticDivision establece el tipo de división\n * @api stable\n */\n\n setStaticDivision(staticDivision) {\n if (this.transparentInteraction_ !== undefined) this.transparentInteraction_.setStaticDivision(staticDivision);\n }\n\n /**\n * Set layer\n *\n * @public\n * @function\n * @param { M.layer } layer layer to assign effect\n * @api stable\n */\n addLayer(layer) {\n this.transparentInteraction_.addLayer(layer.getImpl().getOL3Layer());\n }\n\n /**\n * Remove effects\n *\n * @public\n * @function\n * @api stable\n */\n removeEffectsCurtain() {\n this.olMap.removeInteraction(this.transparentInteraction_);\n \n }\n\n\n /**\n * Remove layer\n *\n * @public\n * @function\n * @param { M.layer } layer to remove\n * @api stable\n */\n removeLayer(layer) {\n this.transparentInteraction_.removeLayer(layer.getImpl().getOL3Layer());\n\n }\n\n}\n","import en from './en';\nimport es from './es';\n\n/**\n * Default object with es and en translate.\n *\n * @const\n * @type {object}\n */\nconst translations = {\n en,\n es,\n};\n\nconst getLang = () => {\n let res = 'es';\n if (typeof M.language.getLang === 'function') {\n res = M.language.getLang();\n }\n\n return res;\n};\n\n/**\n * This function sets a new language translate.\n * @param {string} lang\n * @param {JSON} json\n * @public\n * @api\n */\nexport const addTranslation = (lang, json) => {\n translations[lang] = json;\n};\n\n/**\n * This function gets a language translate.\n *\n * @param {string} lang\n * @return {JSON}\n * @public\n * @api\n */\nexport const getTranslation = (lang) => {\n return translations[lang];\n};\n\n/**\n * This function gets a language value from key\n *\n * @public\n * @param {string}\n * @param {string}\n * @return {string}\n * @public\n * @api\n */\n\nexport const getValue = (keyPath, lang = getLang()) => {\n const translation = getTranslation(lang);\n let value = '';\n if (M.utils.isNullOrEmpty(translation)) {\n /* eslint-disable no-console */\n console.warn(`The translation '${lang}' has not been defined.`);\n } else {\n value = keyPath.split('.').reduce((prev, current) => prev[current], translation);\n }\n\n return value;\n};\n","/**\n * @module M/control/LyrCompareControl\n */\n\nimport LyrcompareImplControl from 'impl/lyrcomparecontrol';\nimport template from 'templates/lyrcompare';\nimport {\n getValue as getValueTranslate\n} from './i18n/language';\n\nArray.prototype.unique = function (a) {\n return function () {\n return this.filter(a)\n }\n}(function (a, b, c) {\n return c.indexOf(a, b + 1) < 0\n});\n\nexport default class LyrCompareControl extends M.Control {\n /**\n * @classdesc\n * Main constructor of the class. Creates a PluginControl\n * control\n *\n * @constructor\n * @extends {M.Control}\n * @api stable\n */\n constructor(values) {\n // 1. Checks if the implementation can create PluginControl\n if (M.utils.isUndefined(LyrcompareImplControl)) {\n M.exception('La implementación usada no puede crear controles LyrCompareControl');\n }\n // 2. Implementation of this control\n const impl = new LyrcompareImplControl();\n super(impl, 'LyrCompare');\n\n /**\n * All layers\n * @public\n * @public {Array}\n */\n this.layers = values.layers;\n\n /**\n * Collapsible\n * @public\n * @public {boolean}\n */\n this.collapsible = values.collapsible;\n\n /**\n * Collapsed\n * @public\n * @public {boolean}\n */\n this.collapsed = values.collapsed;\n\n /**\n * Nivel de opacidad\n * @private\n * @type {Number}\n */\n this.opacityVal = values.opacityVal;\n\n /**\n * Layer selected A\n * @public\n * @type {M.layer}\n */\n this.layerSelectedA = null;\n\n /**\n * Layer selected B\n * @public\n * @type {M.layer}\n */\n this.layerSelectedB = null;\n\n /**\n * Layer selected C\n * @public\n * @type {M.layer}\n */\n this.layerSelectedC = null;\n\n /**\n * Layer selected D\n * @public\n * @type {M.layer}\n */\n this.layerSelectedD = null;\n\n /**\n * Template\n * @public\n * @type { HTMLElement }\n */\n this.template = null;\n\n /**\n * Static Division selected\n * @private\n * @type {Number}\n */\n this.staticDivision = values.staticDivision;\n\n /**\n * Opacity Value\n * @private\n * @type {Number}\n */\n this.opacityVal = values.opacityVal;\n\n /**\n * Comparison mode\n * @private\n * @type {Number}\n */\n this.comparisonMode = values.comparisonMode;\n\n /**\n * Layer A default\n * @private\n * @type {Number}\n */\n this.defaultLyrA = values.defaultLyrA;\n\n /**\n * Layer B default\n * @private\n * @type {Number}\n */\n this.defaultLyrB = values.defaultLyrB;\n\n /**\n * Layer C default\n * @private\n * @type {Number}\n */\n this.defaultLyrC = values.defaultLyrC;\n\n /**\n * Layer D default\n * @private\n * @type {Number}\n */\n this.defaultLyrD = values.defaultLyrD;\n\n /** Show interface\n *@public\n *@type{boolean}\n */\n this.interface = values.interface;\n }\n\n /**\n * This function creates the view\n *\n * @public\n * @function\n * @param {M.Map} map to add the control\n * @api stable\n */\n createView(map) {\n if (this.interface === false || this.comparisonMode > 0) {\n this.on(M.evt.ADDED_TO_MAP, (e) => {\n this.activateCurtain();\n })\n }\n this.map = map;\n return new Promise((success, fail) => {\n this.layers = this.transformToLayers(this.layers);\n if (this.layers.length >= 2) {\n if (this.comparisonMode === 3 && this.layers.length < 4) {\n M.dialog.error(getValueTranslate('no_layers_plugin'), 'lyrcompare');\n this.comparisonMode = 0;\n }\n let isLoad = this.allLayerLoad();\n if (isLoad) {\n this.setFunctionsAndCompile(success);\n } else {\n const idInterval = setInterval(() => {\n isLoad = this.allLayerLoad();\n if (isLoad) {\n clearInterval(idInterval);\n this.setFunctionsAndCompile(success);\n }\n },\n 200);\n }\n } else {\n M.dialog.error(getValueTranslate('no_layers_plugin'), 'lyrcompare');\n }\n });\n }\n\n /**\n * This function set plugin behavior and compile template\n *\n * @public\n * @function\n * @param { function } success to promise\n * @api stable\n */\n setFunctionsAndCompile(success) {\n let layers = this.layers.map(function (layer) {\n return layer instanceof Object ? {\n name: layer.name,\n legend: layer.legend\n } : {\n name: layer,\n legend: layer\n };\n });\n\n const options = {\n jsonp: true,\n vars: {\n options: layers,\n comparisonMode: this.comparisonMode,\n translations: {\n tooltip: getValueTranslate('tooltip'),\n tooltip_vcurtain: getValueTranslate('tooltip_vcurtain'),\n tooltip_hcurtain: getValueTranslate('tooltip_hcurtain'),\n tooltip_multicurtain: getValueTranslate('tooltip_multicurtain'),\n opacity: getValueTranslate('opacity'),\n static: getValueTranslate('static'),\n dynamic: getValueTranslate('dynamic'),\n mixed: getValueTranslate('mixed'),\n layer: getValueTranslate('layer'),\n opacity_tooltip: getValueTranslate('opacity_tooltip'),\n static_tooltip: getValueTranslate('static_tooltip'),\n dynamic_tooltip: getValueTranslate('dynamic_tooltip'),\n mixed_tooltip: getValueTranslate('mixed_tooltip'),\n lyrLeftSelect_tooltip: getValueTranslate('lyrLeftSelect_tooltip'),\n lyrRightSelect_tooltip: getValueTranslate('lyrRightSelect_tooltip')\n }\n }\n }\n\n //config a helper in Handlebars for embedding conditionals in template\n Handlebars.registerHelper('ifCond', function (v1, v2, options) {\n if (v1 === v2) {\n return options.fn(this);\n }\n return options.inverse(this);\n });\n\n //template with default options\n this.template = M.template.compileSync(template, options);\n this.setEventsAndValues();\n this.updateControls();\n\n if (this.layers.length == 0) {\n M.dialog.error(getValueTranslate('no_layers_plugin'));\n } else {\n //e2m: Toogle activate/desactivate vcurtain, hcurtain, multicurtain ---> comparisonMode = 1, 2, 3\n this.template.querySelectorAll('button[id^=\"m-lyrcompare-\"]')\n .forEach((button, i) => {\n button.addEventListener('click', evt => {\n if (this.comparisonMode === 0) {\n this.comparisonMode = i + 1;\n this.activateCurtain();\n return;\n } else if (this.comparisonMode === i + 1) {\n this.comparisonMode = 0;\n this.deactivateCurtain();\n return;\n } else {\n //Cambiamos de modo de visualización sin apagar/encender la interacción\n this.comparisonMode = i + 1;\n this.updateControls();\n this.getImpl().setComparisonMode(this.comparisonMode);\n }\n })\n });\n }\n return success(this.template);\n }\n\n\n /**\n * This function set events and values to template\n *\n * @public\n * @function\n * @api stable\n */\n setEventsAndValues() {\n //opacity control\n this.template.querySelector('#input-transparent-opacity').value = this.opacityVal;\n this.template.querySelector('#input-transparent-opacity').addEventListener('input', (evt) => {\n this.opacityVal = Number(evt.target.value);\n this.getImpl().setOpacity(this.opacityVal);\n });\n\n //division selector\n if (this.staticDivision === 1) {\n this.template.querySelector('#div-m-lyrcompare-transparent-static').checked = true;\n } else if (this.staticDivision === 0) {\n this.template.querySelector('#div-m-lyrcompare-transparent-dynamic').checked = true;\n } else {\n this.template.querySelector('#div-m-lyrcompare-transparent-mixed').checked = true;\n }\n\n this.template.querySelector('#div-m-lyrcompare-transparent-dynamic').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelector('#div-m-lyrcompare-transparent-static').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelector('#div-m-lyrcompare-transparent-mixed').addEventListener('change', (evt) => {\n this.staticDivision = Number(evt.target.value);\n this.getImpl().setStaticDivision(this.staticDivision);\n });\n\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n\n item.addEventListener('change', evt => {\n\n const layer = this.layers.filter(function (layer) {\n\n return layer.name === evt.target.value\n\n });\n\n let lstLayers = [];\n\n if (item.id === \"m-lyrcompare-lyrA\") {\n\n lstLayers = [layer[0].name, this.layerSelectedB.name, this.layerSelectedC.name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n\n lstLayers = [this.layerSelectedA.name, layer[0].name, this.layerSelectedC.name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n\n lstLayers = [this.layerSelectedA.name, this.layerSelectedB.name, layer[0].name, this.layerSelectedD.name];\n\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n\n lstLayers = [this.layerSelectedA.name, this.layerSelectedB.name, this.layerSelectedC.name, layer[0].name];\n\n }\n\n //e2m: de esta forma pasamos los parámetros en forma de array\n\n if (this.checkLayersAreDifferent(...lstLayers) === false) {\n M.dialog.info(getValueTranslate('advice_sameLayer'));\n if (item.id === \"m-lyrcompare-lyrA\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedA.name\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedB.name\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedC.name\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n this.template.querySelector('#' + item.id).value = this.layerSelectedD.name\n }\n return false;\n }\n\n if (item.id === \"m-lyrcompare-lyrA\") {\n if (layer[0].name === this.layerSelectedC.name) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = this.layerSelectedA;\n this.template.querySelector('#m-lyrcompare-lyrC').value = this.layerSelectedA.name\n }\n\n if (layer[0].name === this.layerSelectedD.name) {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = this.layerSelectedA;\n this.template.querySelector('#m-lyrcompare-lyrD').value = this.layerSelectedA.name\n }\n\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n if (layer[0].name === this.layerSelectedC.name) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = this.layerSelectedB;\n this.template.querySelector('#m-lyrcompare-lyrC').value = this.layerSelectedB.name\n }\n\n if (layer[0].name === this.layerSelectedD.name) {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = this.layerSelectedB;\n this.template.querySelector('#m-lyrcompare-lyrD').value = this.layerSelectedB.name\n }\n\n }\n if (item.id === \"m-lyrcompare-lyrA\") {\n this.layerSelectedA.setVisible(false);\n this.layerSelectedA = layer[0];\n } else if (item.id === \"m-lyrcompare-lyrB\") {\n this.layerSelectedB.setVisible(false);\n this.layerSelectedB = layer[0];\n\n } else if (item.id === \"m-lyrcompare-lyrC\") {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedC = layer[0];\n } else if (item.id === \"m-lyrcompare-lyrD\") {\n this.layerSelectedD.setVisible(false);\n this.layerSelectedD = layer[0];\n }\n this.removeEffectsComparison();\n this.getImpl().effectSelectedCurtain(this.layerSelectedA, this.layerSelectedB, this.layerSelectedC, this.layerSelectedD, this.opacityVal, this.staticDivision, this.comparisonMode);\n\n })\n })\n }\n\n /**\n * This function checks selected layers are diferent\n *\n * @public\n * @function\n * @api stable\n * @param { string } lyerA layer 1\n * @param { string } lyerB layer 2\n * @param { string } lyerC layer 3\n * @param { string } lyerD layer 4\n\n * @return {Boolean}\n */\n checkLayersAreDifferent(lyerA, lyerB, lyerC, lyerD) {\n if ((this.comparisonMode === 1) || (this.comparisonMode === 2)) {\n if (lyerA === lyerB) {\n return false\n }\n } else {\n let compLyers = [lyerA, lyerB, lyerC, lyerD];\n if (compLyers.length !== compLyers.unique().length) {\n return false\n }\n }\n return true;\n }\n\n /**\n * Activate Select/Input\n *\n * @public\n * @function\n * @api stable\n */\n activateCurtain() {\n this.activeDefault();\n this.getImpl().effectSelectedCurtain(this.layerSelectedA, this.layerSelectedB, this.layerSelectedC, this.layerSelectedD, this.opacityVal, this.staticDivision, this.comparisonMode);\n this.updateControls();\n }\n\n /**\n * Activate default values\n *\n * @public\n * @function\n * @api stable\n */\n activeDefault() {\n if (this.layerSelectedA === null) {\n this.layerSelectedA = this.layers[this.defaultLyrA];\n this.template.querySelector('#m-lyrcompare-lyrA').selectedIndex = this.defaultLyrA;\n }\n if (this.layerSelectedB === null) {\n this.layerSelectedB = this.layers[this.defaultLyrB];\n this.template.querySelector('#m-lyrcompare-lyrB').selectedIndex = this.defaultLyrB;\n }\n if (this.layerSelectedC === null) {\n this.layerSelectedC = this.layers[this.defaultLyrC];\n this.template.querySelector('#m-lyrcompare-lyrC').selectedIndex = this.defaultLyrC;\n }\n if (this.layerSelectedD === null) {\n this.layerSelectedD = this.layers[this.defaultLyrD];\n this.template.querySelector('#m-lyrcompare-lyrD').selectedIndex = this.defaultLyrD;\n }\n }\n\n /**\n * Deactivate Select/Input\n *\n * @public\n * @function\n * @api stable\n */\n deactivateCurtain() {\n this.comparisonMode = 0;\n if (this.layerSelectedA !== null && this.layerSelectedB !== null) {\n this.layerSelectedA.setVisible(false);\n this.layerSelectedB.setVisible(false);\n }\n if (this.layerSelectedC !== null && this.layerSelectedD !== null && this.layerSelectedC !== undefined && this.layerSelectedD !== undefined) {\n this.layerSelectedC.setVisible(false);\n this.layerSelectedD.setVisible(false);\n }\n this.removeEffectsComparison();\n this.updateControls();\n }\n\n\n /**\n * This function is called to remove the effects\n *\n * @public\n * @function\n * @api stable\n */\n removeEffectsComparison() {\n this.getImpl().removeEffectsCurtain();\n }\n\n /**\n * This procedure updates texts in controls\n *\n */\n updateControls() {\n\n this.removeActivate();\n this.activateByMode();\n\n const swapControl = document.querySelector('.lyrcompare-swipe-control');\n if (this.comparisonMode == 0) {\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n item.disabled = true;\n });\n this.template.querySelector('input').disabled = true; //Deshabilita el range del radio\n return;\n } else if (this.comparisonMode === 1) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-columns-2\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-columns-1\");\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrA').disabled = false;\n this.template.querySelector('#m-lyrcompare-lyrB').disabled = false;\n } else if (this.comparisonMode === 2) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-columns-4\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-columns-3\");\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrA').disabled = false;\n this.template.querySelector('#m-lyrcompare-lyrB').disabled = false;\n } else if (this.comparisonMode === 3) {\n if (swapControl) swapControl.style.opacity = '1';\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').forEach(item => {\n item.disabled = false;\n });\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList.add(\"lyrcompare-icon-th-large-1\");\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList.add(\"lyrcompare-icon-th-large-2\");\n this.template.querySelector('#m-lyrcompare-lyrC-lbl').classList.add(\"lyrcompare-icon-th-large-3\");\n this.template.querySelector('#m-lyrcompare-lyrD-lbl').classList.add(\"lyrcompare-icon-th-large-4\");\n\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrC-cont').style.display = 'block';\n this.template.querySelector('#m-lyrcompare-lyrD-cont').style.display = 'block';\n }\n this.template.querySelector('input').disabled = false; //Habilita el range del radio\n }\n\n activateByMode() {\n if (this.comparisonMode === 1) {\n this.template.querySelector('#m-lyrcompare-vcurtain').classList.add('buttom-pressed-vcurtain'); //VCurtain pulsado\n } else if (this.comparisonMode === 2) {\n this.template.querySelector('#m-lyrcompare-hcurtain').classList.add('buttom-pressed-hcurtain'); //HCurtain pulsado\n } else if (this.comparisonMode === 3) {\n this.template.querySelector('#m-lyrcompare-multicurtain').classList.add('buttom-pressed-multicurtain'); //MultiCurtain pulsado\n }\n }\n\n\n removeActivate() {\n this.template.querySelector('#m-lyrcompare-vcurtain').classList.remove('buttom-pressed-vcurtain');\n this.template.querySelector('#m-lyrcompare-hcurtain').classList.remove('buttom-pressed-hcurtain');\n this.template.querySelector('#m-lyrcompare-multicurtain').classList.remove('buttom-pressed-multicurtain');\n this.template.querySelectorAll('select[id^=\"m-lyrcompare-\"]').disabled = true;\n this.template.querySelector('#m-lyrcompare-lyrA-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrB-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrC-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrD-cont').style.display = 'none';\n this.template.querySelector('#m-lyrcompare-lyrA-lbl').classList = '';\n this.template.querySelector('#m-lyrcompare-lyrB-lbl').classList = '';\n const swapControl = document.querySelector('.lyrcompare-swipe-control');\n if (swapControl) {\n swapControl.style.opacity = '0';\n }\n }\n\n /**\n * This function remove the Curtain layers\n *\n * @public\n * @function\n * @api stable\n */\n removeCurtainLayers(layers) {\n layers.forEach(layer => {\n if (!(layer instanceof Object)) {\n if (layer.indexOf('*') >= 0) {\n const urlLayer = layer.split('*');\n let name = urlLayer[3]\n const layerByUrl = this.map.getLayers().filter(l => name.includes(l.name))[this.map.getLayers().filter(l => name.includes(l.name)).length - 1];\n this.map.removeLayers(layerByUrl);\n\n } else {\n const layerByName = this.map.getLayers().filter(l => layer.includes(l.name))[this.map.getLayers().filter(l => layer.includes(l.name)).length - 1];\n this.map.removeLayers(layerByName);\n }\n } else if (layer instanceof Object) {\n const layerByObject = this.map.getLayers().filter(l => layer.name.includes(l.name))[this.map.getLayers().filter(l => layer.name.includes(l.name)).length - 1];\n this.map.removeLayers(layerByObject);\n }\n });\n }\n\n allLayerLoad() {\n if (this.layers[0].load === undefined || this.layers[1].load === undefined &&\n (this.layers[2] !== undefined && this.layers[3] !== undefined && (this.layers[2].load === undefined || this.layers[3].load === undefined))) {\n return false;\n } else {\n return true;\n }\n }\n\n /**\n * Transform StringLayers to Mapea M.Layer\n * @public\n * @function\n * @api stable\n * @param {string}\n * @return\n */\n transformToLayers(layers) {\n const transform = layers.map(function (layer) {\n let newLayer = null;\n if (!(layer instanceof Object)) {\n if (layer.indexOf('*') >= 0) {\n const urlLayer = layer.split('*');\n if (urlLayer[0].toUpperCase() == 'WMS') {\n newLayer = new M.layer.WMS({\n url: urlLayer[2],\n name: urlLayer[3]\n });\n if (this.map.getLayers().filter(l => newLayer.name.includes(l.name)).length > 0) {\n this.map.removeLayers(this.map.getLayers().filter(l => newLayer.name.includes(l.name))[0]);\n }\n this.map.addLayers(newLayer);\n } else if (urlLayer[0].toUpperCase() == 'WMTS') {\n newLayer = new M.layer.WMTS({\n url: urlLayer[1],\n name: urlLayer[2]\n });\n this.map.addLayers(newLayer);\n }\n } else {\n const layerByName = this.map.getLayers().filter(l => layer.includes(l.name))[0];\n newLayer = this.isValidLayer(layerByName) ? layerByName : null;\n }\n } else if (layer instanceof Object) {\n const layerByObject = this.map.getLayers().filter(l => layer.name.includes(l.name))[0];\n newLayer = this.isValidLayer(layerByObject) ? layerByObject : null;\n }\n\n if (newLayer !== null) {\n if (newLayer.getImpl().getOL3Layer() === null) {\n setTimeout(() => {\n if (newLayer.type === 'WMS') {\n newLayer.load = true;\n } else if (newLayer.type === 'WMTS') {\n newLayer.load = true;\n }\n }, 1000);\n } else {\n newLayer.load = true;\n }\n newLayer.displayInLayerSwitcher = false;\n newLayer.setVisible(false);\n return newLayer\n } else {\n this.layers.remove(layer);\n }\n\n }, this);\n return (transform[0] === undefined) ? [] : transform;\n }\n /**\n * This function transform string to M.Layer\n *\n * @public\n * @function\n * @api stable\n * @param {string}\n * @return {Boolean}\n */\n isValidLayer(layer) {\n return layer.type === 'WMTS' || layer.type === 'WMS';\n }\n\n /**\n * This function compares controls\n *\n * @public\n * @function\n * @param {M.Control} control to compare\n * @api stable\n * @return {Boolean}\n */\n equals(control) {\n return control instanceof LyrCompareControl;\n }\n\n getLayersNames() {\n return this.layers.map(l => l.name);\n }\n\n\n}","/**\n * @module M/plugin/LyrCompare\n */\nimport 'assets/css/lyrcompare';\nimport LyrCompareControl from './lyrcomparecontrol';\nimport api from '../../api';\nimport {\n getValue\n} from './i18n/language';\n\nexport default class LyrCompare extends M.Plugin {\n /**\n * @classdesc\n * Main facade plugin object. This class creates a plugin\n * object which has an implementation Object\n *\n * @constructor\n * @extends {M.Plugin}\n * @param {Object} options plugin configuration options\n * @api stable\n */\n constructor(options = {}) {\n super();\n\n /**\n * Name plugin\n * @private\n * @type {String}\n */\n this.name_ = 'lyrcompare';\n\n /** Error control\n *@private\n *@type{boolean}\n */\n this.error_ = false;\n\n /**\n * Layer names that will have effects\n * @public\n * Value: the names separated with commas\n * @type {Array}\n */\n this.layers = [];\n if (options.layers === undefined || options.layers.length < 2) {\n M.dialog.error(getValue('no_layers_plugin'), 'lyrcompare');\n this.error_ = true;\n } else {\n if (Array.isArray(options.layers)) {\n this.layers = options.layers;\n } else {\n this.layers = options.layers.split(\",\");\n }\n }\n\n /**\n * Array of controls\n * @private\n * @type {Array}\n */\n this.controls_ = [];\n\n\n /**\n * Facade of the map\n * @private\n * @type {M.Map}\n */\n this.map_ = null;\n\n if (this.error_ === false) {\n\n /**\n * Position of the Plugin\n * @public\n * Posible values: TR | TL | BL | BR\n * @type {String}\n */\n const positions = ['TR', 'TL', 'BL', 'BR'];\n this.position = positions.includes(options.position) ? options.position : 'TR';\n\n /**\n * Collapsed attribute\n * @public\n * @type {boolean}\n */\n this.collapsed = options.collapsed;\n if (this.collapsed === undefined) this.collapsed = true;\n\n /**\n * Collapsible attribute\n * @public\n * @type {boolean}\n */\n this.collapsible = options.collapsible;\n if (this.collapsible === undefined) this.collapsible = true;\n\n /**\n * staticDivision\n * Value: number in range 0 - 2\n * 0 - Dynamic\n * 1 - Static\n * 2 - Mixed\n * @type {number}\n * @public\n */\n this.staticDivision = options.staticDivision === undefined ? 1 : parseInt(options.staticDivision);\n\n /**\n * Opacity\n * Value: number in range 0 - 100\n * @type {number}\n * @public\n */\n if (options.opacityVal === undefined) {\n this.opacityVal = 100;\n } else {\n this.opacityVal = parseInt(options.opacityVal);\n if (this.opacityVal <= 0) {\n this.opacityVal = 0;\n } else if (this.opacityVal >= 100) {\n this.opacityVal = 100;\n }\n }\n\n /**\n * Comparison Mode\n * Value: number in range 0 - 3\n * 0 - Off\n * 1 - Vertical Comparison\n * 2 - Horizontal Comparison\n * 3 - Multiple Comparison (4 layers)\n * @type {number}\n * @public\n */\n if (options.comparisonMode === undefined) {\n this.comparisonMode = 0;\n } else {\n this.comparisonMode = parseInt(options.comparisonMode);\n if (this.comparisonMode <= 0 || this.comparisonMode > 3) {\n this.comparisonMode = 0;\n }\n }\n\n /**\n * Metadata from api.json\n * @private\n * @type {Object}\n */\n this.metadata_ = api.metadata;\n\n /**\n *@private\n *@type { string }\n */\n this.tooltip_ = options.tooltip || getValue('tooltip');\n\n /** Show interface\n *@public\n *@type{boolean}\n */\n this.interface = options.interface === undefined ? true : options.interface;\n\n /**\n * Default Layer A\n * Value: number in range 0 - Max quantity of layers\n * Default 0\n * @type {number}\n * @public\n */\n if (options.defaultLyrA === undefined) {\n this.defaultLyrA = 0;\n } else {\n this.defaultLyrA = parseInt(options.defaultLyrA);\n }\n\n /**\n * Default Layer B\n * Value: number in range 0 - Max quantity of layers\n * Default 0 or 1 if defaultLyrA is 0\n * @type {number}\n * @public\n */\n if (options.defaultLyrB === undefined) {\n this.defaultLyrB = this.defaultLyrA !== 0 ? 0 : 1;\n } else {\n this.defaultLyrB = parseInt(options.defaultLyrB);\n }\n if (this.defaultLyrA === this.defaultLyrB) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n\n /**\n * Default Layer C\n * Value: number in range 0 - Max quantity of layers\n * Default 2\n * @type {number}\n * @public\n */\n if (options.defaultLyrC === undefined) {\n this.defaultLyrC = 2;\n } else {\n this.defaultLyrC = parseInt(options.defaultLyrC);\n }\n if ((this.defaultLyrA === this.defaultLyrC) || (this.defaultLyrB === this.defaultLyrC)) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n\n /**\n * Default Layer D\n * Value: number in range 0 - Max quantity of layers\n * Default 3\n * @type {number}\n * @public\n */\n if (options.defaultLyrD === undefined) {\n this.defaultLyrD = 3;\n } else {\n this.defaultLyrD = parseInt(options.defaultLyrD);\n }\n if ((this.defaultLyrA === this.defaultLyrD) || (this.defaultLyrB === this.defaultLyrD) || (this.defaultLyrC === this.defaultLyrD)) {\n M.dialog.error(getValue('repeated_layers'), 'lyrcompare');\n this.error_ = true;\n }\n }\n }\n\n /**\n * This function adds this plugin into the map\n *\n * @public\n * @function\n * @param {M.Map} map the map to add the plugin\n * @api stable\n */\n addTo(map) {\n this.map_ = map;\n const values = {\n layers: this.layers,\n collapsible: this.collapsible,\n collapsed: this.collapsed,\n staticDivision: this.staticDivision,\n opacityVal: this.opacityVal,\n comparisonMode: this.comparisonMode,\n defaultLyrA: this.defaultLyrA,\n defaultLyrB: this.defaultLyrB,\n defaultLyrC: this.defaultLyrC,\n defaultLyrD: this.defaultLyrD,\n interface: this.interface,\n };\n this.control_ = new LyrCompareControl(values);\n this.controls_.push(this.control_);\n if (this.error_) {\n const plugin = map.getPlugins('lyrcompare');\n if (plugin.length !== 0) map.removePlugins(map.getPlugins('lyrcompare'))\n } else {\n if (this.interface) {\n this.panel_ = new M.ui.Panel('panelLyrcompare', {\n collapsible: this.collapsible,\n collapsed: this.collapsed,\n position: M.ui.position[this.position],\n className: 'm-plugin-lyrcompare',\n collapsedButtonClass: 'lyrcompare-icon',\n tooltip: this.tooltip_,\n });\n } else {\n this.panel_ = new M.ui.Panel('panelLyrcompare', {\n collapsible: false,\n collapsed: true,\n position: M.ui.position[this.position],\n className: 'm-plugin-lyrcompare-hidden',\n });\n }\n this.panel_.addControls(this.controls_);\n map.addPanels(this.panel_);\n }\n }\n\n\n /**\n * This function destroys this plugin\n *\n * @public\n * @function\n * @api stable\n */\n destroy() {\n this.deactivate();\n const swipeControl = document.querySelector('.lyrcompare-swipe-control');\n if (swipeControl) {\n swipeControl.remove();\n }\n this.map_.removeControls([this.control_]);\n this.control_.removeCurtainLayers(this.control_.getLayersNames());\n [this.name_, this.error_, this.layers, this.controls_, this.map_, this.position, this.collapsed, this.collapsible,\n this.staticDivision, this.opacityVal, this.comparisonMode, this.metadata_, this.tooltip_, this.interface, this.defaultLyrA,\n this.defaultLyrB, this.defaultLyrC, this.defaultLyrD\n ] = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null];\n }\n\n /**\n * This function gets name plugin\n * @getter\n * @public\n * @returns {string}\n * @api stable\n */\n get name() {\n return this.name_;\n }\n\n /**\n * This function gets metadata plugin\n *\n * @public\n * @getter\n * @api stable\n * @return {Object}\n */\n getMetadata() {\n return this.metadata_;\n }\n\n /**\n * Get the API REST Parameters of the plugin\n *\n * @function\n * @public\n * @api\n */\n getAPIRest() {\n return `${this.name}=${this.position}*!${this.layers.join(',')}*!${this.collapsible}*!${this.collapsed}*!${this.staticDivision}*!${this.opacityVal}*!${this.comparisonMode}*!${this.defaultLyrA}*!${this.defaultLyrB}*!${this.defaultLyrC}*!${this.defaultLyrD}*!${this.interface}`;\n }\n\n /**\n * Activate plugin\n *\n * @function\n * @public\n * @api\n */\n activate() {\n this.control_.activateCurtain();\n }\n\n /**\n * Desactivate plugin\n *\n * @function\n * @public\n * @api\n */\n deactivate() {\n this.control_.deactivateCurtain();\n }\n\n /**\n * This\n function compare\n *\n * @public\n * @function\n * @param {M.plugin} plugin to compare\n * @api stable\n */\n equals(plugin) {\n if (plugin instanceof LyrCompare) {\n return true;\n }\n return false;\n }\n}","import M$plugin$LyrCompare from '/home/fbmanas/Documentos/git-sigc/lyrcompare/src/facade/js/lyrcompare';\nimport M$control$LyrCompareControl from '/home/fbmanas/Documentos/git-sigc/lyrcompare/src/facade/js/lyrcomparecontrol';\nimport M$impl$control$CurtainInteraction from '/home/fbmanas/Documentos/git-sigc/lyrcompare/src/impl/ol/js/CurtainInteraction';\nimport M$impl$control$Lyrcomparecontrol from '/home/fbmanas/Documentos/git-sigc/lyrcompare/src/impl/ol/js/lyrcomparecontrol';\n\nif (!window.M.plugin) window.M.plugin = {};\nif (!window.M.control) window.M.control = {};\nif (!window.M.impl) window.M.impl = {};\nif (!window.M.impl.control) window.M.impl.control = {};\nwindow.M.plugin.LyrCompare = M$plugin$LyrCompare;\nwindow.M.control.LyrCompareControl = M$control$LyrCompareControl;\nwindow.M.impl.control.CurtainInteraction = M$impl$control$CurtainInteraction;\nwindow.M.impl.control.Lyrcomparecontrol = M$impl$control$Lyrcomparecontrol;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index b08db1fc..dd095d23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lyrcompare", - "version": "1.0.0", + "version": "1.0.1", "description": "", "keywords": [ "map", diff --git a/src/api.json b/src/api.json index 2825a84a..d9579289 100644 --- a/src/api.json +++ b/src/api.json @@ -68,11 +68,12 @@ "name": "LyrCompare", "description": "Comparación entre capas", "text": "Plugin que permite comparar varias capas sobre una cartografía base. La extensión de las capas sobre lienzo vienen definidas por la posición del ratón o por el punto medio del lienzo.", - "version": "1.0.0", - "date": "Junio, 2020", + "version": "1.0.1", + "date": "Abril, 2021", "author": "", "org": "Consejería de Hacienda, Industria y Energía. Junta de Andalucía.", "tags": "mapea,plugin", - "icon": "./facade/assets/icons/icons.svg" + "icon": "./facade/assets/icons/icons.svg", + "compatibility":["6"] } } diff --git a/test/dev.html b/test/dev.html index 4aa01c7c..7c9dbf58 100644 --- a/test/dev.html +++ b/test/dev.html @@ -7,7 +7,7 @@ Layer Comparison Test - +