diff --git a/dist/mapbox-gl-indoorequal.cjs.js b/dist/mapbox-gl-indoorequal.cjs.js index 702a269..e5581c9 100644 --- a/dist/mapbox-gl-indoorequal.cjs.js +++ b/dist/mapbox-gl-indoorequal.cjs.js @@ -285,6 +285,7 @@ const layers = [ * @param {object} map the mapbox-gl instance of the map * @param {object} options * @param {url} [options.url] Override the default tiles URL (https://tiles.indoorequal.org/). + * @param {string} [options.apiKey] The API key if you use the default tile URL (get your free key at [indoorequal.com](https://indoorequal.com)). * @property {string} level The current level displayed * @property {array} levels The levels that can be displayed in the current view * @fires IndoorEqual#levelschange @@ -293,9 +294,14 @@ const layers = [ */ class IndoorEqual { constructor(map, options = {}) { - const opts = { url: 'https://tiles.indoorequal.org/', ...options }; + const defaultOpts = { url: 'https://tiles.indoorequal.org/' }; + const opts = { ...defaultOpts, ...options }; + if (opts.url === defaultOpts.url && !opts.apiKey) { + throw 'You must register your apiKey at https://indoorequal.com before and set it as apiKey param.'; + } this.map = map; this.url = opts.url; + this.apiKey = opts.apiKey; this.levels = []; this.level = "0"; this.events = {}; @@ -361,9 +367,10 @@ class IndoorEqual { } _addSource() { + const queryParams = this.apiKey ? `?key=${this.apiKey}` : ''; this.map.addSource(SOURCE_ID, { type: 'vector', - url: this.url + url: `${this.url}${queryParams}` }); layers.forEach((layer) => { this.map.addLayer({ diff --git a/dist/mapbox-gl-indoorequal.esm.js b/dist/mapbox-gl-indoorequal.esm.js index 2118e44..cfa4eca 100644 --- a/dist/mapbox-gl-indoorequal.esm.js +++ b/dist/mapbox-gl-indoorequal.esm.js @@ -281,6 +281,7 @@ const layers = [ * @param {object} map the mapbox-gl instance of the map * @param {object} options * @param {url} [options.url] Override the default tiles URL (https://tiles.indoorequal.org/). + * @param {string} [options.apiKey] The API key if you use the default tile URL (get your free key at [indoorequal.com](https://indoorequal.com)). * @property {string} level The current level displayed * @property {array} levels The levels that can be displayed in the current view * @fires IndoorEqual#levelschange @@ -289,9 +290,14 @@ const layers = [ */ class IndoorEqual { constructor(map, options = {}) { - const opts = { url: 'https://tiles.indoorequal.org/', ...options }; + const defaultOpts = { url: 'https://tiles.indoorequal.org/' }; + const opts = { ...defaultOpts, ...options }; + if (opts.url === defaultOpts.url && !opts.apiKey) { + throw 'You must register your apiKey at https://indoorequal.com before and set it as apiKey param.'; + } this.map = map; this.url = opts.url; + this.apiKey = opts.apiKey; this.levels = []; this.level = "0"; this.events = {}; @@ -357,9 +363,10 @@ class IndoorEqual { } _addSource() { + const queryParams = this.apiKey ? `?key=${this.apiKey}` : ''; this.map.addSource(SOURCE_ID, { type: 'vector', - url: this.url + url: `${this.url}${queryParams}` }); layers.forEach((layer) => { this.map.addLayer({ diff --git a/dist/mapbox-gl-indoorequal.umd.min.js b/dist/mapbox-gl-indoorequal.umd.min.js index 7d32f9d..b974b54 100644 --- a/dist/mapbox-gl-indoorequal.umd.min.js +++ b/dist/mapbox-gl-indoorequal.umd.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).IndoorEqual=t()}(this,(function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=0?i=setTimeout(s,t-u):(i=null,n||(a=e.apply(o,r),o=r=null))}null==t&&(t=100);var u=function(){o=this,r=arguments,l=Date.now();var u=n&&!i;return i||(i=setTimeout(s,t)),u&&(a=e.apply(o,r),o=r=null),a};return u.clear=function(){i&&(clearTimeout(i),i=null)},u.flush=function(){i&&(a=e.apply(o,r),o=r=null,clearTimeout(i),i=null)},u}s.debounce=s;var u=s;var c=function(){function t(n){var i=this;e(this,t),this.indoorequal=n,this._cbRefresh=function(){return i._refresh()},this.indoorequal.on("levelschange",this._cbRefresh),this.indoorequal.on("levelchange",this._cbRefresh),this.$el=document.createElement("div"),this.$el.classList.add("mapboxgl-ctrl","mapboxgl-ctrl-group","mapboxgl-ctrl-indoorequal"),this._refresh()}return n(t,[{key:"destroy",value:function(){this.$el.remove(),this.indoorequal.off("levelschange",this._cbRefresh),this.indoorequal.off("levelchange",this._cbRefresh)}},{key:"_refresh",value:function(){var e=this;if(this.$el.innerHTML="",1!==this.indoorequal.levels.length)this.indoorequal.levels.map((function(t){var n=document.createElement("button"),i=document.createElement("strong");i.textContent=t,n.appendChild(i),t==e.indoorequal.level&&n.classList.add("mapboxgl-ctrl-active"),n.addEventListener("click",(function(){e.indoorequal.updateLevel(t)})),e.$el.appendChild(n)}))}}]),t}(),f={type:"symbol","source-layer":"poi",layout:{"icon-image":"{class}_11","text-anchor":"top","text-field":"{name:latin}\n{name:nonlatin}","text-font":["Noto Sans Regular"],"text-max-width":9,"text-offset":[0,.6],"text-padding":2,"text-size":12},paint:{"text-color":"#666","text-halo-blur":.5,"text-halo-color":"#ffffff","text-halo-width":1}},h=["waste_basket","information"],d=[{id:"indoor-polygon",type:"fill","source-layer":"area",filter:["all",["==","$type","Polygon"],["!=","class","level"]],layout:{visibility:"visible"},paint:{"fill-color":"white"}},{id:"indoor-area",type:"line","source-layer":"area",filter:["all",["in","class","area","corridor","platform"]],layout:{visibility:"visible"},paint:{"line-color":"#bfbfbf","line-width":1}},{id:"indoor-column",type:"fill","source-layer":"area",filter:["all",["==","class","column"]],layout:{visibility:"visible"},paint:{"fill-color":"#bfbfbf"}},{id:"indoor-lines",type:"line","source-layer":"area",filter:["all",["in","class","room","wall"]],layout:{visibility:"visible"},paint:{"line-color":"gray","line-width":2}},{id:"indoor-transportation",type:"line","source-layer":"transportation",filter:["all"],layout:{visibility:"visible"},paint:{"line-color":"gray","line-dasharray":[.4,.75],"line-width":{base:1.4,stops:[[17,2],[20,10]]}}},o(o({id:"indoor-poi-rank1"},f),{},{filter:["all",["==","$type","Point"],["!in","class"].concat(h)]}),o(o({id:"indoor-poi-rank2"},f),{},{minzoom:19,filter:["all",["==","$type","Point"],["in","class"].concat(h)]}),o(o({id:"indoor-poi-vending"},f),{},{minzoom:19,filter:["all",["==","$type","Point"],["==","class","vending_machine"]],layout:o(o({},f.layout),{},{"icon-image":"{subclass}_11"})}),{id:"indoor-name",type:"symbol","source-layer":"area_name",filter:["all"],layout:{"text-field":["get","name"],"text-font":["Noto Sans Regular"],"text-max-width":5,"text-size":14},paint:{"text-color":"#666","text-halo-color":"#ffffff","text-halo-width":1}}];return function(){function t(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e(this,t);var r=o({url:"https://tiles.indoorequal.org/"},i);this.map=n,this.url=r.url,this.levels=[],this.level="0",this.events={},this.map.isStyleLoaded()?this._addSource():this.map.on("load",this._addSource.bind(this))}return n(t,[{key:"on",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}},{key:"off",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e]=this.events[e].filter((function(e){return e!==t}))}},{key:"onAdd",value:function(){return this._control=new c(this),this._control.$el}},{key:"onRemove",value:function(){this._control.destroy(),this._control=null}},{key:"updateLevel",value:function(e){this.level=e,this._updateFilters(),this._emitLevelChange()}},{key:"_addSource",value:function(){var e=this;this.map.addSource("indoorequal",{type:"vector",url:this.url}),d.forEach((function(t){e.map.addLayer(o({source:"indoorequal"},t))})),this._updateFilters();var t=u(this._updateLevels.bind(this),1e3);this.map.on("load",t),this.map.on("data",t),this.map.on("move",t)}},{key:"_updateFilters",value:function(){var e=this;d.forEach((function(t){e.map.setFilter(t.id,[].concat(l(t.filter),[["==","level",e.level]]))}))}},{key:"_refreshAfterLevelsUpdate",value:function(){this.levels.includes(this.level)||this.updateLevel("0")}},{key:"_updateLevels",value:function(){if(this.map.isSourceLoaded("indoorequal")){var e=function(e){for(var t=[],n=0;n1?t-1:0),i=1;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=0?n=setTimeout(s,t-u):(n=null,i||(a=e.apply(o,r),o=r=null))}null==t&&(t=100);var u=function(){o=this,r=arguments,l=Date.now();var u=i&&!n;return n||(n=setTimeout(s,t)),u&&(a=e.apply(o,r),o=r=null),a};return u.clear=function(){n&&(clearTimeout(n),n=null)},u.flush=function(){n&&(a=e.apply(o,r),o=r=null,clearTimeout(n),n=null)},u}s.debounce=s;var u=s;var c=function(){function t(i){var n=this;e(this,t),this.indoorequal=i,this._cbRefresh=function(){return n._refresh()},this.indoorequal.on("levelschange",this._cbRefresh),this.indoorequal.on("levelchange",this._cbRefresh),this.$el=document.createElement("div"),this.$el.classList.add("mapboxgl-ctrl","mapboxgl-ctrl-group","mapboxgl-ctrl-indoorequal"),this._refresh()}return i(t,[{key:"destroy",value:function(){this.$el.remove(),this.indoorequal.off("levelschange",this._cbRefresh),this.indoorequal.off("levelchange",this._cbRefresh)}},{key:"_refresh",value:function(){var e=this;if(this.$el.innerHTML="",1!==this.indoorequal.levels.length)this.indoorequal.levels.map((function(t){var i=document.createElement("button"),n=document.createElement("strong");n.textContent=t,i.appendChild(n),t==e.indoorequal.level&&i.classList.add("mapboxgl-ctrl-active"),i.addEventListener("click",(function(){e.indoorequal.updateLevel(t)})),e.$el.appendChild(i)}))}}]),t}(),f={type:"symbol","source-layer":"poi",layout:{"icon-image":"{class}_11","text-anchor":"top","text-field":"{name:latin}\n{name:nonlatin}","text-font":["Noto Sans Regular"],"text-max-width":9,"text-offset":[0,.6],"text-padding":2,"text-size":12},paint:{"text-color":"#666","text-halo-blur":.5,"text-halo-color":"#ffffff","text-halo-width":1}},h=["waste_basket","information"],d=[{id:"indoor-polygon",type:"fill","source-layer":"area",filter:["all",["==","$type","Polygon"],["!=","class","level"]],layout:{visibility:"visible"},paint:{"fill-color":"white"}},{id:"indoor-area",type:"line","source-layer":"area",filter:["all",["in","class","area","corridor","platform"]],layout:{visibility:"visible"},paint:{"line-color":"#bfbfbf","line-width":1}},{id:"indoor-column",type:"fill","source-layer":"area",filter:["all",["==","class","column"]],layout:{visibility:"visible"},paint:{"fill-color":"#bfbfbf"}},{id:"indoor-lines",type:"line","source-layer":"area",filter:["all",["in","class","room","wall"]],layout:{visibility:"visible"},paint:{"line-color":"gray","line-width":2}},{id:"indoor-transportation",type:"line","source-layer":"transportation",filter:["all"],layout:{visibility:"visible"},paint:{"line-color":"gray","line-dasharray":[.4,.75],"line-width":{base:1.4,stops:[[17,2],[20,10]]}}},o(o({id:"indoor-poi-rank1"},f),{},{filter:["all",["==","$type","Point"],["!in","class"].concat(h)]}),o(o({id:"indoor-poi-rank2"},f),{},{minzoom:19,filter:["all",["==","$type","Point"],["in","class"].concat(h)]}),o(o({id:"indoor-poi-vending"},f),{},{minzoom:19,filter:["all",["==","$type","Point"],["==","class","vending_machine"]],layout:o(o({},f.layout),{},{"icon-image":"{subclass}_11"})}),{id:"indoor-name",type:"symbol","source-layer":"area_name",filter:["all"],layout:{"text-field":["get","name"],"text-font":["Noto Sans Regular"],"text-max-width":5,"text-size":14},paint:{"text-color":"#666","text-halo-color":"#ffffff","text-halo-width":1}}];return function(){function t(i){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e(this,t);var r={url:"https://tiles.indoorequal.org/"},l=o(o({},r),n);if(l.url===r.url&&!l.apiKey)throw"You must register your apiKey at https://indoorequal.com before and set it as apiKey param.";this.map=i,this.url=l.url,this.apiKey=l.apiKey,this.levels=[],this.level="0",this.events={},this.map.isStyleLoaded()?this._addSource():this.map.on("load",this._addSource.bind(this))}return i(t,[{key:"on",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}},{key:"off",value:function(e,t){this.events[e]||(this.events[e]=[]),this.events[e]=this.events[e].filter((function(e){return e!==t}))}},{key:"onAdd",value:function(){return this._control=new c(this),this._control.$el}},{key:"onRemove",value:function(){this._control.destroy(),this._control=null}},{key:"updateLevel",value:function(e){this.level=e,this._updateFilters(),this._emitLevelChange()}},{key:"_addSource",value:function(){var e=this,t=this.apiKey?"?key=".concat(this.apiKey):"";this.map.addSource("indoorequal",{type:"vector",url:"".concat(this.url).concat(t)}),d.forEach((function(t){e.map.addLayer(o({source:"indoorequal"},t))})),this._updateFilters();var i=u(this._updateLevels.bind(this),1e3);this.map.on("load",i),this.map.on("data",i),this.map.on("move",i)}},{key:"_updateFilters",value:function(){var e=this;d.forEach((function(t){e.map.setFilter(t.id,[].concat(l(t.filter),[["==","level",e.level]]))}))}},{key:"_refreshAfterLevelsUpdate",value:function(){this.levels.includes(this.level)||this.updateLevel("0")}},{key:"_updateLevels",value:function(){if(this.map.isSourceLoaded("indoorequal")){var e=function(e){for(var t=[],i=0;i1?t-1:0),n=1;n