diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..3c03207 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18 diff --git a/Gruntfile.js b/Gruntfile.js index e3ff7cd..73f5d93 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -13,6 +13,19 @@ module.exports = function (grunt) { clean : { files: ['dist'] }, + copy: { + templates: { + files: [ + { + expand: true, + cwd: 'src/templates/', + src: '**/*.html', + dest: 'dist/assets/js/plugins/storeLocator/templates/', + flatten: true + } + ] + } + }, sass : { dist: { files: { @@ -100,6 +113,10 @@ module.exports = function (grunt) { files: '<%= jshint.gruntfile.src %>', tasks: ['jshint:gruntfile'] }, + templates: { + files: ['src/templates/**/*.html'], + tasks: ['copy'] + }, src : { files : ['src/**/*'], tasks : ['sass', 'concat', 'uglify', 'usebanner', 'cssmin'], @@ -117,6 +134,7 @@ module.exports = function (grunt) { // These plugins provide necessary tasks. grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-sass'); + grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-qunit'); @@ -127,7 +145,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-handlebars'); // Build - grunt.registerTask('build', ['sass', 'concat', 'uglify', 'usebanner', 'cssmin']); + grunt.registerTask('build', ['sass', 'copy', 'concat', 'uglify', 'usebanner', 'cssmin']); //Watch src build grunt.registerTask('watchsrc', ['watch:src']); diff --git a/bower.json b/bower.json index 943f556..7e18028 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "jquery-storelocator-plugin", - "version": "3.1.14", + "version": "3.4.1", "description": "This jQuery plugin takes advantage of Google Maps API version 3 to create an easy to implement store locator. No back-end programming is required, you just need to feed it KML, XML, or JSON data with all the location information.", "repository": { "type": "git", diff --git a/dist/assets/css/bootstrap-example.css b/dist/assets/css/bootstrap-example.css index 4625196..d7fd234 100644 --- a/dist/assets/css/bootstrap-example.css +++ b/dist/assets/css/bootstrap-example.css @@ -2,6 +2,10 @@ .gm-style div, .gm-style span, .gm-style label, .gm-style a { font-family: Arial, Helvetica, sans-serif; } +.GMAMP-maps-pin-view { + color: #000; + font: 400 15px/1 Arial, Helvetica, sans-serif; } + .bh-sl-error { clear: both; float: left; diff --git a/dist/assets/css/bootstrap-example.css.map b/dist/assets/css/bootstrap-example.css.map index de00fec..bde6d2e 100644 --- a/dist/assets/css/bootstrap-example.css.map +++ b/dist/assets/css/bootstrap-example.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAYA,qCAAqC;AACrC,2DAA4D;EAC1D,WAAW,EAJD,4BAA4B;;AAOxC,YAAa;EACX,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,MAAM;EACf,KAAK,EAbD,OAAO;EAcX,WAAW,EAAE,IAAI;;AAGnB,gBAAiB;EACf,KAAK,EAtBI,IAAI;EAwBb,wDAAwD;EAOxD,sDAAsD;EANtD,oBAAI;IACF,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,eAAe;EAI7B,oBAAI;IACF,UAAU,EAAE,sBAAsB;EAGpC,2BAAU;IACR,aAAa,EAAE,CAAC;EAIhB,2GAAmB;IACjB,YAAY,EAAE,IAAI;EAItB,8BAAc;IACZ,OAAO,EAAE,IAAI;EAGf,+BAAe;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,qCAAqC;EAGnD,yCAAyB;IACvB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IAEd,wDAAe;MACb,UAAU,EAAE,IAAI;MAChB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,CAAC;MACV,MAAM,EAAE,WAAW;MAEnB,2DAAG;QACD,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QAEb,iEAAM;UACJ,OAAO,EAAE,MAAM;QAGjB,iEAAM;UACJ,OAAO,EAAE,KAAK;UACd,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,aAAa;EAO3B,uCAAE;IACA,KAAK,EAxFJ,OAAO;IAyFR,eAAe,EAAE,IAAI;IACrB,6FAAkB;MAChB,eAAe,EAAE,SAAS;EAKhC,gCAAgB;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IAEf,mCAAG;MACD,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,IAAI;MAChB,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,CAAC;MAEV,sCAAG;QACD,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,cAAgB;QAAE,+EAA+E;IAI7G,4CAAY;MACV,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,YAAY;MACpB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,UAAU,EAAE,OAAoB;MAChC,KAAK,EAxIH,IAAI;MAyIN,WAAW,EAAE,IAAI;MACjB,aAAa,EAAE,IAAI;IAGrB,8CAAc;MACZ,KAAK,EAAE,IAAI;MACX,WAAW,EAAE,GAAG;MAChB,KAAK,EAAE,GAAG;MAEV,4DAAc;QACZ,OAAO,EAAE,IAAI;MAGf,wDAAU;QACR,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,MAAM;QAClB,KAAK,EAvJF,OAAO;IA2Jd,4CAAY;MACV,MAAM,EAAE,+BAA+B;MACvC,eAAe,EAAE,6BAA6B;MAC9C,kBAAkB,EAAE,6BAA6B;MACjD,UAAU,EAAE,8BAA8B;MAC1C,UAAU,EAAE,gDAAgD;IAG9D,kEAAkC;MAChC,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,QAAQ;MAElB,oFAAkB;QAChB,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,GAAG;IAId,uDAAuB;MACrB,WAAW,EAAE,IAAI;EAIrB,0BAAU;IACR,4CAA4C;IAC5C,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;EAGnB,2BAAW;IACT,MAAM,EAAE,KAAK;EAGf,4CAA4B;IAC1B,KAAK,EAAE,IAAI;IAEX,+CAAG;MACD,eAAe,EAAE,IAAI;MACrB,UAAU,EAAE,MAAM;MAClB,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,MAAM;MAEf,kDAAG;QACD,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,sCAAoB;QAC1B,KAAK,EArMN,OAAO;MAwMR,8DAAe;QACb,KAAK,EA5MF,IAAI;QA6MP,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,IAAI;;AAM7B,kBAAkB;AAClB,cAAe;EACb,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,iCAAiC;EAE7C,kCAAoB;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,MAAM;IAAE,wBAAwB;IAC7C,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,UAAU,EA3ON,IAAI;IA4OR,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,gBAAgB;IAE5B,uDAAqB;MACnB,UAAU,EAAE,IAAI;MAAE,mCAAmC;IAGvD,uDAAqB;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,MAAM;MAAE,kEAAkE;IAGrF,oDAAkB;MAChB,GAAG,EAAE,IAAI;MACT,KAAK,EAAE,IAAI;;AAKjB,iBAAkB;EAChB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EAEX,iDACS;IACP,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,UAAU,EA3QP,IAAI;IA4QP,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,GAAG;IACV,iBAAiB,EAAE,aAAa;IAChC,cAAc,EAAE,aAAa;IAC7B,aAAa,EAAE,aAAa;IAC5B,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,aAAa;EAG1B,6DACe;IACb,UAAU,EAAE,OAAkB;EAGhC,wBAAS;IACP,iBAAiB,EAAE,cAAc;IACjC,cAAc,EAAE,cAAc;IAC9B,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,cAAc", +"mappings": "AAYA,qCAAqC;AACrC,2DAA4D;EAC1D,WAAW,EAJD,4BAA4B;;AAOxC,oBAAqB;EACnB,KAAK,EAXC,IAAI;EAYV,IAAI,EAAE,uCAAqB;;AAG7B,YAAa;EACX,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,MAAM;EACf,KAAK,EAlBD,OAAO;EAmBX,WAAW,EAAE,IAAI;;AAGnB,gBAAiB;EACf,KAAK,EA3BI,IAAI;EA6Bb,wDAAwD;EAOxD,sDAAsD;EANtD,oBAAI;IACF,SAAS,EAAE,eAAe;IAC1B,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,eAAe;EAI7B,oBAAI;IACF,UAAU,EAAE,sBAAsB;EAGpC,2BAAU;IACR,aAAa,EAAE,CAAC;EAIhB,2GAAmB;IACjB,YAAY,EAAE,IAAI;EAItB,8BAAc;IACZ,OAAO,EAAE,IAAI;EAGf,+BAAe;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,qCAAqC;EAGnD,yCAAyB;IACvB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IAEd,wDAAe;MACb,UAAU,EAAE,IAAI;MAChB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,CAAC;MACV,MAAM,EAAE,WAAW;MAEnB,2DAAG;QACD,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QAEb,iEAAM;UACJ,OAAO,EAAE,MAAM;QAGjB,iEAAM;UACJ,OAAO,EAAE,KAAK;UACd,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,aAAa;EAO3B,uCAAE;IACA,KAAK,EA7FJ,OAAO;IA8FR,eAAe,EAAE,IAAI;IACrB,6FAAkB;MAChB,eAAe,EAAE,SAAS;EAKhC,gCAAgB;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IAEf,mCAAG;MACD,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,IAAI;MAChB,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,CAAC;MAEV,sCAAG;QACD,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,cAAgB;QAAE,+EAA+E;IAI7G,4CAAY;MACV,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,YAAY;MACpB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,UAAU,EAAE,OAAoB;MAChC,KAAK,EA7IH,IAAI;MA8IN,WAAW,EAAE,IAAI;MACjB,aAAa,EAAE,IAAI;IAGrB,8CAAc;MACZ,KAAK,EAAE,IAAI;MACX,WAAW,EAAE,GAAG;MAChB,KAAK,EAAE,GAAG;MAEV,4DAAc;QACZ,OAAO,EAAE,IAAI;MAGf,wDAAU;QACR,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,MAAM;QAClB,KAAK,EA5JF,OAAO;IAgKd,4CAAY;MACV,MAAM,EAAE,+BAA+B;MACvC,eAAe,EAAE,6BAA6B;MAC9C,kBAAkB,EAAE,6BAA6B;MACjD,UAAU,EAAE,8BAA8B;MAC1C,UAAU,EAAE,gDAAgD;IAG9D,kEAAkC;MAChC,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,QAAQ;MAElB,oFAAkB;QAChB,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,GAAG;IAId,uDAAuB;MACrB,WAAW,EAAE,IAAI;EAIrB,0BAAU;IACR,4CAA4C;IAC5C,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;EAGnB,2BAAW;IACT,MAAM,EAAE,KAAK;EAGf,4CAA4B;IAC1B,KAAK,EAAE,IAAI;IAEX,+CAAG;MACD,eAAe,EAAE,IAAI;MACrB,UAAU,EAAE,MAAM;MAClB,MAAM,EAAE,CAAC;MACT,OAAO,EAAE,MAAM;MAEf,kDAAG;QACD,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,sCAAoB;QAC1B,KAAK,EA1MN,OAAO;MA6MR,8DAAe;QACb,KAAK,EAjNF,IAAI;QAkNP,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,IAAI;;AAM7B,kBAAkB;AAClB,cAAe;EACb,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,iCAAiC;EAE7C,kCAAoB;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,MAAM;IAAE,wBAAwB;IAC7C,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,UAAU,EAhPN,IAAI;IAiPR,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,gBAAgB;IAE5B,uDAAqB;MACnB,UAAU,EAAE,IAAI;MAAE,mCAAmC;IAGvD,uDAAqB;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,MAAM;MAAE,kEAAkE;IAGrF,oDAAkB;MAChB,GAAG,EAAE,IAAI;MACT,KAAK,EAAE,IAAI;;AAKjB,iBAAkB;EAChB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EAEX,iDACS;IACP,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,UAAU,EAhRP,IAAI;IAiRP,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,GAAG;IACV,iBAAiB,EAAE,aAAa;IAChC,cAAc,EAAE,aAAa;IAC7B,aAAa,EAAE,aAAa;IAC5B,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,aAAa;EAG1B,6DACe;IACb,UAAU,EAAE,OAAkB;EAGhC,wBAAS;IACP,iBAAiB,EAAE,cAAc;IACjC,cAAc,EAAE,cAAc;IAC9B,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,cAAc", "sources": ["../../../src/css/bootstrap-example.scss"], "names": [], "file": "bootstrap-example.css" diff --git a/dist/assets/css/bootstrap-example.min.css b/dist/assets/css/bootstrap-example.min.css index 6150ef3..133626c 100644 --- a/dist/assets/css/bootstrap-example.min.css +++ b/dist/assets/css/bootstrap-example.min.css @@ -1 +1 @@ -.gm-style a,.gm-style div,.gm-style label,.gm-style span{font-family:Arial,Helvetica,sans-serif}.bh-sl-error{clear:both;float:left;width:100%;padding:10px 0;color:#ae2118;font-weight:700}.bh-sl-container{color:#555}.bh-sl-container img{max-width:none!important;border-radius:0!important;box-shadow:none!important}.bh-sl-container>*{box-sizing:content-box!important}.bh-sl-container .jumbotron{margin-bottom:0}.bh-sl-container .form-input input,.bh-sl-container .form-input label,.bh-sl-container .form-input select{margin-right:10px}.bh-sl-container .loc-alt-dist{display:none}.bh-sl-container .bh-sl-loading{float:left;margin:4px 0 0 10px;width:16px;height:16px;background:url(../img/ajax-loader.gif) no-repeat}.bh-sl-container .bh-sl-filters-container{clear:both;width:100%;margin:15px 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters{list-style:none;float:left;padding:0;margin:0 100px 0 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li{display:block;clear:left;float:left;width:100%;margin:5px 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li label{display:inline}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li input{display:block;float:left;margin:2px 8px 2px 0}.bh-sl-container .bh-sl-map-container a{color:#005293;text-decoration:none}.bh-sl-container .bh-sl-map-container a:active,.bh-sl-container .bh-sl-map-container a:hover{text-decoration:underline}.bh-sl-container .bh-sl-loc-list{height:530px;overflow-x:auto;font-size:13px}.bh-sl-container .bh-sl-loc-list ul{display:block;clear:left;float:left;width:100%;list-style:none;margin:0;padding:0}.bh-sl-container .bh-sl-loc-list ul li{display:block;clear:left;float:left;margin:3% 4%;cursor:pointer;width:92%;border:1px solid #fff}.bh-sl-container .bh-sl-loc-list .list-label{float:left;margin:10px 0 0 6px;padding:4px;width:27px;text-align:center;background:#00192d;color:#fff;font-weight:700;border-radius:15px}.bh-sl-container .bh-sl-loc-list .list-details{float:left;margin-left:6px;width:80%}.bh-sl-container .bh-sl-loc-list .list-details .list-content{padding:10px}.bh-sl-container .bh-sl-loc-list .list-details .loc-dist{font-weight:700;font-style:italic;color:#8e8e8e}.bh-sl-container .bh-sl-loc-list .list-focus{border:1px solid rgba(0,82,147,.4);-moz-box-shadow:0 0 8px rgba(0,82,147,.4);-webkit-box-shadow:0 0 8px rgba(0,82,147,.4);box-shadow:0 0 8px rgba(0,100,180,.4);transition:border .2s linear 0s,box-shadow .2s linear 0s}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container{width:100%;height:20px;position:relative}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container .bh-sl-close-icon{top:0;right:6px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-title{font-weight:700}.bh-sl-container .loc-name{font-size:15px;font-weight:700}.bh-sl-container .bh-sl-map{height:530px}.bh-sl-container .bh-sl-pagination-container{clear:both}.bh-sl-container .bh-sl-pagination-container ol{list-style-type:none;text-align:center;margin:0;padding:10px 0}.bh-sl-container .bh-sl-pagination-container ol li{display:inline-block;padding:10px;cursor:pointer;font:bold 14px Arial,Helvetica,sans-serif;color:#005293}.bh-sl-container .bh-sl-pagination-container ol .bh-sl-current{color:#555;cursor:auto;text-decoration:none}.bh-sl-overlay{position:fixed;left:0;top:0;width:100%;height:100%;z-index:10000;background:url(../img/overlay-bg.png) repeat}.bh-sl-overlay .bh-sl-modal-window{position:absolute;left:50%;margin-left:-460px;margin-top:60px;width:920px;height:620px;z-index:10010;background:#fff;border-radius:10px;box-shadow:0 0 10px #656565}.bh-sl-overlay .bh-sl-modal-window .bh-sl-map-container{margin-top:50px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-modal-content{float:left;padding:0 22px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-close-icon{top:13px;right:22px}.bh-sl-close-icon{position:absolute;cursor:pointer;height:24px;width:24px}.bh-sl-close-icon:after,.bh-sl-close-icon:before{position:absolute;top:3px;right:3px;bottom:0;left:50%;background:#ccc;content:'';display:block;height:24px;margin:-3px 0 0 -1px;width:3px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bh-sl-close-icon:hover:after,.bh-sl-close-icon:hover:before{background:#b3b3b3}.bh-sl-close-icon:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} \ No newline at end of file +.gm-style a,.gm-style div,.gm-style label,.gm-style span{font-family:Arial,Helvetica,sans-serif}.GMAMP-maps-pin-view{color:#000;font:400 15px/1 Arial,Helvetica,sans-serif}.bh-sl-error{clear:both;float:left;width:100%;padding:10px 0;color:#ae2118;font-weight:700}.bh-sl-container{color:#555}.bh-sl-container img{max-width:none!important;border-radius:0!important;box-shadow:none!important}.bh-sl-container>*{box-sizing:content-box!important}.bh-sl-container .jumbotron{margin-bottom:0}.bh-sl-container .form-input input,.bh-sl-container .form-input label,.bh-sl-container .form-input select{margin-right:10px}.bh-sl-container .loc-alt-dist{display:none}.bh-sl-container .bh-sl-loading{float:left;margin:4px 0 0 10px;width:16px;height:16px;background:url(../img/ajax-loader.gif) no-repeat}.bh-sl-container .bh-sl-filters-container{clear:both;width:100%;margin:15px 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters{list-style:none;float:left;padding:0;margin:0 100px 0 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li{display:block;clear:left;float:left;width:100%;margin:5px 0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li label{display:inline}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li input{display:block;float:left;margin:2px 8px 2px 0}.bh-sl-container .bh-sl-map-container a{color:#005293;text-decoration:none}.bh-sl-container .bh-sl-map-container a:active,.bh-sl-container .bh-sl-map-container a:hover{text-decoration:underline}.bh-sl-container .bh-sl-loc-list{height:530px;overflow-x:auto;font-size:13px}.bh-sl-container .bh-sl-loc-list ul{display:block;clear:left;float:left;width:100%;list-style:none;margin:0;padding:0}.bh-sl-container .bh-sl-loc-list ul li{display:block;clear:left;float:left;margin:3% 4%;cursor:pointer;width:92%;border:1px solid #fff}.bh-sl-container .bh-sl-loc-list .list-label{float:left;margin:10px 0 0 6px;padding:4px;width:27px;text-align:center;background:#00192d;color:#fff;font-weight:700;border-radius:15px}.bh-sl-container .bh-sl-loc-list .list-details{float:left;margin-left:6px;width:80%}.bh-sl-container .bh-sl-loc-list .list-details .list-content{padding:10px}.bh-sl-container .bh-sl-loc-list .list-details .loc-dist{font-weight:700;font-style:italic;color:#8e8e8e}.bh-sl-container .bh-sl-loc-list .list-focus{border:1px solid rgba(0,82,147,.4);-moz-box-shadow:0 0 8px rgba(0,82,147,.4);-webkit-box-shadow:0 0 8px rgba(0,82,147,.4);box-shadow:0 0 8px rgba(0,100,180,.4);transition:border .2s linear 0s,box-shadow .2s linear 0s}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container{width:100%;height:20px;position:relative}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container .bh-sl-close-icon{top:0;right:6px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-title{font-weight:700}.bh-sl-container .loc-name{font-size:15px;font-weight:700}.bh-sl-container .bh-sl-map{height:530px}.bh-sl-container .bh-sl-pagination-container{clear:both}.bh-sl-container .bh-sl-pagination-container ol{list-style-type:none;text-align:center;margin:0;padding:10px 0}.bh-sl-container .bh-sl-pagination-container ol li{display:inline-block;padding:10px;cursor:pointer;font:bold 14px Arial,Helvetica,sans-serif;color:#005293}.bh-sl-container .bh-sl-pagination-container ol .bh-sl-current{color:#555;cursor:auto;text-decoration:none}.bh-sl-overlay{position:fixed;left:0;top:0;width:100%;height:100%;z-index:10000;background:url(../img/overlay-bg.png) repeat}.bh-sl-overlay .bh-sl-modal-window{position:absolute;left:50%;margin-left:-460px;margin-top:60px;width:920px;height:620px;z-index:10010;background:#fff;border-radius:10px;box-shadow:0 0 10px #656565}.bh-sl-overlay .bh-sl-modal-window .bh-sl-map-container{margin-top:50px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-modal-content{float:left;padding:0 22px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-close-icon{top:13px;right:22px}.bh-sl-close-icon{position:absolute;cursor:pointer;height:24px;width:24px}.bh-sl-close-icon:after,.bh-sl-close-icon:before{position:absolute;top:3px;right:3px;bottom:0;left:50%;background:#ccc;content:'';display:block;height:24px;margin:-3px 0 0 -1px;width:3px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bh-sl-close-icon:hover:after,.bh-sl-close-icon:hover:before{background:#b3b3b3}.bh-sl-close-icon:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} \ No newline at end of file diff --git a/dist/assets/css/storelocator.css b/dist/assets/css/storelocator.css index 4ef4161..7c19bcd 100644 --- a/dist/assets/css/storelocator.css +++ b/dist/assets/css/storelocator.css @@ -14,6 +14,10 @@ .gm-style div, .gm-style span, .gm-style label, .gm-style a { font-family: Arial, Helvetica, sans-serif; } +.GMAMP-maps-pin-view { + color: #000; + font: 400 15px/1 Arial, Helvetica, sans-serif; } + /* InfoBubble font size */ .bh-sl-window { font-size: 13px; } @@ -236,15 +240,23 @@ padding: 10px 0; text-align: center; } .bh-sl-container .bh-sl-pagination-container ol li { + display: inline-block; + margin: 0 4px; } + .bh-sl-container .bh-sl-pagination-container ol a { + box-shadow: none; color: #005293; - cursor: pointer; display: inline-block; font: bold 14px Arial, Helvetica, sans-serif; - padding: 10px; } + padding: 10px; + text-decoration: underline; } .bh-sl-container .bh-sl-pagination-container ol .bh-sl-current { color: #555; cursor: auto; text-decoration: none; } + .bh-sl-container .bh-sl-pagination-container ol .bh-sl-current a { + color: #555; + pointer-events: none; + text-decoration: none; } /* Modal window */ .bh-sl-overlay { diff --git a/dist/assets/css/storelocator.css.map b/dist/assets/css/storelocator.css.map index 4c3473a..8322026 100644 --- a/dist/assets/css/storelocator.css.map +++ b/dist/assets/css/storelocator.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["../../../src/css/storelocator.scss"], "names": [], "file": "storelocator.css" diff --git a/dist/assets/css/storelocator.min.css b/dist/assets/css/storelocator.min.css index c44e097..27883fb 100644 --- a/dist/assets/css/storelocator.min.css +++ b/dist/assets/css/storelocator.min.css @@ -1 +1 @@ -#page-header{display:block;float:left;max-width:800px}#page-header .bh-sl-title{color:#797874;font:normal 20px/1.4 Arial,Helvetica,sans-serif}@media (min-width:1024px){#page-header .bh-sl-title{font-size:30px}}.gm-style a,.gm-style div,.gm-style label,.gm-style span{font-family:Arial,Helvetica,sans-serif}.bh-sl-window{font-size:13px}.bh-sl-error{clear:both;color:#ae2118;float:left;font-weight:700;padding:10px 0;width:100%}.bh-sl-map-container img{border-radius:0!important;box-shadow:none!important;max-height:none!important;max-width:none!important}.bh-sl-container{box-sizing:border-box;color:#555;float:left;font:normal 14px/1.4 Arial,Helvetica,sans-serif;padding:0 15px;width:100%}.bh-sl-container>*{box-sizing:content-box!important}.bh-sl-container .bh-sl-form-container{clear:left;float:left;margin-top:15px;width:100%}.bh-sl-container .form-input{float:left;margin-top:3px;width:100%}@media (min-width:768px){.bh-sl-container .form-input{width:auto}}.bh-sl-container .form-input label{display:block;font-weight:700;width:100%}@media (min-width:768px){.bh-sl-container .form-input label{display:inline-block;width:auto}}.bh-sl-container .form-input input,.bh-sl-container .form-input select{box-sizing:border-box;border:1px solid #ccc;border-radius:4px;font:normal 14px/1.4 Arial,Helvetica,sans-serif;margin:15px 0;padding:6px 12px;width:100%;-webkit-border-radius:4px}@media (min-width:768px){.bh-sl-container .form-input input,.bh-sl-container .form-input select{width:auto;margin:0 15px 0 10px}}.bh-sl-container .loc-alt-dist{display:none}.bh-sl-container button{background:#00447a;border:none;border-radius:4px;color:#fff;cursor:pointer;float:left;font:bold 14px/1.4 Arial,Helvetica,sans-serif;margin-top:3px;padding:6px 12px;white-space:nowrap;-webkit-border-radius:4px}.bh-sl-container .bh-sl-loading{background:url(../img/ajax-loader.gif) no-repeat;float:left;margin:4px 0 0 10px;height:16px;width:16px}.bh-sl-container .bh-sl-filters-container{clear:both;float:left;margin:15px 0;width:100%}.bh-sl-container .bh-sl-filters-container .bh-sl-filters{float:left;list-style:none;margin:0 100px 0 0;padding:0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li{clear:left;display:block;float:left;margin:5px 0;width:100%}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li label{display:inline;vertical-align:text-bottom}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li input{display:block;float:left;margin-right:8px}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li select{box-sizing:border-box;border:1px solid #ccc;border-radius:4px;font:normal 14px/1.4 Arial,Helvetica,sans-serif;padding:6px 12px;-webkit-border-radius:4px}.bh-sl-container .bh-sl-map-container{clear:left;float:left;margin-top:27px;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-map-container{margin-bottom:60px}}.bh-sl-container .bh-sl-map-container a{color:#005293;text-decoration:none}.bh-sl-container .bh-sl-map-container a:active,.bh-sl-container .bh-sl-map-container a:focus,.bh-sl-container .bh-sl-map-container a:hover{text-decoration:underline}.bh-sl-container .bh-sl-loc-list{font-size:13px;height:530px;overflow-x:auto;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-loc-list{width:30%}}.bh-sl-container .bh-sl-loc-list ul{display:block;clear:left;float:left;width:100%;list-style:none;margin:0;padding:0}.bh-sl-container .bh-sl-loc-list ul li{border:1px solid #fff;box-sizing:border-box;clear:left;cursor:pointer;display:block;float:left;width:100%}.bh-sl-container .bh-sl-loc-list .list-label{background:#00192d;border-radius:15px;color:#fff;display:block;float:left;font-weight:700;margin:10px 0 0 15px;padding:4px 7px;text-align:center;width:auto;min-width:13px}.bh-sl-container .bh-sl-loc-list .list-details{float:left;margin-left:6px;width:80%}.bh-sl-container .bh-sl-loc-list .list-details .list-content{padding:10px}.bh-sl-container .bh-sl-loc-list .list-details .loc-dist{color:#6c6c6c;font-weight:700;font-style:italic}.bh-sl-container .bh-sl-loc-list .list-focus{border:1px solid rgba(0,82,147,.4);transition:border .2s linear 0s,box-shadow .2s linear 0s}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container{height:20px;position:relative;width:100%}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container .bh-sl-close-icon{right:6px;top:0}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel{margin:0 2%}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel table{table-layout:auto;width:100%}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel table,.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel td{vertical-align:middle;border-collapse:separate}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel td{padding:1px}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel .adp-placemark{margin:10px 0;border:1px solid silver}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel .adp-marker{padding:3px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-title{font-weight:700;margin:15px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-desc{margin:0 15px}.bh-sl-container .loc-name{font-size:15px;font-weight:700}.bh-sl-container .bh-sl-map{float:left;height:530px;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-map{width:70%}}.bh-sl-container .bh-sl-pagination-container{clear:both}.bh-sl-container .bh-sl-pagination-container ol{list-style-type:none;margin:0;padding:10px 0;text-align:center}.bh-sl-container .bh-sl-pagination-container ol li{color:#005293;cursor:pointer;display:inline-block;font:bold 14px Arial,Helvetica,sans-serif;padding:10px}.bh-sl-container .bh-sl-pagination-container ol .bh-sl-current{color:#555;cursor:auto;text-decoration:none}.bh-sl-overlay{background:url(../img/overlay-bg.png) repeat;height:100%;left:0;position:fixed;top:0;width:100%;z-index:10000}.bh-sl-overlay .bh-sl-modal-window{background:#fff;border-radius:10px;box-shadow:0 0 10px #656565;position:absolute;left:50%;margin-left:-460px;margin-top:60px;height:620px;width:920px;z-index:10010}.bh-sl-overlay .bh-sl-modal-window .bh-sl-map-container{margin-top:50px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-modal-content{float:left;padding:0 1%;width:98%}.bh-sl-overlay .bh-sl-modal-window .bh-sl-close-icon{right:22px;top:13px}.bh-sl-close-icon{cursor:pointer;height:24px;position:absolute;width:24px}.bh-sl-close-icon:after,.bh-sl-close-icon:before{background:#ccc;content:'';display:block;height:24px;margin:-3px 0 0 -1px;position:absolute;bottom:0;left:50%;right:3px;top:3px;width:3px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bh-sl-close-icon:hover:after,.bh-sl-close-icon:hover:before{background:#b3b3b3}.bh-sl-close-icon:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} \ No newline at end of file +#page-header{display:block;float:left;max-width:800px}#page-header .bh-sl-title{color:#797874;font:normal 20px/1.4 Arial,Helvetica,sans-serif}@media (min-width:1024px){#page-header .bh-sl-title{font-size:30px}}.gm-style a,.gm-style div,.gm-style label,.gm-style span{font-family:Arial,Helvetica,sans-serif}.GMAMP-maps-pin-view{color:#000;font:400 15px/1 Arial,Helvetica,sans-serif}.bh-sl-window{font-size:13px}.bh-sl-error{clear:both;color:#ae2118;float:left;font-weight:700;padding:10px 0;width:100%}.bh-sl-map-container img{border-radius:0!important;box-shadow:none!important;max-height:none!important;max-width:none!important}.bh-sl-container{box-sizing:border-box;color:#555;float:left;font:normal 14px/1.4 Arial,Helvetica,sans-serif;padding:0 15px;width:100%}.bh-sl-container>*{box-sizing:content-box!important}.bh-sl-container .bh-sl-form-container{clear:left;float:left;margin-top:15px;width:100%}.bh-sl-container .form-input{float:left;margin-top:3px;width:100%}@media (min-width:768px){.bh-sl-container .form-input{width:auto}}.bh-sl-container .form-input label{display:block;font-weight:700;width:100%}@media (min-width:768px){.bh-sl-container .form-input label{display:inline-block;width:auto}}.bh-sl-container .form-input input,.bh-sl-container .form-input select{box-sizing:border-box;border:1px solid #ccc;border-radius:4px;font:normal 14px/1.4 Arial,Helvetica,sans-serif;margin:15px 0;padding:6px 12px;width:100%;-webkit-border-radius:4px}@media (min-width:768px){.bh-sl-container .form-input input,.bh-sl-container .form-input select{width:auto;margin:0 15px 0 10px}}.bh-sl-container .loc-alt-dist{display:none}.bh-sl-container button{background:#00447a;border:none;border-radius:4px;color:#fff;cursor:pointer;float:left;font:bold 14px/1.4 Arial,Helvetica,sans-serif;margin-top:3px;padding:6px 12px;white-space:nowrap;-webkit-border-radius:4px}.bh-sl-container .bh-sl-loading{background:url(../img/ajax-loader.gif) no-repeat;float:left;margin:4px 0 0 10px;height:16px;width:16px}.bh-sl-container .bh-sl-filters-container{clear:both;float:left;margin:15px 0;width:100%}.bh-sl-container .bh-sl-filters-container .bh-sl-filters{float:left;list-style:none;margin:0 100px 0 0;padding:0}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li{clear:left;display:block;float:left;margin:5px 0;width:100%}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li label{display:inline;vertical-align:text-bottom}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li input{display:block;float:left;margin-right:8px}.bh-sl-container .bh-sl-filters-container .bh-sl-filters li select{box-sizing:border-box;border:1px solid #ccc;border-radius:4px;font:normal 14px/1.4 Arial,Helvetica,sans-serif;padding:6px 12px;-webkit-border-radius:4px}.bh-sl-container .bh-sl-map-container{clear:left;float:left;margin-top:27px;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-map-container{margin-bottom:60px}}.bh-sl-container .bh-sl-map-container a{color:#005293;text-decoration:none}.bh-sl-container .bh-sl-map-container a:active,.bh-sl-container .bh-sl-map-container a:focus,.bh-sl-container .bh-sl-map-container a:hover{text-decoration:underline}.bh-sl-container .bh-sl-loc-list{font-size:13px;height:530px;overflow-x:auto;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-loc-list{width:30%}}.bh-sl-container .bh-sl-loc-list ul{display:block;clear:left;float:left;width:100%;list-style:none;margin:0;padding:0}.bh-sl-container .bh-sl-loc-list ul li{border:1px solid #fff;box-sizing:border-box;clear:left;cursor:pointer;display:block;float:left;width:100%}.bh-sl-container .bh-sl-loc-list .list-label{background:#00192d;border-radius:15px;color:#fff;display:block;float:left;font-weight:700;margin:10px 0 0 15px;padding:4px 7px;text-align:center;width:auto;min-width:13px}.bh-sl-container .bh-sl-loc-list .list-details{float:left;margin-left:6px;width:80%}.bh-sl-container .bh-sl-loc-list .list-details .list-content{padding:10px}.bh-sl-container .bh-sl-loc-list .list-details .loc-dist{color:#6c6c6c;font-weight:700;font-style:italic}.bh-sl-container .bh-sl-loc-list .list-focus{border:1px solid rgba(0,82,147,.4);transition:border .2s linear 0s,box-shadow .2s linear 0s}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container{height:20px;position:relative;width:100%}.bh-sl-container .bh-sl-loc-list .bh-sl-close-directions-container .bh-sl-close-icon{right:6px;top:0}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel{margin:0 2%}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel table{table-layout:auto;width:100%}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel table,.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel td{vertical-align:middle;border-collapse:separate}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel td{padding:1px}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel .adp-placemark{margin:10px 0;border:1px solid silver}.bh-sl-container .bh-sl-loc-list .bh-sl-directions-panel .adp-marker{padding:3px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-title{font-weight:700;margin:15px}.bh-sl-container .bh-sl-loc-list .bh-sl-noresults-desc{margin:0 15px}.bh-sl-container .loc-name{font-size:15px;font-weight:700}.bh-sl-container .bh-sl-map{float:left;height:530px;width:100%}@media (min-width:1024px){.bh-sl-container .bh-sl-map{width:70%}}.bh-sl-container .bh-sl-pagination-container{clear:both}.bh-sl-container .bh-sl-pagination-container ol{list-style-type:none;margin:0;padding:10px 0;text-align:center}.bh-sl-container .bh-sl-pagination-container ol li{display:inline-block;margin:0 4px}.bh-sl-container .bh-sl-pagination-container ol a{box-shadow:none;color:#005293;display:inline-block;font:bold 14px Arial,Helvetica,sans-serif;padding:10px;text-decoration:underline}.bh-sl-container .bh-sl-pagination-container ol .bh-sl-current{color:#555;cursor:auto;text-decoration:none}.bh-sl-container .bh-sl-pagination-container ol .bh-sl-current a{color:#555;pointer-events:none;text-decoration:none}.bh-sl-overlay{background:url(../img/overlay-bg.png) repeat;height:100%;left:0;position:fixed;top:0;width:100%;z-index:10000}.bh-sl-overlay .bh-sl-modal-window{background:#fff;border-radius:10px;box-shadow:0 0 10px #656565;position:absolute;left:50%;margin-left:-460px;margin-top:60px;height:620px;width:920px;z-index:10010}.bh-sl-overlay .bh-sl-modal-window .bh-sl-map-container{margin-top:50px}.bh-sl-overlay .bh-sl-modal-window .bh-sl-modal-content{float:left;padding:0 1%;width:98%}.bh-sl-overlay .bh-sl-modal-window .bh-sl-close-icon{right:22px;top:13px}.bh-sl-close-icon{cursor:pointer;height:24px;position:absolute;width:24px}.bh-sl-close-icon:after,.bh-sl-close-icon:before{background:#ccc;content:'';display:block;height:24px;margin:-3px 0 0 -1px;position:absolute;bottom:0;left:50%;right:3px;top:3px;width:3px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.bh-sl-close-icon:hover:after,.bh-sl-close-icon:hover:before{background:#b3b3b3}.bh-sl-close-icon:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} \ No newline at end of file diff --git a/dist/assets/js/libs/markerclusterer.min.js b/dist/assets/js/libs/markerclusterer.min.js index 23de43c..d3b47c8 100644 --- a/dist/assets/js/libs/markerclusterer.min.js +++ b/dist/assets/js/libs/markerclusterer.min.js @@ -1 +1,6 @@ -function MarkerClusterer(t,e,r){this.extend(MarkerClusterer,google.maps.OverlayView),this.map_=t,this.markers_=[],this.clusters_=[],this.sizes=[53,56,66,78,90],this.styles_=[],this.ready_=!1;var r=r||{},s=(this.gridSize_=r.gridSize||60,this.minClusterSize_=r.minimumClusterSize||2,this.maxZoom_=r.maxZoom||null,this.styles_=r.styles||[],this.imagePath_=r.imagePath||this.MARKER_CLUSTER_IMAGE_PATH_,this.imageExtension_=r.imageExtension||this.MARKER_CLUSTER_IMAGE_EXTENSION_,this.zoomOnClick_=!0,null!=r.zoomOnClick&&(this.zoomOnClick_=r.zoomOnClick),this.averageCenter_=!1,null!=r.averageCenter&&(this.averageCenter_=r.averageCenter),this.setupStyles_(),this.setMap(t),this.prevZoom_=this.map_.getZoom(),this);google.maps.event.addListener(this.map_,"zoom_changed",function(){var t=s.map_.getZoom();s.prevZoom_!=t&&(s.prevZoom_=t,s.resetViewport())}),google.maps.event.addListener(this.map_,"idle",function(){s.redraw()}),e&&e.length&&this.addMarkers(e,!1)}function Cluster(t){this.markerClusterer_=t,this.map_=t.getMap(),this.gridSize_=t.getGridSize(),this.minClusterSize_=t.getMinClusterSize(),this.averageCenter_=t.isAverageCenter(),this.center_=null,this.markers_=[],this.bounds_=null,this.clusterIcon_=new ClusterIcon(this,t.getStyles(),t.getGridSize())}function ClusterIcon(t,e,r){t.getMarkerClusterer().extend(ClusterIcon,google.maps.OverlayView),this.styles_=e,this.padding_=r||0,this.cluster_=t,this.center_=null,this.map_=t.getMap(),this.div_=null,this.sums_=null,this.visible_=!1,this.setMap(this.map_)}MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_="../images/m",MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_="png",MarkerClusterer.prototype.extend=function(t,e){return function(t){for(var e in t.prototype)this.prototype[e]=t.prototype[e];return this}.apply(t,[e])},MarkerClusterer.prototype.onAdd=function(){this.setReady_(!0)},MarkerClusterer.prototype.draw=function(){},MarkerClusterer.prototype.setupStyles_=function(){if(!this.styles_.length)for(var t,e=0;t=this.sizes[e];e++)this.styles_.push({url:this.imagePath_+(e+1)+"."+this.imageExtension_,height:t,width:t})},MarkerClusterer.prototype.fitMapToMarkers=function(){for(var t,e=this.getMarkers(),r=new google.maps.LatLngBounds,s=0;t=e[s];s++)r.extend(t.getPosition());this.map_.fitBounds(r)},MarkerClusterer.prototype.setStyles=function(t){this.styles_=t},MarkerClusterer.prototype.getStyles=function(){return this.styles_},MarkerClusterer.prototype.isZoomOnClick=function(){return this.zoomOnClick_},MarkerClusterer.prototype.isAverageCenter=function(){return this.averageCenter_},MarkerClusterer.prototype.getMarkers=function(){return this.markers_},MarkerClusterer.prototype.getTotalMarkers=function(){return this.markers_.length},MarkerClusterer.prototype.setMaxZoom=function(t){this.maxZoom_=t},MarkerClusterer.prototype.getMaxZoom=function(){return this.maxZoom_},MarkerClusterer.prototype.calculator_=function(t,e){for(var r=0,t=t.length,s=t;0!==s;)s=parseInt(s/10,10),r++;return{text:t,index:r=Math.min(r,e)}},MarkerClusterer.prototype.setCalculator=function(t){this.calculator_=t},MarkerClusterer.prototype.getCalculator=function(){return this.calculator_},MarkerClusterer.prototype.addMarkers=function(t,e){for(var r,s=0;r=t[s];s++)this.pushMarkerTo_(r);e||this.redraw()},MarkerClusterer.prototype.pushMarkerTo_=function(t){var e;t.isAdded=!1,t.draggable&&(e=this,google.maps.event.addListener(t,"dragend",function(){t.isAdded=!1,e.repaint()})),this.markers_.push(t)},MarkerClusterer.prototype.addMarker=function(t,e){this.pushMarkerTo_(t),e||this.redraw()},MarkerClusterer.prototype.removeMarker_=function(t){var e=-1;if(this.markers_.indexOf)e=this.markers_.indexOf(t);else for(var r,s=0;r=this.markers_[s];s++)if(r==t){e=s;break}return-1!=e&&(t.setMap(null),this.markers_.splice(e,1),!0)},MarkerClusterer.prototype.removeMarker=function(t,e){t=this.removeMarker_(t);return!(e||!t||(this.resetViewport(),this.redraw(),0))},MarkerClusterer.prototype.removeMarkers=function(t,e){for(var r=!1,s=0;o=t[s];s++)var o=this.removeMarker_(o),r=r||o;if(!e&&r)return this.resetViewport(),this.redraw(),!0},MarkerClusterer.prototype.setReady_=function(t){this.ready_||(this.ready_=t,this.createClusters_())},MarkerClusterer.prototype.getTotalClusters=function(){return this.clusters_.length},MarkerClusterer.prototype.getMap=function(){return this.map_},MarkerClusterer.prototype.setMap=function(t){this.map_=t},MarkerClusterer.prototype.getGridSize=function(){return this.gridSize_},MarkerClusterer.prototype.setGridSize=function(t){this.gridSize_=t},MarkerClusterer.prototype.getMinClusterSize=function(){return this.minClusterSize_},MarkerClusterer.prototype.setMinClusterSize=function(t){this.minClusterSize_=t},MarkerClusterer.prototype.getExtendedBounds=function(t){var e=this.getProjection(),r=new google.maps.LatLng(t.getNorthEast().lat(),t.getNorthEast().lng()),s=new google.maps.LatLng(t.getSouthWest().lat(),t.getSouthWest().lng()),r=e.fromLatLngToDivPixel(r),s=(r.x+=this.gridSize_,r.y-=this.gridSize_,e.fromLatLngToDivPixel(s)),r=(s.x-=this.gridSize_,s.y+=this.gridSize_,e.fromDivPixelToLatLng(r)),e=e.fromDivPixelToLatLng(s);return t.extend(r),t.extend(e),t},MarkerClusterer.prototype.isMarkerInBounds_=function(t,e){return e.contains(t.getPosition())},MarkerClusterer.prototype.clearMarkers=function(){this.resetViewport(!0),this.markers_=[]},MarkerClusterer.prototype.resetViewport=function(t){for(var e,r=0;e=this.clusters_[r];r++)e.remove();for(var s,r=0;s=this.markers_[r];r++)s.isAdded=!1,t&&s.setMap(null);this.clusters_=[]},MarkerClusterer.prototype.repaint=function(){var r=this.clusters_.slice();this.clusters_.length=0,this.resetViewport(),this.redraw(),window.setTimeout(function(){for(var t,e=0;t=r[e];e++)t.remove()},0)},MarkerClusterer.prototype.redraw=function(){this.createClusters_()},MarkerClusterer.prototype.distanceBetweenPoints_=function(t,e){var r,s;return t&&e?(s=(e.lat()-t.lat())*Math.PI/180,r=(e.lng()-t.lng())*Math.PI/180,s=Math.sin(s/2)*Math.sin(s/2)+Math.cos(t.lat()*Math.PI/180)*Math.cos(e.lat()*Math.PI/180)*Math.sin(r/2)*Math.sin(r/2),6371*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))):0},MarkerClusterer.prototype.addToClosestCluster_=function(t){for(var e,r=4e4,s=null,o=(t.getPosition(),0);e=this.clusters_[o];o++){var i=e.getCenter();i&&(i=this.distanceBetweenPoints_(i,t.getPosition()))=this.minClusterSize_&&t.setMap(null),this.updateIcon(),!0},Cluster.prototype.getMarkerClusterer=function(){return this.markerClusterer_},Cluster.prototype.getBounds=function(){for(var t,e=new google.maps.LatLngBounds(this.center_,this.center_),r=this.getMarkers(),s=0;t=r[s];s++)e.extend(t.getPosition());return e},Cluster.prototype.remove=function(){this.clusterIcon_.remove(),this.markers_.length=0,delete this.markers_},Cluster.prototype.getSize=function(){return this.markers_.length},Cluster.prototype.getMarkers=function(){return this.markers_},Cluster.prototype.getCenter=function(){return this.center_},Cluster.prototype.calculateBounds_=function(){var t=new google.maps.LatLngBounds(this.center_,this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(t)},Cluster.prototype.isMarkerInClusterBounds=function(t){return this.bounds_.contains(t.getPosition())},Cluster.prototype.getMap=function(){return this.map_},Cluster.prototype.updateIcon=function(){var t=this.map_.getZoom(),e=this.markerClusterer_.getMaxZoom();if(e&&e<0&&-this.anchor_[0]<0&&(r[o]=t[o]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols)for(var s=0,o=Object.getOwnPropertySymbols(t);s<0&&Object.prototype.propertyIsEnumerable.call(t,o[s])&&(r[o[s]]=t[o[s]]);return r}class n{static isAdvancedMarkerAvailable(t){return google.maps.marker&&!0===t.getMapCapabilities().isAdvancedMarkersAvailable}static isAdvancedMarker(t){return google.maps.marker&&t instanceof google.maps.marker.AdvancedMarkerElement}static setMap(t,e){this.isAdvancedMarker(t)?t.map=e:t.setMap(e)}static getPosition(t){if(this.isAdvancedMarker(t)){if(t.position){if(t.position instanceof google.maps.LatLng)return t.position;if(t.position.lat&&t.position.lng)return new google.maps.LatLng(t.position.lat,t.position.lng)}return new google.maps.LatLng(null)}return t.getPosition()}static getVisible(t){return!!this.isAdvancedMarker(t)||t.getVisible()}}class a{constructor(t){var{markers:t,position:e}=t;this.markers=t,e&&(e instanceof google.maps.LatLng?this._position=e:this._position=new google.maps.LatLng(e))}get bounds(){if(0!==this.markers.length||this._position){var t=new google.maps.LatLngBounds(this._position,this._position);for(const e of this.markers)t.extend(n.getPosition(e));return t}}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(t=>n.getVisible(t)).length}push(t){this.markers.push(t)}delete(){this.marker&&(n.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}const h=(t,e,r,s)=>{const o=l(t.getBounds(),e,s);return r.filter(t=>o.contains(n.getPosition(t)))},l=(t,e,r)=>{var{northEast:t,southWest:s}=z(t,e),t=c({northEast:t,southWest:s},r);return p(t,e)},s=(t,e,r)=>{t=l(t,e,r),e=t.getNorthEast(),r=t.getSouthWest();return[r.lng(),r.lat(),e.lng(),e.lat()]},u=(t,e)=>{var r=(e.lat-t.lat)*Math.PI/180,s=(e.lng-t.lng)*Math.PI/180,r=Math.sin(r/2),s=Math.sin(s/2),r=r*r+Math.cos(t.lat*Math.PI/180)*Math.cos(e.lat*Math.PI/180)*s*s;return 2*Math.atan2(Math.sqrt(r),Math.sqrt(1-r))*6371},z=(t,e)=>({northEast:e.fromLatLngToDivPixel(t.getNorthEast()),southWest:e.fromLatLngToDivPixel(t.getSouthWest())}),c=(t,e)=>{var{northEast:t,southWest:r}=t;return t.x+=e,t.y-=e,r.x-=e,r.y+=e,{northEast:t,southWest:r}},p=(t,e)=>{var{northEast:t,southWest:r}=t,r=e.fromDivPixelToLatLng(r),e=e.fromDivPixelToLatLng(t);return new google.maps.LatLngBounds(r,e)};class t{constructor(t){var{maxZoom:t=16}=t;this.maxZoom=t}noop(t){t=t.markers;return r(t)}}class e extends t{constructor(t){var{viewportPadding:e=60}=t;super(i(t,["viewportPadding"])),this.viewportPadding=60,this.viewportPadding=e}calculate(t){var{markers:t,map:e,mapCanvasProjection:r}=t;return e.getZoom()>=this.maxZoom?{clusters:this.noop({markers:t}),changed:!1}:{clusters:this.cluster({markers:h(e,r,t,this.viewportPadding),map:e,mapCanvasProjection:r})}}}const r=t=>t.map(t=>new a({position:n.getPosition(t),markers:[t]}));var m,d,g=(d=function t(e,r){if(e===r)return!0;if(e&&r&&"object"==typeof e&&"object"==typeof r){if(e.constructor!==r.constructor)return!1;var s,o,i;if(Array.isArray(e)){if((s=e.length)!=r.length)return!1;for(o=s;0!=o--;)if(!t(e[o],r[o]))return!1}else{if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if((s=(i=Object.keys(e)).length)!==Object.keys(r).length)return!1;for(o=s;0!=o--;)if(!Object.prototype.hasOwnProperty.call(r,i[o]))return!1;for(o=s;0!=o--;){var a=i[o];if(!t(e[a],r[a]))return!1}}return!0}return e!=e&&r!=r})&&d.__esModule&&Object.prototype.hasOwnProperty.call(d,"default")?d.default:d;const f=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class v{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");var[e,r]=new Uint8Array(t,0,2);if(219!==e)throw new Error("Data does not appear to be in a KDBush format.");e=r>>4;if(1!=e)throw new Error(`Got v${e} data when expected v1.`);var s,e=f[15&r];if(e)return[r]=new Uint16Array(t,2,1),[s]=new Uint32Array(t,4,1),new v(s,r,e,t);throw new Error("Unrecognized array type.")}constructor(t,e=64,r=Float64Array,s){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+e,2),65535),this.ArrayType=r,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;var o=f.indexOf(this.ArrayType),i=2*t*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,n=(8-a%8)%8;if(o<0)throw new Error(`Unexpected typed array class: ${r}.`);s&&s instanceof ArrayBuffer?(this.data=s,this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+a+n,2*t),this._pos=2*t,this._finished=!0):(this.data=new ArrayBuffer(8+i+a+n),this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+a+n,2*t),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,16+o]),new Uint16Array(this.data,2,1)[0]=e,new Uint32Array(this.data,4,1)[0]=t)}add(t,e){var r=this._pos>>1;return this.ids[r]=r,this.coords[this._pos++]=t,this.coords[this._pos++]=e,r}finish(){var t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return function t(e,r,s,o,i,a){if(i-o<=s)return;const n=o+i>>1;k(e,r,n,o,i,a),t(e,r,s,o,n-1,1-a),t(e,r,s,1+n,i,1-a)}(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,r,s,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:i,coords:a,nodeSize:t}=this,n=[0,i.length-1,0],h=[];for(;n.length;){var l=n.pop()||0,u=n.pop()||0,c=n.pop()||0;if(u-c<=t)for(let t=c;t<=u;t++){const n=a[2*t],g=a[2*t+1];n>=e&&n<=s&&r<=g&&g<=o&&h.push(i[t])}else{var p=c+u>>1,m=a[2*p],d=a[2*p+1];e<=m&&m<=s&&r<=d&&d<=o&&h.push(i[p]),(0===l?e<=m:r<=d)&&(n.push(c),n.push(p-1),n.push(1-l)),(0===l?m<=s:d<=o)&&(n.push(1+p),n.push(u),n.push(1-l))}}return h}within(e,r,t){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");for(var{ids:s,coords:o,nodeSize:i}=this,a=[0,s.length-1,0],n=[],h=t*t;a.length;){var l=a.pop()||0,u=a.pop()||0,c=a.pop()||0;if(u-c<=i)for(let t=c;t<=u;t++)M(o[2*t],o[2*t+1],e,r)<=h&&n.push(s[t]);else{var p=c+u>>1,m=o[2*p],d=o[2*p+1];M(m,d,e,r)<=h&&n.push(s[p]),(0===l?e-t<=m:r-t<=d)&&(a.push(c),a.push(p-1),a.push(1-l)),(0===l?m<=e+t:d<=r+t)&&(a.push(1+p),a.push(u),a.push(1-l))}}return n}}function k(r,s,o,i,a,n){for(;ip&&w(r,s,i,a);tp;)e--}s[2*i+n]===p?w(r,s,i,e):w(r,s,++e,a),e<=o&&(i=e+1),o<=e&&(a=e-1)}}function w(t,e,r,s){y(t,r,s),y(e,2*r,2*s),y(e,2*r+1,2*s+1)}function y(t,e,r){var s=t[e];t[e]=t[r],t[r]=s}function M(t,e,r,s){t-=r,r=e-s;return t*t+r*r}const U={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:t=>t},x=Math.fround||(m=new Float32Array(1),t=>(m[0]=+t,m[0])),C=3,P=5,_=6;class E{constructor(t){this.options=Object.assign(Object.create(U),t),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(e){const{log:r,minZoom:s,maxZoom:o}=this.options,i=(r&&console.time("total time"),`prepare ${e.length} points`);r&&console.time(i),this.points=e;var a=[];for(let t=0;t=s;t--){const s=+Date.now();n=this.trees[t]=this._createTree(this._cluster(n,t)),r&&console.log("z%d: %d clusters in %dms",t,n.numItems,+Date.now()-s)}return r&&console.timeEnd("total time"),this}getClusters(t,e){let r=((t[0]+180)%360+360)%360-180;var s=Math.max(-90,Math.min(90,t[1]));let o=180===t[2]?180:((t[2]+180)%360+360)%360-180;var i=Math.max(-90,Math.min(90,t[3]));if(360<=t[2]-t[0])r=-180,o=180;else if(r>o){const t=this.getClusters([r,s,180,i],e),a=this.getClusters([-180,s,o,i],e);return t.concat(a)}const a=this.trees[this._limitZoom(e)],n=a.range(L(r),O(i),L(o),O(s)),h=a.data,l=[];for(const t of n){const e=this.stride*t;l.push(1=i.length)throw new Error(s);var a=this.options.radius/(this.options.extent*Math.pow(2,r-1)),n=i[e*this.stride],h=i[e*this.stride+1],l=[];for(const e of o.within(n,h,a)){const r=e*this.stride;i[4+r]===t&&l.push(1a&&(o+=l[e+P])}if(o>f&&o>=r){let t,e=n*f,r=d*f,s=-1;var p,m=((i/c|0)<<5)+(a+1)+this.points.length;for(const n of g){const u=n*c;l[2+u]<=a||(l[2+u]=a,p=l[u+P],e+=l[u]*p,r+=l[1+u]*p,l[4+u]=m,h&&(t||(t=this._map(l,i,!0),s=this.clusterProps.length,this.clusterProps.push(t)),h(t,this._map(l,u))))}l[i+4]=m,u.push(e/o,r/o,1/0,m,-1,o),h&&u.push(s)}else{for(let t=0;t>5}_getOriginZoom(t){return(t-this.points.length)%32}_map(t,e,r){if(1<0?0:1{var e=n.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}});this.superCluster.load(r)}return e||(this.state.zoom<=this.maxZoom||r.zoom<=this.maxZoom)&&(e=!g(this.state,r)),this.state=r,e&&(this.clusters=this.cluster(t)),{clusters:this.clusters,changed:e}}cluster(t){t=t.map;return this.superCluster.getClusters([-180,-90,180,90],Math.round(t.getZoom())).map(t=>this.transformCluster(t))}transformCluster(t){var{geometry:{coordinates:[t,e]},properties:r}=t;return r.cluster?new a({markers:this.superCluster.getLeaves(r.cluster_id,1/0).map(t=>t.properties.marker),position:{lat:e,lng:t}}):(e=r.marker,new a({markers:[e],position:n.getPosition(e)}))}}class I{constructor(t,e){this.markers={sum:t.length};var t=e.map(t=>t.count),r=t.reduce((t,e)=>t+e,0);this.clusters={count:e.length,markers:{mean:r/e.length,sum:r,min:Math.min(...t),max:Math.max(...t)}}}}class T{render(t,e,r){var{count:t,position:s}=t,o=` + + + +${t} +`,i=`Cluster of ${t} markers`,a=Number(google.maps.Marker.MAX_ZINDEX)+t;if(n.isAdvancedMarkerAvailable(r)){const t=(new DOMParser).parseFromString(o,"image/svg+xml").documentElement,e=(t.setAttribute("transform","translate(0 25)"),{map:r,position:s,zIndex:a,title:i,content:t});return new google.maps.marker.AdvancedMarkerElement(e)}e={position:s,zIndex:a,title:i,icon:{url:"data:image/svg+xml;base64,"+btoa(o),anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(e)}}class j{constructor(){var t,e=j,r=google.maps.OverlayView;for(t in r.prototype)e.prototype[t]=r.prototype[t]}}o.MarkerClustererEvents=void 0,(d=o.MarkerClustererEvents||(o.MarkerClustererEvents={})).CLUSTERING_BEGIN="clusteringbegin",d.CLUSTERING_END="clusteringend",d.CLUSTER_CLICK="click";const S=(t,e,r)=>{r.fitBounds(e.bounds)};return o.AbstractAlgorithm=t,o.AbstractViewportAlgorithm=e,o.Cluster=a,o.ClusterStats=I,o.DefaultRenderer=T,o.GridAlgorithm=class extends e{constructor(t){var{maxDistance:e=4e4,gridSize:r=40}=t;super(i(t,["maxDistance","gridSize"])),this.clusters=[],this.state={zoom:-1},this.maxDistance=e,this.gridSize=r}calculate(t){var{markers:t,map:e,mapCanvasProjection:r}=t,s={zoom:e.getZoom()};let o=!1;return this.state.zoom>=this.maxZoom&&s.zoom>=this.maxZoom||(o=!g(this.state,s)),this.state=s,e.getZoom()>=this.maxZoom?{clusters:this.noop({markers:t}),changed:o}:{clusters:this.cluster({markers:h(e,r,t,this.viewportPadding),map:e,mapCanvasProjection:r})}}cluster(t){let{markers:e,map:r,mapCanvasProjection:s}=t;return this.clusters=[],e.forEach(t=>{this.addToClosestCluster(t,r,s)}),this.clusters}addToClosestCluster(e,t,r){let s=this.maxDistance,o=null;for(let t=0;t{this.addMarker(t,!0)}),e||this.render()}removeMarker(t,e){var r=this.markers.indexOf(t);return-1!==r&&(n.setMap(t,null),this.markers.splice(r,1),e||this.render(),!0)}removeMarkers(t,e){let r=!1;return t.forEach(t=>{r=this.removeMarker(t,!0)||r}),r&&!e&&this.render(),r}clearMarkers(t){this.markers.length=0,t||this.render()}render(){const t=this.getMap();if(t instanceof google.maps.Map&&t.getProjection()){google.maps.event.trigger(this,o.MarkerClustererEvents.CLUSTERING_BEGIN,this);var{clusters:e,changed:r}=this.algorithm.calculate({markers:this.markers,map:t,mapCanvasProjection:this.getProjection()});if(r||null==r){const o=new Set;for(const t of e)1==t.markers.length&&o.add(t.markers[0]);const t=[];for(const s of this.clusters)null!=s.marker&&(1==s.markers.length?o.has(s.marker)||n.setMap(s.marker,null):t.push(s.marker));this.clusters=e,this.renderClusters(),requestAnimationFrame(()=>t.forEach(t=>n.setMap(t,null)))}google.maps.event.trigger(this,o.MarkerClustererEvents.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(t=>n.setMap(t,null)),this.clusters.forEach(t=>t.delete()),this.clusters=[]}renderClusters(){const t=new I(this.markers,this.clusters),r=this.getMap();this.clusters.forEach(e=>{1===e.markers.length?e.marker=e.markers[0]:(e.marker=this.renderer.render(e,t,r),e.markers.forEach(t=>n.setMap(t,null)),this.onClusterClick&&e.marker.addListener("click",t=>{google.maps.event.trigger(this,o.MarkerClustererEvents.CLUSTER_CLICK,e),this.onClusterClick(t,e,r)})),n.setMap(e.marker,r)})}},o.MarkerUtils=n,o.NoopAlgorithm=class extends t{constructor(t){super(i(t,[]))}calculate(t){var{markers:t,map:e,mapCanvasProjection:r}=t;return{clusters:this.cluster({markers:t,map:e,mapCanvasProjection:r}),changed:!1}}cluster(t){return this.noop(t)}},o.SuperClusterAlgorithm=Z,o.SuperClusterViewportAlgorithm=class extends e{constructor(t){var{maxZoom:e,radius:r=60,viewportPadding:s=60}=t,t=i(t,["maxZoom","radius","viewportPadding"]);super({maxZoom:e,viewportPadding:s}),this.superCluster=new E(Object.assign({maxZoom:this.maxZoom,radius:r},t)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(t){const e={zoom:Math.round(t.map.getZoom()),view:s(t.map.getBounds(),t.mapCanvasProjection,this.viewportPadding)};let r=!g(this.state,e);if(!g(t.markers,this.markers)){r=!0,this.markers=[...t.markers];const e=this.markers.map(t=>{var e=n.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}});this.superCluster.load(e)}return r&&(this.clusters=this.cluster(t),this.state=e),{clusters:this.clusters,changed:r}}cluster(t){var{map:t,mapCanvasProjection:e}=t,t={zoom:Math.round(t.getZoom()),view:s(t.getBounds(),e,this.viewportPadding)};return this.superCluster.getClusters(t.view,t.zoom).map(t=>this.transformCluster(t))}transformCluster(t){var{geometry:{coordinates:[t,e]},properties:r}=t;return r.cluster?new a({markers:this.superCluster.getLeaves(r.cluster_id,1/0).map(t=>t.properties.marker),position:{lat:e,lng:t}}):(e=r.marker,new a({markers:[e],position:n.getPosition(e)}))}},o.defaultOnClusterClickHandler=S,o.distanceBetweenPoints=u,o.extendBoundsToPaddedViewport=l,o.extendPixelBounds=c,o.filterMarkersToPaddedViewport=h,o.getPaddedViewport=s,o.noop=r,o.pixelBoundsToLatLngBounds=p,Object.defineProperty(o,"__esModule",{value:!0}),o}({}); \ No newline at end of file diff --git a/dist/assets/js/plugins/storeLocator/jquery.storelocator.js b/dist/assets/js/plugins/storeLocator/jquery.storelocator.js index c17dfca..07fbed0 100644 --- a/dist/assets/js/plugins/storeLocator/jquery.storelocator.js +++ b/dist/assets/js/plugins/storeLocator/jquery.storelocator.js @@ -1,6 +1,6 @@ -/*! jQuery Google Maps Store Locator - v3.1.14 - 2023-09-26 +/*! jQuery Google Maps Store Locator - v3.4.1 - 2024-12-20 * http://www.bjornblog.com/web/jquery-store-locator-plugin -* Copyright (c) 2023 Bjorn Holine; Licensed MIT */ +* Copyright (c) 2024 Bjorn Holine; Licensed MIT */ ;(function ($, window, document, undefined) { 'use strict'; @@ -15,7 +15,7 @@ } // Variables used across multiple methods - var $this, map, listTemplate, infowindowTemplate, dataTypeRead, originalOrigin, originalData, originalZoom, dataRequest, searchInput, addressInput, olat, olng, storeNum, directionsDisplay, directionsService, prevSelectedMarkerBefore, prevSelectedMarkerAfter, firstRun, reload, nameAttrs, originalFilterVals; + var $this, map, listTemplate, infowindowTemplate, dataTypeRead, originalOrigin, originalData, originalZoom, dataRequest, searchInput, addressInput, olat, olng, storeNum, directionsDisplay, directionsService, prevSelectedMarkerBefore, prevSelectedMarkerAfter, firstRun, reload, nameAttrs, originalFilterVals, paginationPage, locationsTotal; var featuredset = [], locationset = [], normalset = [], markers = []; var filters = {}, locationData = {}, GeoCodeCalc = {}, mappingObj = {}, disabledFilterVals = {}; @@ -57,8 +57,9 @@ 'locationsPerPage' : 10, 'mapSettings' : { mapTypeId: 'roadmap', - zoom : 12 + zoom : 12, }, + 'mapSettingsID' : '', 'markerCluster' : null, 'markerImg' : null, 'markerDim' : null, @@ -155,15 +156,23 @@ this._defaults = defaults; this._name = pluginName; + // Add Map ID to map settings if set. + if (this.settings.mapSettingsID !== '') { + this.settings.mapSettings.mapId = this.settings.mapSettingsID; + } + // Load Google Maps API when lazy load is enabled. if (this.settings.lazyLoadMap && this.settings.apiKey !== null && typeof google === 'undefined') { var _this = this; var optionsQuery = {}; var loadMap = false; + // Load new marker library. + optionsQuery.libraries = 'marker'; + // Autocomplete. if (this.settings.autoComplete === true) { - optionsQuery.libraries = 'places'; + optionsQuery.libraries = 'places,marker'; } // Allow callback to resolve map loading when set. @@ -224,6 +233,11 @@ } }); + // Handle distance changes on select + if (this.settings.maxDistance === true) { + this.distanceFiltering(); + } + // Do taxonomy filtering if set if (this.settings.taxonomyFilters !== null) { this.taxonomyFiltering(); @@ -235,7 +249,7 @@ // Add modal window divs if set if (this.settings.modal === true) { - // Clone the filters if there are any so they can be used in the modal + // Clone the filters if there are any, so they can be used in the modal if (this.settings.taxonomyFilters !== null) { // Clone the filters $('.' + this.settings.taxonomyFiltersContainer).clone(true, true).prependTo($this); @@ -324,6 +338,7 @@ _this.injectGoogleMapsScript({ key: apiKey, + loading: 'async', callback: 'onGoogleMapsAPILoaded', ...options, }); @@ -406,7 +421,7 @@ } if (this.settings.pagination === true) { - $(document).off('click.'+pluginName, '.bh-sl-pagination li'); + $(document).off('click.'+pluginName, '.bh-sl-pagination li a'); } }, @@ -808,7 +823,7 @@ _this.map = new google.maps.Map(document.getElementById(_this.settings.mapID), myOptions); // Re-center the map when the browser is re-sized - window.addEventListener('resize', function() { + window.addEventListener('resize', function() { var center = _this.map.getCenter(); google.maps.event.trigger(_this.map, 'resize'); _this.map.setCenter(center); @@ -1231,36 +1246,136 @@ _paginationOutput: function(currentPage, totalPages) { this.writeDebug('_paginationOutput',arguments); - currentPage = parseFloat(currentPage); + currentPage = parseInt(currentPage); + totalPages = Math.ceil(totalPages); + var pagesStart, pagesEnd; var output = ''; var nextPage = currentPage + 1; var prevPage = currentPage - 1; + var pagesCutoff = 5; + var pagesCeiling = Math.ceil(pagesCutoff / 2); + var pagesFloor = Math.floor(pagesCutoff / 2); + + // Determine page numbers to display. + if (totalPages < pagesCutoff) { + pagesStart = 0; + pagesEnd = totalPages; + } else if (currentPage >= 0 && currentPage <= pagesCeiling) { + pagesStart = 0; + pagesEnd = pagesCutoff; + } else if ((currentPage + pagesFloor) >= totalPages) { + pagesStart = (totalPages - pagesCutoff); + pagesEnd = totalPages; + } else { + pagesStart = (currentPage - pagesCeiling); + pagesEnd = (currentPage + pagesFloor); + } // Previous page if ( currentPage > 0 ) { - output += '
  • ' + this.settings.prevPage + '
  • '; + output += '
  • '; + output += '' + this.settings.prevPage + ''; + output += '
  • '; + } + + // Additional pages indicator. + if ((currentPage + 1) >= pagesCutoff && totalPages > pagesCutoff) { + // First page link. + output += '
  • '; + output += '' + 1 + ''; + output += '
  • '; + + output += '
  • '; + output += ''; + output += '
  • '; } // Add the numbers - for (var p = 0; p < Math.ceil(totalPages); p++) { + for (var p = pagesStart; p < pagesEnd; p++) { var n = p + 1; if (p === currentPage) { - output += '
  • ' + n + '
  • '; - } - else { - output += '
  • ' + n + '
  • '; + output += '
  • '; + output += '' + n + ''; + output += '
  • '; + } else { + output += '
  • '; + output += '' + n + ''; + output += '
  • '; } } + // Additional pages indicator. + if ((currentPage + pagesCeiling) <= totalPages && totalPages > pagesCutoff) { + output += '
  • '; + output += ''; + output += '
  • '; + + // Last page link. + output += '
  • '; + output += '' + totalPages + ''; + output += '
  • '; + } + // Next page if ( nextPage < totalPages ) { - output += '
  • ' + this.settings.nextPage + '
  • '; + output += '
  • '; + output += '' + this.settings.nextPage + ''; + output += '
  • '; } return output; }, + /** + * Reset pagination after the input has changed + */ + paginationReset: function() { + this.writeDebug('paginationReset',arguments); + + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Remove the old page in the URL. + url.searchParams.delete('bhsl-page'); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } + }, + + /** + * Determine the total number of pages for pagination + */ + totalPages: function() { + this.writeDebug('totalPages',arguments); + + // Location limit. + if ( + typeof originalOrigin !== 'undefined' && + this.settings.storeLimit > 0 && + locationset.length > this.settings.storeLimit + ) { + return this.settings.storeLimit / this.settings.locationsPerPage; + } + + // WP API response after search. + if (locationsTotal > 0) { + return locationsTotal / this.settings.locationsPerPage; + } + + // Unlimited or last page. + if ( + this.settings.storeLimit === -1 || + locationset.length < this.settings.storeLimit + ) { + return locationset.length / this.settings.locationsPerPage; + } else { + return this.settings.storeLimit / this.settings.locationsPerPage; + } + }, + /** * Set up the pagination pages * @@ -1269,15 +1384,10 @@ paginationSetup: function (currentPage) { this.writeDebug('paginationSetup',arguments); var pagesOutput = ''; - var totalPages; var $paginationList = $('.bh-sl-pagination-container .bh-sl-pagination'); // Total pages - if ( this.settings.storeLimit === -1 || locationset.length < this.settings.storeLimit ) { - totalPages = locationset.length / this.settings.locationsPerPage; - } else { - totalPages = this.settings.storeLimit / this.settings.locationsPerPage; - } + var totalPages = this.totalPages(); // Current page check if (typeof currentPage === 'undefined') { @@ -1302,7 +1412,22 @@ }, /** - * Marker image setup + * Determine if the legacy or Advanced markers should be used + * + * @returns {boolean} + */ + useLegacyMarkers: function() { + this.writeDebug('useLegacyMarkers',arguments); + + return !this.settings.mapSettings.hasOwnProperty('mapId') || + this.settings.mapSettings.mapId === ''; + }, + + /** + * Legacy marker image setup + * + * Original functionality supporting the now deprecated google.maps.Marker + * This will eventually be removed in favor of markerImage below. * * @param markerUrl {string} path to marker image * @param markerWidth {number} width of marker @@ -1310,8 +1435,8 @@ * * @returns {Object} Google Maps icon object */ - markerImage: function (markerUrl, markerWidth, markerHeight) { - this.writeDebug('markerImage',arguments); + legacyMarkerImage: function (markerUrl, markerWidth, markerHeight) { + this.writeDebug('legacyMarkerImage',arguments); var markerImg; // User defined marker dimensions @@ -1334,6 +1459,40 @@ return markerImg; }, + /** + * Marker image setup + * + * @param markerUrl {string} path to marker image + * @param markerWidth {number} width of marker + * @param markerHeight {number} height of marker + * + * @returns {HTMLImageElement} Image element + */ + markerImage: function (markerUrl, markerWidth, markerHeight) { + this.writeDebug('markerImage',arguments); + + // Check if legacy marker image should be used + if (this.useLegacyMarkers()) { + return this.legacyMarkerImage(markerUrl, markerWidth, markerHeight); + } + + var markerImg = document.createElement('img'); + markerImg.src = markerUrl; + + // User defined marker dimensions + if (typeof markerWidth !== 'undefined' && typeof markerHeight !== 'undefined') { + markerImg.height = markerHeight; + markerImg.width = markerWidth; + } + // Default marker dimensions: 32px x 32px + else { + markerImg.height = 32; + markerImg.width = 32; + } + + return markerImg; + }, + /** * Map marker setup * @@ -1360,16 +1519,24 @@ // Break the category variable into an array if there are multiple categories for the location categories = category.split(','); // With multiple categories the color will be determined by the last matched category in the data - for(var i = 0; i < categories.length; i++) { + for (var i = 0; i < categories.length; i++) { if (categories[i] in this.settings.catMarkers) { - markerImg = this.markerImage(this.settings.catMarkers[categories[i]][0], parseInt(this.settings.catMarkers[categories[i]][1]), parseInt(this.settings.catMarkers[categories[i]][2])); + markerImg = this.markerImage( + this.settings.catMarkers[categories[i]][0], + Number(this.settings.catMarkers[categories[i]][1]), + Number(this.settings.catMarkers[categories[i]][2]) + ); } } } // Single category else { if (category in this.settings.catMarkers) { - markerImg = this.markerImage(this.settings.catMarkers[category][0], parseInt(this.settings.catMarkers[category][1]), parseInt(this.settings.catMarkers[category][2])); + markerImg = this.markerImage( + this.settings.catMarkers[category][0], + Number(this.settings.catMarkers[category][1]), + Number(this.settings.catMarkers[category][2]) + ); } } } @@ -1379,9 +1546,12 @@ if (this.settings.markerImg !== null) { if (this.settings.markerDim === null) { markerImg = this.markerImage(this.settings.markerImg); - } - else { - markerImg = this.markerImage(this.settings.markerImg, this.settings.markerDim.width, this.settings.markerDim.height); + } else { + markerImg = this.markerImage( + this.settings.markerImg, + this.settings.markerDim.width, + this.settings.markerDim.height + ); } } @@ -1393,25 +1563,47 @@ else { // Create the default markers if (this.settings.disableAlphaMarkers === true || this.settings.storeLimit === -1 || this.settings.storeLimit > 26 || this.settings.catMarkers !== null || this.settings.markerImg !== null || (this.settings.fullMapStart === true && firstRun === true && (isNaN(this.settings.fullMapStartListLimit) || this.settings.fullMapStartListLimit > 26 || this.settings.fullMapStartListLimit === -1))) { - marker = new google.maps.Marker({ - draggable: false, - icon : markerImg, // Reverts to default marker if nothing is passed - map : map, - optimized: false, - position : point, - title : name, - }); + if (this.useLegacyMarkers()) { + marker = new google.maps.Marker({ + draggable: false, + icon : markerImg, // Reverts to default marker if markerImg not set. + map : map, + optimized: false, + position : point, + title : name, + }); + } else { + marker = new google.maps.marker.AdvancedMarkerElement({ + content : markerImg, // Reverts to default marker if markerImg not set. + draggable: false, + map : map, + position : point, + title : name, + }); + } } else { // Letter markers - marker = new google.maps.Marker({ - draggable: false, - label : letter, - map : map, - optimized: false, - position : point, - title : name, - }); + if (this.useLegacyMarkers()) { + marker = new google.maps.Marker({ + draggable: false, + label : letter, + map : map, + optimized: false, + position : point, + title : name, + }); + } else { + var letterPin = new google.maps.marker.PinElement({glyph: letter}); + + marker = new google.maps.marker.AdvancedMarkerElement({ + content : letterPin.element, + draggable: false, + map : map, + position : point, + title : name, + }); + } } } @@ -1430,7 +1622,12 @@ _defineLocationData: function (currentMarker, storeStart, page) { this.writeDebug('_defineLocationData',arguments); var indicator = ''; - this._createLocationVariables(currentMarker.get('id')); + + if (this.useLegacyMarkers()) { + this._createLocationVariables(currentMarker.get('id')); + } else { + this._createLocationVariables(currentMarker.bhslID); + } var altDistLength, distLength; @@ -1456,13 +1653,23 @@ } } + var markerId; + // Set up alpha character - var markerId = currentMarker.get('id'); + if (this.useLegacyMarkers()) { + markerId = currentMarker.get('id'); + } else { + markerId = currentMarker.bhslID; + } + // Use dot markers instead of alpha if there are more than 26 locations if (this.settings.disableAlphaMarkers === true || this.settings.storeLimit === -1 || this.settings.storeLimit > 26 || (this.settings.fullMapStart === true && firstRun === true && (isNaN(this.settings.fullMapStartListLimit) || this.settings.fullMapStartListLimit > 26 || this.settings.fullMapStartListLimit === -1))) { + if (page > 0) { + indicator = storeStart + markerId + 1; + } else { indicator = markerId + 1; - } - else { + } + } else { if (page > 0) { indicator = String.fromCharCode('A'.charCodeAt(0) + (storeStart + markerId)); } @@ -1550,38 +1757,75 @@ // Opens the infowindow when list item is clicked if (location === 'left') { infowindow.setContent(formattedAddress); - infowindow.open(marker.get('map'), marker); + + if (this.useLegacyMarkers()) { + infowindow.open(marker.get('map'), marker); + } else { + infowindow.open(marker.map, marker); + } } // Opens the infowindow when the marker is clicked else { - google.maps.event.addListener(marker, 'click', function () { - infowindow.setContent(formattedAddress); - infowindow.open(marker.get('map'), marker); - // Focus on the list - var markerId = marker.get('id'); - var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); - - if ($selectedLocation.length > 0) { - // Marker click callback - if (_this.settings.callbackMarkerClick) { - _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + if (this.useLegacyMarkers()) { + google.maps.event.addListener(marker, 'click', function () { + infowindow.setContent(formattedAddress); + infowindow.open(marker.get('map'), marker); + // Focus on the list + var markerId = marker.get('id'); + var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); + + if ($selectedLocation.length > 0) { + // Marker click callback + if (_this.settings.callbackMarkerClick) { + _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + } + + $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); + $selectedLocation.addClass('list-focus'); + + // Scroll list to selected marker + var $container = $('.' + _this.settings.locationList); + $container.animate({ + scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() + }); } - $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); - $selectedLocation.addClass('list-focus'); + // Custom selected marker override + if (_this.settings.selectedMarkerImg !== null) { + _this.changeSelectedMarker(marker); + } + }); + } else { + marker.addListener('click', function (domEvent, latLng) { + infowindow.setContent(formattedAddress); + infowindow.open(marker.map, marker); + + // Focus on the list + var markerId = marker.bhslID; + var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); + + if ($selectedLocation.length > 0) { + // Marker click callback + if (_this.settings.callbackMarkerClick) { + _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + } - // Scroll list to selected marker - var $container = $('.' + _this.settings.locationList); - $container.animate({ - scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() - }); - } + $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); + $selectedLocation.addClass('list-focus'); - // Custom selected marker override - if (_this.settings.selectedMarkerImg !== null) { - _this.changeSelectedMarker(marker); - } - }); + // Scroll list to selected marker + var $container = $('.' + _this.settings.locationList); + $container.animate({ + scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() + }); + } + + // Custom selected marker override + if (_this.settings.selectedMarkerImg !== null) { + _this.changeSelectedMarker(marker); + } + }); + } } }, @@ -1714,6 +1958,17 @@ paginationChange: function (newPage) { this.writeDebug('paginationChange',arguments); + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Update the page in the URL. + url.searchParams.set('bhsl-page', parseInt(newPage) + 1); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } + // Page change callback if (this.settings.callbackPageChange) { this.settings.callbackPageChange.call(this, newPage); @@ -1891,6 +2146,16 @@ searchInput = this.getQueryString(this.settings.searchID); distance = this.getQueryString(this.settings.maxDistanceID); + // Max distance field. + if (distance && $('#' + this.settings.maxDistanceID + ' option[value=' + distance + ']').length) { + $distanceInput.val(distance); + } + + // Update zoom if origin coordinates are available and a distance query string value is set. + if (addressInput && distance) { + _this.settings.mapSettings.zoom = 0; + } + // The form should override the query string parameters. if ($addressInput.val() !== '') { addressInput = $addressInput.val(); @@ -2013,6 +2278,11 @@ mappingObj.distance = distance; _this.mapping(mappingObj); } + + // Reset pagination if the input has changed. + if (typeof originalOrigin !== 'undefined' && addressInput !== originalOrigin) { + this.paginationReset(); + } }, /** @@ -2143,6 +2413,45 @@ }); }, + /** + * Distance filtering + */ + distanceFiltering: function () { + this.writeDebug('distanceFiltering'); + var _this = this; + var $distanceInput = $('#' + this.settings.maxDistanceID); + + // Add event listener + $distanceInput.on('change.'+pluginName, function (e) { + e.stopPropagation(); + + // Query string parameter value updates on change. + if (_this.settings.querystringParams === true) { + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Update the distance in the URL. + url.searchParams.set(_this.settings.maxDistanceID, this.value); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } else { + window.location.replace(url.href); + } + } + + if ($('#' + _this.settings.mapID).hasClass('bh-sl-map-open') === true) { + if ((olat) && (olng)) { + _this.settings.mapSettings.zoom = 0; + _this.processForm(); + } else { + _this.mapping(mappingObj); + } + } + }); + }, + /** * Count the selected filters * @@ -2301,7 +2610,6 @@ } } } - }, /** @@ -2357,7 +2665,7 @@ // Reset pagination. if (_this.settings.pagination === true) { - _this.paginationChange(0); + _this.paginationReset(); } // Handle checkbox filters @@ -2467,13 +2775,24 @@ // Set up the new list $(markers).each(function(x, marker){ - if (map.getBounds().contains(marker.getPosition())) { - // Define the location data - _this.listSetup(marker, 0, 0); + if (_this.useLegacyMarkers()) { + if (map.getBounds().contains(marker.getPosition())) { + // Define the location data + _this.listSetup(marker, 0, 0); + + // Set up the list template with the location data + listHtml = listTemplate(locations); + $('.' + _this.settings.locationList + ' > ul').append(listHtml); + } + } else { + if (map.getBounds().contains(marker.position)) { + // Define the location data + _this.listSetup(marker, 0, 0); - // Set up the list template with the location data - listHtml = listTemplate(locations); - $('.' + _this.settings.locationList + ' > ul').append(listHtml); + // Set up the list template with the location data + listHtml = listTemplate(locations); + $('.' + _this.settings.locationList + ' > ul').append(listHtml); + } } }); @@ -2568,29 +2887,63 @@ } var marker, - originImg = ''; + originImg; if (typeof origin !== 'undefined') { - if (this.settings.originMarkerImg !== null) { - if (this.settings.originMarkerDim === null) { - originImg = this.markerImage(this.settings.originMarkerImg); + if (this.useLegacyMarkers()) { + if (this.settings.originMarkerImg !== null) { + if (this.settings.originMarkerDim === null) { + originImg = this.markerImage(this.settings.originMarkerImg); + } + else { + originImg = this.markerImage(this.settings.originMarkerImg, this.settings.originMarkerDim.width, this.settings.originMarkerDim.height); + } } else { - originImg = this.markerImage(this.settings.originMarkerImg, this.settings.originMarkerDim.width, this.settings.originMarkerDim.height); + originImg = { + url: 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png' + }; } - } - else { - originImg = { - url: 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png' - }; - } - marker = new google.maps.Marker({ - position : originPoint, - map : map, - icon : originImg, - draggable: false - }); + marker = new google.maps.Marker({ + position : originPoint, + map : map, + icon : originImg, + draggable: false + }); + } else { + // Default green origin pin. + var defaultOriginPin = new google.maps.marker.PinElement({ + background : '#39b25e', + borderColor: '#177d3d', + glyphColor : '#177d3c' + }); + + marker = new google.maps.marker.AdvancedMarkerElement({ + content : defaultOriginPin.element, + draggable: false, + map : map, + position : originPoint, + title : name, + }); + + // Origin image. + if (this.settings.originMarkerImg !== null) { + originImg = document.createElement('img'); + + if (this.settings.originMarkerDim === null) { + originImg.src = this.settings.originMarkerImg; + } else { + originImg = this.markerImage( + this.settings.originMarkerImg, + this.settings.originMarkerDim.width, + this.settings.originMarkerDim.height, + ); + } + + marker.content = originImg; + } + } } }, @@ -2643,7 +2996,7 @@ if ( this.settings.openNearest !== true || typeof nearestLoc === 'undefined' || - typeof originalOrigin === 'undefined' || + typeof originalOrigin === 'undefined' || (this.settings.fullMapStart === true && firstRun === true && this.settings.querystringParams === false) || (this.settings.defaultLoc === true && firstRun === true && this.settings.querystringParams === false) ) { @@ -2696,7 +3049,12 @@ _this.settings.callbackListClick.call(this, markerId, selectedMarker, locationset[markerId], map); } - map.panTo(selectedMarker.getPosition()); + if (_this.useLegacyMarkers()) { + map.panTo(selectedMarker.getPosition()); + } else { + map.panTo(selectedMarker.position); + } + var listLoc = 'left'; _this.createInfowindow(selectedMarker, listLoc, infowindow, storeStart, page); @@ -2854,6 +3212,14 @@ if (typeof page === 'undefined' || originalOrigin !== addressInput ) { page = 0; } + + paginationPage = page; + } + + // Override page if the query string was set. + var queryStringPage = _this.getQueryString('bhsl-page'); + if (queryStringPage !== '') { + page = paginationPage = parseInt(queryStringPage) - 1; } // Data request @@ -2864,8 +3230,8 @@ // Set up the origin point originPoint = new google.maps.LatLng(orig_lat, orig_lng); - // If the origin hasn't changed use the existing data so we aren't making unneeded AJAX requests - if ((typeof originalOrigin !== 'undefined') && (origin === originalOrigin) && (typeof originalData !== 'undefined')) { + // If the origin hasn't changed use the existing data, so we aren't making unneeded AJAX requests + if ((typeof originalOrigin !== 'undefined') && (origin === originalOrigin) && (typeof originalData !== 'undefined') && this.settings.pagination !== true) { origin = originalOrigin; dataRequest = originalData; } @@ -3261,7 +3627,11 @@ } else { if (typeof locationset[0] !== 'undefined') { - if (_this.settings.distanceAlert !== -1 && locationset[0].distance > _this.settings.distanceAlert) { + if ( + _this.settings.distanceAlert !== -1 && + locationset[0].distance > _this.settings.distanceAlert && + (typeof paginationPage === 'undefined' || parseInt(paginationPage) === 1) + ) { _this.notify(_this.settings.distanceErrorAlert + _this.settings.distanceAlert + ' ' + distUnit); distError = true; } @@ -3410,7 +3780,7 @@ _this.map = new google.maps.Map(document.getElementById(_this.settings.mapID), myOptions); // Re-center the map when the browser is re-sized - window.addEventListener('resize', function() { + window.addEventListener('resize', function() { var center = _this.map.getCenter(); google.maps.event.trigger(_this.map, 'resize'); _this.map.setCenter(center); @@ -3445,10 +3815,10 @@ _this.originMarker(_this.map, origin, originPoint); // Handle pagination - $(document).on('click.'+pluginName, '.bh-sl-pagination li', function (e) { + $(document).on('click.'+pluginName, '.bh-sl-pagination li a', function (e) { e.preventDefault(); // Run paginationChange - _this.paginationChange($(this).attr('data-page')); + _this.paginationChange($(this).parent().attr('data-page')); }); // Inline directions @@ -3467,11 +3837,21 @@ var point = new google.maps.LatLng(locationset[y].lat, locationset[y].lng); marker = _this.createMarker(point, locationset[y].name, locationset[y].address, letter, _this.map, locationset[y].category); - marker.set('id', y); + + if (_this.useLegacyMarkers()) { + marker.set('id', y); + } else { + marker.bhslID = y; + } + markers[y] = marker; // Add marker ID to location data - locationset[y].markerid = marker.get('id'); + if (_this.useLegacyMarkers()) { + locationset[y].markerid = marker.get('id'); + } else { + locationset[y].markerid = marker.bhslID; + } if (this.settings.dataRaw !== null) { for (var l = 0; l < this.settings.dataRaw.length; l++) { @@ -3549,9 +3929,21 @@ // Open nearest location. _this.openNearestLocation(nearestLoc, infowindow, storeStart, page); - // MarkerClusterer setup - if ( typeof MarkerClusterer !== 'undefined' && _this.settings.markerCluster !== null ) { - var markerCluster = new MarkerClusterer(_this.map, markers, _this.settings.markerCluster); + // MarkerClusterer setup. + if (_this.useLegacyMarkers()) { + if ( typeof MarkerClusterer !== 'undefined' && _this.settings.markerCluster !== null ) { + var markerCluster = new MarkerClusterer(_this.map, markers, _this.settings.markerCluster); + } + } else { + if ( typeof markerClusterer !== 'undefined' ) { + var customClustererParams = _this.settings.markerCluster; + + new markerClusterer.MarkerClusterer({ + markers, + map: _this.map, + customClustererParams + }); + } } // Handle clicks from the list diff --git a/dist/assets/js/plugins/storeLocator/jquery.storelocator.min.js b/dist/assets/js/plugins/storeLocator/jquery.storelocator.min.js index 3f350cc..ba38032 100644 --- a/dist/assets/js/plugins/storeLocator/jquery.storelocator.min.js +++ b/dist/assets/js/plugins/storeLocator/jquery.storelocator.min.js @@ -1,5 +1,5 @@ -/*! jQuery Google Maps Store Locator - v3.1.14 - 2023-09-26 +/*! jQuery Google Maps Store Locator - v3.4.1 - 2024-12-20 * http://www.bjornblog.com/web/jquery-store-locator-plugin -* Copyright (c) 2023 Bjorn Holine; Licensed MIT */ +* Copyright (c) 2024 Bjorn Holine; Licensed MIT */ -!function(E,N,j,t){"use strict";var _,a,r,c,z,Q,V,q,U,K,l,g,H,i,n,f,s,W,J,$,o,Z,X,Y,tt,et,h,u,st,d,p,it="storeLocator",b=!1,e=null;function m(t,s){var i,e;_=E(t),this.element=t,this.settings=E.extend({},p,s),this._defaults=p,this._name=it,this.settings.lazyLoadMap&&null!==this.settings.apiKey&&"undefined"==typeof google?(!!(e={})===(i=this).settings.autoComplete&&(e.libraries="places"),this.settings.callbackBeforeMapInject?new Promise(function(t,e){i.settings.callbackBeforeMapInject.call(this,s,t)}).then(function(){i.triggerMapLoad(e)}):i.triggerMapLoad(e)):this.init()}void 0===E.fn[it]&&(p={ajaxData:null,altDistanceNoResult:!(d={}),apiKey:null,autoComplete:!(st={}),autoCompleteDisableListener:!(u={}),autoCompleteOptions:{},autoGeocode:!(h={}),bounceMarker:!0,catMarkers:null,dataLocation:"data/locations.json",dataRaw:null,dataType:"json",debug:!(et={}),defaultLat:null,defaultLng:null,defaultLoc:!(tt=[]),disableAlphaMarkers:!(Y=[]),distanceAlert:60,dragSearch:!(X=[]),exclusiveFiltering:!(Z=[]),exclusiveTax:null,featuredDistance:null,featuredLocations:!1,fullMapStart:!1,fullMapStartBlank:!1,fullMapStartListLimit:!1,infoBubble:null,inlineDirections:!1,lazyLoadMap:!1,lengthUnit:"m",listColor1:"#ffffff",listColor2:"#eeeeee",loading:!1,locationsPerPage:10,mapSettings:{mapTypeId:"roadmap",zoom:12},markerCluster:null,markerImg:null,markerDim:null,maxDistance:!1,modal:!1,nameAttribute:"name",nameSearch:!1,noForm:!1,openNearest:!1,originMarker:!1,originMarkerDim:null,originMarkerImg:null,pagination:!1,querystringParams:!1,selectedMarkerImg:null,selectedMarkerImgDim:null,sessionStorage:!1,slideMap:!0,sortBy:null,storeLimit:26,taxonomyFilters:null,visibleMarkersList:!1,xmlElement:"marker",addressID:"bh-sl-address",closeIcon:"bh-sl-close-icon",formContainer:"bh-sl-form-container",formID:"bh-sl-user-location",geocodeID:null,lengthSwapID:"bh-sl-length-swap",loadingContainer:"bh-sl-loading",locationList:"bh-sl-loc-list",mapID:"bh-sl-map",maxDistanceID:"bh-sl-maxdistance",modalContent:"bh-sl-modal-content",modalWindow:"bh-sl-modal-window",orderID:"bh-sl-order",overlay:"bh-sl-overlay",regionID:"bh-sl-region",searchID:"bh-sl-search",sortID:"bh-sl-sort",taxonomyFiltersContainer:"bh-sl-filters-container",infowindowTemplatePath:"assets/js/plugins/storeLocator/templates/infowindow-description.html",listTemplatePath:"assets/js/plugins/storeLocator/templates/location-list-description.html",KMLinfowindowTemplatePath:"assets/js/plugins/storeLocator/templates/kml-infowindow-description.html",KMLlistTemplatePath:"assets/js/plugins/storeLocator/templates/kml-location-list-description.html",listTemplateID:null,infowindowTemplateID:null,callbackAutoGeoSuccess:null,callbackBeforeMapInject:null,callbackBeforeSend:null,callbackCloseDirections:null,callbackCreateMarker:null,callbackDirectionsRequest:null,callbackFilters:null,callbackFormVals:null,callbackGeocodeRestrictions:null,callbackJsonp:null,callbackListClick:null,callbackMapSet:null,callbackMarkerClick:null,callbackModalClose:null,callbackModalOpen:null,callbackModalReady:null,callbackNearestLoc:null,callbackNoResults:null,callbackNotify:null,callbackOrder:null,callbackPageChange:null,callbackRegion:null,callbackSorting:null,callbackSuccess:null,addressErrorAlert:"Unable to find address",autoGeocodeErrorAlert:"Automatic location detection failed. Please fill in your address or zip code.",distanceErrorAlert:"Unfortunately, our closest location is more than ",kilometerLang:"kilometer",kilometersLang:"kilometers",mileLang:"mile",milesLang:"miles",noResultsTitle:"No results",noResultsDesc:"No locations were found with the given criteria. Please modify your selections or input.",nextPage:"Next »",prevPage:"« Prev"},E.extend(m.prototype,{init:function(){var t,e=this;this.writeDebug("init"),"km"===this.settings.lengthUnit?u.EarthRadius=6367:u.EarthRadius=3956,c="kml"===this.settings.dataType?"xml":this.settings.dataType,!0===this.settings.inlineDirections&&E("."+this.settings.locationList).prepend('
    '),V=this.settings.mapSettings.zoom,Handlebars.registerHelper("niceURL",function(t){if(t)return t.replace("https://","").replace("http://","")}),null!==this.settings.taxonomyFilters&&this.taxonomyFiltering(),this.sorting(),this.order(),!0===this.settings.modal&&(null!==this.settings.taxonomyFilters&&E("."+this.settings.taxonomyFiltersContainer).clone(!0,!0).prependTo(_),_.wrap('
    '),E("."+this.settings.modalWindow).prepend('
    '),E("."+this.settings.overlay).hide()),!0===this.settings.autoComplete&&(t=j.getElementById(this.settings.addressID),t=new google.maps.places.Autocomplete(t,this.settings.autoCompleteOptions),!0===this.settings.autoComplete)&&!0!==this.settings.autoCompleteDisableListener&&t.addListener("place_changed",function(t){e.processForm(t)}),this._loadTemplates()},triggerMapLoad:function(t){this.writeDebug("triggerMapLoad");var e=this;this.loadMapsAPI(this.settings.apiKey,t).then(function(t){e.map=t,e.init()})},injectGoogleMapsScript:function(e){if(this.writeDebug("injectGoogleMapsScript"),e=void 0!==e?e:{},b)throw new Error("Google Maps API is already loaded.");var t="https://maps.googleapis.com/maps/api/js?"+Object.keys(e).map(t=>encodeURIComponent(t)+"="+encodeURIComponent(e[t])).join("&"),s=j.createElement("script");s.setAttribute("src",t),s.setAttribute("async",""),s.setAttribute("defer",""),j.head.appendChild(s),b=!0},loadMapsAPI:function(s,i){this.writeDebug("loadMapsAPI"),i=void 0!==i?i:{};var n=this;return e=e||new Promise(function(t,e){try{N.onGoogleMapsAPILoaded=t,n.injectGoogleMapsScript({key:s,callback:"onGoogleMapsAPILoaded",...i})}catch(t){e(t)}}).then(function(){N.google.maps})},destroy:function(){this.writeDebug("destroy"),this.reset();var t=E("#"+this.settings.mapID);if(tt.length)for(var e=0;e<=tt.length;e++)google.maps.event.removeListener(tt[e]);E("."+this.settings.locationList+" ul").empty(),t.hasClass("bh-sl-map-open")&&t.empty().removeClass("bh-sl-map-open"),!0===this.settings.modal&&E(". "+this.settings.overlay).remove(),t.attr("style",""),_.hide(),E.removeData(_.get(0)),E(j).off(it),_.unbind()},reset:function(){var t;this.writeDebug("reset"),X=[],Z=[],Y=[],W=!(tt=[]),E(j).off("click."+it,"."+this.settings.locationList+" li"),E("."+this.settings.locationList+" .bh-sl-close-directions-container").length&&E(".bh-sl-close-directions-container").remove(),!0===this.settings.inlineDirections&&(0<(t=E("."+this.settings.locationList+" .adp")).length&&(t.remove(),E("."+this.settings.locationList+" ul").fadeIn()),E(j).off("click","."+this.settings.locationList+" li .loc-directions a")),!0===this.settings.pagination&&E(j).off("click."+it,".bh-sl-pagination li")},formFiltersReset:function(){var t,e;this.writeDebug("formFiltersReset"),null!==this.settings.taxonomyFilters&&(t=E("."+this.settings.taxonomyFiltersContainer+" input"),e=E("."+this.settings.taxonomyFiltersContainer+" select"),"object"==typeof t)&&(t.each(function(){(E(this).is('input[type="checkbox"]')||E(this).is('input[type="radio"]'))&&E(this).prop("checked",!1)}),e.each(function(){E(this).prop("selectedIndex",0)}))},mapReload:function(){this.writeDebug("mapReload"),this.reset(),J=!0,null!==this.settings.taxonomyFilters&&(this.formFiltersReset(),this.resetDisabledFilterVals(),this.taxonomyFiltersInit()),l&&g?(this.settings.mapSettings.zoom=V,this.processForm()):this.mapping(st)},notify:function(t){this.writeDebug("notify",t),this.settings.callbackNotify?this.settings.callbackNotify.call(this,t):alert(t)},geoCodeCalcToRadian:function(t){return this.writeDebug("geoCodeCalcToRadian",t),t*(Math.PI/180)},geoCodeCalcDiffRadian:function(t,e){return this.writeDebug("geoCodeCalcDiffRadian",arguments),this.geoCodeCalcToRadian(e)-this.geoCodeCalcToRadian(t)},geoCodeCalcCalcDistance:function(t,e,s,i,n){return this.writeDebug("geoCodeCalcCalcDistance",arguments),2*n*Math.asin(Math.min(1,Math.sqrt(Math.pow(Math.sin(this.geoCodeCalcDiffRadian(t,s)/2),2)+Math.cos(this.geoCodeCalcToRadian(t))*Math.cos(this.geoCodeCalcToRadian(s))*Math.pow(Math.sin(this.geoCodeCalcDiffRadian(e,i)/2),2))))},inRange:function(t,e,s){return this.writeDebug("inRange",arguments),e=Math.abs(e),isFinite(e)&&t<=e&&e<=s},coordinatesInRange:function(t,e){return this.writeDebug("coordinatesInRange",arguments),this.inRange(-90,t,90)&&this.inRange(-180,e,180)},getQueryString:function(t){if(this.writeDebug("getQueryString",t),t)return t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),null===(t=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(location.search))?"":decodeURIComponent(t[1].replace(/\+/g," "))},getMap:function(){return this.map},_loadTemplates:function(){this.writeDebug("_loadTemplates");var e,t=this,s='
    Error: Could not load plugin templates. Check the paths and ensure they have been uploaded. Paths will be wrong if you do not run this from a web server.
    ';"kml"===this.settings.dataType&&null===this.settings.listTemplateID&&null===this.settings.infowindowTemplateID?E.when(E.get(this.settings.KMLinfowindowTemplatePath,function(t){e=t,r=Handlebars.compile(e)}),E.get(this.settings.KMLlistTemplatePath,function(t){e=t,a=Handlebars.compile(e)})).then(function(){t.locator()},function(){throw E("."+t.settings.formContainer).append(s),new Error("Could not load storeLocator plugin templates")}):null!==this.settings.listTemplateID&&null!==this.settings.infowindowTemplateID?(r=Handlebars.compile(E("#"+this.settings.infowindowTemplateID).html()),a=Handlebars.compile(E("#"+this.settings.listTemplateID).html()),t.locator()):E.when(E.get(this.settings.infowindowTemplatePath,function(t){e=t,r=Handlebars.compile(e)}),E.get(this.settings.listTemplatePath,function(t){e=t,a=Handlebars.compile(e)})).then(function(){t.locator()},function(){throw E("."+t.settings.formContainer).append(s),new Error("Could not load storeLocator plugin templates")})},locator:function(){this.writeDebug("locator"),!0===this.settings.slideMap&&_.hide(),this._start(),this._formEventHandler()},_formEventHandler:function(){this.writeDebug("_formEventHandler");var e=this;!0===this.settings.noForm?(E(j).on("click."+it,"."+this.settings.formContainer+" button",function(t){e.processForm(t)}),E(j).on("keydown."+it,function(t){13===t.keyCode&&E("#"+e.settings.addressID).is(":focus")&&e.processForm(t)})):E(j).on("submit."+it,"#"+this.settings.formID,function(t){e.processForm(t)}),E(".bh-sl-reset").length&&E("#"+this.settings.mapID).length&&E(j).on("click."+it,".bh-sl-reset",function(){e.mapReload()}),E("#"+this.settings.addressID).on("change."+it,function(){o=t,d={},""!==E.trim(E("#"+e.settings.addressID).val())||void 0!==U&&""!==U||null!==e.settings.taxonomyFilters&&!1===e.settings.exclusiveFiltering&&(z=g=l=t,st={},e.resetDisabledFilterVals(),e.taxonomyFiltersInit(),e.mapping(null))})},_getData:function(t,e,s,i,n){this.writeDebug("_getData",arguments);var a,o=this,r="",l="",g="";return void 0!==i&&void 0!==i.geometry.bounds&&(g=i.formatted_address,r=JSON.stringify(i.geometry.bounds.getNorthEast()),l=JSON.stringify(i.geometry.bounds.getSouthWest())),this.settings.callbackBeforeSend&&this.settings.callbackBeforeSend.call(this,t,e,s,g,r,l,n),null!==o.settings.dataRaw?"xml"===c?E.parseXML(o.settings.dataRaw):"json"===c?Array.isArray&&Array.isArray(o.settings.dataRaw)?o.settings.dataRaw:"string"==typeof o.settings.dataRaw?JSON.parse(o.settings.dataRaw):[]:void 0:(a=E.Deferred(),!0===this.settings.loading&&E("."+this.settings.formContainer).append('
    '),i={origLat:t,origLng:e,origAddress:s,formattedAddress:g,boundsNorthEast:r,boundsSouthWest:l},null!==this.settings.ajaxData&&"object"==typeof this.settings.ajaxData&&E.extend(i,this.settings.ajaxData),E.ajax({type:"GET",url:this.settings.dataLocation+("jsonp"===this.settings.dataType?(this.settings.dataLocation.match(/\?/)?"&":"?")+"callback=?":""),data:i,dataType:c,jsonpCallback:"jsonp"===this.settings.dataType?this.settings.callbackJsonp:null}).done(function(t){a.resolve(t),!0===o.settings.loading&&E("."+o.settings.formContainer+" ."+o.settings.loadingContainer).remove()}).fail(a.reject),a.promise())},_start:function(){this.writeDebug("_start");var t,e,s=this,i=this.settings.autoGeocode;!1!==s.settings.fullMapStartBlank?(E("#"+s.settings.mapID).addClass("bh-sl-map-open"),(e=s.settings.mapSettings).zoom=s.settings.fullMapStartBlank,t=new google.maps.LatLng(this.settings.defaultLat,this.settings.defaultLng),e.center=t,s.map=new google.maps.Map(j.getElementById(s.settings.mapID),e),N.addEventListener("resize",function(){var t=s.map.getCenter();google.maps.event.trigger(s.map,"resize"),s.map.setCenter(t)}),s.settings.fullMapStartBlank=!1,e.zoom=V):(!0===this.settings.defaultLoc&&this.defaultLocation(),""!==E.trim(E("#"+this.settings.addressID).val())?(s.writeDebug("Using Address Field"),s.processForm(null),i=!1):!0===this.settings.fullMapStart&&!1===this.settings.defaultLoc&&(!0===this.settings.querystringParams&&this.getQueryString(this.settings.addressID)||!0===this.settings.querystringParams&&this.getQueryString(this.settings.searchID)||!0===this.settings.querystringParams&&this.getQueryString(this.settings.maxDistanceID)?(s.writeDebug("Using Query String"),this.processForm(null),i=!1):this.mapping(null))),!0===this.settings.autoGeocode&&!0===i&&(s.writeDebug("Auto Geo"),s.htmlGeocode()),null!==this.settings.autoGeocode&&(s.writeDebug("Button Geo"),E(j).on("click."+it,"#"+this.settings.geocodeID,function(){s.htmlGeocode()}))},htmlGeocode:function(){this.writeDebug("htmlGeocode",arguments);var e=this;if(!0===e.settings.sessionStorage&&N.sessionStorage&&N.sessionStorage.getItem("myGeo"))return e.writeDebug("Using Session Saved Values for GEO"),e.autoGeocodeQuery(JSON.parse(N.sessionStorage.getItem("myGeo"))),!1;navigator.geolocation&&navigator.geolocation.getCurrentPosition(function(t){e.writeDebug("Current Position Result");t={coords:{latitude:t.coords.latitude,longitude:t.coords.longitude,accuracy:t.coords.accuracy}};!0===e.settings.sessionStorage&&N.sessionStorage&&N.sessionStorage.setItem("myGeo",JSON.stringify(t)),e.settings.callbackAutoGeoSuccess&&e.settings.callbackAutoGeoSuccess.call(this,t),e.autoGeocodeQuery(t)},function(t){e._autoGeocodeError(t)})},googleGeocode:function(t){t.writeDebug("googleGeocode",arguments);var e=new google.maps.Geocoder;this.geocode=function(t,s){e.geocode(t,function(t,e){if(e!==google.maps.GeocoderStatus.OK)throw s(null),new Error("Geocode was not successful for the following reason: "+e);e={};e.latitude=t[0].geometry.location.lat(),e.longitude=t[0].geometry.location.lng(),e.geocodeResult=t[0],s(e)})}},reverseGoogleGeocode:function(t){t.writeDebug("reverseGoogleGeocode",arguments);var e=new google.maps.Geocoder;this.geocode=function(t,s){e.geocode(t,function(t,e){if(e!==google.maps.GeocoderStatus.OK)throw s(null),new Error("Reverse geocode was not successful for the following reason: "+e);t[0]&&((e={}).address=t[0].formatted_address,e.fullResult=t[0],s(e))})}},roundNumber:function(t,e){return this.writeDebug("roundNumber",arguments),Math.round(t*Math.pow(10,e))/Math.pow(10,e)},isEmptyObject:function(t){for(var e in this.writeDebug("isEmptyObject",arguments),t)if(t.hasOwnProperty(e))return!1;return!0},hasEmptyObjectVals:function(t){this.writeDebug("hasEmptyObjectVals",arguments);var e,s=!0;for(e in t)t.hasOwnProperty(e)&&""!==t[e]&&0!==t[e].length&&(s=!1);return s},hasSingleGroupFilterVal:function(t,e){this.writeDebug("hasSingleGroupFilterVal",arguments);t=Object.assign({},t);return!this.hasEmptyObjectVals(t[e])},modalClose:function(){this.writeDebug("modalClose"),this.settings.callbackModalClose&&this.settings.callbackModalClose.call(this),et={},E("."+this.settings.overlay+" select").prop("selectedIndex",0),E("."+this.settings.overlay+" input").prop("checked",!1),E("."+this.settings.overlay).hide()},_createLocationVariables:function(t){var e,s;for(s in this.writeDebug("_createLocationVariables",arguments),h={},X[t])X[t].hasOwnProperty(s)&&(e=X[t][s],"distance"!==s&&"altdistance"!==s||(e=this.roundNumber(e,2)),h[s]=e)},sortAlpha:function(t){this.writeDebug("sortAlpha",arguments);var s=this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"name";this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return e[s].toLowerCase().localeCompare(t[s].toLowerCase())}):t.sort(function(t,e){return t[s].toLowerCase().localeCompare(e[s].toLowerCase())})},sortDate:function(t){this.writeDebug("sortDate",arguments);var s=this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"date";this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return new Date(e[s]).getTime()-new Date(t[s]).getTime()}):t.sort(function(t,e){return new Date(t[s]).getTime()-new Date(e[s]).getTime()})},sortNumerically:function(t,e){this.writeDebug("sortNumerically",arguments);var s=null!==this.settings.sortBy&&this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"distance";void 0!==e&&!0===e&&(s="distance"),null!==this.settings.sortBy&&this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return e[s]t[s]?1:0}):t.sort(function(t,e){return t[s]e[s]?1:0})},sortCustom:function(t){this.writeDebug("sortCustom",arguments),this.settings.sortBy.hasOwnProperty("method")&&"alpha"===this.settings.sortBy.method.toString()?this.sortAlpha(t):this.settings.sortBy.hasOwnProperty("method")&&"date"===this.settings.sortBy.method.toString()?this.sortDate(t):this.sortNumerically(t)},filterMatching:function(t,e,s){return this.writeDebug("inclusiveFilter",arguments),void 0!==e&&(s=!0===(s=void 0===s||s)?t.join(""):t.join("|"),!!new RegExp(s,"i").test(e.replace(/([.*+?^=!:${}()|\[\]\/\\]|&\s+)/g,"")))},filterData:function(t,e){this.writeDebug("filterData",arguments);var s,i=!0;for(s in e)if(e.hasOwnProperty(s)){for(var n=[],a=0;a'+this.settings.prevPage+"");for(var n=0;n'+a+"":'
  • '+a+"
  • "}return i
  • '+this.settings.nextPage+"
  • "),s},paginationSetup:function(t){this.writeDebug("paginationSetup",arguments);var e="",s=E(".bh-sl-pagination-container .bh-sl-pagination"),i=-1===this.settings.storeLimit||X.length ul").append(e)},changeSelectedMarker:function(t){var e;void 0!==s&&s.setIcon(f),e=null===this.settings.selectedMarkerImgDim?this.markerImage(this.settings.selectedMarkerImg):this.markerImage(this.settings.selectedMarkerImg,this.settings.selectedMarkerImgDim.width,this.settings.selectedMarkerImgDim.height),f=t.icon,t.setIcon(e),s=t},createInfowindow:function(s,t,i,e,n){this.writeDebug("createInfowindow",arguments);var a=this,e=this._defineLocationData(s,e,n),o=r(e);"left"===t?(i.setContent(o),i.open(s.get("map"),s)):google.maps.event.addListener(s,"click",function(){i.setContent(o),i.open(s.get("map"),s);var t=s.get("id"),e=E("."+a.settings.locationList+" li[data-markerid="+t+"]");0
    ')),E(j).off("click","."+this.settings.locationList+" li .loc-directions a")},closeDirections:function(){this.writeDebug("closeDirections"),this.settings.callbackCloseDirections&&this.settings.callbackCloseDirections.call(this),this.reset(),l&&g&&(0===this.countFilters()?this.settings.mapSettings.zoom=V:this.settings.mapSettings.zoom=0,this.processForm(null)),E(j).off("click."+it,"."+this.settings.locationList+" .bh-sl-close-icon")},lengthUnitSwap:function(t){this.writeDebug("lengthUnitSwap",arguments),"alt-distance"===t.val()?(E("."+this.settings.locationList+" .loc-alt-dist").show(),E("."+this.settings.locationList+" .loc-default-dist").hide()):"default-distance"===t.val()&&(E("."+this.settings.locationList+" .loc-default-dist").show(),E("."+this.settings.locationList+" .loc-alt-dist").hide())},processForm:function(t){this.writeDebug("processForm",arguments);var e=this,s=null,i={},n=E("#"+this.settings.addressID),a=E("#"+this.settings.searchID),o=E("#"+this.settings.maxDistanceID),r="";null!=t&&t.preventDefault(),E("."+e.settings.formContainer+" input, ."+e.settings.formContainer+" select").blur(),!0===this.settings.querystringParams&&(this.getQueryString(this.settings.addressID)||this.getQueryString(this.settings.searchID)||this.getQueryString(this.settings.maxDistanceID))?(K=this.getQueryString(this.settings.addressID),U=this.getQueryString(this.settings.searchID),s=this.getQueryString(this.settings.maxDistanceID),""!==n.val()&&(K=n.val()),""!==a.val()&&(U=a.val()),""!==o.val()&&(s=o.val())):(K=n.val()||"",U=a.val()||"",!0===this.settings.maxDistance&&(s=o.val()||"")),r=this.settings.callbackRegion?this.settings.callbackRegion.call(this,K,U,s):E("#"+this.settings.regionID).val(),this.settings.callbackFormVals&&this.settings.callbackFormVals.call(this,K,U,s,r),void 0!==r&&(i={country:r}),"function"==typeof this.settings.callbackGeocodeRestrictions&&(i=this.settings.callbackGeocodeRestrictions.call(this,K,U,s)),""===K&&""===U&&!0!==this.settings.autoGeocode?this._start():""!==K?(""===U&&et.hasOwnProperty("name")&&delete et.name,void 0!==z&&void 0!==l&&void 0!==g&&K===z?(st.lat=l,st.lng=g,st.origin=K,st.name=U,st.distance=s,e.mapping(st)):new this.googleGeocode(this).geocode({address:K,componentRestrictions:i,region:r},function(t){null!==t?(l=t.latitude,g=t.longitude,st.lat=l,st.lng=g,st.origin=K,st.name=U,st.distance=s,st.geocodeResult=t.geocodeResult,e.mapping(st)):e.notify(e.settings.addressErrorAlert)})):""!==U?(""===K&&delete st.origin,st.name=U,e.mapping(st)):!0===this.settings.autoGeocode&&(st.lat=l,st.lng=g,st.origin=K,st.name=U,st.distance=s,e.mapping(st))},locationsSetup:function(t,e,s,i,n){this.writeDebug("locationsSetup",arguments),void 0===i||t.distance||(t.distance=this.geoCodeCalcCalcDistance(e,s,t.lat,t.lng,u.EarthRadius),"m"===this.settings.lengthUnit?t.altdistance=1.609344*parseFloat(t.distance):"km"===this.settings.lengthUnit&&(t.altdistance=parseFloat(t.distance)/1.609344)),this.coordinatesInRange(t.lat,t.lng)?!0===this.settings.maxDistance&&null!=n?t.distance<=n?X.push(t):this.writeDebug("locationsSetup","location ignored because it is out of maxDistance: "+n,t):!0!==this.settings.maxDistance||!0!==this.settings.querystringParams||null==n||t.distance<=n?X.push(t):this.writeDebug("locationsSetup","location ignored because it is out of maxDistance: "+n,t):this.writeDebug("locationsSetup","location ignored because coordinates out of range: "+n,t)},sorting:function(){this.writeDebug("sorting",arguments);var s=this,i=E("#"+s.settings.mapID),t=E("#"+s.settings.sortID);0!==t.length&&t.on("change."+it,function(t){var e;t.stopPropagation(),!0===s.settings.pagination&&s.paginationChange(0),t=void 0!==E(this).find(":selected").attr("data-method")?E(this).find(":selected").attr("data-method"):"distance",e=E(this).val(),s.settings.sortBy.method=t,s.settings.sortBy.prop=e,s.settings.callbackSorting&&s.settings.callbackSorting.call(this,s.settings.sortBy),i.hasClass("bh-sl-map-open")&&s.mapping(st)})},order:function(){this.writeDebug("order",arguments);var e=this,s=E("#"+e.settings.mapID),t=E("#"+e.settings.orderID);0!==t.length&&t.on("change."+it,function(t){t.stopPropagation(),!0===e.settings.pagination&&e.paginationChange(0),e.settings.sortBy.order=E(this).val(),e.settings.callbackOrder&&e.settings.callbackOrder.call(this,e.settings.order),s.hasClass("bh-sl-map-open")&&e.mapping(st)})},countFilters:function(){this.writeDebug("countFilters");var t=0;if(!this.isEmptyObject(et))for(var e in et)et.hasOwnProperty(e)&&(t+=et[e].length);return t},_existingCheckedFilters:function(e){this.writeDebug("_existingCheckedFilters",arguments),E("#"+this.settings.taxonomyFilters[e]+" input[type=checkbox]").each(function(){var t;E(this).prop("checked")&&void 0!==(t=E(this).val())&&""!==t&&-1===et[e].indexOf(t)&&et[e].push(t)})},_existingSelectedFilters:function(e){this.writeDebug("_existingSelectedFilters",arguments),E("#"+this.settings.taxonomyFilters[e]+" select").each(function(){var t=E(this).val();void 0!==t&&""!==t&&-1===et[e].indexOf(t)&&(et[e]=[t])})},_existingRadioFilters:function(e){this.writeDebug("_existingRadioFilters",arguments),E("#"+this.settings.taxonomyFilters[e]+" input[type=radio]").each(function(){var t;E(this).prop("checked")&&void 0!==(t=E(this).val())&&""!==t&&-1===et[e].indexOf(t)&&(et[e]=[t])})},checkFilters:function(){for(var t in this.writeDebug("checkFilters"),this.settings.taxonomyFilters)this.settings.taxonomyFilters.hasOwnProperty(t)&&(this._existingCheckedFilters(t),this._existingSelectedFilters(t),this._existingRadioFilters(t))},selectQueryStringFilters:function(t,e){this.writeDebug("selectQueryStringFilters",arguments);var s=E("#"+this.settings.taxonomyFilters[t]);if(s.find('input[type="checkbox"]').length)for(var i=0;i ul").append(i))}),E("."+this.settings.locationList+" ul li:even").css("background",this.settings.listColor1),E("."+this.settings.locationList+" ul li:odd").css("background",this.settings.listColor2)},dragSearch:function(t){this.writeDebug("dragSearch",arguments);var e=t.getCenter(),s=this,t=(this.settings.mapSettings.zoom=t.getZoom(),l=st.lat=e.lat(),g=st.lng=e.lng(),new this.reverseGoogleGeocode(this)),e=new google.maps.LatLng(st.lat,st.lng);t.geocode({latLng:e},function(t){null!==t?(st.origin=K=t.address,s.mapping(st)):s.notify(s.settings.addressErrorAlert)})},emptyResult:function(){this.writeDebug("emptyResult",arguments);var t=E("."+this.settings.locationList+" ul"),e=this.settings.mapSettings;this.map=new google.maps.Map(j.getElementById(this.settings.mapID),e),this.settings.callbackNoResults&&this.settings.callbackNoResults.call(this,this.map,e),t.empty(),e=E('
  • '+this.settings.noResultsTitle+'

    '+this.settings.noResultsDesc+"
  • ").hide().fadeIn(),t.append(e),t=l&&g?new google.maps.LatLng(l,g):new google.maps.LatLng(0,0),this.map.setCenter(t),V&&this.map.setZoom(V)},originMarker:function(t,e,s){var i;this.writeDebug("originMarker",arguments),!0===this.settings.originMarker&&(i="",void 0!==e)&&(i=null!==this.settings.originMarkerImg?null===this.settings.originMarkerDim?this.markerImage(this.settings.originMarkerImg):this.markerImage(this.settings.originMarkerImg,this.settings.originMarkerDim.width,this.settings.originMarkerDim.height):{url:"https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png"},new google.maps.Marker({position:s,map:t,icon:i,draggable:!1}))},modalWindow:function(){var e;this.writeDebug("modalWindow"),!0===this.settings.modal&&((e=this).settings.callbackModalOpen&&e.settings.callbackModalOpen.call(this),E("."+e.settings.overlay).fadeIn(),E(j).on("click."+it,"."+e.settings.closeIcon+", ."+e.settings.overlay,function(){e.modalClose()}),E(j).on("click."+it,"."+e.settings.modalWindow,function(t){t.stopPropagation()}),E(j).on("keyup."+it,function(t){27===t.keyCode&&e.modalClose()}))},openNearestLocation:function(t,e,s,i){var n,a;this.writeDebug("openNearestLocation",arguments),!0!==this.settings.openNearest||void 0===t||void 0===z||!0===this.settings.fullMapStart&&!0===W&&!1===this.settings.querystringParams||!0===this.settings.defaultLoc&&!0===W&&!1===this.settings.querystringParams||((n=this).settings.callbackNearestLoc&&n.settings.callbackNearestLoc.call(this,n.map,t,e,s,i),t=t.hasOwnProperty("markerid")?t.markerid:0,a=tt[t],n.createInfowindow(a,"left",e,s,i),a=E("."+n.settings.locationList),e=E("."+n.settings.locationList+" li[data-markerid="+t+"]"),E("."+n.settings.locationList+" li").removeClass("list-focus"),e.addClass("list-focus"),a.animate({scrollTop:e.offset().top-a.offset().top+a.scrollTop()}))},listClick:function(s,i,n,a){this.writeDebug("listClick",arguments);var o=this;E(j).on("click."+it,"."+o.settings.locationList+" li",function(){var t=E(this).data("markerid"),e=tt[t];o.settings.callbackListClick&&o.settings.callbackListClick.call(this,t,e,X[t],s),s.panTo(e.getPosition());o.createInfowindow(e,"left",i,n,a),null!==o.settings.selectedMarkerImg&&o.changeSelectedMarker(e),E("."+o.settings.locationList+" li").removeClass("list-focus"),E("."+o.settings.locationList+" li[data-markerid="+t+"]").addClass("list-focus")}),E(j).on("click."+it,"."+o.settings.locationList+" li a",function(t){t.stopPropagation()})},resultsTotalCount:function(t){this.writeDebug("resultsTotalCount",arguments);var e=E(".bh-sl-total-results");void 0===t||t<=0||0===e.length||e.text(t)},inlineDirections:function(e,s){var i;this.writeDebug("inlineDirections",arguments),!0===this.settings.inlineDirections&&void 0!==s&&(i=this,E(j).on("click."+it,"."+i.settings.locationList+" li .loc-directions a",function(t){t.preventDefault();t=E(this).closest("li").attr("data-markerid");i.directionsRequest(s,parseInt(t),e),E(j).on("click."+it,"."+i.settings.locationList+" .bh-sl-close-icon",function(){i.closeDirections()})}))},visibleMarkersList:function(t,e){var s;this.writeDebug("visibleMarkersList",arguments),!0===this.settings.visibleMarkersList&&(s=this,google.maps.event.addListenerOnce(t,"idle",function(){s.checkVisibleMarkers(e,t)}),google.maps.event.addListener(t,"center_changed",function(){s.checkVisibleMarkers(e,t)}),google.maps.event.addListener(t,"zoom_changed",function(){s.checkVisibleMarkers(e,t)}))},featuredDistanceRestriction:function(){this.writeDebug("featuredDistanceRestriction",arguments);var e=this;return Z=E.grep(Z,function(t){if(t.hasOwnProperty("distance"))return parseFloat(t.distance)<=parseFloat(e.settings.featuredDistance)})},featuredRestrictions:function(t){return this.writeDebug("featuredRestrictions",arguments),Z=null!==this.settings.featuredDistance&&null!==this.settings.featuredDistance?this.featuredDistanceRestriction(t):Z},mapping:function(e){this.writeDebug("mapping",arguments);var t,s,i,n,a,o,r=this;this.isEmptyObject(e)||(t=e.lat,s=e.lng,i=e.geocodeResult,n=e.origin,o=e.page),!0!==r.settings.pagination||void 0!==o&&z===K||(o=0),q=void 0===n&&!0===this.settings.nameSearch?r._getData():(a=new google.maps.LatLng(t,s),void 0!==z&&n===z&&void 0!==Q?(n=z,Q):r._getData(l,g,n,i,e)),null!==r.settings.taxonomyFilters&&r.hasEmptyObjectVals(et)&&r.checkFilters(),null!==r.settings.dataRaw?r.processData(e,a,q,o):q.done(function(t){r.processData(e,a,t,o)})},resetDisabledFilterVals:function(){for(var t in this.writeDebug("resetDisabledFilterVals"),this.settings.taxonomyFilters)if(this.settings.taxonomyFilters.hasOwnProperty(t))for(var e=0;er)&&m.notify(m.settings.distanceErrorAlert+r+" "+w);else{if(void 0===X[0])throw m.emptyResult(),new Error("No locations found. Please check the dataLocation setting and path.");-1!==m.settings.distanceAlert&&X[0].distance>m.settings.distanceAlert&&(m.notify(m.settings.distanceErrorAlert+m.settings.distanceAlert+" "+w),h=!0)}void 0!==X[0]&&(d=X[0])}if(!0===m.settings.featuredLocations&&(Z=E.grep(X,function(t){if(t.hasOwnProperty("featured"))return"true"===t.featured}),Z=m.featuredRestrictions(t),Y=E.grep(X,function(t){if(t.hasOwnProperty("featured"))return"true"!==t.featured}),X=[],X=Z.concat(Y)),(!0!==W&&!1===m.settings.exclusiveFiltering||!0===m.settings.fullMapStart&&!1===m.settings.exclusiveFiltering||!0===m.settings.defaultLoc&&!1===m.settings.exclusiveFiltering)&&m.maybeDisableFilterOptions(),!0===m.settings.slideMap&&_.slideDown(),!0===m.settings.pagination&&m.paginationSetup(i),!0===m.settings.altDistanceNoResult&&d.distance>m.settings.distanceAlert)m.emptyResult();else if(m.isEmptyObject(X)||"none"===X[0].result)m.emptyResult();else{m.modalWindow(),H=-1===m.settings.storeLimit||X.lengthX.length&&(c=m.settings.locationsPerPage-(g+c-X.length)),X=X.slice(g,g+c),H=X.length):(c=H,g=0),m.resultsTotalCount(X.length),!0===m.settings.fullMapStart&&!0===W&&!0!==m.settings.querystringParams||0===m.settings.mapSettings.zoom||void 0===o||!0===h||!0===m.settings.maxDistance&&!1===W&&0m.settings.fullMapStartListLimit)for(var T=0;T li:even").css("background",m.settings.listColor1),E("."+m.settings.locationList+" ul > li:odd").css("background",m.settings.listColor2),m.visibleMarkersList(m.map,tt),!0===m.settings.querystringParams&&(w=E("#"+m.settings.addressID),P=E("#"+m.settings.searchID),void 0!==st&&st.hasOwnProperty("origin")&&""===w.val()&&w.val(st.origin),void 0!==st)&&st.hasOwnProperty("name")&&""===P.val()&&P.val(st.name),!0===m.settings.modal&&m.settings.callbackModalReady&&m.settings.callbackModalReady.call(this,t),m.settings.callbackFilters&&m.settings.callbackFilters.call(this,et,t)}},writeDebug:function(){N.console&&this.settings.debug&&(Function.prototype.bind?this.writeDebug=Function.prototype.bind.call(console.log,console,"StoreLocator :"):this.writeDebug=function(){arguments[0]="StoreLocator : "+arguments[0],Function.prototype.apply.call(console.log,console,arguments)},this.writeDebug.apply(this,arguments))}}),E.fn[it]=function(e){var s,i=arguments;return e===t||"object"==typeof e?this.each(function(){E.data(this,"plugin_"+it)||E.data(this,"plugin_"+it,new m(this,e))}):"string"==typeof e&&"_"!==e[0]&&"init"!==e?(this.each(function(){var t=E.data(this,"plugin_"+it);t instanceof m&&"function"==typeof t[e]&&(s=t[e].apply(t,Array.prototype.slice.call(i,1))),"destroy"===e&&E.data(this,"plugin_"+it,null)}),s!==t?s:this):void 0})}(jQuery,window,document); \ No newline at end of file +!function(B,N,j,t){"use strict";var _,a,i,c,z,Q,V,q,U,K,g,h,H,n,m,f,s,W,J,$,o,Z,X,Y,tt,et,st,r,l,it,u,d,nt="storeLocator",b=!1,e=null;function p(t,s){var i,e;_=B(t),this.element=t,this.settings=B.extend({},d,s),this._defaults=d,this._name=nt,""!==this.settings.mapSettingsID&&(this.settings.mapSettings.mapId=this.settings.mapSettingsID),this.settings.lazyLoadMap&&null!==this.settings.apiKey&&"undefined"==typeof google?(i=this,e={},e.libraries="marker",!0===this.settings.autoComplete&&(e.libraries="places,marker"),this.settings.callbackBeforeMapInject?new Promise(function(t,e){i.settings.callbackBeforeMapInject.call(this,s,t)}).then(function(){i.triggerMapLoad(e)}):i.triggerMapLoad(e)):this.init()}void 0===B.fn[nt]&&(d={ajaxData:null,altDistanceNoResult:!(u={}),apiKey:null,autoComplete:!(it={}),autoCompleteDisableListener:!(l={}),autoCompleteOptions:{},autoGeocode:!(r={}),bounceMarker:!0,catMarkers:null,dataLocation:"data/locations.json",dataRaw:null,dataType:"json",debug:!(st={}),defaultLat:null,defaultLng:null,defaultLoc:!(et=[]),disableAlphaMarkers:!(tt=[]),distanceAlert:60,dragSearch:!(Y=[]),exclusiveFiltering:!(X=[]),exclusiveTax:null,featuredDistance:null,featuredLocations:!1,fullMapStart:!1,fullMapStartBlank:!1,fullMapStartListLimit:!1,infoBubble:null,inlineDirections:!1,lazyLoadMap:!1,lengthUnit:"m",listColor1:"#ffffff",listColor2:"#eeeeee",loading:!1,locationsPerPage:10,mapSettings:{mapTypeId:"roadmap",zoom:12},mapSettingsID:"",markerCluster:null,markerImg:null,markerDim:null,maxDistance:!1,modal:!1,nameAttribute:"name",nameSearch:!1,noForm:!1,openNearest:!1,originMarker:!1,originMarkerDim:null,originMarkerImg:null,pagination:!1,querystringParams:!1,selectedMarkerImg:null,selectedMarkerImgDim:null,sessionStorage:!1,slideMap:!0,sortBy:null,storeLimit:26,taxonomyFilters:null,visibleMarkersList:!1,xmlElement:"marker",addressID:"bh-sl-address",closeIcon:"bh-sl-close-icon",formContainer:"bh-sl-form-container",formID:"bh-sl-user-location",geocodeID:null,lengthSwapID:"bh-sl-length-swap",loadingContainer:"bh-sl-loading",locationList:"bh-sl-loc-list",mapID:"bh-sl-map",maxDistanceID:"bh-sl-maxdistance",modalContent:"bh-sl-modal-content",modalWindow:"bh-sl-modal-window",orderID:"bh-sl-order",overlay:"bh-sl-overlay",regionID:"bh-sl-region",searchID:"bh-sl-search",sortID:"bh-sl-sort",taxonomyFiltersContainer:"bh-sl-filters-container",infowindowTemplatePath:"assets/js/plugins/storeLocator/templates/infowindow-description.html",listTemplatePath:"assets/js/plugins/storeLocator/templates/location-list-description.html",KMLinfowindowTemplatePath:"assets/js/plugins/storeLocator/templates/kml-infowindow-description.html",KMLlistTemplatePath:"assets/js/plugins/storeLocator/templates/kml-location-list-description.html",listTemplateID:null,infowindowTemplateID:null,callbackAutoGeoSuccess:null,callbackBeforeMapInject:null,callbackBeforeSend:null,callbackCloseDirections:null,callbackCreateMarker:null,callbackDirectionsRequest:null,callbackFilters:null,callbackFormVals:null,callbackGeocodeRestrictions:null,callbackJsonp:null,callbackListClick:null,callbackMapSet:null,callbackMarkerClick:null,callbackModalClose:null,callbackModalOpen:null,callbackModalReady:null,callbackNearestLoc:null,callbackNoResults:null,callbackNotify:null,callbackOrder:null,callbackPageChange:null,callbackRegion:null,callbackSorting:null,callbackSuccess:null,addressErrorAlert:"Unable to find address",autoGeocodeErrorAlert:"Automatic location detection failed. Please fill in your address or zip code.",distanceErrorAlert:"Unfortunately, our closest location is more than ",kilometerLang:"kilometer",kilometersLang:"kilometers",mileLang:"mile",milesLang:"miles",noResultsTitle:"No results",noResultsDesc:"No locations were found with the given criteria. Please modify your selections or input.",nextPage:"Next »",prevPage:"« Prev"},B.extend(p.prototype,{init:function(){var t,e=this;this.writeDebug("init"),"km"===this.settings.lengthUnit?l.EarthRadius=6367:l.EarthRadius=3956,c="kml"===this.settings.dataType?"xml":this.settings.dataType,!0===this.settings.inlineDirections&&B("."+this.settings.locationList).prepend('
    '),V=this.settings.mapSettings.zoom,Handlebars.registerHelper("niceURL",function(t){if(t)return t.replace("https://","").replace("http://","")}),!0===this.settings.maxDistance&&this.distanceFiltering(),null!==this.settings.taxonomyFilters&&this.taxonomyFiltering(),this.sorting(),this.order(),!0===this.settings.modal&&(null!==this.settings.taxonomyFilters&&B("."+this.settings.taxonomyFiltersContainer).clone(!0,!0).prependTo(_),_.wrap('
    '),B("."+this.settings.modalWindow).prepend('
    '),B("."+this.settings.overlay).hide()),!0===this.settings.autoComplete&&(t=j.getElementById(this.settings.addressID),t=new google.maps.places.Autocomplete(t,this.settings.autoCompleteOptions),!0===this.settings.autoComplete)&&!0!==this.settings.autoCompleteDisableListener&&t.addListener("place_changed",function(t){e.processForm(t)}),this._loadTemplates()},triggerMapLoad:function(t){this.writeDebug("triggerMapLoad");var e=this;this.loadMapsAPI(this.settings.apiKey,t).then(function(t){e.map=t,e.init()})},injectGoogleMapsScript:function(e){if(this.writeDebug("injectGoogleMapsScript"),e=void 0!==e?e:{},b)throw new Error("Google Maps API is already loaded.");var t="https://maps.googleapis.com/maps/api/js?"+Object.keys(e).map(t=>encodeURIComponent(t)+"="+encodeURIComponent(e[t])).join("&"),s=j.createElement("script");s.setAttribute("src",t),s.setAttribute("async",""),s.setAttribute("defer",""),j.head.appendChild(s),b=!0},loadMapsAPI:function(s,i){this.writeDebug("loadMapsAPI"),i=void 0!==i?i:{};var n=this;return e=e||new Promise(function(t,e){try{N.onGoogleMapsAPILoaded=t,n.injectGoogleMapsScript({key:s,loading:"async",callback:"onGoogleMapsAPILoaded",...i})}catch(t){e(t)}}).then(function(){N.google.maps})},destroy:function(){this.writeDebug("destroy"),this.reset();var t=B("#"+this.settings.mapID);if(et.length)for(var e=0;e<=et.length;e++)google.maps.event.removeListener(et[e]);B("."+this.settings.locationList+" ul").empty(),t.hasClass("bh-sl-map-open")&&t.empty().removeClass("bh-sl-map-open"),!0===this.settings.modal&&B(". "+this.settings.overlay).remove(),t.attr("style",""),_.hide(),B.removeData(_.get(0)),B(j).off(nt),_.unbind()},reset:function(){var t;this.writeDebug("reset"),Y=[],X=[],tt=[],W=!(et=[]),B(j).off("click."+nt,"."+this.settings.locationList+" li"),B("."+this.settings.locationList+" .bh-sl-close-directions-container").length&&B(".bh-sl-close-directions-container").remove(),!0===this.settings.inlineDirections&&(0<(t=B("."+this.settings.locationList+" .adp")).length&&(t.remove(),B("."+this.settings.locationList+" ul").fadeIn()),B(j).off("click","."+this.settings.locationList+" li .loc-directions a")),!0===this.settings.pagination&&B(j).off("click."+nt,".bh-sl-pagination li a")},formFiltersReset:function(){var t,e;this.writeDebug("formFiltersReset"),null!==this.settings.taxonomyFilters&&(t=B("."+this.settings.taxonomyFiltersContainer+" input"),e=B("."+this.settings.taxonomyFiltersContainer+" select"),"object"==typeof t)&&(t.each(function(){(B(this).is('input[type="checkbox"]')||B(this).is('input[type="radio"]'))&&B(this).prop("checked",!1)}),e.each(function(){B(this).prop("selectedIndex",0)}))},mapReload:function(){this.writeDebug("mapReload"),this.reset(),J=!0,null!==this.settings.taxonomyFilters&&(this.formFiltersReset(),this.resetDisabledFilterVals(),this.taxonomyFiltersInit()),g&&h?(this.settings.mapSettings.zoom=V,this.processForm()):this.mapping(it)},notify:function(t){this.writeDebug("notify",t),this.settings.callbackNotify?this.settings.callbackNotify.call(this,t):alert(t)},geoCodeCalcToRadian:function(t){return this.writeDebug("geoCodeCalcToRadian",t),t*(Math.PI/180)},geoCodeCalcDiffRadian:function(t,e){return this.writeDebug("geoCodeCalcDiffRadian",arguments),this.geoCodeCalcToRadian(e)-this.geoCodeCalcToRadian(t)},geoCodeCalcCalcDistance:function(t,e,s,i,n){return this.writeDebug("geoCodeCalcCalcDistance",arguments),2*n*Math.asin(Math.min(1,Math.sqrt(Math.pow(Math.sin(this.geoCodeCalcDiffRadian(t,s)/2),2)+Math.cos(this.geoCodeCalcToRadian(t))*Math.cos(this.geoCodeCalcToRadian(s))*Math.pow(Math.sin(this.geoCodeCalcDiffRadian(e,i)/2),2))))},inRange:function(t,e,s){return this.writeDebug("inRange",arguments),e=Math.abs(e),isFinite(e)&&t<=e&&e<=s},coordinatesInRange:function(t,e){return this.writeDebug("coordinatesInRange",arguments),this.inRange(-90,t,90)&&this.inRange(-180,e,180)},getQueryString:function(t){if(this.writeDebug("getQueryString",t),t)return t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),null===(t=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(location.search))?"":decodeURIComponent(t[1].replace(/\+/g," "))},getMap:function(){return this.map},_loadTemplates:function(){this.writeDebug("_loadTemplates");var e,t=this,s='
    Error: Could not load plugin templates. Check the paths and ensure they have been uploaded. Paths will be wrong if you do not run this from a web server.
    ';"kml"===this.settings.dataType&&null===this.settings.listTemplateID&&null===this.settings.infowindowTemplateID?B.when(B.get(this.settings.KMLinfowindowTemplatePath,function(t){e=t,i=Handlebars.compile(e)}),B.get(this.settings.KMLlistTemplatePath,function(t){e=t,a=Handlebars.compile(e)})).then(function(){t.locator()},function(){throw B("."+t.settings.formContainer).append(s),new Error("Could not load storeLocator plugin templates")}):null!==this.settings.listTemplateID&&null!==this.settings.infowindowTemplateID?(i=Handlebars.compile(B("#"+this.settings.infowindowTemplateID).html()),a=Handlebars.compile(B("#"+this.settings.listTemplateID).html()),t.locator()):B.when(B.get(this.settings.infowindowTemplatePath,function(t){e=t,i=Handlebars.compile(e)}),B.get(this.settings.listTemplatePath,function(t){e=t,a=Handlebars.compile(e)})).then(function(){t.locator()},function(){throw B("."+t.settings.formContainer).append(s),new Error("Could not load storeLocator plugin templates")})},locator:function(){this.writeDebug("locator"),!0===this.settings.slideMap&&_.hide(),this._start(),this._formEventHandler()},_formEventHandler:function(){this.writeDebug("_formEventHandler");var e=this;!0===this.settings.noForm?(B(j).on("click."+nt,"."+this.settings.formContainer+" button",function(t){e.processForm(t)}),B(j).on("keydown."+nt,function(t){13===t.keyCode&&B("#"+e.settings.addressID).is(":focus")&&e.processForm(t)})):B(j).on("submit."+nt,"#"+this.settings.formID,function(t){e.processForm(t)}),B(".bh-sl-reset").length&&B("#"+this.settings.mapID).length&&B(j).on("click."+nt,".bh-sl-reset",function(){e.mapReload()}),B("#"+this.settings.addressID).on("change."+nt,function(){o=t,u={},""!==B.trim(B("#"+e.settings.addressID).val())||void 0!==U&&""!==U||null!==e.settings.taxonomyFilters&&!1===e.settings.exclusiveFiltering&&(z=h=g=t,it={},e.resetDisabledFilterVals(),e.taxonomyFiltersInit(),e.mapping(null))})},_getData:function(t,e,s,i,n){this.writeDebug("_getData",arguments);var a,o=this,r="",l="",g="";return void 0!==i&&void 0!==i.geometry.bounds&&(g=i.formatted_address,r=JSON.stringify(i.geometry.bounds.getNorthEast()),l=JSON.stringify(i.geometry.bounds.getSouthWest())),this.settings.callbackBeforeSend&&this.settings.callbackBeforeSend.call(this,t,e,s,g,r,l,n),null!==o.settings.dataRaw?"xml"===c?B.parseXML(o.settings.dataRaw):"json"===c?Array.isArray&&Array.isArray(o.settings.dataRaw)?o.settings.dataRaw:"string"==typeof o.settings.dataRaw?JSON.parse(o.settings.dataRaw):[]:void 0:(a=B.Deferred(),!0===this.settings.loading&&B("."+this.settings.formContainer).append('
    '),i={origLat:t,origLng:e,origAddress:s,formattedAddress:g,boundsNorthEast:r,boundsSouthWest:l},null!==this.settings.ajaxData&&"object"==typeof this.settings.ajaxData&&B.extend(i,this.settings.ajaxData),B.ajax({type:"GET",url:this.settings.dataLocation+("jsonp"===this.settings.dataType?(this.settings.dataLocation.match(/\?/)?"&":"?")+"callback=?":""),data:i,dataType:c,jsonpCallback:"jsonp"===this.settings.dataType?this.settings.callbackJsonp:null}).done(function(t){a.resolve(t),!0===o.settings.loading&&B("."+o.settings.formContainer+" ."+o.settings.loadingContainer).remove()}).fail(a.reject),a.promise())},_start:function(){this.writeDebug("_start");var t,e,s=this,i=this.settings.autoGeocode;!1!==s.settings.fullMapStartBlank?(B("#"+s.settings.mapID).addClass("bh-sl-map-open"),(e=s.settings.mapSettings).zoom=s.settings.fullMapStartBlank,t=new google.maps.LatLng(this.settings.defaultLat,this.settings.defaultLng),e.center=t,s.map=new google.maps.Map(j.getElementById(s.settings.mapID),e),N.addEventListener("resize",function(){var t=s.map.getCenter();google.maps.event.trigger(s.map,"resize"),s.map.setCenter(t)}),s.settings.fullMapStartBlank=!1,e.zoom=V):(!0===this.settings.defaultLoc&&this.defaultLocation(),""!==B.trim(B("#"+this.settings.addressID).val())?(s.writeDebug("Using Address Field"),s.processForm(null),i=!1):!0===this.settings.fullMapStart&&!1===this.settings.defaultLoc&&(!0===this.settings.querystringParams&&this.getQueryString(this.settings.addressID)||!0===this.settings.querystringParams&&this.getQueryString(this.settings.searchID)||!0===this.settings.querystringParams&&this.getQueryString(this.settings.maxDistanceID)?(s.writeDebug("Using Query String"),this.processForm(null),i=!1):this.mapping(null))),!0===this.settings.autoGeocode&&!0===i&&(s.writeDebug("Auto Geo"),s.htmlGeocode()),null!==this.settings.autoGeocode&&(s.writeDebug("Button Geo"),B(j).on("click."+nt,"#"+this.settings.geocodeID,function(){s.htmlGeocode()}))},htmlGeocode:function(){this.writeDebug("htmlGeocode",arguments);var e=this;if(!0===e.settings.sessionStorage&&N.sessionStorage&&N.sessionStorage.getItem("myGeo"))return e.writeDebug("Using Session Saved Values for GEO"),e.autoGeocodeQuery(JSON.parse(N.sessionStorage.getItem("myGeo"))),!1;navigator.geolocation&&navigator.geolocation.getCurrentPosition(function(t){e.writeDebug("Current Position Result");t={coords:{latitude:t.coords.latitude,longitude:t.coords.longitude,accuracy:t.coords.accuracy}};!0===e.settings.sessionStorage&&N.sessionStorage&&N.sessionStorage.setItem("myGeo",JSON.stringify(t)),e.settings.callbackAutoGeoSuccess&&e.settings.callbackAutoGeoSuccess.call(this,t),e.autoGeocodeQuery(t)},function(t){e._autoGeocodeError(t)})},googleGeocode:function(t){t.writeDebug("googleGeocode",arguments);var e=new google.maps.Geocoder;this.geocode=function(t,s){e.geocode(t,function(t,e){if(e!==google.maps.GeocoderStatus.OK)throw s(null),new Error("Geocode was not successful for the following reason: "+e);e={};e.latitude=t[0].geometry.location.lat(),e.longitude=t[0].geometry.location.lng(),e.geocodeResult=t[0],s(e)})}},reverseGoogleGeocode:function(t){t.writeDebug("reverseGoogleGeocode",arguments);var e=new google.maps.Geocoder;this.geocode=function(t,s){e.geocode(t,function(t,e){if(e!==google.maps.GeocoderStatus.OK)throw s(null),new Error("Reverse geocode was not successful for the following reason: "+e);t[0]&&((e={}).address=t[0].formatted_address,e.fullResult=t[0],s(e))})}},roundNumber:function(t,e){return this.writeDebug("roundNumber",arguments),Math.round(t*Math.pow(10,e))/Math.pow(10,e)},isEmptyObject:function(t){for(var e in this.writeDebug("isEmptyObject",arguments),t)if(t.hasOwnProperty(e))return!1;return!0},hasEmptyObjectVals:function(t){this.writeDebug("hasEmptyObjectVals",arguments);var e,s=!0;for(e in t)t.hasOwnProperty(e)&&""!==t[e]&&0!==t[e].length&&(s=!1);return s},hasSingleGroupFilterVal:function(t,e){this.writeDebug("hasSingleGroupFilterVal",arguments);t=Object.assign({},t);return!this.hasEmptyObjectVals(t[e])},modalClose:function(){this.writeDebug("modalClose"),this.settings.callbackModalClose&&this.settings.callbackModalClose.call(this),st={},B("."+this.settings.overlay+" select").prop("selectedIndex",0),B("."+this.settings.overlay+" input").prop("checked",!1),B("."+this.settings.overlay).hide()},_createLocationVariables:function(t){var e,s;for(s in this.writeDebug("_createLocationVariables",arguments),r={},Y[t])Y[t].hasOwnProperty(s)&&(e=Y[t][s],"distance"!==s&&"altdistance"!==s||(e=this.roundNumber(e,2)),r[s]=e)},sortAlpha:function(t){this.writeDebug("sortAlpha",arguments);var s=this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"name";this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return e[s].toLowerCase().localeCompare(t[s].toLowerCase())}):t.sort(function(t,e){return t[s].toLowerCase().localeCompare(e[s].toLowerCase())})},sortDate:function(t){this.writeDebug("sortDate",arguments);var s=this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"date";this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return new Date(e[s]).getTime()-new Date(t[s]).getTime()}):t.sort(function(t,e){return new Date(t[s]).getTime()-new Date(e[s]).getTime()})},sortNumerically:function(t,e){this.writeDebug("sortNumerically",arguments);var s=null!==this.settings.sortBy&&this.settings.sortBy.hasOwnProperty("prop")&&void 0!==this.settings.sortBy.prop?this.settings.sortBy.prop:"distance";void 0!==e&&!0===e&&(s="distance"),null!==this.settings.sortBy&&this.settings.sortBy.hasOwnProperty("order")&&"desc"===this.settings.sortBy.order.toString()?t.sort(function(t,e){return e[s]t[s]?1:0}):t.sort(function(t,e){return t[s]e[s]?1:0})},sortCustom:function(t){this.writeDebug("sortCustom",arguments),this.settings.sortBy.hasOwnProperty("method")&&"alpha"===this.settings.sortBy.method.toString()?this.sortAlpha(t):this.settings.sortBy.hasOwnProperty("method")&&"date"===this.settings.sortBy.method.toString()?this.sortDate(t):this.sortNumerically(t)},filterMatching:function(t,e,s){return this.writeDebug("inclusiveFilter",arguments),void 0!==e&&(s=!0===(s=void 0===s||s)?t.join(""):t.join("|"),!!new RegExp(s,"i").test(e.replace(/([.*+?^=!:${}()|\[\]\/\\]|&\s+)/g,"")))},filterData:function(t,e){this.writeDebug("filterData",arguments);var s,i=!0;for(s in e)if(e.hasOwnProperty(s)){for(var n=[],a=0;a')+''+this.settings.prevPage+""),5<=t+1&&5
  • 1
  • ');for(var g=s;g')+''+c+"":(i+='
  • ')+''+c+"
  • ";return t+o<=e&&5
  • ')+'
  • ')+''+e+"
  • "),i=n
  • ')+''+this.settings.nextPage+"
  • ":i},paginationReset:function(){this.writeDebug("paginationReset",arguments);var t=N.location.href,t=new URL(t);t.searchParams.delete("bhsl-page"),history.pushState&&N.history.pushState({path:t.href},"",t.href)},totalPages:function(){return this.writeDebug("totalPages",arguments),!(void 0!==z&&0this.settings.storeLimit)&&(-1===this.settings.storeLimit||Y.length ul").append(e)},changeSelectedMarker:function(t){var e;void 0!==s&&s.setIcon(f),e=null===this.settings.selectedMarkerImgDim?this.markerImage(this.settings.selectedMarkerImg):this.markerImage(this.settings.selectedMarkerImg,this.settings.selectedMarkerImgDim.width,this.settings.selectedMarkerImgDim.height),f=t.icon,t.setIcon(e),s=t},createInfowindow:function(n,t,a,e,s){this.writeDebug("createInfowindow",arguments);var o=this,e=this._defineLocationData(n,e,s),r=i(e);"left"===t?(a.setContent(r),this.useLegacyMarkers()?a.open(n.get("map"),n):a.open(n.map,n)):this.useLegacyMarkers()?google.maps.event.addListener(n,"click",function(){a.setContent(r),a.open(n.get("map"),n);var t=n.get("id"),e=B("."+o.settings.locationList+" li[data-markerid="+t+"]");0
    ')),B(j).off("click","."+this.settings.locationList+" li .loc-directions a")},closeDirections:function(){this.writeDebug("closeDirections"),this.settings.callbackCloseDirections&&this.settings.callbackCloseDirections.call(this),this.reset(),g&&h&&(0===this.countFilters()?this.settings.mapSettings.zoom=V:this.settings.mapSettings.zoom=0,this.processForm(null)),B(j).off("click."+nt,"."+this.settings.locationList+" .bh-sl-close-icon")},lengthUnitSwap:function(t){this.writeDebug("lengthUnitSwap",arguments),"alt-distance"===t.val()?(B("."+this.settings.locationList+" .loc-alt-dist").show(),B("."+this.settings.locationList+" .loc-default-dist").hide()):"default-distance"===t.val()&&(B("."+this.settings.locationList+" .loc-default-dist").show(),B("."+this.settings.locationList+" .loc-alt-dist").hide())},processForm:function(t){this.writeDebug("processForm",arguments);var e=this,s=null,i={},n=B("#"+this.settings.addressID),a=B("#"+this.settings.searchID),o=B("#"+this.settings.maxDistanceID),r="";null!=t&&t.preventDefault(),B("."+e.settings.formContainer+" input, ."+e.settings.formContainer+" select").blur(),!0===this.settings.querystringParams&&(this.getQueryString(this.settings.addressID)||this.getQueryString(this.settings.searchID)||this.getQueryString(this.settings.maxDistanceID))?(K=this.getQueryString(this.settings.addressID),U=this.getQueryString(this.settings.searchID),(s=this.getQueryString(this.settings.maxDistanceID))&&B("#"+this.settings.maxDistanceID+" option[value="+s+"]").length&&o.val(s),K&&s&&(e.settings.mapSettings.zoom=0),""!==n.val()&&(K=n.val()),""!==a.val()&&(U=a.val()),""!==o.val()&&(s=o.val())):(K=n.val()||"",U=a.val()||"",!0===this.settings.maxDistance&&(s=o.val()||"")),r=this.settings.callbackRegion?this.settings.callbackRegion.call(this,K,U,s):B("#"+this.settings.regionID).val(),this.settings.callbackFormVals&&this.settings.callbackFormVals.call(this,K,U,s,r),void 0!==r&&(i={country:r}),"function"==typeof this.settings.callbackGeocodeRestrictions&&(i=this.settings.callbackGeocodeRestrictions.call(this,K,U,s)),""===K&&""===U&&!0!==this.settings.autoGeocode?this._start():""!==K?(""===U&&st.hasOwnProperty("name")&&delete st.name,void 0!==z&&void 0!==g&&void 0!==h&&K===z?(it.lat=g,it.lng=h,it.origin=K,it.name=U,it.distance=s,e.mapping(it)):new this.googleGeocode(this).geocode({address:K,componentRestrictions:i,region:r},function(t){null!==t?(g=t.latitude,h=t.longitude,it.lat=g,it.lng=h,it.origin=K,it.name=U,it.distance=s,it.geocodeResult=t.geocodeResult,e.mapping(it)):e.notify(e.settings.addressErrorAlert)})):""!==U?(""===K&&delete it.origin,it.name=U,e.mapping(it)):!0===this.settings.autoGeocode&&(it.lat=g,it.lng=h,it.origin=K,it.name=U,it.distance=s,e.mapping(it)),void 0!==z&&K!==z&&this.paginationReset()},locationsSetup:function(t,e,s,i,n){this.writeDebug("locationsSetup",arguments),void 0===i||t.distance||(t.distance=this.geoCodeCalcCalcDistance(e,s,t.lat,t.lng,l.EarthRadius),"m"===this.settings.lengthUnit?t.altdistance=1.609344*parseFloat(t.distance):"km"===this.settings.lengthUnit&&(t.altdistance=parseFloat(t.distance)/1.609344)),this.coordinatesInRange(t.lat,t.lng)?!0===this.settings.maxDistance&&null!=n?t.distance<=n?Y.push(t):this.writeDebug("locationsSetup","location ignored because it is out of maxDistance: "+n,t):!0!==this.settings.maxDistance||!0!==this.settings.querystringParams||null==n||t.distance<=n?Y.push(t):this.writeDebug("locationsSetup","location ignored because it is out of maxDistance: "+n,t):this.writeDebug("locationsSetup","location ignored because coordinates out of range: "+n,t)},sorting:function(){this.writeDebug("sorting",arguments);var s=this,i=B("#"+s.settings.mapID),t=B("#"+s.settings.sortID);0!==t.length&&t.on("change."+nt,function(t){var e;t.stopPropagation(),!0===s.settings.pagination&&s.paginationChange(0),t=void 0!==B(this).find(":selected").attr("data-method")?B(this).find(":selected").attr("data-method"):"distance",e=B(this).val(),s.settings.sortBy.method=t,s.settings.sortBy.prop=e,s.settings.callbackSorting&&s.settings.callbackSorting.call(this,s.settings.sortBy),i.hasClass("bh-sl-map-open")&&s.mapping(it)})},order:function(){this.writeDebug("order",arguments);var e=this,s=B("#"+e.settings.mapID),t=B("#"+e.settings.orderID);0!==t.length&&t.on("change."+nt,function(t){t.stopPropagation(),!0===e.settings.pagination&&e.paginationChange(0),e.settings.sortBy.order=B(this).val(),e.settings.callbackOrder&&e.settings.callbackOrder.call(this,e.settings.order),s.hasClass("bh-sl-map-open")&&e.mapping(it)})},distanceFiltering:function(){this.writeDebug("distanceFiltering");var e=this;B("#"+this.settings.maxDistanceID).on("change."+nt,function(t){t.stopPropagation(),!0===e.settings.querystringParams&&(t=N.location.href,(t=new URL(t)).searchParams.set(e.settings.maxDistanceID,this.value),history.pushState?N.history.pushState({path:t.href},"",t.href):N.location.replace(t.href)),!0===B("#"+e.settings.mapID).hasClass("bh-sl-map-open")&&(g&&h?(e.settings.mapSettings.zoom=0,e.processForm()):e.mapping(it))})},countFilters:function(){this.writeDebug("countFilters");var t=0;if(!this.isEmptyObject(st))for(var e in st)st.hasOwnProperty(e)&&(t+=st[e].length);return t},_existingCheckedFilters:function(e){this.writeDebug("_existingCheckedFilters",arguments),B("#"+this.settings.taxonomyFilters[e]+" input[type=checkbox]").each(function(){var t;B(this).prop("checked")&&void 0!==(t=B(this).val())&&""!==t&&-1===st[e].indexOf(t)&&st[e].push(t)})},_existingSelectedFilters:function(e){this.writeDebug("_existingSelectedFilters",arguments),B("#"+this.settings.taxonomyFilters[e]+" select").each(function(){var t=B(this).val();void 0!==t&&""!==t&&-1===st[e].indexOf(t)&&(st[e]=[t])})},_existingRadioFilters:function(e){this.writeDebug("_existingRadioFilters",arguments),B("#"+this.settings.taxonomyFilters[e]+" input[type=radio]").each(function(){var t;B(this).prop("checked")&&void 0!==(t=B(this).val())&&""!==t&&-1===st[e].indexOf(t)&&(st[e]=[t])})},checkFilters:function(){for(var t in this.writeDebug("checkFilters"),this.settings.taxonomyFilters)this.settings.taxonomyFilters.hasOwnProperty(t)&&(this._existingCheckedFilters(t),this._existingSelectedFilters(t),this._existingRadioFilters(t))},selectQueryStringFilters:function(t,e){this.writeDebug("selectQueryStringFilters",arguments);var s=B("#"+this.settings.taxonomyFilters[t]);if(s.find('input[type="checkbox"]').length)for(var i=0;i ul").append(i)):s.getBounds().contains(e.position)&&(n.listSetup(e,0,0),i=a(void 0),B("."+n.settings.locationList+" > ul").append(i))}),B("."+this.settings.locationList+" ul li:even").css("background",this.settings.listColor1),B("."+this.settings.locationList+" ul li:odd").css("background",this.settings.listColor2)},dragSearch:function(t){this.writeDebug("dragSearch",arguments);var e=t.getCenter(),s=this,t=(this.settings.mapSettings.zoom=t.getZoom(),g=it.lat=e.lat(),h=it.lng=e.lng(),new this.reverseGoogleGeocode(this)),e=new google.maps.LatLng(it.lat,it.lng);t.geocode({latLng:e},function(t){null!==t?(it.origin=K=t.address,s.mapping(it)):s.notify(s.settings.addressErrorAlert)})},emptyResult:function(){this.writeDebug("emptyResult",arguments);var t=B("."+this.settings.locationList+" ul"),e=this.settings.mapSettings;this.map=new google.maps.Map(j.getElementById(this.settings.mapID),e),this.settings.callbackNoResults&&this.settings.callbackNoResults.call(this,this.map,e),t.empty(),e=B('
  • '+this.settings.noResultsTitle+'

    '+this.settings.noResultsDesc+"
  • ").hide().fadeIn(),t.append(e),t=g&&h?new google.maps.LatLng(g,h):new google.maps.LatLng(0,0),this.map.setCenter(t),V&&this.map.setZoom(V)},originMarker:function(t,e,s){var i;this.writeDebug("originMarker",arguments),!0===this.settings.originMarker&&void 0!==e&&(this.useLegacyMarkers()?(i=null!==this.settings.originMarkerImg?null===this.settings.originMarkerDim?this.markerImage(this.settings.originMarkerImg):this.markerImage(this.settings.originMarkerImg,this.settings.originMarkerDim.width,this.settings.originMarkerDim.height):{url:"https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png"},new google.maps.Marker({position:s,map:t,icon:i,draggable:!1})):(e=new google.maps.marker.PinElement({background:"#39b25e",borderColor:"#177d3d",glyphColor:"#177d3c"}),e=new google.maps.marker.AdvancedMarkerElement({content:e.element,draggable:!1,map:t,position:s,title:name}),null!==this.settings.originMarkerImg&&(i=j.createElement("img"),null===this.settings.originMarkerDim?i.src=this.settings.originMarkerImg:i=this.markerImage(this.settings.originMarkerImg,this.settings.originMarkerDim.width,this.settings.originMarkerDim.height),e.content=i)))},modalWindow:function(){var e;this.writeDebug("modalWindow"),!0===this.settings.modal&&((e=this).settings.callbackModalOpen&&e.settings.callbackModalOpen.call(this),B("."+e.settings.overlay).fadeIn(),B(j).on("click."+nt,"."+e.settings.closeIcon+", ."+e.settings.overlay,function(){e.modalClose()}),B(j).on("click."+nt,"."+e.settings.modalWindow,function(t){t.stopPropagation()}),B(j).on("keyup."+nt,function(t){27===t.keyCode&&e.modalClose()}))},openNearestLocation:function(t,e,s,i){var n,a;this.writeDebug("openNearestLocation",arguments),!0!==this.settings.openNearest||void 0===t||void 0===z||!0===this.settings.fullMapStart&&!0===W&&!1===this.settings.querystringParams||!0===this.settings.defaultLoc&&!0===W&&!1===this.settings.querystringParams||((n=this).settings.callbackNearestLoc&&n.settings.callbackNearestLoc.call(this,n.map,t,e,s,i),t=t.hasOwnProperty("markerid")?t.markerid:0,a=et[t],n.createInfowindow(a,"left",e,s,i),a=B("."+n.settings.locationList),e=B("."+n.settings.locationList+" li[data-markerid="+t+"]"),B("."+n.settings.locationList+" li").removeClass("list-focus"),e.addClass("list-focus"),a.animate({scrollTop:e.offset().top-a.offset().top+a.scrollTop()}))},listClick:function(s,i,n,a){this.writeDebug("listClick",arguments);var o=this;B(j).on("click."+nt,"."+o.settings.locationList+" li",function(){var t=B(this).data("markerid"),e=et[t];o.settings.callbackListClick&&o.settings.callbackListClick.call(this,t,e,Y[t],s),o.useLegacyMarkers()?s.panTo(e.getPosition()):s.panTo(e.position);o.createInfowindow(e,"left",i,n,a),null!==o.settings.selectedMarkerImg&&o.changeSelectedMarker(e),B("."+o.settings.locationList+" li").removeClass("list-focus"),B("."+o.settings.locationList+" li[data-markerid="+t+"]").addClass("list-focus")}),B(j).on("click."+nt,"."+o.settings.locationList+" li a",function(t){t.stopPropagation()})},resultsTotalCount:function(t){this.writeDebug("resultsTotalCount",arguments);var e=B(".bh-sl-total-results");void 0===t||t<=0||0===e.length||e.text(t)},inlineDirections:function(e,s){var i;this.writeDebug("inlineDirections",arguments),!0===this.settings.inlineDirections&&void 0!==s&&(i=this,B(j).on("click."+nt,"."+i.settings.locationList+" li .loc-directions a",function(t){t.preventDefault();t=B(this).closest("li").attr("data-markerid");i.directionsRequest(s,parseInt(t),e),B(j).on("click."+nt,"."+i.settings.locationList+" .bh-sl-close-icon",function(){i.closeDirections()})}))},visibleMarkersList:function(t,e){var s;this.writeDebug("visibleMarkersList",arguments),!0===this.settings.visibleMarkersList&&(s=this,google.maps.event.addListenerOnce(t,"idle",function(){s.checkVisibleMarkers(e,t)}),google.maps.event.addListener(t,"center_changed",function(){s.checkVisibleMarkers(e,t)}),google.maps.event.addListener(t,"zoom_changed",function(){s.checkVisibleMarkers(e,t)}))},featuredDistanceRestriction:function(){this.writeDebug("featuredDistanceRestriction",arguments);var e=this;return X=B.grep(X,function(t){if(t.hasOwnProperty("distance"))return parseFloat(t.distance)<=parseFloat(e.settings.featuredDistance)})},featuredRestrictions:function(t){return this.writeDebug("featuredRestrictions",arguments),X=null!==this.settings.featuredDistance&&null!==this.settings.featuredDistance?this.featuredDistanceRestriction(t):X},mapping:function(e){this.writeDebug("mapping",arguments);var t,s,i,n,a,o,r=this,l=(this.isEmptyObject(e)||(t=e.lat,s=e.lng,i=e.geocodeResult,n=e.origin,o=e.page),!0===r.settings.pagination&&(Z=o=void 0!==o&&z===K?o:0),r.getQueryString("bhsl-page"));""!==l&&(o=Z=parseInt(l)-1),q=void 0===n&&!0===this.settings.nameSearch?r._getData():(a=new google.maps.LatLng(t,s),void 0!==z&&n===z&&void 0!==Q&&!0!==this.settings.pagination?(n=z,Q):r._getData(g,h,n,i,e)),null!==r.settings.taxonomyFilters&&r.hasEmptyObjectVals(st)&&r.checkFilters(),null!==r.settings.dataRaw?r.processData(e,a,q,o):q.done(function(t){r.processData(e,a,t,o)})},resetDisabledFilterVals:function(){for(var t in this.writeDebug("resetDisabledFilterVals"),this.settings.taxonomyFilters)if(this.settings.taxonomyFilters.hasOwnProperty(t))for(var e=0;er)&&p.notify(p.settings.distanceErrorAlert+r+" "+v);else{if(void 0===Y[0])throw p.emptyResult(),new Error("No locations found. Please check the dataLocation setting and path.");-1!==p.settings.distanceAlert&&Y[0].distance>p.settings.distanceAlert&&(void 0===Z||1===parseInt(Z))&&(p.notify(p.settings.distanceErrorAlert+p.settings.distanceAlert+" "+v),h=!0)}void 0!==Y[0]&&(d=Y[0])}if(!0===p.settings.featuredLocations&&(X=B.grep(Y,function(t){if(t.hasOwnProperty("featured"))return"true"===t.featured}),X=p.featuredRestrictions(t),tt=B.grep(Y,function(t){if(t.hasOwnProperty("featured"))return"true"!==t.featured}),Y=[],Y=X.concat(tt)),(!0!==W&&!1===p.settings.exclusiveFiltering||!0===p.settings.fullMapStart&&!1===p.settings.exclusiveFiltering||!0===p.settings.defaultLoc&&!1===p.settings.exclusiveFiltering)&&p.maybeDisableFilterOptions(),!0===p.settings.slideMap&&_.slideDown(),!0===p.settings.pagination&&p.paginationSetup(i),!0===p.settings.altDistanceNoResult&&d.distance>p.settings.distanceAlert)p.emptyResult();else if(p.isEmptyObject(Y)||"none"===Y[0].result)p.emptyResult();else{p.modalWindow(),H=-1===p.settings.storeLimit||Y.lengthY.length&&(c=p.settings.locationsPerPage-(g+c-Y.length)),Y=Y.slice(g,g+c),H=Y.length):(c=H,g=0),p.resultsTotalCount(Y.length),!0===p.settings.fullMapStart&&!0===W&&!0!==p.settings.querystringParams||0===p.settings.mapSettings.zoom||void 0===o||!0===h||!0===p.settings.maxDistance&&!1===W&&0p.settings.fullMapStartListLimit)for(var G=0;G li:even").css("background",p.settings.listColor1),B("."+p.settings.locationList+" ul > li:odd").css("background",p.settings.listColor2),p.visibleMarkersList(p.map,et),!0===p.settings.querystringParams&&(F=B("#"+p.settings.addressID),P=B("#"+p.settings.searchID),void 0!==it&&it.hasOwnProperty("origin")&&""===F.val()&&F.val(it.origin),void 0!==it)&&it.hasOwnProperty("name")&&""===P.val()&&P.val(it.name),!0===p.settings.modal&&p.settings.callbackModalReady&&p.settings.callbackModalReady.call(this,t),p.settings.callbackFilters&&p.settings.callbackFilters.call(this,st,t)}},writeDebug:function(){N.console&&this.settings.debug&&(Function.prototype.bind?this.writeDebug=Function.prototype.bind.call(console.log,console,"StoreLocator :"):this.writeDebug=function(){arguments[0]="StoreLocator : "+arguments[0],Function.prototype.apply.call(console.log,console,arguments)},this.writeDebug.apply(this,arguments))}}),B.fn[nt]=function(e){var s,i=arguments;return e===t||"object"==typeof e?this.each(function(){B.data(this,"plugin_"+nt)||B.data(this,"plugin_"+nt,new p(this,e))}):"string"==typeof e&&"_"!==e[0]&&"init"!==e?(this.each(function(){var t=B.data(this,"plugin_"+nt);t instanceof p&&"function"==typeof t[e]&&(s=t[e].apply(t,Array.prototype.slice.call(i,1))),"destroy"===e&&B.data(this,"plugin_"+nt,null)}),s!==t?s:this):void 0})}(jQuery,window,document); \ No newline at end of file diff --git a/dist/assets/js/plugins/storeLocator/templates/location-list-description.html b/dist/assets/js/plugins/storeLocator/templates/location-list-description.html index 951970f..ab1f455 100644 --- a/dist/assets/js/plugins/storeLocator/templates/location-list-description.html +++ b/dist/assets/js/plugins/storeLocator/templates/location-list-description.html @@ -18,7 +18,7 @@ {{#if distance}}
    {{distance}} {{length}}
    {{#if altdistance}}
    {{altdistance}} {{altlength}}
    {{/if}} - + {{/if}}
    diff --git a/dist/autocomplete-example.html b/dist/autocomplete-example.html index dc2150f..d94d30f 100644 --- a/dist/autocomplete-example.html +++ b/dist/autocomplete-example.html @@ -34,14 +34,16 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/autogeocode-example.html b/dist/autogeocode-example.html index 129754d..3249ebc 100755 --- a/dist/autogeocode-example.html +++ b/dist/autogeocode-example.html @@ -34,13 +34,17 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/bootstrap-example.html b/dist/bootstrap-example.html index 45dc6bc..0a2c3c4 100644 --- a/dist/bootstrap-example.html +++ b/dist/bootstrap-example.html @@ -48,23 +48,25 @@

    Using Chipotle as an Example

    - - - + + + - + diff --git a/dist/categories-example.html b/dist/categories-example.html index e5f8089..36a5d03 100644 --- a/dist/categories-example.html +++ b/dist/categories-example.html @@ -140,9 +140,9 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/category-markers-example.html b/dist/category-markers-example.html index 4b69cdb..306518c 100644 --- a/dist/category-markers-example.html +++ b/dist/category-markers-example.html @@ -34,9 +34,9 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/cluster-example.html b/dist/cluster-example.html index 8e7bf74..5df6df5 100644 --- a/dist/cluster-example.html +++ b/dist/cluster-example.html @@ -12,7 +12,7 @@
    @@ -34,16 +34,16 @@

    Using Chipotle as an Example

    - + - + + - + diff --git a/dist/fullmapstartblank-example.html b/dist/fullmapstartblank-example.html index 84796c7..7394d0e 100644 --- a/dist/fullmapstartblank-example.html +++ b/dist/fullmapstartblank-example.html @@ -34,9 +34,9 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/geocode.html b/dist/geocode.html index 4fdd06a..7068a87 100755 --- a/dist/geocode.html +++ b/dist/geocode.html @@ -36,8 +36,8 @@

    Simple geocoding form

    - - + + diff --git a/dist/index.html b/dist/index.html index fe9ec3c..01976b3 100755 --- a/dist/index.html +++ b/dist/index.html @@ -34,13 +34,16 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/infobubble-example.html b/dist/infobubble-example.html index 7f2ef27..319e823 100644 --- a/dist/infobubble-example.html +++ b/dist/infobubble-example.html @@ -34,10 +34,10 @@

    Using Chipotle as an Example

    - + - + + - + diff --git a/dist/json-example.html b/dist/json-example.html index 4e49ee2..3d70edb 100755 --- a/dist/json-example.html +++ b/dist/json-example.html @@ -34,18 +34,20 @@

    Using Chipotle as an Example

    - + - + - + diff --git a/dist/kml-example.html b/dist/kml-example.html index 1d3fc2a..c6bb566 100755 --- a/dist/kml-example.html +++ b/dist/kml-example.html @@ -34,18 +34,20 @@

    Using Chipotle as an Example

    - + - + - + diff --git a/dist/lazy-load-example.html b/dist/lazy-load-example.html index 66c3875..df72247 100644 --- a/dist/lazy-load-example.html +++ b/dist/lazy-load-example.html @@ -36,26 +36,28 @@

    Using Chipotle as an Example

    - + diff --git a/dist/length-unit-swap-example.html b/dist/length-unit-swap-example.html index c5daf96..a21613e 100644 --- a/dist/length-unit-swap-example.html +++ b/dist/length-unit-swap-example.html @@ -40,14 +40,17 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/maxdistance-example.html b/dist/maxdistance-example.html index 7df444e..59130bf 100755 --- a/dist/maxdistance-example.html +++ b/dist/maxdistance-example.html @@ -40,13 +40,17 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/modal-example.html b/dist/modal-example.html index d59dc66..c5d17a9 100755 --- a/dist/modal-example.html +++ b/dist/modal-example.html @@ -34,18 +34,20 @@

    Using Chipotle as an Example

    - + - + - + diff --git a/dist/namesearch-example.html b/dist/namesearch-example.html index ac3750a..d427962 100644 --- a/dist/namesearch-example.html +++ b/dist/namesearch-example.html @@ -38,13 +38,17 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/noform-example.html b/dist/noform-example.html index 1377442..dd2bedc 100755 --- a/dist/noform-example.html +++ b/dist/noform-example.html @@ -31,15 +31,19 @@

    Using Chipotle as an Example

    - + - + - + diff --git a/dist/pagination-example.html b/dist/pagination-example.html index d794a41..c82b04d 100644 --- a/dist/pagination-example.html +++ b/dist/pagination-example.html @@ -37,13 +37,17 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/query-string-example/submit.html b/dist/query-string-example/submit.html index d4bc38f..bc983c6 100644 --- a/dist/query-string-example/submit.html +++ b/dist/query-string-example/submit.html @@ -37,20 +37,22 @@

    Using Chipotle as an Example

    - + - + diff --git a/dist/rawdata-example.php b/dist/rawdata-example.php index 7936161..d1b38f3 100644 --- a/dist/rawdata-example.php +++ b/dist/rawdata-example.php @@ -63,15 +63,17 @@ - + - + diff --git a/dist/sort-example.html b/dist/sort-example.html index 2da60c3..aa23600 100644 --- a/dist/sort-example.html +++ b/dist/sort-example.html @@ -48,9 +48,9 @@

    Using Chipotle as an Example

    - + - + diff --git a/libs/markerclusterer/markerclusterer.js b/libs/markerclusterer/markerclusterer.js index e12dc55..9b8486c 100644 --- a/libs/markerclusterer/markerclusterer.js +++ b/libs/markerclusterer/markerclusterer.js @@ -1,1315 +1,2 @@ -// ==ClosureCompiler== -// @compilation_level ADVANCED_OPTIMIZATIONS -// @externs_url https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/maps/google_maps_api_v3.js -// ==/ClosureCompiler== - -/** - * @name MarkerClusterer for Google Maps v3 - * @version version 1.0 - * @author Luke Mahe - * @fileoverview - * The library creates and manages per-zoom-level clusters for large amounts of - * markers. - *
    - * This is a v3 implementation of the - * v2 MarkerClusterer. - */ - -/** - * @license - * Copyright 2010 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -/** - * A Marker Clusterer that clusters markers. - * - * @param {google.maps.Map} map The Google map to attach to. - * @param {Array.=} opt_markers Optional markers to add to - * the cluster. - * @param {Object=} opt_options support the following options: - * 'gridSize': (number) The grid size of a cluster in pixels. - * 'maxZoom': (number) The maximum zoom level that a marker can be part of a - * cluster. - * 'zoomOnClick': (boolean) Whether the default behaviour of clicking on a - * cluster is to zoom into it. - * 'averageCenter': (boolean) Whether the center of each cluster should be - * the average of all markers in the cluster. - * 'minimumClusterSize': (number) The minimum number of markers to be in a - * cluster before the markers are hidden and a count - * is shown. - * 'styles': (object) An object that has style properties: - * 'url': (string) The image url. - * 'height': (number) The image height. - * 'width': (number) The image width. - * 'anchor': (Array) The anchor position of the label text. - * 'textColor': (string) The text color. - * 'textSize': (number) The text size. - * 'backgroundPosition': (string) The position of the backgound x, y. - * 'iconAnchor': (Array) The anchor position of the icon x, y. - * @constructor - * @extends google.maps.OverlayView - */ -function MarkerClusterer(map, opt_markers, opt_options) { - // MarkerClusterer implements google.maps.OverlayView interface. We use the - // extend function to extend MarkerClusterer with google.maps.OverlayView - // because it might not always be available when the code is defined so we - // look for it at the last possible moment. If it doesn't exist now then - // there is no point going ahead :) - this.extend(MarkerClusterer, google.maps.OverlayView); - this.map_ = map; - - /** - * @type {Array.} - * @private - */ - this.markers_ = []; - - /** - * @type {Array.} - */ - this.clusters_ = []; - - this.sizes = [53, 56, 66, 78, 90]; - - /** - * @private - */ - this.styles_ = []; - - /** - * @type {boolean} - * @private - */ - this.ready_ = false; - - var options = opt_options || {}; - - /** - * @type {number} - * @private - */ - this.gridSize_ = options['gridSize'] || 60; - - /** - * @private - */ - this.minClusterSize_ = options['minimumClusterSize'] || 2; - - - /** - * @type {?number} - * @private - */ - this.maxZoom_ = options['maxZoom'] || null; - - this.styles_ = options['styles'] || []; - - /** - * @type {string} - * @private - */ - this.imagePath_ = options['imagePath'] || - this.MARKER_CLUSTER_IMAGE_PATH_; - - /** - * @type {string} - * @private - */ - this.imageExtension_ = options['imageExtension'] || - this.MARKER_CLUSTER_IMAGE_EXTENSION_; - - /** - * @type {boolean} - * @private - */ - this.zoomOnClick_ = true; - - if (options['zoomOnClick'] != undefined) { - this.zoomOnClick_ = options['zoomOnClick']; - } - - /** - * @type {boolean} - * @private - */ - this.averageCenter_ = false; - - if (options['averageCenter'] != undefined) { - this.averageCenter_ = options['averageCenter']; - } - - this.setupStyles_(); - - this.setMap(map); - - /** - * @type {number} - * @private - */ - this.prevZoom_ = this.map_.getZoom(); - - // Add the map event listeners - var that = this; - google.maps.event.addListener(this.map_, 'zoom_changed', function() { - var zoom = that.map_.getZoom(); - - if (that.prevZoom_ != zoom) { - that.prevZoom_ = zoom; - that.resetViewport(); - } - }); - - google.maps.event.addListener(this.map_, 'idle', function() { - that.redraw(); - }); - - // Finally, add the markers - if (opt_markers && opt_markers.length) { - this.addMarkers(opt_markers, false); - } -} - - -/** - * The marker cluster image path. - * - * @type {string} - * @private - */ -MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '../images/m'; - - -/** - * The marker cluster image path. - * - * @type {string} - * @private - */ -MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; - - -/** - * Extends a objects prototype by anothers. - * - * @param {Object} obj1 The object to be extended. - * @param {Object} obj2 The object to extend with. - * @return {Object} The new extended object. - * @ignore - */ -MarkerClusterer.prototype.extend = function(obj1, obj2) { - return (function(object) { - for (var property in object.prototype) { - this.prototype[property] = object.prototype[property]; - } - return this; - }).apply(obj1, [obj2]); -}; - - -/** - * Implementaion of the interface method. - * @ignore - */ -MarkerClusterer.prototype.onAdd = function() { - this.setReady_(true); -}; - -/** - * Implementaion of the interface method. - * @ignore - */ -MarkerClusterer.prototype.draw = function() {}; - -/** - * Sets up the styles object. - * - * @private - */ -MarkerClusterer.prototype.setupStyles_ = function() { - if (this.styles_.length) { - return; - } - - for (var i = 0, size; size = this.sizes[i]; i++) { - this.styles_.push({ - url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, - height: size, - width: size - }); - } -}; - -/** - * Fit the map to the bounds of the markers in the clusterer. - */ -MarkerClusterer.prototype.fitMapToMarkers = function() { - var markers = this.getMarkers(); - var bounds = new google.maps.LatLngBounds(); - for (var i = 0, marker; marker = markers[i]; i++) { - bounds.extend(marker.getPosition()); - } - - this.map_.fitBounds(bounds); -}; - - -/** - * Sets the styles. - * - * @param {Object} styles The style to set. - */ -MarkerClusterer.prototype.setStyles = function(styles) { - this.styles_ = styles; -}; - - -/** - * Gets the styles. - * - * @return {Object} The styles object. - */ -MarkerClusterer.prototype.getStyles = function() { - return this.styles_; -}; - - -/** - * Whether zoom on click is set. - * - * @return {boolean} True if zoomOnClick_ is set. - */ -MarkerClusterer.prototype.isZoomOnClick = function() { - return this.zoomOnClick_; -}; - -/** - * Whether average center is set. - * - * @return {boolean} True if averageCenter_ is set. - */ -MarkerClusterer.prototype.isAverageCenter = function() { - return this.averageCenter_; -}; - - -/** - * Returns the array of markers in the clusterer. - * - * @return {Array.} The markers. - */ -MarkerClusterer.prototype.getMarkers = function() { - return this.markers_; -}; - - -/** - * Returns the number of markers in the clusterer - * - * @return {Number} The number of markers. - */ -MarkerClusterer.prototype.getTotalMarkers = function() { - return this.markers_.length; -}; - - -/** - * Sets the max zoom for the clusterer. - * - * @param {number} maxZoom The max zoom level. - */ -MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { - this.maxZoom_ = maxZoom; -}; - - -/** - * Gets the max zoom for the clusterer. - * - * @return {number} The max zoom level. - */ -MarkerClusterer.prototype.getMaxZoom = function() { - return this.maxZoom_; -}; - - -/** - * The function for calculating the cluster icon image. - * - * @param {Array.} markers The markers in the clusterer. - * @param {number} numStyles The number of styles available. - * @return {Object} A object properties: 'text' (string) and 'index' (number). - * @private - */ -MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { - var index = 0; - var count = markers.length; - var dv = count; - while (dv !== 0) { - dv = parseInt(dv / 10, 10); - index++; - } - - index = Math.min(index, numStyles); - return { - text: count, - index: index - }; -}; - - -/** - * Set the calculator function. - * - * @param {function(Array, number)} calculator The function to set as the - * calculator. The function should return a object properties: - * 'text' (string) and 'index' (number). - * - */ -MarkerClusterer.prototype.setCalculator = function(calculator) { - this.calculator_ = calculator; -}; - - -/** - * Get the calculator function. - * - * @return {function(Array, number)} the calculator function. - */ -MarkerClusterer.prototype.getCalculator = function() { - return this.calculator_; -}; - - -/** - * Add an array of markers to the clusterer. - * - * @param {Array.} markers The markers to add. - * @param {boolean=} opt_nodraw Whether to redraw the clusters. - */ -MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { - for (var i = 0, marker; marker = markers[i]; i++) { - this.pushMarkerTo_(marker); - } - if (!opt_nodraw) { - this.redraw(); - } -}; - - -/** - * Pushes a marker to the clusterer. - * - * @param {google.maps.Marker} marker The marker to add. - * @private - */ -MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { - marker.isAdded = false; - if (marker['draggable']) { - // If the marker is draggable add a listener so we update the clusters on - // the drag end. - var that = this; - google.maps.event.addListener(marker, 'dragend', function() { - marker.isAdded = false; - that.repaint(); - }); - } - this.markers_.push(marker); -}; - - -/** - * Adds a marker to the clusterer and redraws if needed. - * - * @param {google.maps.Marker} marker The marker to add. - * @param {boolean=} opt_nodraw Whether to redraw the clusters. - */ -MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { - this.pushMarkerTo_(marker); - if (!opt_nodraw) { - this.redraw(); - } -}; - - -/** - * Removes a marker and returns true if removed, false if not - * - * @param {google.maps.Marker} marker The marker to remove - * @return {boolean} Whether the marker was removed or not - * @private - */ -MarkerClusterer.prototype.removeMarker_ = function(marker) { - var index = -1; - if (this.markers_.indexOf) { - index = this.markers_.indexOf(marker); - } else { - for (var i = 0, m; m = this.markers_[i]; i++) { - if (m == marker) { - index = i; - break; - } - } - } - - if (index == -1) { - // Marker is not in our list of markers. - return false; - } - - marker.setMap(null); - - this.markers_.splice(index, 1); - - return true; -}; - - -/** - * Remove a marker from the cluster. - * - * @param {google.maps.Marker} marker The marker to remove. - * @param {boolean=} opt_nodraw Optional boolean to force no redraw. - * @return {boolean} True if the marker was removed. - */ -MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { - var removed = this.removeMarker_(marker); - - if (!opt_nodraw && removed) { - this.resetViewport(); - this.redraw(); - return true; - } else { - return false; - } -}; - - -/** - * Removes an array of markers from the cluster. - * - * @param {Array.} markers The markers to remove. - * @param {boolean=} opt_nodraw Optional boolean to force no redraw. - */ -MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { - var removed = false; - - for (var i = 0, marker; marker = markers[i]; i++) { - var r = this.removeMarker_(marker); - removed = removed || r; - } - - if (!opt_nodraw && removed) { - this.resetViewport(); - this.redraw(); - return true; - } -}; - - -/** - * Sets the clusterer's ready state. - * - * @param {boolean} ready The state. - * @private - */ -MarkerClusterer.prototype.setReady_ = function(ready) { - if (!this.ready_) { - this.ready_ = ready; - this.createClusters_(); - } -}; - - -/** - * Returns the number of clusters in the clusterer. - * - * @return {number} The number of clusters. - */ -MarkerClusterer.prototype.getTotalClusters = function() { - return this.clusters_.length; -}; - - -/** - * Returns the google map that the clusterer is associated with. - * - * @return {google.maps.Map} The map. - */ -MarkerClusterer.prototype.getMap = function() { - return this.map_; -}; - - -/** - * Sets the google map that the clusterer is associated with. - * - * @param {google.maps.Map} map The map. - */ -MarkerClusterer.prototype.setMap = function(map) { - this.map_ = map; -}; - - -/** - * Returns the size of the grid. - * - * @return {number} The grid size. - */ -MarkerClusterer.prototype.getGridSize = function() { - return this.gridSize_; -}; - - -/** - * Sets the size of the grid. - * - * @param {number} size The grid size. - */ -MarkerClusterer.prototype.setGridSize = function(size) { - this.gridSize_ = size; -}; - - -/** - * Returns the min cluster size. - * - * @return {number} The grid size. - */ -MarkerClusterer.prototype.getMinClusterSize = function() { - return this.minClusterSize_; -}; - -/** - * Sets the min cluster size. - * - * @param {number} size The grid size. - */ -MarkerClusterer.prototype.setMinClusterSize = function(size) { - this.minClusterSize_ = size; -}; - - -/** - * Extends a bounds object by the grid size. - * - * @param {google.maps.LatLngBounds} bounds The bounds to extend. - * @return {google.maps.LatLngBounds} The extended bounds. - */ -MarkerClusterer.prototype.getExtendedBounds = function(bounds) { - var projection = this.getProjection(); - - // Turn the bounds into latlng. - var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), - bounds.getNorthEast().lng()); - var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), - bounds.getSouthWest().lng()); - - // Convert the points to pixels and the extend out by the grid size. - var trPix = projection.fromLatLngToDivPixel(tr); - trPix.x += this.gridSize_; - trPix.y -= this.gridSize_; - - var blPix = projection.fromLatLngToDivPixel(bl); - blPix.x -= this.gridSize_; - blPix.y += this.gridSize_; - - // Convert the pixel points back to LatLng - var ne = projection.fromDivPixelToLatLng(trPix); - var sw = projection.fromDivPixelToLatLng(blPix); - - // Extend the bounds to contain the new bounds. - bounds.extend(ne); - bounds.extend(sw); - - return bounds; -}; - - -/** - * Determins if a marker is contained in a bounds. - * - * @param {google.maps.Marker} marker The marker to check. - * @param {google.maps.LatLngBounds} bounds The bounds to check against. - * @return {boolean} True if the marker is in the bounds. - * @private - */ -MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { - return bounds.contains(marker.getPosition()); -}; - - -/** - * Clears all clusters and markers from the clusterer. - */ -MarkerClusterer.prototype.clearMarkers = function() { - this.resetViewport(true); - - // Set the markers a empty array. - this.markers_ = []; -}; - - -/** - * Clears all existing clusters and recreates them. - * @param {boolean} opt_hide To also hide the marker. - */ -MarkerClusterer.prototype.resetViewport = function(opt_hide) { - // Remove all the clusters - for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { - cluster.remove(); - } - - // Reset the markers to not be added and to be invisible. - for (var i = 0, marker; marker = this.markers_[i]; i++) { - marker.isAdded = false; - if (opt_hide) { - marker.setMap(null); - } - } - - this.clusters_ = []; -}; - -/** - * - */ -MarkerClusterer.prototype.repaint = function() { - var oldClusters = this.clusters_.slice(); - this.clusters_.length = 0; - this.resetViewport(); - this.redraw(); - - // Remove the old clusters. - // Do it in a timeout so the other clusters have been drawn first. - window.setTimeout(function() { - for (var i = 0, cluster; cluster = oldClusters[i]; i++) { - cluster.remove(); - } - }, 0); -}; - - -/** - * Redraws the clusters. - */ -MarkerClusterer.prototype.redraw = function() { - this.createClusters_(); -}; - - -/** - * Calculates the distance between two latlng locations in km. - * @see http://www.movable-type.co.uk/scripts/latlong.html - * - * @param {google.maps.LatLng} p1 The first lat lng point. - * @param {google.maps.LatLng} p2 The second lat lng point. - * @return {number} The distance between the two points in km. - * @private - */ -MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { - if (!p1 || !p2) { - return 0; - } - - var R = 6371; // Radius of the Earth in km - var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; - var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; - var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + - Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * - Math.sin(dLon / 2) * Math.sin(dLon / 2); - var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - var d = R * c; - return d; -}; - - -/** - * Add a marker to a cluster, or creates a new cluster. - * - * @param {google.maps.Marker} marker The marker to add. - * @private - */ -MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { - var distance = 40000; // Some large number - var clusterToAddTo = null; - var pos = marker.getPosition(); - for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { - var center = cluster.getCenter(); - if (center) { - var d = this.distanceBetweenPoints_(center, marker.getPosition()); - if (d < distance) { - distance = d; - clusterToAddTo = cluster; - } - } - } - - if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { - clusterToAddTo.addMarker(marker); - } else { - var cluster = new Cluster(this); - cluster.addMarker(marker); - this.clusters_.push(cluster); - } -}; - - -/** - * Creates the clusters. - * - * @private - */ -MarkerClusterer.prototype.createClusters_ = function() { - if (!this.ready_) { - return; - } - - // Get our current map view bounds. - // Create a new bounds object so we don't affect the map. - var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), - this.map_.getBounds().getNorthEast()); - var bounds = this.getExtendedBounds(mapBounds); - - for (var i = 0, marker; marker = this.markers_[i]; i++) { - if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { - this.addToClosestCluster_(marker); - } - } -}; - - -/** - * A cluster that contains markers. - * - * @param {MarkerClusterer} markerClusterer The markerclusterer that this - * cluster is associated with. - * @constructor - * @ignore - */ -function Cluster(markerClusterer) { - this.markerClusterer_ = markerClusterer; - this.map_ = markerClusterer.getMap(); - this.gridSize_ = markerClusterer.getGridSize(); - this.minClusterSize_ = markerClusterer.getMinClusterSize(); - this.averageCenter_ = markerClusterer.isAverageCenter(); - this.center_ = null; - this.markers_ = []; - this.bounds_ = null; - this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), - markerClusterer.getGridSize()); -} - -/** - * Determins if a marker is already added to the cluster. - * - * @param {google.maps.Marker} marker The marker to check. - * @return {boolean} True if the marker is already added. - */ -Cluster.prototype.isMarkerAlreadyAdded = function(marker) { - if (this.markers_.indexOf) { - return this.markers_.indexOf(marker) != -1; - } else { - for (var i = 0, m; m = this.markers_[i]; i++) { - if (m == marker) { - return true; - } - } - } - return false; -}; - - -/** - * Add a marker the cluster. - * - * @param {google.maps.Marker} marker The marker to add. - * @return {boolean} True if the marker was added. - */ -Cluster.prototype.addMarker = function(marker) { - if (this.isMarkerAlreadyAdded(marker)) { - return false; - } - - if (!this.center_) { - this.center_ = marker.getPosition(); - this.calculateBounds_(); - } else { - if (this.averageCenter_) { - var l = this.markers_.length + 1; - var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; - var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; - this.center_ = new google.maps.LatLng(lat, lng); - this.calculateBounds_(); - } - } - - marker.isAdded = true; - this.markers_.push(marker); - - var len = this.markers_.length; - if (len < this.minClusterSize_ && marker.getMap() != this.map_) { - // Min cluster size not reached so show the marker. - marker.setMap(this.map_); - } - - if (len == this.minClusterSize_) { - // Hide the markers that were showing. - for (var i = 0; i < len; i++) { - this.markers_[i].setMap(null); - } - } - - if (len >= this.minClusterSize_) { - marker.setMap(null); - } - - this.updateIcon(); - return true; -}; - - -/** - * Returns the marker clusterer that the cluster is associated with. - * - * @return {MarkerClusterer} The associated marker clusterer. - */ -Cluster.prototype.getMarkerClusterer = function() { - return this.markerClusterer_; -}; - - -/** - * Returns the bounds of the cluster. - * - * @return {google.maps.LatLngBounds} the cluster bounds. - */ -Cluster.prototype.getBounds = function() { - var bounds = new google.maps.LatLngBounds(this.center_, this.center_); - var markers = this.getMarkers(); - for (var i = 0, marker; marker = markers[i]; i++) { - bounds.extend(marker.getPosition()); - } - return bounds; -}; - - -/** - * Removes the cluster - */ -Cluster.prototype.remove = function() { - this.clusterIcon_.remove(); - this.markers_.length = 0; - delete this.markers_; -}; - - -/** - * Returns the center of the cluster. - * - * @return {number} The cluster center. - */ -Cluster.prototype.getSize = function() { - return this.markers_.length; -}; - - -/** - * Returns the center of the cluster. - * - * @return {Array.} The cluster center. - */ -Cluster.prototype.getMarkers = function() { - return this.markers_; -}; - - -/** - * Returns the center of the cluster. - * - * @return {google.maps.LatLng} The cluster center. - */ -Cluster.prototype.getCenter = function() { - return this.center_; -}; - - -/** - * Calculated the extended bounds of the cluster with the grid. - * - * @private - */ -Cluster.prototype.calculateBounds_ = function() { - var bounds = new google.maps.LatLngBounds(this.center_, this.center_); - this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); -}; - - -/** - * Determines if a marker lies in the clusters bounds. - * - * @param {google.maps.Marker} marker The marker to check. - * @return {boolean} True if the marker lies in the bounds. - */ -Cluster.prototype.isMarkerInClusterBounds = function(marker) { - return this.bounds_.contains(marker.getPosition()); -}; - - -/** - * Returns the map that the cluster is associated with. - * - * @return {google.maps.Map} The map. - */ -Cluster.prototype.getMap = function() { - return this.map_; -}; - - -/** - * Updates the cluster icon - */ -Cluster.prototype.updateIcon = function() { - var zoom = this.map_.getZoom(); - var mz = this.markerClusterer_.getMaxZoom(); - - if (mz && zoom > mz) { - // The zoom is greater than our max zoom so show all the markers in cluster. - for (var i = 0, marker; marker = this.markers_[i]; i++) { - marker.setMap(this.map_); - } - return; - } - - if (this.markers_.length < this.minClusterSize_) { - // Min cluster size not yet reached. - this.clusterIcon_.hide(); - return; - } - - var numStyles = this.markerClusterer_.getStyles().length; - var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); - this.clusterIcon_.setCenter(this.center_); - this.clusterIcon_.setSums(sums); - this.clusterIcon_.show(); -}; - - -/** - * A cluster icon - * - * @param {Cluster} cluster The cluster to be associated with. - * @param {Object} styles An object that has style properties: - * 'url': (string) The image url. - * 'height': (number) The image height. - * 'width': (number) The image width. - * 'anchor': (Array) The anchor position of the label text. - * 'textColor': (string) The text color. - * 'textSize': (number) The text size. - * 'backgroundPosition: (string) The background postition x, y. - * @param {number=} opt_padding Optional padding to apply to the cluster icon. - * @constructor - * @extends google.maps.OverlayView - * @ignore - */ -function ClusterIcon(cluster, styles, opt_padding) { - cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); - - this.styles_ = styles; - this.padding_ = opt_padding || 0; - this.cluster_ = cluster; - this.center_ = null; - this.map_ = cluster.getMap(); - this.div_ = null; - this.sums_ = null; - this.visible_ = false; - - this.setMap(this.map_); -} - - -/** - * Triggers the clusterclick event and zoom's if the option is set. - * - * @param {google.maps.MouseEvent} event The event to propagate - */ -ClusterIcon.prototype.triggerClusterClick = function(event) { - var markerClusterer = this.cluster_.getMarkerClusterer(); - - // Trigger the clusterclick event. - google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_, event); - - if (markerClusterer.isZoomOnClick()) { - // Zoom into the cluster. - this.map_.fitBounds(this.cluster_.getBounds()); - } -}; - - -/** - * Adding the cluster icon to the dom. - * @ignore - */ -ClusterIcon.prototype.onAdd = function() { - this.div_ = document.createElement('DIV'); - if (this.visible_) { - var pos = this.getPosFromLatLng_(this.center_); - this.div_.style.cssText = this.createCss(pos); - this.div_.innerHTML = this.sums_.text; - } - - var panes = this.getPanes(); - panes.overlayMouseTarget.appendChild(this.div_); - - var that = this; - var isDragging = false; - this.div_.addEventListener('click', function(event) { - // Only perform click when not preceded by a drag - if (!isDragging) { - that.triggerClusterClick(event); - } - }); - this.div_.addEventListener('mousedown', function() { - isDragging = false; - }); - this.div_.addEventListener('mousemove', function() { - isDragging = true; - }); -}; - - -/** - * Returns the position to place the div dending on the latlng. - * - * @param {google.maps.LatLng} latlng The position in latlng. - * @return {google.maps.Point} The position in pixels. - * @private - */ -ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { - var pos = this.getProjection().fromLatLngToDivPixel(latlng); - - if (typeof this.iconAnchor_ === 'object' && this.iconAnchor_.length === 2) { - pos.x -= this.iconAnchor_[0]; - pos.y -= this.iconAnchor_[1]; - } else { - pos.x -= parseInt(this.width_ / 2, 10); - pos.y -= parseInt(this.height_ / 2, 10); - } - return pos; -}; - - -/** - * Draw the icon. - * @ignore - */ -ClusterIcon.prototype.draw = function() { - if (this.visible_) { - var pos = this.getPosFromLatLng_(this.center_); - this.div_.style.top = pos.y + 'px'; - this.div_.style.left = pos.x + 'px'; - } -}; - - -/** - * Hide the icon. - */ -ClusterIcon.prototype.hide = function() { - if (this.div_) { - this.div_.style.display = 'none'; - } - this.visible_ = false; -}; - - -/** - * Position and show the icon. - */ -ClusterIcon.prototype.show = function() { - if (this.div_) { - var pos = this.getPosFromLatLng_(this.center_); - this.div_.style.cssText = this.createCss(pos); - this.div_.style.display = ''; - } - this.visible_ = true; -}; - - -/** - * Remove the icon from the map - */ -ClusterIcon.prototype.remove = function() { - this.setMap(null); -}; - - -/** - * Implementation of the onRemove interface. - * @ignore - */ -ClusterIcon.prototype.onRemove = function() { - if (this.div_ && this.div_.parentNode) { - this.hide(); - this.div_.parentNode.removeChild(this.div_); - this.div_ = null; - } -}; - - -/** - * Set the sums of the icon. - * - * @param {Object} sums The sums containing: - * 'text': (string) The text to display in the icon. - * 'index': (number) The style index of the icon. - */ -ClusterIcon.prototype.setSums = function(sums) { - this.sums_ = sums; - this.text_ = sums.text; - this.index_ = sums.index; - if (this.div_) { - this.div_.innerHTML = sums.text; - } - - this.useStyle(); -}; - - -/** - * Sets the icon to the the styles. - */ -ClusterIcon.prototype.useStyle = function() { - var index = Math.max(0, this.sums_.index - 1); - index = Math.min(this.styles_.length - 1, index); - var style = this.styles_[index]; - this.url_ = style['url']; - this.height_ = style['height']; - this.width_ = style['width']; - this.textColor_ = style['textColor']; - this.anchor_ = style['anchor']; - this.textSize_ = style['textSize']; - this.backgroundPosition_ = style['backgroundPosition']; - this.iconAnchor_ = style['iconAnchor']; -}; - - -/** - * Sets the center of the icon. - * - * @param {google.maps.LatLng} center The latlng to set as the center. - */ -ClusterIcon.prototype.setCenter = function(center) { - this.center_ = center; -}; - - -/** - * Create the css text based on the position of the icon. - * - * @param {google.maps.Point} pos The position. - * @return {string} The css style text. - */ -ClusterIcon.prototype.createCss = function(pos) { - var style = []; - style.push('background-image:url(' + this.url_ + ');'); - var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; - style.push('background-position:' + backgroundPosition + ';'); - - if (typeof this.anchor_ === 'object') { - if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && - this.anchor_[0] < this.height_) { - style.push('height:' + (this.height_ - this.anchor_[0]) + - 'px; padding-top:' + this.anchor_[0] + 'px;'); - } else if (typeof this.anchor_[0] === 'number' && this.anchor_[0] < 0 && - -this.anchor_[0] < this.height_) { - style.push('height:' + this.height_ + 'px; line-height:' + (this.height_ + this.anchor_[0]) + - 'px;'); - } else { - style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + - 'px;'); - } - if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && - this.anchor_[1] < this.width_) { - style.push('width:' + (this.width_ - this.anchor_[1]) + - 'px; padding-left:' + this.anchor_[1] + 'px;'); - } else { - style.push('width:' + this.width_ + 'px; text-align:center;'); - } - } else { - style.push('height:' + this.height_ + 'px; line-height:' + - this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); - } - - var txtColor = this.textColor_ ? this.textColor_ : 'black'; - var txtSize = this.textSize_ ? this.textSize_ : 11; - - style.push('cursor:pointer; top:' + pos.y + 'px; left:' + - pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + - txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); - return style.join(''); -}; - - -// Export Symbols for Closure -// If you are not going to compile with closure then you can remove the -// code below. -window['MarkerClusterer'] = MarkerClusterer; -MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker; -MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers; -MarkerClusterer.prototype['clearMarkers'] = - MarkerClusterer.prototype.clearMarkers; -MarkerClusterer.prototype['fitMapToMarkers'] = - MarkerClusterer.prototype.fitMapToMarkers; -MarkerClusterer.prototype['getCalculator'] = - MarkerClusterer.prototype.getCalculator; -MarkerClusterer.prototype['getGridSize'] = - MarkerClusterer.prototype.getGridSize; -MarkerClusterer.prototype['getExtendedBounds'] = - MarkerClusterer.prototype.getExtendedBounds; -MarkerClusterer.prototype['getMap'] = MarkerClusterer.prototype.getMap; -MarkerClusterer.prototype['getMarkers'] = MarkerClusterer.prototype.getMarkers; -MarkerClusterer.prototype['getMaxZoom'] = MarkerClusterer.prototype.getMaxZoom; -MarkerClusterer.prototype['getStyles'] = MarkerClusterer.prototype.getStyles; -MarkerClusterer.prototype['getTotalClusters'] = - MarkerClusterer.prototype.getTotalClusters; -MarkerClusterer.prototype['getTotalMarkers'] = - MarkerClusterer.prototype.getTotalMarkers; -MarkerClusterer.prototype['redraw'] = MarkerClusterer.prototype.redraw; -MarkerClusterer.prototype['removeMarker'] = - MarkerClusterer.prototype.removeMarker; -MarkerClusterer.prototype['removeMarkers'] = - MarkerClusterer.prototype.removeMarkers; -MarkerClusterer.prototype['resetViewport'] = - MarkerClusterer.prototype.resetViewport; -MarkerClusterer.prototype['repaint'] = - MarkerClusterer.prototype.repaint; -MarkerClusterer.prototype['setCalculator'] = - MarkerClusterer.prototype.setCalculator; -MarkerClusterer.prototype['setGridSize'] = - MarkerClusterer.prototype.setGridSize; -MarkerClusterer.prototype['setMaxZoom'] = - MarkerClusterer.prototype.setMaxZoom; -MarkerClusterer.prototype['onAdd'] = MarkerClusterer.prototype.onAdd; -MarkerClusterer.prototype['draw'] = MarkerClusterer.prototype.draw; - -Cluster.prototype['getCenter'] = Cluster.prototype.getCenter; -Cluster.prototype['getSize'] = Cluster.prototype.getSize; -Cluster.prototype['getMarkers'] = Cluster.prototype.getMarkers; - -ClusterIcon.prototype['onAdd'] = ClusterIcon.prototype.onAdd; -ClusterIcon.prototype['draw'] = ClusterIcon.prototype.draw; -ClusterIcon.prototype['onRemove'] = ClusterIcon.prototype.onRemove; +var markerClusterer=function(t){"use strict";function e(t,e){var s={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(s[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(s[r[o]]=t[r[o]])}return s}class s{static isAdvancedMarkerAvailable(t){return google.maps.marker&&!0===t.getMapCapabilities().isAdvancedMarkersAvailable}static isAdvancedMarker(t){return google.maps.marker&&t instanceof google.maps.marker.AdvancedMarkerElement}static setMap(t,e){this.isAdvancedMarker(t)?t.map=e:t.setMap(e)}static getPosition(t){if(this.isAdvancedMarker(t)){if(t.position){if(t.position instanceof google.maps.LatLng)return t.position;if(t.position.lat&&t.position.lng)return new google.maps.LatLng(t.position.lat,t.position.lng)}return new google.maps.LatLng(null)}return t.getPosition()}static getVisible(t){return!!this.isAdvancedMarker(t)||t.getVisible()}}class r{constructor(t){let{markers:e,position:s}=t;this.markers=e,s&&(s instanceof google.maps.LatLng?this._position=s:this._position=new google.maps.LatLng(s))}get bounds(){if(0===this.markers.length&&!this._position)return;const t=new google.maps.LatLngBounds(this._position,this._position);for(const e of this.markers)t.extend(s.getPosition(e));return t}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter((t=>s.getVisible(t))).length}push(t){this.markers.push(t)}delete(){this.marker&&(s.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}const o=(t,e,r,o)=>{const n=i(t.getBounds(),e,o);return r.filter((t=>n.contains(s.getPosition(t))))},i=(t,e,s)=>{const{northEast:r,southWest:o}=h(t,e),i=l({northEast:r,southWest:o},s);return c(i,e)},n=(t,e,s)=>{const r=i(t,e,s),o=r.getNorthEast(),n=r.getSouthWest();return[n.lng(),n.lat(),o.lng(),o.lat()]},a=(t,e)=>{const s=(e.lat-t.lat)*Math.PI/180,r=(e.lng-t.lng)*Math.PI/180,o=Math.sin(s/2),i=Math.sin(r/2),n=o*o+Math.cos(t.lat*Math.PI/180)*Math.cos(e.lat*Math.PI/180)*i*i;return 6371*(2*Math.atan2(Math.sqrt(n),Math.sqrt(1-n)))},h=(t,e)=>({northEast:e.fromLatLngToDivPixel(t.getNorthEast()),southWest:e.fromLatLngToDivPixel(t.getSouthWest())}),l=(t,e)=>{let{northEast:s,southWest:r}=t;return s.x+=e,s.y-=e,r.x-=e,r.y+=e,{northEast:s,southWest:r}},c=(t,e)=>{let{northEast:s,southWest:r}=t;const o=e.fromDivPixelToLatLng(r),i=e.fromDivPixelToLatLng(s);return new google.maps.LatLngBounds(o,i)};class u{constructor(t){let{maxZoom:e=16}=t;this.maxZoom=e}noop(t){let{markers:e}=t;return m(e)}}class p extends u{constructor(t){var{viewportPadding:s=60}=t;super(e(t,["viewportPadding"])),this.viewportPadding=60,this.viewportPadding=s}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return s.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:!1}:{clusters:this.cluster({markers:o(s,r,e,this.viewportPadding),map:s,mapCanvasProjection:r})}}}const m=t=>t.map((t=>new r({position:s.getPosition(t),markers:[t]})));function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var g=function t(e,s){if(e===s)return!0;if(e&&s&&"object"==typeof e&&"object"==typeof s){if(e.constructor!==s.constructor)return!1;var r,o,i;if(Array.isArray(e)){if((r=e.length)!=s.length)return!1;for(o=r;0!=o--;)if(!t(e[o],s[o]))return!1;return!0}if(e.constructor===RegExp)return e.source===s.source&&e.flags===s.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===s.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===s.toString();if((r=(i=Object.keys(e)).length)!==Object.keys(s).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(s,i[o]))return!1;for(o=r;0!=o--;){var n=i[o];if(!t(e[n],s[n]))return!1}return!0}return e!=e&&s!=s},f=d(g);const k=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class w{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");const[e,s]=new Uint8Array(t,0,2);if(219!==e)throw new Error("Data does not appear to be in a KDBush format.");const r=s>>4;if(1!==r)throw new Error(`Got v${r} data when expected v1.`);const o=k[15&s];if(!o)throw new Error("Unrecognized array type.");const[i]=new Uint16Array(t,2,1),[n]=new Uint32Array(t,4,1);return new w(n,i,o,t)}constructor(t,e=64,s=Float64Array,r){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+e,2),65535),this.ArrayType=s,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;const o=k.indexOf(this.ArrayType),i=2*t*this.ArrayType.BYTES_PER_ELEMENT,n=t*this.IndexArrayType.BYTES_PER_ELEMENT,a=(8-n%8)%8;if(o<0)throw new Error(`Unexpected typed array class: ${s}.`);r&&r instanceof ArrayBuffer?(this.data=r,this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+n+a,2*t),this._pos=2*t,this._finished=!0):(this.data=new ArrayBuffer(8+i+n+a),this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+n+a,2*t),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,16+o]),new Uint16Array(this.data,2,1)[0]=e,new Uint32Array(this.data,4,1)[0]=t)}add(t,e){const s=this._pos>>1;return this.ids[s]=s,this.coords[this._pos++]=t,this.coords[this._pos++]=e,s}finish(){const t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return y(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,e,s,r){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:o,coords:i,nodeSize:n}=this,a=[0,o.length-1,0],h=[];for(;a.length;){const l=a.pop()||0,c=a.pop()||0,u=a.pop()||0;if(c-u<=n){for(let n=u;n<=c;n++){const a=i[2*n],l=i[2*n+1];a>=t&&a<=s&&l>=e&&l<=r&&h.push(o[n])}continue}const p=u+c>>1,m=i[2*p],d=i[2*p+1];m>=t&&m<=s&&d>=e&&d<=r&&h.push(o[p]),(0===l?t<=m:e<=d)&&(a.push(u),a.push(p-1),a.push(1-l)),(0===l?s>=m:r>=d)&&(a.push(p+1),a.push(c),a.push(1-l))}return h}within(t,e,s){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:r,coords:o,nodeSize:i}=this,n=[0,r.length-1,0],a=[],h=s*s;for(;n.length;){const l=n.pop()||0,c=n.pop()||0,u=n.pop()||0;if(c-u<=i){for(let s=u;s<=c;s++)C(o[2*s],o[2*s+1],t,e)<=h&&a.push(r[s]);continue}const p=u+c>>1,m=o[2*p],d=o[2*p+1];C(m,d,t,e)<=h&&a.push(r[p]),(0===l?t-s<=m:e-s<=d)&&(n.push(u),n.push(p-1),n.push(1-l)),(0===l?t+s>=m:e+s>=d)&&(n.push(p+1),n.push(c),n.push(1-l))}return a}}function y(t,e,s,r,o,i){if(o-r<=s)return;const n=r+o>>1;M(t,e,n,r,o,i),y(t,e,s,r,n-1,1-i),y(t,e,s,n+1,o,1-i)}function M(t,e,s,r,o,i){for(;o>r;){if(o-r>600){const n=o-r+1,a=s-r+1,h=Math.log(n),l=.5*Math.exp(2*h/3),c=.5*Math.sqrt(h*l*(n-l)/n)*(a-n/2<0?-1:1);M(t,e,s,Math.max(r,Math.floor(s-a*l/n+c)),Math.min(o,Math.floor(s+(n-a)*l/n+c)),i)}const n=e[2*s+i];let a=r,h=o;for(v(t,e,r,s),e[2*o+i]>n&&v(t,e,r,o);an;)h--}e[2*r+i]===n?v(t,e,r,h):(h++,v(t,e,h,o)),h<=s&&(r=h+1),s<=h&&(o=h-1)}}function v(t,e,s,r){x(t,s,r),x(e,2*s,2*r),x(e,2*s+1,2*r+1)}function x(t,e,s){const r=t[e];t[e]=t[s],t[s]=r}function C(t,e,s,r){const o=t-s,i=e-r;return o*o+i*i}const P={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:t=>t},_=Math.fround||(E=new Float32Array(1),t=>(E[0]=+t,E[0]));var E;const A=3,b=5,L=6;class O{constructor(t){this.options=Object.assign(Object.create(P),t),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(t){const{log:e,minZoom:s,maxZoom:r}=this.options;e&&console.time("total time");const o=`prepare ${t.length} points`;e&&console.time(o),this.points=t;const i=[];for(let e=0;e=s;t--){const s=+Date.now();n=this.trees[t]=this._createTree(this._cluster(n,t)),e&&console.log("z%d: %d clusters in %dms",t,n.numItems,+Date.now()-s)}return e&&console.timeEnd("total time"),this}getClusters(t,e){let s=((t[0]+180)%360+360)%360-180;const r=Math.max(-90,Math.min(90,t[1]));let o=180===t[2]?180:((t[2]+180)%360+360)%360-180;const i=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)s=-180,o=180;else if(s>o){const t=this.getClusters([s,r,180,i],e),n=this.getClusters([-180,r,o,i],e);return t.concat(n)}const n=this.trees[this._limitZoom(e)],a=n.range(T(s),j(i),T(o),j(r)),h=n.data,l=[];for(const t of a){const e=this.stride*t;l.push(h[e+b]>1?Z(h,e,this.clusterProps):this.points[h[e+A]])}return l}getChildren(t){const e=this._getOriginId(t),s=this._getOriginZoom(t),r="No cluster with the specified id.",o=this.trees[s];if(!o)throw new Error(r);const i=o.data;if(e*this.stride>=i.length)throw new Error(r);const n=this.options.radius/(this.options.extent*Math.pow(2,s-1)),a=i[e*this.stride],h=i[e*this.stride+1],l=o.within(a,h,n),c=[];for(const e of l){const s=e*this.stride;i[s+4]===t&&c.push(i[s+b]>1?Z(i,s,this.clusterProps):this.points[i[s+A]])}if(0===c.length)throw new Error(r);return c}getLeaves(t,e,s){e=e||10,s=s||0;const r=[];return this._appendLeaves(r,t,e,s,0),r}getTile(t,e,s){const r=this.trees[this._limitZoom(t)],o=Math.pow(2,t),{extent:i,radius:n}=this.options,a=n/i,h=(s-a)/o,l=(s+1+a)/o,c={features:[]};return this._addTileFeatures(r.range((e-a)/o,h,(e+1+a)/o,l),r.data,e,s,o,c),0===e&&this._addTileFeatures(r.range(1-a/o,h,1,l),r.data,o,s,o,c),e===o-1&&this._addTileFeatures(r.range(0,h,a/o,l),r.data,-1,s,o,c),c.features.length?c:null}getClusterExpansionZoom(t){let e=this._getOriginZoom(t)-1;for(;e<=this.options.maxZoom;){const s=this.getChildren(t);if(e++,1!==s.length)break;t=s[0].properties.cluster_id}return e}_appendLeaves(t,e,s,r,o){const i=this.getChildren(e);for(const e of i){const i=e.properties;if(i&&i.cluster?o+i.point_count<=r?o+=i.point_count:o=this._appendLeaves(t,i.cluster_id,s,r,o):o1;let h,l,c;if(a)h=I(e,t,this.clusterProps),l=e[t],c=e[t+1];else{const s=this.points[e[t+A]];h=s.properties;const[r,o]=s.geometry.coordinates;l=T(r),c=j(o)}const u={type:1,geometry:[[Math.round(this.options.extent*(l*o-s)),Math.round(this.options.extent*(c*o-r))]],tags:h};let p;p=a||this.options.generateId?e[t+A]:this.points[e[t+A]].id,void 0!==p&&(u.id=p),i.features.push(u)}}_limitZoom(t){return Math.max(this.options.minZoom,Math.min(Math.floor(+t),this.options.maxZoom+1))}_cluster(t,e){const{radius:s,extent:r,reduce:o,minPoints:i}=this.options,n=s/(r*Math.pow(2,e)),a=t.data,h=[],l=this.stride;for(let s=0;s<=e)continue;a[s+2]=e;const r=a[s],c=a[s+1],u=t.within(a[s],a[s+1],n),p=a[s+b];let m=p;for(const t of u){const s=t*l;a[s+2]>e&&(m+=a[s+b])}if(m>p&&m>=i){let t,i=r*p,n=c*p,d=-1;const g=((s/l|0)<<5)+(e+1)+this.points.length;for(const r of u){const h=r*l;if(a[h+2]<=e)continue;a[h+2]=e;const c=a[h+b];i+=a[h]*c,n+=a[h+1]*c,a[h+4]=g,o&&(t||(t=this._map(a,s,!0),d=this.clusterProps.length,this.clusterProps.push(t)),o(t,this._map(a,h)))}a[s+4]=g,h.push(i/m,n/m,1/0,g,-1,m),o&&h.push(d)}else{for(let t=0;t1)for(const t of u){const s=t*l;if(!(a[s+2]<=e)){a[s+2]=e;for(let t=0;t>5}_getOriginZoom(t){return(t-this.points.length)%32}_map(t,e,s){if(t[e+b]>1){const r=this.clusterProps[t[e+L]];return s?Object.assign({},r):r}const r=this.points[t[e+A]].properties,o=this.options.map(r);return s&&o===r?Object.assign({},o):o}}function Z(t,e,s){return{type:"Feature",id:t[e+A],properties:I(t,e,s),geometry:{type:"Point",coordinates:[(r=t[e],360*(r-.5)),S(t[e+1])]}};var r}function I(t,e,s){const r=t[e+b],o=r>=1e4?`${Math.round(r/1e3)}k`:r>=1e3?Math.round(r/100)/10+"k":r,i=t[e+L],n=-1===i?{}:Object.assign({},s[i]);return Object.assign(n,{cluster:!0,cluster_id:t[e+A],point_count:r,point_count_abbreviated:o})}function T(t){return t/360+.5}function j(t){const e=Math.sin(t*Math.PI/180),s=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return s<0?0:s>1?1:s}function S(t){const e=(180-360*t)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}class z extends u{constructor(t){var{maxZoom:s,radius:r=60}=t,o=e(t,["maxZoom","radius"]);super({maxZoom:s}),this.state={zoom:-1},this.superCluster=new O(Object.assign({maxZoom:this.maxZoom,radius:r},o))}calculate(t){let e=!1;const r={zoom:t.map.getZoom()};if(!f(t.markers,this.markers)){e=!0,this.markers=[...t.markers];const r=this.markers.map((t=>{const e=s.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}}));this.superCluster.load(r)}return e||(this.state.zoom<=this.maxZoom||r.zoom<=this.maxZoom)&&(e=!f(this.state,r)),this.state=r,e&&(this.clusters=this.cluster(t)),{clusters:this.clusters,changed:e}}cluster(t){let{map:e}=t;return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map((t=>this.transformCluster(t)))}transformCluster(t){let{geometry:{coordinates:[e,o]},properties:i}=t;if(i.cluster)return new r({markers:this.superCluster.getLeaves(i.cluster_id,1/0).map((t=>t.properties.marker)),position:{lat:o,lng:e}});const n=i.marker;return new r({markers:[n],position:s.getPosition(n)})}}class U{constructor(t,e){this.markers={sum:t.length};const s=e.map((t=>t.count)),r=s.reduce(((t,e)=>t+e),0);this.clusters={count:e.length,markers:{mean:r/e.length,sum:r,min:Math.min(...s),max:Math.max(...s)}}}}class B{render(t,e,r){let{count:o,position:i}=t;const n=`\n\n\n\n${o}\n`,a=`Cluster of ${o} markers`,h=Number(google.maps.Marker.MAX_ZINDEX)+o;if(s.isAdvancedMarkerAvailable(r)){const t=(new DOMParser).parseFromString(n,"image/svg+xml").documentElement;t.setAttribute("transform","translate(0 25)");const e={map:r,position:i,zIndex:h,title:a,content:t};return new google.maps.marker.AdvancedMarkerElement(e)}const l={position:i,zIndex:h,title:a,icon:{url:`data:image/svg+xml;base64,${btoa(n)}`,anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(l)}}class D{constructor(){!function(t,e){for(let s in e.prototype)t.prototype[s]=e.prototype[s]}(D,google.maps.OverlayView)}}var N;t.MarkerClustererEvents=void 0,(N=t.MarkerClustererEvents||(t.MarkerClustererEvents={})).CLUSTERING_BEGIN="clusteringbegin",N.CLUSTERING_END="clusteringend",N.CLUSTER_CLICK="click";const F=(t,e,s)=>{s.fitBounds(e.bounds)};return t.AbstractAlgorithm=u,t.AbstractViewportAlgorithm=p,t.Cluster=r,t.ClusterStats=U,t.DefaultRenderer=B,t.GridAlgorithm=class extends p{constructor(t){var{maxDistance:s=4e4,gridSize:r=40}=t;super(e(t,["maxDistance","gridSize"])),this.clusters=[],this.state={zoom:-1},this.maxDistance=s,this.gridSize=r}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;const i={zoom:s.getZoom()};let n=!1;return this.state.zoom>=this.maxZoom&&i.zoom>=this.maxZoom||(n=!f(this.state,i)),this.state=i,s.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:n}:{clusters:this.cluster({markers:o(s,r,e,this.viewportPadding),map:s,mapCanvasProjection:r})}}cluster(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return this.clusters=[],e.forEach((t=>{this.addToClosestCluster(t,s,r)})),this.clusters}addToClosestCluster(t,e,o){let n=this.maxDistance,h=null;for(let e=0;e{this.addMarker(t,!0)})),e||this.render()}removeMarker(t,e){const r=this.markers.indexOf(t);return-1!==r&&(s.setMap(t,null),this.markers.splice(r,1),e||this.render(),!0)}removeMarkers(t,e){let s=!1;return t.forEach((t=>{s=this.removeMarker(t,!0)||s})),s&&!e&&this.render(),s}clearMarkers(t){this.markers.length=0,t||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&e.getProjection()){google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTERING_BEGIN,this);const{clusters:r,changed:o}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});if(o||null==o){const t=new Set;for(const e of r)1==e.markers.length&&t.add(e.markers[0]);const e=[];for(const r of this.clusters)null!=r.marker&&(1==r.markers.length?t.has(r.marker)||s.setMap(r.marker,null):e.push(r.marker));this.clusters=r,this.renderClusters(),requestAnimationFrame((()=>e.forEach((t=>s.setMap(t,null)))))}google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach((t=>s.setMap(t,null))),this.clusters.forEach((t=>t.delete())),this.clusters=[]}renderClusters(){const e=new U(this.markers,this.clusters),r=this.getMap();this.clusters.forEach((o=>{1===o.markers.length?o.marker=o.markers[0]:(o.marker=this.renderer.render(o,e,r),o.markers.forEach((t=>s.setMap(t,null))),this.onClusterClick&&o.marker.addListener("click",(e=>{google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTER_CLICK,o),this.onClusterClick(e,o,r)}))),s.setMap(o.marker,r)}))}},t.MarkerUtils=s,t.NoopAlgorithm=class extends u{constructor(t){super(e(t,[]))}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return{clusters:this.cluster({markers:e,map:s,mapCanvasProjection:r}),changed:!1}}cluster(t){return this.noop(t)}},t.SuperClusterAlgorithm=z,t.SuperClusterViewportAlgorithm=class extends p{constructor(t){var{maxZoom:s,radius:r=60,viewportPadding:o=60}=t,i=e(t,["maxZoom","radius","viewportPadding"]);super({maxZoom:s,viewportPadding:o}),this.superCluster=new O(Object.assign({maxZoom:this.maxZoom,radius:r},i)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(t){const e={zoom:Math.round(t.map.getZoom()),view:n(t.map.getBounds(),t.mapCanvasProjection,this.viewportPadding)};let r=!f(this.state,e);if(!f(t.markers,this.markers)){r=!0,this.markers=[...t.markers];const e=this.markers.map((t=>{const e=s.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}}));this.superCluster.load(e)}return r&&(this.clusters=this.cluster(t),this.state=e),{clusters:this.clusters,changed:r}}cluster(t){let{map:e,mapCanvasProjection:s}=t;const r={zoom:Math.round(e.getZoom()),view:n(e.getBounds(),s,this.viewportPadding)};return this.superCluster.getClusters(r.view,r.zoom).map((t=>this.transformCluster(t)))}transformCluster(t){let{geometry:{coordinates:[e,o]},properties:i}=t;if(i.cluster)return new r({markers:this.superCluster.getLeaves(i.cluster_id,1/0).map((t=>t.properties.marker)),position:{lat:o,lng:e}});const n=i.marker;return new r({markers:[n],position:s.getPosition(n)})}},t.defaultOnClusterClickHandler=F,t.distanceBetweenPoints=a,t.extendBoundsToPaddedViewport=i,t.extendPixelBounds=l,t.filterMarkersToPaddedViewport=o,t.getPaddedViewport=n,t.noop=m,t.pixelBoundsToLatLngBounds=c,Object.defineProperty(t,"__esModule",{value:!0}),t}({}); +//# sourceMappingURL=index.min.js.map diff --git a/options.md b/options.md index cf225c0..32bfdd5 100644 --- a/options.md +++ b/options.md @@ -1,65 +1,66 @@ ## Standard settings -| Property | Default | Description | -|------------------------------|---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| ajaxData | null | Allows custom data to be sent with the AJAX request. Set the setting to an object with your properties and values. | -| altDistanceNoResult | false | Display no results message vs. all locations when closest location is further than distanceAlert setting. | -| apiKey | null | Set to your Google Maps API key when using Lazy Load setting. Value is unused if lazyLoadMap is false. | -| autoComplete | false | Set to true to enable Google Places autocomplete. Note the slight markup differences in the example file. | -| autoCompleteDisableListener | false | Disable the listener that immediately triggers a search when an auto complete location option is selected. | -| autoCompleteOptions | {} | Google Places autocomplete [options object](https://developers.google.com/maps/documentation/javascript/places-autocomplete#add_autocomplete). | -| autoGeocode | false | Set to true if you want to use the HTML5 geolocation API (good for mobile) to geocode the user's location. **SSL is required**. | -| bounceMarker | true | Deprecated - no longer applies. | -| catMarkers | null | Multiple replacement marker images based on categories object. Value should be array with image path followed by dimensions - ex value: catMarkers : {'Restaurant' : ['img/red-marker.svg', 32, 32]} | -| dataLocation | 'data/locations.json' | The path to the location data. | -| dataRaw | null | Accepts raw KML, XML, or JSON instead of using a remote file. | -| dataType | 'json' | The format of the data source. Accepted values include kml, xml, json, and jsonp. | -| debug | false | Set to true to enable console.log helper function that can be used for debugging. | -| defaultLat | null | If using defaultLoc, set this to the default location latitude. | -| defaultLng | null | If using defaultLoc, set this to the default location longitude. | -| defaultLoc | false | If true, the map will load with a default location immediately. Set slideMap to false if you want to use this. | -| disableAlphaMarkers | false | Disable displaying markers and location list indicators with alpha characters. | -| distanceAlert | 60 | Displays alert if there are no locations with 60 m/km of the user's location. Set to -1 to disable. | -| dragSearch | false | Set to true to perform a new search after the map is dragged. | -| exclusiveFiltering | false | Set to true to enable exclusive taxonomy filtering rather than the default inclusive. | -| exclusiveTax | null | Set to an array of taxonomies that should filter exclusively vs. inclusively. | -| featuredDistance | null | Restrict the featured locations from displaying by a certain distance (use number value). | -| featuredLocations | false | Set to true to enable featuring locations at the top of the location list (no matter the distance). Add featured=”true” to featured locations in your XML or JSON locations data. | -| fullMapStart | false | Set to true if you want to immediately show a map of all locations. The map will center and zoom automatically. | -| fullMapStartBlank | false | Set to a zoom integer if you want to immediately show a blank map without any locations. | -| fullMapStartListLimit | false | Set to a number to limit the number of items displayed in the location list with full map start. | -| infoBubble | null | InfoBubble settings object. [See example for available parameters](https://googlemaps.github.io/js-info-bubble/examples/example.html). Map and content parameters are set by default. | -| inlineDirections | false | Set to true to enable displaying directions within the app instead of an off-site link. | -| lazyLoadMap | false | Set to true to lazy load the Google Maps API script. Make sure to also set the apiKey setting and do not include the maps.google.com script manually. | -| lengthUnit | 'm' | The unit of length. Default is m for miles, change to km for kilometers. | -| listColor1 | '#ffffff' | Background color of the odd list elements. | -| listColor2 | '#eeeeee' | Background color of the even list elements. | -| loading | false | Set to true to display a loading animated gif next to the submit button. | -| locationsPerPage | 10 | If using pagination, the number of locations to display per page. | -| mapSettings | { zoom : 12, mapTypeId: google.maps.MapTypeId.ROADMAP } | Google maps settings object. Add all settings including zoom and map type if overriding. Set zoom to 0 to automatically center and zoom to show all display markers on the map | -| markerCluster | null | Marker Clusterer settings object. [See docs](https://googlemaps.github.io/js-marker-clusterer/docs/reference.html). | -| markerImg | null | Replacement marker image used for all locations | -| markerDim | null | Replacement marker dimensions object - ex value: { height: 20, width: 20 } | -| maxDistance | false | Set to true if you want to give users an option to limit the distance from their location to the markers. | -| modal | false | Shows the map container within a modal window. Set slideMap to false and this option to true to use. | -| nameAttribute | 'name' | If using nameSearch, the data attribute used for the location name in the data file. Supports one or multiple values separated by commas. | -| nameSearch | false | Set to true to allow searching for locations by name using separate searchID field. | -| noForm | false | Set to true if you aren't able to use form tags (ASP.net WebForms). | -| openNearest | false | Set to true to highlight the nearest location automatically after searching. | -| originMarker | false | Display a marker at the origin. | -| originMarkerDim | null | Replacement origin marker dimensions object - ex value: { height: 20, width: 20 } | -| originMarkerImg | null | Replacement origin marker image. | -| pagination | false | Set to true to enable displaying location results in multiple "pages." | -| querystringParams | false | Set to true to enable query string support for passing input variables from page to page. | -| selectedMarkerImg | null | Selected marker image. | -| selectedMarkerImgDim | null | Selected marker image dimensions object - ex value: { height: 20, width: 20 } | -| sessionStorage | false | Set to true to enable Window.sessionStorage for user's location when autoGeocode is enabled. | -| slideMap | true | First hides the map container and then uses jQuery’s slideDown method to reveal the map. | -| sortBy | null | Set to an object for custom sorting that accepts three properties: method ('alpha', 'date', or 'numeric'), order ('asc', or 'desc'), and prop (property in your data to sort by such as name, city, distance, etc.). | -| storeLimit | 26 | The number of closest locations displayed at one time. Set to -1 for unlimited. | -| taxonomyFilters | null | Filtering object that can be used to set up live filtering (see categories example). | -| visibleMarkersList | false | Set to true to have the location list only show data from markers that are visible on the map. | -| xmlElement | 'marker' | XML element used for locations (tag). | +| Property | Default | Description | +|------------------------------|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ajaxData | null | Allows custom data to be sent with the AJAX request. Set the setting to an object with your properties and values. | +| altDistanceNoResult | false | Display no results message vs. all locations when closest location is further than distanceAlert setting. | +| apiKey | null | Set to your Google Maps API key when using Lazy Load setting. Value is unused if lazyLoadMap is false. | +| autoComplete | false | Set to true to enable Google Places autocomplete. Note the slight markup differences in the example file. | +| autoCompleteDisableListener | false | Disable the listener that immediately triggers a search when an auto complete location option is selected. | +| autoCompleteOptions | {} | Google Places autocomplete [options object](https://developers.google.com/maps/documentation/javascript/places-autocomplete#add_autocomplete). | +| autoGeocode | false | Set to true if you want to use the HTML5 geolocation API (good for mobile) to geocode the user's location. **SSL is required**. | +| bounceMarker | true | Deprecated - no longer applies. | +| catMarkers | null | Multiple replacement marker images based on categories object. Value should be array with image path followed by dimensions - ex value: catMarkers : {'Restaurant' : ['img/red-marker.svg', 32, 32]} | +| dataLocation | 'data/locations.json' | The path to the location data. | +| dataRaw | null | Accepts raw KML, XML, or JSON instead of using a remote file. | +| dataType | 'json' | The format of the data source. Accepted values include kml, xml, json, and jsonp. | +| debug | false | Set to true to enable console.log helper function that can be used for debugging. | +| defaultLat | null | If using defaultLoc, set this to the default location latitude. | +| defaultLng | null | If using defaultLoc, set this to the default location longitude. | +| defaultLoc | false | If true, the map will load with a default location immediately. Set slideMap to false if you want to use this. | +| disableAlphaMarkers | false | Disable displaying markers and location list indicators with alpha characters. | +| distanceAlert | 60 | Displays alert if there are no locations with 60 m/km of the user's location. Set to -1 to disable. | +| dragSearch | false | Set to true to perform a new search after the map is dragged. | +| exclusiveFiltering | false | Set to true to enable exclusive taxonomy filtering rather than the default inclusive. | +| exclusiveTax | null | Set to an array of taxonomies that should filter exclusively vs. inclusively. | +| featuredDistance | null | Restrict the featured locations from displaying by a certain distance (use number value). | +| featuredLocations | false | Set to true to enable featuring locations at the top of the location list (no matter the distance). Add featured=”true” to featured locations in your XML or JSON locations data. | +| fullMapStart | false | Set to true if you want to immediately show a map of all locations. The map will center and zoom automatically. | +| fullMapStartBlank | false | Set to a zoom integer if you want to immediately show a blank map without any locations. | +| fullMapStartListLimit | false | Set to a number to limit the number of items displayed in the location list with full map start. | +| infoBubble | null | InfoBubble settings object. [See example for available parameters](https://googlemaps.github.io/js-info-bubble/examples/example.html). Map and content parameters are set by default. | +| inlineDirections | false | Set to true to enable displaying directions within the app instead of an off-site link. | +| lazyLoadMap | false | Set to true to lazy load the Google Maps API script. Make sure to also set the apiKey setting and do not include the maps.google.com script manually. | +| lengthUnit | 'm' | The unit of length. Default is m for miles, change to km for kilometers. | +| listColor1 | '#ffffff' | Background color of the odd list elements. | +| listColor2 | '#eeeeee' | Background color of the even list elements. | +| loading | false | Set to true to display a loading animated gif next to the submit button. | +| locationsPerPage | 10 | If using pagination, the number of locations to display per page. | +| mapSettings | { zoom : 12, mapTypeId: google.maps.MapTypeId.ROADMAP } | Google maps settings object. Add all settings including zoom and map type if overriding. Set zoom to 0 to automatically center and zoom to show all display markers on the map | +| mapSettingsID | '' | New Google Map ID used for map management and styling. Please refer to [Use Map IDs](https://developers.google.com/maps/documentation/get-map-id) and [Map ID with Styling](https://developers.google.com/maps/documentation/javascript/examples/map-id-style) in the Google API docs. | +| markerCluster | null | Additional Clusterer settings object. Markers and map are set by default - use this to set other parameters such as algorithm, renderer, etc. [See docs](https://github.com/googlemaps/js-markerclusterer?tab=readme-ov-file#migration). | +| markerImg | null | Replacement marker image used for all locations | +| markerDim | null | Replacement marker dimensions object - ex value: { height: 20, width: 20 } | +| maxDistance | false | Set to true if you want to give users an option to limit the distance from their location to the markers. | +| modal | false | Shows the map container within a modal window. Set slideMap to false and this option to true to use. | +| nameAttribute | 'name' | If using nameSearch, the data attribute used for the location name in the data file. Supports one or multiple values separated by commas. | +| nameSearch | false | Set to true to allow searching for locations by name using separate searchID field. | +| noForm | false | Set to true if you aren't able to use form tags (ASP.net WebForms). | +| openNearest | false | Set to true to highlight the nearest location automatically after searching. | +| originMarker | false | Display a marker at the origin. | +| originMarkerDim | null | Replacement origin marker dimensions object - ex value: { height: 20, width: 20 } | +| originMarkerImg | null | Replacement origin marker image. | +| pagination | false | Set to true to enable displaying location results in multiple "pages." | +| querystringParams | false | Set to true to enable query string support for passing input variables from page to page. | +| selectedMarkerImg | null | Selected marker image. | +| selectedMarkerImgDim | null | Selected marker image dimensions object - ex value: { height: 20, width: 20 } | +| sessionStorage | false | Set to true to enable Window.sessionStorage for user's location when autoGeocode is enabled. | +| slideMap | true | First hides the map container and then uses jQuery’s slideDown method to reveal the map. | +| sortBy | null | Set to an object for custom sorting that accepts three properties: method ('alpha', 'date', or 'numeric'), order ('asc', or 'desc'), and prop (property in your data to sort by such as name, city, distance, etc.). | +| storeLimit | 26 | The number of closest locations displayed at one time. Set to -1 for unlimited. | +| taxonomyFilters | null | Filtering object that can be used to set up live filtering (see categories example). | +| visibleMarkersList | false | Set to true to have the location list only show data from markers that are visible on the map. | +| xmlElement | 'marker' | XML element used for locations (tag). | ## HTML elements | Property | Default | Description | diff --git a/package-lock.json b/package-lock.json index 5a053c9..eb1502a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,764 +1,997 @@ { "name": "jquery-storelocator-plugin", - "version": "3.1.10", - "lockfileVersion": 1, + "version": "3.4.1", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { + "packages": { + "": { + "name": "jquery-storelocator-plugin", + "version": "3.4.1", + "license": "MIT", + "dependencies": { + "handlebars": ">=4.7.7", + "jquery": "^3.6.3" + }, + "devDependencies": { + "grunt": "~1.6.1", + "grunt-banner": "~0.6.0", + "grunt-contrib-clean": "^2.0.1", + "grunt-contrib-concat": "~2.1.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-cssmin": "~4.0.0", + "grunt-contrib-handlebars": "^3.0.0", + "grunt-contrib-jshint": "~3.2.0", + "grunt-contrib-qunit": "~7.0.0", + "grunt-contrib-sass": "^2.0.0", + "grunt-contrib-uglify": "~5.2.2", + "grunt-contrib-watch": "~1.1.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "@types/node": { + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@types/node": { "version": "18.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true, "optional": true }, - "@types/yauzl": { + "node_modules/@types/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, "optional": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "abbrev": { + "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "agent-base": { + "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "requires": { + "dependencies": { "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - }, "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - } + "sprintf-js": "~1.0.2" } }, - "array-each": { + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-slice": { + "node_modules/array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "async": { + "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "bl": { + "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "requires": { + "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } + "safe-buffer": "~5.2.0" } }, - "body": { + "node_modules/body": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", "dev": true, - "requires": { + "dependencies": { "continuable-cache": "^0.3.1", "error": "^7.0.0", "raw-body": "~1.1.0", "safe-json-parse": "~1.0.1" } }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "buffer": { + "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "buffer-crc32": { + "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "bytes": { + "node_modules/bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", "dev": true }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "chalk": { + "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "chownr": { + "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "clean-css": { + "node_modules/clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, - "requires": { + "dependencies": { "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" } }, - "cli": { + "node_modules/cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", "dev": true, - "requires": { + "dependencies": { "exit": "0.1.2", "glob": "^7.1.1" + }, + "engines": { + "node": ">=0.2.5" } }, - "color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "colors": { + "node_modules/colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.1.90" + } }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "console-browserify": { + "node_modules/console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", "dev": true, - "requires": { + "dependencies": { "date-now": "^0.1.4" } }, - "continuable-cache": { + "node_modules/continuable-cache": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", "dev": true }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "cosmiconfig": { + "node_modules/cosmiconfig": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", "dev": true, - "requires": { + "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "parse-json": "^5.0.0", "path-type": "^4.0.0" }, + "engines": { + "node": ">=14" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "cross-fetch": { + "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, - "requires": { + "dependencies": { "node-fetch": "2.6.7" } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "requires": { + "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "dargs": { + "node_modules/dargs": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-6.1.0.tgz", "integrity": "sha512-5dVBvpBLBnPwSsYXqfybFyehMmC/EenKEcf23AhCTgTf48JFBbmJKqoZBsERDnjL0FyiVTYWdFsRfTLHxLyKdQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "date-now": { + "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", "dev": true }, - "dateformat": { + "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "debug": { + "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "detect-file": { + "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "devtools-protocol": { + "node_modules/devtools-protocol": { "version": "0.0.1094867", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1094867.tgz", "integrity": "sha512-pmMDBKiRVjh0uKK6CT1WqZmM3hBVSgD+N2MrgyV1uNizAZMw4tx6i/RTc+/uCsKSCmg0xXx7arCP/OFcIwTsiQ==", "dev": true }, - "dom-serializer": { + "node_modules/dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "domelementtype": { + "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, - "domhandler": { + "node_modules/domhandler": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "1" } }, - "domutils": { + "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", "dev": true, - "requires": { + "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, - "duplexer": { + "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "entities": { + "node_modules/entities": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", "dev": true }, - "error": { + "node_modules/error": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", "dev": true, - "requires": { + "dependencies": { "string-template": "~0.2.1" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "eventemitter2": { + "node_modules/eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", "dev": true }, - "exit": { + "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "expand-tilde": { + "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "requires": { + "dependencies": { "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "extend": { + "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extract-zip": { + "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", + "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "faye-websocket": { + "node_modules/faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, - "requires": { + "dependencies": { "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "fd-slicer": { + "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "requires": { + "dependencies": { "pend": "~1.2.0" } }, - "figures": { + "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fill-range": { + "node_modules/file-sync-cmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", + "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==", + "dev": true + }, + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "findup-sync": { + "node_modules/findup-sync": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, - "requires": { + "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.3", "micromatch": "^4.0.4", "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" } }, - "fined": { + "node_modules/fined": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.2", "is-plain-object": "^2.0.3", "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "flagged-respawn": { + "node_modules/flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "for-in": { + "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "for-own": { + "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, - "requires": { + "dependencies": { "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "fs-constants": { + "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gaze": { + "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, - "requires": { + "dependencies": { "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" } }, - "get-stream": { + "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "requires": { + "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "getobject": { + "node_modules/getobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "glob": { + "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "global-modules": { + "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "requires": { + "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "global-prefix": { + "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" } }, - "globule": { + "node_modules/globule": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", "dev": true, - "requires": { + "dependencies": { "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "grunt": { + "node_modules/grunt": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, - "requires": { + "dependencies": { "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", @@ -773,301 +1006,393 @@ "minimatch": "~3.0.4", "nopt": "~3.0.6" }, - "dependencies": { - "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dev": true, - "requires": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - } + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=16" } }, - "grunt-banner": { + "node_modules/grunt-banner": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", "integrity": "sha512-50H/Wxydlf+ifve5Jzcz9oB4jr6oCGEPyfhEDUsl2NEMX80cWUJqVMXSHBr2n9Rb3nd+rRSKeQzqNxWrqoyQ1A==", "dev": true, - "requires": { + "dependencies": { "chalk": "^1.1.0" }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "grunt": ">=0.4.0" + } + }, + "node_modules/grunt-banner/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-banner/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "grunt-contrib-clean": { + "node_modules/grunt-banner/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-contrib-clean": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.1.tgz", "integrity": "sha512-uRvnXfhiZt8akb/ZRDHJpQQtkkVkqc/opWO4Po/9ehC2hPxgptB9S6JHDC/Nxswo4CJSM0iFPT/Iym3cEMWzKA==", "dev": true, - "requires": { + "dependencies": { "async": "^3.2.3", "rimraf": "^2.6.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "grunt": ">=0.4.5" } }, - "grunt-contrib-concat": { + "node_modules/grunt-contrib-concat": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.2", "source-map": "^0.5.3" }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "grunt": ">=1.4.1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-copy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", + "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", + "dev": true, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } + "chalk": "^1.1.1", + "file-sync-cmp": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-copy/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-copy/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-copy/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, - "grunt-contrib-cssmin": { + "node_modules/grunt-contrib-cssmin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-4.0.0.tgz", "integrity": "sha512-jXU+Zlk8Q8XztOGNGpjYlD/BDQ0n95IHKrQKtFR7Gd8hZrzgqiG1Ra7cGYc8h2DD9vkSFGNlweb9Q00rBxOK2w==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "clean-css": "^5.0.1", "maxmin": "^3.0.0" + }, + "engines": { + "node": ">=10.0" } }, - "grunt-contrib-handlebars": { + "node_modules/grunt-contrib-handlebars": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-handlebars/-/grunt-contrib-handlebars-3.0.0.tgz", "integrity": "sha512-Zh5fSnyhfOGIDieFNy1eVEqmdB0y2cGkFaceKkfJM4v5OEZP880+SGjbmmuriaVZsG7bOnj0Fg7wP4722GUBSw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.1", "handlebars": "^4.7.7", "nsdeclare": "0.1.0" + }, + "engines": { + "node": ">=12" } }, - "grunt-contrib-jshint": { + "node_modules/grunt-contrib-jshint": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.2.0.tgz", "integrity": "sha512-pcXWCSZWfoMSvcV4BwH21TUtLtcX0Ms8IGuOPIcLeXK3fud9KclY7iqMKY94jFx8TxZzh028YYtpR+io8DiEaQ==", "dev": true, - "requires": { + "dependencies": { "chalk": "~4.1.2", "hooker": "^0.2.3", "jshint": "~2.13.4" + }, + "engines": { + "node": ">=10" } }, - "grunt-contrib-qunit": { + "node_modules/grunt-contrib-qunit": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-7.0.0.tgz", "integrity": "sha512-phSuAixAzyvizgUV9Nw7ip0/G5lVeWA/4DUifcdKPOgjTAY7QIWsTugxiXMGeVwMKnDOS3vTMpL/VyEw8z7yYw==", "dev": true, - "requires": { + "dependencies": { "eventemitter2": "^6.4.9", "p-each-series": "^2.2.0", "puppeteer": "^19.7.0" }, - "dependencies": { - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "dev": true - } + "engines": { + "node": ">=14" } }, - "grunt-contrib-sass": { + "node_modules/grunt-contrib-qunit/node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "dev": true + }, + "node_modules/grunt-contrib-sass": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-sass/-/grunt-contrib-sass-2.0.0.tgz", "integrity": "sha512-RxZ3dlZZTX4YBPu2zMu84NPYgJ2AYAlIdEqlBaixNVyLNbgvJBGUr5Gi0ec6IiOQbt/I/z7uZVN9HsRxgznIRw==", "dev": true, - "requires": { + "dependencies": { "async": "^2.6.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "dargs": "^6.0.0", "which": "^1.3.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-sass/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "grunt-contrib-uglify": { + "node_modules/grunt-contrib-sass/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/grunt-contrib-sass/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-sass/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/grunt-contrib-sass/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/grunt-contrib-sass/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-sass/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.2.2.tgz", "integrity": "sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.2", "maxmin": "^3.0.0", "uglify-js": "^3.16.1", "uri-path": "^1.0.0" }, - "dependencies": { - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true - } + "engines": { + "node": ">=12" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "grunt-contrib-watch": { + "node_modules/grunt-contrib-watch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", "dev": true, - "requires": { + "dependencies": { "async": "^2.6.0", "gaze": "^1.1.0", "lodash": "^4.17.10", "tiny-lr": "^1.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-watch/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - } + "lodash": "^4.17.14" } }, - "grunt-known-options": { + "node_modules/grunt-known-options": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "grunt-legacy-log": { + "node_modules/grunt-legacy-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", "dev": true, - "requires": { + "dependencies": { "colors": "~1.1.2", "grunt-legacy-log-utils": "~2.1.0", "hooker": "~0.2.3", "lodash": "~4.17.19" + }, + "engines": { + "node": ">= 0.10.0" } }, - "grunt-legacy-log-utils": { + "node_modules/grunt-legacy-log-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", "dev": true, - "requires": { + "dependencies": { "chalk": "~4.1.0", "lodash": "~4.17.19" + }, + "engines": { + "node": ">=10" } }, - "grunt-legacy-util": { + "node_modules/grunt-legacy-util": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", "dev": true, - "requires": { + "dependencies": { "async": "~3.2.0", "exit": "~0.1.2", "getobject": "~1.0.0", @@ -1076,91 +1401,156 @@ "underscore.string": "~3.3.5", "which": "~2.0.2" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-legacy-util/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/grunt-legacy-util/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/grunt/node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "dependencies": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt/node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "gzip-size": { + "node_modules/gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, - "requires": { + "dependencies": { "duplexer": "^0.1.1", "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" } }, - "handlebars": { + "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { + "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "homedir-polyfill": { + "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "requires": { + "dependencies": { "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "hooker": { + "node_modules/hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "1", "domhandler": "2.3", "domutils": "1.5", @@ -1168,199 +1558,259 @@ "readable-stream": "1.1" } }, - "http-parser-js": { + "node_modules/http-parser-js": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "dev": true }, - "https-proxy-agent": { + "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "requires": { + "dependencies": { "agent-base": "6", "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "interpret": { + "node_modules/interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", "dev": true }, - "is-absolute": { + "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "requires": { + "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-relative": { + "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, - "requires": { + "dependencies": { "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-unc-path": { + "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, - "requires": { + "dependencies": { "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-windows": { + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "isarray": { + "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "jquery": { + "node_modules/jquery": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==" }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jshint": { + "node_modules/jshint": { "version": "2.13.6", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", "dev": true, - "requires": { + "dependencies": { "cli": "~1.0.0", "console-browserify": "1.1.x", "exit": "0.1.x", @@ -1369,33 +1819,37 @@ "minimatch": "~3.0.2", "strip-json-comments": "1.0.x" }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } + "bin": { + "jshint": "bin/jshint" } }, - "json-parse-even-better-errors": { + "node_modules/jshint/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "liftup": { + "node_modules/liftup": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", "dev": true, - "requires": { + "dependencies": { "extend": "^3.0.2", "findup-sync": "^4.0.0", "fined": "^1.2.0", @@ -1405,353 +1859,467 @@ "rechoir": "^0.7.0", "resolve": "^1.19.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, "dependencies": { - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "livereload-js": { + "node_modules/livereload-js": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", "dev": true }, - "lodash": { + "node_modules/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, - "make-iterator": { + "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "map-cache": { + "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "maxmin": { + "node_modules/maxmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "figures": "^3.2.0", "gzip-size": "^5.1.1", "pretty-bytes": "^5.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "nice-try": { + "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "nopt": { + "node_modules/nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, - "requires": { + "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "nsdeclare": { + "node_modules/nsdeclare": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/nsdeclare/-/nsdeclare-0.1.0.tgz", "integrity": "sha512-Wb+BpXFfacpp1cgrQoO5Q2wKHACuMlUE6uayGFFLF3yVuXejBp5Rflk991hWvTQbUuQslXTIvBNOHqYTvzBSjA==", "dev": true }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object.defaults": { + "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, - "requires": { + "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.map": { + "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, - "requires": { + "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.pick": { + "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "os-homedir": { + "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "os-tmpdir": { + "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "osenv": { + "node_modules/osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dev": true, - "requires": { + "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, - "p-each-series": { + "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-filepath": { + "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, - "requires": { + "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-passwd": { + "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-root": { + "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, - "requires": { + "dependencies": { "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-root-regex": { + "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "pend": { + "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "pretty-bytes": { + "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "progress": { + "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "proxy-from-env": { + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "pump": { + "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "puppeteer": { + "node_modules/puppeteer": { "version": "19.7.1", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.7.1.tgz", "integrity": "sha512-Hampj7jHlicySL1sSLHCwoFoRCi6RcEbnZmRE5brtbk0mp6Td33+9kWQD2eFs09772JIt00ybPKr50Gt7Y18Xg==", + "deprecated": "< 22.8.2 is no longer supported", "dev": true, - "requires": { + "hasInstallScript": true, + "dependencies": { "cosmiconfig": "8.0.0", "https-proxy-agent": "5.0.1", "progress": "2.0.3", "proxy-from-env": "1.1.0", "puppeteer-core": "19.7.1" + }, + "engines": { + "node": ">=14.1.0" } }, - "puppeteer-core": { + "node_modules/puppeteer-core": { "version": "19.7.1", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.7.1.tgz", "integrity": "sha512-4b5Go25IA+0xrUIw0Qtqi4nxc0qwdu/C7VT1+tFPl1W27207YT+7bxfANC3PjXMlS6bcbzinCf5YfGqMl8tfyQ==", "dev": true, - "requires": { + "dependencies": { "cross-fetch": "3.1.5", "debug": "4.3.4", "devtools-protocol": "0.0.1094867", @@ -1763,400 +2331,539 @@ "unbzip2-stream": "1.4.3", "ws": "8.11.0" }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "chromium-bidi": "0.4.3", + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "chromium-bidi": { + "optional": true + }, + "typescript": { + "optional": true } } }, - "qs": { + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/qs": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", "dev": true, - "requires": { + "dependencies": { "bytes": "1", "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-dir": { + "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safe-json-parse": { + "node_modules/safe-json-parse": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", "dev": true }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { + "node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, - "string_decoder": { + "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "strip-ansi": { + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", - "dev": true + "dev": true, + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "tar-fs": { + "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "requires": { + "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, - "tar-stream": { + "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "requires": { + "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "tiny-lr": { + "node_modules/tiny-lr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, - "requires": { + "dependencies": { "body": "^5.1.0", "debug": "^3.1.0", "faye-websocket": "~0.10.0", "livereload-js": "^2.3.0", "object-assign": "^4.1.0", "qs": "^6.4.0" - }, + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "ms": "^2.1.1" } }, - "to-regex-range": { + "node_modules/tiny-lr/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.12.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.4.tgz", "integrity": "sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==", - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "unbzip2-stream": { + "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "requires": { + "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, - "unc-path-regex": { + "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "underscore.string": { + "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, - "requires": { + "dependencies": { "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" } }, - "uri-path": { + "node_modules/uri-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", "integrity": "sha512-8pMuAn4KacYdGMkFaoQARicp4HSw24/DHOVKWqVRJ8LhhAwPPFpdGvdL9184JVmUwe7vz7Z9n6IqI6t5n2ELdg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "v8flags": { + "node_modules/v8flags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, - "requires": { + "dependencies": { "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "ws": { + "node_modules/ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "yauzl": { + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } diff --git a/package.json b/package.json index 472b614..93fcd3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jquery-storelocator-plugin", - "version": "3.1.14", + "version": "3.4.1", "description": "This jQuery plugin takes advantage of Google Maps API version 3 to create an easy to implement store locator. No back-end programming is required, you just need to feed it KML, XML, or JSON data with all the location information.", "repository": { "type": "git", @@ -40,6 +40,7 @@ "grunt-banner": "~0.6.0", "grunt-contrib-clean": "^2.0.1", "grunt-contrib-concat": "~2.1.0", + "grunt-contrib-copy": "^1.0.0", "grunt-contrib-cssmin": "~4.0.0", "grunt-contrib-handlebars": "^3.0.0", "grunt-contrib-jshint": "~3.2.0", diff --git a/readme.md b/readme.md index 0f685c3..aa5d600 100644 --- a/readme.md +++ b/readme.md @@ -35,6 +35,31 @@ filtering. ## Changelog +### Version 3.4.1 + +* Fixed default directions link (inline directions disabled). Props [@HarldVerbiesenVIPMarketingBV](https://github.com/HarldVerbiesenVIPMarketingBV) via [issue #304](https://github.com/bjorn2404/jQuery-Store-Locator-Plugin/issues/304) + +### Version 3.4.0 + +* Added support for new Map ID with mapSettingsID setting. Please refer to [Use Map IDs](https://developers.google.com/maps/documentation/get-map-id) and [Map ID with Styling](https://developers.google.com/maps/documentation/javascript/examples/map-id-style) in the Google API docs. +* Added support for new [Advanced Markers](https://developers.google.com/maps/documentation/javascript/advanced-markers/overview) while maintaining support for the deprecated (not yet discontinued) marker functionality. mapSettingsID setting needs to be set and marker library needs to be included - see previous item. +* Fixed bugs with pagination. +* Fixed new "Google Maps JavaScript API has been loaded directly without loading=async" notice. +* Improved pagination accessibility and functionality. +* Updated jQuery in example files to v3.7.1 + +### Version 3.3.0 + +* Updated max distance functionality to make distance changes apply dynamically vs. having to manually click button. + +### Version 3.2.1 + +* Swapped old maps.google.com API domain to maps.googleapis.com in all example files. + +### Version 3.2.0 + +* Added new Google Maps lazy load setting and example file - see new lazyLoadMap and apiKey settings. + ### Version 3.1.14 * Added label tags to radio button markup in categories example file. diff --git a/src/css/bootstrap-example.scss b/src/css/bootstrap-example.scss index 6330a34..e6bb36f 100644 --- a/src/css/bootstrap-example.scss +++ b/src/css/bootstrap-example.scss @@ -15,6 +15,11 @@ $arialFont: Arial, Helvetica, sans-serif; font-family: $arialFont; } +.GMAMP-maps-pin-view { + color: $black; + font: 400 15px/1 $arialFont; +} + .bh-sl-error { clear: both; float: left; diff --git a/src/css/storelocator.scss b/src/css/storelocator.scss index 858c394..479f444 100644 --- a/src/css/storelocator.scss +++ b/src/css/storelocator.scss @@ -35,6 +35,11 @@ $tabletLarge: '(min-width: 1024px)'; } } +.GMAMP-maps-pin-view { + color: $black; + font: 400 15px/1 $arialFont; +} + /* InfoBubble font size */ .bh-sl-window { font-size: 13px; @@ -350,17 +355,29 @@ $tabletLarge: '(min-width: 1024px)'; text-align: center; li { + display: inline-block; + margin: 0 4px; + } + + a { + box-shadow: none; color: $blue; - cursor: pointer; display: inline-block; font: bold 14px $arialFont; padding: 10px; + text-decoration: underline; } .bh-sl-current { color: $textgray; cursor: auto; text-decoration: none; + + a { + color: $textgray; + pointer-events: none; + text-decoration: none; + } } } } diff --git a/src/js/jquery.storelocator.js b/src/js/jquery.storelocator.js index e731308..efdf78b 100644 --- a/src/js/jquery.storelocator.js +++ b/src/js/jquery.storelocator.js @@ -11,7 +11,7 @@ } // Variables used across multiple methods - var $this, map, listTemplate, infowindowTemplate, dataTypeRead, originalOrigin, originalData, originalZoom, dataRequest, searchInput, addressInput, olat, olng, storeNum, directionsDisplay, directionsService, prevSelectedMarkerBefore, prevSelectedMarkerAfter, firstRun, reload, nameAttrs, originalFilterVals; + var $this, map, listTemplate, infowindowTemplate, dataTypeRead, originalOrigin, originalData, originalZoom, dataRequest, searchInput, addressInput, olat, olng, storeNum, directionsDisplay, directionsService, prevSelectedMarkerBefore, prevSelectedMarkerAfter, firstRun, reload, nameAttrs, originalFilterVals, paginationPage, locationsTotal; var featuredset = [], locationset = [], normalset = [], markers = []; var filters = {}, locationData = {}, GeoCodeCalc = {}, mappingObj = {}, disabledFilterVals = {}; @@ -53,8 +53,9 @@ 'locationsPerPage' : 10, 'mapSettings' : { mapTypeId: 'roadmap', - zoom : 12 + zoom : 12, }, + 'mapSettingsID' : '', 'markerCluster' : null, 'markerImg' : null, 'markerDim' : null, @@ -151,15 +152,23 @@ this._defaults = defaults; this._name = pluginName; + // Add Map ID to map settings if set. + if (this.settings.mapSettingsID !== '') { + this.settings.mapSettings.mapId = this.settings.mapSettingsID; + } + // Load Google Maps API when lazy load is enabled. if (this.settings.lazyLoadMap && this.settings.apiKey !== null && typeof google === 'undefined') { var _this = this; var optionsQuery = {}; var loadMap = false; + // Load new marker library. + optionsQuery.libraries = 'marker'; + // Autocomplete. if (this.settings.autoComplete === true) { - optionsQuery.libraries = 'places'; + optionsQuery.libraries = 'places,marker'; } // Allow callback to resolve map loading when set. @@ -220,6 +229,11 @@ } }); + // Handle distance changes on select + if (this.settings.maxDistance === true) { + this.distanceFiltering(); + } + // Do taxonomy filtering if set if (this.settings.taxonomyFilters !== null) { this.taxonomyFiltering(); @@ -231,7 +245,7 @@ // Add modal window divs if set if (this.settings.modal === true) { - // Clone the filters if there are any so they can be used in the modal + // Clone the filters if there are any, so they can be used in the modal if (this.settings.taxonomyFilters !== null) { // Clone the filters $('.' + this.settings.taxonomyFiltersContainer).clone(true, true).prependTo($this); @@ -320,6 +334,7 @@ _this.injectGoogleMapsScript({ key: apiKey, + loading: 'async', callback: 'onGoogleMapsAPILoaded', ...options, }); @@ -402,7 +417,7 @@ } if (this.settings.pagination === true) { - $(document).off('click.'+pluginName, '.bh-sl-pagination li'); + $(document).off('click.'+pluginName, '.bh-sl-pagination li a'); } }, @@ -804,7 +819,7 @@ _this.map = new google.maps.Map(document.getElementById(_this.settings.mapID), myOptions); // Re-center the map when the browser is re-sized - window.addEventListener('resize', function() { + window.addEventListener('resize', function() { var center = _this.map.getCenter(); google.maps.event.trigger(_this.map, 'resize'); _this.map.setCenter(center); @@ -1227,36 +1242,136 @@ _paginationOutput: function(currentPage, totalPages) { this.writeDebug('_paginationOutput',arguments); - currentPage = parseFloat(currentPage); + currentPage = parseInt(currentPage); + totalPages = Math.ceil(totalPages); + var pagesStart, pagesEnd; var output = ''; var nextPage = currentPage + 1; var prevPage = currentPage - 1; + var pagesCutoff = 5; + var pagesCeiling = Math.ceil(pagesCutoff / 2); + var pagesFloor = Math.floor(pagesCutoff / 2); + + // Determine page numbers to display. + if (totalPages < pagesCutoff) { + pagesStart = 0; + pagesEnd = totalPages; + } else if (currentPage >= 0 && currentPage <= pagesCeiling) { + pagesStart = 0; + pagesEnd = pagesCutoff; + } else if ((currentPage + pagesFloor) >= totalPages) { + pagesStart = (totalPages - pagesCutoff); + pagesEnd = totalPages; + } else { + pagesStart = (currentPage - pagesCeiling); + pagesEnd = (currentPage + pagesFloor); + } // Previous page if ( currentPage > 0 ) { - output += '
  • ' + this.settings.prevPage + '
  • '; + output += '
  • '; + output += '' + this.settings.prevPage + ''; + output += '
  • '; + } + + // Additional pages indicator. + if ((currentPage + 1) >= pagesCutoff && totalPages > pagesCutoff) { + // First page link. + output += '
  • '; + output += '' + 1 + ''; + output += '
  • '; + + output += '
  • '; + output += ''; + output += '
  • '; } // Add the numbers - for (var p = 0; p < Math.ceil(totalPages); p++) { + for (var p = pagesStart; p < pagesEnd; p++) { var n = p + 1; if (p === currentPage) { - output += '
  • ' + n + '
  • '; - } - else { - output += '
  • ' + n + '
  • '; + output += '
  • '; + output += '' + n + ''; + output += '
  • '; + } else { + output += '
  • '; + output += '' + n + ''; + output += '
  • '; } } + // Additional pages indicator. + if ((currentPage + pagesCeiling) <= totalPages && totalPages > pagesCutoff) { + output += '
  • '; + output += ''; + output += '
  • '; + + // Last page link. + output += '
  • '; + output += '' + totalPages + ''; + output += '
  • '; + } + // Next page if ( nextPage < totalPages ) { - output += '
  • ' + this.settings.nextPage + '
  • '; + output += '
  • '; + output += '' + this.settings.nextPage + ''; + output += '
  • '; } return output; }, + /** + * Reset pagination after the input has changed + */ + paginationReset: function() { + this.writeDebug('paginationReset',arguments); + + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Remove the old page in the URL. + url.searchParams.delete('bhsl-page'); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } + }, + + /** + * Determine the total number of pages for pagination + */ + totalPages: function() { + this.writeDebug('totalPages',arguments); + + // Location limit. + if ( + typeof originalOrigin !== 'undefined' && + this.settings.storeLimit > 0 && + locationset.length > this.settings.storeLimit + ) { + return this.settings.storeLimit / this.settings.locationsPerPage; + } + + // WP API response after search. + if (locationsTotal > 0) { + return locationsTotal / this.settings.locationsPerPage; + } + + // Unlimited or last page. + if ( + this.settings.storeLimit === -1 || + locationset.length < this.settings.storeLimit + ) { + return locationset.length / this.settings.locationsPerPage; + } else { + return this.settings.storeLimit / this.settings.locationsPerPage; + } + }, + /** * Set up the pagination pages * @@ -1265,15 +1380,10 @@ paginationSetup: function (currentPage) { this.writeDebug('paginationSetup',arguments); var pagesOutput = ''; - var totalPages; var $paginationList = $('.bh-sl-pagination-container .bh-sl-pagination'); // Total pages - if ( this.settings.storeLimit === -1 || locationset.length < this.settings.storeLimit ) { - totalPages = locationset.length / this.settings.locationsPerPage; - } else { - totalPages = this.settings.storeLimit / this.settings.locationsPerPage; - } + var totalPages = this.totalPages(); // Current page check if (typeof currentPage === 'undefined') { @@ -1298,7 +1408,22 @@ }, /** - * Marker image setup + * Determine if the legacy or Advanced markers should be used + * + * @returns {boolean} + */ + useLegacyMarkers: function() { + this.writeDebug('useLegacyMarkers',arguments); + + return !this.settings.mapSettings.hasOwnProperty('mapId') || + this.settings.mapSettings.mapId === ''; + }, + + /** + * Legacy marker image setup + * + * Original functionality supporting the now deprecated google.maps.Marker + * This will eventually be removed in favor of markerImage below. * * @param markerUrl {string} path to marker image * @param markerWidth {number} width of marker @@ -1306,8 +1431,8 @@ * * @returns {Object} Google Maps icon object */ - markerImage: function (markerUrl, markerWidth, markerHeight) { - this.writeDebug('markerImage',arguments); + legacyMarkerImage: function (markerUrl, markerWidth, markerHeight) { + this.writeDebug('legacyMarkerImage',arguments); var markerImg; // User defined marker dimensions @@ -1330,6 +1455,40 @@ return markerImg; }, + /** + * Marker image setup + * + * @param markerUrl {string} path to marker image + * @param markerWidth {number} width of marker + * @param markerHeight {number} height of marker + * + * @returns {HTMLImageElement} Image element + */ + markerImage: function (markerUrl, markerWidth, markerHeight) { + this.writeDebug('markerImage',arguments); + + // Check if legacy marker image should be used + if (this.useLegacyMarkers()) { + return this.legacyMarkerImage(markerUrl, markerWidth, markerHeight); + } + + var markerImg = document.createElement('img'); + markerImg.src = markerUrl; + + // User defined marker dimensions + if (typeof markerWidth !== 'undefined' && typeof markerHeight !== 'undefined') { + markerImg.height = markerHeight; + markerImg.width = markerWidth; + } + // Default marker dimensions: 32px x 32px + else { + markerImg.height = 32; + markerImg.width = 32; + } + + return markerImg; + }, + /** * Map marker setup * @@ -1356,16 +1515,24 @@ // Break the category variable into an array if there are multiple categories for the location categories = category.split(','); // With multiple categories the color will be determined by the last matched category in the data - for(var i = 0; i < categories.length; i++) { + for (var i = 0; i < categories.length; i++) { if (categories[i] in this.settings.catMarkers) { - markerImg = this.markerImage(this.settings.catMarkers[categories[i]][0], parseInt(this.settings.catMarkers[categories[i]][1]), parseInt(this.settings.catMarkers[categories[i]][2])); + markerImg = this.markerImage( + this.settings.catMarkers[categories[i]][0], + Number(this.settings.catMarkers[categories[i]][1]), + Number(this.settings.catMarkers[categories[i]][2]) + ); } } } // Single category else { if (category in this.settings.catMarkers) { - markerImg = this.markerImage(this.settings.catMarkers[category][0], parseInt(this.settings.catMarkers[category][1]), parseInt(this.settings.catMarkers[category][2])); + markerImg = this.markerImage( + this.settings.catMarkers[category][0], + Number(this.settings.catMarkers[category][1]), + Number(this.settings.catMarkers[category][2]) + ); } } } @@ -1375,9 +1542,12 @@ if (this.settings.markerImg !== null) { if (this.settings.markerDim === null) { markerImg = this.markerImage(this.settings.markerImg); - } - else { - markerImg = this.markerImage(this.settings.markerImg, this.settings.markerDim.width, this.settings.markerDim.height); + } else { + markerImg = this.markerImage( + this.settings.markerImg, + this.settings.markerDim.width, + this.settings.markerDim.height + ); } } @@ -1389,25 +1559,47 @@ else { // Create the default markers if (this.settings.disableAlphaMarkers === true || this.settings.storeLimit === -1 || this.settings.storeLimit > 26 || this.settings.catMarkers !== null || this.settings.markerImg !== null || (this.settings.fullMapStart === true && firstRun === true && (isNaN(this.settings.fullMapStartListLimit) || this.settings.fullMapStartListLimit > 26 || this.settings.fullMapStartListLimit === -1))) { - marker = new google.maps.Marker({ - draggable: false, - icon : markerImg, // Reverts to default marker if nothing is passed - map : map, - optimized: false, - position : point, - title : name, - }); + if (this.useLegacyMarkers()) { + marker = new google.maps.Marker({ + draggable: false, + icon : markerImg, // Reverts to default marker if markerImg not set. + map : map, + optimized: false, + position : point, + title : name, + }); + } else { + marker = new google.maps.marker.AdvancedMarkerElement({ + content : markerImg, // Reverts to default marker if markerImg not set. + draggable: false, + map : map, + position : point, + title : name, + }); + } } else { // Letter markers - marker = new google.maps.Marker({ - draggable: false, - label : letter, - map : map, - optimized: false, - position : point, - title : name, - }); + if (this.useLegacyMarkers()) { + marker = new google.maps.Marker({ + draggable: false, + label : letter, + map : map, + optimized: false, + position : point, + title : name, + }); + } else { + var letterPin = new google.maps.marker.PinElement({glyph: letter}); + + marker = new google.maps.marker.AdvancedMarkerElement({ + content : letterPin.element, + draggable: false, + map : map, + position : point, + title : name, + }); + } } } @@ -1426,7 +1618,12 @@ _defineLocationData: function (currentMarker, storeStart, page) { this.writeDebug('_defineLocationData',arguments); var indicator = ''; - this._createLocationVariables(currentMarker.get('id')); + + if (this.useLegacyMarkers()) { + this._createLocationVariables(currentMarker.get('id')); + } else { + this._createLocationVariables(currentMarker.bhslID); + } var altDistLength, distLength; @@ -1452,13 +1649,23 @@ } } + var markerId; + // Set up alpha character - var markerId = currentMarker.get('id'); + if (this.useLegacyMarkers()) { + markerId = currentMarker.get('id'); + } else { + markerId = currentMarker.bhslID; + } + // Use dot markers instead of alpha if there are more than 26 locations if (this.settings.disableAlphaMarkers === true || this.settings.storeLimit === -1 || this.settings.storeLimit > 26 || (this.settings.fullMapStart === true && firstRun === true && (isNaN(this.settings.fullMapStartListLimit) || this.settings.fullMapStartListLimit > 26 || this.settings.fullMapStartListLimit === -1))) { + if (page > 0) { + indicator = storeStart + markerId + 1; + } else { indicator = markerId + 1; - } - else { + } + } else { if (page > 0) { indicator = String.fromCharCode('A'.charCodeAt(0) + (storeStart + markerId)); } @@ -1546,38 +1753,75 @@ // Opens the infowindow when list item is clicked if (location === 'left') { infowindow.setContent(formattedAddress); - infowindow.open(marker.get('map'), marker); + + if (this.useLegacyMarkers()) { + infowindow.open(marker.get('map'), marker); + } else { + infowindow.open(marker.map, marker); + } } // Opens the infowindow when the marker is clicked else { - google.maps.event.addListener(marker, 'click', function () { - infowindow.setContent(formattedAddress); - infowindow.open(marker.get('map'), marker); - // Focus on the list - var markerId = marker.get('id'); - var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); - - if ($selectedLocation.length > 0) { - // Marker click callback - if (_this.settings.callbackMarkerClick) { - _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + if (this.useLegacyMarkers()) { + google.maps.event.addListener(marker, 'click', function () { + infowindow.setContent(formattedAddress); + infowindow.open(marker.get('map'), marker); + // Focus on the list + var markerId = marker.get('id'); + var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); + + if ($selectedLocation.length > 0) { + // Marker click callback + if (_this.settings.callbackMarkerClick) { + _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + } + + $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); + $selectedLocation.addClass('list-focus'); + + // Scroll list to selected marker + var $container = $('.' + _this.settings.locationList); + $container.animate({ + scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() + }); } - $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); - $selectedLocation.addClass('list-focus'); + // Custom selected marker override + if (_this.settings.selectedMarkerImg !== null) { + _this.changeSelectedMarker(marker); + } + }); + } else { + marker.addListener('click', function (domEvent, latLng) { + infowindow.setContent(formattedAddress); + infowindow.open(marker.map, marker); + + // Focus on the list + var markerId = marker.bhslID; + var $selectedLocation = $('.' + _this.settings.locationList + ' li[data-markerid=' + markerId + ']'); + + if ($selectedLocation.length > 0) { + // Marker click callback + if (_this.settings.callbackMarkerClick) { + _this.settings.callbackMarkerClick.call(this, marker, markerId, $selectedLocation, locationset[markerId], _this.map); + } - // Scroll list to selected marker - var $container = $('.' + _this.settings.locationList); - $container.animate({ - scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() - }); - } + $('.' + _this.settings.locationList + ' li').removeClass('list-focus'); + $selectedLocation.addClass('list-focus'); - // Custom selected marker override - if (_this.settings.selectedMarkerImg !== null) { - _this.changeSelectedMarker(marker); - } - }); + // Scroll list to selected marker + var $container = $('.' + _this.settings.locationList); + $container.animate({ + scrollTop: $selectedLocation.offset().top - $container.offset().top + $container.scrollTop() + }); + } + + // Custom selected marker override + if (_this.settings.selectedMarkerImg !== null) { + _this.changeSelectedMarker(marker); + } + }); + } } }, @@ -1710,6 +1954,17 @@ paginationChange: function (newPage) { this.writeDebug('paginationChange',arguments); + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Update the page in the URL. + url.searchParams.set('bhsl-page', parseInt(newPage) + 1); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } + // Page change callback if (this.settings.callbackPageChange) { this.settings.callbackPageChange.call(this, newPage); @@ -1887,6 +2142,16 @@ searchInput = this.getQueryString(this.settings.searchID); distance = this.getQueryString(this.settings.maxDistanceID); + // Max distance field. + if (distance && $('#' + this.settings.maxDistanceID + ' option[value=' + distance + ']').length) { + $distanceInput.val(distance); + } + + // Update zoom if origin coordinates are available and a distance query string value is set. + if (addressInput && distance) { + _this.settings.mapSettings.zoom = 0; + } + // The form should override the query string parameters. if ($addressInput.val() !== '') { addressInput = $addressInput.val(); @@ -2009,6 +2274,11 @@ mappingObj.distance = distance; _this.mapping(mappingObj); } + + // Reset pagination if the input has changed. + if (typeof originalOrigin !== 'undefined' && addressInput !== originalOrigin) { + this.paginationReset(); + } }, /** @@ -2139,6 +2409,45 @@ }); }, + /** + * Distance filtering + */ + distanceFiltering: function () { + this.writeDebug('distanceFiltering'); + var _this = this; + var $distanceInput = $('#' + this.settings.maxDistanceID); + + // Add event listener + $distanceInput.on('change.'+pluginName, function (e) { + e.stopPropagation(); + + // Query string parameter value updates on change. + if (_this.settings.querystringParams === true) { + var currentUrl = window.location.href; + var url = new URL(currentUrl); + + // Update the distance in the URL. + url.searchParams.set(_this.settings.maxDistanceID, this.value); + + // Update the query string param to match the new value. + if (history.pushState) { + window.history.pushState({path: url.href}, '', url.href); + } else { + window.location.replace(url.href); + } + } + + if ($('#' + _this.settings.mapID).hasClass('bh-sl-map-open') === true) { + if ((olat) && (olng)) { + _this.settings.mapSettings.zoom = 0; + _this.processForm(); + } else { + _this.mapping(mappingObj); + } + } + }); + }, + /** * Count the selected filters * @@ -2297,7 +2606,6 @@ } } } - }, /** @@ -2353,7 +2661,7 @@ // Reset pagination. if (_this.settings.pagination === true) { - _this.paginationChange(0); + _this.paginationReset(); } // Handle checkbox filters @@ -2463,13 +2771,24 @@ // Set up the new list $(markers).each(function(x, marker){ - if (map.getBounds().contains(marker.getPosition())) { - // Define the location data - _this.listSetup(marker, 0, 0); + if (_this.useLegacyMarkers()) { + if (map.getBounds().contains(marker.getPosition())) { + // Define the location data + _this.listSetup(marker, 0, 0); + + // Set up the list template with the location data + listHtml = listTemplate(locations); + $('.' + _this.settings.locationList + ' > ul').append(listHtml); + } + } else { + if (map.getBounds().contains(marker.position)) { + // Define the location data + _this.listSetup(marker, 0, 0); - // Set up the list template with the location data - listHtml = listTemplate(locations); - $('.' + _this.settings.locationList + ' > ul').append(listHtml); + // Set up the list template with the location data + listHtml = listTemplate(locations); + $('.' + _this.settings.locationList + ' > ul').append(listHtml); + } } }); @@ -2564,29 +2883,63 @@ } var marker, - originImg = ''; + originImg; if (typeof origin !== 'undefined') { - if (this.settings.originMarkerImg !== null) { - if (this.settings.originMarkerDim === null) { - originImg = this.markerImage(this.settings.originMarkerImg); + if (this.useLegacyMarkers()) { + if (this.settings.originMarkerImg !== null) { + if (this.settings.originMarkerDim === null) { + originImg = this.markerImage(this.settings.originMarkerImg); + } + else { + originImg = this.markerImage(this.settings.originMarkerImg, this.settings.originMarkerDim.width, this.settings.originMarkerDim.height); + } } else { - originImg = this.markerImage(this.settings.originMarkerImg, this.settings.originMarkerDim.width, this.settings.originMarkerDim.height); + originImg = { + url: 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png' + }; } - } - else { - originImg = { - url: 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-waypoint-a.png' - }; - } - marker = new google.maps.Marker({ - position : originPoint, - map : map, - icon : originImg, - draggable: false - }); + marker = new google.maps.Marker({ + position : originPoint, + map : map, + icon : originImg, + draggable: false + }); + } else { + // Default green origin pin. + var defaultOriginPin = new google.maps.marker.PinElement({ + background : '#39b25e', + borderColor: '#177d3d', + glyphColor : '#177d3c' + }); + + marker = new google.maps.marker.AdvancedMarkerElement({ + content : defaultOriginPin.element, + draggable: false, + map : map, + position : originPoint, + title : name, + }); + + // Origin image. + if (this.settings.originMarkerImg !== null) { + originImg = document.createElement('img'); + + if (this.settings.originMarkerDim === null) { + originImg.src = this.settings.originMarkerImg; + } else { + originImg = this.markerImage( + this.settings.originMarkerImg, + this.settings.originMarkerDim.width, + this.settings.originMarkerDim.height, + ); + } + + marker.content = originImg; + } + } } }, @@ -2639,7 +2992,7 @@ if ( this.settings.openNearest !== true || typeof nearestLoc === 'undefined' || - typeof originalOrigin === 'undefined' || + typeof originalOrigin === 'undefined' || (this.settings.fullMapStart === true && firstRun === true && this.settings.querystringParams === false) || (this.settings.defaultLoc === true && firstRun === true && this.settings.querystringParams === false) ) { @@ -2692,7 +3045,12 @@ _this.settings.callbackListClick.call(this, markerId, selectedMarker, locationset[markerId], map); } - map.panTo(selectedMarker.getPosition()); + if (_this.useLegacyMarkers()) { + map.panTo(selectedMarker.getPosition()); + } else { + map.panTo(selectedMarker.position); + } + var listLoc = 'left'; _this.createInfowindow(selectedMarker, listLoc, infowindow, storeStart, page); @@ -2850,6 +3208,14 @@ if (typeof page === 'undefined' || originalOrigin !== addressInput ) { page = 0; } + + paginationPage = page; + } + + // Override page if the query string was set. + var queryStringPage = _this.getQueryString('bhsl-page'); + if (queryStringPage !== '') { + page = paginationPage = parseInt(queryStringPage) - 1; } // Data request @@ -2860,8 +3226,8 @@ // Set up the origin point originPoint = new google.maps.LatLng(orig_lat, orig_lng); - // If the origin hasn't changed use the existing data so we aren't making unneeded AJAX requests - if ((typeof originalOrigin !== 'undefined') && (origin === originalOrigin) && (typeof originalData !== 'undefined')) { + // If the origin hasn't changed use the existing data, so we aren't making unneeded AJAX requests + if ((typeof originalOrigin !== 'undefined') && (origin === originalOrigin) && (typeof originalData !== 'undefined') && this.settings.pagination !== true) { origin = originalOrigin; dataRequest = originalData; } @@ -3257,7 +3623,11 @@ } else { if (typeof locationset[0] !== 'undefined') { - if (_this.settings.distanceAlert !== -1 && locationset[0].distance > _this.settings.distanceAlert) { + if ( + _this.settings.distanceAlert !== -1 && + locationset[0].distance > _this.settings.distanceAlert && + (typeof paginationPage === 'undefined' || parseInt(paginationPage) === 1) + ) { _this.notify(_this.settings.distanceErrorAlert + _this.settings.distanceAlert + ' ' + distUnit); distError = true; } @@ -3406,7 +3776,7 @@ _this.map = new google.maps.Map(document.getElementById(_this.settings.mapID), myOptions); // Re-center the map when the browser is re-sized - window.addEventListener('resize', function() { + window.addEventListener('resize', function() { var center = _this.map.getCenter(); google.maps.event.trigger(_this.map, 'resize'); _this.map.setCenter(center); @@ -3441,10 +3811,10 @@ _this.originMarker(_this.map, origin, originPoint); // Handle pagination - $(document).on('click.'+pluginName, '.bh-sl-pagination li', function (e) { + $(document).on('click.'+pluginName, '.bh-sl-pagination li a', function (e) { e.preventDefault(); // Run paginationChange - _this.paginationChange($(this).attr('data-page')); + _this.paginationChange($(this).parent().attr('data-page')); }); // Inline directions @@ -3463,11 +3833,21 @@ var point = new google.maps.LatLng(locationset[y].lat, locationset[y].lng); marker = _this.createMarker(point, locationset[y].name, locationset[y].address, letter, _this.map, locationset[y].category); - marker.set('id', y); + + if (_this.useLegacyMarkers()) { + marker.set('id', y); + } else { + marker.bhslID = y; + } + markers[y] = marker; // Add marker ID to location data - locationset[y].markerid = marker.get('id'); + if (_this.useLegacyMarkers()) { + locationset[y].markerid = marker.get('id'); + } else { + locationset[y].markerid = marker.bhslID; + } if (this.settings.dataRaw !== null) { for (var l = 0; l < this.settings.dataRaw.length; l++) { @@ -3545,9 +3925,21 @@ // Open nearest location. _this.openNearestLocation(nearestLoc, infowindow, storeStart, page); - // MarkerClusterer setup - if ( typeof MarkerClusterer !== 'undefined' && _this.settings.markerCluster !== null ) { - var markerCluster = new MarkerClusterer(_this.map, markers, _this.settings.markerCluster); + // MarkerClusterer setup. + if (_this.useLegacyMarkers()) { + if ( typeof MarkerClusterer !== 'undefined' && _this.settings.markerCluster !== null ) { + var markerCluster = new MarkerClusterer(_this.map, markers, _this.settings.markerCluster); + } + } else { + if ( typeof markerClusterer !== 'undefined' ) { + var customClustererParams = _this.settings.markerCluster; + + new markerClusterer.MarkerClusterer({ + markers, + map: _this.map, + customClustererParams + }); + } } // Handle clicks from the list diff --git a/src/templates/kml/kml-infowindow-description.html b/src/templates/kml/kml-infowindow-description.html index bf408a2..afababf 100644 --- a/src/templates/kml/kml-infowindow-description.html +++ b/src/templates/kml/kml-infowindow-description.html @@ -1,4 +1,6 @@ {{#location}}
    {{name}}
    -
    {{{description}}}
    -{{/location}} \ No newline at end of file +{{#if description}} +
    {{{description}}}
    +{{/if}} +{{/location}} diff --git a/src/templates/kml/kml-location-list-description.html b/src/templates/kml/kml-location-list-description.html index 17fe9bd..aeaa7ec 100644 --- a/src/templates/kml/kml-location-list-description.html +++ b/src/templates/kml/kml-location-list-description.html @@ -4,8 +4,10 @@
    {{name}}
    -
    {{{description}}}
    + {{#if description}} +
    {{{description}}}
    + {{/if}}
    -{{/location}} \ No newline at end of file +{{/location}} diff --git a/src/templates/standard/infowindow-description.html b/src/templates/standard/infowindow-description.html index d634f71..5981a26 100644 --- a/src/templates/standard/infowindow-description.html +++ b/src/templates/standard/infowindow-description.html @@ -1,11 +1,21 @@ {{#location}}
    {{name}}
    {{address}}
    -
    {{address2}}
    +{{#if address2}} +
    {{address2}}
    +{{/if}}
    {{city}}{{#if city}},{{/if}} {{state}} {{postal}}
    -
    {{hours1}}
    -
    {{hours2}}
    -
    {{hours3}}
    -
    {{phone}}
    +{{#if hours1}} +
    {{hours1}}
    +{{/if}} +{{#if hours2}} +
    {{hours2}}
    +{{/if}} +{{#if hours3}} +
    {{hours3}}
    +{{/if}} +{{#if phone}} +
    {{phone}}
    +{{/if}} -{{/location}} \ No newline at end of file +{{/location}} diff --git a/src/templates/standard/location-list-description.html b/src/templates/standard/location-list-description.html index e2b7d15..ab1f455 100644 --- a/src/templates/standard/location-list-description.html +++ b/src/templates/standard/location-list-description.html @@ -4,16 +4,23 @@
    {{name}}
    -
    {{address}}
    -
    {{address2}}
    +
    {{address}}
    + {{#if address2}} +
    {{address2}}
    + {{/if}}
    {{city}}{{#if city}},{{/if}} {{state}} {{postal}}
    -
    {{phone}}
    - + {{#if phone}} +
    {{phone}}
    + {{/if}} + {{#if web}} + + {{/if}} {{#if distance}} -
    {{distance}} {{length}}
    - +
    {{distance}} {{length}}
    + {{#if altdistance}}
    {{altdistance}} {{altlength}}
    {{/if}} + {{/if}}
    -{{/location}} \ No newline at end of file +{{/location}} diff --git a/storelocator.jquery.json b/storelocator.jquery.json index a162653..980b344 100644 --- a/storelocator.jquery.json +++ b/storelocator.jquery.json @@ -3,7 +3,7 @@ "title": "jQuery Google Maps Store Locator", "description": "This jQuery plugin takes advantage of Google Maps API version 3 to create an easy to implement store locator. No back-end programming is required, you just need to feed it KML, XML, or JSON data with all the location information.", "keywords": ["jquery","locator","store","dealer","location", "locations", "maps", "map", "stores", "find"], - "version": "3.1.14", + "version": "3.4.1", "author": { "name": "Bjorn Holine", "url": "https://www.bjornblog.com/" diff --git a/test/storeLocator.html b/test/storeLocator.html index ae8812b..c6d9f83 100644 --- a/test/storeLocator.html +++ b/test/storeLocator.html @@ -10,7 +10,7 @@ - +