From 45db608095a93cb004557d692a06b59c5de837b5 Mon Sep 17 00:00:00 2001 From: simon04 Date: Wed, 12 Jun 2024 22:04:46 +0000 Subject: [PATCH] deploy: 6eeb1fc583c0812eb2319f57aa33ec5828b1c4e1 --- .../{index-kZ8gr3dc.js => index-CFkCWU6x.js} | 6 +- ...-kZ8gr3dc.js.map => index-CFkCWU6x.js.map} | 2 +- assets/{map-B3eCDXS1.js => map-DHdWe_L0.js} | 4 +- ...ap-B3eCDXS1.js.map => map-DHdWe_L0.js.map} | 2 +- assets/urlParameters-BlcU9mC4.js | 310 ++++++++++++++++++ assets/urlParameters-BlcU9mC4.js.map | 1 + assets/urlParameters-Bqtaxh87.js | 310 ------------------ assets/urlParameters-Bqtaxh87.js.map | 1 - index.html | 4 +- map.html | 4 +- 10 files changed, 322 insertions(+), 322 deletions(-) rename assets/{index-kZ8gr3dc.js => index-CFkCWU6x.js} (99%) rename assets/{index-kZ8gr3dc.js.map => index-CFkCWU6x.js.map} (99%) rename assets/{map-B3eCDXS1.js => map-DHdWe_L0.js} (97%) rename assets/{map-B3eCDXS1.js.map => map-DHdWe_L0.js.map} (99%) create mode 100644 assets/urlParameters-BlcU9mC4.js create mode 100644 assets/urlParameters-BlcU9mC4.js.map delete mode 100644 assets/urlParameters-Bqtaxh87.js delete mode 100644 assets/urlParameters-Bqtaxh87.js.map diff --git a/assets/index-kZ8gr3dc.js b/assets/index-CFkCWU6x.js similarity index 99% rename from assets/index-kZ8gr3dc.js rename to assets/index-CFkCWU6x.js index 59ff168f..11b48445 100644 --- a/assets/index-kZ8gr3dc.js +++ b/assets/index-CFkCWU6x.js @@ -1,4 +1,4 @@ -import{$,c as commonjsGlobal,g as getDefaultExportFromCjs,a as getAugmentedNamespace,B as Base64,b as configs,p as parser,s as settings,i as i18n,u as urlParameters,o as overpass,h as htmlentities,l as lzw_decode,d as lzw_encode,_ as _$1,f as ffs_construct_query,e as ffs_repair_search}from"./urlParameters-Bqtaxh87.js";/*! jQuery UI - v1.13.2 - 2022-07-14 +import{$,c as commonjsGlobal,g as getDefaultExportFromCjs,a as getAugmentedNamespace,B as Base64,b as configs,p as parser,s as settings,i as i18n,u as urlParameters,o as overpass,h as htmlentities,l as lzw_decode,d as lzw_encode,_ as _$1,f as ffs_construct_query,e as ffs_repair_search}from"./urlParameters-BlcU9mC4.js";/*! jQuery UI - v1.13.2 - 2022-07-14 * http://jqueryui.com * Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js * Copyright jQuery Foundation and other contributors; Licensed MIT */(function(g){typeof define=="function"&&define.amd?define(["jquery"],g):g($)})(function(g){g.ui=g.ui||{},g.ui.version="1.13.2";/*! @@ -751,7 +751,7 @@ ${H}${D}`)}for(let D=0;D{var R=(Y,G)=>{Y?P(new Error(Y)):H(G)};_generatePkceChallenge(Y=>x(Y,R))}))};function x(H,P){var R=generateState(),Y=g.url+"/oauth2/authorize?"+utilQsString({client_id:g.client_id,redirect_uri:g.redirect_uri,response_type:"code",scope:g.scope,state:R,code_challenge:H.code_challenge,code_challenge_method:H.code_challenge_method});if(g.singlepage){if(!store.enabled){var G=new Error("local storage unavailable, but require in singlepage mode");G.status="pkce-localstorage-unavailable",P(G);return}var X=utilStringQs(window.location.search.slice(1));X.code?B.bootstrapToken(X.code,P):(S("oauth2_state",R),S("oauth2_pkce_code_verifier",H.code_verifier),window.location=Y)}else{var ee=600,Ae=550,le=[["width",ee],["height",Ae],["left",window.screen.width/2-ee/2],["top",window.screen.height/2-Ae/2]].map(function(fe){return fe.join("=")}).join(","),ae=window.open("about:blank","oauth_window",le);B.popupWindow=ae,ae.location=Y,ae||(G=new Error("Popup was blocked"),G.status="popup-blocked",P(G))}window.authComplete=function(fe){var ye=utilStringQs(fe.split("?")[1]);if(ye.state!==R){G=new Error("Invalid state"),G.status="invalid-state",P(G);return}Q(ye.code,H.code_verifier,ge),delete window.authComplete};function ge(fe,ye){if(g.done(),fe){P(fe);return}var me=JSON.parse(ye.response);S("oauth2_access_token",me.access_token),P(null,B)}}function Q(H,P,R){var Y=g.url+"/oauth2/token?"+utilQsString({client_id:g.client_id,redirect_uri:g.redirect_uri,grant_type:"authorization_code",code:H,code_verifier:P});B.rawxhr("POST",Y,null,null,null,R),g.loading()}B.bringPopupWindowToFront=function(){var H=!1;try{B.popupWindow&&!B.popupWindow.closed&&(B.popupWindow.focus(),H=!0)}catch{}return H},B.bootstrapToken=function(H,P){var R=S("oauth2_state");S("oauth2_state","");var Y=utilStringQs(window.location.search.slice(1));if(Y.state!==R){var G=new Error("Invalid state");G.status="invalid-state",P(G);return}var X=S("oauth2_pkce_code_verifier");S("oauth2_pkce_code_verifier",""),Q(H,X,ee);function ee(Ae,le){if(g.done(),Ae){P(Ae);return}var ae=JSON.parse(le.response);S("oauth2_access_token",ae.access_token),P(null,B)}},B.fetch=function(H,P){if(B.authenticated())return R();return g.auto?B.authenticateAsync().then(R):Promise.reject(new Error("not authenticated"));function R(){return P=P||{},P.headers||(P.headers={"Content-Type":"application/x-www-form-urlencoded"}),P.headers.Authorization="Bearer "+S("oauth2_access_token"),fetch(H,P)}},B.xhr=function(H,P){if(B.authenticated())return R();if(g.auto){B.authenticate(R);return}else{P("not authenticated",null);return}function R(){var G=H.prefix!==!1?g.url+H.path:H.path;return B.rawxhr(H.method,G,S("oauth2_access_token"),H.content,H.headers,Y)}function Y(G,X){G?P(G):X.responseXML?P(G,X.responseXML):P(G,X.response)}},B.rawxhr=function(H,P,R,Y,G,X){G=G||{"Content-Type":"application/x-www-form-urlencoded"},R&&(G.Authorization="Bearer "+R);var ee=new XMLHttpRequest;ee.onreadystatechange=function(){ee.readyState===4&&ee.status!==0&&(/^20\d$/.test(ee.status)?X(null,ee):X(ee,null))},ee.onerror=function(le){X(le,null)},ee.open(H,P,!0);for(var Ae in G)ee.setRequestHeader(Ae,G[Ae]);return ee.send(Y),ee},B.preauth=function(H){return H&&H.access_token&&S("oauth2_access_token",H.access_token),B},B.options=function(H){return arguments.length?(g=H,g.url=g.url||"https://www.openstreetmap.org",g.auto=g.auto||!1,g.singlepage=g.singlepage||!1,g.loading=g.loading||function(){},g.done=g.done||function(){},B.preauth(g)):g};var S;if(store.enabled)S=function(H,P){if(arguments.length===1)return store.get(g.url+H);if(arguments.length===2)return store.set(g.url+H,P)};else{var D={};S=function(H,P){if(arguments.length===1)return D[g.url+H];if(arguments.length===2)return D[g.url+H]=P}}return B.options(g),B}function utilQsString(g){return Object.keys(g).filter(function(B){return g[B]!==void 0}).sort().map(function(B){return encodeURIComponent(B)+"="+encodeURIComponent(g[B])}).join("&")}function utilStringQs(g){for(var B=0;B{if(B)return g(B);loadQueries(g)})},save(g,B){auth.authenticated()?saveQuery(g,B):auth.authenticate(x=>{if(x)return B(x);saveQuery(g,B)})},delete(g,B){if(!auth.authenticated())return B(new Error("must be logged in to delete a synced query"));g={name:g,deleteMe:!0},saveQuery(g,B)},logout(){auth.authenticated()&&auth.logout()},authenticated(){return enabled&&auth.authenticated()}};function loadQueries(g){auth.xhr({method:"GET",path:"/api/0.6/user/preferences"},(B,x)=>{if(B)return g(B);let Q=0,S;(S=x.querySelector(`preference[k="${configs.settingNamespace}_query-count"]`))&&(Q=+S.getAttribute("v"));const D=[];for(let H=0;H{if(x)return B(x);const D=S.querySelector("preferences"),H=D.querySelectorAll(`preference[k^="${configs.settingNamespace}_query"]`);for(const Y of H)Y.remove();let P=!0;Q.forEach((Y,G)=>{Y.name==g.name&&(Y.query=g.query,P=G)}),P===!0?Q.push(g):g.deleteMe&&Q.splice(P,1);const R=S.createElement("preference");R.setAttribute("k",`${configs.settingNamespace}_query-count`),R.setAttribute("v",Q.length),D.appendChild(R);for(let Y=0;Y200)return B(new Error("query name too long to be saved on osm.org"));const X=Math.ceil((G.query.length+G.name.length+8)/255);if(X>9)return B(new Error("query too long to be saved on osm.org"));let ee=`p=${X}`;ee+=`&n=${G.name}`,ee+=`&q=${G.query}`,ee=ee.match(/.{1,255}/g);for(let Ae=0;Ae{if(Y)return B(Y);B(null,Q)})})}const cache={};class nominatim{static request(B,x){$.ajax(`https://nominatim.openstreetmap.org/search?X-Requested-With=${configs.appname}`,{data:{format:"json",q:B},success(Q){if(typeof Q=="string")try{Q=JSON.parse(Q)}catch{}cache[B]=Q,x(void 0,Q)},error(){const Q="An error occurred while contacting the osm search server nominatim.openstreetmap.org :(";console.log(Q),x(Q,null)}})}static get(B,x){return cache[B]===void 0?this.request(B,x):x(void 0,cache[B]),this}static getBest(B,x,Q){return Q||(Q=x,x=null),this.get(B,(S,D)=>{if(S){Q(S,null);return}x&&(D=D.filter(x)),D.length===0?Q("No result found",null):Q(S,D[0])}),this}}function map2bbox(g){let B;ide.map.bboxfilter&&ide.map.bboxfilter.isEnabled()?B=ide.map.bboxfilter.getBounds():B=ide.map.getBounds();const x=Math.min(Math.max(B.getSouthWest().lat,-90),90),Q=Math.min(Math.max(B.getNorthEast().lat,-90),90),S=Math.min(Math.max(B.getSouthWest().lng,-180),180),D=Math.min(Math.max(B.getNorthEast().lng,-180),180);if(g=="OverpassQL")return`${x},${S},${Q},${D}`;if(g=="xml")return`s="${x}" w="${S}" n="${Q}" e="${D}"`}function map2coord(g){const B=ide.map.getCenter();if(g=="OverpassQL")return`${B.lat},${B.lng}`;if(g=="xml")return`lat="${B.lat}" lon="${B.lng}"`}function relativeTime(g,B){const x=Date.now();if(g==""&&(g="0 seconds"),g=g.toLowerCase().match(/(-?[0-9]+) ?(seconds?|minutes?|hours?|days?|weeks?|months?|years?)?/),g===null){B("");return}const Q=parseInt(g[1]);let S;switch(g[2]){case"second":case"seconds":S=1;break;case"minute":case"minutes":S=60;break;case"hour":case"hours":S=3600;break;case"day":case"days":default:S=86400;break;case"week":case"weeks":S=604800;break;case"month":case"months":S=2628e3;break;case"year":case"years":S=31536e3;break}const D=x-Q*S*1e3;B(new Date(D).toISOString())}function geocodeId(g,B){const x=ide.getQueryLang();function Q(S){return S.osm_type&&S.osm_id}nominatim.getBest(g,Q,(S,D)=>{if(S)return ide.onNominatimError(g,"Id");x=="OverpassQL"?D=`${D.osm_type}(${D.osm_id})`:x=="xml"&&(D=`type="${D.osm_type}" ref="${D.osm_id}"`),B(D)})}function geocodeArea(g,B){const x=ide.getQueryLang();function Q(S){return S.osm_type&&S.osm_id&&S.osm_type!=="node"}nominatim.getBest(g,Q,(S,D)=>{if(S)return ide.onNominatimError(g,"Area");let H=1*D.osm_id;if(D.osm_type=="way"&&(H+=24e8),D.osm_type=="relation"&&(H+=36e8),x=="OverpassQL")return D.osm_type==="way"&&(H+=`,${D.osm_id}`),B(`area(id:${H})`);if(x=="xml")return D.osm_type==="way"&&(H+=`" ref_1="${D.osm_id}`),B(`type="area" ref="${H}"`)})}function geocodeBbox(g,B){const x=ide.getQueryLang();nominatim.getBest(g,(Q,S)=>{if(Q)return ide.onNominatimError(g,"Bbox");const D=Math.min(Math.max(S.boundingbox[0],-90),90),H=Math.min(Math.max(S.boundingbox[1],-90),90),P=Math.min(Math.max(S.boundingbox[2],-180),180),R=Math.min(Math.max(S.boundingbox[3],-180),180);x=="OverpassQL"?S=`${D},${P},${H},${R}`:x=="xml"&&(S=`s="${D}" w="${P}" n="${H}" e="${R}"`),B(S)})}function geocodeCoords(g,B){const x=ide.getQueryLang();nominatim.getBest(g,(Q,S)=>{if(Q)return ide.onNominatimError(g,"Coords");x=="OverpassQL"?S=`${S.lat},${S.lon}`:x=="xml"&&(S=`lat="${S.lat}" lon="${S.lon}"`),B(S)})}function shortcuts(){const g=ide.getQueryLang();return{bbox:map2bbox(g),center:map2coord(g),__bbox__global_bbox_xml__ezs4K8__:map2bbox("OverpassQL"),date:relativeTime,geocodeId,geocodeArea,geocodeBbox,geocodeCoords,nominatimId:g=="xml"?geocodeId:(B,x)=>geocodeId(B,Q=>x(`${Q};`)),nominatimArea:g=="xml"?geocodeArea:(B,x)=>geocodeArea(B,Q=>x(`${Q};`)),nominatimBbox:geocodeBbox,nominatimCoords:geocodeCoords}}let copyData;$(document).on("copy",g=>{copyData&&g.originalEvent&&g.originalEvent.clipboardData?(Object.keys(copyData).forEach(B=>{g.originalEvent.clipboardData.setData(B,copyData[B])}),g.originalEvent.preventDefault(),copyData=void 0):copyData&©Data["text/plain"]&&(prompt(i18n.t("export.copy_to_clipboard"),copyData["text/plain"]),copyData=null)});function make_combobox(g,B,x,Q){if(g[0].is_combobox){g.autocomplete("option",{source:B});return}const S=g.wrap("").parent().addClass("ui-combobox");g.autocomplete({source:B,minLength:0}).addClass("ui-widget ui-widget-content ui-corner-left ui-state-default").autocomplete("instance")._renderItem=(D,H)=>$("
  • ").append(x&&x.indexOf(H.value)!==-1?`
    ${H.label}
    `:`
    ${H.label}
    `).on("click",function(P){if(P.shiftKey&&x.indexOf(H.value)!==-1){Q(H.value),$(this).remove();const R=g.autocomplete("option","source");return R.splice(R.indexOf(H),1),g.autocomplete("option","source",R),!1}}).appendTo(D),$("").attr("tabIndex",-1).attr("title","show all items").appendTo(S).button({icons:{primary:"ui-icon-triangle-1-s"},text:!1}).removeClass("ui-corner-all").addClass("ui-corner-right ui-combobox-toggle").click(()=>{if(g.autocomplete("widget").is(":visible")){g.autocomplete("close");return}g.autocomplete("search",""),g.focus()}),g[0].is_combobox=!0}function showDialog(g,B,x){const Q=` `,S=$(Q);$(".delete",S).click(()=>$(S).remove());for(const D in x){const H=x[D];$(``).click(()=>{var P;(P=H.callback)==null||P.call(H),$(S).remove()}).appendTo($("footer .level-item",S))}S.appendTo("body")}class IDE{constructor(){this.attribControl=null,this.scaleControl=null,this.queryParser=new parser,this.run_query_on_startup=!1,this.codeEditor=null,this.dataViewer=null,this.map=null,this.waiter=new class{constructor(){this.opened=!0,this.frames=["◴","◷","◶","◵"],this.frameDelay=250,this.onAbort=void 0,this.interval=0,this._initialTitle=document.title}open(x){x?($(".modal .wait-info h4").text(x),$(".wait-info").show()):$(".wait-info").hide(),$("#loading-dialog").addClass("is-active"),document.title=`${this.frames[0]} ${this._initialTitle}`;let Q=0;this.interval=setInterval(()=>{const S=this.isAlert?this.alertFrame:this.frames[++Q%this.frames.length];document.title=`${S} ${this._initialTitle}`},this.frameDelay),this.opened=!0}close(x=""){this.opened&&(clearInterval(this.interval),document.title=`${x}${this._initialTitle}`,$("#loading-dialog").removeClass("is-active"),$(".wait-info ul li").remove(),delete this.onAbort,this.opened=!1)}addInfo(x,Q){$("#aborter").remove(),$(".wait-info ul li:nth-child(n+1)").css("opacity",.5),$(".wait-info ul li span.fas").removeClass("fa-spinner").removeClass("fa-spin").addClass("fa-check"),$(".wait-info ul li:nth-child(n+4)").hide();const S=$(`
  • ${x}
  • `);if(typeof Q=="function"){this.onAbort=Q;const D=$(' (abort)
    ').on("click",()=>(this.abort(),!1));S.append(D)}$(".wait-info ul").prepend(S)}abort(){typeof this.onAbort=="function"&&(this.addInfo("aborting"),this.onAbort(this.close))}}}init(){this.waiter.addInfo("ide starting up"),$("#overpass-turbo-version").html("overpass-turbo 2024-06-12/64413bf"),$("#overpass-turbo-dependencies").html('@fortawesome/fontawesome-free 5.15.4 ((CC-BY-4.0 AND OFL-1.1 AND MIT)), @openstreetmap/id-tagging-schema 3.5.1 (ISC), bulma 0.9.4 (MIT), canvg 4.0.1 (MIT), codemirror 2.38.00 (undefined), html2canvas 1.4.1 (MIT), jquery 3.7.1 (MIT), jquery-ui 1.13.2 (MIT), jquery-ui-dist 1.13.2 (MIT), leaflet 1.9.4 (BSD-2-Clause), leaflet-polylineoffset 1.1.1 (MIT), leaflet-locationfilter 0.1.3 (MIT), lodash 4.17.21 (MIT), osm-auth 2.2.0 (ISC), osmtogeojson 3.0.0-beta.5 (MIT), rgbcolor 1.0.1 (MIT OR SEE LICENSE IN FEEL-FREE.md), stackblur 1.0.0 (BSD-2-Clause), tag2link 2023.10.21 (ISC), togpx 0.5.4 (MIT), tokml 0.4.0 (BSD-2-Clause)'),($.support.cors!=!0||typeof function(){let B;try{localStorage.setItem("startup_localstorage_quota_test",123),localStorage.removeItem("startup_localstorage_quota_test"),B=localStorage}catch{}return B}()!="object")&&(this.not_supported=!0,$("#warning-unsupported-browser").addClass("is-active")),this.waiter.addInfo("load settings"),settings.load(),this.waiter.addInfo("translate ui"),i18n.translate().then(()=>this.initAfterI18n()),sync.enabled&&($("#load-dialog .osm").show(),sync.authenticated()&&($("#logout").show(),$("#logout").appendTo($("#logout").parent())))}initAfterI18n(){const B=this;B.waiter.addInfo("parse url parameters");const x=urlParameters();x.has_coords&&(settings.coords_lat=x.coords.lat,settings.coords_lon=x.coords.lng),x.has_zoom&&(settings.coords_zoom=x.zoom),x.run_query&&(B.run_query_on_startup=!0),settings.save(),B.waiter.addInfo("initialize page");const Q=$(window).width()/$(window).height()<.8;if(settings.editor_width!=""&&!Q&&($("#editor").css("width",settings.editor_width),$("#dataviewer").css("left",settings.editor_width)),Q&&$("#editor, #dataviewer").addClass("portrait"),$("#editor").resizable({handles:Q?"s":"e",minWidth:Q?void 0:"200",resize(){if(!Q)$(this).next().css("left",`${$(this).outerWidth()}px`);else{const G=$(this).offset().top+$(this).outerHeight();$(this).next().css("top",`${G}px`)}B.map.invalidateSize(!1)},stop(){Q||(settings.editor_width=$("#editor").css("width"),settings.save())}}),$("#editor").prepend(""),$("#editor textarea")[0].value=settings.code.overpass,settings.use_rich_editor){let G=0;CodeMirror.defineMIME("text/x-overpassQL",{name:"clike",keywords:function(X){const ee={},Ae=X.split(" ");for(const le of Ae)ee[le]=!0;return ee}("out json xml custom popup timeout maxsize bbox date diff adiff foreach relation rel way node is_in area around user uid newer changed poly pivot nwr nw nr wr derived out meta body skel tags ids count qt asc center bb geom")}),CodeMirror.defineMIME("text/x-overpassXML","xml"),CodeMirror.defineMode("xml+mustache",X=>CodeMirror.multiplexingMode(CodeMirror.multiplexingMode(CodeMirror.getMode(X,"xml"),{open:"{{",close:"}}",mode:CodeMirror.getMode(X,"text/plain"),delimStyle:"mustache"}),{open:"{{style:",close:"}}",mode:CodeMirror.getMode(X,"text/css"),delimStyle:"mustache"})),CodeMirror.defineMode("ql+mustache",X=>CodeMirror.multiplexingMode(CodeMirror.multiplexingMode(CodeMirror.getMode(X,"text/x-overpassQL"),{open:"{{",close:"}}",mode:CodeMirror.getMode(X,"text/plain"),delimStyle:"mustache"}),{open:"{{style:",close:"}}",mode:CodeMirror.getMode(X,"text/css"),delimStyle:"mustache"})),B.codeEditor=CodeMirror.fromTextArea($("#editor textarea")[0],{lineNumbers:!0,lineWrapping:!0,mode:"text/plain",onChange(X){clearTimeout(G),G=setTimeout(()=>{B.getQueryLang()=="xml"?X.getOption("mode")!="xml+mustache"&&(X.closeTagEnabled=!0,X.setOption("matchBrackets",!1),X.setOption("mode","xml+mustache")):X.getOption("mode")!="ql+mustache"&&(X.closeTagEnabled=!1,X.setOption("matchBrackets",!0),X.setOption("mode","ql+mustache"));const ee=$(".leaflet-control-buttons-bboxfilter");B.getRawQuery().match(/\{\{bbox\}\}/)?ee.hasClass("disabled")&&(ee.removeClass("disabled"),ee.attr("data-t","[title]map_controlls.select_bbox"),i18n.translate_ui(ee[0])):ee.hasClass("disabled")||(ee.addClass("disabled"),ee.attr("data-t","[title]map_controlls.select_bbox_disabled"),i18n.translate_ui(ee[0]))},500),settings.code.overpass=X.getValue(),settings.save()},closeTagEnabled:!0,closeTagIndent:["osm-script","query","union","foreach","difference"],extraKeys:{"'>'"(X){X.closeTag(X,">")},"'/'"(X){X.closeTag(X,"/")}}}),B.codeEditor.getOption("onChange")(B.codeEditor)}else B.codeEditor=$("#editor textarea")[0],B.codeEditor.getValue=function(){return this.value},B.codeEditor.setValue=function(G){this.value=G},B.codeEditor.lineCount=function(){return this.value.split(/\r\n|\r|\n/).length},B.codeEditor.setLineClass=function(){},$("#editor textarea").bind("input change",G=>{settings.code.overpass=G.target.getValue(),settings.save()});x.has_query&&B.codeEditor.setValue(x.query),B.dataViewer=CodeMirror($("#data")[0],{value:"no data loaded yet",lineNumbers:!0,readOnly:!0,mode:"javascript"}),B.map=new L.Map("map",{attributionControl:!0,minZoom:0,maxZoom:configs.maxMapZoom,worldCopyJump:!1});const S=settings.tile_server,D=configs.tileServerAttribution,H=new L.TileLayer(S,{attribution:D,noWrap:!0,maxNativeZoom:19,maxZoom:B.map.options.maxZoom});B.attribControl=new L.Control.Attribution({prefix:!1}),B.attribControl.addAttribution(D);const P=new L.LatLng(settings.coords_lat,settings.coords_lon);B.map.setView(P,settings.coords_zoom).addLayer(H),B.map.tile_layer=H,B.map.inv_opacity_layer=L.tileLayer("data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==").setOpacity(1-settings.background_opacity),settings.background_opacity!=1&&B.map.inv_opacity_layer.addTo(B.map),B.scaleControl=new L.Control.Scale({metric:!0,imperial:!1}),B.scaleControl.addTo(B.map),B.map.on("moveend",()=>{settings.coords_lat=B.map.getCenter().lat,settings.coords_lon=B.map.getCenter().lng,settings.coords_zoom=B.map.getZoom(),settings.save()}),$("#dataviewer > div#data")[0].style.zIndex=-1001,$(".tabs li").bind("click",G=>{$(G.target).hasClass("is-active")||($("#dataviewer > div#data")[0].style.zIndex=-1*$("#dataviewer > div#data")[0].style.zIndex,$(".tabs li").toggleClass("is-active"))}),$(document).keydown(G=>B.onKeyPress(G));const R=L.Control.extend({options:{position:"topleft"},onAdd(){const G=L.DomUtil.create("div","leaflet-control-buttons leaflet-bar");let X=L.DomUtil.create("a","leaflet-control-buttons-fitdata leaflet-bar-part leaflet-bar-part-top",G);return $('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.zoom_to_data"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",()=>{try{B.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(),{maxZoom:18})}catch{}return!1},B.map),X=L.DomUtil.create("a","leaflet-control-buttons-myloc leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.localize_user"),window.isSecureContext||(X.className+=" disabled",X.setAttribute("data-t","[title]map_controlls.localize_user_disabled")),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",()=>{try{navigator.geolocation.getCurrentPosition(ee=>{const Ae=new L.LatLng(ee.coords.latitude,ee.coords.longitude);B.map.setView(Ae,settings.coords_zoom)})}catch{}return!1},B.map),X=L.DomUtil.create("a","leaflet-control-buttons-bboxfilter leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.select_bbox"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>($(ee.target).parent().hasClass("disabled")||(B.map.bboxfilter.isEnabled()?B.map.bboxfilter.disable():(B.map.bboxfilter.setBounds(B.map.getBounds().pad(-.2)),B.map.bboxfilter.enable()),$(ee.target).toggleClass("fa-times-circle").toggleClass("fa-image")),!1),B.map),X=L.DomUtil.create("a","leaflet-control-buttons-fullscreen leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.toggle_wide_map"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>($("#dataviewer").toggleClass("fullscreen"),B.map.invalidateSize(),$(ee.target).toggleClass("fa-step-forward").toggleClass("fa-step-backward"),$("#editor").toggleClass("hidden"),$("#editor").resizable("option","disabled")?$("#editor").resizable("enable"):$("#editor").resizable("disable"),!1),B.map),X=L.DomUtil.create("a","leaflet-control-buttons-clearoverlay leaflet-bar-part leaflet-bar-part-bottom",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.toggle_data"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>(ee.preventDefault(),B.map.hasLayer(overpass.osmLayer)?B.map.removeLayer(overpass.osmLayer):B.map.addLayer(overpass.osmLayer),!1),B.map),G}});B.map.addControl(new R),$(".leaflet-control-buttons > a").bind("dblclick",G=>G.stopPropagation()),$(".leaflet-control-buttons > a").tooltip({items:"a[title]",hide:{effect:"fadeOut",duration:100},position:{my:"left+5 center",at:"right center"}});const Y=L.Control.extend({options:{position:"topright"},onAdd(){const G=L.DomUtil.create("div","leaflet-control-search control has-icons-left");G.style.position="absolute",G.style.right="0";const X=L.DomUtil.create("input","input is-rounded",G);return $('').click(function(){$(this).prev().autocomplete("search")}).insertAfter(X),X.id="search",X.type="search",X.onclick=function(){this.focus()},G.ondblclick=function(ee){ee.stopPropagation()},$(X).autocomplete({source(ee,Ae){$.ajax(`https://search.osmnames.org/q/${encodeURIComponent(ee.term)}.js?key=${configs.osmnamesApiKey}`,{success(le){if(typeof le=="string")try{le=$.parseJSON(le)}catch{}Ae($.map(le.results.slice(0,10),ae=>({label:ae.display_name,value:ae.display_name,lat:ae.lat,lon:ae.lon,boundingbox:ae.boundingbox})))},error(){console.error("An error occured while contacting the search server osmnames.org :(")}})},minLength:2,autoFocus:!0,select(ee,Ae){return Ae.item.boundingbox&&Ae.item.boundingbox instanceof Array?B.map.fitBounds(L.latLngBounds([[Ae.item.boundingbox[1],Ae.item.boundingbox[0]],[Ae.item.boundingbox[3],Ae.item.boundingbox[2]]]),{maxZoom:18}):B.map.panTo(new L.LatLng(Ae.item.lat,Ae.item.lon)),this.value="",!1},open(){$(this).removeClass("ui-corner-all").addClass("ui-corner-top")},close(){$(this).addClass("ui-corner-all").removeClass("ui-corner-top")}}),$(X).autocomplete("option","delay",20),G}});B.map.addControl(new Y),$('').addClass("crosshairs").hide().appendTo("#map"),settings.enable_crosshairs&&$(".crosshairs").show(),B.map.bboxfilter=new L.LocationFilter({enable:!1,adjustButton:!1,enableButton:!1}).addTo(B.map),B.map.on("popupopen popupclose",G=>{if(typeof G.popup.layer<"u"){const X=G.popup.layer.placeholder||G.popup.layer,ee=overpass.osmLayer._baseLayer.options.style(X.feature,G.type=="popupopen");typeof X.eachLayer!="function"?typeof X.setStyle=="function"&&X.setStyle(ee):X.eachLayer(Ae=>{typeof Ae.setStyle=="function"&&Ae.setStyle(ee)})}}),overpass.init(),overpass.handlers.onProgress=function(G,X){B.waiter.addInfo(G,X)},overpass.handlers.onDone=function(){const G=B.getRawQuery().match(/@name ([^\n]+)/),X=G?`${G[1]} | `:"";B.waiter.close(X);const ee=B.map.getBounds(),Ae=overpass.osmLayer.getBaseLayer().getBounds();if(Ae.isValid()&&!ee.intersects(Ae)){const le=$(".leaflet-control-buttons-fitdata").tooltip("option","content");$(".leaflet-control-buttons-fitdata").tooltip("option","content",`← ${i18n.t("map_controlls.suggest_zoom_to_data")}`),$(".leaflet-control-buttons-fitdata").tooltip("open"),$(".leaflet-control-buttons-fitdata").tooltip("option","hide",{effect:"fadeOut",duration:1e3}),setTimeout(()=>{$(".leaflet-control-buttons-fitdata").tooltip("option","content",le),$(".leaflet-control-buttons-fitdata").tooltip("close"),$(".leaflet-control-buttons-fitdata").tooltip("option","hide",{effect:"fadeOut",duration:100})},2600)}},overpass.handlers.onEmptyMap=function(G,X){const ee=B.getRawQuery(),Ae=/out[^;]+?count/.test(ee);if(G=="no visible data")if(!Ae&&!settings.no_autorepair){const le=`

    ${i18n.t("warning.incomplete.expl.1")}

    ${i18n.t("warning.incomplete.expl.2")}

     ${i18n.t("warning.incomplete.not_again")}

    `,ae=[{name:i18n.t("dialog.repair_query"),callback(){B.repairQuery("no visible data")}},{name:i18n.t("dialog.show_data"),callback(){var ge,fe;(fe=(ge=$("input[name=hide_incomplete_data_warning]"))==null?void 0:ge[0])!=null&&fe.checked&&(settings.no_autorepair=!0,settings.save()),B.switchTab("Data")}}];showDialog(i18n.t("warning.incomplete.title"),le,ae)}else Ae&&B.switchTab("Data");G=="only areas returned"&&B.switchTab("Data"),G=="no coordinates returned"&&B.switchTab("Data"),X=="unknown"&&B.switchTab("Data"),$(`
    ${i18n.t("map.intentionally_blank")} (${G})
    `).appendTo("#map")},overpass.handlers.onDataReceived=function(G,X,ee,Ae){if(G>1e6){B.waiter.close();const le=document.title;document.title=`❗ ${le}`;const ae=[{name:i18n.t("dialog.abort"),callback(){document.title=le,ee()}},{name:i18n.t("dialog.continue_anyway"),callback(){document.title=le,Ae()}}],ge=`

    ${i18n.t("warning.huge_data.expl.1").replace("{{amount_txt}}",X)}

    ${i18n.t("warning.huge_data.expl.2")}

    `;showDialog(i18n.t("warning.huge_data.title"),ge,ae)}else Ae()},overpass.handlers.onAbort=function(){B.waiter.close()},overpass.handlers.onAjaxError=function(G){B.waiter.close();const X=document.title;document.title=`❗ ${X}`;const ee=[{name:i18n.t("dialog.dismiss"),callback(){document.title=X}}],Ae=`

    ${i18n.t("error.ajax.expl")}

    ${G}`;showDialog(i18n.t("error.ajax.title"),Ae,ee),overpass.resultText&&B.dataViewer.setValue(overpass.resultText)},overpass.handlers.onQueryError=function(G){B.waiter.close();const X=document.title;document.title=`❗ ${X}`;const ee=[{name:i18n.t("dialog.dismiss"),callback(){document.title=X}}],Ae=`
    ${i18n.t("error.query.expl")}
    ${G}
    `;showDialog(i18n.t("error.query.title"),Ae,ee)},overpass.handlers.onStyleError=function(G){const X=[{name:i18n.t("dialog.dismiss")}],ee=`

    ${i18n.t("error.mapcss.expl")}

    ${G}`;showDialog(i18n.t("error.mapcss.title"),ee,X)},overpass.handlers.onQueryErrorLine=function(G){B.highlightError(G)},overpass.handlers.onRawDataPresent=function(){B.dataViewer.setOption("mode",overpass.resultType),B.dataViewer.setValue(overpass.resultText)},overpass.handlers.onGeoJsonReady=function(){if(B.map.addLayer(overpass.osmLayer),typeof B.run_query_on_startup=="function"&&B.run_query_on_startup(),settings.show_data_stats){const G=overpass.stats,X=`${i18n.t("data_stats.loaded")} – ${i18n.t("data_stats.nodes")}: ${G.data.nodes}, ${i18n.t("data_stats.ways")}: ${G.data.ways}, ${i18n.t("data_stats.relations")}: ${G.data.relations}${G.data.areas>0?`, ${i18n.t("data_stats.areas")}: ${G.data.areas}`:""}
    ${i18n.t("data_stats.displayed")} – ${i18n.t("data_stats.pois")}: ${G.geojson.pois}, ${i18n.t("data_stats.lines")}: ${G.geojson.lines}, ${i18n.t("data_stats.polygons")}: ${G.geojson.polys}`;$(`
    ${X}
    `).insertAfter("#map .leaflet-control-attribution");const ee=overpass.timestamp&&Date.now()-Date.parse(overpass.timestamp),Ae=overpass.timestampAreas&&Date.now()-Date.parse(overpass.timestampAreas);$("#data_stats").tooltip({items:"div",tooltipClass:"stats",content(){let le="
    ";if(overpass.ajax_request_duration){let ae=overpass.ajax_request_duration;ae.toLocaleString&&(ae=ae.toLocaleString()),le+=`${i18n.t("data_stats.request_duration")}: ${ae}ms
    `}return overpass.timestamp&&(le+=`${i18n.t("data_stats.lag")}: ${Math.floor(ee/1e3)}s ${i18n.t("data_stats.lag.expl")}`),overpass.timestampAreas&&(le+=`
    ${i18n.t("data_stats.lag_areas")}: ${Math.floor(Ae/1e3)}s ${i18n.t("data_stats.lag.expl")}`),le+="
    ",le},hide:{effect:"fadeOut",duration:100},position:{my:"right bottom-5",at:"right top"}}),(ee>24*60*60*1e3||Ae>96*60*60*1e3)&&$("#data_stats").css("background-color","yellow")}},overpass.handlers.onPopupReady=function(G){G.openOn(B.map)},B.waiter.close(),B.run_query_on_startup===!0&&(B.update_map(),!x.has_coords&&x.has_query&&x.query.match(/\{\{(bbox|center)\}\}/)===null&&(B.run_query_on_startup=function(){B.run_query_on_startup=null;try{B.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(),{maxZoom:18})}catch{}}))}onNominatimError(B,x){this.waiter.close();let Q=this.getRawQuery();Q=Q.split(` +`+H+"}":"{"+P.join(",")+"}",gap=H,S}}typeof JSON.stringify!="function"&&(meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(g,B,x){var Q;if(gap="",indent="",typeof x=="number")for(Q=0;Q{var R=(Y,G)=>{Y?P(new Error(Y)):H(G)};_generatePkceChallenge(Y=>x(Y,R))}))};function x(H,P){var R=generateState(),Y=g.url+"/oauth2/authorize?"+utilQsString({client_id:g.client_id,redirect_uri:g.redirect_uri,response_type:"code",scope:g.scope,state:R,code_challenge:H.code_challenge,code_challenge_method:H.code_challenge_method});if(g.singlepage){if(!store.enabled){var G=new Error("local storage unavailable, but require in singlepage mode");G.status="pkce-localstorage-unavailable",P(G);return}var X=utilStringQs(window.location.search.slice(1));X.code?B.bootstrapToken(X.code,P):(S("oauth2_state",R),S("oauth2_pkce_code_verifier",H.code_verifier),window.location=Y)}else{var ee=600,Ae=550,le=[["width",ee],["height",Ae],["left",window.screen.width/2-ee/2],["top",window.screen.height/2-Ae/2]].map(function(fe){return fe.join("=")}).join(","),ae=window.open("about:blank","oauth_window",le);B.popupWindow=ae,ae.location=Y,ae||(G=new Error("Popup was blocked"),G.status="popup-blocked",P(G))}window.authComplete=function(fe){var ye=utilStringQs(fe.split("?")[1]);if(ye.state!==R){G=new Error("Invalid state"),G.status="invalid-state",P(G);return}Q(ye.code,H.code_verifier,ge),delete window.authComplete};function ge(fe,ye){if(g.done(),fe){P(fe);return}var me=JSON.parse(ye.response);S("oauth2_access_token",me.access_token),P(null,B)}}function Q(H,P,R){var Y=g.url+"/oauth2/token?"+utilQsString({client_id:g.client_id,redirect_uri:g.redirect_uri,grant_type:"authorization_code",code:H,code_verifier:P});B.rawxhr("POST",Y,null,null,null,R),g.loading()}B.bringPopupWindowToFront=function(){var H=!1;try{B.popupWindow&&!B.popupWindow.closed&&(B.popupWindow.focus(),H=!0)}catch{}return H},B.bootstrapToken=function(H,P){var R=S("oauth2_state");S("oauth2_state","");var Y=utilStringQs(window.location.search.slice(1));if(Y.state!==R){var G=new Error("Invalid state");G.status="invalid-state",P(G);return}var X=S("oauth2_pkce_code_verifier");S("oauth2_pkce_code_verifier",""),Q(H,X,ee);function ee(Ae,le){if(g.done(),Ae){P(Ae);return}var ae=JSON.parse(le.response);S("oauth2_access_token",ae.access_token),P(null,B)}},B.fetch=function(H,P){if(B.authenticated())return R();return g.auto?B.authenticateAsync().then(R):Promise.reject(new Error("not authenticated"));function R(){return P=P||{},P.headers||(P.headers={"Content-Type":"application/x-www-form-urlencoded"}),P.headers.Authorization="Bearer "+S("oauth2_access_token"),fetch(H,P)}},B.xhr=function(H,P){if(B.authenticated())return R();if(g.auto){B.authenticate(R);return}else{P("not authenticated",null);return}function R(){var G=H.prefix!==!1?g.url+H.path:H.path;return B.rawxhr(H.method,G,S("oauth2_access_token"),H.content,H.headers,Y)}function Y(G,X){G?P(G):X.responseXML?P(G,X.responseXML):P(G,X.response)}},B.rawxhr=function(H,P,R,Y,G,X){G=G||{"Content-Type":"application/x-www-form-urlencoded"},R&&(G.Authorization="Bearer "+R);var ee=new XMLHttpRequest;ee.onreadystatechange=function(){ee.readyState===4&&ee.status!==0&&(/^20\d$/.test(ee.status)?X(null,ee):X(ee,null))},ee.onerror=function(le){X(le,null)},ee.open(H,P,!0);for(var Ae in G)ee.setRequestHeader(Ae,G[Ae]);return ee.send(Y),ee},B.preauth=function(H){return H&&H.access_token&&S("oauth2_access_token",H.access_token),B},B.options=function(H){return arguments.length?(g=H,g.url=g.url||"https://www.openstreetmap.org",g.auto=g.auto||!1,g.singlepage=g.singlepage||!1,g.loading=g.loading||function(){},g.done=g.done||function(){},B.preauth(g)):g};var S;if(store.enabled)S=function(H,P){if(arguments.length===1)return store.get(g.url+H);if(arguments.length===2)return store.set(g.url+H,P)};else{var D={};S=function(H,P){if(arguments.length===1)return D[g.url+H];if(arguments.length===2)return D[g.url+H]=P}}return B.options(g),B}function utilQsString(g){return Object.keys(g).filter(function(B){return g[B]!==void 0}).sort().map(function(B){return encodeURIComponent(B)+"="+encodeURIComponent(g[B])}).join("&")}function utilStringQs(g){for(var B=0;B{if(B)return g(B);loadQueries(g)})},save(g,B){auth.authenticated()?saveQuery(g,B):auth.authenticate(x=>{if(x)return B(x);saveQuery(g,B)})},delete(g,B){if(!auth.authenticated())return B(new Error("must be logged in to delete a synced query"));g={name:g,deleteMe:!0},saveQuery(g,B)},logout(){auth.authenticated()&&auth.logout()},authenticated(){return enabled&&auth.authenticated()}};function loadQueries(g){auth.xhr({method:"GET",path:"/api/0.6/user/preferences"},(B,x)=>{if(B)return g(B);let Q=0,S;(S=x.querySelector(`preference[k="${configs.settingNamespace}_query-count"]`))&&(Q=+S.getAttribute("v"));const D=[];for(let H=0;H{if(x)return B(x);const D=S.querySelector("preferences"),H=D.querySelectorAll(`preference[k^="${configs.settingNamespace}_query"]`);for(const Y of H)Y.remove();let P=!0;Q.forEach((Y,G)=>{Y.name==g.name&&(Y.query=g.query,P=G)}),P===!0?Q.push(g):g.deleteMe&&Q.splice(P,1);const R=S.createElement("preference");R.setAttribute("k",`${configs.settingNamespace}_query-count`),R.setAttribute("v",Q.length),D.appendChild(R);for(let Y=0;Y200)return B(new Error("query name too long to be saved on osm.org"));const X=Math.ceil((G.query.length+G.name.length+8)/255);if(X>9)return B(new Error("query too long to be saved on osm.org"));let ee=`p=${X}`;ee+=`&n=${G.name}`,ee+=`&q=${G.query}`,ee=ee.match(/.{1,255}/g);for(let Ae=0;Ae{if(Y)return B(Y);B(null,Q)})})}const cache={};class nominatim{static request(B,x){$.ajax(`https://nominatim.openstreetmap.org/search?X-Requested-With=${configs.appname}`,{data:{format:"json",q:B},success(Q){if(typeof Q=="string")try{Q=JSON.parse(Q)}catch{}cache[B]=Q,x(void 0,Q)},error(){const Q="An error occurred while contacting the osm search server nominatim.openstreetmap.org :(";console.log(Q),x(Q,null)}})}static get(B,x){return cache[B]===void 0?this.request(B,x):x(void 0,cache[B]),this}static getBest(B,x,Q){return Q||(Q=x,x=null),this.get(B,(S,D)=>{if(S){Q(S,null);return}x&&(D=D.filter(x)),D.length===0?Q("No result found",null):Q(S,D[0])}),this}}function map2bbox(g){let B;ide.map.bboxfilter&&ide.map.bboxfilter.isEnabled()?B=ide.map.bboxfilter.getBounds():B=ide.map.getBounds();const x=Math.min(Math.max(B.getSouthWest().lat,-90),90),Q=Math.min(Math.max(B.getNorthEast().lat,-90),90),S=Math.min(Math.max(B.getSouthWest().lng,-180),180),D=Math.min(Math.max(B.getNorthEast().lng,-180),180);if(g=="OverpassQL")return`${x},${S},${Q},${D}`;if(g=="xml")return`s="${x}" w="${S}" n="${Q}" e="${D}"`}function map2coord(g){const B=ide.map.getCenter();if(g=="OverpassQL")return`${B.lat},${B.lng}`;if(g=="xml")return`lat="${B.lat}" lon="${B.lng}"`}function relativeTime(g,B){const x=Date.now();if(g==""&&(g="0 seconds"),g=g.toLowerCase().match(/(-?[0-9]+) ?(seconds?|minutes?|hours?|days?|weeks?|months?|years?)?/),g===null){B("");return}const Q=parseInt(g[1]);let S;switch(g[2]){case"second":case"seconds":S=1;break;case"minute":case"minutes":S=60;break;case"hour":case"hours":S=3600;break;case"day":case"days":default:S=86400;break;case"week":case"weeks":S=604800;break;case"month":case"months":S=2628e3;break;case"year":case"years":S=31536e3;break}const D=x-Q*S*1e3;B(new Date(D).toISOString())}function geocodeId(g,B){const x=ide.getQueryLang();function Q(S){return S.osm_type&&S.osm_id}nominatim.getBest(g,Q,(S,D)=>{if(S)return ide.onNominatimError(g,"Id");x=="OverpassQL"?D=`${D.osm_type}(${D.osm_id})`:x=="xml"&&(D=`type="${D.osm_type}" ref="${D.osm_id}"`),B(D)})}function geocodeArea(g,B){const x=ide.getQueryLang();function Q(S){return S.osm_type&&S.osm_id&&S.osm_type!=="node"}nominatim.getBest(g,Q,(S,D)=>{if(S)return ide.onNominatimError(g,"Area");let H=1*D.osm_id;if(D.osm_type=="way"&&(H+=24e8),D.osm_type=="relation"&&(H+=36e8),x=="OverpassQL")return D.osm_type==="way"&&(H+=`,${D.osm_id}`),B(`area(id:${H})`);if(x=="xml")return D.osm_type==="way"&&(H+=`" ref_1="${D.osm_id}`),B(`type="area" ref="${H}"`)})}function geocodeBbox(g,B){const x=ide.getQueryLang();nominatim.getBest(g,(Q,S)=>{if(Q)return ide.onNominatimError(g,"Bbox");const D=Math.min(Math.max(S.boundingbox[0],-90),90),H=Math.min(Math.max(S.boundingbox[1],-90),90),P=Math.min(Math.max(S.boundingbox[2],-180),180),R=Math.min(Math.max(S.boundingbox[3],-180),180);x=="OverpassQL"?S=`${D},${P},${H},${R}`:x=="xml"&&(S=`s="${D}" w="${P}" n="${H}" e="${R}"`),B(S)})}function geocodeCoords(g,B){const x=ide.getQueryLang();nominatim.getBest(g,(Q,S)=>{if(Q)return ide.onNominatimError(g,"Coords");x=="OverpassQL"?S=`${S.lat},${S.lon}`:x=="xml"&&(S=`lat="${S.lat}" lon="${S.lon}"`),B(S)})}function shortcuts(){const g=ide.getQueryLang();return{bbox:map2bbox(g),center:map2coord(g),__bbox__global_bbox_xml__ezs4K8__:map2bbox("OverpassQL"),date:relativeTime,geocodeId,geocodeArea,geocodeBbox,geocodeCoords,nominatimId:g=="xml"?geocodeId:(B,x)=>geocodeId(B,Q=>x(`${Q};`)),nominatimArea:g=="xml"?geocodeArea:(B,x)=>geocodeArea(B,Q=>x(`${Q};`)),nominatimBbox:geocodeBbox,nominatimCoords:geocodeCoords}}let copyData;$(document).on("copy",g=>{copyData&&g.originalEvent&&g.originalEvent.clipboardData?(Object.keys(copyData).forEach(B=>{g.originalEvent.clipboardData.setData(B,copyData[B])}),g.originalEvent.preventDefault(),copyData=void 0):copyData&©Data["text/plain"]&&(prompt(i18n.t("export.copy_to_clipboard"),copyData["text/plain"]),copyData=null)});function make_combobox(g,B,x,Q){if(g[0].is_combobox){g.autocomplete("option",{source:B});return}const S=g.wrap("").parent().addClass("ui-combobox");g.autocomplete({source:B,minLength:0}).addClass("ui-widget ui-widget-content ui-corner-left ui-state-default").autocomplete("instance")._renderItem=(D,H)=>$("
  • ").append(x&&x.indexOf(H.value)!==-1?`
    ${H.label}
    `:`
    ${H.label}
    `).on("click",function(P){if(P.shiftKey&&x.indexOf(H.value)!==-1){Q(H.value),$(this).remove();const R=g.autocomplete("option","source");return R.splice(R.indexOf(H),1),g.autocomplete("option","source",R),!1}}).appendTo(D),$("").attr("tabIndex",-1).attr("title","show all items").appendTo(S).button({icons:{primary:"ui-icon-triangle-1-s"},text:!1}).removeClass("ui-corner-all").addClass("ui-corner-right ui-combobox-toggle").click(()=>{if(g.autocomplete("widget").is(":visible")){g.autocomplete("close");return}g.autocomplete("search",""),g.focus()}),g[0].is_combobox=!0}function showDialog(g,B,x){const Q=` `,S=$(Q);$(".delete",S).click(()=>$(S).remove());for(const D in x){const H=x[D];$(``).click(()=>{var P;(P=H.callback)==null||P.call(H),$(S).remove()}).appendTo($("footer .level-item",S))}S.appendTo("body")}class IDE{constructor(){this.attribControl=null,this.scaleControl=null,this.queryParser=new parser,this.run_query_on_startup=!1,this.codeEditor=null,this.dataViewer=null,this.map=null,this.waiter=new class{constructor(){this.opened=!0,this.frames=["◴","◷","◶","◵"],this.frameDelay=250,this.onAbort=void 0,this.interval=0,this._initialTitle=document.title}open(x){x?($(".modal .wait-info h4").text(x),$(".wait-info").show()):$(".wait-info").hide(),$("#loading-dialog").addClass("is-active"),document.title=`${this.frames[0]} ${this._initialTitle}`;let Q=0;this.interval=setInterval(()=>{const S=this.isAlert?this.alertFrame:this.frames[++Q%this.frames.length];document.title=`${S} ${this._initialTitle}`},this.frameDelay),this.opened=!0}close(x=""){this.opened&&(clearInterval(this.interval),document.title=`${x}${this._initialTitle}`,$("#loading-dialog").removeClass("is-active"),$(".wait-info ul li").remove(),delete this.onAbort,this.opened=!1)}addInfo(x,Q){$("#aborter").remove(),$(".wait-info ul li:nth-child(n+1)").css("opacity",.5),$(".wait-info ul li span.fas").removeClass("fa-spinner").removeClass("fa-spin").addClass("fa-check"),$(".wait-info ul li:nth-child(n+4)").hide();const S=$(`
  • ${x}
  • `);if(typeof Q=="function"){this.onAbort=Q;const D=$(' (abort)
    ').on("click",()=>(this.abort(),!1));S.append(D)}$(".wait-info ul").prepend(S)}abort(){typeof this.onAbort=="function"&&(this.addInfo("aborting"),this.onAbort(this.close))}}}init(){this.waiter.addInfo("ide starting up"),$("#overpass-turbo-version").html("overpass-turbo 2024-06-13/6eeb1fc"),$("#overpass-turbo-dependencies").html('@fortawesome/fontawesome-free 5.15.4 ((CC-BY-4.0 AND OFL-1.1 AND MIT)), @openstreetmap/id-tagging-schema 3.5.1 (ISC), bulma 0.9.4 (MIT), canvg 4.0.1 (MIT), codemirror 2.38.00 (undefined), html2canvas 1.4.1 (MIT), jquery 3.7.1 (MIT), jquery-ui 1.13.2 (MIT), jquery-ui-dist 1.13.2 (MIT), leaflet 1.9.4 (BSD-2-Clause), leaflet-polylineoffset 1.1.1 (MIT), leaflet-locationfilter 0.1.3 (MIT), lodash 4.17.21 (MIT), osm-auth 2.2.0 (ISC), osmtogeojson 3.0.0-beta.5 (MIT), rgbcolor 1.0.1 (MIT OR SEE LICENSE IN FEEL-FREE.md), stackblur 1.0.0 (BSD-2-Clause), tag2link 2024.05.21 (ISC), togpx 0.5.4 (MIT), tokml 0.4.0 (BSD-2-Clause)'),($.support.cors!=!0||typeof function(){let B;try{localStorage.setItem("startup_localstorage_quota_test",123),localStorage.removeItem("startup_localstorage_quota_test"),B=localStorage}catch{}return B}()!="object")&&(this.not_supported=!0,$("#warning-unsupported-browser").addClass("is-active")),this.waiter.addInfo("load settings"),settings.load(),this.waiter.addInfo("translate ui"),i18n.translate().then(()=>this.initAfterI18n()),sync.enabled&&($("#load-dialog .osm").show(),sync.authenticated()&&($("#logout").show(),$("#logout").appendTo($("#logout").parent())))}initAfterI18n(){const B=this;B.waiter.addInfo("parse url parameters");const x=urlParameters();x.has_coords&&(settings.coords_lat=x.coords.lat,settings.coords_lon=x.coords.lng),x.has_zoom&&(settings.coords_zoom=x.zoom),x.run_query&&(B.run_query_on_startup=!0),settings.save(),B.waiter.addInfo("initialize page");const Q=$(window).width()/$(window).height()<.8;if(settings.editor_width!=""&&!Q&&($("#editor").css("width",settings.editor_width),$("#dataviewer").css("left",settings.editor_width)),Q&&$("#editor, #dataviewer").addClass("portrait"),$("#editor").resizable({handles:Q?"s":"e",minWidth:Q?void 0:"200",resize(){if(!Q)$(this).next().css("left",`${$(this).outerWidth()}px`);else{const G=$(this).offset().top+$(this).outerHeight();$(this).next().css("top",`${G}px`)}B.map.invalidateSize(!1)},stop(){Q||(settings.editor_width=$("#editor").css("width"),settings.save())}}),$("#editor").prepend(""),$("#editor textarea")[0].value=settings.code.overpass,settings.use_rich_editor){let G=0;CodeMirror.defineMIME("text/x-overpassQL",{name:"clike",keywords:function(X){const ee={},Ae=X.split(" ");for(const le of Ae)ee[le]=!0;return ee}("out json xml custom popup timeout maxsize bbox date diff adiff foreach relation rel way node is_in area around user uid newer changed poly pivot nwr nw nr wr derived out meta body skel tags ids count qt asc center bb geom")}),CodeMirror.defineMIME("text/x-overpassXML","xml"),CodeMirror.defineMode("xml+mustache",X=>CodeMirror.multiplexingMode(CodeMirror.multiplexingMode(CodeMirror.getMode(X,"xml"),{open:"{{",close:"}}",mode:CodeMirror.getMode(X,"text/plain"),delimStyle:"mustache"}),{open:"{{style:",close:"}}",mode:CodeMirror.getMode(X,"text/css"),delimStyle:"mustache"})),CodeMirror.defineMode("ql+mustache",X=>CodeMirror.multiplexingMode(CodeMirror.multiplexingMode(CodeMirror.getMode(X,"text/x-overpassQL"),{open:"{{",close:"}}",mode:CodeMirror.getMode(X,"text/plain"),delimStyle:"mustache"}),{open:"{{style:",close:"}}",mode:CodeMirror.getMode(X,"text/css"),delimStyle:"mustache"})),B.codeEditor=CodeMirror.fromTextArea($("#editor textarea")[0],{lineNumbers:!0,lineWrapping:!0,mode:"text/plain",onChange(X){clearTimeout(G),G=setTimeout(()=>{B.getQueryLang()=="xml"?X.getOption("mode")!="xml+mustache"&&(X.closeTagEnabled=!0,X.setOption("matchBrackets",!1),X.setOption("mode","xml+mustache")):X.getOption("mode")!="ql+mustache"&&(X.closeTagEnabled=!1,X.setOption("matchBrackets",!0),X.setOption("mode","ql+mustache"));const ee=$(".leaflet-control-buttons-bboxfilter");B.getRawQuery().match(/\{\{bbox\}\}/)?ee.hasClass("disabled")&&(ee.removeClass("disabled"),ee.attr("data-t","[title]map_controlls.select_bbox"),i18n.translate_ui(ee[0])):ee.hasClass("disabled")||(ee.addClass("disabled"),ee.attr("data-t","[title]map_controlls.select_bbox_disabled"),i18n.translate_ui(ee[0]))},500),settings.code.overpass=X.getValue(),settings.save()},closeTagEnabled:!0,closeTagIndent:["osm-script","query","union","foreach","difference"],extraKeys:{"'>'"(X){X.closeTag(X,">")},"'/'"(X){X.closeTag(X,"/")}}}),B.codeEditor.getOption("onChange")(B.codeEditor)}else B.codeEditor=$("#editor textarea")[0],B.codeEditor.getValue=function(){return this.value},B.codeEditor.setValue=function(G){this.value=G},B.codeEditor.lineCount=function(){return this.value.split(/\r\n|\r|\n/).length},B.codeEditor.setLineClass=function(){},$("#editor textarea").bind("input change",G=>{settings.code.overpass=G.target.getValue(),settings.save()});x.has_query&&B.codeEditor.setValue(x.query),B.dataViewer=CodeMirror($("#data")[0],{value:"no data loaded yet",lineNumbers:!0,readOnly:!0,mode:"javascript"}),B.map=new L.Map("map",{attributionControl:!0,minZoom:0,maxZoom:configs.maxMapZoom,worldCopyJump:!1});const S=settings.tile_server,D=configs.tileServerAttribution,H=new L.TileLayer(S,{attribution:D,noWrap:!0,maxNativeZoom:19,maxZoom:B.map.options.maxZoom});B.attribControl=new L.Control.Attribution({prefix:!1}),B.attribControl.addAttribution(D);const P=new L.LatLng(settings.coords_lat,settings.coords_lon);B.map.setView(P,settings.coords_zoom).addLayer(H),B.map.tile_layer=H,B.map.inv_opacity_layer=L.tileLayer("data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==").setOpacity(1-settings.background_opacity),settings.background_opacity!=1&&B.map.inv_opacity_layer.addTo(B.map),B.scaleControl=new L.Control.Scale({metric:!0,imperial:!1}),B.scaleControl.addTo(B.map),B.map.on("moveend",()=>{settings.coords_lat=B.map.getCenter().lat,settings.coords_lon=B.map.getCenter().lng,settings.coords_zoom=B.map.getZoom(),settings.save()}),$("#dataviewer > div#data")[0].style.zIndex=-1001,$(".tabs li").bind("click",G=>{$(G.target).hasClass("is-active")||($("#dataviewer > div#data")[0].style.zIndex=-1*$("#dataviewer > div#data")[0].style.zIndex,$(".tabs li").toggleClass("is-active"))}),$(document).keydown(G=>B.onKeyPress(G));const R=L.Control.extend({options:{position:"topleft"},onAdd(){const G=L.DomUtil.create("div","leaflet-control-buttons leaflet-bar");let X=L.DomUtil.create("a","leaflet-control-buttons-fitdata leaflet-bar-part leaflet-bar-part-top",G);return $('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.zoom_to_data"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",()=>{try{B.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(),{maxZoom:18})}catch{}return!1},B.map),X=L.DomUtil.create("a","leaflet-control-buttons-myloc leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.localize_user"),window.isSecureContext||(X.className+=" disabled",X.setAttribute("data-t","[title]map_controlls.localize_user_disabled")),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",()=>{try{navigator.geolocation.getCurrentPosition(ee=>{const Ae=new L.LatLng(ee.coords.latitude,ee.coords.longitude);B.map.setView(Ae,settings.coords_zoom)})}catch{}return!1},B.map),X=L.DomUtil.create("a","leaflet-control-buttons-bboxfilter leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.select_bbox"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>($(ee.target).parent().hasClass("disabled")||(B.map.bboxfilter.isEnabled()?B.map.bboxfilter.disable():(B.map.bboxfilter.setBounds(B.map.getBounds().pad(-.2)),B.map.bboxfilter.enable()),$(ee.target).toggleClass("fa-times-circle").toggleClass("fa-image")),!1),B.map),X=L.DomUtil.create("a","leaflet-control-buttons-fullscreen leaflet-bar-part",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.toggle_wide_map"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>($("#dataviewer").toggleClass("fullscreen"),B.map.invalidateSize(),$(ee.target).toggleClass("fa-step-forward").toggleClass("fa-step-backward"),$("#editor").toggleClass("hidden"),$("#editor").resizable("option","disabled")?$("#editor").resizable("enable"):$("#editor").resizable("disable"),!1),B.map),X=L.DomUtil.create("a","leaflet-control-buttons-clearoverlay leaflet-bar-part leaflet-bar-part-bottom",G),$('').appendTo($(X)),X.href="#",X.className+=" t",X.setAttribute("data-t","[title]map_controlls.toggle_data"),i18n.translate_ui(X),L.DomEvent.addListener(X,"click",ee=>(ee.preventDefault(),B.map.hasLayer(overpass.osmLayer)?B.map.removeLayer(overpass.osmLayer):B.map.addLayer(overpass.osmLayer),!1),B.map),G}});B.map.addControl(new R),$(".leaflet-control-buttons > a").bind("dblclick",G=>G.stopPropagation()),$(".leaflet-control-buttons > a").tooltip({items:"a[title]",hide:{effect:"fadeOut",duration:100},position:{my:"left+5 center",at:"right center"}});const Y=L.Control.extend({options:{position:"topright"},onAdd(){const G=L.DomUtil.create("div","leaflet-control-search control has-icons-left");G.style.position="absolute",G.style.right="0";const X=L.DomUtil.create("input","input is-rounded",G);return $('').click(function(){$(this).prev().autocomplete("search")}).insertAfter(X),X.id="search",X.type="search",X.onclick=function(){this.focus()},G.ondblclick=function(ee){ee.stopPropagation()},$(X).autocomplete({source(ee,Ae){$.ajax(`https://search.osmnames.org/q/${encodeURIComponent(ee.term)}.js?key=${configs.osmnamesApiKey}`,{success(le){if(typeof le=="string")try{le=$.parseJSON(le)}catch{}Ae($.map(le.results.slice(0,10),ae=>({label:ae.display_name,value:ae.display_name,lat:ae.lat,lon:ae.lon,boundingbox:ae.boundingbox})))},error(){console.error("An error occured while contacting the search server osmnames.org :(")}})},minLength:2,autoFocus:!0,select(ee,Ae){return Ae.item.boundingbox&&Ae.item.boundingbox instanceof Array?B.map.fitBounds(L.latLngBounds([[Ae.item.boundingbox[1],Ae.item.boundingbox[0]],[Ae.item.boundingbox[3],Ae.item.boundingbox[2]]]),{maxZoom:18}):B.map.panTo(new L.LatLng(Ae.item.lat,Ae.item.lon)),this.value="",!1},open(){$(this).removeClass("ui-corner-all").addClass("ui-corner-top")},close(){$(this).addClass("ui-corner-all").removeClass("ui-corner-top")}}),$(X).autocomplete("option","delay",20),G}});B.map.addControl(new Y),$('').addClass("crosshairs").hide().appendTo("#map"),settings.enable_crosshairs&&$(".crosshairs").show(),B.map.bboxfilter=new L.LocationFilter({enable:!1,adjustButton:!1,enableButton:!1}).addTo(B.map),B.map.on("popupopen popupclose",G=>{if(typeof G.popup.layer<"u"){const X=G.popup.layer.placeholder||G.popup.layer,ee=overpass.osmLayer._baseLayer.options.style(X.feature,G.type=="popupopen");typeof X.eachLayer!="function"?typeof X.setStyle=="function"&&X.setStyle(ee):X.eachLayer(Ae=>{typeof Ae.setStyle=="function"&&Ae.setStyle(ee)})}}),overpass.init(),overpass.handlers.onProgress=function(G,X){B.waiter.addInfo(G,X)},overpass.handlers.onDone=function(){const G=B.getRawQuery().match(/@name ([^\n]+)/),X=G?`${G[1]} | `:"";B.waiter.close(X);const ee=B.map.getBounds(),Ae=overpass.osmLayer.getBaseLayer().getBounds();if(Ae.isValid()&&!ee.intersects(Ae)){const le=$(".leaflet-control-buttons-fitdata").tooltip("option","content");$(".leaflet-control-buttons-fitdata").tooltip("option","content",`← ${i18n.t("map_controlls.suggest_zoom_to_data")}`),$(".leaflet-control-buttons-fitdata").tooltip("open"),$(".leaflet-control-buttons-fitdata").tooltip("option","hide",{effect:"fadeOut",duration:1e3}),setTimeout(()=>{$(".leaflet-control-buttons-fitdata").tooltip("option","content",le),$(".leaflet-control-buttons-fitdata").tooltip("close"),$(".leaflet-control-buttons-fitdata").tooltip("option","hide",{effect:"fadeOut",duration:100})},2600)}},overpass.handlers.onEmptyMap=function(G,X){const ee=B.getRawQuery(),Ae=/out[^;]+?count/.test(ee);if(G=="no visible data")if(!Ae&&!settings.no_autorepair){const le=`

    ${i18n.t("warning.incomplete.expl.1")}

    ${i18n.t("warning.incomplete.expl.2")}

     ${i18n.t("warning.incomplete.not_again")}

    `,ae=[{name:i18n.t("dialog.repair_query"),callback(){B.repairQuery("no visible data")}},{name:i18n.t("dialog.show_data"),callback(){var ge,fe;(fe=(ge=$("input[name=hide_incomplete_data_warning]"))==null?void 0:ge[0])!=null&&fe.checked&&(settings.no_autorepair=!0,settings.save()),B.switchTab("Data")}}];showDialog(i18n.t("warning.incomplete.title"),le,ae)}else Ae&&B.switchTab("Data");G=="only areas returned"&&B.switchTab("Data"),G=="no coordinates returned"&&B.switchTab("Data"),X=="unknown"&&B.switchTab("Data"),$(`
    ${i18n.t("map.intentionally_blank")} (${G})
    `).appendTo("#map")},overpass.handlers.onDataReceived=function(G,X,ee,Ae){if(G>1e6){B.waiter.close();const le=document.title;document.title=`❗ ${le}`;const ae=[{name:i18n.t("dialog.abort"),callback(){document.title=le,ee()}},{name:i18n.t("dialog.continue_anyway"),callback(){document.title=le,Ae()}}],ge=`

    ${i18n.t("warning.huge_data.expl.1").replace("{{amount_txt}}",X)}

    ${i18n.t("warning.huge_data.expl.2")}

    `;showDialog(i18n.t("warning.huge_data.title"),ge,ae)}else Ae()},overpass.handlers.onAbort=function(){B.waiter.close()},overpass.handlers.onAjaxError=function(G){B.waiter.close();const X=document.title;document.title=`❗ ${X}`;const ee=[{name:i18n.t("dialog.dismiss"),callback(){document.title=X}}],Ae=`

    ${i18n.t("error.ajax.expl")}

    ${G}`;showDialog(i18n.t("error.ajax.title"),Ae,ee),overpass.resultText&&B.dataViewer.setValue(overpass.resultText)},overpass.handlers.onQueryError=function(G){B.waiter.close();const X=document.title;document.title=`❗ ${X}`;const ee=[{name:i18n.t("dialog.dismiss"),callback(){document.title=X}}],Ae=`
    ${i18n.t("error.query.expl")}
    ${G}
    `;showDialog(i18n.t("error.query.title"),Ae,ee)},overpass.handlers.onStyleError=function(G){const X=[{name:i18n.t("dialog.dismiss")}],ee=`

    ${i18n.t("error.mapcss.expl")}

    ${G}`;showDialog(i18n.t("error.mapcss.title"),ee,X)},overpass.handlers.onQueryErrorLine=function(G){B.highlightError(G)},overpass.handlers.onRawDataPresent=function(){B.dataViewer.setOption("mode",overpass.resultType),B.dataViewer.setValue(overpass.resultText)},overpass.handlers.onGeoJsonReady=function(){if(B.map.addLayer(overpass.osmLayer),typeof B.run_query_on_startup=="function"&&B.run_query_on_startup(),settings.show_data_stats){const G=overpass.stats,X=`${i18n.t("data_stats.loaded")} – ${i18n.t("data_stats.nodes")}: ${G.data.nodes}, ${i18n.t("data_stats.ways")}: ${G.data.ways}, ${i18n.t("data_stats.relations")}: ${G.data.relations}${G.data.areas>0?`, ${i18n.t("data_stats.areas")}: ${G.data.areas}`:""}
    ${i18n.t("data_stats.displayed")} – ${i18n.t("data_stats.pois")}: ${G.geojson.pois}, ${i18n.t("data_stats.lines")}: ${G.geojson.lines}, ${i18n.t("data_stats.polygons")}: ${G.geojson.polys}`;$(`
    ${X}
    `).insertAfter("#map .leaflet-control-attribution");const ee=overpass.timestamp&&Date.now()-Date.parse(overpass.timestamp),Ae=overpass.timestampAreas&&Date.now()-Date.parse(overpass.timestampAreas);$("#data_stats").tooltip({items:"div",tooltipClass:"stats",content(){let le="
    ";if(overpass.ajax_request_duration){let ae=overpass.ajax_request_duration;ae.toLocaleString&&(ae=ae.toLocaleString()),le+=`${i18n.t("data_stats.request_duration")}: ${ae}ms
    `}return overpass.timestamp&&(le+=`${i18n.t("data_stats.lag")}: ${Math.floor(ee/1e3)}s ${i18n.t("data_stats.lag.expl")}`),overpass.timestampAreas&&(le+=`
    ${i18n.t("data_stats.lag_areas")}: ${Math.floor(Ae/1e3)}s ${i18n.t("data_stats.lag.expl")}`),le+="
    ",le},hide:{effect:"fadeOut",duration:100},position:{my:"right bottom-5",at:"right top"}}),(ee>24*60*60*1e3||Ae>96*60*60*1e3)&&$("#data_stats").css("background-color","yellow")}},overpass.handlers.onPopupReady=function(G){G.openOn(B.map)},B.waiter.close(),B.run_query_on_startup===!0&&(B.update_map(),!x.has_coords&&x.has_query&&x.query.match(/\{\{(bbox|center)\}\}/)===null&&(B.run_query_on_startup=function(){B.run_query_on_startup=null;try{B.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(),{maxZoom:18})}catch{}}))}onNominatimError(B,x){this.waiter.close();let Q=this.getRawQuery();Q=Q.split(` `),Q.forEach((H,P)=>{H.indexOf(`{{geocode${x}:${B}}}`)!==-1&&this.highlightError(P+1)});const S=[{name:i18n.t("dialog.dismiss")}],D=`

    ${i18n.t("error.nominatim.expl")}

    ${htmlentities(B)}

    `;showDialog(i18n.t("error.nominatim.title"),D,S)}getRawQuery(){return this.codeEditor.getValue()}async getQuery(){let B=this.getRawQuery();B=B.replace(/(]+bbox[^=]*=[^"'']*["'])({{bbox}})(["'])/,"$1{{__bbox__global_bbox_xml__ezs4K8__}}$3"),B=await this.queryParser.parse(B,shortcuts());let x="";this.queryParser.hasStatement("style")&&(x=this.queryParser.getStatement("style")),this.mapcss=x;let Q=null;if(this.queryParser.hasStatement("data")){Q=this.queryParser.getStatement("data"),Q=Q.split(",");const S=Q[0].toLowerCase();Q=Q.slice(1);const D={};for(const H of Q){const P=H.split("=");D[P[0]]=P[1]}Q={mode:S,options:D}}return this.data_source=Q,B}setQuery(B){this.codeEditor.setValue(B)}getQueryLang(){return $.trim(this.getRawQuery().replace(/{{.*?}}/g,"")).match(/^{delete settings.saves[B],settings.save(),this.onLoadClick()}},{name:i18n.t("dialog.cancel")}],Q=`

    ${i18n.t("dialog.delete_query.expl")}: "${B}"?

    `;showDialog(i18n.t("dialog.delete_query.title"),Q,x)}removeExampleSync(B,x){const Q=[{name:i18n.t("dialog.delete"),callback(){sync.delete(B.name,D=>{if(D)return console.error(D);$(x).parent().remove()})}},{name:i18n.t("dialog.cancel")}],S=`

    ${i18n.t("dialog.delete_query.expl-osm")}: "${B.name}"?

    `;showDialog(i18n.t("dialog.delete_query.title"),S,Q)}onLoadClick(){const B=this;$("#load-dialog .panel.saved_query .panel-block").remove(),$("#load-dialog .panel.example .panel-block").remove();let x=!1;for(const Q in settings.saves){const S=settings.saves[Q].type;S!="template"&&($('').attr("href","#").text(Q).on("click",()=>(B.loadExample(Q),$("#load-dialog").removeClass("is-active"),!1)).append($('`).on("click",()=>{B.loadOsmQueries()})).appendTo(Q)):Q.hide()}}loadOsmQueries(){const B=this,x=$("#load-dialog .panel.osm-queries");x.show(),x.find(".panel-block").remove(),$('
    ').text(i18n.t("load.saved_queries-osm-loading")).appendTo(x),sync.load((Q,S)=>{if(Q)return x.find(".panel-block").remove(),$('
    ').text(i18n.t("load.saved_queries-osm-error")).appendTo(x),console.error(Q);x.find(".panel-block").remove(),$("#logout").show(),$("#logout").appendTo($("#logout").parent()),S.forEach(D=>{$('').attr("href","#").text(D.name).on("click",()=>(B.setQuery(lzw_decode(Base64.decode(D.query))),$("#load-dialog").removeClass("is-active"),!1)).append($('\\\n \\\n
    \\\n ${content}\\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n `;\n\n // Create modal in body\n const element = $(dialogContent);\n // Handle close event\n $(\".delete\", element).click(() => $(element).remove());\n\n // Add all the buttons\n for (const index in buttons) {\n const button = buttons[index];\n $(``)\n .click(() => {\n button.callback?.();\n // destroy modal dialog after callback, see #528\n $(element).remove();\n })\n .appendTo($(\"footer .level-item\", element));\n }\n\n // Add the element to the body\n element.appendTo(\"body\");\n}\n\nclass IDE {\n // == private members ==\n private attribControl = null;\n private scaleControl = null;\n private queryParser = new Query();\n private run_query_on_startup = false;\n // == public members ==\n codeEditor = null;\n dataViewer = null;\n map: L.Map = null;\n\n // == public sub objects ==\n\n waiter = new (class Waiter {\n opened = true;\n frames = [\"◴\", \"◷\", \"◶\", \"◵\"];\n frameDelay = 250;\n onAbort = undefined;\n interval = 0;\n _initialTitle = document.title;\n\n open(show_info) {\n if (show_info) {\n $(\".modal .wait-info h4\").text(show_info);\n $(\".wait-info\").show();\n } else {\n $(\".wait-info\").hide();\n }\n $(\"#loading-dialog\").addClass(\"is-active\");\n document.title = `${this.frames[0]} ${this._initialTitle}`;\n let f = 0;\n this.interval = setInterval(() => {\n const title = this.isAlert\n ? this.alertFrame\n : this.frames[++f % this.frames.length];\n document.title = `${title} ${this._initialTitle}`;\n }, this.frameDelay);\n this.opened = true;\n }\n close(title_prefix = \"\") {\n if (!this.opened) return;\n clearInterval(this.interval);\n document.title = `${title_prefix}${this._initialTitle}`;\n $(\"#loading-dialog\").removeClass(\"is-active\");\n $(\".wait-info ul li\").remove();\n delete this.onAbort;\n this.opened = false;\n }\n addInfo(txt, abortCallback) {\n $(\"#aborter\").remove(); // remove previously added abort button, which cannot be used anymore.\n $(\".wait-info ul li:nth-child(n+1)\").css(\"opacity\", 0.5);\n $(\".wait-info ul li span.fas\")\n .removeClass(\"fa-spinner\")\n .removeClass(\"fa-spin\")\n .addClass(\"fa-check\");\n $(\".wait-info ul li:nth-child(n+4)\").hide();\n const li = $(\n `
  • ${txt}
  • `\n );\n if (typeof abortCallback == \"function\") {\n this.onAbort = abortCallback;\n const aborter = $(\n ' (
    abort)
    '\n ).on(\"click\", () => {\n this.abort();\n return false;\n });\n li.append(aborter);\n }\n $(\".wait-info ul\").prepend(li);\n }\n abort() {\n if (typeof this.onAbort == \"function\") {\n this.addInfo(\"aborting\");\n this.onAbort(this.close);\n }\n }\n })();\n\n // == public methods ==\n\n init() {\n this.waiter.addInfo(\"ide starting up\");\n $(\"#overpass-turbo-version\").html(\n `overpass-turbo ${GIT_VERSION}` // eslint-disable-line no-undef\n );\n $(\"#overpass-turbo-dependencies\").html(\n APP_DEPENDENCIES // eslint-disable-line no-undef\n );\n // (very raw) compatibility check <- TODO: put this into its own function\n if (\n jQuery.support.cors != true ||\n //typeof localStorage != \"object\" ||\n typeof (function () {\n let ls = undefined;\n try {\n localStorage.setItem(\"startup_localstorage_quota_test\", 123);\n localStorage.removeItem(\"startup_localstorage_quota_test\");\n ls = localStorage;\n } catch (e) {}\n return ls;\n })() != \"object\" ||\n false\n ) {\n // the currently used browser is not capable of running the IDE. :(\n this.not_supported = true;\n $(\"#warning-unsupported-browser\").addClass(\"is-active\");\n }\n // load settings\n this.waiter.addInfo(\"load settings\");\n settings.load();\n // translate ui\n this.waiter.addInfo(\"translate ui\");\n i18n.translate().then(() => this.initAfterI18n());\n\n if (sync.enabled) {\n $(\"#load-dialog .osm\").show();\n if (sync.authenticated()) {\n $(\"#logout\").show();\n $(\"#logout\").appendTo($(\"#logout\").parent());\n }\n }\n }\n\n initAfterI18n() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n // parse url string parameters\n ide.waiter.addInfo(\"parse url parameters\");\n const args = urlParameters();\n // set appropriate settings\n if (args.has_coords) {\n // map center coords set via url\n settings.coords_lat = args.coords.lat;\n settings.coords_lon = args.coords.lng;\n }\n if (args.has_zoom) {\n // map zoom set via url\n settings.coords_zoom = args.zoom;\n }\n if (args.run_query) {\n // query autorun activated via url\n ide.run_query_on_startup = true;\n }\n settings.save();\n\n ide.waiter.addInfo(\"initialize page\");\n // init page layout\n const isInitialAspectPortrait =\n $(window).width() / $(window).height() < 0.8;\n if (settings.editor_width != \"\" && !isInitialAspectPortrait) {\n $(\"#editor\").css(\"width\", settings.editor_width);\n $(\"#dataviewer\").css(\"left\", settings.editor_width);\n }\n if (isInitialAspectPortrait) {\n $(\"#editor, #dataviewer\").addClass(\"portrait\");\n }\n // make panels resizable\n $(\"#editor\").resizable({\n handles: isInitialAspectPortrait ? \"s\" : \"e\",\n minWidth: isInitialAspectPortrait ? undefined : \"200\",\n resize() {\n if (!isInitialAspectPortrait) {\n $(this)\n .next()\n .css(\"left\", `${$(this).outerWidth()}px`);\n } else {\n const top = $(this).offset().top + $(this).outerHeight();\n $(this).next().css(\"top\", `${top}px`);\n }\n ide.map.invalidateSize(false);\n },\n stop() {\n if (isInitialAspectPortrait) return;\n settings.editor_width = $(\"#editor\").css(\"width\");\n settings.save();\n }\n });\n $(\"#editor\").prepend(\n \"\"\n );\n\n // init codemirror\n $(\"#editor textarea\")[0].value = settings.code[\"overpass\"];\n if (settings.use_rich_editor) {\n let pending = 0;\n CodeMirror.defineMIME(\"text/x-overpassQL\", {\n name: \"clike\",\n keywords: (function (str) {\n const r = {};\n const a = str.split(\" \");\n for (const ai of a) r[ai] = true;\n return r;\n })(\n \"out json xml custom popup timeout maxsize bbox\" + // initial declarations\n \" date diff adiff\" + //attic declarations\n \" foreach\" + // block statements\n \" relation rel way node is_in area around user uid newer changed poly pivot nwr nw nr wr derived\" + // queries\n \" out meta body skel tags ids count qt asc\" + // actions\n \" center bb geom\" // geometry types\n //+\"r w n br bw\" // recursors\n )\n });\n CodeMirror.defineMIME(\"text/x-overpassXML\", \"xml\");\n CodeMirror.defineMode(\"xml+mustache\", (config) =>\n CodeMirror.multiplexingMode(\n CodeMirror.multiplexingMode(CodeMirror.getMode(config, \"xml\"), {\n open: \"{{\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/plain\"),\n delimStyle: \"mustache\"\n }),\n {\n open: \"{{style:\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/css\"),\n delimStyle: \"mustache\"\n }\n )\n );\n CodeMirror.defineMode(\"ql+mustache\", (config) =>\n CodeMirror.multiplexingMode(\n CodeMirror.multiplexingMode(\n CodeMirror.getMode(config, \"text/x-overpassQL\"),\n {\n open: \"{{\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/plain\"),\n delimStyle: \"mustache\"\n }\n ),\n {\n open: \"{{style:\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/css\"),\n delimStyle: \"mustache\"\n }\n )\n );\n ide.codeEditor = CodeMirror.fromTextArea($(\"#editor textarea\")[0], {\n //value: settings.code[\"overpass\"],\n lineNumbers: true,\n lineWrapping: true,\n mode: \"text/plain\",\n onChange(e) {\n clearTimeout(pending);\n pending = setTimeout(() => {\n // update syntax highlighting mode\n if (ide.getQueryLang() == \"xml\") {\n if (e.getOption(\"mode\") != \"xml+mustache\") {\n e.closeTagEnabled = true;\n e.setOption(\"matchBrackets\", false);\n e.setOption(\"mode\", \"xml+mustache\");\n }\n } else {\n if (e.getOption(\"mode\") != \"ql+mustache\") {\n e.closeTagEnabled = false;\n e.setOption(\"matchBrackets\", true);\n e.setOption(\"mode\", \"ql+mustache\");\n }\n }\n // check for inactive ui elements\n const bbox_filter = $(\".leaflet-control-buttons-bboxfilter\");\n if (ide.getRawQuery().match(/\\{\\{bbox\\}\\}/)) {\n if (bbox_filter.hasClass(\"disabled\")) {\n bbox_filter.removeClass(\"disabled\");\n bbox_filter.attr(\"data-t\", \"[title]map_controlls.select_bbox\");\n i18n.translate_ui(bbox_filter[0]);\n }\n } else {\n if (!bbox_filter.hasClass(\"disabled\")) {\n bbox_filter.addClass(\"disabled\");\n bbox_filter.attr(\n \"data-t\",\n \"[title]map_controlls.select_bbox_disabled\"\n );\n i18n.translate_ui(bbox_filter[0]);\n }\n }\n }, 500);\n settings.code[\"overpass\"] = e.getValue();\n settings.save();\n },\n closeTagEnabled: true,\n closeTagIndent: [\n \"osm-script\",\n \"query\",\n \"union\",\n \"foreach\",\n \"difference\"\n ],\n extraKeys: {\n \"'>'\"(cm) {\n cm.closeTag(cm, \">\");\n },\n \"'/'\"(cm) {\n cm.closeTag(cm, \"/\");\n }\n }\n });\n // fire onChange after initialization\n ide.codeEditor.getOption(\"onChange\")(ide.codeEditor);\n } else {\n // use non-rich editor\n ide.codeEditor = $(\"#editor textarea\")[0];\n ide.codeEditor.getValue = function () {\n return this.value;\n };\n ide.codeEditor.setValue = function (v) {\n this.value = v;\n };\n ide.codeEditor.lineCount = function () {\n return this.value.split(/\\r\\n|\\r|\\n/).length;\n };\n ide.codeEditor.setLineClass = function () {};\n $(\"#editor textarea\").bind(\"input change\", (e) => {\n settings.code[\"overpass\"] = e.target.getValue();\n settings.save();\n });\n }\n // set query if provided as url parameter or template:\n if (args.has_query) {\n // query set via url\n ide.codeEditor.setValue(args.query);\n }\n // init dataviewer\n ide.dataViewer = CodeMirror($(\"#data\")[0], {\n value: \"no data loaded yet\",\n lineNumbers: true,\n readOnly: true,\n mode: \"javascript\"\n });\n\n // init leaflet\n ide.map = new L.Map(\"map\", {\n attributionControl: true,\n minZoom: 0,\n maxZoom: configs.maxMapZoom,\n worldCopyJump: false\n });\n const tilesUrl = settings.tile_server;\n const tilesAttrib = configs.tileServerAttribution;\n const tiles = new L.TileLayer(tilesUrl, {\n attribution: tilesAttrib,\n noWrap: true,\n maxNativeZoom: 19,\n maxZoom: ide.map.options.maxZoom\n });\n ide.attribControl = new L.Control.Attribution({prefix: false});\n ide.attribControl.addAttribution(tilesAttrib);\n const pos = new L.LatLng(settings.coords_lat, settings.coords_lon);\n ide.map.setView(pos, settings.coords_zoom).addLayer(tiles);\n ide.map.tile_layer = tiles;\n // inverse opacity layer\n ide.map.inv_opacity_layer = L.tileLayer(\n \"data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==\"\n ).setOpacity(1 - settings.background_opacity);\n if (settings.background_opacity != 1)\n ide.map.inv_opacity_layer.addTo(ide.map);\n ide.scaleControl = new L.Control.Scale({metric: true, imperial: false});\n ide.scaleControl.addTo(ide.map);\n ide.map.on(\"moveend\", () => {\n settings.coords_lat = ide.map.getCenter().lat;\n settings.coords_lon = ide.map.getCenter().lng;\n settings.coords_zoom = ide.map.getZoom();\n settings.save(); // save settings\n });\n\n // tabs\n $(\"#dataviewer > div#data\")[0].style.zIndex = -1001;\n $(\".tabs li\").bind(\"click\", (e) => {\n if ($(e.target).hasClass(\"is-active\")) {\n return;\n } else {\n $(\"#dataviewer > div#data\")[0].style.zIndex =\n -1 * $(\"#dataviewer > div#data\")[0].style.zIndex;\n $(\".tabs li\").toggleClass(\"is-active\");\n }\n });\n\n // keyboard event listener\n $(document).keydown((event) => ide.onKeyPress(event));\n\n // leaflet extension: more map controls\n const MapButtons = L.Control.extend({\n options: {\n position: \"topleft\"\n },\n onAdd() {\n // create the control container with a particular class name\n const container = L.DomUtil.create(\n \"div\",\n \"leaflet-control-buttons leaflet-bar\"\n );\n let link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-fitdata leaflet-bar-part leaflet-bar-part-top\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.zoom_to_data\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n () => {\n // hardcoded maxZoom of 18, should be ok for most real-world use-cases\n try {\n ide.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(), {\n maxZoom: 18\n });\n } catch (e) {}\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-myloc leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.localize_user\");\n if (!window.isSecureContext) {\n link.className += \" disabled\";\n link.setAttribute(\n \"data-t\",\n \"[title]map_controlls.localize_user_disabled\"\n );\n }\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n () => {\n // One-shot position request.\n try {\n navigator.geolocation.getCurrentPosition((position) => {\n const pos = new L.LatLng(\n position.coords.latitude,\n position.coords.longitude\n );\n ide.map.setView(pos, settings.coords_zoom);\n });\n } catch (e) {}\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-bboxfilter leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.select_bbox\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n if (\n $(e.target).parent().hasClass(\"disabled\") // check if this button is enabled\n )\n return false;\n if (!ide.map.bboxfilter.isEnabled()) {\n ide.map.bboxfilter.setBounds(ide.map.getBounds().pad(-0.2));\n ide.map.bboxfilter.enable();\n } else {\n ide.map.bboxfilter.disable();\n }\n $(e.target).toggleClass(\"fa-times-circle\").toggleClass(\"fa-image\");\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-fullscreen leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.toggle_wide_map\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n $(\"#dataviewer\").toggleClass(\"fullscreen\");\n ide.map.invalidateSize();\n $(e.target)\n .toggleClass(\"fa-step-forward\")\n .toggleClass(\"fa-step-backward\");\n $(\"#editor\").toggleClass(\"hidden\");\n if ($(\"#editor\").resizable(\"option\", \"disabled\"))\n $(\"#editor\").resizable(\"enable\");\n else $(\"#editor\").resizable(\"disable\");\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-clearoverlay leaflet-bar-part leaflet-bar-part-bottom\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.toggle_data\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n e.preventDefault();\n if (ide.map.hasLayer(overpass.osmLayer))\n ide.map.removeLayer(overpass.osmLayer);\n else ide.map.addLayer(overpass.osmLayer);\n return false;\n },\n ide.map\n );\n return container;\n }\n });\n ide.map.addControl(new MapButtons());\n // prevent propagation of doubleclicks on map controls\n $(\".leaflet-control-buttons > a\").bind(\"dblclick\", (e) =>\n e.stopPropagation()\n );\n // add tooltips to map controls\n $(\".leaflet-control-buttons > a\").tooltip({\n items: \"a[title]\",\n hide: {\n effect: \"fadeOut\",\n duration: 100\n },\n position: {\n my: \"left+5 center\",\n at: \"right center\"\n }\n });\n // leaflet extension: search box\n const SearchBox = L.Control.extend({\n options: {\n position: \"topright\"\n },\n onAdd() {\n const container = L.DomUtil.create(\n \"div\",\n \"leaflet-control-search control has-icons-left\"\n );\n container.style.position = \"absolute\";\n container.style.right = \"0\";\n const inp = L.DomUtil.create(\"input\", \"input is-rounded\", container);\n $('')\n .click(function () {\n $(this).prev().autocomplete(\"search\");\n })\n .insertAfter(inp);\n inp.id = \"search\";\n inp.type = \"search\";\n // hack against focus stealing leaflet :/\n inp.onclick = function () {\n this.focus();\n };\n // prevent propagation of doubleclicks to map container\n container.ondblclick = function (e) {\n e.stopPropagation();\n };\n // autocomplete functionality\n $(inp).autocomplete({\n source(request, response) {\n // ajax (GET) request to nominatim\n $.ajax(\n `https://search.osmnames.org/q/${encodeURIComponent(\n request.term\n )}.js?key=${configs.osmnamesApiKey}`,\n {\n success(data) {\n // hacky firefox hack :( (it is not properly detecting json from the content-type header)\n if (typeof data == \"string\") {\n // if the data is a string, but looks more like a json object\n try {\n data = $.parseJSON(data);\n } catch (e) {}\n }\n response(\n $.map(data.results.slice(0, 10), (item) => ({\n label: item.display_name,\n value: item.display_name,\n lat: item.lat,\n lon: item.lon,\n boundingbox: item.boundingbox\n }))\n );\n },\n error() {\n // todo: better error handling\n console.error(\n \"An error occured while contacting the search server osmnames.org :(\"\n );\n }\n }\n );\n },\n minLength: 2,\n autoFocus: true,\n select(event, ui) {\n if (ui.item.boundingbox && ui.item.boundingbox instanceof Array)\n ide.map.fitBounds(\n L.latLngBounds([\n [ui.item.boundingbox[1], ui.item.boundingbox[0]],\n [ui.item.boundingbox[3], ui.item.boundingbox[2]]\n ]),\n {maxZoom: 18}\n );\n else ide.map.panTo(new L.LatLng(ui.item.lat, ui.item.lon));\n this.value = \"\";\n return false;\n },\n open() {\n $(this).removeClass(\"ui-corner-all\").addClass(\"ui-corner-top\");\n },\n close() {\n $(this).addClass(\"ui-corner-all\").removeClass(\"ui-corner-top\");\n }\n });\n $(inp).autocomplete(\"option\", \"delay\", 20);\n return container;\n }\n });\n ide.map.addControl(new SearchBox());\n // add cross hairs to map\n $('')\n .addClass(\"crosshairs\")\n .hide()\n .appendTo(\"#map\");\n if (settings.enable_crosshairs) $(\".crosshairs\").show();\n\n ide.map.bboxfilter = new L.LocationFilter({\n enable: !true,\n adjustButton: false,\n enableButton: false\n }).addTo(ide.map);\n\n ide.map.on(\"popupopen popupclose\", (e) => {\n if (typeof e.popup.layer != \"undefined\") {\n const layer = e.popup.layer.placeholder || e.popup.layer;\n // re-call style handler to eventually modify the style of the clicked feature\n const stl = overpass.osmLayer._baseLayer.options.style(\n layer.feature,\n e.type == \"popupopen\"\n );\n if (typeof layer.eachLayer != \"function\") {\n if (typeof layer.setStyle == \"function\") layer.setStyle(stl); // other objects (pois, ways)\n } else\n layer.eachLayer((layer) => {\n if (typeof layer.setStyle == \"function\") layer.setStyle(stl);\n }); // for multipolygons!\n }\n });\n\n // init overpass object\n overpass.init();\n\n // event handlers for overpass object\n overpass.handlers[\"onProgress\"] = function (msg, abortcallback) {\n ide.waiter.addInfo(msg, abortcallback);\n };\n overpass.handlers[\"onDone\"] = function () {\n const name_match = ide.getRawQuery().match(/@name ([^\\n]+)/);\n // parse document title from @name in query\n const title_prefix = name_match ? `${name_match[1]} | ` : \"\";\n ide.waiter.close(title_prefix);\n const map_bounds = ide.map.getBounds();\n const data_bounds = overpass.osmLayer.getBaseLayer().getBounds();\n if (data_bounds.isValid() && !map_bounds.intersects(data_bounds)) {\n // show tooltip for button \"zoom to data\"\n const prev_content = $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\"\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\",\n `← ${i18n.t(\"map_controlls.suggest_zoom_to_data\")}`\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"open\");\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"option\", \"hide\", {\n effect: \"fadeOut\",\n duration: 1000\n });\n setTimeout(() => {\n $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\",\n prev_content\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"close\");\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"option\", \"hide\", {\n effect: \"fadeOut\",\n duration: 100\n });\n }, 2600);\n }\n };\n overpass.handlers[\"onEmptyMap\"] = function (empty_msg, data_mode) {\n // get the current query\n const query = ide.getRawQuery();\n\n // check if 'out' followed by any number of characters (non-greedy) and then 'count' is present in the query\n const isCountPresent = /out[^;]+?count/.test(query);\n\n // show warning/info if only invisible data is returned and 'out...count' is not present in the query\n if (empty_msg == \"no visible data\") {\n if (!isCountPresent && !settings.no_autorepair) {\n const content = `

    ${i18n.t(\n \"warning.incomplete.expl.1\"\n )}

    ${i18n.t(\n \"warning.incomplete.expl.2\"\n )}

     ${i18n.t(\n \"warning.incomplete.not_again\"\n )}

    `;\n\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.repair_query\"),\n callback() {\n ide.repairQuery(\"no visible data\");\n }\n },\n {\n name: i18n.t(\"dialog.show_data\"),\n callback() {\n if (\n $(\"input[name=hide_incomplete_data_warning]\")?.[0]?.checked\n ) {\n settings.no_autorepair = true;\n settings.save();\n }\n ide.switchTab(\"Data\");\n }\n }\n ];\n showDialog(\n i18n.t(\"warning.incomplete.title\"),\n content,\n dialog_buttons\n );\n } else if (isCountPresent) {\n ide.switchTab(\"Data\");\n }\n }\n // auto tab switching (if only areas are returned)\n if (empty_msg == \"only areas returned\") ide.switchTab(\"Data\");\n // auto tab switching (if nodes without coordinates are returned)\n if (empty_msg == \"no coordinates returned\") ide.switchTab(\"Data\");\n // auto tab switching (if unstructured data is returned)\n if (data_mode == \"unknown\") ide.switchTab(\"Data\");\n // display empty map badge\n $(\n `
    ${i18n.t(\n \"map.intentionally_blank\"\n )} (${empty_msg})
    `\n ).appendTo(\"#map\");\n };\n overpass.handlers[\"onDataReceived\"] = function (\n amount,\n amount_txt,\n abortCB,\n continueCB\n ) {\n if (amount > 1000000) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n // more than ~1MB of data\n // show warning dialog\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.abort\"),\n callback() {\n document.title = _originalDocumentTitle;\n abortCB();\n }\n },\n {\n name: i18n.t(\"dialog.continue_anyway\"),\n callback() {\n document.title = _originalDocumentTitle;\n continueCB();\n }\n }\n ];\n\n const content = `

    ${i18n\n .t(\"warning.huge_data.expl.1\")\n .replace(\"{{amount_txt}}\", amount_txt)}

    ${i18n.t(\n \"warning.huge_data.expl.2\"\n )}

    `;\n showDialog(i18n.t(\"warning.huge_data.title\"), content, dialog_buttons);\n } else continueCB();\n };\n overpass.handlers[\"onAbort\"] = function () {\n ide.waiter.close();\n };\n overpass.handlers[\"onAjaxError\"] = function (errmsg) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n // show error dialog\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.dismiss\"),\n callback() {\n document.title = _originalDocumentTitle;\n }\n }\n ];\n\n const content = `

    ${i18n.t(\n \"error.ajax.expl\"\n )}

    ${errmsg}`;\n showDialog(i18n.t(\"error.ajax.title\"), content, dialog_buttons);\n\n // print error text, if present\n if (overpass.resultText) ide.dataViewer.setValue(overpass.resultText);\n };\n overpass.handlers[\"onQueryError\"] = function (errmsg) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.dismiss\"),\n callback() {\n document.title = _originalDocumentTitle;\n }\n }\n ];\n const content = `
    ${i18n.t(\n \"error.query.expl\"\n )}
    ${errmsg}
    `;\n showDialog(i18n.t(\"error.query.title\"), content, dialog_buttons);\n };\n overpass.handlers[\"onStyleError\"] = function (errmsg) {\n const dialog_buttons = [{name: i18n.t(\"dialog.dismiss\")}];\n const content = `

    ${i18n.t(\n \"error.mapcss.expl\"\n )}

    ${errmsg}`;\n showDialog(i18n.t(\"error.mapcss.title\"), content, dialog_buttons);\n };\n overpass.handlers[\"onQueryErrorLine\"] = function (linenumber) {\n ide.highlightError(linenumber);\n };\n overpass.handlers[\"onRawDataPresent\"] = function () {\n ide.dataViewer.setOption(\"mode\", overpass.resultType);\n ide.dataViewer.setValue(overpass.resultText);\n };\n overpass.handlers[\"onGeoJsonReady\"] = function () {\n // show layer\n ide.map.addLayer(overpass.osmLayer);\n // autorun callback (e.g. zoom to data)\n if (typeof ide.run_query_on_startup === \"function\") {\n ide.run_query_on_startup();\n }\n // display stats\n if (settings.show_data_stats) {\n const stats = overpass.stats;\n const stats_txt =\n `${i18n.t(\"data_stats.loaded\")} – ` +\n `${i18n.t(\"data_stats.nodes\")}: ${stats.data.nodes}, ${i18n.t(\n \"data_stats.ways\"\n )}: ${stats.data.ways}, ${i18n.t(\n \"data_stats.relations\"\n )}: ${stats.data.relations}${\n stats.data.areas > 0\n ? `, ${i18n.t(\"data_stats.areas\")}: ${stats.data.areas}`\n : \"\"\n }
    ` +\n `${i18n.t(\n \"data_stats.displayed\"\n )} – ` +\n `${i18n.t(\"data_stats.pois\")}: ${stats.geojson.pois}, ${i18n.t(\n \"data_stats.lines\"\n )}: ${stats.geojson.lines}, ${i18n.t(\n \"data_stats.polygons\"\n )}: ${stats.geojson.polys}`;\n $(\n `
    ${stats_txt}
    `\n ).insertAfter(\"#map .leaflet-control-attribution\");\n // show more stats as a tooltip\n const backlogOverpass =\n overpass.timestamp && Date.now() - Date.parse(overpass.timestamp);\n const backlogOverpassAreas =\n overpass.timestampAreas &&\n Date.now() - Date.parse(overpass.timestampAreas);\n $(\"#data_stats\").tooltip({\n items: \"div\",\n tooltipClass: \"stats\",\n content() {\n let str = \"
    \";\n if (overpass.ajax_request_duration) {\n let duration = overpass.ajax_request_duration;\n if (duration.toLocaleString) {\n duration = duration.toLocaleString();\n }\n str += `${i18n.t(\n \"data_stats.request_duration\"\n )}: ${duration}ms
    `;\n }\n if (overpass.timestamp) {\n str +=\n `${i18n.t(\"data_stats.lag\")}: ${Math.floor(\n backlogOverpass / 1000\n )}s` + ` ${i18n.t(\"data_stats.lag.expl\")}`;\n }\n if (overpass.timestampAreas) {\n str +=\n `
    ${i18n.t(\"data_stats.lag_areas\")}: ${Math.floor(\n backlogOverpassAreas / 1000\n )}s` + ` ${i18n.t(\"data_stats.lag.expl\")}`;\n }\n str += \"
    \";\n return str;\n },\n hide: {\n effect: \"fadeOut\",\n duration: 100\n },\n position: {\n my: \"right bottom-5\",\n at: \"right top\"\n }\n });\n if (\n backlogOverpass > 24 * 60 * 60 * 1000 ||\n backlogOverpassAreas > 96 * 60 * 60 * 1000\n ) {\n $(\"#data_stats\").css(\"background-color\", \"yellow\");\n }\n }\n };\n overpass.handlers[\"onPopupReady\"] = function (p) {\n p.openOn(ide.map);\n };\n\n // close startup waiter\n ide.waiter.close();\n\n // run the query immediately, if the appropriate flag was set.\n if (ide.run_query_on_startup === true) {\n ide.update_map();\n // automatically zoom to data.\n if (\n !args.has_coords &&\n args.has_query &&\n args.query.match(/\\{\\{(bbox|center)\\}\\}/) === null\n ) {\n ide.run_query_on_startup = function () {\n ide.run_query_on_startup = null;\n // hardcoded maxZoom of 18, should be ok for most real-world use-cases\n try {\n ide.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(), {\n maxZoom: 18\n });\n } catch (e) {}\n // todo: zoom only to specific zoomlevel if args.has_zoom is given\n };\n }\n }\n } // init()\n\n onNominatimError(search, type) {\n // close waiter\n this.waiter.close();\n // highlight error lines\n let query = this.getRawQuery();\n query = query.split(\"\\n\");\n query.forEach((line, i) => {\n if (line.indexOf(`{{geocode${type}:${search}}}`) !== -1)\n this.highlightError(i + 1);\n });\n // show error message dialog\n const dialog_buttons = [{name: i18n.t(\"dialog.dismiss\")}];\n const content = `

    ${i18n.t(\n \"error.nominatim.expl\"\n )}

    ${htmlentities(search)}

    `;\n showDialog(i18n.t(\"error.nominatim.title\"), content, dialog_buttons);\n }\n\n /* this returns the current raw query in the editor.\n * shortcuts are not expanded. */\n getRawQuery() {\n return this.codeEditor.getValue();\n }\n\n /* this returns the current query in the editor.\n * shortcuts are expanded. */\n async getQuery(): Promise {\n let query = this.getRawQuery();\n // parse query and process shortcuts\n // special handling for global bbox in xml queries (which uses an OverpassQL-like notation instead of n/s/e/w parameters):\n query = query.replace(\n /(]+bbox[^=]*=[^\"'']*[\"'])({{bbox}})([\"'])/,\n \"$1{{__bbox__global_bbox_xml__ezs4K8__}}$3\"\n );\n query = await this.queryParser.parse(query, shortcuts());\n // parse mapcss declarations\n let mapcss = \"\";\n if (this.queryParser.hasStatement(\"style\"))\n mapcss = this.queryParser.getStatement(\"style\");\n this.mapcss = mapcss;\n // parse data-source statements\n let data_source = null;\n if (this.queryParser.hasStatement(\"data\")) {\n data_source = this.queryParser.getStatement(\"data\");\n data_source = data_source.split(\",\");\n const data_mode = data_source[0].toLowerCase();\n data_source = data_source.slice(1);\n const options = {};\n for (const src of data_source) {\n const tmp = src.split(\"=\");\n options[tmp[0]] = tmp[1];\n }\n data_source = {\n mode: data_mode,\n options: options\n };\n }\n this.data_source = data_source;\n return query;\n }\n\n setQuery(query) {\n this.codeEditor.setValue(query);\n }\n getQueryLang() {\n if ($.trim(this.getRawQuery().replace(/{{.*?}}/g, \"\")).match(/^ {\n delete settings.saves[ex];\n settings.save();\n this.onLoadClick();\n }\n },\n {name: i18n.t(\"dialog.cancel\")}\n ];\n\n const content =\n `

    ` +\n `${i18n.t(\n \"dialog.delete_query.expl\"\n )}: "${ex}"?

    `;\n showDialog(i18n.t(\"dialog.delete_query.title\"), content, dialog_buttons);\n }\n removeExampleSync(query, self) {\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.delete\"),\n callback() {\n sync.delete(query.name, (err) => {\n if (err) return console.error(err);\n\n $(self).parent().remove();\n });\n }\n },\n {\n name: i18n.t(\"dialog.cancel\")\n }\n ];\n\n const content = `

    ${i18n.t(\n \"dialog.delete_query.expl-osm\"\n )}: "${query.name}"?

    `;\n showDialog(i18n.t(\"dialog.delete_query.title\"), content, dialog_buttons);\n }\n\n // Event handlers\n onLoadClick() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n $(\"#load-dialog .panel.saved_query .panel-block\").remove();\n $(\"#load-dialog .panel.example .panel-block\").remove();\n // load example list\n let has_saved_query = false;\n for (const example in settings.saves) {\n const type = settings.saves[example].type;\n if (type == \"template\") continue;\n $('')\n .attr(\"href\", \"#\")\n .text(example)\n .on(\"click\", () => {\n ide.loadExample(example);\n $(\"#load-dialog\").removeClass(\"is-active\");\n return false;\n })\n .append(\n $('`\n ).on(\"click\", () => {\n ide.loadOsmQueries();\n })\n )\n .appendTo(ui);\n } else {\n ui.hide();\n }\n }\n }\n loadOsmQueries() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n const ui = $(\"#load-dialog .panel.osm-queries\");\n ui.show();\n ui.find(\".panel-block\").remove();\n $('
    ')\n .text(i18n.t(\"load.saved_queries-osm-loading\"))\n .appendTo(ui);\n\n sync.load((err, queries) => {\n if (err) {\n ui.find(\".panel-block\").remove();\n $('
    ')\n .text(i18n.t(\"load.saved_queries-osm-error\"))\n .appendTo(ui);\n return console.error(err);\n }\n ui.find(\".panel-block\").remove();\n $(\"#logout\").show();\n $(\"#logout\").appendTo($(\"#logout\").parent());\n queries.forEach((q) => {\n $('')\n .attr(\"href\", \"#\")\n .text(q.name)\n .on(\"click\", () => {\n ide.setQuery(lzw_decode(Base64.decode(q.query)));\n $(\"#load-dialog\").removeClass(\"is-active\");\n return false;\n })\n .append(\n $('\\\n \\\n
    \\\n ${content}\\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n
    \\\n `;\n\n // Create modal in body\n const element = $(dialogContent);\n // Handle close event\n $(\".delete\", element).click(() => $(element).remove());\n\n // Add all the buttons\n for (const index in buttons) {\n const button = buttons[index];\n $(``)\n .click(() => {\n button.callback?.();\n // destroy modal dialog after callback, see #528\n $(element).remove();\n })\n .appendTo($(\"footer .level-item\", element));\n }\n\n // Add the element to the body\n element.appendTo(\"body\");\n}\n\nclass IDE {\n // == private members ==\n private attribControl = null;\n private scaleControl = null;\n private queryParser = new Query();\n private run_query_on_startup = false;\n // == public members ==\n codeEditor = null;\n dataViewer = null;\n map: L.Map = null;\n\n // == public sub objects ==\n\n waiter = new (class Waiter {\n opened = true;\n frames = [\"◴\", \"◷\", \"◶\", \"◵\"];\n frameDelay = 250;\n onAbort = undefined;\n interval = 0;\n _initialTitle = document.title;\n\n open(show_info) {\n if (show_info) {\n $(\".modal .wait-info h4\").text(show_info);\n $(\".wait-info\").show();\n } else {\n $(\".wait-info\").hide();\n }\n $(\"#loading-dialog\").addClass(\"is-active\");\n document.title = `${this.frames[0]} ${this._initialTitle}`;\n let f = 0;\n this.interval = setInterval(() => {\n const title = this.isAlert\n ? this.alertFrame\n : this.frames[++f % this.frames.length];\n document.title = `${title} ${this._initialTitle}`;\n }, this.frameDelay);\n this.opened = true;\n }\n close(title_prefix = \"\") {\n if (!this.opened) return;\n clearInterval(this.interval);\n document.title = `${title_prefix}${this._initialTitle}`;\n $(\"#loading-dialog\").removeClass(\"is-active\");\n $(\".wait-info ul li\").remove();\n delete this.onAbort;\n this.opened = false;\n }\n addInfo(txt, abortCallback) {\n $(\"#aborter\").remove(); // remove previously added abort button, which cannot be used anymore.\n $(\".wait-info ul li:nth-child(n+1)\").css(\"opacity\", 0.5);\n $(\".wait-info ul li span.fas\")\n .removeClass(\"fa-spinner\")\n .removeClass(\"fa-spin\")\n .addClass(\"fa-check\");\n $(\".wait-info ul li:nth-child(n+4)\").hide();\n const li = $(\n `
  • ${txt}
  • `\n );\n if (typeof abortCallback == \"function\") {\n this.onAbort = abortCallback;\n const aborter = $(\n ' (
    abort)
    '\n ).on(\"click\", () => {\n this.abort();\n return false;\n });\n li.append(aborter);\n }\n $(\".wait-info ul\").prepend(li);\n }\n abort() {\n if (typeof this.onAbort == \"function\") {\n this.addInfo(\"aborting\");\n this.onAbort(this.close);\n }\n }\n })();\n\n // == public methods ==\n\n init() {\n this.waiter.addInfo(\"ide starting up\");\n $(\"#overpass-turbo-version\").html(\n `overpass-turbo ${GIT_VERSION}` // eslint-disable-line no-undef\n );\n $(\"#overpass-turbo-dependencies\").html(\n APP_DEPENDENCIES // eslint-disable-line no-undef\n );\n // (very raw) compatibility check <- TODO: put this into its own function\n if (\n jQuery.support.cors != true ||\n //typeof localStorage != \"object\" ||\n typeof (function () {\n let ls = undefined;\n try {\n localStorage.setItem(\"startup_localstorage_quota_test\", 123);\n localStorage.removeItem(\"startup_localstorage_quota_test\");\n ls = localStorage;\n } catch (e) {}\n return ls;\n })() != \"object\" ||\n false\n ) {\n // the currently used browser is not capable of running the IDE. :(\n this.not_supported = true;\n $(\"#warning-unsupported-browser\").addClass(\"is-active\");\n }\n // load settings\n this.waiter.addInfo(\"load settings\");\n settings.load();\n // translate ui\n this.waiter.addInfo(\"translate ui\");\n i18n.translate().then(() => this.initAfterI18n());\n\n if (sync.enabled) {\n $(\"#load-dialog .osm\").show();\n if (sync.authenticated()) {\n $(\"#logout\").show();\n $(\"#logout\").appendTo($(\"#logout\").parent());\n }\n }\n }\n\n initAfterI18n() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n // parse url string parameters\n ide.waiter.addInfo(\"parse url parameters\");\n const args = urlParameters();\n // set appropriate settings\n if (args.has_coords) {\n // map center coords set via url\n settings.coords_lat = args.coords.lat;\n settings.coords_lon = args.coords.lng;\n }\n if (args.has_zoom) {\n // map zoom set via url\n settings.coords_zoom = args.zoom;\n }\n if (args.run_query) {\n // query autorun activated via url\n ide.run_query_on_startup = true;\n }\n settings.save();\n\n ide.waiter.addInfo(\"initialize page\");\n // init page layout\n const isInitialAspectPortrait =\n $(window).width() / $(window).height() < 0.8;\n if (settings.editor_width != \"\" && !isInitialAspectPortrait) {\n $(\"#editor\").css(\"width\", settings.editor_width);\n $(\"#dataviewer\").css(\"left\", settings.editor_width);\n }\n if (isInitialAspectPortrait) {\n $(\"#editor, #dataviewer\").addClass(\"portrait\");\n }\n // make panels resizable\n $(\"#editor\").resizable({\n handles: isInitialAspectPortrait ? \"s\" : \"e\",\n minWidth: isInitialAspectPortrait ? undefined : \"200\",\n resize() {\n if (!isInitialAspectPortrait) {\n $(this)\n .next()\n .css(\"left\", `${$(this).outerWidth()}px`);\n } else {\n const top = $(this).offset().top + $(this).outerHeight();\n $(this).next().css(\"top\", `${top}px`);\n }\n ide.map.invalidateSize(false);\n },\n stop() {\n if (isInitialAspectPortrait) return;\n settings.editor_width = $(\"#editor\").css(\"width\");\n settings.save();\n }\n });\n $(\"#editor\").prepend(\n \"\"\n );\n\n // init codemirror\n $(\"#editor textarea\")[0].value = settings.code[\"overpass\"];\n if (settings.use_rich_editor) {\n let pending = 0;\n CodeMirror.defineMIME(\"text/x-overpassQL\", {\n name: \"clike\",\n keywords: (function (str) {\n const r = {};\n const a = str.split(\" \");\n for (const ai of a) r[ai] = true;\n return r;\n })(\n \"out json xml custom popup timeout maxsize bbox\" + // initial declarations\n \" date diff adiff\" + //attic declarations\n \" foreach\" + // block statements\n \" relation rel way node is_in area around user uid newer changed poly pivot nwr nw nr wr derived\" + // queries\n \" out meta body skel tags ids count qt asc\" + // actions\n \" center bb geom\" // geometry types\n //+\"r w n br bw\" // recursors\n )\n });\n CodeMirror.defineMIME(\"text/x-overpassXML\", \"xml\");\n CodeMirror.defineMode(\"xml+mustache\", (config) =>\n CodeMirror.multiplexingMode(\n CodeMirror.multiplexingMode(CodeMirror.getMode(config, \"xml\"), {\n open: \"{{\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/plain\"),\n delimStyle: \"mustache\"\n }),\n {\n open: \"{{style:\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/css\"),\n delimStyle: \"mustache\"\n }\n )\n );\n CodeMirror.defineMode(\"ql+mustache\", (config) =>\n CodeMirror.multiplexingMode(\n CodeMirror.multiplexingMode(\n CodeMirror.getMode(config, \"text/x-overpassQL\"),\n {\n open: \"{{\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/plain\"),\n delimStyle: \"mustache\"\n }\n ),\n {\n open: \"{{style:\",\n close: \"}}\",\n mode: CodeMirror.getMode(config, \"text/css\"),\n delimStyle: \"mustache\"\n }\n )\n );\n ide.codeEditor = CodeMirror.fromTextArea($(\"#editor textarea\")[0], {\n //value: settings.code[\"overpass\"],\n lineNumbers: true,\n lineWrapping: true,\n mode: \"text/plain\",\n onChange(e) {\n clearTimeout(pending);\n pending = setTimeout(() => {\n // update syntax highlighting mode\n if (ide.getQueryLang() == \"xml\") {\n if (e.getOption(\"mode\") != \"xml+mustache\") {\n e.closeTagEnabled = true;\n e.setOption(\"matchBrackets\", false);\n e.setOption(\"mode\", \"xml+mustache\");\n }\n } else {\n if (e.getOption(\"mode\") != \"ql+mustache\") {\n e.closeTagEnabled = false;\n e.setOption(\"matchBrackets\", true);\n e.setOption(\"mode\", \"ql+mustache\");\n }\n }\n // check for inactive ui elements\n const bbox_filter = $(\".leaflet-control-buttons-bboxfilter\");\n if (ide.getRawQuery().match(/\\{\\{bbox\\}\\}/)) {\n if (bbox_filter.hasClass(\"disabled\")) {\n bbox_filter.removeClass(\"disabled\");\n bbox_filter.attr(\"data-t\", \"[title]map_controlls.select_bbox\");\n i18n.translate_ui(bbox_filter[0]);\n }\n } else {\n if (!bbox_filter.hasClass(\"disabled\")) {\n bbox_filter.addClass(\"disabled\");\n bbox_filter.attr(\n \"data-t\",\n \"[title]map_controlls.select_bbox_disabled\"\n );\n i18n.translate_ui(bbox_filter[0]);\n }\n }\n }, 500);\n settings.code[\"overpass\"] = e.getValue();\n settings.save();\n },\n closeTagEnabled: true,\n closeTagIndent: [\n \"osm-script\",\n \"query\",\n \"union\",\n \"foreach\",\n \"difference\"\n ],\n extraKeys: {\n \"'>'\"(cm) {\n cm.closeTag(cm, \">\");\n },\n \"'/'\"(cm) {\n cm.closeTag(cm, \"/\");\n }\n }\n });\n // fire onChange after initialization\n ide.codeEditor.getOption(\"onChange\")(ide.codeEditor);\n } else {\n // use non-rich editor\n ide.codeEditor = $(\"#editor textarea\")[0];\n ide.codeEditor.getValue = function () {\n return this.value;\n };\n ide.codeEditor.setValue = function (v) {\n this.value = v;\n };\n ide.codeEditor.lineCount = function () {\n return this.value.split(/\\r\\n|\\r|\\n/).length;\n };\n ide.codeEditor.setLineClass = function () {};\n $(\"#editor textarea\").bind(\"input change\", (e) => {\n settings.code[\"overpass\"] = e.target.getValue();\n settings.save();\n });\n }\n // set query if provided as url parameter or template:\n if (args.has_query) {\n // query set via url\n ide.codeEditor.setValue(args.query);\n }\n // init dataviewer\n ide.dataViewer = CodeMirror($(\"#data\")[0], {\n value: \"no data loaded yet\",\n lineNumbers: true,\n readOnly: true,\n mode: \"javascript\"\n });\n\n // init leaflet\n ide.map = new L.Map(\"map\", {\n attributionControl: true,\n minZoom: 0,\n maxZoom: configs.maxMapZoom,\n worldCopyJump: false\n });\n const tilesUrl = settings.tile_server;\n const tilesAttrib = configs.tileServerAttribution;\n const tiles = new L.TileLayer(tilesUrl, {\n attribution: tilesAttrib,\n noWrap: true,\n maxNativeZoom: 19,\n maxZoom: ide.map.options.maxZoom\n });\n ide.attribControl = new L.Control.Attribution({prefix: false});\n ide.attribControl.addAttribution(tilesAttrib);\n const pos = new L.LatLng(settings.coords_lat, settings.coords_lon);\n ide.map.setView(pos, settings.coords_zoom).addLayer(tiles);\n ide.map.tile_layer = tiles;\n // inverse opacity layer\n ide.map.inv_opacity_layer = L.tileLayer(\n \"data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==\"\n ).setOpacity(1 - settings.background_opacity);\n if (settings.background_opacity != 1)\n ide.map.inv_opacity_layer.addTo(ide.map);\n ide.scaleControl = new L.Control.Scale({metric: true, imperial: false});\n ide.scaleControl.addTo(ide.map);\n ide.map.on(\"moveend\", () => {\n settings.coords_lat = ide.map.getCenter().lat;\n settings.coords_lon = ide.map.getCenter().lng;\n settings.coords_zoom = ide.map.getZoom();\n settings.save(); // save settings\n });\n\n // tabs\n $(\"#dataviewer > div#data\")[0].style.zIndex = -1001;\n $(\".tabs li\").bind(\"click\", (e) => {\n if ($(e.target).hasClass(\"is-active\")) {\n return;\n } else {\n $(\"#dataviewer > div#data\")[0].style.zIndex =\n -1 * $(\"#dataviewer > div#data\")[0].style.zIndex;\n $(\".tabs li\").toggleClass(\"is-active\");\n }\n });\n\n // keyboard event listener\n $(document).keydown((event) => ide.onKeyPress(event));\n\n // leaflet extension: more map controls\n const MapButtons = L.Control.extend({\n options: {\n position: \"topleft\"\n },\n onAdd() {\n // create the control container with a particular class name\n const container = L.DomUtil.create(\n \"div\",\n \"leaflet-control-buttons leaflet-bar\"\n );\n let link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-fitdata leaflet-bar-part leaflet-bar-part-top\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.zoom_to_data\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n () => {\n // hardcoded maxZoom of 18, should be ok for most real-world use-cases\n try {\n ide.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(), {\n maxZoom: 18\n });\n } catch (e) {}\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-myloc leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.localize_user\");\n if (!window.isSecureContext) {\n link.className += \" disabled\";\n link.setAttribute(\n \"data-t\",\n \"[title]map_controlls.localize_user_disabled\"\n );\n }\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n () => {\n // One-shot position request.\n try {\n navigator.geolocation.getCurrentPosition((position) => {\n const pos = new L.LatLng(\n position.coords.latitude,\n position.coords.longitude\n );\n ide.map.setView(pos, settings.coords_zoom);\n });\n } catch (e) {}\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-bboxfilter leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.select_bbox\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n if (\n $(e.target).parent().hasClass(\"disabled\") // check if this button is enabled\n )\n return false;\n if (!ide.map.bboxfilter.isEnabled()) {\n ide.map.bboxfilter.setBounds(ide.map.getBounds().pad(-0.2));\n ide.map.bboxfilter.enable();\n } else {\n ide.map.bboxfilter.disable();\n }\n $(e.target).toggleClass(\"fa-times-circle\").toggleClass(\"fa-image\");\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-fullscreen leaflet-bar-part\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.toggle_wide_map\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n $(\"#dataviewer\").toggleClass(\"fullscreen\");\n ide.map.invalidateSize();\n $(e.target)\n .toggleClass(\"fa-step-forward\")\n .toggleClass(\"fa-step-backward\");\n $(\"#editor\").toggleClass(\"hidden\");\n if ($(\"#editor\").resizable(\"option\", \"disabled\"))\n $(\"#editor\").resizable(\"enable\");\n else $(\"#editor\").resizable(\"disable\");\n return false;\n },\n ide.map\n );\n link = L.DomUtil.create(\n \"a\",\n \"leaflet-control-buttons-clearoverlay leaflet-bar-part leaflet-bar-part-bottom\",\n container\n );\n $('').appendTo($(link));\n link.href = \"#\";\n link.className += \" t\";\n link.setAttribute(\"data-t\", \"[title]map_controlls.toggle_data\");\n i18n.translate_ui(link);\n L.DomEvent.addListener(\n link,\n \"click\",\n (e) => {\n e.preventDefault();\n if (ide.map.hasLayer(overpass.osmLayer))\n ide.map.removeLayer(overpass.osmLayer);\n else ide.map.addLayer(overpass.osmLayer);\n return false;\n },\n ide.map\n );\n return container;\n }\n });\n ide.map.addControl(new MapButtons());\n // prevent propagation of doubleclicks on map controls\n $(\".leaflet-control-buttons > a\").bind(\"dblclick\", (e) =>\n e.stopPropagation()\n );\n // add tooltips to map controls\n $(\".leaflet-control-buttons > a\").tooltip({\n items: \"a[title]\",\n hide: {\n effect: \"fadeOut\",\n duration: 100\n },\n position: {\n my: \"left+5 center\",\n at: \"right center\"\n }\n });\n // leaflet extension: search box\n const SearchBox = L.Control.extend({\n options: {\n position: \"topright\"\n },\n onAdd() {\n const container = L.DomUtil.create(\n \"div\",\n \"leaflet-control-search control has-icons-left\"\n );\n container.style.position = \"absolute\";\n container.style.right = \"0\";\n const inp = L.DomUtil.create(\"input\", \"input is-rounded\", container);\n $('')\n .click(function () {\n $(this).prev().autocomplete(\"search\");\n })\n .insertAfter(inp);\n inp.id = \"search\";\n inp.type = \"search\";\n // hack against focus stealing leaflet :/\n inp.onclick = function () {\n this.focus();\n };\n // prevent propagation of doubleclicks to map container\n container.ondblclick = function (e) {\n e.stopPropagation();\n };\n // autocomplete functionality\n $(inp).autocomplete({\n source(request, response) {\n // ajax (GET) request to nominatim\n $.ajax(\n `https://search.osmnames.org/q/${encodeURIComponent(\n request.term\n )}.js?key=${configs.osmnamesApiKey}`,\n {\n success(data) {\n // hacky firefox hack :( (it is not properly detecting json from the content-type header)\n if (typeof data == \"string\") {\n // if the data is a string, but looks more like a json object\n try {\n data = $.parseJSON(data);\n } catch (e) {}\n }\n response(\n $.map(data.results.slice(0, 10), (item) => ({\n label: item.display_name,\n value: item.display_name,\n lat: item.lat,\n lon: item.lon,\n boundingbox: item.boundingbox\n }))\n );\n },\n error() {\n // todo: better error handling\n console.error(\n \"An error occured while contacting the search server osmnames.org :(\"\n );\n }\n }\n );\n },\n minLength: 2,\n autoFocus: true,\n select(event, ui) {\n if (ui.item.boundingbox && ui.item.boundingbox instanceof Array)\n ide.map.fitBounds(\n L.latLngBounds([\n [ui.item.boundingbox[1], ui.item.boundingbox[0]],\n [ui.item.boundingbox[3], ui.item.boundingbox[2]]\n ]),\n {maxZoom: 18}\n );\n else ide.map.panTo(new L.LatLng(ui.item.lat, ui.item.lon));\n this.value = \"\";\n return false;\n },\n open() {\n $(this).removeClass(\"ui-corner-all\").addClass(\"ui-corner-top\");\n },\n close() {\n $(this).addClass(\"ui-corner-all\").removeClass(\"ui-corner-top\");\n }\n });\n $(inp).autocomplete(\"option\", \"delay\", 20);\n return container;\n }\n });\n ide.map.addControl(new SearchBox());\n // add cross hairs to map\n $('')\n .addClass(\"crosshairs\")\n .hide()\n .appendTo(\"#map\");\n if (settings.enable_crosshairs) $(\".crosshairs\").show();\n\n ide.map.bboxfilter = new L.LocationFilter({\n enable: !true,\n adjustButton: false,\n enableButton: false\n }).addTo(ide.map);\n\n ide.map.on(\"popupopen popupclose\", (e) => {\n if (typeof e.popup.layer != \"undefined\") {\n const layer = e.popup.layer.placeholder || e.popup.layer;\n // re-call style handler to eventually modify the style of the clicked feature\n const stl = overpass.osmLayer._baseLayer.options.style(\n layer.feature,\n e.type == \"popupopen\"\n );\n if (typeof layer.eachLayer != \"function\") {\n if (typeof layer.setStyle == \"function\") layer.setStyle(stl); // other objects (pois, ways)\n } else\n layer.eachLayer((layer) => {\n if (typeof layer.setStyle == \"function\") layer.setStyle(stl);\n }); // for multipolygons!\n }\n });\n\n // init overpass object\n overpass.init();\n\n // event handlers for overpass object\n overpass.handlers[\"onProgress\"] = function (msg, abortcallback) {\n ide.waiter.addInfo(msg, abortcallback);\n };\n overpass.handlers[\"onDone\"] = function () {\n const name_match = ide.getRawQuery().match(/@name ([^\\n]+)/);\n // parse document title from @name in query\n const title_prefix = name_match ? `${name_match[1]} | ` : \"\";\n ide.waiter.close(title_prefix);\n const map_bounds = ide.map.getBounds();\n const data_bounds = overpass.osmLayer.getBaseLayer().getBounds();\n if (data_bounds.isValid() && !map_bounds.intersects(data_bounds)) {\n // show tooltip for button \"zoom to data\"\n const prev_content = $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\"\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\",\n `← ${i18n.t(\"map_controlls.suggest_zoom_to_data\")}`\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"open\");\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"option\", \"hide\", {\n effect: \"fadeOut\",\n duration: 1000\n });\n setTimeout(() => {\n $(\".leaflet-control-buttons-fitdata\").tooltip(\n \"option\",\n \"content\",\n prev_content\n );\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"close\");\n $(\".leaflet-control-buttons-fitdata\").tooltip(\"option\", \"hide\", {\n effect: \"fadeOut\",\n duration: 100\n });\n }, 2600);\n }\n };\n overpass.handlers[\"onEmptyMap\"] = function (empty_msg, data_mode) {\n // get the current query\n const query = ide.getRawQuery();\n\n // check if 'out' followed by any number of characters (non-greedy) and then 'count' is present in the query\n const isCountPresent = /out[^;]+?count/.test(query);\n\n // show warning/info if only invisible data is returned and 'out...count' is not present in the query\n if (empty_msg == \"no visible data\") {\n if (!isCountPresent && !settings.no_autorepair) {\n const content = `

    ${i18n.t(\n \"warning.incomplete.expl.1\"\n )}

    ${i18n.t(\n \"warning.incomplete.expl.2\"\n )}

     ${i18n.t(\n \"warning.incomplete.not_again\"\n )}

    `;\n\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.repair_query\"),\n callback() {\n ide.repairQuery(\"no visible data\");\n }\n },\n {\n name: i18n.t(\"dialog.show_data\"),\n callback() {\n if (\n $(\"input[name=hide_incomplete_data_warning]\")?.[0]?.checked\n ) {\n settings.no_autorepair = true;\n settings.save();\n }\n ide.switchTab(\"Data\");\n }\n }\n ];\n showDialog(\n i18n.t(\"warning.incomplete.title\"),\n content,\n dialog_buttons\n );\n } else if (isCountPresent) {\n ide.switchTab(\"Data\");\n }\n }\n // auto tab switching (if only areas are returned)\n if (empty_msg == \"only areas returned\") ide.switchTab(\"Data\");\n // auto tab switching (if nodes without coordinates are returned)\n if (empty_msg == \"no coordinates returned\") ide.switchTab(\"Data\");\n // auto tab switching (if unstructured data is returned)\n if (data_mode == \"unknown\") ide.switchTab(\"Data\");\n // display empty map badge\n $(\n `
    ${i18n.t(\n \"map.intentionally_blank\"\n )} (${empty_msg})
    `\n ).appendTo(\"#map\");\n };\n overpass.handlers[\"onDataReceived\"] = function (\n amount,\n amount_txt,\n abortCB,\n continueCB\n ) {\n if (amount > 1000000) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n // more than ~1MB of data\n // show warning dialog\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.abort\"),\n callback() {\n document.title = _originalDocumentTitle;\n abortCB();\n }\n },\n {\n name: i18n.t(\"dialog.continue_anyway\"),\n callback() {\n document.title = _originalDocumentTitle;\n continueCB();\n }\n }\n ];\n\n const content = `

    ${i18n\n .t(\"warning.huge_data.expl.1\")\n .replace(\"{{amount_txt}}\", amount_txt)}

    ${i18n.t(\n \"warning.huge_data.expl.2\"\n )}

    `;\n showDialog(i18n.t(\"warning.huge_data.title\"), content, dialog_buttons);\n } else continueCB();\n };\n overpass.handlers[\"onAbort\"] = function () {\n ide.waiter.close();\n };\n overpass.handlers[\"onAjaxError\"] = function (errmsg) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n // show error dialog\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.dismiss\"),\n callback() {\n document.title = _originalDocumentTitle;\n }\n }\n ];\n\n const content = `

    ${i18n.t(\n \"error.ajax.expl\"\n )}

    ${errmsg}`;\n showDialog(i18n.t(\"error.ajax.title\"), content, dialog_buttons);\n\n // print error text, if present\n if (overpass.resultText) ide.dataViewer.setValue(overpass.resultText);\n };\n overpass.handlers[\"onQueryError\"] = function (errmsg) {\n ide.waiter.close();\n const _originalDocumentTitle = document.title;\n document.title = `❗ ${_originalDocumentTitle}`;\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.dismiss\"),\n callback() {\n document.title = _originalDocumentTitle;\n }\n }\n ];\n const content = `
    ${i18n.t(\n \"error.query.expl\"\n )}
    ${errmsg}
    `;\n showDialog(i18n.t(\"error.query.title\"), content, dialog_buttons);\n };\n overpass.handlers[\"onStyleError\"] = function (errmsg) {\n const dialog_buttons = [{name: i18n.t(\"dialog.dismiss\")}];\n const content = `

    ${i18n.t(\n \"error.mapcss.expl\"\n )}

    ${errmsg}`;\n showDialog(i18n.t(\"error.mapcss.title\"), content, dialog_buttons);\n };\n overpass.handlers[\"onQueryErrorLine\"] = function (linenumber) {\n ide.highlightError(linenumber);\n };\n overpass.handlers[\"onRawDataPresent\"] = function () {\n ide.dataViewer.setOption(\"mode\", overpass.resultType);\n ide.dataViewer.setValue(overpass.resultText);\n };\n overpass.handlers[\"onGeoJsonReady\"] = function () {\n // show layer\n ide.map.addLayer(overpass.osmLayer);\n // autorun callback (e.g. zoom to data)\n if (typeof ide.run_query_on_startup === \"function\") {\n ide.run_query_on_startup();\n }\n // display stats\n if (settings.show_data_stats) {\n const stats = overpass.stats;\n const stats_txt =\n `${i18n.t(\"data_stats.loaded\")} – ` +\n `${i18n.t(\"data_stats.nodes\")}: ${stats.data.nodes}, ${i18n.t(\n \"data_stats.ways\"\n )}: ${stats.data.ways}, ${i18n.t(\n \"data_stats.relations\"\n )}: ${stats.data.relations}${\n stats.data.areas > 0\n ? `, ${i18n.t(\"data_stats.areas\")}: ${stats.data.areas}`\n : \"\"\n }
    ` +\n `${i18n.t(\n \"data_stats.displayed\"\n )} – ` +\n `${i18n.t(\"data_stats.pois\")}: ${stats.geojson.pois}, ${i18n.t(\n \"data_stats.lines\"\n )}: ${stats.geojson.lines}, ${i18n.t(\n \"data_stats.polygons\"\n )}: ${stats.geojson.polys}`;\n $(\n `
    ${stats_txt}
    `\n ).insertAfter(\"#map .leaflet-control-attribution\");\n // show more stats as a tooltip\n const backlogOverpass =\n overpass.timestamp && Date.now() - Date.parse(overpass.timestamp);\n const backlogOverpassAreas =\n overpass.timestampAreas &&\n Date.now() - Date.parse(overpass.timestampAreas);\n $(\"#data_stats\").tooltip({\n items: \"div\",\n tooltipClass: \"stats\",\n content() {\n let str = \"
    \";\n if (overpass.ajax_request_duration) {\n let duration = overpass.ajax_request_duration;\n if (duration.toLocaleString) {\n duration = duration.toLocaleString();\n }\n str += `${i18n.t(\n \"data_stats.request_duration\"\n )}: ${duration}ms
    `;\n }\n if (overpass.timestamp) {\n str +=\n `${i18n.t(\"data_stats.lag\")}: ${Math.floor(\n backlogOverpass / 1000\n )}s` + ` ${i18n.t(\"data_stats.lag.expl\")}`;\n }\n if (overpass.timestampAreas) {\n str +=\n `
    ${i18n.t(\"data_stats.lag_areas\")}: ${Math.floor(\n backlogOverpassAreas / 1000\n )}s` + ` ${i18n.t(\"data_stats.lag.expl\")}`;\n }\n str += \"
    \";\n return str;\n },\n hide: {\n effect: \"fadeOut\",\n duration: 100\n },\n position: {\n my: \"right bottom-5\",\n at: \"right top\"\n }\n });\n if (\n backlogOverpass > 24 * 60 * 60 * 1000 ||\n backlogOverpassAreas > 96 * 60 * 60 * 1000\n ) {\n $(\"#data_stats\").css(\"background-color\", \"yellow\");\n }\n }\n };\n overpass.handlers[\"onPopupReady\"] = function (p) {\n p.openOn(ide.map);\n };\n\n // close startup waiter\n ide.waiter.close();\n\n // run the query immediately, if the appropriate flag was set.\n if (ide.run_query_on_startup === true) {\n ide.update_map();\n // automatically zoom to data.\n if (\n !args.has_coords &&\n args.has_query &&\n args.query.match(/\\{\\{(bbox|center)\\}\\}/) === null\n ) {\n ide.run_query_on_startup = function () {\n ide.run_query_on_startup = null;\n // hardcoded maxZoom of 18, should be ok for most real-world use-cases\n try {\n ide.map.fitBounds(overpass.osmLayer.getBaseLayer().getBounds(), {\n maxZoom: 18\n });\n } catch (e) {}\n // todo: zoom only to specific zoomlevel if args.has_zoom is given\n };\n }\n }\n } // init()\n\n onNominatimError(search, type) {\n // close waiter\n this.waiter.close();\n // highlight error lines\n let query = this.getRawQuery();\n query = query.split(\"\\n\");\n query.forEach((line, i) => {\n if (line.indexOf(`{{geocode${type}:${search}}}`) !== -1)\n this.highlightError(i + 1);\n });\n // show error message dialog\n const dialog_buttons = [{name: i18n.t(\"dialog.dismiss\")}];\n const content = `

    ${i18n.t(\n \"error.nominatim.expl\"\n )}

    ${htmlentities(search)}

    `;\n showDialog(i18n.t(\"error.nominatim.title\"), content, dialog_buttons);\n }\n\n /* this returns the current raw query in the editor.\n * shortcuts are not expanded. */\n getRawQuery() {\n return this.codeEditor.getValue();\n }\n\n /* this returns the current query in the editor.\n * shortcuts are expanded. */\n async getQuery(): Promise {\n let query = this.getRawQuery();\n // parse query and process shortcuts\n // special handling for global bbox in xml queries (which uses an OverpassQL-like notation instead of n/s/e/w parameters):\n query = query.replace(\n /(]+bbox[^=]*=[^\"'']*[\"'])({{bbox}})([\"'])/,\n \"$1{{__bbox__global_bbox_xml__ezs4K8__}}$3\"\n );\n query = await this.queryParser.parse(query, shortcuts());\n // parse mapcss declarations\n let mapcss = \"\";\n if (this.queryParser.hasStatement(\"style\"))\n mapcss = this.queryParser.getStatement(\"style\");\n this.mapcss = mapcss;\n // parse data-source statements\n let data_source = null;\n if (this.queryParser.hasStatement(\"data\")) {\n data_source = this.queryParser.getStatement(\"data\");\n data_source = data_source.split(\",\");\n const data_mode = data_source[0].toLowerCase();\n data_source = data_source.slice(1);\n const options = {};\n for (const src of data_source) {\n const tmp = src.split(\"=\");\n options[tmp[0]] = tmp[1];\n }\n data_source = {\n mode: data_mode,\n options: options\n };\n }\n this.data_source = data_source;\n return query;\n }\n\n setQuery(query) {\n this.codeEditor.setValue(query);\n }\n getQueryLang() {\n if ($.trim(this.getRawQuery().replace(/{{.*?}}/g, \"\")).match(/^ {\n delete settings.saves[ex];\n settings.save();\n this.onLoadClick();\n }\n },\n {name: i18n.t(\"dialog.cancel\")}\n ];\n\n const content =\n `

    ` +\n `${i18n.t(\n \"dialog.delete_query.expl\"\n )}: "${ex}"?

    `;\n showDialog(i18n.t(\"dialog.delete_query.title\"), content, dialog_buttons);\n }\n removeExampleSync(query, self) {\n const dialog_buttons = [\n {\n name: i18n.t(\"dialog.delete\"),\n callback() {\n sync.delete(query.name, (err) => {\n if (err) return console.error(err);\n\n $(self).parent().remove();\n });\n }\n },\n {\n name: i18n.t(\"dialog.cancel\")\n }\n ];\n\n const content = `

    ${i18n.t(\n \"dialog.delete_query.expl-osm\"\n )}: "${query.name}"?

    `;\n showDialog(i18n.t(\"dialog.delete_query.title\"), content, dialog_buttons);\n }\n\n // Event handlers\n onLoadClick() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n $(\"#load-dialog .panel.saved_query .panel-block\").remove();\n $(\"#load-dialog .panel.example .panel-block\").remove();\n // load example list\n let has_saved_query = false;\n for (const example in settings.saves) {\n const type = settings.saves[example].type;\n if (type == \"template\") continue;\n $('')\n .attr(\"href\", \"#\")\n .text(example)\n .on(\"click\", () => {\n ide.loadExample(example);\n $(\"#load-dialog\").removeClass(\"is-active\");\n return false;\n })\n .append(\n $('`\n ).on(\"click\", () => {\n ide.loadOsmQueries();\n })\n )\n .appendTo(ui);\n } else {\n ui.hide();\n }\n }\n }\n loadOsmQueries() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const ide = this;\n const ui = $(\"#load-dialog .panel.osm-queries\");\n ui.show();\n ui.find(\".panel-block\").remove();\n $('
    ')\n .text(i18n.t(\"load.saved_queries-osm-loading\"))\n .appendTo(ui);\n\n sync.load((err, queries) => {\n if (err) {\n ui.find(\".panel-block\").remove();\n $('
    ')\n .text(i18n.t(\"load.saved_queries-osm-error\"))\n .appendTo(ui);\n return console.error(err);\n }\n ui.find(\".panel-block\").remove();\n $(\"#logout\").show();\n $(\"#logout\").appendTo($(\"#logout\").parent());\n queries.forEach((q) => {\n $('')\n .attr(\"href\", \"#\")\n .text(q.name)\n .on(\"click\", () => {\n ide.setQuery(lzw_decode(Base64.decode(q.query)));\n $(\"#load-dialog\").removeClass(\"is-active\");\n return false;\n })\n .append(\n $('
    ').dialog({modal:!0});const d=v();n.code.overpass=d.get("Q"),n.silent=d.has("silent"),a.map=new L.Map("map");const m=n.tileServer,y=l.tileServerAttribution,g=new L.TileLayer(m,{attribution:y});a.map.setView([0,0],1).addLayer(g),new L.Control.Scale({metric:!0,imperial:!1}).addTo(a.map),o(document).on({ajaxStart(){o("#loading-dialog").addClass("is-active")},ajaxStop(){o("#loading-dialog").removeClass("is-active")}}),a.map.on("layeradd",e=>{if(e.layer instanceof L.GeoJSON){a.map.setView([0,0],18,!0);try{a.map.fitBounds(e.layer.getBounds())}catch{}}}),r.handlers.onEmptyMap=e=>{o(`
    This map intentionally left blank. (${e})
    `).appendTo("#map")},n.silent?(r.handlers.onAjaxError=e=>{parent.postMessage(JSON.stringify({handler:"onAjaxError",msg:e}),"*")},r.handlers.onQueryError=e=>{parent.postMessage(JSON.stringify({handler:"onQueryError",msg:e}),"*")}):(r.handlers.onAjaxError=e=>{alert(`An error occured during the execution of the overpass query! +import{$ as o,o as r,b as l,j as v,p as w}from"./urlParameters-BlcU9mC4.js";o(document).ready(()=>{const p={};window.addEventListener("message",async e=>{const t=typeof e.data=="string"?JSON.parse(e.data):{};if(t.cmd==="update_map")n.code.overpass=t.value[0],a.update_map();else if(t.cmd==="cache"){n.code.overpass=t.value[0];const i=await a.getQuery(),s=a.getQueryLang();r.run_query(i,s,p,!0,void 0,a.mapcss)}},!1),o.fn.dialog=function(){alert(`error :( ${o(this).html()}`)},l.appname="overpass-ide-map";const n={code:{},server:l.defaultServer,tileServer:l.defaultTiles,silent:!1,force_simple_cors_request:!0,disable_poiomatic:!1},a={map:void 0,mapcss:"",async getQuery(){let e=n.code.overpass;const t=new w;e=await t.parse(e,{});let i="";t.hasStatement("style")&&(i=t.getStatement("style")),a.mapcss=i;let s=null;if(t.hasStatement("data")){s=t.getStatement("data"),s=s.split(",");const h=s[0].toLowerCase();s=s.slice(1);const c={};for(const f of s){const u=f.split("=");c[u[0]]=u[1]}s={mode:h,options:c}}return a.data_source=s,e=e.trim(),e},getQueryLang(){return o.trim(n.code.overpass).match(/^

    The browser you are currently using, is not capable of running this Application. It has to support cross origin resource sharing (CORS).

    Please update to a more up-to-date version of your browser or switch to a more capable browser! Recent versions of Opera, Chrome and Firefox have been tested to work.

    ').dialog({modal:!0});const d=v();n.code.overpass=d.get("Q"),n.silent=d.has("silent"),a.map=new L.Map("map");const m=n.tileServer,y=l.tileServerAttribution,g=new L.TileLayer(m,{attribution:y});a.map.setView([0,0],1).addLayer(g),new L.Control.Scale({metric:!0,imperial:!1}).addTo(a.map),o(document).on({ajaxStart(){o("#loading-dialog").addClass("is-active")},ajaxStop(){o("#loading-dialog").removeClass("is-active")}}),a.map.on("layeradd",e=>{if(e.layer instanceof L.GeoJSON){a.map.setView([0,0],18,!0);try{a.map.fitBounds(e.layer.getBounds())}catch{}}}),r.handlers.onEmptyMap=e=>{o(`
    This map intentionally left blank. (${e})
    `).appendTo("#map")},n.silent?(r.handlers.onAjaxError=e=>{parent.postMessage(JSON.stringify({handler:"onAjaxError",msg:e}),"*")},r.handlers.onQueryError=e=>{parent.postMessage(JSON.stringify({handler:"onQueryError",msg:e}),"*")}):(r.handlers.onAjaxError=e=>{alert(`An error occured during the execution of the overpass query! ${e}`)},r.handlers.onQueryError=e=>{alert(`An error occured during the execution of the overpass query! This is what overpass API returned: ${e}`)}),r.handlers.onGeoJsonReady=()=>{a.map.addLayer(r.osmLayer)},r.handlers.onPopupReady=e=>{e.openOn(a.map)},r.handlers.onDataReceived=(e,t,i,s)=>{s()},r.handlers.onRawDataPresent=()=>{parent.postMessage(JSON.stringify({query:n.code.overpass,resultType:r.resultType,resultText:r.resultText}),"*")},a.update_map()}); -//# sourceMappingURL=map-B3eCDXS1.js.map +//# sourceMappingURL=map-DHdWe_L0.js.map diff --git a/assets/map-B3eCDXS1.js.map b/assets/map-DHdWe_L0.js.map similarity index 99% rename from assets/map-B3eCDXS1.js.map rename to assets/map-DHdWe_L0.js.map index ba152226..4fc33c76 100644 --- a/assets/map-B3eCDXS1.js.map +++ b/assets/map-DHdWe_L0.js.map @@ -1 +1 @@ -{"version":3,"file":"map-B3eCDXS1.js","sources":["../../js/map.ts"],"sourcesContent":["// escape strings to show them directly in the html.\nimport $ from \"jquery\";\nimport \"leaflet\";\n\n// include the CSS files\nimport \"leaflet/dist/leaflet.css\";\nimport \"../css/map.css\";\n\nimport configs from \"./configs\";\nimport overpass from \"./overpass\";\nimport Query from \"./query\";\nimport {parseUrlParameters} from \"./urlParameters\";\n\n$(document).ready(() => {\n // main map cache\n const cache = {};\n\n window.addEventListener(\n \"message\",\n async (evt) => {\n const data = typeof evt.data === \"string\" ? JSON.parse(evt.data) : {};\n if (data.cmd === \"update_map\") {\n settings.code[\"overpass\"] = data.value[0];\n ide.update_map();\n } else if (data.cmd === \"cache\") {\n settings.code[\"overpass\"] = data.value[0];\n const query = await ide.getQuery();\n const query_lang = ide.getQueryLang();\n overpass.run_query(\n query,\n query_lang,\n cache,\n true,\n undefined,\n ide.mapcss\n );\n }\n },\n false\n );\n\n // some initalizations\n $.fn.dialog = function () {\n alert(`error :( ${$(this).html()}`);\n };\n configs.appname = \"overpass-ide-map\";\n const settings = {\n code: {},\n server: configs.defaultServer,\n tileServer: configs.defaultTiles,\n silent: false,\n force_simple_cors_request: true,\n disable_poiomatic: false\n };\n const ide = {\n map: undefined as unknown as L.Map,\n mapcss: \"\",\n async getQuery(): Promise {\n let query = settings.code[\"overpass\"];\n const queryParser = new Query();\n query = await queryParser.parse(query, {});\n // parse mapcss declarations\n let mapcss = \"\";\n if (queryParser.hasStatement(\"style\"))\n mapcss = queryParser.getStatement(\"style\");\n ide.mapcss = mapcss;\n // parse data-source statements\n let data_source = null;\n if (queryParser.hasStatement(\"data\")) {\n data_source = queryParser.getStatement(\"data\");\n data_source = data_source.split(\",\");\n const data_mode = data_source[0].toLowerCase();\n data_source = data_source.slice(1);\n const options = {};\n for (const src of data_source) {\n const tmp = src.split(\"=\");\n options[tmp[0]] = tmp[1];\n }\n data_source = {\n mode: data_mode,\n options: options\n };\n }\n ide.data_source = data_source;\n // remove newlines\n query = query.trim();\n\n return query;\n },\n getQueryLang() {\n return $.trim(settings.code[\"overpass\"]).match(/^' +\n '

    The browser you are currently using, is not capable of running this Application. It has to support cross origin resource sharing (CORS).

    ' +\n '

    Please update to a more up-to-date version of your browser or switch to a more capable browser! Recent versions of Opera, Chrome and Firefox have been tested to work.

    ' +\n \"\"\n ).dialog({modal: true});\n }\n // check for any get-parameters\n const params = parseUrlParameters();\n // uncompressed query set in url\n settings.code[\"overpass\"] = params.get(\"Q\");\n // don't alert on overpass errors, but send messages to parent window\n settings.silent = params.has(\"silent\");\n // init leaflet\n ide.map = new L.Map(\"map\");\n const tilesUrl = settings.tileServer;\n const tilesAttrib = configs.tileServerAttribution;\n const tiles = new L.TileLayer(tilesUrl, {attribution: tilesAttrib});\n ide.map.setView([0, 0], 1).addLayer(tiles);\n const scaleControl = new L.Control.Scale({metric: true, imperial: false});\n scaleControl.addTo(ide.map);\n // wait spinner\n $(document).on({\n ajaxStart() {\n $(\"#loading-dialog\").addClass(\"is-active\");\n },\n ajaxStop() {\n $(\"#loading-dialog\").removeClass(\"is-active\");\n }\n });\n ide.map.on(\"layeradd\", (e) => {\n if (!(e.layer instanceof L.GeoJSON)) return;\n ide.map.setView([0, 0], 18, true);\n try {\n ide.map.fitBounds(e.layer.getBounds());\n } catch (err) {}\n });\n // overpass functionality\n overpass.handlers[\"onEmptyMap\"] = (empty_msg) => {\n $(\n `
    This map intentionally left blank. (${empty_msg})
    `\n ).appendTo(\"#map\");\n };\n if (settings.silent) {\n overpass.handlers[\"onAjaxError\"] = (errmsg) => {\n parent.postMessage(\n JSON.stringify({handler: \"onAjaxError\", msg: errmsg}),\n \"*\"\n );\n };\n overpass.handlers[\"onQueryError\"] = (errmsg) => {\n parent.postMessage(\n JSON.stringify({handler: \"onQueryError\", msg: errmsg}),\n \"*\"\n );\n };\n } else {\n overpass.handlers[\"onAjaxError\"] = (errmsg) => {\n alert(\n `An error occured during the execution of the overpass query!\\n${errmsg}`\n );\n };\n overpass.handlers[\"onQueryError\"] = (errmsg) => {\n alert(\n `An error occured during the execution of the overpass query!\\nThis is what overpass API returned:\\n${errmsg}`\n );\n };\n }\n overpass.handlers[\"onGeoJsonReady\"] = () => {\n ide.map.addLayer(overpass.osmLayer);\n };\n overpass.handlers[\"onPopupReady\"] = (p) => {\n p.openOn(ide.map);\n };\n overpass.handlers[\"onDataReceived\"] = (amount, txt, abortCB, continueCB) => {\n continueCB();\n };\n overpass.handlers[\"onRawDataPresent\"] = () => {\n parent.postMessage(\n JSON.stringify({\n query: settings.code[\"overpass\"],\n resultType: overpass.resultType,\n resultText: overpass.resultText\n }),\n \"*\"\n );\n };\n // load the data\n ide.update_map();\n});\n"],"names":["$","cache","evt","data","settings","ide","query","query_lang","overpass","configs","queryParser","Query","mapcss","data_source","data_mode","options","src","tmp","params","parseUrlParameters","tilesUrl","tilesAttrib","tiles","empty_msg","errmsg","p","amount","txt","abortCB","continueCB"],"mappings":"4EAaAA,EAAE,QAAQ,EAAE,MAAM,IAAM,CAEtB,MAAMC,EAAQ,CAAA,EAEP,OAAA,iBACL,UACA,MAAOC,GAAQ,CACP,MAAAC,EAAO,OAAOD,EAAI,MAAS,SAAW,KAAK,MAAMA,EAAI,IAAI,EAAI,GAC/D,GAAAC,EAAK,MAAQ,aACfC,EAAS,KAAK,SAAcD,EAAK,MAAM,CAAC,EACxCE,EAAI,WAAW,UACNF,EAAK,MAAQ,QAAS,CAC/BC,EAAS,KAAK,SAAcD,EAAK,MAAM,CAAC,EAClC,MAAAG,EAAQ,MAAMD,EAAI,WAClBE,EAAaF,EAAI,eACdG,EAAA,UACPF,EACAC,EACAN,EACA,GACA,OACAI,EAAI,MAAA,CAER,CACF,EACA,EAAA,EAIAL,EAAA,GAAG,OAAS,UAAY,CACxB,MAAM,YAAYA,EAAE,IAAI,EAAE,KAAA,CAAM,EAAE,CAAA,EAEpCS,EAAQ,QAAU,mBAClB,MAAML,EAAW,CACf,KAAM,CAAC,EACP,OAAQK,EAAQ,cAChB,WAAYA,EAAQ,aACpB,OAAQ,GACR,0BAA2B,GAC3B,kBAAmB,EAAA,EAEfJ,EAAM,CACV,IAAK,OACL,OAAQ,GACR,MAAM,UAA4B,CAC5B,IAAAC,EAAQF,EAAS,KAAK,SACpB,MAAAM,EAAc,IAAIC,EACxBL,EAAQ,MAAMI,EAAY,MAAMJ,EAAO,CAAE,CAAA,EAEzC,IAAIM,EAAS,GACTF,EAAY,aAAa,OAAO,IACzBE,EAAAF,EAAY,aAAa,OAAO,GAC3CL,EAAI,OAASO,EAEb,IAAIC,EAAc,KACd,GAAAH,EAAY,aAAa,MAAM,EAAG,CACtBG,EAAAH,EAAY,aAAa,MAAM,EAC/BG,EAAAA,EAAY,MAAM,GAAG,EACnC,MAAMC,EAAYD,EAAY,CAAC,EAAE,YAAY,EAC/BA,EAAAA,EAAY,MAAM,CAAC,EACjC,MAAME,EAAU,CAAA,EAChB,UAAWC,KAAOH,EAAa,CACvB,MAAAI,EAAMD,EAAI,MAAM,GAAG,EACzBD,EAAQE,EAAI,CAAC,CAAC,EAAIA,EAAI,CAAC,CACzB,CACcJ,EAAA,CACZ,KAAMC,EACN,QAAAC,CAAA,CAEJ,CACA,OAAAV,EAAI,YAAcQ,EAElBP,EAAQA,EAAM,OAEPA,CACT,EACA,cAAe,CACN,OAAAN,EAAE,KAAKI,EAAS,KAAK,QAAW,EAAE,MAAM,IAAI,EAC/C,MACA,YACN,EACA,MAAM,YAAa,CACfJ,EAAA,aAAa,EAAE,SACb,OAAOQ,EAAS,SAAY,KAC1BH,EAAA,IAAI,YAAYG,EAAS,QAAQ,EACjC,MAAAF,EAAQ,MAAMD,EAAI,WAClBE,EAAaF,EAAI,eACdG,EAAA,UACPF,EACAC,EACAN,EACA,GACA,OACAI,EAAI,MAAA,EAEJL,EAAA,YAAY,EAAE,QAClB,CAAA,EAEFQ,EAAS,KAAK,EAEVR,EAAE,QAAQ,MAAQ,IAEpBA,EACE,0lBAIA,EAAA,OAAO,CAAC,MAAO,EAAK,CAAA,EAGxB,MAAMkB,EAASC,IAEff,EAAS,KAAK,SAAcc,EAAO,IAAI,GAAG,EAEjCd,EAAA,OAASc,EAAO,IAAI,QAAQ,EAErCb,EAAI,IAAM,IAAI,EAAE,IAAI,KAAK,EACzB,MAAMe,EAAWhB,EAAS,WACpBiB,EAAcZ,EAAQ,sBACtBa,EAAQ,IAAI,EAAE,UAAUF,EAAU,CAAC,YAAaC,EAAY,EAC9DhB,EAAA,IAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,SAASiB,CAAK,EACpB,IAAI,EAAE,QAAQ,MAAM,CAAC,OAAQ,GAAM,SAAU,EAAA,CAAM,EAC3D,MAAMjB,EAAI,GAAG,EAExBL,EAAA,QAAQ,EAAE,GAAG,CACb,WAAY,CACRA,EAAA,iBAAiB,EAAE,SAAS,WAAW,CAC3C,EACA,UAAW,CACPA,EAAA,iBAAiB,EAAE,YAAY,WAAW,CAC9C,CAAA,CACD,EACDK,EAAI,IAAI,GAAG,WAAa,GAAM,CACxB,GAAE,EAAE,iBAAiB,EAAE,QAC3B,CAAAA,EAAI,IAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,GAAI,EAAI,EAC5B,GAAA,CACFA,EAAI,IAAI,UAAU,EAAE,MAAM,WAAW,OACzB,CAAC,EAAA,CAChB,EAEDG,EAAS,SAAS,WAAiBe,GAAc,CAC/CvB,EACE,uMAAuMuB,CAAS,iBAAA,EAChN,SAAS,MAAM,CAAA,EAEfnB,EAAS,QACXI,EAAS,SAAS,YAAkBgB,GAAW,CACtC,OAAA,YACL,KAAK,UAAU,CAAC,QAAS,cAAe,IAAKA,EAAO,EACpD,GAAA,CACF,EAEFhB,EAAS,SAAS,aAAmBgB,GAAW,CACvC,OAAA,YACL,KAAK,UAAU,CAAC,QAAS,eAAgB,IAAKA,EAAO,EACrD,GAAA,CACF,IAGFhB,EAAS,SAAS,YAAkBgB,GAAW,CAC7C,MACE;AAAA,EAAiEA,CAAM,EAAA,CACzE,EAEFhB,EAAS,SAAS,aAAmBgB,GAAW,CAC9C,MACE;AAAA;AAAA,EAAsGA,CAAM,EAAA,CAC9G,GAGKhB,EAAA,SAAS,eAAoB,IAAM,CACtCH,EAAA,IAAI,SAASG,EAAS,QAAQ,CAAA,EAEpCA,EAAS,SAAS,aAAmBiB,GAAM,CACvCA,EAAA,OAAOpB,EAAI,GAAG,CAAA,EAElBG,EAAS,SAAS,eAAoB,CAACkB,EAAQC,EAAKC,EAASC,IAAe,CAC/DA,GAAA,EAEJrB,EAAA,SAAS,iBAAsB,IAAM,CACrC,OAAA,YACL,KAAK,UAAU,CACb,MAAOJ,EAAS,KAAK,SACrB,WAAYI,EAAS,WACrB,WAAYA,EAAS,UAAA,CACtB,EACD,GAAA,CACF,EAGFH,EAAI,WAAW,CACjB,CAAC"} \ No newline at end of file +{"version":3,"file":"map-DHdWe_L0.js","sources":["../../js/map.ts"],"sourcesContent":["// escape strings to show them directly in the html.\nimport $ from \"jquery\";\nimport \"leaflet\";\n\n// include the CSS files\nimport \"leaflet/dist/leaflet.css\";\nimport \"../css/map.css\";\n\nimport configs from \"./configs\";\nimport overpass from \"./overpass\";\nimport Query from \"./query\";\nimport {parseUrlParameters} from \"./urlParameters\";\n\n$(document).ready(() => {\n // main map cache\n const cache = {};\n\n window.addEventListener(\n \"message\",\n async (evt) => {\n const data = typeof evt.data === \"string\" ? JSON.parse(evt.data) : {};\n if (data.cmd === \"update_map\") {\n settings.code[\"overpass\"] = data.value[0];\n ide.update_map();\n } else if (data.cmd === \"cache\") {\n settings.code[\"overpass\"] = data.value[0];\n const query = await ide.getQuery();\n const query_lang = ide.getQueryLang();\n overpass.run_query(\n query,\n query_lang,\n cache,\n true,\n undefined,\n ide.mapcss\n );\n }\n },\n false\n );\n\n // some initalizations\n $.fn.dialog = function () {\n alert(`error :( ${$(this).html()}`);\n };\n configs.appname = \"overpass-ide-map\";\n const settings = {\n code: {},\n server: configs.defaultServer,\n tileServer: configs.defaultTiles,\n silent: false,\n force_simple_cors_request: true,\n disable_poiomatic: false\n };\n const ide = {\n map: undefined as unknown as L.Map,\n mapcss: \"\",\n async getQuery(): Promise {\n let query = settings.code[\"overpass\"];\n const queryParser = new Query();\n query = await queryParser.parse(query, {});\n // parse mapcss declarations\n let mapcss = \"\";\n if (queryParser.hasStatement(\"style\"))\n mapcss = queryParser.getStatement(\"style\");\n ide.mapcss = mapcss;\n // parse data-source statements\n let data_source = null;\n if (queryParser.hasStatement(\"data\")) {\n data_source = queryParser.getStatement(\"data\");\n data_source = data_source.split(\",\");\n const data_mode = data_source[0].toLowerCase();\n data_source = data_source.slice(1);\n const options = {};\n for (const src of data_source) {\n const tmp = src.split(\"=\");\n options[tmp[0]] = tmp[1];\n }\n data_source = {\n mode: data_mode,\n options: options\n };\n }\n ide.data_source = data_source;\n // remove newlines\n query = query.trim();\n\n return query;\n },\n getQueryLang() {\n return $.trim(settings.code[\"overpass\"]).match(/^' +\n '

    The browser you are currently using, is not capable of running this Application. It has to support cross origin resource sharing (CORS).

    ' +\n '

    Please update to a more up-to-date version of your browser or switch to a more capable browser! Recent versions of Opera, Chrome and Firefox have been tested to work.

    ' +\n \"\"\n ).dialog({modal: true});\n }\n // check for any get-parameters\n const params = parseUrlParameters();\n // uncompressed query set in url\n settings.code[\"overpass\"] = params.get(\"Q\");\n // don't alert on overpass errors, but send messages to parent window\n settings.silent = params.has(\"silent\");\n // init leaflet\n ide.map = new L.Map(\"map\");\n const tilesUrl = settings.tileServer;\n const tilesAttrib = configs.tileServerAttribution;\n const tiles = new L.TileLayer(tilesUrl, {attribution: tilesAttrib});\n ide.map.setView([0, 0], 1).addLayer(tiles);\n const scaleControl = new L.Control.Scale({metric: true, imperial: false});\n scaleControl.addTo(ide.map);\n // wait spinner\n $(document).on({\n ajaxStart() {\n $(\"#loading-dialog\").addClass(\"is-active\");\n },\n ajaxStop() {\n $(\"#loading-dialog\").removeClass(\"is-active\");\n }\n });\n ide.map.on(\"layeradd\", (e) => {\n if (!(e.layer instanceof L.GeoJSON)) return;\n ide.map.setView([0, 0], 18, true);\n try {\n ide.map.fitBounds(e.layer.getBounds());\n } catch (err) {}\n });\n // overpass functionality\n overpass.handlers[\"onEmptyMap\"] = (empty_msg) => {\n $(\n `
    This map intentionally left blank. (${empty_msg})
    `\n ).appendTo(\"#map\");\n };\n if (settings.silent) {\n overpass.handlers[\"onAjaxError\"] = (errmsg) => {\n parent.postMessage(\n JSON.stringify({handler: \"onAjaxError\", msg: errmsg}),\n \"*\"\n );\n };\n overpass.handlers[\"onQueryError\"] = (errmsg) => {\n parent.postMessage(\n JSON.stringify({handler: \"onQueryError\", msg: errmsg}),\n \"*\"\n );\n };\n } else {\n overpass.handlers[\"onAjaxError\"] = (errmsg) => {\n alert(\n `An error occured during the execution of the overpass query!\\n${errmsg}`\n );\n };\n overpass.handlers[\"onQueryError\"] = (errmsg) => {\n alert(\n `An error occured during the execution of the overpass query!\\nThis is what overpass API returned:\\n${errmsg}`\n );\n };\n }\n overpass.handlers[\"onGeoJsonReady\"] = () => {\n ide.map.addLayer(overpass.osmLayer);\n };\n overpass.handlers[\"onPopupReady\"] = (p) => {\n p.openOn(ide.map);\n };\n overpass.handlers[\"onDataReceived\"] = (amount, txt, abortCB, continueCB) => {\n continueCB();\n };\n overpass.handlers[\"onRawDataPresent\"] = () => {\n parent.postMessage(\n JSON.stringify({\n query: settings.code[\"overpass\"],\n resultType: overpass.resultType,\n resultText: overpass.resultText\n }),\n \"*\"\n );\n };\n // load the data\n ide.update_map();\n});\n"],"names":["$","cache","evt","data","settings","ide","query","query_lang","overpass","configs","queryParser","Query","mapcss","data_source","data_mode","options","src","tmp","params","parseUrlParameters","tilesUrl","tilesAttrib","tiles","empty_msg","errmsg","p","amount","txt","abortCB","continueCB"],"mappings":"4EAaAA,EAAE,QAAQ,EAAE,MAAM,IAAM,CAEtB,MAAMC,EAAQ,CAAA,EAEP,OAAA,iBACL,UACA,MAAOC,GAAQ,CACP,MAAAC,EAAO,OAAOD,EAAI,MAAS,SAAW,KAAK,MAAMA,EAAI,IAAI,EAAI,GAC/D,GAAAC,EAAK,MAAQ,aACfC,EAAS,KAAK,SAAcD,EAAK,MAAM,CAAC,EACxCE,EAAI,WAAW,UACNF,EAAK,MAAQ,QAAS,CAC/BC,EAAS,KAAK,SAAcD,EAAK,MAAM,CAAC,EAClC,MAAAG,EAAQ,MAAMD,EAAI,WAClBE,EAAaF,EAAI,eACdG,EAAA,UACPF,EACAC,EACAN,EACA,GACA,OACAI,EAAI,MAAA,CAER,CACF,EACA,EAAA,EAIAL,EAAA,GAAG,OAAS,UAAY,CACxB,MAAM,YAAYA,EAAE,IAAI,EAAE,KAAA,CAAM,EAAE,CAAA,EAEpCS,EAAQ,QAAU,mBAClB,MAAML,EAAW,CACf,KAAM,CAAC,EACP,OAAQK,EAAQ,cAChB,WAAYA,EAAQ,aACpB,OAAQ,GACR,0BAA2B,GAC3B,kBAAmB,EAAA,EAEfJ,EAAM,CACV,IAAK,OACL,OAAQ,GACR,MAAM,UAA4B,CAC5B,IAAAC,EAAQF,EAAS,KAAK,SACpB,MAAAM,EAAc,IAAIC,EACxBL,EAAQ,MAAMI,EAAY,MAAMJ,EAAO,CAAE,CAAA,EAEzC,IAAIM,EAAS,GACTF,EAAY,aAAa,OAAO,IACzBE,EAAAF,EAAY,aAAa,OAAO,GAC3CL,EAAI,OAASO,EAEb,IAAIC,EAAc,KACd,GAAAH,EAAY,aAAa,MAAM,EAAG,CACtBG,EAAAH,EAAY,aAAa,MAAM,EAC/BG,EAAAA,EAAY,MAAM,GAAG,EACnC,MAAMC,EAAYD,EAAY,CAAC,EAAE,YAAY,EAC/BA,EAAAA,EAAY,MAAM,CAAC,EACjC,MAAME,EAAU,CAAA,EAChB,UAAWC,KAAOH,EAAa,CACvB,MAAAI,EAAMD,EAAI,MAAM,GAAG,EACzBD,EAAQE,EAAI,CAAC,CAAC,EAAIA,EAAI,CAAC,CACzB,CACcJ,EAAA,CACZ,KAAMC,EACN,QAAAC,CAAA,CAEJ,CACA,OAAAV,EAAI,YAAcQ,EAElBP,EAAQA,EAAM,OAEPA,CACT,EACA,cAAe,CACN,OAAAN,EAAE,KAAKI,EAAS,KAAK,QAAW,EAAE,MAAM,IAAI,EAC/C,MACA,YACN,EACA,MAAM,YAAa,CACfJ,EAAA,aAAa,EAAE,SACb,OAAOQ,EAAS,SAAY,KAC1BH,EAAA,IAAI,YAAYG,EAAS,QAAQ,EACjC,MAAAF,EAAQ,MAAMD,EAAI,WAClBE,EAAaF,EAAI,eACdG,EAAA,UACPF,EACAC,EACAN,EACA,GACA,OACAI,EAAI,MAAA,EAEJL,EAAA,YAAY,EAAE,QAClB,CAAA,EAEFQ,EAAS,KAAK,EAEVR,EAAE,QAAQ,MAAQ,IAEpBA,EACE,0lBAIA,EAAA,OAAO,CAAC,MAAO,EAAK,CAAA,EAGxB,MAAMkB,EAASC,IAEff,EAAS,KAAK,SAAcc,EAAO,IAAI,GAAG,EAEjCd,EAAA,OAASc,EAAO,IAAI,QAAQ,EAErCb,EAAI,IAAM,IAAI,EAAE,IAAI,KAAK,EACzB,MAAMe,EAAWhB,EAAS,WACpBiB,EAAcZ,EAAQ,sBACtBa,EAAQ,IAAI,EAAE,UAAUF,EAAU,CAAC,YAAaC,EAAY,EAC9DhB,EAAA,IAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,CAAC,EAAE,SAASiB,CAAK,EACpB,IAAI,EAAE,QAAQ,MAAM,CAAC,OAAQ,GAAM,SAAU,EAAA,CAAM,EAC3D,MAAMjB,EAAI,GAAG,EAExBL,EAAA,QAAQ,EAAE,GAAG,CACb,WAAY,CACRA,EAAA,iBAAiB,EAAE,SAAS,WAAW,CAC3C,EACA,UAAW,CACPA,EAAA,iBAAiB,EAAE,YAAY,WAAW,CAC9C,CAAA,CACD,EACDK,EAAI,IAAI,GAAG,WAAa,GAAM,CACxB,GAAE,EAAE,iBAAiB,EAAE,QAC3B,CAAAA,EAAI,IAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,GAAI,EAAI,EAC5B,GAAA,CACFA,EAAI,IAAI,UAAU,EAAE,MAAM,WAAW,OACzB,CAAC,EAAA,CAChB,EAEDG,EAAS,SAAS,WAAiBe,GAAc,CAC/CvB,EACE,uMAAuMuB,CAAS,iBAAA,EAChN,SAAS,MAAM,CAAA,EAEfnB,EAAS,QACXI,EAAS,SAAS,YAAkBgB,GAAW,CACtC,OAAA,YACL,KAAK,UAAU,CAAC,QAAS,cAAe,IAAKA,EAAO,EACpD,GAAA,CACF,EAEFhB,EAAS,SAAS,aAAmBgB,GAAW,CACvC,OAAA,YACL,KAAK,UAAU,CAAC,QAAS,eAAgB,IAAKA,EAAO,EACrD,GAAA,CACF,IAGFhB,EAAS,SAAS,YAAkBgB,GAAW,CAC7C,MACE;AAAA,EAAiEA,CAAM,EAAA,CACzE,EAEFhB,EAAS,SAAS,aAAmBgB,GAAW,CAC9C,MACE;AAAA;AAAA,EAAsGA,CAAM,EAAA,CAC9G,GAGKhB,EAAA,SAAS,eAAoB,IAAM,CACtCH,EAAA,IAAI,SAASG,EAAS,QAAQ,CAAA,EAEpCA,EAAS,SAAS,aAAmBiB,GAAM,CACvCA,EAAA,OAAOpB,EAAI,GAAG,CAAA,EAElBG,EAAS,SAAS,eAAoB,CAACkB,EAAQC,EAAKC,EAASC,IAAe,CAC/DA,GAAA,EAEJrB,EAAA,SAAS,iBAAsB,IAAM,CACrC,OAAA,YACL,KAAK,UAAU,CACb,MAAOJ,EAAS,KAAK,SACrB,WAAYI,EAAS,WACrB,WAAYA,EAAS,UAAA,CACtB,EACD,GAAA,CACF,EAGFH,EAAI,WAAW,CACjB,CAAC"} \ No newline at end of file diff --git a/assets/urlParameters-BlcU9mC4.js b/assets/urlParameters-BlcU9mC4.js new file mode 100644 index 00000000..ab56a4a1 --- /dev/null +++ b/assets/urlParameters-BlcU9mC4.js @@ -0,0 +1,310 @@ +(function(){const g=document.createElement("link").relList;if(g&&g.supports&&g.supports("modulepreload"))return;for(const A of document.querySelectorAll('link[rel="modulepreload"]'))D(A);new MutationObserver(A=>{for(const Z of A)if(Z.type==="childList")for(const u of Z.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&D(u)}).observe(document,{childList:!0,subtree:!0});function f(A){const Z={};return A.integrity&&(Z.integrity=A.integrity),A.referrerPolicy&&(Z.referrerPolicy=A.referrerPolicy),A.crossOrigin==="use-credentials"?Z.credentials="include":A.crossOrigin==="anonymous"?Z.credentials="omit":Z.credentials="same-origin",Z}function D(A){if(A.ep)return;A.ep=!0;const Z=f(A);fetch(A.href,Z)}})();var Ur=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ru(w){return w&&w.__esModule&&Object.prototype.hasOwnProperty.call(w,"default")?w.default:w}function h_(w){if(w.__esModule)return w;var g=w.default;if(typeof g=="function"){var f=function D(){return this instanceof D?Reflect.construct(g,arguments,this.constructor):g.apply(this,arguments)};f.prototype=g.prototype}else f={};return Object.defineProperty(f,"__esModule",{value:!0}),Object.keys(w).forEach(function(D){var A=Object.getOwnPropertyDescriptor(w,D);Object.defineProperty(f,D,A.get?A:{enumerable:!0,get:function(){return w[D]}})}),f}var Ul={exports:{}};/*! + * jQuery JavaScript Library v3.7.1 + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-08-28T13:37Z + */(function(w){(function(g,f){w.exports=g.document?f(g,!0):function(D){if(!D.document)throw new Error("jQuery requires a window with a document");return f(D)}})(typeof window<"u"?window:Ur,function(g,f){var D=[],A=Object.getPrototypeOf,Z=D.slice,u=D.flat?function(r){return D.flat.call(r)}:function(r){return D.concat.apply([],r)},Q=D.push,J=D.indexOf,K={},te=K.toString,U=K.hasOwnProperty,de=U.toString,me=de.call(Object),ne={},N=function(s){return typeof s=="function"&&typeof s.nodeType!="number"&&typeof s.item!="function"},Ke=function(s){return s!=null&&s===s.window},Ae=g.document,ze={type:!0,src:!0,nonce:!0,noModule:!0};function Le(r,s,p){p=p||Ae;var h,E,P=p.createElement("script");if(P.text=r,s)for(h in ze)E=s[h]||s.getAttribute&&s.getAttribute(h),E&&P.setAttribute(h,E);p.head.appendChild(P).parentNode.removeChild(P)}function qe(r){return r==null?r+"":typeof r=="object"||typeof r=="function"?K[te.call(r)]||"object":typeof r}var fe="3.7.1",Ie=/HTML$/i,m=function(r,s){return new m.fn.init(r,s)};m.fn=m.prototype={jquery:fe,constructor:m,length:0,toArray:function(){return Z.call(this)},get:function(r){return r==null?Z.call(this):r<0?this[r+this.length]:this[r]},pushStack:function(r){var s=m.merge(this.constructor(),r);return s.prevObject=this,s},each:function(r){return m.each(this,r)},map:function(r){return this.pushStack(m.map(this,function(s,p){return r.call(s,p,s)}))},slice:function(){return this.pushStack(Z.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(m.grep(this,function(r,s){return(s+1)%2}))},odd:function(){return this.pushStack(m.grep(this,function(r,s){return s%2}))},eq:function(r){var s=this.length,p=+r+(r<0?s:0);return this.pushStack(p>=0&&p0&&s-1 in r}function ke(r,s){return r.nodeName&&r.nodeName.toLowerCase()===s.toLowerCase()}var Te=D.pop,je=D.sort,nt=D.splice,at="[\\x20\\t\\r\\n\\f]",ct=new RegExp("^"+at+"+|((?:^|[^\\\\])(?:\\\\.)*)"+at+"+$","g");m.contains=function(r,s){var p=s&&s.parentNode;return r===p||!!(p&&p.nodeType===1&&(r.contains?r.contains(p):r.compareDocumentPosition&&r.compareDocumentPosition(p)&16))};var hn=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function li(r,s){return s?r==="\0"?"�":r.slice(0,-1)+"\\"+r.charCodeAt(r.length-1).toString(16)+" ":"\\"+r}m.escapeSelector=function(r){return(r+"").replace(hn,li)};var Zt=Ae,Ye=Q;(function(){var r,s,p,h,E,P=Ye,x,z,V,Y,pe,ye=m.expando,oe=0,De=0,Be=Pe(),bt=Pe(),gt=Pe(),xi=Pe(),Wt=function($,G){return $===G&&(E=!0),0},Nn="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",On="(?:\\\\[\\da-fA-F]{1,6}"+at+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Dt="\\["+at+"*("+On+")(?:"+at+"*([*^$|!~]?=)"+at+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+On+"))|)"+at+"*\\]",In=":("+On+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+Dt+")*)|.*)\\)|)",pt=new RegExp(at+"+","g"),wt=new RegExp("^"+at+"*,"+at+"*"),un=new RegExp("^"+at+"*([>+~]|"+at+")"+at+"*"),Mi=new RegExp(at+"|>"),ln=new RegExp(In),wn=new RegExp("^"+On+"$"),tn={ID:new RegExp("^#("+On+")"),CLASS:new RegExp("^\\.("+On+")"),TAG:new RegExp("^("+On+"|[*])"),ATTR:new RegExp("^"+Dt),PSEUDO:new RegExp("^"+In),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+at+"*(even|odd|(([+-]|)(\\d*)n|)"+at+"*(?:([+-]|)"+at+"*(\\d+)|))"+at+"*\\)|)","i"),bool:new RegExp("^(?:"+Nn+")$","i"),needsContext:new RegExp("^"+at+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+at+"*((?:-\\d)?\\d*)"+at+"*\\)|)(?=[^-]|$)","i")},Ki=/^(?:input|select|textarea|button)$/i,Mn=/^h\d$/i,Xi=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Ht=/[+~]/,Qe=new RegExp("\\\\[\\da-fA-F]{1,6}"+at+"?|\\\\([^\\r\\n\\f])","g"),k=function($,G){var re="0x"+$.slice(1)-65536;return G||(re<0?String.fromCharCode(re+65536):String.fromCharCode(re>>10|55296,re&1023|56320))},S=function(){Ti()},W=zi(function($){return $.disabled===!0&&ke($,"fieldset")},{dir:"parentNode",next:"legend"});function M(){try{return x.activeElement}catch{}}try{P.apply(D=Z.call(Zt.childNodes),Zt.childNodes),D[Zt.childNodes.length].nodeType}catch{P={apply:function(G,re){Ye.apply(G,Z.call(re))},call:function(G){Ye.apply(G,Z.call(arguments,1))}}}function le($,G,re,ue){var l,v,b,j,ee,ae,ge,we=G&&G.ownerDocument,Me=G?G.nodeType:9;if(re=re||[],typeof $!="string"||!$||Me!==1&&Me!==9&&Me!==11)return re;if(!ue&&(Ti(G),G=G||x,V)){if(Me!==11&&(ee=Xi.exec($)))if(l=ee[1]){if(Me===9)if(b=G.getElementById(l)){if(b.id===l)return P.call(re,b),re}else return re;else if(we&&(b=we.getElementById(l))&&le.contains(G,b)&&b.id===l)return P.call(re,b),re}else{if(ee[2])return P.apply(re,G.getElementsByTagName($)),re;if((l=ee[3])&&G.getElementsByClassName)return P.apply(re,G.getElementsByClassName(l)),re}if(!xi[$+" "]&&(!Y||!Y.test($))){if(ge=$,we=G,Me===1&&(Mi.test($)||un.test($))){for(we=Ht.test($)&&Rn(G.parentNode)||G,(we!=G||!ne.scope)&&((j=G.getAttribute("id"))?j=m.escapeSelector(j):G.setAttribute("id",j=ye)),ae=ar($),v=ae.length;v--;)ae[v]=(j?"#"+j:":scope")+" "+kn(ae[v]);ge=ae.join(",")}try{return P.apply(re,we.querySelectorAll(ge)),re}catch{xi($,!0)}finally{j===ye&&G.removeAttribute("id")}}}return zr($.replace(ct,"$1"),G,re,ue)}function Pe(){var $=[];function G(re,ue){return $.push(re+" ")>s.cacheLength&&delete G[$.shift()],G[re+" "]=ue}return G}function Ce($){return $[ye]=!0,$}function wi($){var G=x.createElement("fieldset");try{return!!$(G)}catch{return!1}finally{G.parentNode&&G.parentNode.removeChild(G),G=null}}function di($){return function(G){return ke(G,"input")&&G.type===$}}function ho($){return function(G){return(ke(G,"input")||ke(G,"button"))&&G.type===$}}function to($){return function(G){return"form"in G?G.parentNode&&G.disabled===!1?"label"in G?"label"in G.parentNode?G.parentNode.disabled===$:G.disabled===$:G.isDisabled===$||G.isDisabled!==!$&&W(G)===$:G.disabled===$:"label"in G?G.disabled===$:!1}}function dn($){return Ce(function(G){return G=+G,Ce(function(re,ue){for(var l,v=$([],re.length,G),b=v.length;b--;)re[l=v[b]]&&(re[l]=!(ue[l]=re[l]))})})}function Rn($){return $&&typeof $.getElementsByTagName<"u"&&$}function Ti($){var G,re=$?$.ownerDocument||$:Zt;return re==x||re.nodeType!==9||!re.documentElement||(x=re,z=x.documentElement,V=!m.isXMLDoc(x),pe=z.matches||z.webkitMatchesSelector||z.msMatchesSelector,z.msMatchesSelector&&Zt!=x&&(G=x.defaultView)&&G.top!==G&&G.addEventListener("unload",S),ne.getById=wi(function(ue){return z.appendChild(ue).id=m.expando,!x.getElementsByName||!x.getElementsByName(m.expando).length}),ne.disconnectedMatch=wi(function(ue){return pe.call(ue,"*")}),ne.scope=wi(function(){return x.querySelectorAll(":scope")}),ne.cssHas=wi(function(){try{return x.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),ne.getById?(s.filter.ID=function(ue){var l=ue.replace(Qe,k);return function(v){return v.getAttribute("id")===l}},s.find.ID=function(ue,l){if(typeof l.getElementById<"u"&&V){var v=l.getElementById(ue);return v?[v]:[]}}):(s.filter.ID=function(ue){var l=ue.replace(Qe,k);return function(v){var b=typeof v.getAttributeNode<"u"&&v.getAttributeNode("id");return b&&b.value===l}},s.find.ID=function(ue,l){if(typeof l.getElementById<"u"&&V){var v,b,j,ee=l.getElementById(ue);if(ee){if(v=ee.getAttributeNode("id"),v&&v.value===ue)return[ee];for(j=l.getElementsByName(ue),b=0;ee=j[b++];)if(v=ee.getAttributeNode("id"),v&&v.value===ue)return[ee]}return[]}}),s.find.TAG=function(ue,l){return typeof l.getElementsByTagName<"u"?l.getElementsByTagName(ue):l.querySelectorAll(ue)},s.find.CLASS=function(ue,l){if(typeof l.getElementsByClassName<"u"&&V)return l.getElementsByClassName(ue)},Y=[],wi(function(ue){var l;z.appendChild(ue).innerHTML="",ue.querySelectorAll("[selected]").length||Y.push("\\["+at+"*(?:value|"+Nn+")"),ue.querySelectorAll("[id~="+ye+"-]").length||Y.push("~="),ue.querySelectorAll("a#"+ye+"+*").length||Y.push(".#.+[+~]"),ue.querySelectorAll(":checked").length||Y.push(":checked"),l=x.createElement("input"),l.setAttribute("type","hidden"),ue.appendChild(l).setAttribute("name","D"),z.appendChild(ue).disabled=!0,ue.querySelectorAll(":disabled").length!==2&&Y.push(":enabled",":disabled"),l=x.createElement("input"),l.setAttribute("name",""),ue.appendChild(l),ue.querySelectorAll("[name='']").length||Y.push("\\["+at+"*name"+at+"*="+at+`*(?:''|"")`)}),ne.cssHas||Y.push(":has"),Y=Y.length&&new RegExp(Y.join("|")),Wt=function(ue,l){if(ue===l)return E=!0,0;var v=!ue.compareDocumentPosition-!l.compareDocumentPosition;return v||(v=(ue.ownerDocument||ue)==(l.ownerDocument||l)?ue.compareDocumentPosition(l):1,v&1||!ne.sortDetached&&l.compareDocumentPosition(ue)===v?ue===x||ue.ownerDocument==Zt&&le.contains(Zt,ue)?-1:l===x||l.ownerDocument==Zt&&le.contains(Zt,l)?1:h?J.call(h,ue)-J.call(h,l):0:v&4?-1:1)}),x}le.matches=function($,G){return le($,null,null,G)},le.matchesSelector=function($,G){if(Ti($),V&&!xi[G+" "]&&(!Y||!Y.test(G)))try{var re=pe.call($,G);if(re||ne.disconnectedMatch||$.document&&$.document.nodeType!==11)return re}catch{xi(G,!0)}return le(G,x,null,[$]).length>0},le.contains=function($,G){return($.ownerDocument||$)!=x&&Ti($),m.contains($,G)},le.attr=function($,G){($.ownerDocument||$)!=x&&Ti($);var re=s.attrHandle[G.toLowerCase()],ue=re&&U.call(s.attrHandle,G.toLowerCase())?re($,G,!V):void 0;return ue!==void 0?ue:$.getAttribute(G)},le.error=function($){throw new Error("Syntax error, unrecognized expression: "+$)},m.uniqueSort=function($){var G,re=[],ue=0,l=0;if(E=!ne.sortStable,h=!ne.sortStable&&Z.call($,0),je.call($,Wt),E){for(;G=$[l++];)G===$[l]&&(ue=re.push(l));for(;ue--;)nt.call($,re[ue],1)}return h=null,$},m.fn.uniqueSort=function(){return this.pushStack(m.uniqueSort(Z.apply(this)))},s=m.expr={cacheLength:50,createPseudo:Ce,match:tn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function($){return $[1]=$[1].replace(Qe,k),$[3]=($[3]||$[4]||$[5]||"").replace(Qe,k),$[2]==="~="&&($[3]=" "+$[3]+" "),$.slice(0,4)},CHILD:function($){return $[1]=$[1].toLowerCase(),$[1].slice(0,3)==="nth"?($[3]||le.error($[0]),$[4]=+($[4]?$[5]+($[6]||1):2*($[3]==="even"||$[3]==="odd")),$[5]=+($[7]+$[8]||$[3]==="odd")):$[3]&&le.error($[0]),$},PSEUDO:function($){var G,re=!$[6]&&$[2];return tn.CHILD.test($[0])?null:($[3]?$[2]=$[4]||$[5]||"":re&&ln.test(re)&&(G=ar(re,!0))&&(G=re.indexOf(")",re.length-G)-re.length)&&($[0]=$[0].slice(0,G),$[2]=re.slice(0,G)),$.slice(0,3))}},filter:{TAG:function($){var G=$.replace(Qe,k).toLowerCase();return $==="*"?function(){return!0}:function(re){return ke(re,G)}},CLASS:function($){var G=Be[$+" "];return G||(G=new RegExp("(^|"+at+")"+$+"("+at+"|$)"))&&Be($,function(re){return G.test(typeof re.className=="string"&&re.className||typeof re.getAttribute<"u"&&re.getAttribute("class")||"")})},ATTR:function($,G,re){return function(ue){var l=le.attr(ue,$);return l==null?G==="!=":G?(l+="",G==="="?l===re:G==="!="?l!==re:G==="^="?re&&l.indexOf(re)===0:G==="*="?re&&l.indexOf(re)>-1:G==="$="?re&&l.slice(-re.length)===re:G==="~="?(" "+l.replace(pt," ")+" ").indexOf(re)>-1:G==="|="?l===re||l.slice(0,re.length+1)===re+"-":!1):!0}},CHILD:function($,G,re,ue,l){var v=$.slice(0,3)!=="nth",b=$.slice(-4)!=="last",j=G==="of-type";return ue===1&&l===0?function(ee){return!!ee.parentNode}:function(ee,ae,ge){var we,Me,$e,Xe,St,Kt=v!==b?"nextSibling":"previousSibling",Qt=ee.parentNode,oi=j&&ee.nodeName.toLowerCase(),nn=!ge&&!j,lt=!1;if(Qt){if(v){for(;Kt;){for($e=ee;$e=$e[Kt];)if(j?ke($e,oi):$e.nodeType===1)return!1;St=Kt=$==="only"&&!St&&"nextSibling"}return!0}if(St=[b?Qt.firstChild:Qt.lastChild],b&&nn){for(Me=Qt[ye]||(Qt[ye]={}),we=Me[$]||[],Xe=we[0]===oe&&we[1],lt=Xe&&we[2],$e=Xe&&Qt.childNodes[Xe];$e=++Xe&&$e&&$e[Kt]||(lt=Xe=0)||St.pop();)if($e.nodeType===1&&++lt&&$e===ee){Me[$]=[oe,Xe,lt];break}}else if(nn&&(Me=ee[ye]||(ee[ye]={}),we=Me[$]||[],Xe=we[0]===oe&&we[1],lt=Xe),lt===!1)for(;($e=++Xe&&$e&&$e[Kt]||(lt=Xe=0)||St.pop())&&!((j?ke($e,oi):$e.nodeType===1)&&++lt&&(nn&&(Me=$e[ye]||($e[ye]={}),Me[$]=[oe,lt]),$e===ee)););return lt-=l,lt===ue||lt%ue===0&</ue>=0}}},PSEUDO:function($,G){var re,ue=s.pseudos[$]||s.setFilters[$.toLowerCase()]||le.error("unsupported pseudo: "+$);return ue[ye]?ue(G):ue.length>1?(re=[$,$,"",G],s.setFilters.hasOwnProperty($.toLowerCase())?Ce(function(l,v){for(var b,j=ue(l,G),ee=j.length;ee--;)b=J.call(l,j[ee]),l[b]=!(v[b]=j[ee])}):function(l){return ue(l,0,re)}):ue}},pseudos:{not:Ce(function($){var G=[],re=[],ue=no($.replace(ct,"$1"));return ue[ye]?Ce(function(l,v,b,j){for(var ee,ae=ue(l,null,j,[]),ge=l.length;ge--;)(ee=ae[ge])&&(l[ge]=!(v[ge]=ee))}):function(l,v,b){return G[0]=l,ue(G,null,b,re),G[0]=null,!re.pop()}}),has:Ce(function($){return function(G){return le($,G).length>0}}),contains:Ce(function($){return $=$.replace(Qe,k),function(G){return(G.textContent||m.text(G)).indexOf($)>-1}}),lang:Ce(function($){return wn.test($||"")||le.error("unsupported lang: "+$),$=$.replace(Qe,k).toLowerCase(),function(G){var re;do if(re=V?G.lang:G.getAttribute("xml:lang")||G.getAttribute("lang"))return re=re.toLowerCase(),re===$||re.indexOf($+"-")===0;while((G=G.parentNode)&&G.nodeType===1);return!1}}),target:function($){var G=g.location&&g.location.hash;return G&&G.slice(1)===$.id},root:function($){return $===z},focus:function($){return $===M()&&x.hasFocus()&&!!($.type||$.href||~$.tabIndex)},enabled:to(!1),disabled:to(!0),checked:function($){return ke($,"input")&&!!$.checked||ke($,"option")&&!!$.selected},selected:function($){return $.parentNode&&$.parentNode.selectedIndex,$.selected===!0},empty:function($){for($=$.firstChild;$;$=$.nextSibling)if($.nodeType<6)return!1;return!0},parent:function($){return!s.pseudos.empty($)},header:function($){return Mn.test($.nodeName)},input:function($){return Ki.test($.nodeName)},button:function($){return ke($,"input")&&$.type==="button"||ke($,"button")},text:function($){var G;return ke($,"input")&&$.type==="text"&&((G=$.getAttribute("type"))==null||G.toLowerCase()==="text")},first:dn(function(){return[0]}),last:dn(function($,G){return[G-1]}),eq:dn(function($,G,re){return[re<0?re+G:re]}),even:dn(function($,G){for(var re=0;reG?ue=G:ue=re;--ue>=0;)$.push(ue);return $}),gt:dn(function($,G,re){for(var ue=re<0?re+G:re;++ue1?function(G,re,ue){for(var l=$.length;l--;)if(!$[l](G,re,ue))return!1;return!0}:$[0]}function Lr($,G,re){for(var ue=0,l=G.length;ue-1&&(b[ge]=!(j[ge]=Me))}}else $e=io($e===j?$e.splice(Kt,$e.length):$e),l?l(null,j,$e,ae):P.apply(j,$e)})}function ki($){for(var G,re,ue,l=$.length,v=s.relative[$[0].type],b=v||s.relative[" "],j=v?1:0,ee=zi(function(we){return we===G},b,!0),ae=zi(function(we){return J.call(G,we)>-1},b,!0),ge=[function(we,Me,$e){var Xe=!v&&($e||Me!=p)||((G=Me).nodeType?ee(we,Me,$e):ae(we,Me,$e));return G=null,Xe}];j1&&po(ge),j>1&&kn($.slice(0,j-1).concat({value:$[j-2].type===" "?"*":""})).replace(ct,"$1"),re,j0,ue=$.length>0,l=function(v,b,j,ee,ae){var ge,we,Me,$e=0,Xe="0",St=v&&[],Kt=[],Qt=p,oi=v||ue&&s.find.TAG("*",ae),nn=oe+=Qt==null?1:Math.random()||.1,lt=oi.length;for(ae&&(p=b==x||b||ae);Xe!==lt&&(ge=oi[Xe])!=null;Xe++){if(ue&&ge){for(we=0,!b&&ge.ownerDocument!=x&&(Ti(ge),j=!V);Me=$[we++];)if(Me(ge,b||x,j)){P.call(ee,ge);break}ae&&(oe=nn)}re&&((ge=!Me&&ge)&&$e--,v&&St.push(ge))}if($e+=Xe,re&&Xe!==$e){for(we=0;Me=G[we++];)Me(St,Kt,b,j);if(v){if($e>0)for(;Xe--;)St[Xe]||Kt[Xe]||(Kt[Xe]=Te.call(ee));Kt=io(Kt)}P.apply(ee,Kt),ae&&!v&&Kt.length>0&&$e+G.length>1&&m.uniqueSort(ee)}return ae&&(oe=nn,p=Qt),St};return re?Ce(l):l}function no($,G){var re,ue=[],l=[],v=gt[$+" "];if(!v){for(G||(G=ar($)),re=G.length;re--;)v=ki(G[re]),v[ye]?ue.push(v):l.push(v);v=gt($,mo(l,ue)),v.selector=$}return v}function zr($,G,re,ue){var l,v,b,j,ee,ae=typeof $=="function"&&$,ge=!ue&&ar($=ae.selector||$);if(re=re||[],ge.length===1){if(v=ge[0]=ge[0].slice(0),v.length>2&&(b=v[0]).type==="ID"&&G.nodeType===9&&V&&s.relative[v[1].type]){if(G=(s.find.ID(b.matches[0].replace(Qe,k),G)||[])[0],G)ae&&(G=G.parentNode);else return re;$=$.slice(v.shift().value.length)}for(l=tn.needsContext.test($)?0:v.length;l--&&(b=v[l],!s.relative[j=b.type]);)if((ee=s.find[j])&&(ue=ee(b.matches[0].replace(Qe,k),Ht.test(v[0].type)&&Rn(G.parentNode)||G))){if(v.splice(l,1),$=ue.length&&kn(v),!$)return P.apply(re,ue),re;break}}return(ae||no($,ge))(ue,G,!V,re,!G||Ht.test($)&&Rn(G.parentNode)||G),re}ne.sortStable=ye.split("").sort(Wt).join("")===ye,Ti(),ne.sortDetached=wi(function($){return $.compareDocumentPosition(x.createElement("fieldset"))&1}),m.find=le,m.expr[":"]=m.expr.pseudos,m.unique=m.uniqueSort,le.compile=no,le.select=zr,le.setDocument=Ti,le.tokenize=ar,le.escape=m.escapeSelector,le.getText=m.text,le.isXML=m.isXMLDoc,le.selectors=m.expr,le.support=m.support,le.uniqueSort=m.uniqueSort})();var fi=function(r,s,p){for(var h=[],E=p!==void 0;(r=r[s])&&r.nodeType!==9;)if(r.nodeType===1){if(E&&m(r).is(p))break;h.push(r)}return h},et=function(r,s){for(var p=[];r;r=r.nextSibling)r.nodeType===1&&r!==s&&p.push(r);return p},yt=m.expr.match.needsContext,Rt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function jt(r,s,p){return N(s)?m.grep(r,function(h,E){return!!s.call(h,E,h)!==p}):s.nodeType?m.grep(r,function(h){return h===s!==p}):typeof s!="string"?m.grep(r,function(h){return J.call(s,h)>-1!==p}):m.filter(s,r,p)}m.filter=function(r,s,p){var h=s[0];return p&&(r=":not("+r+")"),s.length===1&&h.nodeType===1?m.find.matchesSelector(h,r)?[h]:[]:m.find.matches(r,m.grep(s,function(E){return E.nodeType===1}))},m.fn.extend({find:function(r){var s,p,h=this.length,E=this;if(typeof r!="string")return this.pushStack(m(r).filter(function(){for(s=0;s1?m.uniqueSort(p):p},filter:function(r){return this.pushStack(jt(this,r||[],!1))},not:function(r){return this.pushStack(jt(this,r||[],!0))},is:function(r){return!!jt(this,typeof r=="string"&&yt.test(r)?m(r):r||[],!1).length}});var ot,it=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ft=m.fn.init=function(r,s,p){var h,E;if(!r)return this;if(p=p||ot,typeof r=="string")if(r[0]==="<"&&r[r.length-1]===">"&&r.length>=3?h=[null,r,null]:h=it.exec(r),h&&(h[1]||!s))if(h[1]){if(s=s instanceof m?s[0]:s,m.merge(this,m.parseHTML(h[1],s&&s.nodeType?s.ownerDocument||s:Ae,!0)),Rt.test(h[1])&&m.isPlainObject(s))for(h in s)N(this[h])?this[h](s[h]):this.attr(h,s[h]);return this}else return E=Ae.getElementById(h[2]),E&&(this[0]=E,this.length=1),this;else return!s||s.jquery?(s||p).find(r):this.constructor(s).find(r);else{if(r.nodeType)return this[0]=r,this.length=1,this;if(N(r))return p.ready!==void 0?p.ready(r):r(m)}return m.makeArray(r,this)};ft.prototype=m.fn,ot=m(Ae);var pi=/^(?:parents|prev(?:Until|All))/,Gt={children:!0,contents:!0,next:!0,prev:!0};m.fn.extend({has:function(r){var s=m(r,this),p=s.length;return this.filter(function(){for(var h=0;h-1:p.nodeType===1&&m.find.matchesSelector(p,r))){P.push(p);break}}return this.pushStack(P.length>1?m.uniqueSort(P):P)},index:function(r){return r?typeof r=="string"?J.call(m(r),this[0]):J.call(this,r.jquery?r[0]:r):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(r,s){return this.pushStack(m.uniqueSort(m.merge(this.get(),m(r,s))))},addBack:function(r){return this.add(r==null?this.prevObject:this.prevObject.filter(r))}});function ei(r,s){for(;(r=r[s])&&r.nodeType!==1;);return r}m.each({parent:function(r){var s=r.parentNode;return s&&s.nodeType!==11?s:null},parents:function(r){return fi(r,"parentNode")},parentsUntil:function(r,s,p){return fi(r,"parentNode",p)},next:function(r){return ei(r,"nextSibling")},prev:function(r){return ei(r,"previousSibling")},nextAll:function(r){return fi(r,"nextSibling")},prevAll:function(r){return fi(r,"previousSibling")},nextUntil:function(r,s,p){return fi(r,"nextSibling",p)},prevUntil:function(r,s,p){return fi(r,"previousSibling",p)},siblings:function(r){return et((r.parentNode||{}).firstChild,r)},children:function(r){return et(r.firstChild)},contents:function(r){return r.contentDocument!=null&&A(r.contentDocument)?r.contentDocument:(ke(r,"template")&&(r=r.content||r),m.merge([],r.childNodes))}},function(r,s){m.fn[r]=function(p,h){var E=m.map(this,s,p);return r.slice(-5)!=="Until"&&(h=p),h&&typeof h=="string"&&(E=m.filter(h,E)),this.length>1&&(Gt[r]||m.uniqueSort(E),pi.test(r)&&E.reverse()),this.pushStack(E)}});var Ct=/[^\x20\t\r\n\f]+/g;function _t(r){var s={};return m.each(r.match(Ct)||[],function(p,h){s[h]=!0}),s}m.Callbacks=function(r){r=typeof r=="string"?_t(r):m.extend({},r);var s,p,h,E,P=[],x=[],z=-1,V=function(){for(E=E||r.once,h=s=!0;x.length;z=-1)for(p=x.shift();++z-1;)P.splice(oe,1),oe<=z&&z--}),this},has:function(pe){return pe?m.inArray(pe,P)>-1:P.length>0},empty:function(){return P&&(P=[]),this},disable:function(){return E=x=[],P=p="",this},disabled:function(){return!P},lock:function(){return E=x=[],!p&&!s&&(P=p=""),this},locked:function(){return!!E},fireWith:function(pe,ye){return E||(ye=ye||[],ye=[pe,ye.slice?ye.slice():ye],x.push(ye),s||V()),this},fire:function(){return Y.fireWith(this,arguments),this},fired:function(){return!!h}};return Y};function ht(r){return r}function Fi(r){throw r}function Ii(r,s,p,h){var E;try{r&&N(E=r.promise)?E.call(r).done(s).fail(p):r&&N(E=r.then)?E.call(r,s,p):s.apply(void 0,[r].slice(h))}catch(P){p.apply(void 0,[P])}}m.extend({Deferred:function(r){var s=[["notify","progress",m.Callbacks("memory"),m.Callbacks("memory"),2],["resolve","done",m.Callbacks("once memory"),m.Callbacks("once memory"),0,"resolved"],["reject","fail",m.Callbacks("once memory"),m.Callbacks("once memory"),1,"rejected"]],p="pending",h={state:function(){return p},always:function(){return E.done(arguments).fail(arguments),this},catch:function(P){return h.then(null,P)},pipe:function(){var P=arguments;return m.Deferred(function(x){m.each(s,function(z,V){var Y=N(P[V[4]])&&P[V[4]];E[V[1]](function(){var pe=Y&&Y.apply(this,arguments);pe&&N(pe.promise)?pe.promise().progress(x.notify).done(x.resolve).fail(x.reject):x[V[0]+"With"](this,Y?[pe]:arguments)})}),P=null}).promise()},then:function(P,x,z){var V=0;function Y(pe,ye,oe,De){return function(){var Be=this,bt=arguments,gt=function(){var Wt,Nn;if(!(pe=V&&(oe!==Fi&&(Be=void 0,bt=[Wt]),ye.rejectWith(Be,bt))}};pe?xi():(m.Deferred.getErrorHook?xi.error=m.Deferred.getErrorHook():m.Deferred.getStackHook&&(xi.error=m.Deferred.getStackHook()),g.setTimeout(xi))}}return m.Deferred(function(pe){s[0][3].add(Y(0,pe,N(z)?z:ht,pe.notifyWith)),s[1][3].add(Y(0,pe,N(P)?P:ht)),s[2][3].add(Y(0,pe,N(x)?x:Fi))}).promise()},promise:function(P){return P!=null?m.extend(P,h):h}},E={};return m.each(s,function(P,x){var z=x[2],V=x[5];h[x[1]]=z.add,V&&z.add(function(){p=V},s[3-P][2].disable,s[3-P][3].disable,s[0][2].lock,s[0][3].lock),z.add(x[3].fire),E[x[0]]=function(){return E[x[0]+"With"](this===E?void 0:this,arguments),this},E[x[0]+"With"]=z.fireWith}),h.promise(E),r&&r.call(E,E),E},when:function(r){var s=arguments.length,p=s,h=Array(p),E=Z.call(arguments),P=m.Deferred(),x=function(z){return function(V){h[z]=this,E[z]=arguments.length>1?Z.call(arguments):V,--s||P.resolveWith(h,E)}};if(s<=1&&(Ii(r,P.done(x(p)).resolve,P.reject,!s),P.state()==="pending"||N(E[p]&&E[p].then)))return P.then();for(;p--;)Ii(E[p],x(p),P.reject);return P.promise()}});var mi=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;m.Deferred.exceptionHook=function(r,s){g.console&&g.console.warn&&r&&mi.test(r.name)&&g.console.warn("jQuery.Deferred exception: "+r.message,r.stack,s)},m.readyException=function(r){g.setTimeout(function(){throw r})};var pn=m.Deferred();m.fn.ready=function(r){return pn.then(r).catch(function(s){m.readyException(s)}),this},m.extend({isReady:!1,readyWait:1,ready:function(r){(r===!0?--m.readyWait:m.isReady)||(m.isReady=!0,!(r!==!0&&--m.readyWait>0)&&pn.resolveWith(Ae,[m]))}}),m.ready.then=pn.then;function si(){Ae.removeEventListener("DOMContentLoaded",si),g.removeEventListener("load",si),m.ready()}Ae.readyState==="complete"||Ae.readyState!=="loading"&&!Ae.documentElement.doScroll?g.setTimeout(m.ready):(Ae.addEventListener("DOMContentLoaded",si),g.addEventListener("load",si));var ci=function(r,s,p,h,E,P,x){var z=0,V=r.length,Y=p==null;if(qe(p)==="object"){E=!0;for(z in p)ci(r,s,z,p[z],!0,P,x)}else if(h!==void 0&&(E=!0,N(h)||(x=!0),Y&&(x?(s.call(r,h),s=null):(Y=s,s=function(pe,ye,oe){return Y.call(m(pe),oe)})),s))for(;z1,null,!0)},removeData:function(r){return this.each(function(){ni.remove(this,r)})}}),m.extend({queue:function(r,s,p){var h;if(r)return s=(s||"fx")+"queue",h=Fe.get(r,s),p&&(!h||Array.isArray(p)?h=Fe.access(r,s,m.makeArray(p)):h.push(p)),h||[]},dequeue:function(r,s){s=s||"fx";var p=m.queue(r,s),h=p.length,E=p.shift(),P=m._queueHooks(r,s),x=function(){m.dequeue(r,s)};E==="inprogress"&&(E=p.shift(),h--),E&&(s==="fx"&&p.unshift("inprogress"),delete P.stop,E.call(r,x,P)),!h&&P&&P.empty.fire()},_queueHooks:function(r,s){var p=s+"queueHooks";return Fe.get(r,p)||Fe.access(r,p,{empty:m.Callbacks("once memory").add(function(){Fe.remove(r,[s+"queue",p])})})}}),m.fn.extend({queue:function(r,s){var p=2;return typeof r!="string"&&(s=r,r="fx",p--),arguments.length\x20\t\r\n\f]*)/i,$r=/^$|^module$|\/(?:java|ecma)script/i;(function(){var r=Ae.createDocumentFragment(),s=r.appendChild(Ae.createElement("div")),p=Ae.createElement("input");p.setAttribute("type","radio"),p.setAttribute("checked","checked"),p.setAttribute("name","t"),s.appendChild(p),ne.checkClone=s.cloneNode(!0).cloneNode(!0).lastChild.checked,s.innerHTML="",ne.noCloneChecked=!!s.cloneNode(!0).lastChild.defaultValue,s.innerHTML="",ne.option=!!s.lastChild})();var Ei={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Ei.tbody=Ei.tfoot=Ei.colgroup=Ei.caption=Ei.thead,Ei.th=Ei.td,ne.option||(Ei.optgroup=Ei.option=[1,""]);function _i(r,s){var p;return typeof r.getElementsByTagName<"u"?p=r.getElementsByTagName(s||"*"):typeof r.querySelectorAll<"u"?p=r.querySelectorAll(s||"*"):p=[],s===void 0||s&&ke(r,s)?m.merge([r],p):p}function Un(r,s){for(var p=0,h=r.length;p-1){E&&E.push(P);continue}if(Y=qi(P),x=_i(ye.appendChild(P),"script"),Y&&Un(x),p)for(pe=0;P=x[pe++];)$r.test(P.type||"")&&p.push(P)}return ye}var rr=/^([^.]*)(?:\.(.+)|)/;function vn(){return!0}function Cn(){return!1}function Fn(r,s,p,h,E,P){var x,z;if(typeof s=="object"){typeof p!="string"&&(h=h||p,p=void 0);for(z in s)Fn(r,z,p,h,s[z],P);return r}if(h==null&&E==null?(E=p,h=p=void 0):E==null&&(typeof p=="string"?(E=h,h=void 0):(E=h,h=p,p=void 0)),E===!1)E=Cn;else if(!E)return r;return P===1&&(x=E,E=function(V){return m().off(V),x.apply(this,arguments)},E.guid=x.guid||(x.guid=m.guid++)),r.each(function(){m.event.add(this,s,E,h,p)})}m.event={global:{},add:function(r,s,p,h,E){var P,x,z,V,Y,pe,ye,oe,De,Be,bt,gt=Fe.get(r);if(Pi(r))for(p.handler&&(P=p,p=P.handler,E=P.selector),E&&m.find.matchesSelector(bi,E),p.guid||(p.guid=m.guid++),(V=gt.events)||(V=gt.events=Object.create(null)),(x=gt.handle)||(x=gt.handle=function(xi){return typeof m<"u"&&m.event.triggered!==xi.type?m.event.dispatch.apply(r,arguments):void 0}),s=(s||"").match(Ct)||[""],Y=s.length;Y--;)z=rr.exec(s[Y])||[],De=bt=z[1],Be=(z[2]||"").split(".").sort(),De&&(ye=m.event.special[De]||{},De=(E?ye.delegateType:ye.bindType)||De,ye=m.event.special[De]||{},pe=m.extend({type:De,origType:bt,data:h,handler:p,guid:p.guid,selector:E,needsContext:E&&m.expr.match.needsContext.test(E),namespace:Be.join(".")},P),(oe=V[De])||(oe=V[De]=[],oe.delegateCount=0,(!ye.setup||ye.setup.call(r,h,Be,x)===!1)&&r.addEventListener&&r.addEventListener(De,x)),ye.add&&(ye.add.call(r,pe),pe.handler.guid||(pe.handler.guid=p.guid)),E?oe.splice(oe.delegateCount++,0,pe):oe.push(pe),m.event.global[De]=!0)},remove:function(r,s,p,h,E){var P,x,z,V,Y,pe,ye,oe,De,Be,bt,gt=Fe.hasData(r)&&Fe.get(r);if(!(!gt||!(V=gt.events))){for(s=(s||"").match(Ct)||[""],Y=s.length;Y--;){if(z=rr.exec(s[Y])||[],De=bt=z[1],Be=(z[2]||"").split(".").sort(),!De){for(De in V)m.event.remove(r,De+s[Y],p,h,!0);continue}for(ye=m.event.special[De]||{},De=(h?ye.delegateType:ye.bindType)||De,oe=V[De]||[],z=z[2]&&new RegExp("(^|\\.)"+Be.join("\\.(?:.*\\.|)")+"(\\.|$)"),x=P=oe.length;P--;)pe=oe[P],(E||bt===pe.origType)&&(!p||p.guid===pe.guid)&&(!z||z.test(pe.namespace))&&(!h||h===pe.selector||h==="**"&&pe.selector)&&(oe.splice(P,1),pe.selector&&oe.delegateCount--,ye.remove&&ye.remove.call(r,pe));x&&!oe.length&&((!ye.teardown||ye.teardown.call(r,Be,gt.handle)===!1)&&m.removeEvent(r,De,gt.handle),delete V[De])}m.isEmptyObject(V)&&Fe.remove(r,"handle events")}},dispatch:function(r){var s,p,h,E,P,x,z=new Array(arguments.length),V=m.event.fix(r),Y=(Fe.get(this,"events")||Object.create(null))[V.type]||[],pe=m.event.special[V.type]||{};for(z[0]=V,s=1;s=1)){for(;Y!==this;Y=Y.parentNode||this)if(Y.nodeType===1&&!(r.type==="click"&&Y.disabled===!0)){for(P=[],x={},p=0;p-1:m.find(E,this,null,[Y]).length),x[E]&&P.push(h);P.length&&z.push({elem:Y,handlers:P})}}return Y=this,V\s*$/g;function qn(r,s){return ke(r,"table")&&ke(s.nodeType!==11?s:s.firstChild,"tr")&&m(r).children("tbody")[0]||r}function Zn(r){return r.type=(r.getAttribute("type")!==null)+"/"+r.type,r}function Gn(r){return(r.type||"").slice(0,5)==="true/"?r.type=r.type.slice(5):r.removeAttribute("type"),r}function Xn(r,s){var p,h,E,P,x,z,V;if(s.nodeType===1){if(Fe.hasData(r)&&(P=Fe.get(r),V=P.events,V)){Fe.remove(s,"handle events");for(E in V)for(p=0,h=V[E].length;p1&&typeof De=="string"&&!ne.checkClone&&hr.test(De))return r.each(function(bt){var gt=r.eq(bt);Be&&(s[0]=De.call(this,bt,gt.html())),Zi(gt,s,p,h)});if(ye&&(E=Tn(s,r[0].ownerDocument,!1,r,h),P=E.firstChild,E.childNodes.length===1&&(E=P),P||h)){for(x=m.map(_i(E,"script"),Zn),z=x.length;pe0&&Un(x,!V&&_i(r,"script")),z},cleanData:function(r){for(var s,p,h,E=m.event.special,P=0;(p=r[P])!==void 0;P++)if(Pi(p)){if(s=p[Fe.expando]){if(s.events)for(h in s.events)E[h]?m.event.remove(p,h):m.removeEvent(p,h,s.handle);p[Fe.expando]=void 0}p[ni.expando]&&(p[ni.expando]=void 0)}}}),m.fn.extend({detach:function(r){return jr(this,r,!0)},remove:function(r){return jr(this,r)},text:function(r){return ci(this,function(s){return s===void 0?m.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=s)})},null,r,arguments.length)},append:function(){return Zi(this,arguments,function(r){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var s=qn(this,r);s.appendChild(r)}})},prepend:function(){return Zi(this,arguments,function(r){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var s=qn(this,r);s.insertBefore(r,s.firstChild)}})},before:function(){return Zi(this,arguments,function(r){this.parentNode&&this.parentNode.insertBefore(r,this)})},after:function(){return Zi(this,arguments,function(r){this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling)})},empty:function(){for(var r,s=0;(r=this[s])!=null;s++)r.nodeType===1&&(m.cleanData(_i(r,!1)),r.textContent="");return this},clone:function(r,s){return r=r??!1,s=s??r,this.map(function(){return m.clone(this,r,s)})},html:function(r){return ci(this,function(s){var p=this[0]||{},h=0,E=this.length;if(s===void 0&&p.nodeType===1)return p.innerHTML;if(typeof s=="string"&&!st.test(s)&&!Ei[(Di.exec(s)||["",""])[1].toLowerCase()]){s=m.htmlPrefilter(s);try{for(;h=0&&(V+=Math.max(0,Math.ceil(r["offset"+s[0].toUpperCase()+s.slice(1)]-P-V-z-.5))||0),V+Y}function It(r,s,p){var h=Ai(r),E=!ne.boxSizingReliable()||p,P=E&&m.css(r,"boxSizing",!1,h)==="border-box",x=P,z=Hi(r,s,h),V="offset"+s[0].toUpperCase()+s.slice(1);if(Pr.test(z)){if(!p)return z;z="auto"}return(!ne.boxSizingReliable()&&P||!ne.reliableTrDimensions()&&ke(r,"tr")||z==="auto"||!parseFloat(z)&&m.css(r,"display",!1,h)==="inline")&&r.getClientRects().length&&(P=m.css(r,"boxSizing",!1,h)==="border-box",x=V in r,x&&(z=r[V])),z=parseFloat(z)||0,z+Ot(r,s,p||(P?"border":"content"),x,h,z)+"px"}m.extend({cssHooks:{opacity:{get:function(r,s){if(s){var p=Hi(r,"opacity");return p===""?"1":p}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(r,s,p,h){if(!(!r||r.nodeType===3||r.nodeType===8||!r.style)){var E,P,x,z=ui(s),V=q.test(s),Y=r.style;if(V||(s=Wn(z)),x=m.cssHooks[s]||m.cssHooks[z],p!==void 0){if(P=typeof p,P==="string"&&(E=sn.exec(p))&&E[1]&&(p=Cr(r,s,E),P="number"),p==null||p!==p)return;P==="number"&&!V&&(p+=E&&E[3]||(m.cssNumber[z]?"":"px")),!ne.clearCloneStyle&&p===""&&s.indexOf("background")===0&&(Y[s]="inherit"),(!x||!("set"in x)||(p=x.set(r,p,h))!==void 0)&&(V?Y.setProperty(s,p):Y[s]=p)}else return x&&"get"in x&&(E=x.get(r,!1,h))!==void 0?E:Y[s]}},css:function(r,s,p,h){var E,P,x,z=ui(s),V=q.test(s);return V||(s=Wn(z)),x=m.cssHooks[s]||m.cssHooks[z],x&&"get"in x&&(E=x.get(r,!0,p)),E===void 0&&(E=Hi(r,s,h)),E==="normal"&&s in er&&(E=er[s]),p===""||p?(P=parseFloat(E),p===!0||isFinite(P)?P||0:E):E}}),m.each(["height","width"],function(r,s){m.cssHooks[s]={get:function(p,h,E){if(h)return $n.test(m.css(p,"display"))&&(!p.getClientRects().length||!p.getBoundingClientRect().width)?Jn(p,Qn,function(){return It(p,s,E)}):It(p,s,E)},set:function(p,h,E){var P,x=Ai(p),z=!ne.scrollboxSize()&&x.position==="absolute",V=z||E,Y=V&&m.css(p,"boxSizing",!1,x)==="border-box",pe=E?Ot(p,s,E,Y,x):0;return Y&&z&&(pe-=Math.ceil(p["offset"+s[0].toUpperCase()+s.slice(1)]-parseFloat(x[s])-Ot(p,s,"border",!1,x)-.5)),pe&&(P=sn.exec(h))&&(P[3]||"px")!=="px"&&(p.style[s]=h,h=m.css(p,s)),Ve(p,h,pe)}}}),m.cssHooks.marginLeft=Ne(ne.reliableMarginLeft,function(r,s){if(s)return(parseFloat(Hi(r,"marginLeft"))||r.getBoundingClientRect().left-Jn(r,{marginLeft:0},function(){return r.getBoundingClientRect().left}))+"px"}),m.each({margin:"",padding:"",border:"Width"},function(r,s){m.cssHooks[r+s]={expand:function(p){for(var h=0,E={},P=typeof p=="string"?p.split(" "):[p];h<4;h++)E[r+yi[h]+s]=P[h]||P[h-2]||P[0];return E}},r!=="margin"&&(m.cssHooks[r+s].set=Ve)}),m.fn.extend({css:function(r,s){return ci(this,function(p,h,E){var P,x,z={},V=0;if(Array.isArray(h)){for(P=Ai(p),x=h.length;V1)}});function gi(r,s,p,h,E){return new gi.prototype.init(r,s,p,h,E)}m.Tween=gi,gi.prototype={constructor:gi,init:function(r,s,p,h,E,P){this.elem=r,this.prop=p,this.easing=E||m.easing._default,this.options=s,this.start=this.now=this.cur(),this.end=h,this.unit=P||(m.cssNumber[p]?"":"px")},cur:function(){var r=gi.propHooks[this.prop];return r&&r.get?r.get(this):gi.propHooks._default.get(this)},run:function(r){var s,p=gi.propHooks[this.prop];return this.options.duration?this.pos=s=m.easing[this.easing](r,this.options.duration*r,0,1,this.options.duration):this.pos=s=r,this.now=(this.end-this.start)*s+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),p&&p.set?p.set(this):gi.propHooks._default.set(this),this}},gi.prototype.init.prototype=gi.prototype,gi.propHooks={_default:{get:function(r){var s;return r.elem.nodeType!==1||r.elem[r.prop]!=null&&r.elem.style[r.prop]==null?r.elem[r.prop]:(s=m.css(r.elem,r.prop,""),!s||s==="auto"?0:s)},set:function(r){m.fx.step[r.prop]?m.fx.step[r.prop](r):r.elem.nodeType===1&&(m.cssHooks[r.prop]||r.elem.style[Wn(r.prop)]!=null)?m.style(r.elem,r.prop,r.now+r.unit):r.elem[r.prop]=r.now}}},gi.propHooks.scrollTop=gi.propHooks.scrollLeft={set:function(r){r.elem.nodeType&&r.elem.parentNode&&(r.elem[r.prop]=r.now)}},m.easing={linear:function(r){return r},swing:function(r){return .5-Math.cos(r*Math.PI)/2},_default:"swing"},m.fx=gi.prototype.init,m.fx.step={};var Ci,Ui,an=/^(?:toggle|show|hide)$/,Ze=/queueHooks$/;function H(){Ui&&(Ae.hidden===!1&&g.requestAnimationFrame?g.requestAnimationFrame(H):g.setTimeout(H,m.fx.interval),m.fx.tick())}function ce(){return g.setTimeout(function(){Ci=void 0}),Ci=Date.now()}function ve(r,s){var p,h=0,E={height:r};for(s=s?1:0;h<4;h+=2-s)p=yi[h],E["margin"+p]=E["padding"+p]=r;return s&&(E.opacity=E.width=r),E}function Ee(r,s,p){for(var h,E=(rt.tweeners[s]||[]).concat(rt.tweeners["*"]),P=0,x=E.length;P1)},removeAttr:function(r){return this.each(function(){m.removeAttr(this,r)})}}),m.extend({attr:function(r,s,p){var h,E,P=r.nodeType;if(!(P===3||P===8||P===2)){if(typeof r.getAttribute>"u")return m.prop(r,s,p);if((P!==1||!m.isXMLDoc(r))&&(E=m.attrHooks[s.toLowerCase()]||(m.expr.match.bool.test(s)?Ue:void 0)),p!==void 0){if(p===null){m.removeAttr(r,s);return}return E&&"set"in E&&(h=E.set(r,p,s))!==void 0?h:(r.setAttribute(s,p+""),p)}return E&&"get"in E&&(h=E.get(r,s))!==null?h:(h=m.find.attr(r,s),h??void 0)}},attrHooks:{type:{set:function(r,s){if(!ne.radioValue&&s==="radio"&&ke(r,"input")){var p=r.value;return r.setAttribute("type",s),p&&(r.value=p),s}}}},removeAttr:function(r,s){var p,h=0,E=s&&s.match(Ct);if(E&&r.nodeType===1)for(;p=E[h++];)r.removeAttribute(p)}}),Ue={set:function(r,s,p){return s===!1?m.removeAttr(r,p):r.setAttribute(p,p),p}},m.each(m.expr.match.bool.source.match(/\w+/g),function(r,s){var p=Xt[s]||m.find.attr;Xt[s]=function(h,E,P){var x,z,V=E.toLowerCase();return P||(z=Xt[V],Xt[V]=x,x=p(h,E,P)!=null?V:null,Xt[V]=z),x}});var Gi=/^(?:input|select|textarea|button)$/i,Li=/^(?:a|area)$/i;m.fn.extend({prop:function(r,s){return ci(this,m.prop,r,s,arguments.length>1)},removeProp:function(r){return this.each(function(){delete this[m.propFix[r]||r]})}}),m.extend({prop:function(r,s,p){var h,E,P=r.nodeType;if(!(P===3||P===8||P===2))return(P!==1||!m.isXMLDoc(r))&&(s=m.propFix[s]||s,E=m.propHooks[s]),p!==void 0?E&&"set"in E&&(h=E.set(r,p,s))!==void 0?h:r[s]=p:E&&"get"in E&&(h=E.get(r,s))!==null?h:r[s]},propHooks:{tabIndex:{get:function(r){var s=m.find.attr(r,"tabindex");return s?parseInt(s,10):Gi.test(r.nodeName)||Li.test(r.nodeName)&&r.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ne.optSelected||(m.propHooks.selected={get:function(r){var s=r.parentNode;return s&&s.parentNode&&s.parentNode.selectedIndex,null},set:function(r){var s=r.parentNode;s&&(s.selectedIndex,s.parentNode&&s.parentNode.selectedIndex)}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this});function Qi(r){var s=r.match(Ct)||[];return s.join(" ")}function Ni(r){return r.getAttribute&&r.getAttribute("class")||""}function mr(r){return Array.isArray(r)?r:typeof r=="string"?r.match(Ct)||[]:[]}m.fn.extend({addClass:function(r){var s,p,h,E,P,x;return N(r)?this.each(function(z){m(this).addClass(r.call(this,z,Ni(this)))}):(s=mr(r),s.length?this.each(function(){if(h=Ni(this),p=this.nodeType===1&&" "+Qi(h)+" ",p){for(P=0;P-1;)p=p.replace(" "+E+" "," ");x=Qi(p),h!==x&&this.setAttribute("class",x)}}):this):this.attr("class","")},toggleClass:function(r,s){var p,h,E,P,x=typeof r,z=x==="string"||Array.isArray(r);return N(r)?this.each(function(V){m(this).toggleClass(r.call(this,V,Ni(this),s),s)}):typeof s=="boolean"&&z?s?this.addClass(r):this.removeClass(r):(p=mr(r),this.each(function(){if(z)for(P=m(this),E=0;E-1)return!0;return!1}});var _r=/\r/g;m.fn.extend({val:function(r){var s,p,h,E=this[0];return arguments.length?(h=N(r),this.each(function(P){var x;this.nodeType===1&&(h?x=r.call(this,P,m(this).val()):x=r,x==null?x="":typeof x=="number"?x+="":Array.isArray(x)&&(x=m.map(x,function(z){return z==null?"":z+""})),s=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],(!s||!("set"in s)||s.set(this,x,"value")===void 0)&&(this.value=x))})):E?(s=m.valHooks[E.type]||m.valHooks[E.nodeName.toLowerCase()],s&&"get"in s&&(p=s.get(E,"value"))!==void 0?p:(p=E.value,typeof p=="string"?p.replace(_r,""):p??"")):void 0}}),m.extend({valHooks:{option:{get:function(r){var s=m.find.attr(r,"value");return s??Qi(m.text(r))}},select:{get:function(r){var s,p,h,E=r.options,P=r.selectedIndex,x=r.type==="select-one",z=x?null:[],V=x?P+1:E.length;for(P<0?h=V:h=x?P:0;h-1)&&(p=!0);return p||(r.selectedIndex=-1),P}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(r,s){if(Array.isArray(s))return r.checked=m.inArray(m(r).val(),s)>-1}},ne.checkOn||(m.valHooks[this].get=function(r){return r.getAttribute("value")===null?"on":r.value})});var jn=g.location,tr={guid:Date.now()},gr=/\?/;m.parseXML=function(r){var s,p;if(!r||typeof r!="string")return null;try{s=new g.DOMParser().parseFromString(r,"text/xml")}catch{}return p=s&&s.getElementsByTagName("parsererror")[0],(!s||p)&&m.error("Invalid XML: "+(p?m.map(p.childNodes,function(h){return h.textContent}).join(` +`):r)),s};var Vn=/^(?:focusinfocus|focusoutblur)$/,Gr=function(r){r.stopPropagation()};m.extend(m.event,{trigger:function(r,s,p,h){var E,P,x,z,V,Y,pe,ye,oe=[p||Ae],De=U.call(r,"type")?r.type:r,Be=U.call(r,"namespace")?r.namespace.split("."):[];if(P=ye=x=p=p||Ae,!(p.nodeType===3||p.nodeType===8)&&!Vn.test(De+m.event.triggered)&&(De.indexOf(".")>-1&&(Be=De.split("."),De=Be.shift(),Be.sort()),V=De.indexOf(":")<0&&"on"+De,r=r[m.expando]?r:new m.Event(De,typeof r=="object"&&r),r.isTrigger=h?2:3,r.namespace=Be.join("."),r.rnamespace=r.namespace?new RegExp("(^|\\.)"+Be.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,r.result=void 0,r.target||(r.target=p),s=s==null?[r]:m.makeArray(s,[r]),pe=m.event.special[De]||{},!(!h&&pe.trigger&&pe.trigger.apply(p,s)===!1))){if(!h&&!pe.noBubble&&!Ke(p)){for(z=pe.delegateType||De,Vn.test(z+De)||(P=P.parentNode);P;P=P.parentNode)oe.push(P),x=P;x===(p.ownerDocument||Ae)&&oe.push(x.defaultView||x.parentWindow||g)}for(E=0;(P=oe[E++])&&!r.isPropagationStopped();)ye=P,r.type=E>1?z:pe.bindType||De,Y=(Fe.get(P,"events")||Object.create(null))[r.type]&&Fe.get(P,"handle"),Y&&Y.apply(P,s),Y=V&&P[V],Y&&Y.apply&&Pi(P)&&(r.result=Y.apply(P,s),r.result===!1&&r.preventDefault());return r.type=De,!h&&!r.isDefaultPrevented()&&(!pe._default||pe._default.apply(oe.pop(),s)===!1)&&Pi(p)&&V&&N(p[De])&&!Ke(p)&&(x=p[V],x&&(p[V]=null),m.event.triggered=De,r.isPropagationStopped()&&ye.addEventListener(De,Gr),p[De](),r.isPropagationStopped()&&ye.removeEventListener(De,Gr),m.event.triggered=void 0,x&&(p[V]=x)),r.result}},simulate:function(r,s,p){var h=m.extend(new m.Event,p,{type:r,isSimulated:!0});m.event.trigger(h,null,s)}}),m.fn.extend({trigger:function(r,s){return this.each(function(){m.event.trigger(r,s,this)})},triggerHandler:function(r,s){var p=this[0];if(p)return m.event.trigger(r,s,p,!0)}});var Xr=/\[\]$/,Jr=/\r?\n/g,Pt=/^(?:submit|button|image|reset|file)$/i,xn=/^(?:input|select|textarea|keygen)/i;function ri(r,s,p,h){var E;if(Array.isArray(s))m.each(s,function(P,x){p||Xr.test(r)?h(r,x):ri(r+"["+(typeof x=="object"&&x!=null?P:"")+"]",x,p,h)});else if(!p&&qe(s)==="object")for(E in s)ri(r+"["+E+"]",s[E],p,h);else h(r,s)}m.param=function(r,s){var p,h=[],E=function(P,x){var z=N(x)?x():x;h[h.length]=encodeURIComponent(P)+"="+encodeURIComponent(z??"")};if(r==null)return"";if(Array.isArray(r)||r.jquery&&!m.isPlainObject(r))m.each(r,function(){E(this.name,this.value)});else for(p in r)ri(p,r[p],s,E);return h.join("&")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var r=m.prop(this,"elements");return r?m.makeArray(r):this}).filter(function(){var r=this.type;return this.name&&!m(this).is(":disabled")&&xn.test(this.nodeName)&&!Pt.test(r)&&(this.checked||!gn.test(r))}).map(function(r,s){var p=m(this).val();return p==null?null:Array.isArray(p)?m.map(p,function(h){return{name:s.name,value:h.replace(Jr,`\r +`)}}):{name:s.name,value:p.replace(Jr,`\r +`)}}).get()}});var fo=/%20/g,br=/#.*$/,Tr=/([?&])_=[^&]*/,Yr=/^(.*?):[ \t]*([^\r\n]*)$/mg,or=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Qr=/^(?:GET|HEAD)$/,Ar=/^\/\//,kt={},Mt={},Vr="*/".concat("*"),Nr=Ae.createElement("a");Nr.href=jn.href;function co(r){return function(s,p){typeof s!="string"&&(p=s,s="*");var h,E=0,P=s.toLowerCase().match(Ct)||[];if(N(p))for(;h=P[E++];)h[0]==="+"?(h=h.slice(1)||"*",(r[h]=r[h]||[]).unshift(p)):(r[h]=r[h]||[]).push(p)}}function Mr(r,s,p,h){var E={},P=r===Mt;function x(z){var V;return E[z]=!0,m.each(r[z]||[],function(Y,pe){var ye=pe(s,p,h);if(typeof ye=="string"&&!P&&!E[ye])return s.dataTypes.unshift(ye),x(ye),!1;if(P)return!(V=ye)}),V}return x(s.dataTypes[0])||!E["*"]&&x("*")}function O(r,s){var p,h,E=m.ajaxSettings.flatOptions||{};for(p in s)s[p]!==void 0&&((E[p]?r:h||(h={}))[p]=s[p]);return h&&m.extend(!0,r,h),r}function Kr(r,s,p){for(var h,E,P,x,z=r.contents,V=r.dataTypes;V[0]==="*";)V.shift(),h===void 0&&(h=r.mimeType||s.getResponseHeader("Content-Type"));if(h){for(E in z)if(z[E]&&z[E].test(h)){V.unshift(E);break}}if(V[0]in p)P=V[0];else{for(E in p){if(!V[0]||r.converters[E+" "+V[0]]){P=E;break}x||(x=E)}P=P||x}if(P)return P!==V[0]&&V.unshift(P),p[P]}function yn(r,s,p,h){var E,P,x,z,V,Y={},pe=r.dataTypes.slice();if(pe[1])for(x in r.converters)Y[x.toLowerCase()]=r.converters[x];for(P=pe.shift();P;)if(r.responseFields[P]&&(p[r.responseFields[P]]=s),!V&&h&&r.dataFilter&&(s=r.dataFilter(s,r.dataType)),V=P,P=pe.shift(),P){if(P==="*")P=V;else if(V!=="*"&&V!==P){if(x=Y[V+" "+P]||Y["* "+P],!x){for(E in Y)if(z=E.split(" "),z[1]===P&&(x=Y[V+" "+z[0]]||Y["* "+z[0]],x)){x===!0?x=Y[E]:Y[E]!==!0&&(P=z[0],pe.unshift(z[1]));break}}if(x!==!0)if(x&&r.throws)s=x(s);else try{s=x(s)}catch(ye){return{state:"parsererror",error:x?ye:"No conversion from "+V+" to "+P}}}}return{state:"success",data:s}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:jn.href,type:"GET",isLocal:or.test(jn.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Vr,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(r,s){return s?O(O(r,m.ajaxSettings),s):O(m.ajaxSettings,r)},ajaxPrefilter:co(kt),ajaxTransport:co(Mt),ajax:function(r,s){typeof r=="object"&&(s=r,r=void 0),s=s||{};var p,h,E,P,x,z,V,Y,pe,ye,oe=m.ajaxSetup({},s),De=oe.context||oe,Be=oe.context&&(De.nodeType||De.jquery)?m(De):m.event,bt=m.Deferred(),gt=m.Callbacks("once memory"),xi=oe.statusCode||{},Wt={},Nn={},On="canceled",Dt={readyState:0,getResponseHeader:function(pt){var wt;if(V){if(!P)for(P={};wt=Yr.exec(E);)P[wt[1].toLowerCase()+" "]=(P[wt[1].toLowerCase()+" "]||[]).concat(wt[2]);wt=P[pt.toLowerCase()+" "]}return wt==null?null:wt.join(", ")},getAllResponseHeaders:function(){return V?E:null},setRequestHeader:function(pt,wt){return V==null&&(pt=Nn[pt.toLowerCase()]=Nn[pt.toLowerCase()]||pt,Wt[pt]=wt),this},overrideMimeType:function(pt){return V==null&&(oe.mimeType=pt),this},statusCode:function(pt){var wt;if(pt)if(V)Dt.always(pt[Dt.status]);else for(wt in pt)xi[wt]=[xi[wt],pt[wt]];return this},abort:function(pt){var wt=pt||On;return p&&p.abort(wt),In(0,wt),this}};if(bt.promise(Dt),oe.url=((r||oe.url||jn.href)+"").replace(Ar,jn.protocol+"//"),oe.type=s.method||s.type||oe.method||oe.type,oe.dataTypes=(oe.dataType||"*").toLowerCase().match(Ct)||[""],oe.crossDomain==null){z=Ae.createElement("a");try{z.href=oe.url,z.href=z.href,oe.crossDomain=Nr.protocol+"//"+Nr.host!=z.protocol+"//"+z.host}catch{oe.crossDomain=!0}}if(oe.data&&oe.processData&&typeof oe.data!="string"&&(oe.data=m.param(oe.data,oe.traditional)),Mr(kt,oe,s,Dt),V)return Dt;Y=m.event&&oe.global,Y&&m.active++===0&&m.event.trigger("ajaxStart"),oe.type=oe.type.toUpperCase(),oe.hasContent=!Qr.test(oe.type),h=oe.url.replace(br,""),oe.hasContent?oe.data&&oe.processData&&(oe.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(oe.data=oe.data.replace(fo,"+")):(ye=oe.url.slice(h.length),oe.data&&(oe.processData||typeof oe.data=="string")&&(h+=(gr.test(h)?"&":"?")+oe.data,delete oe.data),oe.cache===!1&&(h=h.replace(Tr,"$1"),ye=(gr.test(h)?"&":"?")+"_="+tr.guid+++ye),oe.url=h+ye),oe.ifModified&&(m.lastModified[h]&&Dt.setRequestHeader("If-Modified-Since",m.lastModified[h]),m.etag[h]&&Dt.setRequestHeader("If-None-Match",m.etag[h])),(oe.data&&oe.hasContent&&oe.contentType!==!1||s.contentType)&&Dt.setRequestHeader("Content-Type",oe.contentType),Dt.setRequestHeader("Accept",oe.dataTypes[0]&&oe.accepts[oe.dataTypes[0]]?oe.accepts[oe.dataTypes[0]]+(oe.dataTypes[0]!=="*"?", "+Vr+"; q=0.01":""):oe.accepts["*"]);for(pe in oe.headers)Dt.setRequestHeader(pe,oe.headers[pe]);if(oe.beforeSend&&(oe.beforeSend.call(De,Dt,oe)===!1||V))return Dt.abort();if(On="abort",gt.add(oe.complete),Dt.done(oe.success),Dt.fail(oe.error),p=Mr(Mt,oe,s,Dt),!p)In(-1,"No Transport");else{if(Dt.readyState=1,Y&&Be.trigger("ajaxSend",[Dt,oe]),V)return Dt;oe.async&&oe.timeout>0&&(x=g.setTimeout(function(){Dt.abort("timeout")},oe.timeout));try{V=!1,p.send(Wt,In)}catch(pt){if(V)throw pt;In(-1,pt)}}function In(pt,wt,un,Mi){var ln,wn,tn,Ki,Mn,Xi=wt;V||(V=!0,x&&g.clearTimeout(x),p=void 0,E=Mi||"",Dt.readyState=pt>0?4:0,ln=pt>=200&&pt<300||pt===304,un&&(Ki=Kr(oe,Dt,un)),!ln&&m.inArray("script",oe.dataTypes)>-1&&m.inArray("json",oe.dataTypes)<0&&(oe.converters["text script"]=function(){}),Ki=yn(oe,Ki,Dt,ln),ln?(oe.ifModified&&(Mn=Dt.getResponseHeader("Last-Modified"),Mn&&(m.lastModified[h]=Mn),Mn=Dt.getResponseHeader("etag"),Mn&&(m.etag[h]=Mn)),pt===204||oe.type==="HEAD"?Xi="nocontent":pt===304?Xi="notmodified":(Xi=Ki.state,wn=Ki.data,tn=Ki.error,ln=!tn)):(tn=Xi,(pt||!Xi)&&(Xi="error",pt<0&&(pt=0))),Dt.status=pt,Dt.statusText=(wt||Xi)+"",ln?bt.resolveWith(De,[wn,Xi,Dt]):bt.rejectWith(De,[Dt,Xi,tn]),Dt.statusCode(xi),xi=void 0,Y&&Be.trigger(ln?"ajaxSuccess":"ajaxError",[Dt,oe,ln?wn:tn]),gt.fireWith(De,[Dt,Xi]),Y&&(Be.trigger("ajaxComplete",[Dt,oe]),--m.active||m.event.trigger("ajaxStop")))}return Dt},getJSON:function(r,s,p){return m.get(r,s,p,"json")},getScript:function(r,s){return m.get(r,void 0,s,"script")}}),m.each(["get","post"],function(r,s){m[s]=function(p,h,E,P){return N(h)&&(P=P||E,E=h,h=void 0),m.ajax(m.extend({url:p,type:s,dataType:P,data:h,success:E},m.isPlainObject(p)&&p))}}),m.ajaxPrefilter(function(r){var s;for(s in r.headers)s.toLowerCase()==="content-type"&&(r.contentType=r.headers[s]||"")}),m._evalUrl=function(r,s,p){return m.ajax({url:r,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(h){m.globalEval(h,s,p)}})},m.fn.extend({wrapAll:function(r){var s;return this[0]&&(N(r)&&(r=r.call(this[0])),s=m(r,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&s.insertBefore(this[0]),s.map(function(){for(var p=this;p.firstElementChild;)p=p.firstElementChild;return p}).append(this)),this},wrapInner:function(r){return N(r)?this.each(function(s){m(this).wrapInner(r.call(this,s))}):this.each(function(){var s=m(this),p=s.contents();p.length?p.wrapAll(r):s.append(r)})},wrap:function(r){var s=N(r);return this.each(function(p){m(this).wrapAll(s?r.call(this,p):r)})},unwrap:function(r){return this.parent(r).not("body").each(function(){m(this).replaceWith(this.childNodes)}),this}}),m.expr.pseudos.hidden=function(r){return!m.expr.pseudos.visible(r)},m.expr.pseudos.visible=function(r){return!!(r.offsetWidth||r.offsetHeight||r.getClientRects().length)},m.ajaxSettings.xhr=function(){try{return new g.XMLHttpRequest}catch{}};var $t={0:200,1223:204},_e=m.ajaxSettings.xhr();ne.cors=!!_e&&"withCredentials"in _e,ne.ajax=_e=!!_e,m.ajaxTransport(function(r){var s,p;if(ne.cors||_e&&!r.crossDomain)return{send:function(h,E){var P,x=r.xhr();if(x.open(r.type,r.url,r.async,r.username,r.password),r.xhrFields)for(P in r.xhrFields)x[P]=r.xhrFields[P];r.mimeType&&x.overrideMimeType&&x.overrideMimeType(r.mimeType),!r.crossDomain&&!h["X-Requested-With"]&&(h["X-Requested-With"]="XMLHttpRequest");for(P in h)x.setRequestHeader(P,h[P]);s=function(z){return function(){s&&(s=p=x.onload=x.onerror=x.onabort=x.ontimeout=x.onreadystatechange=null,z==="abort"?x.abort():z==="error"?typeof x.status!="number"?E(0,"error"):E(x.status,x.statusText):E($t[x.status]||x.status,x.statusText,(x.responseType||"text")!=="text"||typeof x.responseText!="string"?{binary:x.response}:{text:x.responseText},x.getAllResponseHeaders()))}},x.onload=s(),p=x.onerror=x.ontimeout=s("error"),x.onabort!==void 0?x.onabort=p:x.onreadystatechange=function(){x.readyState===4&&g.setTimeout(function(){s&&p()})},s=s("abort");try{x.send(r.hasContent&&r.data||null)}catch(z){if(s)throw z}},abort:function(){s&&s()}}}),m.ajaxPrefilter(function(r){r.crossDomain&&(r.contents.script=!1)}),m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(r){return m.globalEval(r),r}}}),m.ajaxPrefilter("script",function(r){r.cache===void 0&&(r.cache=!1),r.crossDomain&&(r.type="GET")}),m.ajaxTransport("script",function(r){if(r.crossDomain||r.scriptAttrs){var s,p;return{send:function(h,E){s=m(" - + + diff --git a/map.html b/map.html index ed15aa87..87e664a3 100644 --- a/map.html +++ b/map.html @@ -8,8 +8,8 @@ /> overpass turbo - map - - + +