├── LICENSE ├── README.md ├── dist ├── script.min.js └── styles.min.css ├── favicon.ico ├── index.html ├── lib ├── Font-Awesome │ ├── .gitignore │ ├── .npmignore │ ├── css │ │ ├── font-awesome.css │ │ ├── font-awesome.css.map │ │ └── font-awesome.min.css │ └── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── Leaflet.PolylineDecorator │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── example │ │ ├── example.html │ │ ├── example.js │ │ └── icon_plane.png │ ├── gulpfile.js │ ├── leaflet.polylineDecorator.js │ ├── leaflet.polylineDecorator.min.js │ ├── package.json │ ├── screenshot.png │ └── src │ │ ├── L.LineUtil.PolylineDecorator.js │ │ ├── L.PolylineDecorator.js │ │ ├── L.RotatedMarker.js │ │ └── L.Symbol.js ├── Leaflet.markercluster │ ├── .gitignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── Jakefile.js │ ├── MIT-LICENCE.txt │ ├── README.md │ ├── bower.json │ ├── build │ │ ├── build.js │ │ ├── deps.js │ │ └── hintrc.js │ ├── dist │ │ ├── MarkerCluster.Default.css │ │ ├── MarkerCluster.css │ │ ├── leaflet.markercluster-src.js │ │ ├── leaflet.markercluster-src.min.js │ │ └── leaflet.markercluster.js │ ├── example │ │ ├── geojson-sample.js │ │ ├── geojson.html │ │ ├── marker-clustering-convexhull.html │ │ ├── marker-clustering-custom.html │ │ ├── marker-clustering-everything.html │ │ ├── marker-clustering-geojson.html │ │ ├── marker-clustering-realworld-maxzoom.388.html │ │ ├── marker-clustering-realworld-mobile.388.html │ │ ├── marker-clustering-realworld.10000.html │ │ ├── marker-clustering-realworld.388.html │ │ ├── marker-clustering-realworld.50000.html │ │ ├── marker-clustering-singlemarkermode.html │ │ ├── marker-clustering-spiderfier.html │ │ ├── marker-clustering-zoomtobounds.html │ │ ├── marker-clustering-zoomtoshowlayer.html │ │ ├── marker-clustering.html │ │ ├── mobile.css │ │ ├── old-bugs │ │ │ ├── add-1000-after.html │ │ │ ├── add-markers-offscreen.html │ │ │ ├── add-remove-before-addtomap.html │ │ │ ├── animationless-zoom.html │ │ │ ├── click-cluster-at-screen-edge.html │ │ │ ├── disappearing-marker-from-spider.html │ │ │ ├── doesnt-update-cluster-on-bottom-level.html │ │ │ ├── remove-add-clustering.html │ │ │ ├── remove-when-spiderfied.html │ │ │ ├── removelayer-after-remove-from-map.html │ │ │ ├── setView-doesnt-remove.html │ │ │ ├── zoomtoshowlayer-doesnt-need-to-zoom.html │ │ │ └── zoomtoshowlayer-doesnt-zoom-if-centered-on.html │ │ ├── realworld.10000.js │ │ ├── realworld.388.js │ │ ├── realworld.50000.1.js │ │ ├── realworld.50000.2.js │ │ ├── remove-geoJSON-when-spiderfied.html │ │ └── screen.css │ ├── package.json │ ├── spec │ │ ├── after.js │ │ ├── expect.js │ │ ├── happen.js │ │ ├── index.html │ │ ├── karma.conf.js │ │ ├── sinon.js │ │ └── suites │ │ │ ├── AddLayer.MultipleSpec.js │ │ │ ├── AddLayer.SingleSpec.js │ │ │ ├── AddLayersSpec.js │ │ │ ├── ChildChangingIconSupportSpec.js │ │ │ ├── CircleMarkerSupportSpec.js │ │ │ ├── CircleSupportSpec.js │ │ │ ├── DistanceGridSpec.js │ │ │ ├── LeafletSpec.js │ │ │ ├── NonPointSpec.js │ │ │ ├── QuickHullSpec.js │ │ │ ├── RefreshSpec.js │ │ │ ├── RememberOpacity.js │ │ │ ├── RemoveLayerSpec.js │ │ │ ├── SpecHelper.js │ │ │ ├── animateOptionSpec.js │ │ │ ├── clearLayersSpec.js │ │ │ ├── eachLayerSpec.js │ │ │ ├── eventsSpec.js │ │ │ ├── getBoundsSpec.js │ │ │ ├── getLayersSpec.js │ │ │ ├── getVisibleParentSpec.js │ │ │ ├── onAddSpec.js │ │ │ ├── onRemoveSpec.js │ │ │ ├── removeLayersSpec.js │ │ │ ├── removeOutsideVisibleBoundsSpec.js │ │ │ ├── singleMarkerModeSpec.js │ │ │ ├── spiderfySpec.js │ │ │ └── zoomAnimationSpec.js │ └── src │ │ ├── DistanceGrid.js │ │ ├── MarkerCluster.QuickHull.js │ │ ├── MarkerCluster.Spiderfier.js │ │ ├── MarkerCluster.js │ │ ├── MarkerClusterGroup.Refresh.js │ │ ├── MarkerClusterGroup.js │ │ ├── MarkerOpacity.js │ │ └── copyright.js ├── Remodal │ ├── .bowerrc │ ├── .csscomb.json │ ├── .editorconfig │ ├── .gitignore │ ├── .jscsrc │ ├── .jshintrc │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── dist │ │ ├── remodal-default-theme.css │ │ ├── remodal-default-theme.min.css │ │ ├── remodal.css │ │ ├── remodal.js │ │ ├── remodal.min.css │ │ └── remodal.min.js │ ├── examples │ │ ├── index-zepto.html │ │ └── index.html │ ├── libs │ │ └── jquery-loader.js │ ├── package.json │ ├── src │ │ ├── remodal-default-theme.css │ │ ├── remodal.css │ │ └── remodal.js │ └── test │ │ ├── .jshintrc │ │ ├── remodal.html │ │ └── remodal_test.js ├── jquery-1.11.1.min.js ├── js.cookie-2.0.4.min.js ├── leaflet-0.7.5 │ ├── images │ │ ├── layers-2x.png │ │ ├── layers.png │ │ ├── marker-icon-2x.png │ │ ├── marker-icon.png │ │ └── marker-shadow.png │ ├── leaflet-src.js │ ├── leaflet.css │ ├── leaflet.js │ └── leaflet.min.css ├── leaflet-locatecontrol │ ├── .gitignore │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── demo │ │ ├── index.html │ │ ├── script.js │ │ └── style.css │ ├── demo_mapbox │ │ ├── index.html │ │ ├── script.js │ │ └── style.css │ ├── dist │ │ ├── L.Control.Locate.css │ │ ├── L.Control.Locate.ie.css │ │ ├── L.Control.Locate.ie.min.css │ │ ├── L.Control.Locate.ie.min.css.map │ │ ├── L.Control.Locate.mapbox.css │ │ ├── L.Control.Locate.mapbox.min.css │ │ ├── L.Control.Locate.mapbox.min.css.map │ │ ├── L.Control.Locate.min.css │ │ ├── L.Control.Locate.min.css.map │ │ ├── L.Control.Locate.min.js │ │ └── L.Control.Locate.min.js.map │ ├── package.json │ ├── screenshot.png │ └── src │ │ ├── L.Control.Locate.ie.scss │ │ ├── L.Control.Locate.js │ │ ├── L.Control.Locate.mapbox.scss │ │ └── L.Control.Locate.scss └── spin.js │ ├── .eslintrc │ ├── .gitignore │ ├── .npmignore │ ├── .spmignore │ ├── Gruntfile.js │ ├── LICENSE.md │ ├── README.md │ ├── bower.json │ ├── component.json │ ├── jquery.spin.js │ ├── package.json │ ├── site │ ├── CNAME │ ├── assets │ │ ├── bg.png │ │ ├── browsers.png │ │ ├── crosshair.gif │ │ ├── fd-slider │ │ │ ├── fd-slider-tooltip.css │ │ │ ├── fd-slider.css │ │ │ └── fd-slider.js │ │ ├── github.gif │ │ ├── main.css │ │ ├── prettify.css │ │ ├── prettify.js │ │ ├── preview.jpg │ │ └── ribbon.png │ ├── example │ │ ├── amd.html │ │ ├── jquery.html │ │ ├── modernizr.html │ │ ├── modernizr.js │ │ ├── positioning.html │ │ └── settings.html │ ├── favicon.ico │ └── index.html │ ├── spin.js │ └── spin.min.js ├── script.js └── styles.css /LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2015 Merten Peetz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | Please note that this software includes other libraries or parts of 25 | libraries which have their own license file or license annotation in 26 | the source code and may be released under different licences. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A running demo can be found at [morbz.github.io/restriction-validator](https://morbz.github.io/restriction-validator). 2 | -------------------------------------------------------------------------------- /dist/styles.min.css: -------------------------------------------------------------------------------- 1 | body{margin:0;padding:0;font-family:Verdana,Arial,sans-serif;background-color:#333}div.header{position:absolute;left:0;right:0;top:0;height:40px;padding:0 10px;padding-top:4px}div.header>span.title{color:white;font-size:1.4em;font-variant:small-caps}div.menu{padding-top:6px;float:right;display:inline}div.menu>a{color:white;font-size:.9em}div.menu>a+a{margin-left:10px}div.remodal a{color:black}div.remodal p{text-align:justify}div.map-container{position:absolute;top:40px;bottom:0;left:0;right:0}div.map{padding:0;margin:0;width:100%;height:100%}div.zoom-hint{display:none;position:absolute;left:60px;right:60px;top:15px;z-index:2000;pointer-events:none;text-align:center}div.zoom-hint>div{display:inline-block;background-color:rgba(255,255,255,0.5);padding:5px;border-radius:5px}div.spinner{position:absolute;top:25px;right:25px}@media(max-width:529px){div.map-container{top:70px}div.header{height:70px}div.header>span.title{display:block;width:100%;text-align:center}div.menu{float:none;display:block;text-align:center}div.menu>a{font-size:1em}.leaflet-popup-content{font-size:1.2em}}.leaflet-popup-content-wrapper{border-radius:5px;box-shadow:1px 1px 3px rgba(0,0,0,0.4)}.leaflet-popup-content{margin:8px}.leaflet-popup-tip{box-shadow:1px 1px 3px rgba(0,0,0,0.4)}div.leaflet-control-locate>a>span{margin-top:5px}.marker-cluster{background-clip:padding-box;border-radius:10px;background-color:white}.marker-cluster div{background-color:orange;width:16px;height:16px;margin-left:2px;margin-top:2px;text-align:center;border-radius:8px;font:9px "Helvetica Neue",Arial,Helvetica,sans-serif}.marker-cluster span{line-height:16px} -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Restriction Validator 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | OSM Restriction Validator 28 | 32 |
33 |
34 |
35 |
36 |
Please zoom in to load data
37 |
38 |
39 |
40 |
41 | 42 |

43 | Shows OpenStreetMap restrictions and analyses them to find incorrect or unnecessary restrictions. The Overpass API is used to retrieve the data. 44 |

45 |

46 | Green ways represent "only_"-restrictions, while red ways respresent "no_"-restrictions. White ways are connected to the via-node of some restriction, but not part of any restriction. 47 |

48 |

49 | Complete arrows represent one-way streets. Arrows on only one side of the green/red lines represent two-way streets, where the restriction only affects the shown direction. 50 |

51 |

52 | This tool has some limitations:
53 | - Restrictions where the "via"-member is a way are ignored
54 | - Restrictions for specific vehicle types, eg. "restriction:hgv" are ignored
55 | - Restrictions that contain non-car streets (e.g. cyclways) are ignored 56 |

57 |
58 | 59 | 60 | -------------------------------------------------------------------------------- /lib/Font-Awesome/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.egg-info 3 | *.db 4 | *.db.old 5 | *.swp 6 | *.db-journal 7 | 8 | .coverage 9 | .DS_Store 10 | .installed.cfg 11 | _gh_pages/* 12 | 13 | .idea/* 14 | .svn/* 15 | src/website/static/* 16 | src/website/media/* 17 | 18 | bin 19 | cfcache 20 | develop-eggs 21 | dist 22 | downloads 23 | eggs 24 | parts 25 | tmp 26 | .sass-cache 27 | node_modules 28 | 29 | src/website/settingslocal.py 30 | stunnel.log 31 | 32 | .ruby-version 33 | .bundle 34 | -------------------------------------------------------------------------------- /lib/Font-Awesome/.npmignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.egg-info 3 | *.db 4 | *.db.old 5 | *.swp 6 | *.db-journal 7 | 8 | .coverage 9 | .DS_Store 10 | .installed.cfg 11 | _gh_pages/* 12 | 13 | .idea/* 14 | .svn/* 15 | src/website/static/* 16 | src/website/media/* 17 | 18 | bin 19 | cfcache 20 | develop-eggs 21 | dist 22 | downloads 23 | eggs 24 | parts 25 | tmp 26 | .sass-cache 27 | node_modules 28 | 29 | src/website/settingslocal.py 30 | stunnel.log 31 | 32 | .ruby-version 33 | 34 | # don't need these in the npm package. 35 | src/ 36 | _config.yml 37 | bower.json 38 | component.json 39 | composer.json 40 | CONTRIBUTING.md 41 | Gemfile 42 | Gemfile.lock 43 | -------------------------------------------------------------------------------- /lib/Font-Awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Font-Awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /lib/Font-Awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Font-Awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/Font-Awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Font-Awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/Font-Awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Font-Awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /lib/Font-Awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Font-Awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/.gitignore: -------------------------------------------------------------------------------- 1 | *.sh 2 | *.ps1 3 | *~ 4 | *.sublime-* 5 | node_modules 6 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013 Benjamin Becquet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/README.md: -------------------------------------------------------------------------------- 1 | # Leaflet PolylineDecorator 2 | 3 | A Leaflet plug-in to define and draw patterns on existing Polylines or along coordinate paths. 4 | 5 | ## Compatibility with Leaflet versions 6 | 7 | The development version of the plugin (on the `master` branch) is targeted at the 1.x version of Leaflet. 8 | 9 | For a version of the plugin compatible with the 0.7.x Leaflet release, use the `leaflet-0.7.2` branch. 10 | 11 | ## Features 12 | 13 | * Dashed or dotted lines, arrow heads, markers following line 14 | * Works on Polygons too! (easy, as Polygon extends Polyline) 15 | * Multiple patterns can be applied to the same line 16 | * New behaviors can be obtained by defining new symbols 17 | 18 | ## Screenshot 19 | 20 | ![screenshot](https://raw.github.com/bbecquet/Leaflet.PolylineDecorator/master/screenshot.png "Screenshot showing different applications of the library") 21 | 22 | ## Usage 23 | 24 | To create a decorator and add it to the map: `L.polylineDecorator(latlngs, options).addTo(map);` 25 | 26 | * `latlngs` can be one of the following types: 27 | 28 | * `L.Polyline` 29 | * `L.Polygon` 30 | * an array of `L.LatLng`, or with Leaflet's simplified syntax, an array of 2-cells arrays of coordinates (useful if you just want to draw patterns following coordinates, but not the line itself) 31 | * an array of any of these previous types, to apply the same patterns to multiple lines 32 | 33 | * `options` has a single property `patterns`, which is an array of `Pattern` objects. 34 | 35 | ### `Pattern` definition 36 | 37 | Property | Type | Required | Description 38 | --- | --- | --- | --- 39 | `offset`| *see below* | No | Offset of the first pattern symbol, from the start point of the line. Default: 0. 40 | `endOffset`| *see below* | No | Minimum offset of the last pattern symbol, from the end point of the line. Default: 0. 41 | `repeat`| *see below* | Yes | Repetition interval of the pattern symbols. Defines the distance between each consecutive symbol's anchor point. 42 | `symbol`| Symbol factory | Yes | Instance of a symbol factory class. 43 | 44 | `offset`, `endOffset` and `repeat` can be each defined as a number, in pixels, or in percentage of the line's length, as a string (ex: `'10%'`). 45 | 46 | ### Methods 47 | 48 | Method | Description 49 | --- | --- 50 | `setPaths(latlngs)` | Changes the path(s) the decorator applies to. `latlngs` can be all the types supported by the constructor. Useful for example if you remove polyline from a set, or coordinates change. 51 | `setPatterns( patterns)` | Changes the decorator's pattern definitions, and update the symbols accordingly. 52 | 53 | ## Example 54 | 55 | ```javascript 56 | var polyline = L.polyline([...]).addTo(map); 57 | var decorator = L.polylineDecorator(polyline, { 58 | patterns: [ 59 | // defines a pattern of 10px-wide dashes, repeated every 20px on the line 60 | {offset: 0, repeat: 20, symbol: L.Symbol.dash({pixelSize: 10})} 61 | ] 62 | }).addTo(map); 63 | ``` 64 | 65 | ## Performance note 66 | 67 | Please note that this library is in an early stage, and many operations could still be optimized. 68 | Moreover, as it requires a lot of (re-)computations, and each pattern symbol is an actual `L.ILayer` object, it can have an impact on the responsiveness of your map, especially if used on many objects. 69 | In cases where it's applicable (dash patterns), you should probably use instead the `dashArray` property of `L.Path`, as it's natively drawn by the browser. 70 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet-polylinedecorator", 3 | "main": "leaflet.polylineDecorator.js", 4 | "version": "0.7.2", 5 | "authors": [ 6 | "Benjamin Becquet" 7 | ], 8 | "description": "A plug-in for the JS map library Leaflet, allowing to define patterns (like dashes, arrows, icons, etc.) on Polylines.", 9 | "keywords": [ 10 | "Leaflet", 11 | "Leaflet PolylineDecorator" 12 | ], 13 | "repository": { 14 | "type": "git", 15 | "url": "git@github.com:bbecquet/Leaflet.PolylineDecorator.git" 16 | }, 17 | "license": "MIT", 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/example/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Leaflet Polyline Decorator example 8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/example/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Leaflet.PolylineDecorator/example/icon_plane.png -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'), 2 | concat = require('gulp-concat'); 3 | 4 | gulp.task('concat', function(){ 5 | return gulp.src('src/*.js') 6 | .pipe(concat('leaflet.polylineDecorator.js')) 7 | .pipe(gulp.dest('.')); 8 | }); 9 | 10 | gulp.task('default', ['concat']); 11 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet-polylinedecorator", 3 | "version": "1.0.0", 4 | "repository": "bbecquet/Leaflet.PolylineDecorator", 5 | "devDependencies": { 6 | "gulp": "^3.9.0", 7 | "gulp-concat": "^2.6.0" 8 | }, 9 | "license": "MIT" 10 | } 11 | -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/Leaflet.PolylineDecorator/screenshot.png -------------------------------------------------------------------------------- /lib/Leaflet.PolylineDecorator/src/L.RotatedMarker.js: -------------------------------------------------------------------------------- 1 | L.RotatedMarker = L.Marker.extend({ 2 | options: { 3 | angle: 0 4 | }, 5 | 6 | statics: { 7 | TRANSFORM_ORIGIN: L.DomUtil.testProp( 8 | ['transformOrigin', 'WebkitTransformOrigin', 'OTransformOrigin', 'MozTransformOrigin', 'msTransformOrigin']) 9 | }, 10 | 11 | _initIcon: function() { 12 | L.Marker.prototype._initIcon.call(this); 13 | 14 | this._icon.style[L.RotatedMarker.TRANSFORM_ORIGIN] = '50% 50%'; 15 | }, 16 | 17 | _setPos: function (pos) { 18 | L.Marker.prototype._setPos.call(this, pos); 19 | 20 | if (L.DomUtil.TRANSFORM) { 21 | // use the CSS transform rule if available 22 | this._icon.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)'; 23 | } else if(L.Browser.ie) { 24 | // fallback for IE6, IE7, IE8 25 | var rad = this.options.angle * (Math.PI / 180), 26 | costheta = Math.cos(rad), 27 | sintheta = Math.sin(rad); 28 | this._icon.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\', M11=' + 29 | costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')'; 30 | } 31 | }, 32 | 33 | setAngle: function (ang) { 34 | this.options.angle = ang; 35 | } 36 | }); 37 | 38 | L.rotatedMarker = function (pos, options) { 39 | return new L.RotatedMarker(pos, options); 40 | }; 41 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/.gitignore: -------------------------------------------------------------------------------- 1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs) 2 | bin 3 | obj 4 | 5 | # mstest test results 6 | TestResults 7 | node_modules 8 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.10 -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing to Leaflet.MarkerCluster 2 | ===================================== 3 | 4 | 1. [Reporting Bugs](#reporting-bugs) 5 | 2. [Contributing Code](#contributing-code) 6 | 7 | ## Reporting Bugs 8 | 9 | Before reporting a bug on the project's [issues page](https://github.com/Leaflet/Leaflet.markercluster/issues), 10 | first make sure that your issue is caused by Leaflet.MarkerCluster, not your application code 11 | (e.g. passing incorrect arguments to methods, etc.). 12 | Second, search the already reported issues for similar cases, 13 | and if it's already reported, just add any additional details in the comments. 14 | 15 | After you've made sure that you've found a new Leaflet.markercluster bug, 16 | here are some tips for creating a helpful report that will make fixing it much easier and quicker: 17 | 18 | * Write a **descriptive, specific title**. Bad: *Problem with polylines*. Good: *Doing X in IE9 causes Z*. 19 | * Include **browser, OS and Leaflet version** info in the description. 20 | * Create a **simple test case** that demonstrates the bug (e.g. using [JSFiddle](http://jsfiddle.net/) or [JS Bin](http://jsbin.com/)). 21 | * Check whether the bug can be reproduced in **other browsers**. 22 | * Check if the bug occurs in the stable version, master, or both. 23 | * *Bonus tip:* if the bug only appears in the master version but the stable version is fine, 24 | use `git bisect` to find the exact commit that introduced the bug. 25 | 26 | If you just want some help with your project, 27 | try asking [on the Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) instead. 28 | 29 | ## Contributing Code 30 | 31 | ### Considerations for Accepting Patches 32 | 33 | While we happily accept patches, we're also committed to keeping Leaflet simple, lightweight and blazingly fast. 34 | So bugfixes, performance optimizations and small improvements that don't add a lot of code 35 | are much more likely to get accepted quickly. 36 | 37 | Before sending a pull request with a new feature, check if it's been discussed before already 38 | (either on [GitHub issues](https://github.com/Leaflet/Leaflet/issues) 39 | or [Leaflet UserVoice](http://leaflet.uservoice.com/)), 40 | and ask yourself two questions: 41 | 42 | 1. Are you sure that this new feature is important enough to justify its presence in the Leaflet core? 43 | Or will it look better as a plugin in a separate repository? 44 | 2. Is it written in a simple, concise way that doesn't add bulk to the codebase? 45 | 46 | If your feature or API improvement did get merged into master, 47 | please consider submitting another pull request with the corresponding [documentation update](#improving-documentation). 48 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/Jakefile.js: -------------------------------------------------------------------------------- 1 | /* 2 | Leaflet.markercluster building, testing and linting scripts. 3 | 4 | To use, install Node, then run the following commands in the project root: 5 | 6 | npm install -g jake 7 | npm install 8 | 9 | To check the code for errors and build Leaflet from source, run "jake". 10 | To run the tests, run "jake test". 11 | 12 | For a custom build, open build/build.html in the browser and follow the instructions. 13 | */ 14 | 15 | var build = require('./build/build.js'); 16 | 17 | desc('Check Leaflet.markercluster source for errors with JSHint'); 18 | task('lint', build.lint); 19 | 20 | desc('Combine and compress Leaflet.markercluster source files'); 21 | task('build', ['lint'], build.build); 22 | 23 | desc('Run PhantomJS tests'); 24 | task('test', ['lint'], build.test); 25 | 26 | task('default', ['build']); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/MIT-LICENCE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2012 David Leaver 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.markercluster", 3 | "version": "0.4.0", 4 | "homepage": "https://github.com/Leaflet/Leaflet.markercluster", 5 | "authors": [ 6 | "Dave Leaver " 7 | ], 8 | "description": "Marker Clustering plugin for Leaflet.", 9 | "main": [ 10 | "dist/leaflet.markercluster-src.js", 11 | "dist/MarkerCluster.css", 12 | "dist/MarkerCluster.Default.css" 13 | ], 14 | "license": "MIT", 15 | "ignore": [ 16 | "**/.*", 17 | "node_modules", 18 | "bower_components", 19 | "example", 20 | "spec", 21 | "test", 22 | "tests" 23 | ], 24 | "dependencies": { 25 | "leaflet": ">= 0.7.0" 26 | } 27 | } -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/build/deps.js: -------------------------------------------------------------------------------- 1 | var deps = { 2 | 3 | Core: { 4 | src: ['MarkerClusterGroup.js', 5 | 'MarkerCluster.js', 6 | 'MarkerOpacity.js', 7 | 'DistanceGrid.js'], 8 | desc: 'The core of the library.' 9 | }, 10 | 11 | QuickHull: { 12 | src: ['MarkerCluster.QuickHull.js'], 13 | desc: 'ConvexHull generation. Used to show the area outline of the markers within a cluster.', 14 | heading: 'QuickHull' 15 | }, 16 | 17 | Spiderfier: { 18 | src: ['MarkerCluster.Spiderfier.js'], 19 | desc: 'Provides the ability to show all of the child markers of a cluster.', 20 | heading: 'Spiderfier' 21 | }, 22 | 23 | Refresh: { 24 | src: ['MarkerClusterGroup.Refresh.js'], 25 | desc: 'Method to request refreshing of clusters icon to reflect changes in markers data.', 26 | heading: 'Refresh' 27 | } 28 | }; 29 | 30 | if (typeof exports !== 'undefined') { 31 | exports.deps = deps; 32 | } 33 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/build/hintrc.js: -------------------------------------------------------------------------------- 1 | exports.config = { 2 | 3 | // environment 4 | "browser": true, 5 | "node": true, 6 | "predef": ['L', 'define'], 7 | "strict": false, 8 | 9 | // code style 10 | "bitwise": true, 11 | "camelcase": true, 12 | "curly": true, 13 | "eqeqeq": true, 14 | "forin": false, 15 | "immed": true, 16 | "latedef": true, 17 | "newcap": true, 18 | "noarg": true, 19 | "noempty": true, 20 | "nonew": true, 21 | "undef": true, 22 | "unused": true, 23 | //"quotmark": "single", 24 | 25 | // whitespace 26 | "indent": 4, 27 | "trailing": true, 28 | "white": true, 29 | "smarttabs": true, 30 | //"maxlen": 120 31 | 32 | // code simplicity - not enforced but nice to check from time to time 33 | // "maxstatements": 20, 34 | // "maxcomplexity": 5 35 | // "maxparams": 4, 36 | // "maxdepth": 4 37 | }; 38 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/dist/MarkerCluster.Default.css: -------------------------------------------------------------------------------- 1 | .marker-cluster-small { 2 | background-color: rgba(181, 226, 140, 0.6); 3 | } 4 | .marker-cluster-small div { 5 | background-color: rgba(110, 204, 57, 0.6); 6 | } 7 | 8 | .marker-cluster-medium { 9 | background-color: rgba(241, 211, 87, 0.6); 10 | } 11 | .marker-cluster-medium div { 12 | background-color: rgba(240, 194, 12, 0.6); 13 | } 14 | 15 | .marker-cluster-large { 16 | background-color: rgba(253, 156, 115, 0.6); 17 | } 18 | .marker-cluster-large div { 19 | background-color: rgba(241, 128, 23, 0.6); 20 | } 21 | 22 | /* IE 6-8 fallback colors */ 23 | .leaflet-oldie .marker-cluster-small { 24 | background-color: rgb(181, 226, 140); 25 | } 26 | .leaflet-oldie .marker-cluster-small div { 27 | background-color: rgb(110, 204, 57); 28 | } 29 | 30 | .leaflet-oldie .marker-cluster-medium { 31 | background-color: rgb(241, 211, 87); 32 | } 33 | .leaflet-oldie .marker-cluster-medium div { 34 | background-color: rgb(240, 194, 12); 35 | } 36 | 37 | .leaflet-oldie .marker-cluster-large { 38 | background-color: rgb(253, 156, 115); 39 | } 40 | .leaflet-oldie .marker-cluster-large div { 41 | background-color: rgb(241, 128, 23); 42 | } 43 | 44 | .marker-cluster { 45 | background-clip: padding-box; 46 | border-radius: 20px; 47 | } 48 | .marker-cluster div { 49 | width: 30px; 50 | height: 30px; 51 | margin-left: 5px; 52 | margin-top: 5px; 53 | 54 | text-align: center; 55 | border-radius: 15px; 56 | font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; 57 | } 58 | .marker-cluster span { 59 | line-height: 30px; 60 | } -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/dist/MarkerCluster.css: -------------------------------------------------------------------------------- 1 | .leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow { 2 | -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in; 3 | -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in; 4 | -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in; 5 | transition: transform 0.3s ease-out, opacity 0.3s ease-in; 6 | } 7 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/geojson-sample.js: -------------------------------------------------------------------------------- 1 | var geojsonSample = { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "geometry": { 7 | "type": "Point", 8 | "coordinates": [102.0, 0.5] 9 | }, 10 | "properties": { 11 | "prop0": "value0", 12 | "color": "blue" 13 | } 14 | }, 15 | 16 | { 17 | "type": "Feature", 18 | "geometry": { 19 | "type": "LineString", 20 | "coordinates": [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]] 21 | }, 22 | "properties": { 23 | "color": "red", 24 | "prop1": 0.0 25 | } 26 | }, 27 | 28 | { 29 | "type": "Feature", 30 | "geometry": { 31 | "type": "Polygon", 32 | "coordinates": [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]] 33 | }, 34 | "properties": { 35 | "color": "green", 36 | "prop1": { 37 | "this": "that" 38 | } 39 | } 40 | }, 41 | 42 | { 43 | "type": "Feature", 44 | "geometry": { 45 | "type": "MultiPolygon", 46 | "coordinates": [[[[100.0, 1.5], [100.5, 1.5], [100.5, 2.0], [100.0, 2.0], [100.0, 1.5]]], [[[100.5, 2.0], [100.5, 2.5], [101.0, 2.5], [101.0, 2.0], [100.5, 2.0]]]] 47 | }, 48 | "properties": { 49 | "color": "purple" 50 | } 51 | } 52 | ] 53 | }; 54 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/geojson.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-convexhull.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 24 | 25 | 26 | 27 |
28 | 29 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-everything.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds 21 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-geojson.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds 21 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-realworld-maxzoom.388.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | Markers will show on the bottom 2 zoom levels even though the markers would normally cluster. 21 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-realworld-mobile.388.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-realworld.10000.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds 22 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-realworld.388.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds 21 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-realworld.50000.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds 24 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-singlemarkermode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | Click a cluster to zoom to its bounds 19 | 20 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-spiderfier.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-zoomtobounds.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | Click a cluster to zoom to its bounds 19 | 20 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering-zoomtoshowlayer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | When clicked we will zoom down to a marker, spiderfying if required to show it and then open its popup 22 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/marker-clustering.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/mobile.css: -------------------------------------------------------------------------------- 1 | html, body, #map { 2 | margin: 0; 3 | padding: 0; 4 | width: 100%; 5 | height: 100%; 6 | } -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/add-1000-after.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #51. Click the button. It will add 1000 markers to the map. this should be fast, but previously in (non-IE browsers) it was very slow.
24 | Bug #43. Improving performance more.
25 | 26 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/add-markers-offscreen.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | Bug #69. Click the button 2+ times. Zoom out. Should just be a single cluster but instead one of the child markers is still visible.
24 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/add-remove-before-addtomap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | Bug #64. Nothing should appear on the map.
23 | 24 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/animationless-zoom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #216. Click the button. It will zoom in, leaflet will not do an animation for the zoom. A marker should be visible.
24 | 25 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/click-cluster-at-screen-edge.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | Bug #344. Click the cluster at the screen edge. Map will zoom to it and its markers will appear, but it will not disappear.
23 | 24 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/doesnt-update-cluster-on-bottom-level.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #114. Markers are added to the map periodically using addLayers. Bug was that after becoming a cluster (size 2 or 3 usually) they would never change again even if more markers were added to them.
24 | 25 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/remove-add-clustering.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |

Whenever a marker is clicked it is removed from the clusterer and added directly to the map instead.

23 |

Click Marker on Left, zoom out 1 layer, click marker on right.

24 |

Expected behaviour: Both markers are shown. Bugged behaviour: Both markers are on map with opacity 0.

25 |

26 | 
27 | 	
73 | 
74 | 
75 | 


--------------------------------------------------------------------------------
/lib/Leaflet.markercluster/example/old-bugs/remove-when-spiderfied.html:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 | 
 4 | 	Leaflet debug page
 5 | 
 6 | 	
 7 | 	
 8 | 	
 9 | 	
10 | 
11 | 	
12 | 	
13 | 	
14 | 	
15 | 	
16 | 	
17 | 	
18 | 
19 | 
20 | 
21 | 	
22 |
23 | Bug #54. Spiderfy the cluster then click the button. Should result in 2 markers right beside each other on the map.
24 | Bug #53. Spiderfy the cluster then click the button. Spider lines remain on the map.
25 | Bug #49. Spiderfy the cluster then click the second button. Spider lines remain on the map. Click the map to get an error. 26 | 27 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/removelayer-after-remove-from-map.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 1 - Swap layers
23 | 2 - Remove all markers
24 | 3 - Swap layers again => Marker is still there
25 | 26 | Bug
#160. Click 1,2,3. There should be nothing on the map.
27 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/setView-doesnt-remove.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #63. Zoom down on the very left side untill markers are visible. Click the button. Scroll to the left in one go, those markers should be in clusters but the actual markers will still be visible.
24 | 25 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/zoomtoshowlayer-doesnt-need-to-zoom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #65. Click 2 then click the button. You should be scrolled to the marker, old behaviour would zoom you out.
24 | 25 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/old-bugs/zoomtoshowlayer-doesnt-zoom-if-centered-on.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | Bug #286 (from @Grsmto). Click the button. The cluster should spiderfy and show the popup, old behaviour did nothing.
24 | 25 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/remove-geoJSON-when-spiderfied.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Leaflet debug page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 | New Bug. Spiderfy the cluster then click the button #1. All markers disapear, but it should remain marker #2.
20 | New Bug. Spiderfy the cluster then click the button #2. All markers disapear, but it should remain marker #1.
21 | 22 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/example/screen.css: -------------------------------------------------------------------------------- 1 | #map { 2 | width: 800px; 3 | height: 600px; 4 | border: 1px solid #ccc; 5 | } 6 | 7 | #progress { 8 | display: none; 9 | position: absolute; 10 | z-index: 1000; 11 | left: 400px; 12 | top: 300px; 13 | width: 200px; 14 | height: 20px; 15 | margin-top: -20px; 16 | margin-left: -100px; 17 | background-color: #fff; 18 | background-color: rgba(255, 255, 255, 0.7); 19 | border-radius: 4px; 20 | padding: 2px; 21 | } 22 | 23 | #progress-bar { 24 | width: 0; 25 | height: 100%; 26 | background-color: #76A6FC; 27 | border-radius: 4px; 28 | } 29 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.markercluster", 3 | "repository": "https://github.com/Leaflet/Leaflet.markercluster", 4 | "version": "0.4.0", 5 | "description": "Provides Beautiful Animated Marker Clustering functionality for Leaflet", 6 | "dependencies": { 7 | "leaflet": "~0.7.1" 8 | }, 9 | "devDependencies": { 10 | "jshint": "~2.1.3", 11 | "mocha": "~1.10.0", 12 | "karma": "~0.8.5", 13 | "uglify-js": "~2.3.6", 14 | "jake": "~0.5.16" 15 | }, 16 | "main": "dist/leaflet.markercluster.js", 17 | "scripts": { 18 | "test": "jake test", 19 | "prepublish": "jake" 20 | }, 21 | "keywords": ["gis", "map"], 22 | "license": "MIT" 23 | } 24 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/after.js: -------------------------------------------------------------------------------- 1 | // put after Leaflet files as imagePath can't be detected in a PhantomJS env 2 | L.Icon.Default.imagePath = "../dist/images"; 3 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/happen.js: -------------------------------------------------------------------------------- 1 | // https://github.com/tmcw/happen 2 | 3 | !(function(context) { 4 | var h = {}; 5 | 6 | // Make inheritance bearable: clone one level of properties 7 | function extend(child, parent) { 8 | for (var property in parent) { 9 | if (typeof child[property] == 'undefined') { 10 | child[property] = parent[property]; 11 | } 12 | } 13 | return child; 14 | } 15 | 16 | h.once = function(x, o) { 17 | var evt; 18 | 19 | if (o.type.slice(0, 3) === 'key') { 20 | if (typeof Event === 'function') { 21 | evt = new Event(o.type); 22 | evt.keyCode = o.keyCode || 0; 23 | evt.charCode = o.charCode || 0; 24 | evt.shift = o.shift || false; 25 | evt.meta = o.meta || false; 26 | evt.ctrl = o.ctrl || false; 27 | evt.alt = o.alt || false; 28 | } else { 29 | evt = document.createEvent('KeyboardEvent'); 30 | // https://developer.mozilla.org/en/DOM/event.initKeyEvent 31 | // https://developer.mozilla.org/en/DOM/KeyboardEvent 32 | evt[(evt.initKeyEvent) ? 'initKeyEvent' 33 | : 'initKeyboardEvent']( 34 | o.type, // in DOMString typeArg, 35 | true, // in boolean canBubbleArg, 36 | true, // in boolean cancelableArg, 37 | null, // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This value may be null. 38 | o.ctrl || false, // in boolean ctrlKeyArg, 39 | o.alt || false, // in boolean altKeyArg, 40 | o.shift || false, // in boolean shiftKeyArg, 41 | o.meta || false, // in boolean metaKeyArg, 42 | o.keyCode || 0, // in unsigned long keyCodeArg, 43 | o.charCode || 0 // in unsigned long charCodeArg); 44 | ); 45 | } 46 | } else { 47 | evt = document.createEvent('MouseEvents'); 48 | // https://developer.mozilla.org/en/DOM/event.initMouseEvent 49 | evt.initMouseEvent(o.type, 50 | true, // canBubble 51 | true, // cancelable 52 | window, // 'AbstractView' 53 | o.clicks || 0, // click count 54 | o.screenX || 0, // screenX 55 | o.screenY || 0, // screenY 56 | o.clientX || 0, // clientX 57 | o.clientY || 0, // clientY 58 | o.ctrl || 0, // ctrl 59 | o.alt || false, // alt 60 | o.shift || false, // shift 61 | o.meta || false, // meta 62 | o.button || false, // mouse button 63 | null // relatedTarget 64 | ); 65 | } 66 | 67 | x.dispatchEvent(evt); 68 | }; 69 | 70 | var shortcuts = ['click', 'mousedown', 'mouseup', 'mousemove', 'keydown', 'keyup', 'keypress'], 71 | s, i = 0; 72 | 73 | while (s = shortcuts[i++]) { 74 | h[s] = (function(s) { 75 | return function(x, o) { 76 | h.once(x, extend(o || {}, { type: s })); 77 | }; 78 | })(s); 79 | } 80 | 81 | h.dblclick = function(x, o) { 82 | h.once(x, extend(o || {}, { 83 | type: 'dblclick', 84 | clicks: 2 85 | })); 86 | }; 87 | 88 | this.happen = h; 89 | 90 | if (typeof module !== 'undefined') { 91 | module.exports = this.happen; 92 | } 93 | })(this); 94 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Spec Runner 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | var libSources = require(__dirname+'/../build/build.js').getFiles(); 3 | var leafletSources = require(__dirname+'/../node_modules/leaflet/build/build.js').getFiles(); 4 | 5 | // base path, that will be used to resolve files and exclude 6 | basePath = ''; 7 | 8 | for (var i=0; i < libSources.length; i++) { 9 | libSources[i] = "../" + libSources[i]; 10 | } 11 | for (var i=0; i < leafletSources.length; i++) { 12 | leafletSources[i] = "../node_modules/leaflet/" + leafletSources[i]; 13 | } 14 | 15 | // list of files / patterns to load in the browser 16 | files = [].concat([ 17 | "../node_modules/mocha/mocha.js", 18 | MOCHA_ADAPTER, 19 | "sinon.js", 20 | "expect.js" 21 | ], leafletSources, libSources, [ 22 | "after.js", 23 | "happen.js", 24 | "suites/SpecHelper.js", 25 | "suites/**/*.js" 26 | ]); 27 | 28 | // list of files to exclude 29 | exclude = [ 30 | ]; 31 | 32 | // test results reporter to use 33 | // possible values: 'dots', 'progress', 'junit' 34 | reporters = ['dots']; 35 | 36 | // web server port 37 | port = 8080; 38 | 39 | // cli runner port 40 | runnerPort = 9100; 41 | 42 | // enable / disable colors in the output (reporters and logs) 43 | colors = true; 44 | 45 | // level of logging 46 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 47 | logLevel = LOG_WARN; 48 | 49 | // enable / disable watching file and executing tests whenever any file changes 50 | autoWatch = false; 51 | 52 | // Start these browsers, currently available: 53 | // - Chrome 54 | // - ChromeCanary 55 | // - Firefox 56 | // - Opera 57 | // - Safari (only Mac) 58 | // - PhantomJS 59 | // - IE (only Windows) 60 | browsers = ['PhantomJS']; 61 | 62 | // If browser does not capture in given timeout [ms], kill it 63 | captureTimeout = 5000; 64 | 65 | // Continuous Integration mode 66 | // if true, it capture browsers, run tests and exit 67 | singleRun = true; 68 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/AddLayer.SingleSpec.js: -------------------------------------------------------------------------------- 1 | describe('addLayer adding a single marker', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | 21 | it('appears when added to the group before the group is added to the map', function () { 22 | 23 | var group = new L.MarkerClusterGroup(); 24 | var marker = new L.Marker([1.5, 1.5]); 25 | 26 | group.addLayer(marker); 27 | map.addLayer(group); 28 | 29 | expect(marker._icon).to.not.be(undefined); 30 | expect(marker._icon.parentNode).to.be(map._panes.markerPane); 31 | }); 32 | it('appears when added to the group after the group is added to the map', function () { 33 | 34 | var group = new L.MarkerClusterGroup(); 35 | var marker = new L.Marker([1.5, 1.5]); 36 | 37 | map.addLayer(group); 38 | group.addLayer(marker); 39 | 40 | expect(marker._icon).to.not.be(undefined); 41 | expect(marker._icon.parentNode).to.be(map._panes.markerPane); 42 | }); 43 | it('appears (using animations) when added after the group is added to the map', function () { 44 | 45 | var group = new L.MarkerClusterGroup({ animateAddingMarkers: true }); 46 | var marker = new L.Marker([1.5, 1.5]); 47 | 48 | map.addLayer(group); 49 | group.addLayer(marker); 50 | 51 | expect(marker._icon).to.not.be(undefined); 52 | expect(marker._icon.parentNode).to.be(map._panes.markerPane); 53 | }); 54 | 55 | 56 | it('does not appear when too far away when added before the group is added to the map', function () { 57 | 58 | var group = new L.MarkerClusterGroup(); 59 | var marker = new L.Marker([3.5, 1.5]); 60 | 61 | group.addLayer(marker); 62 | map.addLayer(group); 63 | 64 | expect(marker._icon).to.be(undefined); 65 | }); 66 | it('does not appear when too far away when added after the group is added to the map', function () { 67 | 68 | var group = new L.MarkerClusterGroup(); 69 | var marker = new L.Marker([3.5, 1.5]); 70 | 71 | map.addLayer(group); 72 | group.addLayer(marker); 73 | 74 | expect(marker._icon).to.be(undefined); 75 | }); 76 | 77 | 78 | }); 79 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/AddLayersSpec.js: -------------------------------------------------------------------------------- 1 | describe('addLayers adding multiple markers', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | it('creates a cluster when 2 overlapping markers are added before the group is added to the map', function () { 21 | 22 | var group = new L.MarkerClusterGroup(); 23 | var marker = new L.Marker([1.5, 1.5]); 24 | var marker2 = new L.Marker([1.5, 1.5]); 25 | 26 | group.addLayers([marker, marker2]); 27 | map.addLayer(group); 28 | 29 | expect(marker._icon).to.be(undefined); 30 | expect(marker2._icon).to.be(undefined); 31 | 32 | expect(map._panes.markerPane.childNodes.length).to.be(1); 33 | }); 34 | 35 | it('creates a cluster when 2 overlapping markers are added after the group is added to the map', function () { 36 | 37 | var group = new L.MarkerClusterGroup(); 38 | var marker = new L.Marker([1.5, 1.5]); 39 | var marker2 = new L.Marker([1.5, 1.5]); 40 | 41 | map.addLayer(group); 42 | group.addLayers([marker, marker2]); 43 | 44 | expect(marker._icon).to.be(undefined); 45 | expect(marker2._icon).to.be(undefined); 46 | 47 | expect(map._panes.markerPane.childNodes.length).to.be(1); 48 | }); 49 | 50 | 51 | 52 | it('creates a cluster and marker when 2 overlapping markers and one non-overlapping are added before the group is added to the map', function () { 53 | 54 | var group = new L.MarkerClusterGroup(); 55 | var marker = new L.Marker([1.5, 1.5]); 56 | var marker2 = new L.Marker([1.5, 1.5]); 57 | var marker3 = new L.Marker([3.0, 1.5]); 58 | 59 | group.addLayers([marker, marker2, marker3]); 60 | map.addLayer(group); 61 | 62 | expect(marker._icon).to.be(undefined); 63 | expect(marker2._icon).to.be(undefined); 64 | expect(marker3._icon.parentNode).to.be(map._panes.markerPane); 65 | 66 | expect(map._panes.markerPane.childNodes.length).to.be(2); 67 | }); 68 | it('creates a cluster and marker when 2 overlapping markers and one non-overlapping are added after the group is added to the map', function () { 69 | 70 | var group = new L.MarkerClusterGroup(); 71 | var marker = new L.Marker([1.5, 1.5]); 72 | var marker2 = new L.Marker([1.5, 1.5]); 73 | var marker3 = new L.Marker([3.0, 1.5]); 74 | 75 | map.addLayer(group); 76 | group.addLayers([marker, marker2, marker3]); 77 | 78 | expect(marker._icon).to.be(undefined); 79 | expect(marker2._icon).to.be(undefined); 80 | expect(marker3._icon.parentNode).to.be(map._panes.markerPane); 81 | 82 | expect(map._panes.markerPane.childNodes.length).to.be(2); 83 | }); 84 | 85 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/ChildChangingIconSupportSpec.js: -------------------------------------------------------------------------------- 1 | describe('support child markers changing icon', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | 6 | div = document.createElement('div'); 7 | div.style.width = '200px'; 8 | div.style.height = '200px'; 9 | document.body.appendChild(div); 10 | 11 | map = L.map(div, { maxZoom: 18 }); 12 | 13 | map.fitBounds(new L.LatLngBounds([ 14 | [1, 1], 15 | [2, 2] 16 | ])); 17 | }); 18 | afterEach(function () { 19 | clock.restore(); 20 | document.body.removeChild(div); 21 | }); 22 | 23 | it('child markers end up with the right icon after becoming unclustered', function () { 24 | 25 | var group = new L.MarkerClusterGroup(); 26 | var marker = new L.Marker([1.5, 1.5], { icon: new L.DivIcon({html: 'Inner1Text' }) }); 27 | var marker2 = new L.Marker([1.5, 1.5]); 28 | 29 | map.addLayer(group); 30 | group.addLayer(marker); 31 | 32 | expect(marker._icon.parentNode).to.be(map._panes.markerPane); 33 | expect(marker._icon.innerHTML).to.contain('Inner1Text'); 34 | 35 | group.addLayer(marker2); 36 | 37 | expect(marker._icon).to.be(null); //Have been removed from the map 38 | 39 | marker.setIcon(new L.DivIcon({ html: 'Inner2Text' })); //Change the icon 40 | 41 | group.removeLayer(marker2); //Remove the other marker, so we'll become unclustered 42 | 43 | expect(marker._icon.innerHTML).to.contain('Inner2Text'); 44 | }); 45 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/CircleMarkerSupportSpec.js: -------------------------------------------------------------------------------- 1 | describe('support for CircleMarker elements', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | 6 | div = document.createElement('div'); 7 | div.style.width = '200px'; 8 | div.style.height = '200px'; 9 | document.body.appendChild(div); 10 | 11 | map = L.map(div, { maxZoom: 18 }); 12 | 13 | map.fitBounds(new L.LatLngBounds([ 14 | [1, 1], 15 | [2, 2] 16 | ])); 17 | }); 18 | afterEach(function () { 19 | clock.restore(); 20 | document.body.removeChild(div); 21 | }); 22 | 23 | it('appears when added to the group before the group is added to the map', function () { 24 | 25 | var group = new L.MarkerClusterGroup(); 26 | var marker = new L.CircleMarker([1.5, 1.5]); 27 | 28 | group.addLayer(marker); 29 | map.addLayer(group); 30 | 31 | expect(marker._container).to.not.be(undefined); 32 | expect(marker._container.parentNode).to.be(map._pathRoot); 33 | 34 | clock.tick(1000); 35 | }); 36 | it('appears when added to the group after the group is added to the map', function () { 37 | 38 | var group = new L.MarkerClusterGroup(); 39 | var marker = new L.CircleMarker([1.5, 1.5]); 40 | 41 | group.addLayer(marker); 42 | map.addLayer(group); 43 | 44 | expect(marker._container).to.not.be(undefined); 45 | expect(marker._container.parentNode).to.be(map._pathRoot); 46 | 47 | clock.tick(1000); 48 | }); 49 | it('appears animated when added to the group after the group is added to the map', function () { 50 | 51 | var group = new L.MarkerClusterGroup({ animateAddingMarkers: true }); 52 | var marker = new L.CircleMarker([1.5, 1.5]); 53 | var marker2 = new L.CircleMarker([1.5, 1.5]); 54 | 55 | map.addLayer(group); 56 | group.addLayer(marker); 57 | group.addLayer(marker2); 58 | 59 | expect(marker._container.parentNode).to.be(map._pathRoot); 60 | expect(marker2._container.parentNode).to.be(map._pathRoot); 61 | 62 | clock.tick(1000); 63 | 64 | expect(marker._container.parentNode).to.be(null); 65 | expect(marker2._container.parentNode).to.be(null); 66 | }); 67 | 68 | 69 | it('creates a cluster when 2 overlapping markers are added before the group is added to the map', function () { 70 | 71 | var group = new L.MarkerClusterGroup(); 72 | var marker = new L.CircleMarker([1.5, 1.5]); 73 | var marker2 = new L.CircleMarker([1.5, 1.5]); 74 | 75 | group.addLayers([marker, marker2]); 76 | map.addLayer(group); 77 | 78 | expect(marker._container).to.be(undefined); 79 | expect(marker2._container).to.be(undefined); 80 | 81 | expect(map._panes.markerPane.childNodes.length).to.be(1); 82 | 83 | clock.tick(1000); 84 | }); 85 | it('creates a cluster when 2 overlapping markers are added after the group is added to the map', function () { 86 | 87 | var group = new L.MarkerClusterGroup(); 88 | var marker = new L.CircleMarker([1.5, 1.5]); 89 | var marker2 = new L.CircleMarker([1.5, 1.5]); 90 | 91 | map.addLayer(group); 92 | group.addLayer(marker); 93 | group.addLayer(marker2); 94 | 95 | expect(marker._container.parentNode).to.be(null); //Removed then re-added, so null 96 | expect(marker2._container).to.be(undefined); 97 | 98 | expect(map._panes.markerPane.childNodes.length).to.be(1); 99 | 100 | clock.tick(1000); 101 | }); 102 | 103 | it('disappears when removed from the group', function () { 104 | 105 | var group = new L.MarkerClusterGroup(); 106 | var marker = new L.CircleMarker([1.5, 1.5]); 107 | 108 | group.addLayer(marker); 109 | map.addLayer(group); 110 | 111 | expect(marker._container).to.not.be(undefined); 112 | expect(marker._container.parentNode).to.be(map._pathRoot); 113 | 114 | group.removeLayer(marker); 115 | 116 | expect(marker._container.parentNode).to.be(null); 117 | 118 | clock.tick(1000); 119 | }); 120 | 121 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/CircleSupportSpec.js: -------------------------------------------------------------------------------- 1 | describe('support for Circle elements', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | 6 | div = document.createElement('div'); 7 | div.style.width = '200px'; 8 | div.style.height = '200px'; 9 | document.body.appendChild(div); 10 | 11 | map = L.map(div, { maxZoom: 18 }); 12 | 13 | map.fitBounds(new L.LatLngBounds([ 14 | [1, 1], 15 | [2, 2] 16 | ])); 17 | }); 18 | afterEach(function () { 19 | clock.restore(); 20 | document.body.removeChild(div); 21 | }); 22 | 23 | it('appears when added to the group before the group is added to the map', function () { 24 | 25 | var group = new L.MarkerClusterGroup(); 26 | var marker = new L.Circle([1.5, 1.5], 200); 27 | 28 | group.addLayer(marker); 29 | map.addLayer(group); 30 | 31 | expect(marker._container).to.not.be(undefined); 32 | expect(marker._container.parentNode).to.be(map._pathRoot); 33 | 34 | clock.tick(1000); 35 | }); 36 | it('appears when added to the group after the group is added to the map', function () { 37 | 38 | var group = new L.MarkerClusterGroup(); 39 | var marker = new L.Circle([1.5, 1.5], 200); 40 | 41 | group.addLayer(marker); 42 | map.addLayer(group); 43 | 44 | expect(marker._container).to.not.be(undefined); 45 | expect(marker._container.parentNode).to.be(map._pathRoot); 46 | 47 | clock.tick(1000); 48 | }); 49 | it('appears animated when added to the group after the group is added to the map', function () { 50 | 51 | var group = new L.MarkerClusterGroup({ animateAddingMarkers: true }); 52 | var marker = new L.Circle([1.5, 1.5], 200); 53 | var marker2 = new L.Circle([1.5, 1.5], 200); 54 | 55 | map.addLayer(group); 56 | group.addLayer(marker); 57 | group.addLayer(marker2); 58 | 59 | expect(marker._container.parentNode).to.be(map._pathRoot); 60 | expect(marker2._container.parentNode).to.be(map._pathRoot); 61 | 62 | clock.tick(1000); 63 | }); 64 | 65 | 66 | it('creates a cluster when 2 overlapping markers are added before the group is added to the map', function () { 67 | 68 | var group = new L.MarkerClusterGroup(); 69 | var marker = new L.Circle([1.5, 1.5], 200); 70 | var marker2 = new L.Circle([1.5, 1.5], 200); 71 | 72 | group.addLayers([marker, marker2]); 73 | map.addLayer(group); 74 | 75 | expect(marker._container).to.be(undefined); 76 | expect(marker2._container).to.be(undefined); 77 | 78 | expect(map._panes.markerPane.childNodes.length).to.be(1); 79 | 80 | clock.tick(1000); 81 | }); 82 | it('creates a cluster when 2 overlapping markers are added after the group is added to the map', function () { 83 | 84 | var group = new L.MarkerClusterGroup(); 85 | var marker = new L.Circle([1.5, 1.5], 200); 86 | var marker2 = new L.Circle([1.5, 1.5], 200); 87 | 88 | map.addLayer(group); 89 | group.addLayer(marker); 90 | group.addLayer(marker2); 91 | 92 | expect(marker._container.parentNode).to.be(null); //Removed then re-added, so null 93 | expect(marker2._container).to.be(undefined); 94 | 95 | expect(map._panes.markerPane.childNodes.length).to.be(1); 96 | 97 | clock.tick(1000); 98 | }); 99 | 100 | it('disappears when removed from the group', function () { 101 | 102 | var group = new L.MarkerClusterGroup(); 103 | var marker = new L.Circle([1.5, 1.5], 200); 104 | 105 | group.addLayer(marker); 106 | map.addLayer(group); 107 | 108 | expect(marker._container).to.not.be(undefined); 109 | expect(marker._container.parentNode).to.be(map._pathRoot); 110 | 111 | group.removeLayer(marker); 112 | 113 | expect(marker._container.parentNode).to.be(null); 114 | 115 | clock.tick(1000); 116 | }); 117 | 118 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/DistanceGridSpec.js: -------------------------------------------------------------------------------- 1 | describe('distance grid', function () { 2 | it('addObject', function () { 3 | var grid = new L.DistanceGrid(100), 4 | obj = {}; 5 | 6 | expect(grid.addObject(obj, { x: 0, y: 0 })).to.eql(undefined); 7 | expect(grid.removeObject(obj, { x: 0, y: 0 })).to.eql(true); 8 | }); 9 | 10 | it('eachObject', function (done) { 11 | var grid = new L.DistanceGrid(100), 12 | obj = {}; 13 | 14 | expect(grid.addObject(obj, { x: 0, y: 0 })).to.eql(undefined); 15 | 16 | grid.eachObject(function(o) { 17 | expect(o).to.eql(obj); 18 | done(); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/LeafletSpec.js: -------------------------------------------------------------------------------- 1 | describe('L#noConflict', function() { 2 | it('restores the previous L value and returns Leaflet namespace', function(){ 3 | 4 | expect(L.version).to.be.ok(); 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/QuickHullSpec.js: -------------------------------------------------------------------------------- 1 | describe('quickhull', function () { 2 | describe('getDistant', function () { 3 | it('zero distance', function () { 4 | var bl = [ 5 | { lat: 0, lng: 0 }, 6 | { lat: 0, lng: 10 } 7 | ]; 8 | expect(L.QuickHull.getDistant({ lat: 0, lng: 0 }, bl)).to.eql(0); 9 | }); 10 | it('non-zero distance', function () { 11 | var bl = [ 12 | { lat: 0, lng: 0 }, 13 | { lat: 0, lng: 10 } 14 | ]; 15 | expect(L.QuickHull.getDistant({ lat: 5, lng: 5 }, bl)).to.eql(-50); 16 | }); 17 | }); 18 | 19 | describe('getConvexHull', function () { 20 | it('creates a hull', function () { 21 | expect(L.QuickHull.getConvexHull([ { lat: 0, lng: 0 }, 22 | { lat: 10, lng: 0 }, 23 | { lat: 10, lng: 10 }, 24 | { lat: 0, lng: 10 }, 25 | { lat: 5, lng: 5 } 26 | ])).to.eql([ 27 | { lat: 0, lng: 10 }, 28 | { lat: 10, lng: 10 }, 29 | { lat: 10, lng: 0 }, 30 | { lat: 0, lng: 0 } 31 | ]); 32 | }); 33 | it('creates a hull for vertically-aligned objects', function () { 34 | expect(L.QuickHull.getConvexHull([ { lat: 0, lng: 0 }, 35 | { lat: 5, lng: 0 }, 36 | { lat: 10, lng: 0 } 37 | ])).to.eql([ 38 | { lat: 0, lng: 0 }, 39 | { lat: 10, lng: 0 } 40 | ]); 41 | }); 42 | it('creates a hull for horizontally-aligned objects', function () { 43 | expect(L.QuickHull.getConvexHull([ { lat: 0, lng: 0 }, 44 | { lat: 0, lng: 5 }, 45 | { lat: 0, lng: 10 } 46 | ])).to.eql([ 47 | { lat: 0, lng: 0 }, 48 | { lat: 0, lng: 10 } 49 | ]); 50 | }); 51 | }); 52 | }); 53 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/SpecHelper.js: -------------------------------------------------------------------------------- 1 | function noSpecs() { 2 | xit('has no specs'); 3 | } 4 | 5 | if (!Array.prototype.map) { 6 | Array.prototype.map = function(fun /*, thisp */) { 7 | "use strict"; 8 | 9 | if (this === void 0 || this === null) 10 | throw new TypeError(); 11 | 12 | var t = Object(this); 13 | var len = t.length >>> 0; 14 | if (typeof fun !== "function") 15 | throw new TypeError(); 16 | 17 | var res = new Array(len); 18 | var thisp = arguments[1]; 19 | for (var i = 0; i < len; i++) { 20 | if (i in t) 21 | res[i] = fun.call(thisp, t[i], i, t); 22 | } 23 | 24 | return res; 25 | }; 26 | } -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/clearLayersSpec.js: -------------------------------------------------------------------------------- 1 | describe('clearLayer', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | it('clears everything before adding to map', function () { 21 | var group = new L.MarkerClusterGroup(); 22 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 23 | var marker = new L.Marker([1.5, 1.5]); 24 | 25 | group.addLayers([polygon, marker]); 26 | group.clearLayers(); 27 | 28 | expect(group.hasLayer(polygon)).to.be(false); 29 | expect(group.hasLayer(marker)).to.be(false); 30 | }); 31 | 32 | it('hits polygons and markers after adding to map', function () { 33 | var group = new L.MarkerClusterGroup(); 34 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 35 | var marker = new L.Marker([1.5, 1.5]); 36 | 37 | group.addLayers([polygon, marker]); 38 | map.addLayer(group); 39 | group.clearLayers(); 40 | 41 | expect(group.hasLayer(polygon)).to.be(false); 42 | expect(group.hasLayer(marker)).to.be(false); 43 | }); 44 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/eachLayerSpec.js: -------------------------------------------------------------------------------- 1 | describe('eachLayer', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | it('hits polygons and markers before adding to map', function () { 21 | var group = new L.MarkerClusterGroup(); 22 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 23 | var marker = new L.Marker([1.5, 1.5]); 24 | 25 | group.addLayers([polygon, marker]); 26 | 27 | var layers = []; 28 | group.eachLayer(function (l) { 29 | layers.push(l); 30 | }); 31 | 32 | expect(layers.length).to.be(2); 33 | expect(layers).to.contain(marker); 34 | expect(layers).to.contain(polygon); 35 | }); 36 | 37 | it('hits polygons and markers after adding to map', function () { 38 | var group = new L.MarkerClusterGroup(); 39 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 40 | var marker = new L.Marker([1.5, 1.5]); 41 | 42 | group.addLayers([polygon, marker]); 43 | map.addLayer(group); 44 | 45 | var layers = []; 46 | group.eachLayer(function (l) { 47 | layers.push(l); 48 | }); 49 | 50 | expect(layers.length).to.be(2); 51 | expect(layers).to.contain(marker); 52 | expect(layers).to.contain(polygon); 53 | }); 54 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/getLayersSpec.js: -------------------------------------------------------------------------------- 1 | describe('getLayers', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | it('hits polygons and markers before adding to map', function () { 21 | var group = new L.MarkerClusterGroup(); 22 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 23 | var marker = new L.Marker([1.5, 1.5]); 24 | 25 | group.addLayers([polygon, marker]); 26 | 27 | var layers = group.getLayers(); 28 | 29 | expect(layers.length).to.be(2); 30 | expect(layers).to.contain(marker); 31 | expect(layers).to.contain(polygon); 32 | }); 33 | 34 | it('hits polygons and markers after adding to map', function () { 35 | var group = new L.MarkerClusterGroup(); 36 | var polygon = new L.Polygon([[1.5, 1.5], [2.0, 1.5], [2.0, 2.0], [1.5, 2.0]]); 37 | var marker = new L.Marker([1.5, 1.5]); 38 | 39 | group.addLayers([polygon, marker]); 40 | map.addLayer(group); 41 | 42 | var layers = group.getLayers(); 43 | 44 | expect(layers.length).to.be(2); 45 | expect(layers).to.contain(marker); 46 | expect(layers).to.contain(polygon); 47 | }); 48 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/getVisibleParentSpec.js: -------------------------------------------------------------------------------- 1 | describe('getVisibleParent', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | it('gets the marker if the marker is visible', function () { 21 | var group = new L.MarkerClusterGroup(); 22 | var marker = new L.Marker([1.5, 1.5]); 23 | 24 | group.addLayer(marker); 25 | map.addLayer(group); 26 | 27 | var vp = group.getVisibleParent(marker); 28 | 29 | expect(vp).to.be(marker); 30 | }); 31 | 32 | it('gets the visible cluster if it is clustered', function () { 33 | var group = new L.MarkerClusterGroup(); 34 | var marker = new L.Marker([1.5, 1.5]); 35 | var marker2 = new L.Marker([1.5, 1.5]); 36 | 37 | group.addLayers([marker, marker2]); 38 | map.addLayer(group); 39 | 40 | var vp = group.getVisibleParent(marker); 41 | 42 | expect(vp).to.be.a(L.MarkerCluster); 43 | expect(vp._icon).to.not.be(null); 44 | expect(vp._icon).to.not.be(undefined); 45 | }); 46 | 47 | it('returns null if the marker and parents are all not visible', function () { 48 | var group = new L.MarkerClusterGroup(); 49 | var marker = new L.Marker([5.5, 1.5]); 50 | var marker2 = new L.Marker([5.5, 1.5]); 51 | 52 | group.addLayers([marker, marker2]); 53 | map.addLayer(group); 54 | 55 | var vp = group.getVisibleParent(marker); 56 | 57 | expect(vp).to.be(null); 58 | }); 59 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/onAddSpec.js: -------------------------------------------------------------------------------- 1 | describe('onAdd', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | 21 | it('throws an error if maxZoom is not specified', function () { 22 | 23 | var group = new L.MarkerClusterGroup(); 24 | var marker = new L.Marker([1.5, 1.5]); 25 | 26 | group.addLayer(marker); 27 | 28 | var ex = null; 29 | try { 30 | map.addLayer(group); 31 | } catch (e) { 32 | ex = e; 33 | } 34 | 35 | expect(ex).to.not.be(null); 36 | }); 37 | 38 | it('successfully handles removing and re-adding a layer while not on the map', function () { 39 | map.options.maxZoom = 18; 40 | var group = new L.MarkerClusterGroup(); 41 | var marker = new L.Marker([1.5, 1.5]); 42 | 43 | map.addLayer(group); 44 | group.addLayer(marker); 45 | 46 | map.removeLayer(group); 47 | group.removeLayer(marker); 48 | group.addLayer(marker); 49 | 50 | map.addLayer(group); 51 | 52 | expect(map.hasLayer(group)).to.be(true); 53 | expect(group.hasLayer(marker)).to.be(true); 54 | }); 55 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/onRemoveSpec.js: -------------------------------------------------------------------------------- 1 | describe('onRemove', function () { 2 | var map, div; 3 | beforeEach(function () { 4 | div = document.createElement('div'); 5 | div.style.width = '200px'; 6 | div.style.height = '200px'; 7 | document.body.appendChild(div); 8 | 9 | map = L.map(div, { maxZoom: 18 }); 10 | 11 | map.fitBounds(new L.LatLngBounds([ 12 | [1, 1], 13 | [2, 2] 14 | ])); 15 | }); 16 | afterEach(function () { 17 | document.body.removeChild(div); 18 | }); 19 | 20 | 21 | it('removes the shown coverage polygon', function () { 22 | 23 | var group = new L.MarkerClusterGroup(); 24 | var marker = new L.Marker([1.5, 1.5]); 25 | var marker2 = new L.Marker([1.5, 1.5]); 26 | var marker3 = new L.Marker([1.5, 1.5]); 27 | 28 | group.addLayer(marker); 29 | group.addLayer(marker2); 30 | group.addLayer(marker3); 31 | 32 | map.addLayer(group); 33 | 34 | group._showCoverage({ layer: group._topClusterLevel }); 35 | 36 | expect(group._shownPolygon).to.not.be(null); 37 | 38 | map.removeLayer(group); 39 | 40 | expect(group._shownPolygon).to.be(null); 41 | }); 42 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/removeLayersSpec.js: -------------------------------------------------------------------------------- 1 | describe('removeLayers', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | div = document.createElement('div'); 6 | div.style.width = '200px'; 7 | div.style.height = '200px'; 8 | document.body.appendChild(div); 9 | 10 | map = L.map(div, { maxZoom: 18 }); 11 | 12 | map.fitBounds(new L.LatLngBounds([ 13 | [1, 1], 14 | [2, 2] 15 | ])); 16 | }); 17 | afterEach(function () { 18 | clock.restore(); 19 | document.body.removeChild(div); 20 | }); 21 | 22 | it('removes all the layer given to it', function () { 23 | 24 | var group = new L.MarkerClusterGroup(); 25 | var markers = [ 26 | new L.Marker([1.5, 1.5]), 27 | new L.Marker([1.5, 1.5]), 28 | new L.Marker([1.5, 1.5]) 29 | ]; 30 | 31 | map.addLayer(group); 32 | 33 | group.addLayers(markers); 34 | 35 | group.removeLayers(markers); 36 | 37 | expect(group.hasLayer(markers[0])).to.be(false); 38 | expect(group.hasLayer(markers[1])).to.be(false); 39 | expect(group.hasLayer(markers[2])).to.be(false); 40 | 41 | expect(group.getLayers().length).to.be(0); 42 | }); 43 | 44 | it('removes all the layer given to it even if the group is not on the map', function () { 45 | 46 | var group = new L.MarkerClusterGroup(); 47 | var markers = [ 48 | new L.Marker([1.5, 1.5]), 49 | new L.Marker([1.5, 1.5]), 50 | new L.Marker([1.5, 1.5]) 51 | ]; 52 | 53 | map.addLayer(group); 54 | group.addLayers(markers); 55 | map.removeLayer(group); 56 | group.removeLayers(markers); 57 | map.addLayer(group); 58 | 59 | expect(group.hasLayer(markers[0])).to.be(false); 60 | expect(group.hasLayer(markers[1])).to.be(false); 61 | expect(group.hasLayer(markers[2])).to.be(false); 62 | 63 | expect(group.getLayers().length).to.be(0); 64 | }); 65 | 66 | it('doesnt break if we are spiderfied', function () { 67 | 68 | var group = new L.MarkerClusterGroup(); 69 | var markers = [ 70 | new L.Marker([1.5, 1.5]), 71 | new L.Marker([1.5, 1.5]), 72 | new L.Marker([1.5, 1.5]) 73 | ]; 74 | 75 | map.addLayer(group); 76 | 77 | group.addLayers(markers); 78 | 79 | markers[0].__parent.spiderfy(); 80 | 81 | // We must wait for the spiderfy animation to timeout 82 | clock.tick(200); 83 | 84 | group.removeLayers(markers); 85 | 86 | expect(group.hasLayer(markers[0])).to.be(false); 87 | expect(group.hasLayer(markers[1])).to.be(false); 88 | expect(group.hasLayer(markers[2])).to.be(false); 89 | 90 | expect(group.getLayers().length).to.be(0); 91 | 92 | group.on('spiderfied', function() { 93 | expect(group._spiderfied).to.be(null); 94 | }); 95 | }); 96 | }); 97 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/singleMarkerModeSpec.js: -------------------------------------------------------------------------------- 1 | describe('singleMarkerMode option', function () { 2 | 3 | /** 4 | * Avoid as much as possible creating and destroying objects for each test. 5 | * Instead, try re-using them, except for the ones under test of course. 6 | * PhantomJS does not perform garbage collection for the life of the page, 7 | * i.e. during the entire test process (Karma runs all tests in a single page). 8 | * http://stackoverflow.com/questions/27239708/how-to-get-around-memory-error-with-karma-phantomjs 9 | * 10 | * The `beforeEach` and `afterEach do not seem to cause much issue. 11 | * => they can still be used to initialize some setup between each test. 12 | * Using them keeps a readable spec/index. 13 | * 14 | * But refrain from re-creating div and map every time. Re-use those objects. 15 | */ 16 | 17 | ///////////////////////////// 18 | // SETUP FOR EACH TEST 19 | ///////////////////////////// 20 | 21 | beforeEach(function () { 22 | 23 | // Reset the marker icon. 24 | marker.setIcon(defaultIcon); 25 | 26 | }); 27 | 28 | afterEach(function () { 29 | 30 | if (group instanceof L.MarkerClusterGroup) { 31 | group.removeLayers(group.getLayers()); 32 | map.removeLayer(group); 33 | } 34 | 35 | // Throw away group as it can be assigned with different configurations between tests. 36 | group = null; 37 | 38 | }); 39 | 40 | 41 | ///////////////////////////// 42 | // PREPARATION CODE 43 | ///////////////////////////// 44 | 45 | var div, map, group; 46 | 47 | var defaultIcon = new L.Icon.Default(), 48 | clusterIcon = new L.Icon.Default(), 49 | marker = L.marker([1.5, 1.5]); 50 | 51 | div = document.createElement('div'); 52 | div.style.width = '200px'; 53 | div.style.height = '200px'; 54 | document.body.appendChild(div); 55 | 56 | map = L.map(div, { maxZoom: 18 }); 57 | 58 | // Corresponds to zoom level 8 for the above div dimensions. 59 | map.fitBounds(new L.LatLngBounds([ 60 | [1, 1], 61 | [2, 2] 62 | ])); 63 | 64 | 65 | ///////////////////////////// 66 | // TESTS 67 | ///////////////////////////// 68 | 69 | it('overrides marker icons when set to true', function () { 70 | 71 | group = L.markerClusterGroup({ 72 | singleMarkerMode: true, 73 | iconCreateFunction: function (layer) { 74 | return clusterIcon; 75 | } 76 | }).addTo(map); 77 | 78 | expect(marker.options.icon).to.equal(defaultIcon); 79 | 80 | marker.addTo(group); 81 | 82 | expect(marker.options.icon).to.equal(clusterIcon); 83 | 84 | }); 85 | 86 | it('does not modify marker icons by default (or set to false)', function () { 87 | 88 | group = L.markerClusterGroup({ 89 | iconCreateFunction: function (layer) { 90 | return clusterIcon; 91 | } 92 | }).addTo(map); 93 | 94 | expect(marker.options.icon).to.equal(defaultIcon); 95 | 96 | marker.addTo(group); 97 | 98 | expect(marker.options.icon).to.equal(defaultIcon); 99 | 100 | }); 101 | 102 | 103 | ///////////////////////////// 104 | // CLEAN UP CODE 105 | ///////////////////////////// 106 | 107 | map.remove(); 108 | document.body.removeChild(div); 109 | 110 | }); 111 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/spiderfySpec.js: -------------------------------------------------------------------------------- 1 | describe('spiderfy', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | 6 | div = document.createElement('div'); 7 | div.style.width = '200px'; 8 | div.style.height = '200px'; 9 | document.body.appendChild(div); 10 | 11 | map = L.map(div, { maxZoom: 18 }); 12 | 13 | map.fitBounds(new L.LatLngBounds([ 14 | [1, 1], 15 | [2, 2] 16 | ])); 17 | }); 18 | afterEach(function () { 19 | clock.restore(); 20 | document.body.removeChild(div); 21 | }); 22 | 23 | it('Spiderfies 2 Markers', function () { 24 | 25 | var group = new L.MarkerClusterGroup(); 26 | var marker = new L.Marker([1.5, 1.5]); 27 | var marker2 = new L.Marker([1.5, 1.5]); 28 | 29 | group.addLayer(marker); 30 | group.addLayer(marker2); 31 | map.addLayer(group); 32 | 33 | marker.__parent.spiderfy(); 34 | 35 | expect(marker._icon.parentNode).to.be(map._panes.markerPane); 36 | expect(marker2._icon.parentNode).to.be(map._panes.markerPane); 37 | }); 38 | 39 | it('Spiderfies 2 CircleMarkers', function () { 40 | 41 | var group = new L.MarkerClusterGroup(); 42 | var marker = new L.CircleMarker([1.5, 1.5]); 43 | var marker2 = new L.CircleMarker([1.5, 1.5]); 44 | 45 | group.addLayer(marker); 46 | group.addLayer(marker2); 47 | map.addLayer(group); 48 | 49 | marker.__parent.spiderfy(); 50 | 51 | expect(marker._container.parentNode).to.be(map._pathRoot); 52 | expect(marker2._container.parentNode).to.be(map._pathRoot); 53 | }); 54 | 55 | it('Spiderfies 2 Circles', function () { 56 | 57 | var group = new L.MarkerClusterGroup(); 58 | var marker = new L.Circle([1.5, 1.5], 10); 59 | var marker2 = new L.Circle([1.5, 1.5], 10); 60 | 61 | group.addLayer(marker); 62 | group.addLayer(marker2); 63 | map.addLayer(group); 64 | 65 | marker.__parent.spiderfy(); 66 | 67 | expect(marker._container.parentNode).to.be(map._pathRoot); 68 | expect(marker2._container.parentNode).to.be(map._pathRoot); 69 | }); 70 | 71 | describe('zoomend event listener', function () { 72 | it('unspiderfies correctly', function () { 73 | 74 | var group = new L.MarkerClusterGroup(); 75 | var marker = new L.Circle([1.5, 1.5], 10); 76 | var marker2 = new L.Circle([1.5, 1.5], 10); 77 | 78 | group.addLayer(marker); 79 | group.addLayer(marker2); 80 | map.addLayer(group); 81 | 82 | marker.__parent.spiderfy(); 83 | 84 | expect(group._spiderfied).to.not.be(null); 85 | 86 | map.fire('zoomend'); 87 | 88 | //We should unspiderfy with no animation, so this should be null 89 | expect(group._spiderfied).to.be(null); 90 | }); 91 | }); 92 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/spec/suites/zoomAnimationSpec.js: -------------------------------------------------------------------------------- 1 | describe('zoomAnimation', function () { 2 | var map, div, clock; 3 | beforeEach(function () { 4 | clock = sinon.useFakeTimers(); 5 | 6 | div = document.createElement('div'); 7 | div.style.width = '200px'; 8 | div.style.height = '200px'; 9 | document.body.appendChild(div); 10 | 11 | map = L.map(div, { maxZoom: 18 }); 12 | }); 13 | afterEach(function () { 14 | clock.restore(); 15 | 16 | document.body.removeChild(div); 17 | }); 18 | 19 | it('adds the visible marker to the map when zooming in', function () { 20 | map.setView(new L.LatLng(-37.36142550190516, 174.254150390625), 7); 21 | 22 | var markers = new L.MarkerClusterGroup({ 23 | showCoverageOnHover: true, 24 | maxClusterRadius: 20, 25 | disableClusteringAtZoom: 15 26 | }); 27 | var marker = new L.Marker([-37.77852090603777, 175.3103667497635]); 28 | markers.addLayer(marker); //The one we zoom in on 29 | markers.addLayer(new L.Marker([-37.711800591811055, 174.50034790039062])); //Marker that we cluster with at the top zoom level, but not 1 level down 30 | map.addLayer(markers); 31 | 32 | clock.tick(1000); 33 | map.setView([-37.77852090603777, 175.3103667497635], 15); 34 | 35 | //Run the the animation 36 | clock.tick(1000); 37 | 38 | expect(marker._icon).to.not.be(undefined); 39 | expect(marker._icon).to.not.be(null); 40 | }); 41 | 42 | it('adds the visible marker to the map when jumping around', function () { 43 | 44 | var markers = new L.MarkerClusterGroup(); 45 | var marker1 = new L.Marker([48.858280181884766, 2.2945759296417236]); 46 | var marker2 = new L.Marker([16.02359962463379, -61.70280075073242]); 47 | markers.addLayer(marker1); //The one we zoom in on first 48 | markers.addLayer(marker2); //Marker that we cluster with at the top zoom level, but not 1 level down 49 | map.addLayer(markers); 50 | 51 | //show the first 52 | map.fitBounds(new L.LatLngBounds(new L.LatLng(41.371582, -5.142222), new L.LatLng(51.092804, 9.561556))); 53 | 54 | clock.tick(1000); 55 | 56 | map.fitBounds(new L.LatLngBounds(new L.LatLng(15.830972671508789, -61.807167053222656), new L.LatLng(16.516849517822266, -61.0))); 57 | 58 | //Run the the animation 59 | clock.tick(1000); 60 | 61 | //Now the second one should be visible on the map 62 | expect(marker2._icon).to.not.be(undefined); 63 | expect(marker2._icon).to.not.be(null); 64 | }); 65 | 66 | it('adds the visible markers to the map, but not parent clusters when jumping around', function () { 67 | 68 | var markers = new L.MarkerClusterGroup(), 69 | marker1 = new L.Marker([59.9520, 30.3307]), 70 | marker2 = new L.Marker([59.9516, 30.3308]), 71 | marker3 = new L.Marker([59.9513, 30.3312]); 72 | 73 | markers.addLayer(marker1); 74 | markers.addLayer(marker2); 75 | markers.addLayer(marker3); 76 | map.addLayer(markers); 77 | 78 | //Show none of them 79 | map.setView([53.0676, 170.6835], 16); 80 | 81 | clock.tick(1000); 82 | 83 | //Zoom so that all the markers will be visible (Same as zoomToShowLayer) 84 | map.setView(marker1.getLatLng(), 18); 85 | 86 | //Run the the animation 87 | clock.tick(1000); 88 | 89 | //Now the markers should all be visible, and there should be no visible clusters 90 | expect(marker1._icon.parentNode).to.be(map._panes.markerPane); 91 | expect(marker2._icon.parentNode).to.be(map._panes.markerPane); 92 | expect(marker3._icon.parentNode).to.be(map._panes.markerPane); 93 | expect(map._panes.markerPane.childNodes.length).to.be(3); 94 | }); 95 | }); -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/src/DistanceGrid.js: -------------------------------------------------------------------------------- 1 | 2 | L.DistanceGrid = function (cellSize) { 3 | this._cellSize = cellSize; 4 | this._sqCellSize = cellSize * cellSize; 5 | this._grid = {}; 6 | this._objectPoint = { }; 7 | }; 8 | 9 | L.DistanceGrid.prototype = { 10 | 11 | addObject: function (obj, point) { 12 | var x = this._getCoord(point.x), 13 | y = this._getCoord(point.y), 14 | grid = this._grid, 15 | row = grid[y] = grid[y] || {}, 16 | cell = row[x] = row[x] || [], 17 | stamp = L.Util.stamp(obj); 18 | 19 | this._objectPoint[stamp] = point; 20 | 21 | cell.push(obj); 22 | }, 23 | 24 | updateObject: function (obj, point) { 25 | this.removeObject(obj); 26 | this.addObject(obj, point); 27 | }, 28 | 29 | //Returns true if the object was found 30 | removeObject: function (obj, point) { 31 | var x = this._getCoord(point.x), 32 | y = this._getCoord(point.y), 33 | grid = this._grid, 34 | row = grid[y] = grid[y] || {}, 35 | cell = row[x] = row[x] || [], 36 | i, len; 37 | 38 | delete this._objectPoint[L.Util.stamp(obj)]; 39 | 40 | for (i = 0, len = cell.length; i < len; i++) { 41 | if (cell[i] === obj) { 42 | 43 | cell.splice(i, 1); 44 | 45 | if (len === 1) { 46 | delete row[x]; 47 | } 48 | 49 | return true; 50 | } 51 | } 52 | 53 | }, 54 | 55 | eachObject: function (fn, context) { 56 | var i, j, k, len, row, cell, removed, 57 | grid = this._grid; 58 | 59 | for (i in grid) { 60 | row = grid[i]; 61 | 62 | for (j in row) { 63 | cell = row[j]; 64 | 65 | for (k = 0, len = cell.length; k < len; k++) { 66 | removed = fn.call(context, cell[k]); 67 | if (removed) { 68 | k--; 69 | len--; 70 | } 71 | } 72 | } 73 | } 74 | }, 75 | 76 | getNearObject: function (point) { 77 | var x = this._getCoord(point.x), 78 | y = this._getCoord(point.y), 79 | i, j, k, row, cell, len, obj, dist, 80 | objectPoint = this._objectPoint, 81 | closestDistSq = this._sqCellSize, 82 | closest = null; 83 | 84 | for (i = y - 1; i <= y + 1; i++) { 85 | row = this._grid[i]; 86 | if (row) { 87 | 88 | for (j = x - 1; j <= x + 1; j++) { 89 | cell = row[j]; 90 | if (cell) { 91 | 92 | for (k = 0, len = cell.length; k < len; k++) { 93 | obj = cell[k]; 94 | dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point); 95 | if (dist < closestDistSq) { 96 | closestDistSq = dist; 97 | closest = obj; 98 | } 99 | } 100 | } 101 | } 102 | } 103 | } 104 | return closest; 105 | }, 106 | 107 | _getCoord: function (x) { 108 | return Math.floor(x / this._cellSize); 109 | }, 110 | 111 | _sqDist: function (p, p2) { 112 | var dx = p2.x - p.x, 113 | dy = p2.y - p.y; 114 | return dx * dx + dy * dy; 115 | } 116 | }; 117 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/src/MarkerOpacity.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Extends L.Marker to include two extra methods: clusterHide and clusterShow. 4 | * 5 | * They work as setOpacity(0) and setOpacity(1) respectively, but 6 | * they will remember the marker's opacity when hiding and showing it again. 7 | * 8 | */ 9 | 10 | 11 | L.Marker.include({ 12 | 13 | clusterHide: function () { 14 | this.options.opacityWhenUnclustered = this.options.opacity || 1; 15 | return this.setOpacity(0); 16 | }, 17 | 18 | clusterShow: function () { 19 | var ret = this.setOpacity(this.options.opacity || this.options.opacityWhenUnclustered); 20 | delete this.options.opacityWhenUnclustered; 21 | return ret; 22 | } 23 | 24 | }); 25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/Leaflet.markercluster/src/copyright.js: -------------------------------------------------------------------------------- 1 | /* 2 | Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. 3 | https://github.com/Leaflet/Leaflet.markercluster 4 | (c) 2012-2013, Dave Leaver, smartrak 5 | */ 6 | -------------------------------------------------------------------------------- /lib/Remodal/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "libs" 3 | } 4 | -------------------------------------------------------------------------------- /lib/Remodal/.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | -------------------------------------------------------------------------------- /lib/Remodal/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | node_modules/ 4 | libs/ 5 | !libs/jquery-loader.js 6 | -------------------------------------------------------------------------------- /lib/Remodal/.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | "disallowSpacesInNamedFunctionExpression": { 3 | "beforeOpeningRoundBrace": true 4 | }, 5 | "disallowSpacesInFunctionExpression": { 6 | "beforeOpeningRoundBrace": true 7 | }, 8 | "disallowSpacesInAnonymousFunctionExpression": { 9 | "beforeOpeningRoundBrace": true 10 | }, 11 | "disallowSpacesInFunctionDeclaration": { 12 | "beforeOpeningRoundBrace": true 13 | }, 14 | "disallowEmptyBlocks": true, 15 | "disallowSpacesInCallExpression": true, 16 | "disallowSpacesInsideArrayBrackets": true, 17 | "disallowSpacesInsideParentheses": true, 18 | "disallowQuotedKeysInObjects": true, 19 | "disallowSpaceAfterObjectKeys": true, 20 | "disallowSpaceAfterPrefixUnaryOperators": true, 21 | "disallowSpaceBeforePostfixUnaryOperators": true, 22 | "disallowSpaceBeforeBinaryOperators": [ 23 | "," 24 | ], 25 | "disallowMixedSpacesAndTabs": true, 26 | "disallowTrailingWhitespace": true, 27 | "disallowTrailingComma": true, 28 | "disallowYodaConditions": true, 29 | "disallowKeywords": [ "with" ], 30 | "disallowKeywordsOnNewLine": ["else"], 31 | "disallowMultipleLineBreaks": true, 32 | "disallowMultipleLineStrings": true, 33 | "disallowMultipleVarDecl": true, 34 | "requireSpaceBeforeBlockStatements": true, 35 | "requireParenthesesAroundIIFE": true, 36 | "requireSpacesInConditionalExpression": true, 37 | "requireBlocksOnNewline": 1, 38 | "requireCommaBeforeLineBreak": true, 39 | "requireSpaceBeforeBinaryOperators": true, 40 | "requireSpaceAfterBinaryOperators": true, 41 | "requireCamelCaseOrUpperCaseIdentifiers": true, 42 | "requireLineFeedAtFileEnd": true, 43 | "requireCapitalizedConstructors": true, 44 | "requireDotNotation": true, 45 | "requireSpacesInForStatement": true, 46 | "requireSpaceBetweenArguments": true, 47 | "requireCurlyBraces": [ 48 | "do" 49 | ], 50 | "requireSpaceAfterKeywords": [ 51 | "if", 52 | "else", 53 | "for", 54 | "while", 55 | "do", 56 | "switch", 57 | "case", 58 | "return", 59 | "try", 60 | "catch", 61 | "typeof" 62 | ], 63 | "requirePaddingNewLinesBeforeLineComments": { 64 | "allExcept": "firstAfterCurly" 65 | }, 66 | "requirePaddingNewLinesAfterBlocks": true, 67 | "requireSemicolons": true, 68 | "validateLineBreaks": "LF", 69 | "validateQuoteMarks": "'", 70 | "validateIndentation": 2 71 | } 72 | -------------------------------------------------------------------------------- /lib/Remodal/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": true, 3 | "curly": true, 4 | "eqeqeq": true, 5 | "eqnull": true, 6 | "expr": true, 7 | "immed": true, 8 | "noarg": true, 9 | "quotmark": "single", 10 | "unused": true 11 | } 12 | -------------------------------------------------------------------------------- /lib/Remodal/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.12 4 | install: npm start 5 | sudo: false 6 | -------------------------------------------------------------------------------- /lib/Remodal/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | CONTRIBUTING 2 | ==== 3 | 4 | 1. Fork. 5 | 2. Run `npm start`. 6 | 3. Make your changes on the `src` folder. 7 | 4. Update tests. 8 | 5. Run `npm test`, make sure everything is okay. 9 | 6. Submit a pull request to the master branch. 10 | 11 | Thanks. 12 | -------------------------------------------------------------------------------- /lib/Remodal/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Ilya Makarov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /lib/Remodal/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remodal", 3 | "homepage": "http://vodkabears.github.io/remodal/", 4 | "authors": [ 5 | "Ilya Makarov " 6 | ], 7 | "description": "Responsive, lightweight, fast, synchronized with CSS animations, fully customizable modal window plugin with hash tracking.", 8 | "main": [ 9 | "dist/remodal.js", 10 | "dist/remodal.css", 11 | "dist/remodal-default-theme.css" 12 | ], 13 | "ignore": [ 14 | "**/.*", 15 | "examples/", 16 | "libs/", 17 | "src/", 18 | "test/", 19 | "*.md", 20 | "Gruntfile.js", 21 | "package.json" 22 | ], 23 | "keywords": [ 24 | "jquery", 25 | "plugin", 26 | "jquery-plugin", 27 | "flat", 28 | "responsive", 29 | "modal", 30 | "popup", 31 | "window", 32 | "dialog", 33 | "popin", 34 | "lightbox", 35 | "ui", 36 | "zepto", 37 | "synchronized", 38 | "animations" 39 | ], 40 | "license": "MIT", 41 | "dependencies": { 42 | "jquery": "*" 43 | }, 44 | "devDependencies": { 45 | "qunit": "^1.19.0", 46 | "jquery": "jquery#^1.11.3", 47 | "jquery2": "jquery#^2.1.4", 48 | "zepto": "^1.1.6" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/Remodal/dist/remodal-default-theme.min.css: -------------------------------------------------------------------------------- 1 | .remodal-bg.remodal-is-opening,.remodal-bg.remodal-is-opened{-webkit-filter:blur(3px);filter:blur(3px)}.remodal-overlay{background:rgba(43,46,56,0.9)}.remodal-overlay.remodal-is-opening,.remodal-overlay.remodal-is-closing{-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.remodal-overlay.remodal-is-opening{-webkit-animation:remodal-overlay-opening-keyframes .3s;animation:remodal-overlay-opening-keyframes .3s}.remodal-overlay.remodal-is-closing{-webkit-animation:remodal-overlay-closing-keyframes .3s;animation:remodal-overlay-closing-keyframes .3s}.remodal-wrapper{padding:10px 10px 0}.remodal{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-bottom:10px;padding:35px;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);color:#2b2e38;background:#fff}.remodal.remodal-is-opening,.remodal.remodal-is-closing{-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.remodal.remodal-is-opening{-webkit-animation:remodal-opening-keyframes .3s;animation:remodal-opening-keyframes .3s}.remodal.remodal-is-closing{-webkit-animation:remodal-closing-keyframes .3s;animation:remodal-closing-keyframes .3s}.remodal,.remodal-wrapper:after{vertical-align:middle}.remodal-close{position:absolute;top:0;left:0;display:block;overflow:visible;width:35px;height:35px;margin:0;padding:0;cursor:pointer;-webkit-transition:color .2s;transition:color .2s;text-decoration:none;color:#95979c;border:0;outline:0;background:transparent}.remodal-close:hover,.remodal-close:focus{color:#2b2e38}.remodal-close:before{font-family:Arial,"Helvetica CY","Nimbus Sans L",sans-serif !important;font-size:25px;line-height:35px;position:absolute;top:0;left:0;display:block;width:35px;content:"\00d7";text-align:center}.remodal-confirm,.remodal-cancel{font:inherit;display:inline-block;overflow:visible;min-width:110px;margin:0;padding:12px 0;cursor:pointer;-webkit-transition:background .2s;transition:background .2s;text-align:center;vertical-align:middle;text-decoration:none;border:0;outline:0}.remodal-confirm{color:#fff;background:#81c784}.remodal-confirm:hover,.remodal-confirm:focus{background:#66bb6a}.remodal-cancel{color:#fff;background:#e57373}.remodal-cancel:hover,.remodal-cancel:focus{background:#ef5350}.remodal-confirm::-moz-focus-inner,.remodal-cancel::-moz-focus-inner,.remodal-close::-moz-focus-inner{padding:0;border:0}@-webkit-keyframes remodal-opening-keyframes{from{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes remodal-opening-keyframes{from{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@-webkit-keyframes remodal-closing-keyframes{from{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(0.95);transform:scale(0.95);opacity:0}}@keyframes remodal-closing-keyframes{from{-webkit-transform:scale(1);transform:scale(1);opacity:1}to{-webkit-transform:scale(0.95);transform:scale(0.95);opacity:0}}@-webkit-keyframes remodal-overlay-opening-keyframes{from{opacity:0}to{opacity:1}}@keyframes remodal-overlay-opening-keyframes{from{opacity:0}to{opacity:1}}@-webkit-keyframes remodal-overlay-closing-keyframes{from{opacity:1}to{opacity:0}}@keyframes remodal-overlay-closing-keyframes{from{opacity:1}to{opacity:0}}@media only screen and (min-width:641px){.remodal{max-width:700px}}.lt-ie9 .remodal-overlay{background:#2b2e38}.lt-ie9 .remodal{width:700px} -------------------------------------------------------------------------------- /lib/Remodal/dist/remodal.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Remodal - v1.0.5 3 | * Responsive, lightweight, fast, synchronized with CSS animations, fully customizable modal window plugin with declarative configuration and hash tracking. 4 | * http://vodkabears.github.io/remodal/ 5 | * 6 | * Made by Ilya Makarov 7 | * Under MIT License 8 | */ 9 | 10 | /* ========================================================================== 11 | Remodal's necessary styles 12 | ========================================================================== */ 13 | 14 | /* Hide scroll bar */ 15 | 16 | html.remodal-is-locked { 17 | overflow: hidden; 18 | } 19 | 20 | /* Anti FOUC */ 21 | 22 | .remodal, 23 | [data-remodal-id] { 24 | display: none; 25 | } 26 | 27 | /* Necessary styles of the overlay */ 28 | 29 | .remodal-overlay { 30 | position: fixed; 31 | z-index: 9999; 32 | top: -5000px; 33 | right: -5000px; 34 | bottom: -5000px; 35 | left: -5000px; 36 | 37 | display: none; 38 | } 39 | 40 | /* Necessary styles of the wrapper */ 41 | 42 | .remodal-wrapper { 43 | position: fixed; 44 | z-index: 10000; 45 | top: 0; 46 | right: 0; 47 | bottom: 0; 48 | left: 0; 49 | 50 | display: none; 51 | overflow: auto; 52 | 53 | text-align: center; 54 | 55 | -webkit-overflow-scrolling: touch; 56 | } 57 | 58 | .remodal-wrapper:after { 59 | display: inline-block; 60 | 61 | height: 100%; 62 | margin-left: -0.05em; 63 | 64 | content: ""; 65 | } 66 | 67 | /* Fix iPad, iPhone glitches */ 68 | 69 | .remodal-overlay, 70 | .remodal-wrapper { 71 | -webkit-backface-visibility: hidden; 72 | backface-visibility: hidden; 73 | } 74 | 75 | /* Necessary styles of the modal dialog */ 76 | 77 | .remodal { 78 | position: relative; 79 | 80 | outline: none; 81 | 82 | -webkit-text-size-adjust: 100%; 83 | -moz-text-size-adjust: 100%; 84 | -ms-text-size-adjust: 100%; 85 | text-size-adjust: 100%; 86 | } 87 | 88 | .remodal-is-initialized { 89 | /* Disable Anti-FOUC */ 90 | display: inline-block; 91 | } 92 | -------------------------------------------------------------------------------- /lib/Remodal/dist/remodal.min.css: -------------------------------------------------------------------------------- 1 | html.remodal-is-locked{overflow:hidden}.remodal,[data-remodal-id]{display:none}.remodal-overlay{position:fixed;z-index:9999;top:-5000px;right:-5000px;bottom:-5000px;left:-5000px;display:none}.remodal-wrapper{position:fixed;z-index:10000;top:0;right:0;bottom:0;left:0;display:none;overflow:auto;text-align:center;-webkit-overflow-scrolling:touch}.remodal-wrapper:after{display:inline-block;height:100%;margin-left:-0.05em;content:""}.remodal-overlay,.remodal-wrapper{-webkit-backface-visibility:hidden;backface-visibility:hidden}.remodal{position:relative;outline:0;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}.remodal-is-initialized{display:inline-block} -------------------------------------------------------------------------------- /lib/Remodal/libs/jquery-loader.js: -------------------------------------------------------------------------------- 1 | !(function() { 2 | 3 | // Get any lib=___ param from the query string. 4 | var library = location.search.match(/[?&]lib=(.*?)(?=&|$)/); 5 | 6 | /* jshint -W060 */ 7 | if (library) { 8 | document.write(''); 9 | } else { 10 | document.write(''); 11 | } 12 | }()); 13 | -------------------------------------------------------------------------------- /lib/Remodal/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "remodal", 3 | "version": "1.0.5", 4 | "description": "Responsive, lightweight, fast, synchronized with CSS animations, fully customizable modal window plugin with declarative configuration and hash tracking.", 5 | "keywords": [ 6 | "jquery-plugin", 7 | "jquery", 8 | "plugin", 9 | "flat", 10 | "responsive", 11 | "modal", 12 | "popup", 13 | "window", 14 | "dialog", 15 | "popin", 16 | "lightbox", 17 | "ui", 18 | "zepto", 19 | "synchronized", 20 | "animations" 21 | ], 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/VodkaBears/Remodal.git" 25 | }, 26 | "bugs": { 27 | "url": "https://github.com/VodkaBears/Remodal/issues" 28 | }, 29 | "author": { 30 | "name": "Ilya Makarov", 31 | "email": "dfrost.00@gmail.com", 32 | "url": "https://github.com/VodkaBears" 33 | }, 34 | "homepage": "http://vodkabears.github.io/remodal/", 35 | "license": "MIT", 36 | "main": "dist/remodal.js", 37 | "dependencies": { 38 | "jquery": "*" 39 | }, 40 | "devDependencies": { 41 | "bower": "^1.5.3", 42 | "grunt": "^0.4.5", 43 | "grunt-autoprefixer": "^3.0.3", 44 | "grunt-browser-sync": "^2.1.3", 45 | "grunt-cli": "^0.1.13", 46 | "grunt-contrib-concat": "^0.5.1", 47 | "grunt-contrib-connect": "^0.11.2", 48 | "grunt-contrib-jshint": "^0.11.3", 49 | "grunt-contrib-qunit": "^0.7.0", 50 | "grunt-contrib-uglify": "^0.9.2", 51 | "grunt-contrib-watch": "^0.6.1", 52 | "grunt-csscomb": "3.0.0", 53 | "grunt-githooks": "^0.3.1", 54 | "grunt-jscs": "^2.1.0" 55 | }, 56 | "scripts": { 57 | "start": "npm install && ./node_modules/.bin/bower install && ./node_modules/.bin/grunt githooks", 58 | "test": "./node_modules/.bin/grunt test", 59 | "dist": "./node_modules/.bin/grunt" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/Remodal/src/remodal.css: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Remodal's necessary styles 3 | ========================================================================== */ 4 | 5 | /* Hide scroll bar */ 6 | 7 | html.remodal-is-locked { 8 | overflow: hidden; 9 | } 10 | 11 | /* Anti FOUC */ 12 | 13 | .remodal, 14 | [data-remodal-id] { 15 | display: none; 16 | } 17 | 18 | /* Necessary styles of the overlay */ 19 | 20 | .remodal-overlay { 21 | position: fixed; 22 | z-index: 9999; 23 | top: -5000px; 24 | right: -5000px; 25 | bottom: -5000px; 26 | left: -5000px; 27 | 28 | display: none; 29 | } 30 | 31 | /* Necessary styles of the wrapper */ 32 | 33 | .remodal-wrapper { 34 | position: fixed; 35 | z-index: 10000; 36 | top: 0; 37 | right: 0; 38 | bottom: 0; 39 | left: 0; 40 | 41 | display: none; 42 | overflow: auto; 43 | 44 | text-align: center; 45 | 46 | -webkit-overflow-scrolling: touch; 47 | } 48 | 49 | .remodal-wrapper:after { 50 | display: inline-block; 51 | 52 | height: 100%; 53 | margin-left: -0.05em; 54 | 55 | content: ""; 56 | } 57 | 58 | /* Fix iPad, iPhone glitches */ 59 | 60 | .remodal-overlay, 61 | .remodal-wrapper { 62 | backface-visibility: hidden; 63 | } 64 | 65 | /* Necessary styles of the modal dialog */ 66 | 67 | .remodal { 68 | position: relative; 69 | 70 | outline: none; 71 | 72 | text-size-adjust: 100%; 73 | } 74 | 75 | .remodal-is-initialized { 76 | /* Disable Anti-FOUC */ 77 | display: inline-block; 78 | } 79 | -------------------------------------------------------------------------------- /lib/Remodal/test/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": true, 3 | "curly": true, 4 | "eqeqeq": true, 5 | "eqnull": true, 6 | "expr": true, 7 | "immed": true, 8 | "noarg": true, 9 | "quotmark": "single", 10 | "unused": true, 11 | "predef": [ 12 | "jQuery", 13 | "Zepto", 14 | "QUnit", 15 | "module", 16 | "test", 17 | "asyncTest", 18 | "expect", 19 | "start", 20 | "stop", 21 | "ok", 22 | "equal", 23 | "notEqual", 24 | "deepEqual", 25 | "notDeepEqual", 26 | "strictEqual", 27 | "notStrictEqual", 28 | "throws" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /lib/Remodal/test/remodal.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Remodal Test Suite 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 29 | 30 | 31 | 32 |
33 |
34 | Call 35 |
36 | 37 |
38 | 39 | 40 | Cancel 41 | OK 42 |
43 | 44 |
48 | 49 | 50 | Cancel 51 | OK 52 |
53 | 54 |
55 | 56 |
57 | 58 |
59 | 60 |
61 | 62 | 63 | -------------------------------------------------------------------------------- /lib/js.cookie-2.0.4.min.js: -------------------------------------------------------------------------------- 1 | /*! js-cookie v2.0.4 | MIT */ 2 | !function(a){if("function"==typeof define&&define.amd)define(a);else if("object"==typeof exports)module.exports=a();else{var b=window.Cookies,c=window.Cookies=a();c.noConflict=function(){return window.Cookies=b,c}}}(function(){function a(){for(var a=0,b={};a1){if(f=a({path:"/"},d.defaults,f),"number"==typeof f.expires){var h=new Date;h.setMilliseconds(h.getMilliseconds()+864e5*f.expires),f.expires=h}try{g=JSON.stringify(e),/^[\{\[]/.test(g)&&(e=g)}catch(i){}return e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),b=encodeURIComponent(String(b)),b=b.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),b=b.replace(/[\(\)]/g,escape),document.cookie=[b,"=",e,f.expires&&"; expires="+f.expires.toUTCString(),f.path&&"; path="+f.path,f.domain&&"; domain="+f.domain,f.secure?"; secure":""].join("")}b||(g={});for(var j=document.cookie?document.cookie.split("; "):[],k=/(%[0-9A-Z]{2})+/g,l=0;l" 7 | ], 8 | "description": "A useful control to geolocate the user with many options. Used by osm.org and mapbox among many others.", 9 | "main": [ 10 | "dist/L.Control.Locate.css", 11 | "src/L.Control.Locate.js" 12 | ], 13 | "directories": { 14 | "example": "demo" 15 | }, 16 | "ignore": [ 17 | "**/.*", 18 | "node_modules", 19 | "bower_components" 20 | ], 21 | "repository": { 22 | "type": "git", 23 | "url": "git@github.com:domoritz/leaflet-locatecontrol.git" 24 | }, 25 | "keywords": [ 26 | "leaflet", 27 | "locate", 28 | "plugin" 29 | ], 30 | "license": "MIT", 31 | "readmeFilename": "README.md", 32 | "dependencies": { 33 | "leaflet": "~0.7.3", 34 | "font-awesome": "~4.3.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 |
19 | 20 | Fork me on GitHub 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo/script.js: -------------------------------------------------------------------------------- 1 | var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; 2 | var osmAttrib='Map data © OpenStreetMap contributors'; 3 | var osm = new L.TileLayer(osmUrl, { 4 | attribution: osmAttrib, 5 | detectRetina: true 6 | }); 7 | 8 | var token = 'pk.eyJ1IjoiZG9tb3JpdHoiLCJhIjoieENoTEhXUSJ9.kjCosRk1pmnOqTvfsjmgIg'; 9 | var mapboxUrl = 'http://api.tiles.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}@2x.png?access_token=' + token; 10 | var mapboxAttrib = 'Map data © OpenStreetMap contributors. Tiles from Mapbox.'; 11 | var mapbox = new L.TileLayer(mapboxUrl, { 12 | attribution: mapboxAttrib 13 | }); 14 | 15 | var map = new L.Map('map', { 16 | layers: [mapbox], 17 | center: [51.505, -0.09], 18 | zoom: 10, 19 | zoomControl: true 20 | }); 21 | 22 | // add location control to global name space for testing only 23 | // on a production site, omit the "lc = "! 24 | lc = L.control.locate({ 25 | follow: true, 26 | strings: { 27 | title: "Show me where I am, yo!" 28 | } 29 | }).addTo(map); 30 | 31 | map.on('startfollowing', function() { 32 | map.on('dragstart', lc._stopFollowing, lc); 33 | }).on('stopfollowing', function() { 34 | map.off('dragstart', lc._stopFollowing, lc); 35 | }); 36 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo/style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | 7 | #map { 8 | position: absolute; 9 | width: 100%; 10 | height: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo_mapbox/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 |
19 | 20 | Fork me on GitHub 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo_mapbox/script.js: -------------------------------------------------------------------------------- 1 | L.mapbox.accessToken = 'pk.eyJ1IjoiZG9tb3JpdHoiLCJhIjoieENoTEhXUSJ9.kjCosRk1pmnOqTvfsjmgIg'; 2 | var map = L.mapbox.map('map', 'examples.map-i86nkdio').setView([51.505, -0.09], 10); 3 | 4 | // add location control to global name space for testing only 5 | // on a production site, omit the "lc = "! 6 | lc = L.control.locate({ 7 | follow: true, 8 | strings: { 9 | title: "Show me where I am, yo!" 10 | } 11 | }).addTo(map); 12 | 13 | map.on('startfollowing', function() { 14 | map.on('dragstart', lc._stopFollowing, lc); 15 | }).on('stopfollowing', function() { 16 | map.off('dragstart', lc._stopFollowing, lc); 17 | }); 18 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/demo_mapbox/style.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | 7 | #map { 8 | position: absolute; 9 | width: 100%; 10 | height: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | /* Compatible with Leaflet 0.7 */ 5 | .leaflet-touch .leaflet-bar-part-single { 6 | -webkit-border-radius: 7px 7px 7px 7px; 7 | border-radius: 7px 7px 7px 7px; 8 | border-bottom: none; 9 | } 10 | .leaflet-touch .leaflet-control-locate { 11 | box-shadow: none; 12 | border: 2px solid rgba(0, 0, 0, 0.2); 13 | background-clip: padding-box; 14 | } 15 | 16 | .leaflet-control-locate a { 17 | font-size: 1.4em; 18 | color: #444; 19 | } 20 | .leaflet-control-locate.active a { 21 | color: #2074B6; 22 | } 23 | .leaflet-control-locate.active.following a { 24 | color: #FC8428; 25 | } 26 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.ie.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | /* Conditional stylesheet for IE. */ 5 | .leaflet-control-locate { 6 | border: 3px solid #999; 7 | } 8 | .leaflet-control-locate a { 9 | background-color: #eee; 10 | } 11 | .leaflet-control-locate a:hover { 12 | background-color: #fff; 13 | } 14 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.ie.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | .leaflet-control-locate{border:3px solid #999}.leaflet-control-locate a{background-color:#eee}.leaflet-control-locate a:hover{background-color:#fff} 5 | /*# sourceMappingURL=L.Control.Locate.ie.min.css.map */ 6 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.ie.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAEA,uBAAwB,CACtB,MAAM,CAAE,cAAc,CACtB,yBAAE,CACA,gBAAgB,CAAE,IAAI,CACtB,+BAAQ,CACN,gBAAgB,CAAE,IAAI", 4 | "sources": ["../src/L.Control.Locate.ie.scss"], 5 | "names": [], 6 | "file": "L.Control.Locate.ie.min.css" 7 | } 8 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.mapbox.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | /* Compatible with Leaflet 0.7 */ 5 | .leaflet-touch .leaflet-bar-part-single { 6 | -webkit-border-radius: 7px 7px 7px 7px; 7 | border-radius: 7px 7px 7px 7px; 8 | border-bottom: none; 9 | } 10 | .leaflet-touch .leaflet-control-locate { 11 | box-shadow: none; 12 | border: 2px solid rgba(0, 0, 0, 0.2); 13 | background-clip: padding-box; 14 | } 15 | 16 | .leaflet-control-locate a { 17 | font-size: 1.4em; 18 | color: #444; 19 | } 20 | .leaflet-control-locate.active a { 21 | color: #2074B6; 22 | } 23 | .leaflet-control-locate.active.following a { 24 | color: #FC8428; 25 | } 26 | 27 | /* Mapbox specific adjustments */ 28 | .leaflet-control-locate a { 29 | padding: 3px 0 0 8px; 30 | } 31 | .leaflet-control-locate.requesting a { 32 | padding: 3px 0 0 4px; 33 | } 34 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.mapbox.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | .leaflet-touch .leaflet-bar-part-single{-webkit-border-radius:7px 7px 7px 7px;border-radius:7px 7px 7px 7px;border-bottom:none}.leaflet-touch .leaflet-control-locate{box-shadow:none;border:2px solid rgba(0,0,0,0.2);background-clip:padding-box}.leaflet-control-locate a{font-size:1.4em;color:#444}.leaflet-control-locate.active a{color:#2074B6}.leaflet-control-locate.active.following a{color:#FC8428}.leaflet-control-locate a{padding:3px 0 0 8px}.leaflet-control-locate.requesting a{padding:3px 0 0 4px} 5 | /*# sourceMappingURL=L.Control.Locate.mapbox.min.css.map */ 6 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.mapbox.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAGE,uCAAyB,CACvB,qBAAqB,CAAE,eAAe,CAC9B,aAAa,CAAE,eAAe,CACtC,aAAa,CAAE,IAAI,CAGrB,sCAAwB,CACtB,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,yBAAyB,CACjC,eAAe,CAAE,WAAW,CAK9B,yBAAE,CACA,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,IAAI,CAGX,gCAAE,CACA,KAAK,CAAE,OAAO,CAEhB,0CAAc,CACZ,KAAK,CAAE,OAAO,CCrBlB,yBAAE,CACC,OAAO,CAAE,WAAW,CAGrB,oCAAE,CACA,OAAO,CAAE,WAAW", 4 | "sources": ["../src/L.Control.Locate.scss","../src/L.Control.Locate.mapbox.scss"], 5 | "names": [], 6 | "file": "L.Control.Locate.mapbox.min.css" 7 | } 8 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.44.0 2 | Date: 2015-07-22 */ 3 | 4 | .leaflet-touch .leaflet-bar-part-single{-webkit-border-radius:7px 7px 7px 7px;border-radius:7px 7px 7px 7px;border-bottom:none}.leaflet-touch .leaflet-control-locate{box-shadow:none;border:2px solid rgba(0,0,0,0.2);background-clip:padding-box}.leaflet-control-locate a{font-size:1.4em;color:#444}.leaflet-control-locate.active a{color:#2074B6}.leaflet-control-locate.active.following a{color:#FC8428} 5 | /*# sourceMappingURL=L.Control.Locate.min.css.map */ 6 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/dist/L.Control.Locate.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAGE,uCAAyB,CACvB,qBAAqB,CAAE,eAAe,CAC9B,aAAa,CAAE,eAAe,CACtC,aAAa,CAAE,IAAI,CAGrB,sCAAwB,CACtB,UAAU,CAAE,IAAI,CAChB,MAAM,CAAE,yBAAyB,CACjC,eAAe,CAAE,WAAW,CAK9B,yBAAE,CACA,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,IAAI,CAGX,gCAAE,CACA,KAAK,CAAE,OAAO,CAEhB,0CAAc,CACZ,KAAK,CAAE,OAAO", 4 | "sources": ["../src/L.Control.Locate.scss"], 5 | "names": [], 6 | "file": "L.Control.Locate.min.css" 7 | } 8 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.locatecontrol", 3 | "version": "0.45.0", 4 | "homepage": "https://github.com/domoritz/leaflet-locatecontrol", 5 | "description": "A useful control to geolocate the user with many options. Used by osm.org and mapbox among many others.", 6 | "main": "src/L.Control.Locate.js", 7 | "author": "Dominik Moritz ", 8 | "repository": { 9 | "type": "git", 10 | "url": "git@github.com:domoritz/leaflet-locatecontrol.git" 11 | }, 12 | "keywords": [ 13 | "leaflet", 14 | "locate", 15 | "plugin" 16 | ], 17 | "license": "MIT", 18 | "readmeFilename": "README.md", 19 | "dependencies": { 20 | "font-awesome": "^4.2.0", 21 | "leaflet": "^0.7.3" 22 | }, 23 | "devDependencies": { 24 | "grunt": "^0.4.5", 25 | "grunt-bump": "0.0.16", 26 | "grunt-contrib-jshint": "^0.10.0", 27 | "grunt-contrib-nodeunit": "^0.4.1", 28 | "grunt-contrib-sass": "^0.8.1", 29 | "grunt-contrib-uglify": "^0.6.0", 30 | "grunt-serve": "^0.1.6" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/leaflet-locatecontrol/screenshot.png -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/src/L.Control.Locate.ie.scss: -------------------------------------------------------------------------------- 1 | /* Conditional stylesheet for IE. */ 2 | 3 | .leaflet-control-locate { 4 | border: 3px solid #999; 5 | a { 6 | background-color: #eee; 7 | &:hover { 8 | background-color: #fff; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/src/L.Control.Locate.mapbox.scss: -------------------------------------------------------------------------------- 1 | @import "L.Control.Locate"; 2 | 3 | /* Mapbox specific adjustments */ 4 | 5 | .leaflet-control-locate { 6 | a { 7 | padding: 3px 0 0 8px; 8 | } 9 | &.requesting { 10 | a { 11 | padding: 3px 0 0 4px; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/leaflet-locatecontrol/src/L.Control.Locate.scss: -------------------------------------------------------------------------------- 1 | /* Compatible with Leaflet 0.7 */ 2 | 3 | .leaflet-touch { 4 | .leaflet-bar-part-single { 5 | -webkit-border-radius: 7px 7px 7px 7px; 6 | border-radius: 7px 7px 7px 7px; 7 | border-bottom: none; 8 | } 9 | 10 | .leaflet-control-locate { 11 | box-shadow: none; 12 | border: 2px solid rgba(0,0,0,0.2); 13 | background-clip: padding-box; 14 | } 15 | } 16 | 17 | .leaflet-control-locate { 18 | a { 19 | font-size: 1.4em; 20 | color: #444; 21 | } 22 | &.active { 23 | a { 24 | color: #2074B6; 25 | } 26 | &.following a { 27 | color: #FC8428; 28 | } 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /lib/spin.js/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true 4 | }, 5 | "rules": { 6 | "semi": [2, "always"], 7 | "comma-style": [2, "last"], 8 | "one-var": [2, "never"], 9 | "quotes": [2, "single", "avoid-escape"], 10 | "brace-style": [2, "stroustrup"], 11 | "space-after-keywords": [2, "always"], 12 | "space-before-blocks": [2, "always"], 13 | "space-before-function-paren": [2, "never"] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/spin.js/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .grunt 3 | node_modules 4 | site/spin.js 5 | site/spin.min.js 6 | site/jquery.spin.js -------------------------------------------------------------------------------- /lib/spin.js/.npmignore: -------------------------------------------------------------------------------- 1 | site 2 | Gruntfile.js 3 | bower.json 4 | component.json -------------------------------------------------------------------------------- /lib/spin.js/.spmignore: -------------------------------------------------------------------------------- 1 | site 2 | -------------------------------------------------------------------------------- /lib/spin.js/Gruntfile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Workflow to release a new version: 3 | * grunt bump-only:minor 4 | * grunt 5 | * grunt gh-pages 6 | * grunt bump-commit 7 | * git push --tags 8 | * npm publish 9 | */ 10 | module.exports = function(grunt) { 11 | 12 | grunt.initConfig({ 13 | pkg: grunt.file.readJSON('package.json'), 14 | 15 | copy: { 16 | js: { 17 | files: [ 18 | { src: ['spin.js', 'jquery.spin.js'], dest: 'site/' } 19 | ] 20 | } 21 | }, 22 | 23 | uglify: { 24 | options: { 25 | banner: '// http://spin.js.org/#v<%= pkg.version %>\n' 26 | }, 27 | js: { 28 | files: { 29 | 'site/spin.min.js': ['site/spin.js'], 30 | 'spin.min.js': ['site/spin.min.js'] 31 | } 32 | } 33 | }, 34 | 35 | bump: { 36 | options: { 37 | files: ['package.json', 'component.json'], 38 | updateConfigs: ['pkg'], 39 | commit: true, 40 | commitMessage: 'Release v%VERSION%', 41 | commitFiles: ['package.json', 'component.json', 'spin.min.js'], 42 | createTag: true, 43 | tagName: '%VERSION%', 44 | push: false 45 | } 46 | }, 47 | 48 | 'gh-pages': { 49 | release: { 50 | options: { 51 | base: 'site', 52 | message: 'automatic commit' 53 | }, 54 | src: '**/*' 55 | } 56 | } 57 | 58 | }); 59 | 60 | grunt.loadNpmTasks('grunt-contrib-copy'); 61 | grunt.loadNpmTasks('grunt-contrib-uglify'); 62 | grunt.loadNpmTasks('grunt-bump'); 63 | grunt.loadNpmTasks('grunt-gh-pages'); 64 | 65 | grunt.registerTask('default', ['copy', 'uglify']); 66 | 67 | }; 68 | -------------------------------------------------------------------------------- /lib/spin.js/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License 2 | =============== 3 | 4 | Copyright (c) 2011-2015 Felix Gnass [fgnass at gmail dot com] 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /lib/spin.js/README.md: -------------------------------------------------------------------------------- 1 | # spin.js [![JS.ORG](https://img.shields.io/badge/js.org-spin-ffb400.svg?style=flat-square)](http://js.org) 2 | 3 | An animated CSS3 loading spinner with VML fallback for IE. 4 | 5 | * No images, no external CSS 6 | * No dependencies 7 | * Highly configurable 8 | * Resolution independent 9 | * Uses VML as fallback in old IEs 10 | * Uses @keyframe animations, falling back to setTimeout() 11 | * Works in all major browsers, including IE6 12 | * Small footprint (~1.9K gzipped) 13 | * MIT License 14 | 15 | ## Usage 16 | 17 | ```javascript 18 | new Spinner({color:'#fff', lines: 12}).spin(target); 19 | ``` 20 | 21 | For an interactive demo and a list of all supported options please refer to the [project's homepage](http://spin.js.org). 22 | -------------------------------------------------------------------------------- /lib/spin.js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spin.js", 3 | "main": "spin.js", 4 | "dependencies": {}, 5 | "readme": "README.md", 6 | "repository": { 7 | "type": "git", 8 | "url": "git://github.com/fgnass/spin.js.git" 9 | }, 10 | "ignore": [ 11 | "Gruntfile.js", 12 | "site", 13 | "bower.json", 14 | "component.json", 15 | "package.json" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /lib/spin.js/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spin", 3 | "repo": "fgnass/spin.js", 4 | "description": "A spinning activity indicator", 5 | "version": "2.3.2", 6 | "main": "spin.js", 7 | "scripts": [ 8 | "spin.js" 9 | ], 10 | "keywords": [ 11 | "spin", 12 | "spinner", 13 | "component" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /lib/spin.js/jquery.spin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2011-2014 Felix Gnass 3 | * Licensed under the MIT license 4 | * http://spin.js.org/ 5 | */ 6 | 7 | /* 8 | 9 | Basic Usage: 10 | ============ 11 | 12 | $('#el').spin(); // Creates a default Spinner using the text color of #el 13 | $('#el').spin({ ... }); // Creates a Spinner using the provided options 14 | 15 | $('#el').spin(false); // Stops and removes the spinner 16 | 17 | Using Presets: 18 | ============== 19 | 20 | $('#el').spin('small'); // Creates a 'small' Spinner using the text color of #el 21 | $('#el').spin('large', '#fff'); // Creates a 'large' white Spinner 22 | 23 | Adding a custom preset: 24 | ======================= 25 | 26 | $.fn.spin.presets.flower = { 27 | lines: 9, 28 | length: 10, 29 | width: 20, 30 | radius: 0 31 | }; 32 | 33 | $('#el').spin('flower', 'red'); 34 | 35 | */ 36 | 37 | ;(function(factory) { 38 | 39 | if (typeof exports == 'object') { 40 | // CommonJS 41 | factory(require('jquery'), require('spin.js')); 42 | } 43 | else if (typeof define == 'function' && define.amd) { 44 | // AMD, register as anonymous module 45 | define(['jquery', 'spin'], factory); 46 | } 47 | else { 48 | // Browser globals 49 | if (!window.Spinner) throw new Error('Spin.js not present'); 50 | factory(window.jQuery, window.Spinner); 51 | } 52 | 53 | }(function($, Spinner) { 54 | 55 | $.fn.spin = function(opts, color) { 56 | 57 | return this.each(function() { 58 | var $this = $(this); 59 | var data = $this.data(); 60 | 61 | if (data.spinner) { 62 | data.spinner.stop(); 63 | delete data.spinner; 64 | } 65 | if (opts !== false) { 66 | opts = $.extend( 67 | { color: color || $this.css('color') }, 68 | $.fn.spin.presets[opts] || opts 69 | ); 70 | data.spinner = new Spinner(opts).spin(this); 71 | } 72 | }); 73 | }; 74 | 75 | $.fn.spin.presets = { 76 | tiny: { lines: 8, length: 2, width: 2, radius: 3 }, 77 | small: { lines: 8, length: 4, width: 3, radius: 5 }, 78 | large: { lines: 10, length: 8, width: 4, radius: 8 } 79 | }; 80 | 81 | })); 82 | -------------------------------------------------------------------------------- /lib/spin.js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spin.js", 3 | "version": "2.3.2", 4 | "main": "spin.js", 5 | "author": "Felix Gnass ", 6 | "contributors": [ 7 | "Timothy Gu " 8 | ], 9 | "license": "MIT", 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/fgnass/spin.js.git" 13 | }, 14 | "keywords": [ 15 | "spin", 16 | "spinner", 17 | "component" 18 | ], 19 | "component": { 20 | "scripts": { 21 | "spin": "spin.js" 22 | } 23 | }, 24 | "devDependencies": { 25 | "eslint": "^1.5.1", 26 | "grunt": "~0.4.2", 27 | "grunt-bump": "0.0.13", 28 | "grunt-contrib-copy": "~0.5.0", 29 | "grunt-contrib-uglify": "~0.2.7", 30 | "grunt-gh-pages": "~0.9.0" 31 | }, 32 | "spm": { 33 | "main": "spin.js" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/spin.js/site/CNAME: -------------------------------------------------------------------------------- 1 | spin.js.org 2 | -------------------------------------------------------------------------------- /lib/spin.js/site/assets/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/bg.png -------------------------------------------------------------------------------- /lib/spin.js/site/assets/browsers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/browsers.png -------------------------------------------------------------------------------- /lib/spin.js/site/assets/crosshair.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/crosshair.gif -------------------------------------------------------------------------------- /lib/spin.js/site/assets/github.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/github.gif -------------------------------------------------------------------------------- /lib/spin.js/site/assets/main.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | margin: 0; 3 | } 4 | html { 5 | background: url(bg.png); 6 | } 7 | body { 8 | color: #333; 9 | font-family: Helvetica, Arial, sans-serif; 10 | font-size: 16px; 11 | } 12 | ul { 13 | padding: 0 0 0 20px; 14 | } 15 | #content { 16 | width: 75%; 17 | max-width: 800px; 18 | line-height: 1.4em; 19 | margin: 0 50px 50px 100px; 20 | text-shadow: 0px 1px 0px #fff; 21 | } 22 | #footer { 23 | background: #202020; 24 | overflow: hidden; 25 | color: #888; 26 | font-size: 12px; 27 | padding: 20px 0 100px 50px; 28 | position: relative; 29 | } 30 | #footer:before { 31 | content: ''; 32 | display: block; 33 | box-shadow: 0 0 10px #000; 34 | height: 10px; 35 | position: absolute; 36 | left: 0; 37 | top: -10px; 38 | width: 100%; 39 | } 40 | #footer a.github { 41 | background: url(github.gif) no-repeat; 42 | width: 68px; 43 | height: 30px; 44 | text-indent: -999em; 45 | position: absolute; 46 | bottom: 30px; 47 | right: 30px; 48 | } 49 | a { 50 | color: #333; 51 | } 52 | a:hover { 53 | color: #000; 54 | } 55 | pre { 56 | text-shadow: none; 57 | font-size: 14px; 58 | line-height: 18px; 59 | margin: 0 0 30px 0; 60 | } 61 | label { 62 | display: inline-block; 63 | width: 440px; 64 | font-size: 14px; 65 | vertical-align: top; 66 | } 67 | #opts { 68 | display: inline-block; 69 | } 70 | #opts label { 71 | line-height: 25px; 72 | width: 80px; 73 | } 74 | span.fd-slider { 75 | vertical-align: top; 76 | display: inline-block; 77 | width: 150px; 78 | } 79 | #logo { 80 | position: relative; 81 | height: 300px; 82 | margin-left: 100px; 83 | } 84 | h1, h2, h3, #download a { 85 | font-family: 'Amaranth', sans-serif; 86 | } 87 | h1 { 88 | font-size: 200px; 89 | position: absolute; 90 | text-shadow: 0px 1px 0px #fff; 91 | margin: 0; 92 | padding: 0; 93 | } 94 | h2 { 95 | font-size: 28px; 96 | margin: 45px 0 28px 0; 97 | } 98 | h3 { 99 | margin: 35px 0 10px 0; 100 | } 101 | 102 | #ribbon { 103 | position: absolute; 104 | top: 0; 105 | right: 0; 106 | width: 149px; 107 | height: 149px; 108 | background: url(ribbon.png) no-repeat; 109 | _background: none; 110 | _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=ribbon.png); 111 | } 112 | #preview { 113 | position: relative; 114 | background: #333; 115 | color: #fff; 116 | float: left; 117 | width: 375px; 118 | height: 375px; 119 | margin: 0 20px 20px 0; 120 | -webkit-border-radius: 10px; 121 | -moz-border-radius: 10px; 122 | border-radius: 10px; 123 | } 124 | #demo { 125 | clear: both; 126 | } 127 | #demo form { 128 | width: 250px; 129 | float: left; 130 | } 131 | .share { 132 | clear: left; 133 | } 134 | a.button { 135 | display: inline-block; 136 | background: #56ba4a; 137 | border: 3px solid #59a24f; 138 | color: #fff; 139 | border-radius: 5px; 140 | font-family: 'Amaranth', sans-serif; 141 | font-size: 24px; 142 | padding: 10px 30px; 143 | text-decoration: none; 144 | text-shadow: 1px 1px 1px #59a24f; 145 | box-shadow: 2px 2px 4px rgba(0,0,0,0.2); 146 | margin: 10px 20px 0 0; 147 | -webkit-transition: all 0.25s ease; 148 | } 149 | a.button:hover { 150 | background: #2f8325; 151 | box-shadow: none; 152 | } 153 | #contact img { 154 | float: left; 155 | border: 3px solid #eee; 156 | box-shadow: 0px 2px 3px rgba(0,0,0,0.2); 157 | margin: 0 16px 50px 0; 158 | } 159 | -------------------------------------------------------------------------------- /lib/spin.js/site/assets/prettify.css: -------------------------------------------------------------------------------- 1 | /* Pretty printing styles. Used with prettify.js. */ 2 | /* Vim sunburst theme by David Leibovic */ 3 | 4 | pre .str, code .str { color: #65B042; } /* string - green */ 5 | pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */ 6 | pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */ 7 | pre .typ, code .typ { color: #89bdff; } /* type - light blue */ 8 | pre .lit, code .lit { color: #3387CC; } /* literal - blue */ 9 | pre .pun, code .pun { color: #fff; } /* punctuation - white */ 10 | pre .pln, code .pln { color: #fff; } /* plaintext - white */ 11 | pre .tag, code .tag { color: #89bdff; } /* html/xml tag - light blue */ 12 | pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name - khaki */ 13 | pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */ 14 | pre .dec, code .dec { color: #3387CC; } /* decimal - blue */ 15 | 16 | pre.prettyprint, code.prettyprint { 17 | background-color: #333; 18 | -moz-border-radius: 8px; 19 | -webkit-border-radius: 8px; 20 | -o-border-radius: 8px; 21 | -ms-border-radius: 8px; 22 | -khtml-border-radius: 8px; 23 | border-radius: 8px; 24 | } 25 | 26 | pre.prettyprint { 27 | padding: 1em; 28 | white-space: pre-wrap; 29 | } 30 | 31 | 32 | /* Specify class=linenums on a pre to get line numbering */ 33 | ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */ 34 | li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none } 35 | /* Alternate shading for lines */ 36 | li.L1,li.L3,li.L5,li.L7,li.L9 { } 37 | 38 | @media print { 39 | pre .str, code .str { color: #060; } 40 | pre .kwd, code .kwd { color: #006; font-weight: bold; } 41 | pre .com, code .com { color: #600; font-style: italic; } 42 | pre .typ, code .typ { color: #404; font-weight: bold; } 43 | pre .lit, code .lit { color: #044; } 44 | pre .pun, code .pun { color: #440; } 45 | pre .pln, code .pln { color: #000; } 46 | pre .tag, code .tag { color: #006; font-weight: bold; } 47 | pre .atn, code .atn { color: #404; } 48 | pre .atv, code .atv { color: #060; } 49 | } -------------------------------------------------------------------------------- /lib/spin.js/site/assets/preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/preview.jpg -------------------------------------------------------------------------------- /lib/spin.js/site/assets/ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/assets/ribbon.png -------------------------------------------------------------------------------- /lib/spin.js/site/example/amd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spin.js 5 | 25 | 26 | 27 | 28 |
29 |
30 | 31 | 32 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /lib/spin.js/site/example/jquery.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spin.js 5 | 25 | 26 | 27 | 28 |
29 |
30 | 31 | 32 | 33 | 34 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lib/spin.js/site/example/modernizr.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spin.js 5 | 6 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /lib/spin.js/site/example/positioning.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spin.js 5 | 43 | 44 | 45 | 46 |
47 |
48 |
49 |
50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /lib/spin.js/site/example/settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | spin.js 5 | 29 | 30 | 31 | 32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 43 | 47 |
48 |
49 |
50 |
51 | 52 | 53 | 54 | 55 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /lib/spin.js/site/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MorbZ/restriction-validator/bf5a927833a7e837206b7f1943a4d95616581bb7/lib/spin.js/site/favicon.ico -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: Verdana, Arial, sans-serif; 5 | background-color: #333; 6 | } 7 | 8 | div.header { 9 | position: absolute; 10 | left: 0; 11 | right: 0; 12 | top: 0; 13 | height: 40px; 14 | padding: 0 10px; 15 | padding-top: 4px; 16 | } 17 | 18 | div.header > span.title { 19 | color: white; 20 | font-size: 1.4em; 21 | font-variant: small-caps; 22 | } 23 | 24 | div.menu { 25 | padding-top: 6px; 26 | float: right; 27 | display: inline; 28 | } 29 | 30 | div.menu > a { 31 | color: white; 32 | font-size: 0.9em; 33 | } 34 | 35 | div.menu > a + a { 36 | margin-left: 10px; 37 | } 38 | 39 | div.remodal a { 40 | color: black; 41 | } 42 | 43 | div.remodal p { 44 | text-align: justify; 45 | } 46 | 47 | div.map-container { 48 | position: absolute; 49 | top: 40px; 50 | bottom: 0; 51 | left: 0; 52 | right: 0; 53 | } 54 | 55 | div.map { 56 | padding: 0; 57 | margin: 0; 58 | width: 100%; 59 | height: 100%; 60 | } 61 | 62 | div.zoom-hint { 63 | display: none; 64 | position: absolute; 65 | left: 60px; 66 | right: 60px; 67 | top: 15px; 68 | z-index: 2000; 69 | pointer-events:none; 70 | text-align: center; 71 | } 72 | 73 | div.zoom-hint > div { 74 | display: inline-block; 75 | background-color: rgba(255, 255, 255, 0.5); 76 | padding: 5px; 77 | border-radius: 5px; 78 | } 79 | 80 | div.spinner { 81 | position: absolute; 82 | top: 25px; 83 | right: 25px; 84 | } 85 | 86 | @media (max-width: 529px) { 87 | div.map-container { 88 | top: 70px; 89 | } 90 | 91 | div.header { 92 | height: 70px; 93 | } 94 | 95 | div.header > span.title { 96 | display: block; 97 | width: 100%; 98 | text-align: center; 99 | } 100 | 101 | div.menu { 102 | float: none; 103 | display: block; 104 | text-align: center; 105 | } 106 | 107 | div.menu > a { 108 | font-size: 1em; 109 | } 110 | 111 | .leaflet-popup-content { 112 | font-size: 1.2em; 113 | } 114 | } 115 | 116 | .leaflet-popup-content-wrapper { 117 | border-radius: 5px; 118 | box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); 119 | } 120 | 121 | .leaflet-popup-content { 122 | margin: 8px; 123 | } 124 | 125 | .leaflet-popup-tip { 126 | box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4); 127 | } 128 | 129 | div.leaflet-control-locate > a > span { 130 | margin-top: 5px; 131 | } 132 | 133 | .marker-cluster { 134 | background-clip: padding-box; 135 | border-radius: 10px; 136 | background-color: white; 137 | } 138 | .marker-cluster div { 139 | background-color: orange; 140 | width: 16px; 141 | height: 16px; 142 | margin-left: 2px; 143 | margin-top: 2px; 144 | text-align: center; 145 | border-radius: 8px; 146 | font: 9px "Helvetica Neue", Arial, Helvetica, sans-serif; 147 | } 148 | .marker-cluster span { 149 | line-height: 16px; 150 | } 151 | --------------------------------------------------------------------------------