├── LICENSE ├── Readme.md ├── bower.json ├── bower_components ├── fontawesome │ ├── .bower.json │ ├── .gitignore │ ├── .npmignore │ ├── bower.json │ ├── 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 │ ├── less │ │ ├── animated.less │ │ ├── bordered-pulled.less │ │ ├── core.less │ │ ├── fixed-width.less │ │ ├── font-awesome.less │ │ ├── icons.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── mixins.less │ │ ├── path.less │ │ ├── rotated-flipped.less │ │ ├── stacked.less │ │ └── variables.less │ └── scss │ │ ├── _animated.scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss ├── leaflet.locatecontrol │ ├── .bower.json │ ├── 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 ├── leaflet.maskcanvas │ ├── .bower.json │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── demo │ │ ├── VBB.json │ │ ├── index.html │ │ ├── main.css │ │ └── main.js │ ├── screenshot.png │ └── src │ │ ├── L.GridLayer.MaskCanvas.js │ │ ├── L.TileLayer.MaskCanvas.js │ │ └── QuadTree.js └── leaflet │ ├── .bower.json │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── Jakefile.js │ ├── LICENSE │ ├── PLUGIN-GUIDE.md │ ├── README.md │ ├── bower.json │ ├── component.json │ ├── dist │ ├── images │ │ ├── layers-2x.png │ │ ├── layers.png │ │ ├── marker-icon-2x.png │ │ ├── marker-icon.png │ │ └── marker-shadow.png │ ├── leaflet-src.js │ ├── leaflet.css │ └── leaflet.js │ └── package.json ├── data ├── VBB.json ├── convert.py ├── source.js └── stops.txt ├── index.html ├── main.css └── main.js /LICENSE: -------------------------------------------------------------------------------- 1 | AGPL License 2 | 3 | Copyright (c) 2013 Dominik Moritz 4 | 5 | This program is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU Affero General Public License as 7 | published by the Free Software Foundation, either version 3 of the 8 | License, or (at your option) any later version. 9 | 10 | This program is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU Affero General Public License for more details. 14 | 15 | You should have received a copy of the GNU Affero General Public License 16 | along with this program. If not, see https://www.gnu.org/licenses/agpl.html. 17 | 18 | If you require a different license, please get in contact with me. 19 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # VBB coverage 2 | 3 | Visualization of the stops of the VBB in Berlin and Brandenburg. Based in open data from the VBB. 4 | 5 | Go to http://domoritz.github.com/vbb-coverage/ to see the visualization. There is an expimental heatmap based visualisation on the heatmap branch. 6 | 7 | ## Uses 8 | 9 | For the canvas layer: 10 | https://github.com/domoritz/leaflet-maskcanvas 11 | 12 | For the locate control: 13 | https://github.com/domoritz/leaflet-locatecontrol 14 | 15 | Get the raw VBB data from http://daten.berlin.de/datensaetze/vbb-fahrplan2012 -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vbb-coverage", 3 | "version": "0.0.0", 4 | "homepage": "https://github.com/domoritz/vbb-coverage", 5 | "authors": [ 6 | "Dominik Moritz " 7 | ], 8 | "description": "A map showing where the vbb has train stations or bus stops.", 9 | "main": "index.html", 10 | "keywords": [ 11 | "vbb", 12 | "open", 13 | "data", 14 | "coverage" 15 | ], 16 | "license": "MIT", 17 | "private": true, 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests" 24 | ], 25 | "dependencies": { 26 | "leaflet.locatecontrol": "^0.43.0", 27 | "leaflet.maskcanvas": "*", 28 | "leaflet": "^0.7.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /bower_components/fontawesome/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "font-awesome", 3 | "description": "Font Awesome", 4 | "version": "4.3.0", 5 | "keywords": [], 6 | "homepage": "http://fontawesome.io", 7 | "dependencies": {}, 8 | "devDependencies": {}, 9 | "license": [ 10 | "OFL-1.1", 11 | "MIT", 12 | "CC-BY-3.0" 13 | ], 14 | "main": [ 15 | "./css/font-awesome.css", 16 | "./fonts/*" 17 | ], 18 | "ignore": [ 19 | "*/.*", 20 | "*.json", 21 | "src", 22 | "*.yml", 23 | "Gemfile", 24 | "Gemfile.lock", 25 | "*.md" 26 | ], 27 | "_release": "4.3.0", 28 | "_resolution": { 29 | "type": "version", 30 | "tag": "v4.3.0", 31 | "commit": "e9665bad5b5b944da1095faf88209fabbfe725c1" 32 | }, 33 | "_source": "git://github.com/FortAwesome/Font-Awesome.git", 34 | "_target": "~4.3.0", 35 | "_originalSource": "fontawesome" 36 | } -------------------------------------------------------------------------------- /bower_components/fontawesome/.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 | -------------------------------------------------------------------------------- /bower_components/fontawesome/.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 | -------------------------------------------------------------------------------- /bower_components/fontawesome/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "font-awesome", 3 | "description": "Font Awesome", 4 | "version": "4.3.0", 5 | "keywords": [], 6 | "homepage": "http://fontawesome.io", 7 | "dependencies": {}, 8 | "devDependencies": {}, 9 | "license": ["OFL-1.1", "MIT", "CC-BY-3.0"], 10 | "main": [ 11 | "./css/font-awesome.css", 12 | "./fonts/*" 13 | ], 14 | "ignore": [ 15 | "*/.*", 16 | "*.json", 17 | "src", 18 | "*.yml", 19 | "Gemfile", 20 | "Gemfile.lock", 21 | "*.md" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /bower_components/fontawesome/css/font-awesome.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["../scss/_path.scss","../scss/_core.scss","../scss/_larger.scss","../scss/_fixed-width.scss","../scss/_list.scss","../scss/_variables.scss","../scss/_bordered-pulled.scss","../scss/_animated.scss","../scss/_rotated-flipped.scss","../scss/_mixins.scss","../scss/_stacked.scss","../scss/_icons.scss"], 5 | "names": [], 6 | "file": "font-awesome.css" 7 | } 8 | -------------------------------------------------------------------------------- /bower_components/fontawesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/fontawesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /bower_components/fontawesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/fontawesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /bower_components/fontawesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/fontawesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /bower_components/fontawesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/fontawesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /bower_components/fontawesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /bower_components/fontawesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | 15 | .fa-icon-rotate(@degrees, @rotation) { 16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 17 | -webkit-transform: rotate(@degrees); 18 | -ms-transform: rotate(@degrees); 19 | transform: rotate(@degrees); 20 | } 21 | 22 | .fa-icon-flip(@horiz, @vert, @rotation) { 23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 24 | -webkit-transform: scale(@horiz, @vert); 25 | -ms-transform: scale(@horiz, @vert); 26 | transform: scale(@horiz, @vert); 27 | } 28 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /bower_components/fontawesome/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | @fa-font-path: "../fonts"; 5 | @fa-font-size-base: 14px; 6 | //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts"; // for referencing Bootstrap CDN font files directly 7 | @fa-css-prefix: fa; 8 | @fa-version: "4.3.0"; 9 | @fa-border-color: #eee; 10 | @fa-inverse: #fff; 11 | @fa-li-width: (30em / 14); 12 | 13 | @fa-var-adjust: "\f042"; 14 | @fa-var-adn: "\f170"; 15 | @fa-var-align-center: "\f037"; 16 | @fa-var-align-justify: "\f039"; 17 | @fa-var-align-left: "\f036"; 18 | @fa-var-align-right: "\f038"; 19 | @fa-var-ambulance: "\f0f9"; 20 | @fa-var-anchor: "\f13d"; 21 | @fa-var-android: "\f17b"; 22 | @fa-var-angellist: "\f209"; 23 | @fa-var-angle-double-down: "\f103"; 24 | @fa-var-angle-double-left: "\f100"; 25 | @fa-var-angle-double-right: "\f101"; 26 | @fa-var-angle-double-up: "\f102"; 27 | @fa-var-angle-down: "\f107"; 28 | @fa-var-angle-left: "\f104"; 29 | @fa-var-angle-right: "\f105"; 30 | @fa-var-angle-up: "\f106"; 31 | @fa-var-apple: "\f179"; 32 | @fa-var-archive: "\f187"; 33 | @fa-var-area-chart: "\f1fe"; 34 | @fa-var-arrow-circle-down: "\f0ab"; 35 | @fa-var-arrow-circle-left: "\f0a8"; 36 | @fa-var-arrow-circle-o-down: "\f01a"; 37 | @fa-var-arrow-circle-o-left: "\f190"; 38 | @fa-var-arrow-circle-o-right: "\f18e"; 39 | @fa-var-arrow-circle-o-up: "\f01b"; 40 | @fa-var-arrow-circle-right: "\f0a9"; 41 | @fa-var-arrow-circle-up: "\f0aa"; 42 | @fa-var-arrow-down: "\f063"; 43 | @fa-var-arrow-left: "\f060"; 44 | @fa-var-arrow-right: "\f061"; 45 | @fa-var-arrow-up: "\f062"; 46 | @fa-var-arrows: "\f047"; 47 | @fa-var-arrows-alt: "\f0b2"; 48 | @fa-var-arrows-h: "\f07e"; 49 | @fa-var-arrows-v: "\f07d"; 50 | @fa-var-asterisk: "\f069"; 51 | @fa-var-at: "\f1fa"; 52 | @fa-var-automobile: "\f1b9"; 53 | @fa-var-backward: "\f04a"; 54 | @fa-var-ban: "\f05e"; 55 | @fa-var-bank: "\f19c"; 56 | @fa-var-bar-chart: "\f080"; 57 | @fa-var-bar-chart-o: "\f080"; 58 | @fa-var-barcode: "\f02a"; 59 | @fa-var-bars: "\f0c9"; 60 | @fa-var-bed: "\f236"; 61 | @fa-var-beer: "\f0fc"; 62 | @fa-var-behance: "\f1b4"; 63 | @fa-var-behance-square: "\f1b5"; 64 | @fa-var-bell: "\f0f3"; 65 | @fa-var-bell-o: "\f0a2"; 66 | @fa-var-bell-slash: "\f1f6"; 67 | @fa-var-bell-slash-o: "\f1f7"; 68 | @fa-var-bicycle: "\f206"; 69 | @fa-var-binoculars: "\f1e5"; 70 | @fa-var-birthday-cake: "\f1fd"; 71 | @fa-var-bitbucket: "\f171"; 72 | @fa-var-bitbucket-square: "\f172"; 73 | @fa-var-bitcoin: "\f15a"; 74 | @fa-var-bold: "\f032"; 75 | @fa-var-bolt: "\f0e7"; 76 | @fa-var-bomb: "\f1e2"; 77 | @fa-var-book: "\f02d"; 78 | @fa-var-bookmark: "\f02e"; 79 | @fa-var-bookmark-o: "\f097"; 80 | @fa-var-briefcase: "\f0b1"; 81 | @fa-var-btc: "\f15a"; 82 | @fa-var-bug: "\f188"; 83 | @fa-var-building: "\f1ad"; 84 | @fa-var-building-o: "\f0f7"; 85 | @fa-var-bullhorn: "\f0a1"; 86 | @fa-var-bullseye: "\f140"; 87 | @fa-var-bus: "\f207"; 88 | @fa-var-buysellads: "\f20d"; 89 | @fa-var-cab: "\f1ba"; 90 | @fa-var-calculator: "\f1ec"; 91 | @fa-var-calendar: "\f073"; 92 | @fa-var-calendar-o: "\f133"; 93 | @fa-var-camera: "\f030"; 94 | @fa-var-camera-retro: "\f083"; 95 | @fa-var-car: "\f1b9"; 96 | @fa-var-caret-down: "\f0d7"; 97 | @fa-var-caret-left: "\f0d9"; 98 | @fa-var-caret-right: "\f0da"; 99 | @fa-var-caret-square-o-down: "\f150"; 100 | @fa-var-caret-square-o-left: "\f191"; 101 | @fa-var-caret-square-o-right: "\f152"; 102 | @fa-var-caret-square-o-up: "\f151"; 103 | @fa-var-caret-up: "\f0d8"; 104 | @fa-var-cart-arrow-down: "\f218"; 105 | @fa-var-cart-plus: "\f217"; 106 | @fa-var-cc: "\f20a"; 107 | @fa-var-cc-amex: "\f1f3"; 108 | @fa-var-cc-discover: "\f1f2"; 109 | @fa-var-cc-mastercard: "\f1f1"; 110 | @fa-var-cc-paypal: "\f1f4"; 111 | @fa-var-cc-stripe: "\f1f5"; 112 | @fa-var-cc-visa: "\f1f0"; 113 | @fa-var-certificate: "\f0a3"; 114 | @fa-var-chain: "\f0c1"; 115 | @fa-var-chain-broken: "\f127"; 116 | @fa-var-check: "\f00c"; 117 | @fa-var-check-circle: "\f058"; 118 | @fa-var-check-circle-o: "\f05d"; 119 | @fa-var-check-square: "\f14a"; 120 | @fa-var-check-square-o: "\f046"; 121 | @fa-var-chevron-circle-down: "\f13a"; 122 | @fa-var-chevron-circle-left: "\f137"; 123 | @fa-var-chevron-circle-right: "\f138"; 124 | @fa-var-chevron-circle-up: "\f139"; 125 | @fa-var-chevron-down: "\f078"; 126 | @fa-var-chevron-left: "\f053"; 127 | @fa-var-chevron-right: "\f054"; 128 | @fa-var-chevron-up: "\f077"; 129 | @fa-var-child: "\f1ae"; 130 | @fa-var-circle: "\f111"; 131 | @fa-var-circle-o: "\f10c"; 132 | @fa-var-circle-o-notch: "\f1ce"; 133 | @fa-var-circle-thin: "\f1db"; 134 | @fa-var-clipboard: "\f0ea"; 135 | @fa-var-clock-o: "\f017"; 136 | @fa-var-close: "\f00d"; 137 | @fa-var-cloud: "\f0c2"; 138 | @fa-var-cloud-download: "\f0ed"; 139 | @fa-var-cloud-upload: "\f0ee"; 140 | @fa-var-cny: "\f157"; 141 | @fa-var-code: "\f121"; 142 | @fa-var-code-fork: "\f126"; 143 | @fa-var-codepen: "\f1cb"; 144 | @fa-var-coffee: "\f0f4"; 145 | @fa-var-cog: "\f013"; 146 | @fa-var-cogs: "\f085"; 147 | @fa-var-columns: "\f0db"; 148 | @fa-var-comment: "\f075"; 149 | @fa-var-comment-o: "\f0e5"; 150 | @fa-var-comments: "\f086"; 151 | @fa-var-comments-o: "\f0e6"; 152 | @fa-var-compass: "\f14e"; 153 | @fa-var-compress: "\f066"; 154 | @fa-var-connectdevelop: "\f20e"; 155 | @fa-var-copy: "\f0c5"; 156 | @fa-var-copyright: "\f1f9"; 157 | @fa-var-credit-card: "\f09d"; 158 | @fa-var-crop: "\f125"; 159 | @fa-var-crosshairs: "\f05b"; 160 | @fa-var-css3: "\f13c"; 161 | @fa-var-cube: "\f1b2"; 162 | @fa-var-cubes: "\f1b3"; 163 | @fa-var-cut: "\f0c4"; 164 | @fa-var-cutlery: "\f0f5"; 165 | @fa-var-dashboard: "\f0e4"; 166 | @fa-var-dashcube: "\f210"; 167 | @fa-var-database: "\f1c0"; 168 | @fa-var-dedent: "\f03b"; 169 | @fa-var-delicious: "\f1a5"; 170 | @fa-var-desktop: "\f108"; 171 | @fa-var-deviantart: "\f1bd"; 172 | @fa-var-diamond: "\f219"; 173 | @fa-var-digg: "\f1a6"; 174 | @fa-var-dollar: "\f155"; 175 | @fa-var-dot-circle-o: "\f192"; 176 | @fa-var-download: "\f019"; 177 | @fa-var-dribbble: "\f17d"; 178 | @fa-var-dropbox: "\f16b"; 179 | @fa-var-drupal: "\f1a9"; 180 | @fa-var-edit: "\f044"; 181 | @fa-var-eject: "\f052"; 182 | @fa-var-ellipsis-h: "\f141"; 183 | @fa-var-ellipsis-v: "\f142"; 184 | @fa-var-empire: "\f1d1"; 185 | @fa-var-envelope: "\f0e0"; 186 | @fa-var-envelope-o: "\f003"; 187 | @fa-var-envelope-square: "\f199"; 188 | @fa-var-eraser: "\f12d"; 189 | @fa-var-eur: "\f153"; 190 | @fa-var-euro: "\f153"; 191 | @fa-var-exchange: "\f0ec"; 192 | @fa-var-exclamation: "\f12a"; 193 | @fa-var-exclamation-circle: "\f06a"; 194 | @fa-var-exclamation-triangle: "\f071"; 195 | @fa-var-expand: "\f065"; 196 | @fa-var-external-link: "\f08e"; 197 | @fa-var-external-link-square: "\f14c"; 198 | @fa-var-eye: "\f06e"; 199 | @fa-var-eye-slash: "\f070"; 200 | @fa-var-eyedropper: "\f1fb"; 201 | @fa-var-facebook: "\f09a"; 202 | @fa-var-facebook-f: "\f09a"; 203 | @fa-var-facebook-official: "\f230"; 204 | @fa-var-facebook-square: "\f082"; 205 | @fa-var-fast-backward: "\f049"; 206 | @fa-var-fast-forward: "\f050"; 207 | @fa-var-fax: "\f1ac"; 208 | @fa-var-female: "\f182"; 209 | @fa-var-fighter-jet: "\f0fb"; 210 | @fa-var-file: "\f15b"; 211 | @fa-var-file-archive-o: "\f1c6"; 212 | @fa-var-file-audio-o: "\f1c7"; 213 | @fa-var-file-code-o: "\f1c9"; 214 | @fa-var-file-excel-o: "\f1c3"; 215 | @fa-var-file-image-o: "\f1c5"; 216 | @fa-var-file-movie-o: "\f1c8"; 217 | @fa-var-file-o: "\f016"; 218 | @fa-var-file-pdf-o: "\f1c1"; 219 | @fa-var-file-photo-o: "\f1c5"; 220 | @fa-var-file-picture-o: "\f1c5"; 221 | @fa-var-file-powerpoint-o: "\f1c4"; 222 | @fa-var-file-sound-o: "\f1c7"; 223 | @fa-var-file-text: "\f15c"; 224 | @fa-var-file-text-o: "\f0f6"; 225 | @fa-var-file-video-o: "\f1c8"; 226 | @fa-var-file-word-o: "\f1c2"; 227 | @fa-var-file-zip-o: "\f1c6"; 228 | @fa-var-files-o: "\f0c5"; 229 | @fa-var-film: "\f008"; 230 | @fa-var-filter: "\f0b0"; 231 | @fa-var-fire: "\f06d"; 232 | @fa-var-fire-extinguisher: "\f134"; 233 | @fa-var-flag: "\f024"; 234 | @fa-var-flag-checkered: "\f11e"; 235 | @fa-var-flag-o: "\f11d"; 236 | @fa-var-flash: "\f0e7"; 237 | @fa-var-flask: "\f0c3"; 238 | @fa-var-flickr: "\f16e"; 239 | @fa-var-floppy-o: "\f0c7"; 240 | @fa-var-folder: "\f07b"; 241 | @fa-var-folder-o: "\f114"; 242 | @fa-var-folder-open: "\f07c"; 243 | @fa-var-folder-open-o: "\f115"; 244 | @fa-var-font: "\f031"; 245 | @fa-var-forumbee: "\f211"; 246 | @fa-var-forward: "\f04e"; 247 | @fa-var-foursquare: "\f180"; 248 | @fa-var-frown-o: "\f119"; 249 | @fa-var-futbol-o: "\f1e3"; 250 | @fa-var-gamepad: "\f11b"; 251 | @fa-var-gavel: "\f0e3"; 252 | @fa-var-gbp: "\f154"; 253 | @fa-var-ge: "\f1d1"; 254 | @fa-var-gear: "\f013"; 255 | @fa-var-gears: "\f085"; 256 | @fa-var-genderless: "\f1db"; 257 | @fa-var-gift: "\f06b"; 258 | @fa-var-git: "\f1d3"; 259 | @fa-var-git-square: "\f1d2"; 260 | @fa-var-github: "\f09b"; 261 | @fa-var-github-alt: "\f113"; 262 | @fa-var-github-square: "\f092"; 263 | @fa-var-gittip: "\f184"; 264 | @fa-var-glass: "\f000"; 265 | @fa-var-globe: "\f0ac"; 266 | @fa-var-google: "\f1a0"; 267 | @fa-var-google-plus: "\f0d5"; 268 | @fa-var-google-plus-square: "\f0d4"; 269 | @fa-var-google-wallet: "\f1ee"; 270 | @fa-var-graduation-cap: "\f19d"; 271 | @fa-var-gratipay: "\f184"; 272 | @fa-var-group: "\f0c0"; 273 | @fa-var-h-square: "\f0fd"; 274 | @fa-var-hacker-news: "\f1d4"; 275 | @fa-var-hand-o-down: "\f0a7"; 276 | @fa-var-hand-o-left: "\f0a5"; 277 | @fa-var-hand-o-right: "\f0a4"; 278 | @fa-var-hand-o-up: "\f0a6"; 279 | @fa-var-hdd-o: "\f0a0"; 280 | @fa-var-header: "\f1dc"; 281 | @fa-var-headphones: "\f025"; 282 | @fa-var-heart: "\f004"; 283 | @fa-var-heart-o: "\f08a"; 284 | @fa-var-heartbeat: "\f21e"; 285 | @fa-var-history: "\f1da"; 286 | @fa-var-home: "\f015"; 287 | @fa-var-hospital-o: "\f0f8"; 288 | @fa-var-hotel: "\f236"; 289 | @fa-var-html5: "\f13b"; 290 | @fa-var-ils: "\f20b"; 291 | @fa-var-image: "\f03e"; 292 | @fa-var-inbox: "\f01c"; 293 | @fa-var-indent: "\f03c"; 294 | @fa-var-info: "\f129"; 295 | @fa-var-info-circle: "\f05a"; 296 | @fa-var-inr: "\f156"; 297 | @fa-var-instagram: "\f16d"; 298 | @fa-var-institution: "\f19c"; 299 | @fa-var-ioxhost: "\f208"; 300 | @fa-var-italic: "\f033"; 301 | @fa-var-joomla: "\f1aa"; 302 | @fa-var-jpy: "\f157"; 303 | @fa-var-jsfiddle: "\f1cc"; 304 | @fa-var-key: "\f084"; 305 | @fa-var-keyboard-o: "\f11c"; 306 | @fa-var-krw: "\f159"; 307 | @fa-var-language: "\f1ab"; 308 | @fa-var-laptop: "\f109"; 309 | @fa-var-lastfm: "\f202"; 310 | @fa-var-lastfm-square: "\f203"; 311 | @fa-var-leaf: "\f06c"; 312 | @fa-var-leanpub: "\f212"; 313 | @fa-var-legal: "\f0e3"; 314 | @fa-var-lemon-o: "\f094"; 315 | @fa-var-level-down: "\f149"; 316 | @fa-var-level-up: "\f148"; 317 | @fa-var-life-bouy: "\f1cd"; 318 | @fa-var-life-buoy: "\f1cd"; 319 | @fa-var-life-ring: "\f1cd"; 320 | @fa-var-life-saver: "\f1cd"; 321 | @fa-var-lightbulb-o: "\f0eb"; 322 | @fa-var-line-chart: "\f201"; 323 | @fa-var-link: "\f0c1"; 324 | @fa-var-linkedin: "\f0e1"; 325 | @fa-var-linkedin-square: "\f08c"; 326 | @fa-var-linux: "\f17c"; 327 | @fa-var-list: "\f03a"; 328 | @fa-var-list-alt: "\f022"; 329 | @fa-var-list-ol: "\f0cb"; 330 | @fa-var-list-ul: "\f0ca"; 331 | @fa-var-location-arrow: "\f124"; 332 | @fa-var-lock: "\f023"; 333 | @fa-var-long-arrow-down: "\f175"; 334 | @fa-var-long-arrow-left: "\f177"; 335 | @fa-var-long-arrow-right: "\f178"; 336 | @fa-var-long-arrow-up: "\f176"; 337 | @fa-var-magic: "\f0d0"; 338 | @fa-var-magnet: "\f076"; 339 | @fa-var-mail-forward: "\f064"; 340 | @fa-var-mail-reply: "\f112"; 341 | @fa-var-mail-reply-all: "\f122"; 342 | @fa-var-male: "\f183"; 343 | @fa-var-map-marker: "\f041"; 344 | @fa-var-mars: "\f222"; 345 | @fa-var-mars-double: "\f227"; 346 | @fa-var-mars-stroke: "\f229"; 347 | @fa-var-mars-stroke-h: "\f22b"; 348 | @fa-var-mars-stroke-v: "\f22a"; 349 | @fa-var-maxcdn: "\f136"; 350 | @fa-var-meanpath: "\f20c"; 351 | @fa-var-medium: "\f23a"; 352 | @fa-var-medkit: "\f0fa"; 353 | @fa-var-meh-o: "\f11a"; 354 | @fa-var-mercury: "\f223"; 355 | @fa-var-microphone: "\f130"; 356 | @fa-var-microphone-slash: "\f131"; 357 | @fa-var-minus: "\f068"; 358 | @fa-var-minus-circle: "\f056"; 359 | @fa-var-minus-square: "\f146"; 360 | @fa-var-minus-square-o: "\f147"; 361 | @fa-var-mobile: "\f10b"; 362 | @fa-var-mobile-phone: "\f10b"; 363 | @fa-var-money: "\f0d6"; 364 | @fa-var-moon-o: "\f186"; 365 | @fa-var-mortar-board: "\f19d"; 366 | @fa-var-motorcycle: "\f21c"; 367 | @fa-var-music: "\f001"; 368 | @fa-var-navicon: "\f0c9"; 369 | @fa-var-neuter: "\f22c"; 370 | @fa-var-newspaper-o: "\f1ea"; 371 | @fa-var-openid: "\f19b"; 372 | @fa-var-outdent: "\f03b"; 373 | @fa-var-pagelines: "\f18c"; 374 | @fa-var-paint-brush: "\f1fc"; 375 | @fa-var-paper-plane: "\f1d8"; 376 | @fa-var-paper-plane-o: "\f1d9"; 377 | @fa-var-paperclip: "\f0c6"; 378 | @fa-var-paragraph: "\f1dd"; 379 | @fa-var-paste: "\f0ea"; 380 | @fa-var-pause: "\f04c"; 381 | @fa-var-paw: "\f1b0"; 382 | @fa-var-paypal: "\f1ed"; 383 | @fa-var-pencil: "\f040"; 384 | @fa-var-pencil-square: "\f14b"; 385 | @fa-var-pencil-square-o: "\f044"; 386 | @fa-var-phone: "\f095"; 387 | @fa-var-phone-square: "\f098"; 388 | @fa-var-photo: "\f03e"; 389 | @fa-var-picture-o: "\f03e"; 390 | @fa-var-pie-chart: "\f200"; 391 | @fa-var-pied-piper: "\f1a7"; 392 | @fa-var-pied-piper-alt: "\f1a8"; 393 | @fa-var-pinterest: "\f0d2"; 394 | @fa-var-pinterest-p: "\f231"; 395 | @fa-var-pinterest-square: "\f0d3"; 396 | @fa-var-plane: "\f072"; 397 | @fa-var-play: "\f04b"; 398 | @fa-var-play-circle: "\f144"; 399 | @fa-var-play-circle-o: "\f01d"; 400 | @fa-var-plug: "\f1e6"; 401 | @fa-var-plus: "\f067"; 402 | @fa-var-plus-circle: "\f055"; 403 | @fa-var-plus-square: "\f0fe"; 404 | @fa-var-plus-square-o: "\f196"; 405 | @fa-var-power-off: "\f011"; 406 | @fa-var-print: "\f02f"; 407 | @fa-var-puzzle-piece: "\f12e"; 408 | @fa-var-qq: "\f1d6"; 409 | @fa-var-qrcode: "\f029"; 410 | @fa-var-question: "\f128"; 411 | @fa-var-question-circle: "\f059"; 412 | @fa-var-quote-left: "\f10d"; 413 | @fa-var-quote-right: "\f10e"; 414 | @fa-var-ra: "\f1d0"; 415 | @fa-var-random: "\f074"; 416 | @fa-var-rebel: "\f1d0"; 417 | @fa-var-recycle: "\f1b8"; 418 | @fa-var-reddit: "\f1a1"; 419 | @fa-var-reddit-square: "\f1a2"; 420 | @fa-var-refresh: "\f021"; 421 | @fa-var-remove: "\f00d"; 422 | @fa-var-renren: "\f18b"; 423 | @fa-var-reorder: "\f0c9"; 424 | @fa-var-repeat: "\f01e"; 425 | @fa-var-reply: "\f112"; 426 | @fa-var-reply-all: "\f122"; 427 | @fa-var-retweet: "\f079"; 428 | @fa-var-rmb: "\f157"; 429 | @fa-var-road: "\f018"; 430 | @fa-var-rocket: "\f135"; 431 | @fa-var-rotate-left: "\f0e2"; 432 | @fa-var-rotate-right: "\f01e"; 433 | @fa-var-rouble: "\f158"; 434 | @fa-var-rss: "\f09e"; 435 | @fa-var-rss-square: "\f143"; 436 | @fa-var-rub: "\f158"; 437 | @fa-var-ruble: "\f158"; 438 | @fa-var-rupee: "\f156"; 439 | @fa-var-save: "\f0c7"; 440 | @fa-var-scissors: "\f0c4"; 441 | @fa-var-search: "\f002"; 442 | @fa-var-search-minus: "\f010"; 443 | @fa-var-search-plus: "\f00e"; 444 | @fa-var-sellsy: "\f213"; 445 | @fa-var-send: "\f1d8"; 446 | @fa-var-send-o: "\f1d9"; 447 | @fa-var-server: "\f233"; 448 | @fa-var-share: "\f064"; 449 | @fa-var-share-alt: "\f1e0"; 450 | @fa-var-share-alt-square: "\f1e1"; 451 | @fa-var-share-square: "\f14d"; 452 | @fa-var-share-square-o: "\f045"; 453 | @fa-var-shekel: "\f20b"; 454 | @fa-var-sheqel: "\f20b"; 455 | @fa-var-shield: "\f132"; 456 | @fa-var-ship: "\f21a"; 457 | @fa-var-shirtsinbulk: "\f214"; 458 | @fa-var-shopping-cart: "\f07a"; 459 | @fa-var-sign-in: "\f090"; 460 | @fa-var-sign-out: "\f08b"; 461 | @fa-var-signal: "\f012"; 462 | @fa-var-simplybuilt: "\f215"; 463 | @fa-var-sitemap: "\f0e8"; 464 | @fa-var-skyatlas: "\f216"; 465 | @fa-var-skype: "\f17e"; 466 | @fa-var-slack: "\f198"; 467 | @fa-var-sliders: "\f1de"; 468 | @fa-var-slideshare: "\f1e7"; 469 | @fa-var-smile-o: "\f118"; 470 | @fa-var-soccer-ball-o: "\f1e3"; 471 | @fa-var-sort: "\f0dc"; 472 | @fa-var-sort-alpha-asc: "\f15d"; 473 | @fa-var-sort-alpha-desc: "\f15e"; 474 | @fa-var-sort-amount-asc: "\f160"; 475 | @fa-var-sort-amount-desc: "\f161"; 476 | @fa-var-sort-asc: "\f0de"; 477 | @fa-var-sort-desc: "\f0dd"; 478 | @fa-var-sort-down: "\f0dd"; 479 | @fa-var-sort-numeric-asc: "\f162"; 480 | @fa-var-sort-numeric-desc: "\f163"; 481 | @fa-var-sort-up: "\f0de"; 482 | @fa-var-soundcloud: "\f1be"; 483 | @fa-var-space-shuttle: "\f197"; 484 | @fa-var-spinner: "\f110"; 485 | @fa-var-spoon: "\f1b1"; 486 | @fa-var-spotify: "\f1bc"; 487 | @fa-var-square: "\f0c8"; 488 | @fa-var-square-o: "\f096"; 489 | @fa-var-stack-exchange: "\f18d"; 490 | @fa-var-stack-overflow: "\f16c"; 491 | @fa-var-star: "\f005"; 492 | @fa-var-star-half: "\f089"; 493 | @fa-var-star-half-empty: "\f123"; 494 | @fa-var-star-half-full: "\f123"; 495 | @fa-var-star-half-o: "\f123"; 496 | @fa-var-star-o: "\f006"; 497 | @fa-var-steam: "\f1b6"; 498 | @fa-var-steam-square: "\f1b7"; 499 | @fa-var-step-backward: "\f048"; 500 | @fa-var-step-forward: "\f051"; 501 | @fa-var-stethoscope: "\f0f1"; 502 | @fa-var-stop: "\f04d"; 503 | @fa-var-street-view: "\f21d"; 504 | @fa-var-strikethrough: "\f0cc"; 505 | @fa-var-stumbleupon: "\f1a4"; 506 | @fa-var-stumbleupon-circle: "\f1a3"; 507 | @fa-var-subscript: "\f12c"; 508 | @fa-var-subway: "\f239"; 509 | @fa-var-suitcase: "\f0f2"; 510 | @fa-var-sun-o: "\f185"; 511 | @fa-var-superscript: "\f12b"; 512 | @fa-var-support: "\f1cd"; 513 | @fa-var-table: "\f0ce"; 514 | @fa-var-tablet: "\f10a"; 515 | @fa-var-tachometer: "\f0e4"; 516 | @fa-var-tag: "\f02b"; 517 | @fa-var-tags: "\f02c"; 518 | @fa-var-tasks: "\f0ae"; 519 | @fa-var-taxi: "\f1ba"; 520 | @fa-var-tencent-weibo: "\f1d5"; 521 | @fa-var-terminal: "\f120"; 522 | @fa-var-text-height: "\f034"; 523 | @fa-var-text-width: "\f035"; 524 | @fa-var-th: "\f00a"; 525 | @fa-var-th-large: "\f009"; 526 | @fa-var-th-list: "\f00b"; 527 | @fa-var-thumb-tack: "\f08d"; 528 | @fa-var-thumbs-down: "\f165"; 529 | @fa-var-thumbs-o-down: "\f088"; 530 | @fa-var-thumbs-o-up: "\f087"; 531 | @fa-var-thumbs-up: "\f164"; 532 | @fa-var-ticket: "\f145"; 533 | @fa-var-times: "\f00d"; 534 | @fa-var-times-circle: "\f057"; 535 | @fa-var-times-circle-o: "\f05c"; 536 | @fa-var-tint: "\f043"; 537 | @fa-var-toggle-down: "\f150"; 538 | @fa-var-toggle-left: "\f191"; 539 | @fa-var-toggle-off: "\f204"; 540 | @fa-var-toggle-on: "\f205"; 541 | @fa-var-toggle-right: "\f152"; 542 | @fa-var-toggle-up: "\f151"; 543 | @fa-var-train: "\f238"; 544 | @fa-var-transgender: "\f224"; 545 | @fa-var-transgender-alt: "\f225"; 546 | @fa-var-trash: "\f1f8"; 547 | @fa-var-trash-o: "\f014"; 548 | @fa-var-tree: "\f1bb"; 549 | @fa-var-trello: "\f181"; 550 | @fa-var-trophy: "\f091"; 551 | @fa-var-truck: "\f0d1"; 552 | @fa-var-try: "\f195"; 553 | @fa-var-tty: "\f1e4"; 554 | @fa-var-tumblr: "\f173"; 555 | @fa-var-tumblr-square: "\f174"; 556 | @fa-var-turkish-lira: "\f195"; 557 | @fa-var-twitch: "\f1e8"; 558 | @fa-var-twitter: "\f099"; 559 | @fa-var-twitter-square: "\f081"; 560 | @fa-var-umbrella: "\f0e9"; 561 | @fa-var-underline: "\f0cd"; 562 | @fa-var-undo: "\f0e2"; 563 | @fa-var-university: "\f19c"; 564 | @fa-var-unlink: "\f127"; 565 | @fa-var-unlock: "\f09c"; 566 | @fa-var-unlock-alt: "\f13e"; 567 | @fa-var-unsorted: "\f0dc"; 568 | @fa-var-upload: "\f093"; 569 | @fa-var-usd: "\f155"; 570 | @fa-var-user: "\f007"; 571 | @fa-var-user-md: "\f0f0"; 572 | @fa-var-user-plus: "\f234"; 573 | @fa-var-user-secret: "\f21b"; 574 | @fa-var-user-times: "\f235"; 575 | @fa-var-users: "\f0c0"; 576 | @fa-var-venus: "\f221"; 577 | @fa-var-venus-double: "\f226"; 578 | @fa-var-venus-mars: "\f228"; 579 | @fa-var-viacoin: "\f237"; 580 | @fa-var-video-camera: "\f03d"; 581 | @fa-var-vimeo-square: "\f194"; 582 | @fa-var-vine: "\f1ca"; 583 | @fa-var-vk: "\f189"; 584 | @fa-var-volume-down: "\f027"; 585 | @fa-var-volume-off: "\f026"; 586 | @fa-var-volume-up: "\f028"; 587 | @fa-var-warning: "\f071"; 588 | @fa-var-wechat: "\f1d7"; 589 | @fa-var-weibo: "\f18a"; 590 | @fa-var-weixin: "\f1d7"; 591 | @fa-var-whatsapp: "\f232"; 592 | @fa-var-wheelchair: "\f193"; 593 | @fa-var-wifi: "\f1eb"; 594 | @fa-var-windows: "\f17a"; 595 | @fa-var-won: "\f159"; 596 | @fa-var-wordpress: "\f19a"; 597 | @fa-var-wrench: "\f0ad"; 598 | @fa-var-xing: "\f168"; 599 | @fa-var-xing-square: "\f169"; 600 | @fa-var-yahoo: "\f19e"; 601 | @fa-var-yelp: "\f1e9"; 602 | @fa-var-yen: "\f157"; 603 | @fa-var-youtube: "\f167"; 604 | @fa-var-youtube-play: "\f16a"; 605 | @fa-var-youtube-square: "\f166"; 606 | 607 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | 15 | @mixin fa-icon-rotate($degrees, $rotation) { 16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 17 | -webkit-transform: rotate($degrees); 18 | -ms-transform: rotate($degrees); 19 | transform: rotate($degrees); 20 | } 21 | 22 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 24 | -webkit-transform: scale($horiz, $vert); 25 | -ms-transform: scale($horiz, $vert); 26 | transform: scale($horiz, $vert); 27 | } 28 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../fonts" !default; 5 | $fa-font-size-base: 14px !default; 6 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts" !default; // for referencing Bootstrap CDN font files directly 7 | $fa-css-prefix: fa !default; 8 | $fa-version: "4.3.0" !default; 9 | $fa-border-color: #eee !default; 10 | $fa-inverse: #fff !default; 11 | $fa-li-width: (30em / 14) !default; 12 | 13 | $fa-var-adjust: "\f042"; 14 | $fa-var-adn: "\f170"; 15 | $fa-var-align-center: "\f037"; 16 | $fa-var-align-justify: "\f039"; 17 | $fa-var-align-left: "\f036"; 18 | $fa-var-align-right: "\f038"; 19 | $fa-var-ambulance: "\f0f9"; 20 | $fa-var-anchor: "\f13d"; 21 | $fa-var-android: "\f17b"; 22 | $fa-var-angellist: "\f209"; 23 | $fa-var-angle-double-down: "\f103"; 24 | $fa-var-angle-double-left: "\f100"; 25 | $fa-var-angle-double-right: "\f101"; 26 | $fa-var-angle-double-up: "\f102"; 27 | $fa-var-angle-down: "\f107"; 28 | $fa-var-angle-left: "\f104"; 29 | $fa-var-angle-right: "\f105"; 30 | $fa-var-angle-up: "\f106"; 31 | $fa-var-apple: "\f179"; 32 | $fa-var-archive: "\f187"; 33 | $fa-var-area-chart: "\f1fe"; 34 | $fa-var-arrow-circle-down: "\f0ab"; 35 | $fa-var-arrow-circle-left: "\f0a8"; 36 | $fa-var-arrow-circle-o-down: "\f01a"; 37 | $fa-var-arrow-circle-o-left: "\f190"; 38 | $fa-var-arrow-circle-o-right: "\f18e"; 39 | $fa-var-arrow-circle-o-up: "\f01b"; 40 | $fa-var-arrow-circle-right: "\f0a9"; 41 | $fa-var-arrow-circle-up: "\f0aa"; 42 | $fa-var-arrow-down: "\f063"; 43 | $fa-var-arrow-left: "\f060"; 44 | $fa-var-arrow-right: "\f061"; 45 | $fa-var-arrow-up: "\f062"; 46 | $fa-var-arrows: "\f047"; 47 | $fa-var-arrows-alt: "\f0b2"; 48 | $fa-var-arrows-h: "\f07e"; 49 | $fa-var-arrows-v: "\f07d"; 50 | $fa-var-asterisk: "\f069"; 51 | $fa-var-at: "\f1fa"; 52 | $fa-var-automobile: "\f1b9"; 53 | $fa-var-backward: "\f04a"; 54 | $fa-var-ban: "\f05e"; 55 | $fa-var-bank: "\f19c"; 56 | $fa-var-bar-chart: "\f080"; 57 | $fa-var-bar-chart-o: "\f080"; 58 | $fa-var-barcode: "\f02a"; 59 | $fa-var-bars: "\f0c9"; 60 | $fa-var-bed: "\f236"; 61 | $fa-var-beer: "\f0fc"; 62 | $fa-var-behance: "\f1b4"; 63 | $fa-var-behance-square: "\f1b5"; 64 | $fa-var-bell: "\f0f3"; 65 | $fa-var-bell-o: "\f0a2"; 66 | $fa-var-bell-slash: "\f1f6"; 67 | $fa-var-bell-slash-o: "\f1f7"; 68 | $fa-var-bicycle: "\f206"; 69 | $fa-var-binoculars: "\f1e5"; 70 | $fa-var-birthday-cake: "\f1fd"; 71 | $fa-var-bitbucket: "\f171"; 72 | $fa-var-bitbucket-square: "\f172"; 73 | $fa-var-bitcoin: "\f15a"; 74 | $fa-var-bold: "\f032"; 75 | $fa-var-bolt: "\f0e7"; 76 | $fa-var-bomb: "\f1e2"; 77 | $fa-var-book: "\f02d"; 78 | $fa-var-bookmark: "\f02e"; 79 | $fa-var-bookmark-o: "\f097"; 80 | $fa-var-briefcase: "\f0b1"; 81 | $fa-var-btc: "\f15a"; 82 | $fa-var-bug: "\f188"; 83 | $fa-var-building: "\f1ad"; 84 | $fa-var-building-o: "\f0f7"; 85 | $fa-var-bullhorn: "\f0a1"; 86 | $fa-var-bullseye: "\f140"; 87 | $fa-var-bus: "\f207"; 88 | $fa-var-buysellads: "\f20d"; 89 | $fa-var-cab: "\f1ba"; 90 | $fa-var-calculator: "\f1ec"; 91 | $fa-var-calendar: "\f073"; 92 | $fa-var-calendar-o: "\f133"; 93 | $fa-var-camera: "\f030"; 94 | $fa-var-camera-retro: "\f083"; 95 | $fa-var-car: "\f1b9"; 96 | $fa-var-caret-down: "\f0d7"; 97 | $fa-var-caret-left: "\f0d9"; 98 | $fa-var-caret-right: "\f0da"; 99 | $fa-var-caret-square-o-down: "\f150"; 100 | $fa-var-caret-square-o-left: "\f191"; 101 | $fa-var-caret-square-o-right: "\f152"; 102 | $fa-var-caret-square-o-up: "\f151"; 103 | $fa-var-caret-up: "\f0d8"; 104 | $fa-var-cart-arrow-down: "\f218"; 105 | $fa-var-cart-plus: "\f217"; 106 | $fa-var-cc: "\f20a"; 107 | $fa-var-cc-amex: "\f1f3"; 108 | $fa-var-cc-discover: "\f1f2"; 109 | $fa-var-cc-mastercard: "\f1f1"; 110 | $fa-var-cc-paypal: "\f1f4"; 111 | $fa-var-cc-stripe: "\f1f5"; 112 | $fa-var-cc-visa: "\f1f0"; 113 | $fa-var-certificate: "\f0a3"; 114 | $fa-var-chain: "\f0c1"; 115 | $fa-var-chain-broken: "\f127"; 116 | $fa-var-check: "\f00c"; 117 | $fa-var-check-circle: "\f058"; 118 | $fa-var-check-circle-o: "\f05d"; 119 | $fa-var-check-square: "\f14a"; 120 | $fa-var-check-square-o: "\f046"; 121 | $fa-var-chevron-circle-down: "\f13a"; 122 | $fa-var-chevron-circle-left: "\f137"; 123 | $fa-var-chevron-circle-right: "\f138"; 124 | $fa-var-chevron-circle-up: "\f139"; 125 | $fa-var-chevron-down: "\f078"; 126 | $fa-var-chevron-left: "\f053"; 127 | $fa-var-chevron-right: "\f054"; 128 | $fa-var-chevron-up: "\f077"; 129 | $fa-var-child: "\f1ae"; 130 | $fa-var-circle: "\f111"; 131 | $fa-var-circle-o: "\f10c"; 132 | $fa-var-circle-o-notch: "\f1ce"; 133 | $fa-var-circle-thin: "\f1db"; 134 | $fa-var-clipboard: "\f0ea"; 135 | $fa-var-clock-o: "\f017"; 136 | $fa-var-close: "\f00d"; 137 | $fa-var-cloud: "\f0c2"; 138 | $fa-var-cloud-download: "\f0ed"; 139 | $fa-var-cloud-upload: "\f0ee"; 140 | $fa-var-cny: "\f157"; 141 | $fa-var-code: "\f121"; 142 | $fa-var-code-fork: "\f126"; 143 | $fa-var-codepen: "\f1cb"; 144 | $fa-var-coffee: "\f0f4"; 145 | $fa-var-cog: "\f013"; 146 | $fa-var-cogs: "\f085"; 147 | $fa-var-columns: "\f0db"; 148 | $fa-var-comment: "\f075"; 149 | $fa-var-comment-o: "\f0e5"; 150 | $fa-var-comments: "\f086"; 151 | $fa-var-comments-o: "\f0e6"; 152 | $fa-var-compass: "\f14e"; 153 | $fa-var-compress: "\f066"; 154 | $fa-var-connectdevelop: "\f20e"; 155 | $fa-var-copy: "\f0c5"; 156 | $fa-var-copyright: "\f1f9"; 157 | $fa-var-credit-card: "\f09d"; 158 | $fa-var-crop: "\f125"; 159 | $fa-var-crosshairs: "\f05b"; 160 | $fa-var-css3: "\f13c"; 161 | $fa-var-cube: "\f1b2"; 162 | $fa-var-cubes: "\f1b3"; 163 | $fa-var-cut: "\f0c4"; 164 | $fa-var-cutlery: "\f0f5"; 165 | $fa-var-dashboard: "\f0e4"; 166 | $fa-var-dashcube: "\f210"; 167 | $fa-var-database: "\f1c0"; 168 | $fa-var-dedent: "\f03b"; 169 | $fa-var-delicious: "\f1a5"; 170 | $fa-var-desktop: "\f108"; 171 | $fa-var-deviantart: "\f1bd"; 172 | $fa-var-diamond: "\f219"; 173 | $fa-var-digg: "\f1a6"; 174 | $fa-var-dollar: "\f155"; 175 | $fa-var-dot-circle-o: "\f192"; 176 | $fa-var-download: "\f019"; 177 | $fa-var-dribbble: "\f17d"; 178 | $fa-var-dropbox: "\f16b"; 179 | $fa-var-drupal: "\f1a9"; 180 | $fa-var-edit: "\f044"; 181 | $fa-var-eject: "\f052"; 182 | $fa-var-ellipsis-h: "\f141"; 183 | $fa-var-ellipsis-v: "\f142"; 184 | $fa-var-empire: "\f1d1"; 185 | $fa-var-envelope: "\f0e0"; 186 | $fa-var-envelope-o: "\f003"; 187 | $fa-var-envelope-square: "\f199"; 188 | $fa-var-eraser: "\f12d"; 189 | $fa-var-eur: "\f153"; 190 | $fa-var-euro: "\f153"; 191 | $fa-var-exchange: "\f0ec"; 192 | $fa-var-exclamation: "\f12a"; 193 | $fa-var-exclamation-circle: "\f06a"; 194 | $fa-var-exclamation-triangle: "\f071"; 195 | $fa-var-expand: "\f065"; 196 | $fa-var-external-link: "\f08e"; 197 | $fa-var-external-link-square: "\f14c"; 198 | $fa-var-eye: "\f06e"; 199 | $fa-var-eye-slash: "\f070"; 200 | $fa-var-eyedropper: "\f1fb"; 201 | $fa-var-facebook: "\f09a"; 202 | $fa-var-facebook-f: "\f09a"; 203 | $fa-var-facebook-official: "\f230"; 204 | $fa-var-facebook-square: "\f082"; 205 | $fa-var-fast-backward: "\f049"; 206 | $fa-var-fast-forward: "\f050"; 207 | $fa-var-fax: "\f1ac"; 208 | $fa-var-female: "\f182"; 209 | $fa-var-fighter-jet: "\f0fb"; 210 | $fa-var-file: "\f15b"; 211 | $fa-var-file-archive-o: "\f1c6"; 212 | $fa-var-file-audio-o: "\f1c7"; 213 | $fa-var-file-code-o: "\f1c9"; 214 | $fa-var-file-excel-o: "\f1c3"; 215 | $fa-var-file-image-o: "\f1c5"; 216 | $fa-var-file-movie-o: "\f1c8"; 217 | $fa-var-file-o: "\f016"; 218 | $fa-var-file-pdf-o: "\f1c1"; 219 | $fa-var-file-photo-o: "\f1c5"; 220 | $fa-var-file-picture-o: "\f1c5"; 221 | $fa-var-file-powerpoint-o: "\f1c4"; 222 | $fa-var-file-sound-o: "\f1c7"; 223 | $fa-var-file-text: "\f15c"; 224 | $fa-var-file-text-o: "\f0f6"; 225 | $fa-var-file-video-o: "\f1c8"; 226 | $fa-var-file-word-o: "\f1c2"; 227 | $fa-var-file-zip-o: "\f1c6"; 228 | $fa-var-files-o: "\f0c5"; 229 | $fa-var-film: "\f008"; 230 | $fa-var-filter: "\f0b0"; 231 | $fa-var-fire: "\f06d"; 232 | $fa-var-fire-extinguisher: "\f134"; 233 | $fa-var-flag: "\f024"; 234 | $fa-var-flag-checkered: "\f11e"; 235 | $fa-var-flag-o: "\f11d"; 236 | $fa-var-flash: "\f0e7"; 237 | $fa-var-flask: "\f0c3"; 238 | $fa-var-flickr: "\f16e"; 239 | $fa-var-floppy-o: "\f0c7"; 240 | $fa-var-folder: "\f07b"; 241 | $fa-var-folder-o: "\f114"; 242 | $fa-var-folder-open: "\f07c"; 243 | $fa-var-folder-open-o: "\f115"; 244 | $fa-var-font: "\f031"; 245 | $fa-var-forumbee: "\f211"; 246 | $fa-var-forward: "\f04e"; 247 | $fa-var-foursquare: "\f180"; 248 | $fa-var-frown-o: "\f119"; 249 | $fa-var-futbol-o: "\f1e3"; 250 | $fa-var-gamepad: "\f11b"; 251 | $fa-var-gavel: "\f0e3"; 252 | $fa-var-gbp: "\f154"; 253 | $fa-var-ge: "\f1d1"; 254 | $fa-var-gear: "\f013"; 255 | $fa-var-gears: "\f085"; 256 | $fa-var-genderless: "\f1db"; 257 | $fa-var-gift: "\f06b"; 258 | $fa-var-git: "\f1d3"; 259 | $fa-var-git-square: "\f1d2"; 260 | $fa-var-github: "\f09b"; 261 | $fa-var-github-alt: "\f113"; 262 | $fa-var-github-square: "\f092"; 263 | $fa-var-gittip: "\f184"; 264 | $fa-var-glass: "\f000"; 265 | $fa-var-globe: "\f0ac"; 266 | $fa-var-google: "\f1a0"; 267 | $fa-var-google-plus: "\f0d5"; 268 | $fa-var-google-plus-square: "\f0d4"; 269 | $fa-var-google-wallet: "\f1ee"; 270 | $fa-var-graduation-cap: "\f19d"; 271 | $fa-var-gratipay: "\f184"; 272 | $fa-var-group: "\f0c0"; 273 | $fa-var-h-square: "\f0fd"; 274 | $fa-var-hacker-news: "\f1d4"; 275 | $fa-var-hand-o-down: "\f0a7"; 276 | $fa-var-hand-o-left: "\f0a5"; 277 | $fa-var-hand-o-right: "\f0a4"; 278 | $fa-var-hand-o-up: "\f0a6"; 279 | $fa-var-hdd-o: "\f0a0"; 280 | $fa-var-header: "\f1dc"; 281 | $fa-var-headphones: "\f025"; 282 | $fa-var-heart: "\f004"; 283 | $fa-var-heart-o: "\f08a"; 284 | $fa-var-heartbeat: "\f21e"; 285 | $fa-var-history: "\f1da"; 286 | $fa-var-home: "\f015"; 287 | $fa-var-hospital-o: "\f0f8"; 288 | $fa-var-hotel: "\f236"; 289 | $fa-var-html5: "\f13b"; 290 | $fa-var-ils: "\f20b"; 291 | $fa-var-image: "\f03e"; 292 | $fa-var-inbox: "\f01c"; 293 | $fa-var-indent: "\f03c"; 294 | $fa-var-info: "\f129"; 295 | $fa-var-info-circle: "\f05a"; 296 | $fa-var-inr: "\f156"; 297 | $fa-var-instagram: "\f16d"; 298 | $fa-var-institution: "\f19c"; 299 | $fa-var-ioxhost: "\f208"; 300 | $fa-var-italic: "\f033"; 301 | $fa-var-joomla: "\f1aa"; 302 | $fa-var-jpy: "\f157"; 303 | $fa-var-jsfiddle: "\f1cc"; 304 | $fa-var-key: "\f084"; 305 | $fa-var-keyboard-o: "\f11c"; 306 | $fa-var-krw: "\f159"; 307 | $fa-var-language: "\f1ab"; 308 | $fa-var-laptop: "\f109"; 309 | $fa-var-lastfm: "\f202"; 310 | $fa-var-lastfm-square: "\f203"; 311 | $fa-var-leaf: "\f06c"; 312 | $fa-var-leanpub: "\f212"; 313 | $fa-var-legal: "\f0e3"; 314 | $fa-var-lemon-o: "\f094"; 315 | $fa-var-level-down: "\f149"; 316 | $fa-var-level-up: "\f148"; 317 | $fa-var-life-bouy: "\f1cd"; 318 | $fa-var-life-buoy: "\f1cd"; 319 | $fa-var-life-ring: "\f1cd"; 320 | $fa-var-life-saver: "\f1cd"; 321 | $fa-var-lightbulb-o: "\f0eb"; 322 | $fa-var-line-chart: "\f201"; 323 | $fa-var-link: "\f0c1"; 324 | $fa-var-linkedin: "\f0e1"; 325 | $fa-var-linkedin-square: "\f08c"; 326 | $fa-var-linux: "\f17c"; 327 | $fa-var-list: "\f03a"; 328 | $fa-var-list-alt: "\f022"; 329 | $fa-var-list-ol: "\f0cb"; 330 | $fa-var-list-ul: "\f0ca"; 331 | $fa-var-location-arrow: "\f124"; 332 | $fa-var-lock: "\f023"; 333 | $fa-var-long-arrow-down: "\f175"; 334 | $fa-var-long-arrow-left: "\f177"; 335 | $fa-var-long-arrow-right: "\f178"; 336 | $fa-var-long-arrow-up: "\f176"; 337 | $fa-var-magic: "\f0d0"; 338 | $fa-var-magnet: "\f076"; 339 | $fa-var-mail-forward: "\f064"; 340 | $fa-var-mail-reply: "\f112"; 341 | $fa-var-mail-reply-all: "\f122"; 342 | $fa-var-male: "\f183"; 343 | $fa-var-map-marker: "\f041"; 344 | $fa-var-mars: "\f222"; 345 | $fa-var-mars-double: "\f227"; 346 | $fa-var-mars-stroke: "\f229"; 347 | $fa-var-mars-stroke-h: "\f22b"; 348 | $fa-var-mars-stroke-v: "\f22a"; 349 | $fa-var-maxcdn: "\f136"; 350 | $fa-var-meanpath: "\f20c"; 351 | $fa-var-medium: "\f23a"; 352 | $fa-var-medkit: "\f0fa"; 353 | $fa-var-meh-o: "\f11a"; 354 | $fa-var-mercury: "\f223"; 355 | $fa-var-microphone: "\f130"; 356 | $fa-var-microphone-slash: "\f131"; 357 | $fa-var-minus: "\f068"; 358 | $fa-var-minus-circle: "\f056"; 359 | $fa-var-minus-square: "\f146"; 360 | $fa-var-minus-square-o: "\f147"; 361 | $fa-var-mobile: "\f10b"; 362 | $fa-var-mobile-phone: "\f10b"; 363 | $fa-var-money: "\f0d6"; 364 | $fa-var-moon-o: "\f186"; 365 | $fa-var-mortar-board: "\f19d"; 366 | $fa-var-motorcycle: "\f21c"; 367 | $fa-var-music: "\f001"; 368 | $fa-var-navicon: "\f0c9"; 369 | $fa-var-neuter: "\f22c"; 370 | $fa-var-newspaper-o: "\f1ea"; 371 | $fa-var-openid: "\f19b"; 372 | $fa-var-outdent: "\f03b"; 373 | $fa-var-pagelines: "\f18c"; 374 | $fa-var-paint-brush: "\f1fc"; 375 | $fa-var-paper-plane: "\f1d8"; 376 | $fa-var-paper-plane-o: "\f1d9"; 377 | $fa-var-paperclip: "\f0c6"; 378 | $fa-var-paragraph: "\f1dd"; 379 | $fa-var-paste: "\f0ea"; 380 | $fa-var-pause: "\f04c"; 381 | $fa-var-paw: "\f1b0"; 382 | $fa-var-paypal: "\f1ed"; 383 | $fa-var-pencil: "\f040"; 384 | $fa-var-pencil-square: "\f14b"; 385 | $fa-var-pencil-square-o: "\f044"; 386 | $fa-var-phone: "\f095"; 387 | $fa-var-phone-square: "\f098"; 388 | $fa-var-photo: "\f03e"; 389 | $fa-var-picture-o: "\f03e"; 390 | $fa-var-pie-chart: "\f200"; 391 | $fa-var-pied-piper: "\f1a7"; 392 | $fa-var-pied-piper-alt: "\f1a8"; 393 | $fa-var-pinterest: "\f0d2"; 394 | $fa-var-pinterest-p: "\f231"; 395 | $fa-var-pinterest-square: "\f0d3"; 396 | $fa-var-plane: "\f072"; 397 | $fa-var-play: "\f04b"; 398 | $fa-var-play-circle: "\f144"; 399 | $fa-var-play-circle-o: "\f01d"; 400 | $fa-var-plug: "\f1e6"; 401 | $fa-var-plus: "\f067"; 402 | $fa-var-plus-circle: "\f055"; 403 | $fa-var-plus-square: "\f0fe"; 404 | $fa-var-plus-square-o: "\f196"; 405 | $fa-var-power-off: "\f011"; 406 | $fa-var-print: "\f02f"; 407 | $fa-var-puzzle-piece: "\f12e"; 408 | $fa-var-qq: "\f1d6"; 409 | $fa-var-qrcode: "\f029"; 410 | $fa-var-question: "\f128"; 411 | $fa-var-question-circle: "\f059"; 412 | $fa-var-quote-left: "\f10d"; 413 | $fa-var-quote-right: "\f10e"; 414 | $fa-var-ra: "\f1d0"; 415 | $fa-var-random: "\f074"; 416 | $fa-var-rebel: "\f1d0"; 417 | $fa-var-recycle: "\f1b8"; 418 | $fa-var-reddit: "\f1a1"; 419 | $fa-var-reddit-square: "\f1a2"; 420 | $fa-var-refresh: "\f021"; 421 | $fa-var-remove: "\f00d"; 422 | $fa-var-renren: "\f18b"; 423 | $fa-var-reorder: "\f0c9"; 424 | $fa-var-repeat: "\f01e"; 425 | $fa-var-reply: "\f112"; 426 | $fa-var-reply-all: "\f122"; 427 | $fa-var-retweet: "\f079"; 428 | $fa-var-rmb: "\f157"; 429 | $fa-var-road: "\f018"; 430 | $fa-var-rocket: "\f135"; 431 | $fa-var-rotate-left: "\f0e2"; 432 | $fa-var-rotate-right: "\f01e"; 433 | $fa-var-rouble: "\f158"; 434 | $fa-var-rss: "\f09e"; 435 | $fa-var-rss-square: "\f143"; 436 | $fa-var-rub: "\f158"; 437 | $fa-var-ruble: "\f158"; 438 | $fa-var-rupee: "\f156"; 439 | $fa-var-save: "\f0c7"; 440 | $fa-var-scissors: "\f0c4"; 441 | $fa-var-search: "\f002"; 442 | $fa-var-search-minus: "\f010"; 443 | $fa-var-search-plus: "\f00e"; 444 | $fa-var-sellsy: "\f213"; 445 | $fa-var-send: "\f1d8"; 446 | $fa-var-send-o: "\f1d9"; 447 | $fa-var-server: "\f233"; 448 | $fa-var-share: "\f064"; 449 | $fa-var-share-alt: "\f1e0"; 450 | $fa-var-share-alt-square: "\f1e1"; 451 | $fa-var-share-square: "\f14d"; 452 | $fa-var-share-square-o: "\f045"; 453 | $fa-var-shekel: "\f20b"; 454 | $fa-var-sheqel: "\f20b"; 455 | $fa-var-shield: "\f132"; 456 | $fa-var-ship: "\f21a"; 457 | $fa-var-shirtsinbulk: "\f214"; 458 | $fa-var-shopping-cart: "\f07a"; 459 | $fa-var-sign-in: "\f090"; 460 | $fa-var-sign-out: "\f08b"; 461 | $fa-var-signal: "\f012"; 462 | $fa-var-simplybuilt: "\f215"; 463 | $fa-var-sitemap: "\f0e8"; 464 | $fa-var-skyatlas: "\f216"; 465 | $fa-var-skype: "\f17e"; 466 | $fa-var-slack: "\f198"; 467 | $fa-var-sliders: "\f1de"; 468 | $fa-var-slideshare: "\f1e7"; 469 | $fa-var-smile-o: "\f118"; 470 | $fa-var-soccer-ball-o: "\f1e3"; 471 | $fa-var-sort: "\f0dc"; 472 | $fa-var-sort-alpha-asc: "\f15d"; 473 | $fa-var-sort-alpha-desc: "\f15e"; 474 | $fa-var-sort-amount-asc: "\f160"; 475 | $fa-var-sort-amount-desc: "\f161"; 476 | $fa-var-sort-asc: "\f0de"; 477 | $fa-var-sort-desc: "\f0dd"; 478 | $fa-var-sort-down: "\f0dd"; 479 | $fa-var-sort-numeric-asc: "\f162"; 480 | $fa-var-sort-numeric-desc: "\f163"; 481 | $fa-var-sort-up: "\f0de"; 482 | $fa-var-soundcloud: "\f1be"; 483 | $fa-var-space-shuttle: "\f197"; 484 | $fa-var-spinner: "\f110"; 485 | $fa-var-spoon: "\f1b1"; 486 | $fa-var-spotify: "\f1bc"; 487 | $fa-var-square: "\f0c8"; 488 | $fa-var-square-o: "\f096"; 489 | $fa-var-stack-exchange: "\f18d"; 490 | $fa-var-stack-overflow: "\f16c"; 491 | $fa-var-star: "\f005"; 492 | $fa-var-star-half: "\f089"; 493 | $fa-var-star-half-empty: "\f123"; 494 | $fa-var-star-half-full: "\f123"; 495 | $fa-var-star-half-o: "\f123"; 496 | $fa-var-star-o: "\f006"; 497 | $fa-var-steam: "\f1b6"; 498 | $fa-var-steam-square: "\f1b7"; 499 | $fa-var-step-backward: "\f048"; 500 | $fa-var-step-forward: "\f051"; 501 | $fa-var-stethoscope: "\f0f1"; 502 | $fa-var-stop: "\f04d"; 503 | $fa-var-street-view: "\f21d"; 504 | $fa-var-strikethrough: "\f0cc"; 505 | $fa-var-stumbleupon: "\f1a4"; 506 | $fa-var-stumbleupon-circle: "\f1a3"; 507 | $fa-var-subscript: "\f12c"; 508 | $fa-var-subway: "\f239"; 509 | $fa-var-suitcase: "\f0f2"; 510 | $fa-var-sun-o: "\f185"; 511 | $fa-var-superscript: "\f12b"; 512 | $fa-var-support: "\f1cd"; 513 | $fa-var-table: "\f0ce"; 514 | $fa-var-tablet: "\f10a"; 515 | $fa-var-tachometer: "\f0e4"; 516 | $fa-var-tag: "\f02b"; 517 | $fa-var-tags: "\f02c"; 518 | $fa-var-tasks: "\f0ae"; 519 | $fa-var-taxi: "\f1ba"; 520 | $fa-var-tencent-weibo: "\f1d5"; 521 | $fa-var-terminal: "\f120"; 522 | $fa-var-text-height: "\f034"; 523 | $fa-var-text-width: "\f035"; 524 | $fa-var-th: "\f00a"; 525 | $fa-var-th-large: "\f009"; 526 | $fa-var-th-list: "\f00b"; 527 | $fa-var-thumb-tack: "\f08d"; 528 | $fa-var-thumbs-down: "\f165"; 529 | $fa-var-thumbs-o-down: "\f088"; 530 | $fa-var-thumbs-o-up: "\f087"; 531 | $fa-var-thumbs-up: "\f164"; 532 | $fa-var-ticket: "\f145"; 533 | $fa-var-times: "\f00d"; 534 | $fa-var-times-circle: "\f057"; 535 | $fa-var-times-circle-o: "\f05c"; 536 | $fa-var-tint: "\f043"; 537 | $fa-var-toggle-down: "\f150"; 538 | $fa-var-toggle-left: "\f191"; 539 | $fa-var-toggle-off: "\f204"; 540 | $fa-var-toggle-on: "\f205"; 541 | $fa-var-toggle-right: "\f152"; 542 | $fa-var-toggle-up: "\f151"; 543 | $fa-var-train: "\f238"; 544 | $fa-var-transgender: "\f224"; 545 | $fa-var-transgender-alt: "\f225"; 546 | $fa-var-trash: "\f1f8"; 547 | $fa-var-trash-o: "\f014"; 548 | $fa-var-tree: "\f1bb"; 549 | $fa-var-trello: "\f181"; 550 | $fa-var-trophy: "\f091"; 551 | $fa-var-truck: "\f0d1"; 552 | $fa-var-try: "\f195"; 553 | $fa-var-tty: "\f1e4"; 554 | $fa-var-tumblr: "\f173"; 555 | $fa-var-tumblr-square: "\f174"; 556 | $fa-var-turkish-lira: "\f195"; 557 | $fa-var-twitch: "\f1e8"; 558 | $fa-var-twitter: "\f099"; 559 | $fa-var-twitter-square: "\f081"; 560 | $fa-var-umbrella: "\f0e9"; 561 | $fa-var-underline: "\f0cd"; 562 | $fa-var-undo: "\f0e2"; 563 | $fa-var-university: "\f19c"; 564 | $fa-var-unlink: "\f127"; 565 | $fa-var-unlock: "\f09c"; 566 | $fa-var-unlock-alt: "\f13e"; 567 | $fa-var-unsorted: "\f0dc"; 568 | $fa-var-upload: "\f093"; 569 | $fa-var-usd: "\f155"; 570 | $fa-var-user: "\f007"; 571 | $fa-var-user-md: "\f0f0"; 572 | $fa-var-user-plus: "\f234"; 573 | $fa-var-user-secret: "\f21b"; 574 | $fa-var-user-times: "\f235"; 575 | $fa-var-users: "\f0c0"; 576 | $fa-var-venus: "\f221"; 577 | $fa-var-venus-double: "\f226"; 578 | $fa-var-venus-mars: "\f228"; 579 | $fa-var-viacoin: "\f237"; 580 | $fa-var-video-camera: "\f03d"; 581 | $fa-var-vimeo-square: "\f194"; 582 | $fa-var-vine: "\f1ca"; 583 | $fa-var-vk: "\f189"; 584 | $fa-var-volume-down: "\f027"; 585 | $fa-var-volume-off: "\f026"; 586 | $fa-var-volume-up: "\f028"; 587 | $fa-var-warning: "\f071"; 588 | $fa-var-wechat: "\f1d7"; 589 | $fa-var-weibo: "\f18a"; 590 | $fa-var-weixin: "\f1d7"; 591 | $fa-var-whatsapp: "\f232"; 592 | $fa-var-wheelchair: "\f193"; 593 | $fa-var-wifi: "\f1eb"; 594 | $fa-var-windows: "\f17a"; 595 | $fa-var-won: "\f159"; 596 | $fa-var-wordpress: "\f19a"; 597 | $fa-var-wrench: "\f0ad"; 598 | $fa-var-xing: "\f168"; 599 | $fa-var-xing-square: "\f169"; 600 | $fa-var-yahoo: "\f19e"; 601 | $fa-var-yelp: "\f1e9"; 602 | $fa-var-yen: "\f157"; 603 | $fa-var-youtube: "\f167"; 604 | $fa-var-youtube-play: "\f16a"; 605 | $fa-var-youtube-square: "\f166"; 606 | 607 | -------------------------------------------------------------------------------- /bower_components/fontawesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.locatecontrol", 3 | "version": "0.43.0", 4 | "homepage": "https://github.com/domoritz/leaflet-locatecontrol", 5 | "authors": [ 6 | "Dominik Moritz " 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 | "fontawesome": "~4.3.0" 35 | }, 36 | "_release": "0.43.0", 37 | "_resolution": { 38 | "type": "version", 39 | "tag": "v0.43.0", 40 | "commit": "b2ff727ac81d13648beab5cdab29e44d573dfdc1" 41 | }, 42 | "_source": "git://github.com/domoritz/leaflet-locatecontrol.git", 43 | "_target": "^0.43.0", 44 | "_originalSource": "leaflet.locatecontrol" 45 | } -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | var banner = '/*! Version: <%= pkg.version %>\nDate: <%= grunt.template.today("yyyy-mm-dd") %> */\n'; 4 | 5 | // Project configuration. 6 | grunt.initConfig({ 7 | pkg: grunt.file.readJSON('package.json'), 8 | uglify: { 9 | options: { 10 | banner: banner, 11 | preserveComments: 'some', 12 | sourceMap: true 13 | }, 14 | build: { 15 | src: 'src/L.Control.Locate.js', 16 | dest: 'dist/L.Control.Locate.min.js' 17 | } 18 | }, 19 | sass: { 20 | dist: { 21 | options: { 22 | banner: banner, 23 | style: 'compressed' 24 | }, 25 | files: { 26 | 'dist/L.Control.Locate.min.css': 'src/L.Control.Locate.scss', 27 | 'dist/L.Control.Locate.ie.min.css': 'src/L.Control.Locate.ie.scss', 28 | 'dist/L.Control.Locate.mapbox.min.css': 'src/L.Control.Locate.mapbox.scss' 29 | } 30 | }, 31 | uncompressed: { 32 | options: { 33 | banner: banner, 34 | style: 'expanded', 35 | sourcemap: 'none' 36 | }, 37 | files: { 38 | 'dist/L.Control.Locate.css': 'src/L.Control.Locate.scss', 39 | 'dist/L.Control.Locate.ie.css': 'src/L.Control.Locate.ie.scss', 40 | 'dist/L.Control.Locate.mapbox.css': 'src/L.Control.Locate.mapbox.scss' 41 | } 42 | } 43 | }, 44 | bump: { 45 | options: { 46 | files: ['package.json', 'bower.json'], 47 | commitFiles: ['package.json', 'bower.json'], 48 | push: false 49 | } 50 | }, 51 | }); 52 | 53 | grunt.loadNpmTasks('grunt-contrib-uglify'); 54 | grunt.loadNpmTasks('grunt-contrib-sass'); 55 | grunt.loadNpmTasks('grunt-bump'); 56 | grunt.loadNpmTasks('grunt-serve'); 57 | 58 | // Default task(s). 59 | grunt.registerTask('default', ['uglify', 'sass']); 60 | 61 | }; -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Dominik Moritz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/README.md: -------------------------------------------------------------------------------- 1 | # Leaflet.Locate 2 | 3 | A useful control to geolocate the user with many options. 4 | 5 | Tested with [Leaflet](http://leafletjs.com/) 0.7 in Firefox, Webkit and mobile Webkit. Tested with [Font Awesome](https://fortawesome.github.io/Font-Awesome/) 4.3.0. 6 | 7 | **v0.34.0 introduced breaking changes to the API. Please check your code!** 8 | 9 | 10 | ## Demo 11 | 12 | Check out the demo at http://domoritz.github.io/leaflet-locatecontrol/demo/ 13 | 14 | 15 | ## Usage 16 | 17 | ### Set up: 18 | 19 | tl;dr 20 | 21 | 1. Get CSS and JavaScript files 22 | 2. Include CSS and JavaScript files 23 | 3. Initialize plugin 24 | 25 | 26 | #### Download JavaScript and CSS files 27 | 28 | For testing purposes and development, you can use the latest version directly from my repository using [rawgithub](http://rawgithub.com/). However, **don't do this in production environments**! 29 | 30 | For production environments, use [Bower](http://bower.io/) and run `bower install leaflet.locatecontrol` or [download the files from this repository](https://github.com/domoritz/leaflet-locatecontrol/archive/gh-pages.zip). Bower will always download the latest version and keep the code up to date. The original JS and CSS files are in [`\src`](https://github.com/domoritz/leaflet-locatecontrol/tree/gh-pages/src) and the minified versions suitable for production are in [`\dist`](https://github.com/domoritz/leaflet-locatecontrol/tree/gh-pages/dist). 31 | 32 | You can also get the latest version of the plugin with [npm](https://www.npmjs.org/). This plugin is available in the [npm repository](https://www.npmjs.org/package/leaflet.locatecontrol). Just run `npm install leaflet.locatecontrol`. 33 | 34 | If you don't need the latest version, you can use the [mapbox CDN](https://www.mapbox.com/mapbox.js/plugins/#leaflet-locatecontrol). 35 | 36 | 37 | #### Add the JavaScript and CSS files 38 | 39 | The control uses [Font Awesome](https://fortawesome.github.io/Font-Awesome/) for the icons and if you don't have it included yet, you can use the CSS from the CDN. 40 | 41 | Then include the CSS and JavaScript files. 42 | 43 | This example shows how to include font awesome from a CDN and the locate control files through rawgit. **Only use rawgit for testing and never in production! Always prefer using the bower (or Mapbox CDN).** 44 | 45 | ```html 46 | 47 | 48 | 51 | 52 | 53 | ``` 54 | 55 | 56 | #### Add the following snippet to your map initialization: 57 | 58 | This snippet adds the control to the map. You can pass also pass a configuration. 59 | 60 | ```js 61 | L.control.locate().addTo(map); 62 | ``` 63 | 64 | 65 | ### Possible options 66 | 67 | The locate controls inherits options from [Leaflet Controls](http://leafletjs.com/reference.html#control-options). 68 | 69 | ```js 70 | L.control.locate({ 71 | position: 'topleft', // set the location of the control 72 | drawCircle: true, // controls whether a circle is drawn that shows the uncertainty about the location 73 | follow: false, // follow the user's location 74 | setView: true, // automatically sets the map view to the user's location, enabled if `follow` is true 75 | keepCurrentZoomLevel: false, // keep the current map zoom level when displaying the user's location. (if `false`, use maxZoom) 76 | stopFollowingOnDrag: false, // stop following when the map is dragged if `follow` is true (deprecated, see below) 77 | remainActive: false, // if true locate control remains active on click even if the user's location is in view. 78 | markerClass: L.circleMarker, // L.circleMarker or L.marker 79 | circleStyle: {}, // change the style of the circle around the user's location 80 | markerStyle: {}, 81 | followCircleStyle: {}, // set difference for the style of the circle around the user's location while following 82 | followMarkerStyle: {}, 83 | icon: 'fa fa-map-marker', // class for icon, fa-location-arrow or fa-map-marker 84 | iconLoading: 'fa fa-spinner fa-spin', // class for loading icon 85 | circlePadding: [0, 0], // padding around accuracy circle, value is passed to setBounds 86 | metric: true, // use metric or imperial units 87 | onLocationError: function(err) {alert(err.message)}, // define an error callback function 88 | onLocationOutsideMapBounds: function(context) { // called when outside map boundaries 89 | alert(context.options.strings.outsideMapBoundsMsg); 90 | }, 91 | showPopup: true, // display a popup when the user click on the inner marker 92 | strings: { 93 | title: "Show me where I am", // title of the locate control 94 | popup: "You are within {distance} {unit} from this point", // text to appear if user clicks on circle 95 | outsideMapBoundsMsg: "You seem located outside the boundaries of the map" // default message for onLocationOutsideMapBounds 96 | }, 97 | locateOptions: {} // define location options e.g enableHighAccuracy: true or maxZoom: 10 98 | }).addTo(map); 99 | ``` 100 | 101 | 102 | ### Methods 103 | 104 | You can call `start()` or `stop()` on the locate control object to set the location of page load for example. 105 | 106 | ```js 107 | // create control and add to map 108 | var lc = L.control.locate().addTo(map); 109 | 110 | // request location update and set location 111 | lc.start(); 112 | ``` 113 | 114 | You can also use the helper functions to automatically stop following when the map is panned. See the example below. 115 | 116 | ```js 117 | var lc = L.control.locate().addTo(map); 118 | map.on('dragstart', lc._stopFollowing, lc); 119 | ``` 120 | 121 | Alternatively, you can unload events when not following to avoid unnecessary events. 122 | 123 | ```js 124 | map.on('startfollowing', function() { 125 | map.on('dragstart', lc._stopFollowing, lc); 126 | }).on('stopfollowing', function() { 127 | map.off('dragstart', lc._stopFollowing, lc); 128 | }); 129 | ``` 130 | 131 | 132 | ### Events 133 | 134 | The locate control fires `startfollowing` and `stopfollowing` on the map object and passes `self` as data. 135 | 136 | 137 | ### Extending 138 | 139 | To customize the behavior of the plugin, use L.extend to override `start`, `stop`, `drawMarker` and/or `removeMarker`. Please be aware that functions may change and customizations become incompatible. 140 | 141 | ```js 142 | L.Control.MyLocate = L.Control.Locate.extend({ 143 | drawMarker: function() { 144 | // override to customize the marker 145 | } 146 | }); 147 | 148 | var lc = new L.Control.MyLocate(); 149 | ``` 150 | 151 | 152 | ### FAQ 153 | 154 | #### How do I set the maximum zoom level? 155 | 156 | Set the `maxZoom` in `locateOptions` (`keepCurrentZoomLevel` must not be set to true). 157 | 158 | ```js 159 | map.addControl(L.control.locate({ 160 | locateOptions: { 161 | maxZoom: 10 162 | }})); 163 | ``` 164 | 165 | 166 | ## Screenshot 167 | 168 | ![screenshot](https://raw.github.com/domoritz/leaflet-locatecontrol/gh-pages/screenshot.png "Screenshot showing the locate control") 169 | 170 | 171 | ## Users 172 | 173 | Sites that use this locate control: 174 | 175 | * [OpenStreetMap](http://www.openstreetmap.org/) 176 | * [MapBox](https://www.mapbox.com/mapbox.js/example/v1.0.0/leaflet-locatecontrol/) 177 | * [wheelmap.org](http://wheelmap.org/map) 178 | * [OpenMensa](http://openmensa.org/) 179 | * ... 180 | 181 | 182 | ## Developers 183 | 184 | Run the demo locally with `grunt serve` and then open [localhost:9000/demo/index.html](http://localhost:9000/demo/index.html). 185 | 186 | To generate the minified JS and CSS files, use [grunt](http://gruntjs.com/getting-started) and run `grunt`. However, don't include new minified files or a new version as part of a pull request. 187 | 188 | 189 | ## Making a release (only core developer) 190 | 191 | A new version is released with `grunt bump:minor`. Then recompile the JS/CSS with `grunt` and commit the changes into the previous commit with `git commit -a --amend`. Then push the new code with `git push` and `git push --tags` and publish to npm with `npm publish`. 192 | 193 | 194 | ## Thanks 195 | 196 | To all [contributors](https://github.com/domoritz/leaflet-locatecontrol/contributors) and issue reporters. 197 | 198 | 199 | ## License 200 | 201 | MIT 202 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.locatecontrol", 3 | "version": "0.43.0", 4 | "homepage": "https://github.com/domoritz/leaflet-locatecontrol", 5 | "authors": [ 6 | "Dominik Moritz " 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 | "fontawesome": "~4.3.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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 | margin-left: 1px; 19 | color: #444; 20 | } 21 | .leaflet-control-locate.active a { 22 | color: #2074B6; 23 | } 24 | .leaflet-control-locate.active.following a { 25 | color: #FC8428; 26 | } 27 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.ie.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.ie.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.mapbox.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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 | margin-left: 1px; 19 | color: #444; 20 | } 21 | .leaflet-control-locate.active a { 22 | color: #2074B6; 23 | } 24 | .leaflet-control-locate.active.following a { 25 | color: #FC8428; 26 | } 27 | 28 | /* Mapbox specific adjustments */ 29 | .leaflet-control-locate a { 30 | padding: 3px 0 0 8px; 31 | } 32 | .leaflet-control-locate.requesting a { 33 | padding: 3px 0 0 4px; 34 | } 35 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.mapbox.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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;margin-left:1px;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 | -------------------------------------------------------------------------------- /bower_components/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,WAAW,CAAE,GAAG,CAChB,KAAK,CAAE,IAAI,CAGX,gCAAE,CACA,KAAK,CAAE,OAAO,CAEhB,0CAAc,CACZ,KAAK,CAAE,OAAO,CCtBlB,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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.min.css: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 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;margin-left:1px;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 | -------------------------------------------------------------------------------- /bower_components/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,WAAW,CAAE,GAAG,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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.min.js: -------------------------------------------------------------------------------- 1 | /*! Version: 0.42.0 2 | Date: 2015-04-29 */ 3 | 4 | /*! 5 | Copyright (c) 2014 Dominik Moritz 6 | 7 | This file is part of the leaflet locate control. It is licensed under the MIT license. 8 | You can find the project at: https://github.com/domoritz/leaflet-locatecontrol 9 | */ 10 | !function(a,b){"function"==typeof define&&define.amd?define(["leaflet"],a):"object"==typeof exports&&(module.exports=a("undefined"!=typeof b&&b.L?L:require("leaflet"))),"undefined"!=typeof b&&b.L&&(b.L.Locate=a(L))}(function(a){return a.Control.Locate=a.Control.extend({options:{position:"topleft",drawCircle:!0,follow:!1,stopFollowingOnDrag:!1,remainActive:!1,markerClass:a.circleMarker,circleStyle:{color:"#136AEC",fillColor:"#136AEC",fillOpacity:.15,weight:2,opacity:.5},markerStyle:{color:"#136AEC",fillColor:"#2A93EE",fillOpacity:.7,weight:2,opacity:.9,radius:5},followCircleStyle:{},followMarkerStyle:{},icon:"fa fa-map-marker",iconLoading:"fa fa-spinner fa-spin",circlePadding:[0,0],metric:!0,onLocationError:function(a){alert(a.message)},onLocationOutsideMapBounds:function(a){a.stop(),alert(a.options.strings.outsideMapBoundsMsg)},setView:!0,keepCurrentZoomLevel:!1,showPopup:!0,strings:{title:"Show me where I am",popup:"You are within {distance} {unit} from this point",outsideMapBoundsMsg:"You seem located outside the boundaries of the map"},locateOptions:{maxZoom:1/0,watch:!0}},initialize:function(b){a.Map.addInitHook(function(){this.options.locateControl&&(this.locateControl=a.control.locate(),this.addControl(this.locateControl))});for(var c in b)"object"==typeof this.options[c]?a.extend(this.options[c],b[c]):this.options[c]=b[c];a.extend(this.options.locateOptions,{setView:!1})},_activate:function(){this.options.setView&&(this._locateOnNextLocationFound=!0),this._active||this._map.locate(this.options.locateOptions),this._active=!0,this.options.follow&&this._startFollowing(this._map)},_deactivate:function(){this._map.stopLocate(),this._map.off("dragstart",this._stopFollowing),this.options.follow&&this._following&&this._stopFollowing(this._map)},drawMarker:function(b){void 0===this._event.accuracy&&(this._event.accuracy=0);var c=this._event.accuracy;this._locateOnNextLocationFound&&(this._isOutsideMapBounds()?this.options.onLocationOutsideMapBounds(this):this.options.keepCurrentZoomLevel||!this.options.drawCircle?b.panTo([this._event.latitude,this._event.longitude]):b.fitBounds(this._event.bounds,{padding:this.options.circlePadding,maxZoom:this.options.keepCurrentZoomLevel?b.getZoom():this.options.locateOptions.maxZoom}),this._locateOnNextLocationFound=!1);var d,e;if(this.options.drawCircle)if(d=this._following?this.options.followCircleStyle:this.options.circleStyle,this._circle){this._circle.setLatLng(this._event.latlng).setRadius(c);for(e in d)this._circle.options[e]=d[e]}else this._circle=a.circle(this._event.latlng,c,d).addTo(this._layer);var f,g;this.options.metric?(f=c.toFixed(0),g="meters"):(f=(3.2808399*c).toFixed(0),g="feet");var h;h=this._following?this.options.followMarkerStyle:this.options.markerStyle,this._marker?this.updateMarker(this._event.latlng,h):this._marker=this.createMarker(this._event.latlng,h).addTo(this._layer);var i=this.options.strings.popup;this.options.showPopup&&i&&this._marker.bindPopup(a.Util.template(i,{distance:f,unit:g}))._popup.setLatLng(this._event.latlng),this._toggleContainerStyle()},createMarker:function(a,b){return this.options.markerClass(a,b)},updateMarker:function(a,b){this._marker.setLatLng(a);for(var c in b)this._marker.options[c]=b[c]},removeMarker:function(){this._layer.clearLayers(),this._marker=void 0,this._circle=void 0},onAdd:function(b){var c=a.DomUtil.create("div","leaflet-control-locate leaflet-bar leaflet-control");this._layer=new a.LayerGroup,this._layer.addTo(b),this._event=void 0;var d={};return a.extend(d,this.options.markerStyle,this.options.followMarkerStyle),this.options.followMarkerStyle=d,d={},a.extend(d,this.options.circleStyle,this.options.followCircleStyle),this.options.followCircleStyle=d,this._link=a.DomUtil.create("a","leaflet-bar-part leaflet-bar-part-single",c),this._link.href="#",this._link.title=this.options.strings.title,this._icon=a.DomUtil.create("span",this.options.icon,this._link),a.DomEvent.on(this._link,"click",a.DomEvent.stopPropagation).on(this._link,"click",a.DomEvent.preventDefault).on(this._link,"click",function(){var a=void 0===this._event||this._map.getBounds().contains(this._event.latlng)||!this.options.setView||this._isOutsideMapBounds();!this.options.remainActive&&this._active&&a?this.stop():this.start()},this).on(this._link,"dblclick",a.DomEvent.stopPropagation),this._resetVariables(),this.bindEvents(b),c},bindEvents:function(a){a.on("locationfound",this._onLocationFound,this),a.on("locationerror",this._onLocationError,this),a.on("unload",this.stop,this)},start:function(){this._activate(),this._event?this.drawMarker(this._map):this._setClasses("requesting")},stop:function(){this._deactivate(),this._cleanClasses(),this._resetVariables(),this.removeMarker()},_onLocationError:function(a){3==a.code&&this.options.locateOptions.watch||(this.stop(),this.options.onLocationError(a))},_onLocationFound:function(a){this._event&&this._event.latlng.lat===a.latlng.lat&&this._event.latlng.lng===a.latlng.lng&&this._event.accuracy===a.accuracy||this._active&&(this._event=a,this.options.follow&&this._following&&(this._locateOnNextLocationFound=!0),this.drawMarker(this._map))},_startFollowing:function(){this._map.fire("startfollowing",this),this._following=!0,this.options.stopFollowingOnDrag&&this._map.on("dragstart",this._stopFollowing,this)},_stopFollowing:function(){this._map.fire("stopfollowing",this),this._following=!1,this.options.stopFollowingOnDrag&&this._map.off("dragstart",this._stopFollowing),this._toggleContainerStyle()},_isOutsideMapBounds:function(){return void 0===this._event?!1:this._map.options.maxBounds&&!this._map.options.maxBounds.contains(this._event.latlng)},_toggleContainerStyle:function(){this._container&&this._setClasses(this._following?"following":"active")},_setClasses:function(b){"requesting"==b?(a.DomUtil.removeClasses(this._container,"active following"),a.DomUtil.addClasses(this._container,"requesting"),a.DomUtil.removeClasses(this._icon,this.options.icon),a.DomUtil.addClasses(this._icon,this.options.iconLoading)):"active"==b?(a.DomUtil.removeClasses(this._container,"requesting following"),a.DomUtil.addClasses(this._container,"active"),a.DomUtil.removeClasses(this._icon,this.options.iconLoading),a.DomUtil.addClasses(this._icon,this.options.icon)):"following"==b&&(a.DomUtil.removeClasses(this._container,"requesting"),a.DomUtil.addClasses(this._container,"active following"),a.DomUtil.removeClasses(this._icon,this.options.iconLoading),a.DomUtil.addClasses(this._icon,this.options.icon))},_cleanClasses:function(){a.DomUtil.removeClass(this._container,"requesting"),a.DomUtil.removeClass(this._container,"active"),a.DomUtil.removeClass(this._container,"following"),a.DomUtil.removeClasses(this._icon,this.options.iconLoading),a.DomUtil.addClasses(this._icon,this.options.icon)},_resetVariables:function(){this._active=!1,this._locateOnNextLocationFound=this.options.setView,this._following=!1}}),a.Map.addInitHook(function(){this.options.locateControl&&(this.locateControl=a.control.locate(),this.addControl(this.locateControl))}),a.control.locate=function(b){return new a.Control.Locate(b)},function(){var b=function(b,c,d){d=d.split(" "),d.forEach(function(d){a.DomUtil[b].call(this,c,d)})};a.DomUtil.addClasses=function(a,c){b("addClass",a,c)},a.DomUtil.removeClasses=function(a,c){b("removeClass",a,c)}}(),a.Control.Locate},window); 11 | //# sourceMappingURL=L.Control.Locate.min.js.map -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/dist/L.Control.Locate.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"L.Control.Locate.min.js","sources":["../src/L.Control.Locate.js"],"names":["factory","window","define","amd","exports","module","L","require","Locate","Control","extend","options","position","drawCircle","follow","stopFollowingOnDrag","remainActive","markerClass","circleMarker","circleStyle","color","fillColor","fillOpacity","weight","opacity","markerStyle","radius","followCircleStyle","followMarkerStyle","icon","iconLoading","circlePadding","metric","onLocationError","err","alert","message","onLocationOutsideMapBounds","control","stop","strings","outsideMapBoundsMsg","setView","keepCurrentZoomLevel","showPopup","title","popup","locateOptions","maxZoom","Infinity","watch","initialize","Map","addInitHook","this","locateControl","locate","addControl","i","_activate","_locateOnNextLocationFound","_active","_map","_startFollowing","_deactivate","stopLocate","off","_stopFollowing","_following","drawMarker","map","undefined","_event","accuracy","_isOutsideMapBounds","panTo","latitude","longitude","fitBounds","bounds","padding","getZoom","style","o","_circle","setLatLng","latlng","setRadius","circle","addTo","_layer","distance","unit","toFixed","mStyle","_marker","updateMarker","createMarker","t","bindPopup","Util","template","_popup","_toggleContainerStyle","removeMarker","clearLayers","onAdd","container","DomUtil","create","LayerGroup","tmp","_link","href","_icon","DomEvent","on","stopPropagation","preventDefault","shouldStop","getBounds","contains","start","_resetVariables","bindEvents","_onLocationFound","_onLocationError","_setClasses","_cleanClasses","code","e","lat","lng","fire","maxBounds","_container","state","removeClasses","addClasses","removeClass","LDomUtilApplyClassesMethod","method","element","classNames","split","forEach","className","call","el","names"],"mappings":"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"} -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.locatecontrol", 3 | "version": "0.43.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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet.locatecontrol/screenshot.png -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/leaflet.locatecontrol/src/L.Control.Locate.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Copyright (c) 2014 Dominik Moritz 3 | 4 | This file is part of the leaflet locate control. It is licensed under the MIT license. 5 | You can find the project at: https://github.com/domoritz/leaflet-locatecontrol 6 | */ 7 | (function (factory, window) { 8 | // see https://github.com/Leaflet/Leaflet/blob/master/PLUGIN-GUIDE.md#module-loaders 9 | // for details on how to structure a leaflet plugin. 10 | 11 | // define an AMD module that relies on 'leaflet' 12 | if (typeof define === 'function' && define.amd) { 13 | define(['leaflet'], factory); 14 | 15 | // define a Common JS module that relies on 'leaflet' 16 | } else if (typeof exports === 'object') { 17 | if (typeof window !== 'undefined' && window.L) { 18 | module.exports = factory(L); 19 | } else { 20 | module.exports = factory(require('leaflet')); 21 | } 22 | } 23 | 24 | // attach your plugin to the global 'L' variable 25 | if(typeof window !== 'undefined' && window.L){ 26 | window.L.Locate = factory(L); 27 | } 28 | 29 | } (function (L) { 30 | L.Control.Locate = L.Control.extend({ 31 | options: { 32 | position: 'topleft', 33 | drawCircle: true, 34 | follow: false, // follow with zoom and pan the user's location 35 | stopFollowingOnDrag: false, // if follow is true, stop following when map is dragged (deprecated) 36 | // if true locate control remains active on click even if the user's location is in view. 37 | // clicking control will just pan to location 38 | remainActive: false, 39 | markerClass: L.circleMarker, // L.circleMarker or L.marker 40 | // range circle 41 | circleStyle: { 42 | color: '#136AEC', 43 | fillColor: '#136AEC', 44 | fillOpacity: 0.15, 45 | weight: 2, 46 | opacity: 0.5 47 | }, 48 | // inner marker 49 | markerStyle: { 50 | color: '#136AEC', 51 | fillColor: '#2A93EE', 52 | fillOpacity: 0.7, 53 | weight: 2, 54 | opacity: 0.9, 55 | radius: 5 56 | }, 57 | // changes to range circle and inner marker while following 58 | // it is only necessary to provide the things that should change 59 | followCircleStyle: {}, 60 | followMarkerStyle: { 61 | //color: '#FFA500', 62 | //fillColor: '#FFB000' 63 | }, 64 | icon: 'fa fa-map-marker', // fa-location-arrow or fa-map-marker 65 | iconLoading: 'fa fa-spinner fa-spin', 66 | circlePadding: [0, 0], 67 | metric: true, 68 | onLocationError: function(err) { 69 | // this event is called in case of any location error 70 | // that is not a time out error. 71 | alert(err.message); 72 | }, 73 | onLocationOutsideMapBounds: function(control) { 74 | // this event is repeatedly called when the location changes 75 | control.stop(); 76 | alert(control.options.strings.outsideMapBoundsMsg); 77 | }, 78 | setView: true, // automatically sets the map view to the user's location 79 | // keep the current map zoom level when displaying the user's location. (if 'false', use maxZoom) 80 | keepCurrentZoomLevel: false, 81 | showPopup: true, // display a popup when the user click on the inner marker 82 | strings: { 83 | title: "Show me where I am", 84 | popup: "You are within {distance} {unit} from this point", 85 | outsideMapBoundsMsg: "You seem located outside the boundaries of the map" 86 | }, 87 | locateOptions: { 88 | maxZoom: Infinity, 89 | watch: true // if you overwrite this, visualization cannot be updated 90 | } 91 | }, 92 | 93 | initialize: function (options) { 94 | L.Map.addInitHook(function () { 95 | if (this.options.locateControl) { 96 | this.addControl(this); 97 | } 98 | }); 99 | 100 | for (var i in options) { 101 | if (typeof this.options[i] === 'object') { 102 | L.extend(this.options[i], options[i]); 103 | } else { 104 | this.options[i] = options[i]; 105 | } 106 | } 107 | 108 | L.extend(this.options.locateOptions, { 109 | setView: false // have to set this to false because we have to 110 | // do setView manually 111 | }); 112 | }, 113 | 114 | /** 115 | * This method launches the location engine. 116 | * It is called before the marker is updated, 117 | * event if it does not mean that the event will be ready. 118 | * 119 | * Override it if you want to add more functionalities. 120 | * It should set the this._active to true and do nothing if 121 | * this._active is not true. 122 | */ 123 | _activate: function() { 124 | if (this.options.setView) { 125 | this._locateOnNextLocationFound = true; 126 | } 127 | 128 | if(!this._active) { 129 | this._map.locate(this.options.locateOptions); 130 | } 131 | this._active = true; 132 | 133 | if (this.options.follow) { 134 | this._startFollowing(this._map); 135 | } 136 | }, 137 | 138 | /** 139 | * Called to stop the location engine. 140 | * 141 | * Override it to shutdown any functionalities you added on start. 142 | */ 143 | _deactivate: function() { 144 | this._map.stopLocate(); 145 | 146 | this._map.off('dragstart', this._stopFollowing); 147 | if (this.options.follow && this._following) { 148 | this._stopFollowing(this._map); 149 | } 150 | }, 151 | 152 | /** 153 | * Draw the resulting marker on the map. 154 | * 155 | * Uses the event retrieved from onLocationFound from the map. 156 | */ 157 | drawMarker: function(map) { 158 | if (this._event.accuracy === undefined) { 159 | this._event.accuracy = 0; 160 | } 161 | 162 | var radius = this._event.accuracy; 163 | if (this._locateOnNextLocationFound) { 164 | if (this._isOutsideMapBounds()) { 165 | this.options.onLocationOutsideMapBounds(this); 166 | } else { 167 | // If accuracy info isn't desired, keep the current zoom level 168 | if(this.options.keepCurrentZoomLevel || !this.options.drawCircle){ 169 | map.panTo([this._event.latitude, this._event.longitude]); 170 | } else { 171 | map.fitBounds(this._event.bounds, { 172 | padding: this.options.circlePadding, 173 | maxZoom: this.options.keepCurrentZoomLevel ? 174 | map.getZoom() : this.options.locateOptions.maxZoom 175 | }); 176 | } 177 | } 178 | this._locateOnNextLocationFound = false; 179 | } 180 | 181 | // circle with the radius of the location's accuracy 182 | var style, o; 183 | if (this.options.drawCircle) { 184 | if (this._following) { 185 | style = this.options.followCircleStyle; 186 | } else { 187 | style = this.options.circleStyle; 188 | } 189 | 190 | if (!this._circle) { 191 | this._circle = L.circle(this._event.latlng, radius, style) 192 | .addTo(this._layer); 193 | } else { 194 | this._circle.setLatLng(this._event.latlng).setRadius(radius); 195 | for (o in style) { 196 | this._circle.options[o] = style[o]; 197 | } 198 | } 199 | } 200 | 201 | var distance, unit; 202 | if (this.options.metric) { 203 | distance = radius.toFixed(0); 204 | unit = "meters"; 205 | } else { 206 | distance = (radius * 3.2808399).toFixed(0); 207 | unit = "feet"; 208 | } 209 | 210 | // small inner marker 211 | var mStyle; 212 | if (this._following) { 213 | mStyle = this.options.followMarkerStyle; 214 | } else { 215 | mStyle = this.options.markerStyle; 216 | } 217 | 218 | if (!this._marker) { 219 | this._marker = this.createMarker(this._event.latlng, mStyle) 220 | .addTo(this._layer); 221 | } else { 222 | this.updateMarker(this._event.latlng, mStyle); 223 | } 224 | 225 | var t = this.options.strings.popup; 226 | if (this.options.showPopup && t) { 227 | this._marker.bindPopup(L.Util.template(t, {distance: distance, unit: unit})) 228 | ._popup.setLatLng(this._event.latlng); 229 | } 230 | 231 | this._toggleContainerStyle(); 232 | }, 233 | 234 | /** 235 | * Creates the marker. 236 | * 237 | * Should return the base marker so it is possible to bind a pop-up if the 238 | * option is activated. 239 | * 240 | * Used by drawMarker, you can ignore it if you have overridden it. 241 | */ 242 | createMarker: function(latlng, mStyle) { 243 | return this.options.markerClass(latlng, mStyle); 244 | }, 245 | 246 | /** 247 | * Updates the marker with current coordinates. 248 | * 249 | * Used by drawMarker, you can ignore it if you have overridden it. 250 | */ 251 | updateMarker: function(latlng, mStyle) { 252 | this._marker.setLatLng(latlng); 253 | for (var o in mStyle) { 254 | this._marker.options[o] = mStyle[o]; 255 | } 256 | }, 257 | 258 | /** 259 | * Remove the marker from map. 260 | */ 261 | removeMarker: function() { 262 | this._layer.clearLayers(); 263 | this._marker = undefined; 264 | this._circle = undefined; 265 | }, 266 | 267 | onAdd: function (map) { 268 | var container = L.DomUtil.create('div', 269 | 'leaflet-control-locate leaflet-bar leaflet-control'); 270 | 271 | this._layer = new L.LayerGroup(); 272 | this._layer.addTo(map); 273 | this._event = undefined; 274 | 275 | // extend the follow marker style and circle from the normal style 276 | var tmp = {}; 277 | L.extend(tmp, this.options.markerStyle, this.options.followMarkerStyle); 278 | this.options.followMarkerStyle = tmp; 279 | tmp = {}; 280 | L.extend(tmp, this.options.circleStyle, this.options.followCircleStyle); 281 | this.options.followCircleStyle = tmp; 282 | 283 | this._link = L.DomUtil.create('a', 'leaflet-bar-part leaflet-bar-part-single', container); 284 | this._link.href = '#'; 285 | this._link.title = this.options.strings.title; 286 | this._icon = L.DomUtil.create('span', this.options.icon, this._link); 287 | 288 | L.DomEvent 289 | .on(this._link, 'click', L.DomEvent.stopPropagation) 290 | .on(this._link, 'click', L.DomEvent.preventDefault) 291 | .on(this._link, 'click', function() { 292 | var shouldStop = (this._event === undefined || 293 | this._map.getBounds().contains(this._event.latlng) || 294 | !this.options.setView || this._isOutsideMapBounds()); 295 | if (!this.options.remainActive && (this._active && shouldStop)) { 296 | this.stop(); 297 | } else { 298 | this.start(); 299 | } 300 | }, this) 301 | .on(this._link, 'dblclick', L.DomEvent.stopPropagation); 302 | 303 | this._resetVariables(); 304 | this.bindEvents(map); 305 | 306 | return container; 307 | }, 308 | 309 | /** 310 | * Binds the actions to the map events. 311 | */ 312 | bindEvents: function(map) { 313 | map.on('locationfound', this._onLocationFound, this); 314 | map.on('locationerror', this._onLocationError, this); 315 | map.on('unload', this.stop, this); 316 | }, 317 | 318 | /** 319 | * Starts the plugin: 320 | * - activates the engine 321 | * - draws the marker (if coordinates available) 322 | */ 323 | start: function() { 324 | this._activate(); 325 | 326 | if (!this._event) { 327 | this._setClasses('requesting'); 328 | } else { 329 | this.drawMarker(this._map); 330 | } 331 | }, 332 | 333 | /** 334 | * Stops the plugin: 335 | * - deactivates the engine 336 | * - reinitializes the button 337 | * - removes the marker 338 | */ 339 | stop: function() { 340 | this._deactivate(); 341 | 342 | this._cleanClasses(); 343 | this._resetVariables(); 344 | 345 | this.removeMarker(); 346 | }, 347 | 348 | /** 349 | * Calls deactivate and dispatches an error. 350 | */ 351 | _onLocationError: function(err) { 352 | // ignore time out error if the location is watched 353 | if (err.code == 3 && this.options.locateOptions.watch) { 354 | return; 355 | } 356 | 357 | this.stop(); 358 | this.options.onLocationError(err); 359 | }, 360 | 361 | /** 362 | * Stores the received event and updates the marker. 363 | */ 364 | _onLocationFound: function(e) { 365 | // no need to do anything if the location has not changed 366 | if (this._event && 367 | (this._event.latlng.lat === e.latlng.lat && 368 | this._event.latlng.lng === e.latlng.lng && 369 | this._event.accuracy === e.accuracy)) { 370 | return; 371 | } 372 | 373 | if (!this._active) { 374 | return; 375 | } 376 | 377 | this._event = e; 378 | 379 | if (this.options.follow && this._following) { 380 | this._locateOnNextLocationFound = true; 381 | } 382 | 383 | this.drawMarker(this._map); 384 | }, 385 | 386 | /** 387 | * Dispatches the 'startfollowing' event on map. 388 | */ 389 | _startFollowing: function() { 390 | this._map.fire('startfollowing', this); 391 | this._following = true; 392 | if (this.options.stopFollowingOnDrag) { 393 | this._map.on('dragstart', this._stopFollowing, this); 394 | } 395 | }, 396 | 397 | /** 398 | * Dispatches the 'stopfollowing' event on map. 399 | */ 400 | _stopFollowing: function() { 401 | this._map.fire('stopfollowing', this); 402 | this._following = false; 403 | if (this.options.stopFollowingOnDrag) { 404 | this._map.off('dragstart', this._stopFollowing); 405 | } 406 | this._toggleContainerStyle(); 407 | }, 408 | 409 | /** 410 | * Check if location is in map bounds 411 | */ 412 | _isOutsideMapBounds: function() { 413 | if (this._event === undefined) 414 | return false; 415 | return this._map.options.maxBounds && 416 | !this._map.options.maxBounds.contains(this._event.latlng); 417 | }, 418 | 419 | /** 420 | * Toggles button class between following and active. 421 | */ 422 | _toggleContainerStyle: function() { 423 | if (!this._container) { 424 | return; 425 | } 426 | 427 | if (this._following) { 428 | this._setClasses('following'); 429 | } else { 430 | this._setClasses('active'); 431 | } 432 | }, 433 | 434 | /** 435 | * Sets the CSS classes for the state. 436 | */ 437 | _setClasses: function(state) { 438 | if (state == 'requesting') { 439 | L.DomUtil.removeClasses(this._container, "active following"); 440 | L.DomUtil.addClasses(this._container, "requesting"); 441 | 442 | L.DomUtil.removeClasses(this._icon, this.options.icon); 443 | L.DomUtil.addClasses(this._icon, this.options.iconLoading); 444 | } else if (state == 'active') { 445 | L.DomUtil.removeClasses(this._container, "requesting following"); 446 | L.DomUtil.addClasses(this._container, "active"); 447 | 448 | L.DomUtil.removeClasses(this._icon, this.options.iconLoading); 449 | L.DomUtil.addClasses(this._icon, this.options.icon); 450 | } else if (state == 'following') { 451 | L.DomUtil.removeClasses(this._container, "requesting"); 452 | L.DomUtil.addClasses(this._container, "active following"); 453 | 454 | L.DomUtil.removeClasses(this._icon, this.options.iconLoading); 455 | L.DomUtil.addClasses(this._icon, this.options.icon); 456 | } 457 | }, 458 | 459 | /** 460 | * Removes all classes from button. 461 | */ 462 | _cleanClasses: function() { 463 | L.DomUtil.removeClass(this._container, "requesting"); 464 | L.DomUtil.removeClass(this._container, "active"); 465 | L.DomUtil.removeClass(this._container, "following"); 466 | 467 | L.DomUtil.removeClasses(this._icon, this.options.iconLoading); 468 | L.DomUtil.addClasses(this._icon, this.options.icon); 469 | }, 470 | 471 | /** 472 | * Reinitializes attributes. 473 | */ 474 | _resetVariables: function() { 475 | this._active = false; 476 | this._locateOnNextLocationFound = this.options.setView; 477 | this._following = false; 478 | } 479 | }); 480 | 481 | L.control.locate = function (options) { 482 | return new L.Control.Locate(options); 483 | }; 484 | 485 | (function(){ 486 | // leaflet.js raises bug when trying to addClass / removeClass multiple classes at once 487 | // Let's create a wrapper on it which fixes it. 488 | var LDomUtilApplyClassesMethod = function(method, element, classNames) { 489 | classNames = classNames.split(' '); 490 | classNames.forEach(function(className) { 491 | L.DomUtil[method].call(this, element, className); 492 | }); 493 | }; 494 | 495 | L.DomUtil.addClasses = function(el, names) { LDomUtilApplyClassesMethod('addClass', el, names); }; 496 | L.DomUtil.removeClasses = function(el, names) { LDomUtilApplyClassesMethod('removeClass', el, names); }; 497 | })(); 498 | 499 | return L.Control.Locate; 500 | }, window)); 501 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/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 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.maskcanvas", 3 | "homepage": "https://github.com/domoritz/leaflet-maskcanvas", 4 | "authors": [ 5 | "Dominik Moritz " 6 | ], 7 | "description": "A leaflet canvas layer for displaying large coverage data sets.", 8 | "main": "src/L.TileLayer.MaskCanvas.js", 9 | "devDependencies": { 10 | "leaflet": "~0.7.0" 11 | }, 12 | "directories": { 13 | "example": "demo" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git@github.com:domoritz/leaflet-maskcanvas.git" 18 | }, 19 | "keywords": [ 20 | "leaflet", 21 | "maskcanvas", 22 | "quadtree", 23 | "plugin" 24 | ], 25 | "license": "MIT", 26 | "readmeFilename": "README.md", 27 | "ignore": [ 28 | "**/.*", 29 | "node_modules", 30 | "bower_components", 31 | "test", 32 | "tests" 33 | ], 34 | "_release": "8ec172a05b", 35 | "_resolution": { 36 | "type": "branch", 37 | "branch": "master", 38 | "commit": "8ec172a05bc27c51c237412483ec5e1cbeac9ff0" 39 | }, 40 | "_source": "git://github.com/domoritz/leaflet-maskcanvas.git", 41 | "_target": "*", 42 | "_originalSource": "leaflet.maskcanvas" 43 | } -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Dominik Moritz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all 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, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/README.md: -------------------------------------------------------------------------------- 1 | #Leaflet MaskCanvas 2 | 3 | A leaflet canvas layer for displaying large coverage data sets. 4 | 5 | __Features__: 6 | 7 | * Canvas tile layer based 8 | * High performance even for large dataset because of the [QuadTree](https://en.wikipedia.org/wiki/Quadtree) that is used internally 9 | * Custom color and circle size 10 | 11 | ## Demo 12 | 13 | Check out the demo at http://domoritz.github.com/vbb-coverage/. 14 | 15 | ##Usage 16 | 17 | ### Set up 18 | 19 | * Add the MaskCanvas and Quadtree libraries. 20 | 21 | ```html 22 | 23 | 24 | ``` 25 | 26 | You can also use the package manager [bower](http://bower.io/) to install the package using `bower install leaflet.maskcanvas`. 27 | 28 | * Initialize the maskCanvas layer 29 | 30 | ```javascript 31 | L.TileLayer.maskCanvas(); 32 | ``` 33 | 34 | * Set the dataset for the layer. 35 | 36 | ```javascript 37 | layer.setData(data); 38 | ``` 39 | 40 | * Finally add the layer to the map. 41 | 42 | ```javascript 43 | map.addLayer(layer); 44 | ``` 45 | 46 | The data format is a simple array of `[lat, lng]` pairs. For example `[[51.50,-0.28],[51.51,-0.07],[51.51,-0.07],[51.54,-0.29]]`. I recommend that you load the data set asynchronously in order to keep the page responsive. Once the data is loaded, you can add it to the layer and display it. 47 | 48 | ### Possible options 49 | 50 | The MaskCanvas layer supports all [Leaflet canvas layer options](http://leafletjs.com/reference.html#tilelayer-options) which can be passed to `L.TileLayer.maskCanvas`. You probably want to set the layer opacity. 51 | 52 | Other possible options: 53 | 54 | ```javascript 55 | var layer = L.TileLayer.maskCanvas({ 56 | radius: 5, // radius in pixels or in meters (see useAbsoluteRadius) 57 | useAbsoluteRadius: true, // true: r in meters, false: r in pixels 58 | color: '#000', // the color of the layer 59 | opacity: 0.5, // opacity of the not covered area 60 | noMask: false, // true results in normal (filled) circled, instead masked circles 61 | lineColor: '#A00' // color of the circle outline if noMask is true 62 | 63 | }); 64 | ``` 65 | 66 | ## Screenshot 67 | 68 | ![screenshot](https://raw.github.com/domoritz/leaflet-maskcanvas/master/screenshot.png "Screenshot showing mask canvas layer") 69 | 70 | 71 | ## Developers 72 | 73 | Run the demo locally with `python -m SimpleHTTPServer` and then open http://0.0.0.0:8000/demo. 74 | 75 | ## Acknowledgement 76 | 77 | The QuadTree implementation comes from https://github.com/jsmarkus/ExamplesByMesh/tree/master/JavaScript/QuadTree and has been slightly modified. Original Implementation by Mike Chambers. 78 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.maskcanvas", 3 | "version": "0.3", 4 | "homepage": "https://github.com/domoritz/leaflet-maskcanvas", 5 | "authors": [ 6 | "Dominik Moritz " 7 | ], 8 | "description": "A leaflet canvas layer for displaying large coverage data sets.", 9 | "main": "src/L.TileLayer.MaskCanvas.js", 10 | "devDependencies": { 11 | "leaflet": "~0.7.0" 12 | }, 13 | "directories": { 14 | "example": "demo" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git@github.com:domoritz/leaflet-maskcanvas.git" 19 | }, 20 | "keywords": [ 21 | "leaflet", 22 | "maskcanvas", 23 | "quadtree", 24 | "plugin" 25 | ], 26 | "license": "MIT", 27 | "readmeFilename": "README.md", 28 | "ignore": [ 29 | "**/.*", 30 | "node_modules", 31 | "bower_components", 32 | "test", 33 | "tests" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VBB coverage visualization 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | Fork me on GitHub 23 | 24 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/demo/main.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | 7 | #map { 8 | position: absolute; 9 | height: 100%; 10 | width: 100%; 11 | } -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/demo/main.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | //============ 3 | // Base Layers 4 | 5 | var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; 6 | var osmAttrib='Map data © OpenStreetMap contributors'; 7 | var osm = new L.TileLayer(osmUrl, { 8 | attribution: osmAttrib 9 | }); 10 | 11 | map = new L.Map('map', { 12 | center: new L.LatLng(52.51538, 13.40997), 13 | zoom: 8, 14 | layers: [osm] 15 | }); 16 | 17 | L.control.scale().addTo(map); 18 | 19 | //================ 20 | // Set up overlays 21 | 22 | var initRadius = 800; 23 | $('input.range').attr('value', initRadius); 24 | 25 | var coverageLayer = new L.TileLayer.MaskCanvas({'opacity': 0.5, radius: initRadius, useAbsoluteRadius: true, 'attribution': 'VBB stations from daten.berlin.de'}); 26 | 27 | var loadOverlay = function(id) { 28 | var url = id + '.json'; 29 | $.getJSON(url).success(function(data) { 30 | coverageLayer.setData(data); 31 | map.fitBounds(coverageLayer.bounds); 32 | map.addLayer(coverageLayer); 33 | }).error(function(err) { 34 | alert('An error occurred', err); 35 | }); 36 | }; 37 | 38 | loadOverlay('VBB'); 39 | }); -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet.maskcanvas/screenshot.png -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/src/L.GridLayer.MaskCanvas.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This L.GridLayer.MaskCanvas plugin is for Leaflet 1.0 3 | * For Leaflet 0.7.x, please use L.TileLayer.MaskCanvas 4 | */ 5 | L.GridLayer.MaskCanvas = L.GridLayer.extend({ 6 | options: { 7 | radius: 5, 8 | useAbsoluteRadius: true, // true: radius in meters, false: radius in pixels 9 | color: '#000', 10 | opacity: 0.5, 11 | noMask: false, // true results in normal (filled) circled, instead masked circles 12 | lineColor: undefined, // color of the circle outline if noMask is true 13 | debug: false, 14 | zIndex: 18 // if it is lower, then the layer is not in front 15 | }, 16 | 17 | initialize: function (options) { 18 | L.setOptions(this, options); 19 | }, 20 | 21 | createTile: function (coords) { 22 | var tile = document.createElement('canvas'); 23 | tile.width = tile.height = this.options.tileSize; 24 | 25 | this._draw(tile, coords); 26 | 27 | if (this.options.debug) { 28 | this._drawDebugInfo(tile, coords); 29 | } 30 | 31 | return tile; 32 | }, 33 | 34 | _drawDebugInfo: function (canvas, coords) { 35 | var tileSize = this.options.tileSize; 36 | var ctx = canvas.getContext('2d'); 37 | 38 | ctx.globalCompositeOperation = 'xor'; 39 | 40 | ctx.fillStyle = '#fff'; 41 | ctx.fillRect(0, 0, tileSize, tileSize); 42 | 43 | ctx.strokeStyle = '#000'; 44 | ctx.strokeText('x: ' + coords.x + ', y: ' + coords.y + ', zoom: ' + coords.z, 20, 20); 45 | 46 | ctx.strokeStyle = '#f55'; 47 | ctx.beginPath(); 48 | ctx.moveTo(0, 0); 49 | ctx.lineTo(tileSize, 0); 50 | ctx.lineTo(tileSize, tileSize); 51 | ctx.lineTo(0, tileSize); 52 | ctx.closePath(); 53 | ctx.stroke(); 54 | }, 55 | 56 | /** 57 | * Pass either pairs of (y,x) or (y,x,radius) coordinates. 58 | * Alternatively you can also pass LatLng objects. 59 | * 60 | * @param {[[number, number]]|[[number, number, number]]|[L.LatLng]} dataset 61 | */ 62 | setData: function (dataset) { 63 | var self = this; 64 | this.bounds = new L.LatLngBounds(dataset); 65 | 66 | this._quad = new QuadTree(this._boundsToQuery(this.bounds), false, 6, 6); 67 | 68 | var first = dataset[0]; 69 | var xc = 1, yc = 0; 70 | if (first instanceof L.LatLng) { 71 | xc = "lng"; 72 | yc = "lat"; 73 | } 74 | 75 | dataset.forEach(function(d) { 76 | self._quad.insert({ 77 | x: d[xc], //lng 78 | y: d[yc] //lat 79 | }); 80 | }); 81 | 82 | if (this._map) { 83 | this.redraw(); 84 | } 85 | }, 86 | 87 | setRadius: function(radius) { 88 | this.options.radius = radius; 89 | this.redraw(); 90 | }, 91 | 92 | /** 93 | * @param {L.Point} coords 94 | * @param {L.Point} pointCoordinate 95 | * @returns {[number, number]} 96 | * @private 97 | */ 98 | _tilePoint: function (coords, pointCoordinate) { 99 | // start coords to tile 'space' 100 | var s = coords.multiplyBy(this.options.tileSize); 101 | 102 | // actual coords to tile 'space' 103 | var p = this._map.project(new L.LatLng(pointCoordinate.y, pointCoordinate.x), coords.z); 104 | 105 | // point to draw 106 | var x = Math.round(p.x - s.x); 107 | var y = Math.round(p.y - s.y); 108 | return [x, y]; 109 | }, 110 | 111 | _boundsToQuery: function(bounds) { 112 | if (bounds.getSouthWest() == undefined) { return {x: 0, y: 0, width: 0.1, height: 0.1}; } // for empty data sets 113 | return { 114 | x: bounds.getSouthWest().lng, 115 | y: bounds.getSouthWest().lat, 116 | width: bounds.getNorthEast().lng-bounds.getSouthWest().lng, 117 | height: bounds.getNorthEast().lat-bounds.getSouthWest().lat 118 | }; 119 | }, 120 | 121 | _getLatRadius: function () { 122 | return (this.options.radius / 40075017) * 360; 123 | }, 124 | 125 | _getLngRadius: function () { 126 | return this._getLatRadius() / Math.cos(Math.PI / 180 * this._latlng.lat); 127 | }, 128 | 129 | // call to update the radius 130 | projectLatLngs: function (coords) { 131 | var lngRadius = this._getLngRadius(), 132 | latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngRadius, true); 133 | 134 | var point2 = this._latLngToLayerPoint(latlng2, coords.z); 135 | 136 | var point = this._latLngToLayerPoint(this._latlng, coords.z); 137 | 138 | this._radius = Math.max(Math.round(point.x - point2.x), 1); 139 | }, 140 | 141 | /** 142 | * This is used instead of this._map.latLngToLayerPoint 143 | * in order to use custom zoom value. 144 | * 145 | * @param {L.LatLng} latLng 146 | * @param {number} zoom 147 | * @returns {L.Point} 148 | * @private 149 | */ 150 | _latLngToLayerPoint: function (latLng, zoom) { 151 | var point = this._map.project(latLng, zoom)._round(); 152 | return point._subtract(this._map.getPixelOrigin()); 153 | }, 154 | 155 | // the radius of a circle can be either absolute in pixels or in meters 156 | _getRadius: function() { 157 | if (this.options.useAbsoluteRadius) { 158 | return this._radius; 159 | } else{ 160 | return this.options.radius; 161 | } 162 | }, 163 | 164 | /** 165 | * @param {HTMLCanvasElement|HTMLElement} canvas 166 | * @param {L.Point} coords 167 | * @private 168 | */ 169 | _draw: function (canvas, coords) { 170 | if (!this._quad || !this._map) { 171 | return; 172 | } 173 | 174 | var tileSize = this.options.tileSize; 175 | 176 | var nwPoint = coords.multiplyBy(tileSize); 177 | var sePoint = nwPoint.add(new L.Point(tileSize, tileSize)); 178 | 179 | if (this.options.useAbsoluteRadius) { 180 | var centerPoint = nwPoint.add(new L.Point(tileSize/2, tileSize/2)); 181 | this._latlng = this._map.unproject(centerPoint, coords.z); 182 | this.projectLatLngs(coords); 183 | } 184 | 185 | // padding 186 | var pad = new L.Point(this._getRadius(), this._getRadius()); 187 | nwPoint = nwPoint.subtract(pad); 188 | sePoint = sePoint.add(pad); 189 | 190 | var bounds = new L.LatLngBounds(this._map.unproject(sePoint, coords.z), this._map.unproject(nwPoint, coords.z)); 191 | 192 | var pointCoordinates = this._quad.retrieveInBounds(this._boundsToQuery(bounds)); 193 | 194 | this._drawPoints(canvas, coords, pointCoordinates); 195 | }, 196 | 197 | /** 198 | * @param {HTMLCanvasElement} canvas 199 | * @param {L.Point} coords 200 | * @param {[L.Point]} pointCoordinates 201 | * @private 202 | */ 203 | _drawPoints: function (canvas, coords, pointCoordinates) { 204 | var ctx = canvas.getContext('2d'), 205 | tilePoint; 206 | ctx.fillStyle = this.options.color; 207 | 208 | if (this.options.lineColor) { 209 | ctx.strokeStyle = this.options.lineColor; 210 | ctx.lineWidth = this.options.lineWidth || 1; 211 | } 212 | 213 | ctx.globalCompositeOperation = 'source-over'; 214 | if (!this.options.noMask && !this.options.debug) { 215 | ctx.fillRect(0, 0, this.options.tileSize, this.options.tileSize); 216 | ctx.globalCompositeOperation = 'destination-out'; 217 | } 218 | 219 | for (var index in pointCoordinates) { 220 | if (pointCoordinates.hasOwnProperty(index)) { 221 | tilePoint = this._tilePoint(coords, pointCoordinates[index]); 222 | ctx.beginPath(); 223 | ctx.arc(tilePoint[0], tilePoint[1], this._getRadius(), 0, Math.PI * 2); 224 | ctx.fill(); 225 | if (this.options.lineColor) { 226 | ctx.stroke(); 227 | } 228 | } 229 | } 230 | } 231 | }); 232 | 233 | L.TileLayer.maskCanvas = function(options) { 234 | return new L.GridLayer.MaskCanvas(options); 235 | }; 236 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/src/L.TileLayer.MaskCanvas.js: -------------------------------------------------------------------------------- 1 | L.TileLayer.MaskCanvas = L.TileLayer.Canvas.extend({ 2 | options: { 3 | radius: 5, 4 | useAbsoluteRadius: true, // true: radius in meters, false: radius in pixels 5 | color: '#000', 6 | opacity: 0.5, 7 | noMask: false, // true results in normal (filled) circled, instead masked circles 8 | lineColor: undefined, // color of the circle outline if noMask is true 9 | debug: false 10 | }, 11 | 12 | initialize: function (options, data) { 13 | var self = this; 14 | L.Util.setOptions(this, options); 15 | 16 | this.drawTile = function (tile, tilePoint, zoom) { 17 | var ctx = { 18 | canvas: tile, 19 | tilePoint: tilePoint, 20 | zoom: zoom 21 | }; 22 | 23 | if (self.options.debug) { 24 | self._drawDebugInfo(ctx); 25 | } 26 | this._draw(ctx); 27 | }; 28 | }, 29 | 30 | _drawDebugInfo: function (ctx) { 31 | var max = this.tileSize; 32 | var g = ctx.canvas.getContext('2d'); 33 | g.globalCompositeOperation = 'destination-over'; 34 | g.strokeStyle = '#000000'; 35 | g.fillStyle = '#FFFF00'; 36 | g.strokeRect(0, 0, max, max); 37 | g.font = "12px Arial"; 38 | g.fillRect(0, 0, 5, 5); 39 | g.fillRect(0, max - 5, 5, 5); 40 | g.fillRect(max - 5, 0, 5, 5); 41 | g.fillRect(max - 5, max - 5, 5, 5); 42 | g.fillRect(max / 2 - 5, max / 2 - 5, 10, 10); 43 | g.strokeText(ctx.tilePoint.x + ' ' + ctx.tilePoint.y + ' ' + ctx.zoom, max / 2 - 30, max / 2 - 10); 44 | }, 45 | 46 | setData: function(dataset) { 47 | var self = this; 48 | 49 | 50 | this.bounds = new L.LatLngBounds(dataset); 51 | 52 | this._quad = new QuadTree(this._boundsToQuery(this.bounds), false, 6, 6); 53 | 54 | var first = dataset[0]; 55 | var xc = 1, yc = 0; 56 | if (first instanceof L.LatLng) { 57 | xc = "lng"; 58 | yc = "lat"; 59 | } 60 | 61 | dataset.forEach(function(d) { 62 | self._quad.insert({ 63 | x: d[xc], //lng 64 | y: d[yc] //lat 65 | }); 66 | }); 67 | 68 | if (this._map) { 69 | this.redraw(); 70 | } 71 | }, 72 | 73 | setRadius: function(radius) { 74 | this.options.radius = radius; 75 | this.redraw(); 76 | }, 77 | 78 | _tilePoint: function (ctx, coords) { 79 | // start coords to tile 'space' 80 | var s = ctx.tilePoint.multiplyBy(this.options.tileSize); 81 | 82 | // actual coords to tile 'space' 83 | var p = this._map.project(new L.LatLng(coords.y, coords.x)); 84 | 85 | // point to draw 86 | var x = Math.round(p.x - s.x); 87 | var y = Math.round(p.y - s.y); 88 | return [x, y]; 89 | }, 90 | 91 | _drawPoints: function (ctx, coordinates) { 92 | var c = ctx.canvas, 93 | g = c.getContext('2d'), 94 | self = this, 95 | p, 96 | tileSize = this.options.tileSize; 97 | g.fillStyle = this.options.color; 98 | 99 | if (this.options.lineColor) { 100 | g.strokeStyle = this.options.lineColor; 101 | g.lineWidth = this.options.lineWidth || 1; 102 | } 103 | g.globalCompositeOperation = 'source-over'; 104 | if (!this.options.noMask) { 105 | g.fillRect(0, 0, tileSize, tileSize); 106 | g.globalCompositeOperation = 'destination-out'; 107 | } 108 | coordinates.forEach(function(coords) { 109 | p = self._tilePoint(ctx, coords); 110 | g.beginPath(); 111 | g.arc(p[0], p[1], self._getRadius(), 0, Math.PI * 2); 112 | g.fill(); 113 | if (self.options.lineColor) { 114 | g.stroke(); 115 | } 116 | }); 117 | }, 118 | 119 | _boundsToQuery: function(bounds) { 120 | if (bounds.getSouthWest() == undefined) { return {x: 0, y: 0, width: 0.1, height: 0.1}; } // for empty data sets 121 | return { 122 | x: bounds.getSouthWest().lng, 123 | y: bounds.getSouthWest().lat, 124 | width: bounds.getNorthEast().lng-bounds.getSouthWest().lng, 125 | height: bounds.getNorthEast().lat-bounds.getSouthWest().lat 126 | }; 127 | }, 128 | 129 | _getLatRadius: function () { 130 | return (this.options.radius / 40075017) * 360; 131 | }, 132 | 133 | _getLngRadius: function () { 134 | return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat); 135 | }, 136 | 137 | // call to update the radius 138 | projectLatlngs: function () { 139 | var lngRadius = this._getLngRadius(), 140 | latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngRadius, true), 141 | point2 = this._map.latLngToLayerPoint(latlng2), 142 | point = this._map.latLngToLayerPoint(this._latlng); 143 | this._radius = Math.max(Math.round(point.x - point2.x), 1); 144 | }, 145 | 146 | // the radius of a circle can be either absolute in pixels or in meters 147 | _getRadius: function() { 148 | if (this.options.useAbsoluteRadius) { 149 | return this._radius; 150 | } else{ 151 | return this.options.radius; 152 | } 153 | }, 154 | 155 | _draw: function (ctx) { 156 | if (!this._quad || !this._map) { 157 | return; 158 | } 159 | 160 | var tileSize = this.options.tileSize; 161 | 162 | var nwPoint = ctx.tilePoint.multiplyBy(tileSize); 163 | var sePoint = nwPoint.add(new L.Point(tileSize, tileSize)); 164 | 165 | if (this.options.useAbsoluteRadius) { 166 | var centerPoint = nwPoint.add(new L.Point(tileSize/2, tileSize/2)); 167 | this._latlng = this._map.unproject(centerPoint); 168 | this.projectLatlngs(); 169 | } 170 | 171 | // padding 172 | var pad = new L.Point(this._getRadius(), this._getRadius()); 173 | nwPoint = nwPoint.subtract(pad); 174 | sePoint = sePoint.add(pad); 175 | 176 | var bounds = new L.LatLngBounds(this._map.unproject(sePoint), this._map.unproject(nwPoint)); 177 | 178 | var coordinates = this._quad.retrieveInBounds(this._boundsToQuery(bounds)); 179 | 180 | this._drawPoints(ctx, coordinates); 181 | } 182 | }); 183 | 184 | L.TileLayer.maskCanvas = function(options) { 185 | var mc = new L.TileLayer.MaskCanvas(options); 186 | leafletVersion = parseInt(L.version.match(/\d{1,}\.(\d{1,})\.\d{1,}/)[1], 10); 187 | if (leafletVersion < 7) mc._createTile = mc._oldCreateTile; 188 | return mc; 189 | }; 190 | -------------------------------------------------------------------------------- /bower_components/leaflet.maskcanvas/src/QuadTree.js: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License 3 | 4 | Copyright (c) 2011 Mike Chambers 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 | */ 24 | 25 | /* 26 | From https://github.com/jsmarkus/ExamplesByMesh/tree/master/JavaScript/QuadTree, slightly modified 27 | */ 28 | 29 | 30 | /** 31 | * A QuadTree implementation in JavaScript, a 2d spatial subdivision algorithm. 32 | * @module QuadTree 33 | **/ 34 | 35 | (function(window) { 36 | 37 | /****************** QuadTree ****************/ 38 | 39 | /** 40 | * QuadTree data structure. 41 | * @class QuadTree 42 | * @constructor 43 | * @param {Object} An object representing the bounds of the top level of the QuadTree. The object 44 | * should contain the following properties : x, y, width, height 45 | * @param {Boolean} pointQuad Whether the QuadTree will contain points (true), or items with bounds 46 | * (width / height)(false). Default value is false. 47 | * @param {Number} maxDepth The maximum number of levels that the quadtree will create. Default is 4. 48 | * @param {Number} maxChildren The maximum number of children that a node can contain before it is split into sub-nodes. 49 | **/ 50 | function QuadTree(bounds, pointQuad, maxDepth, maxChildren) 51 | { 52 | var node; 53 | if(pointQuad) 54 | { 55 | 56 | node = new Node(bounds, 0, maxDepth, maxChildren); 57 | } 58 | else 59 | { 60 | node = new BoundsNode(bounds, 0, maxDepth, maxChildren); 61 | } 62 | 63 | this.root = node; 64 | } 65 | 66 | /** 67 | * The root node of the QuadTree which covers the entire area being segmented. 68 | * @property root 69 | * @type Node 70 | **/ 71 | QuadTree.prototype.root = null; 72 | 73 | 74 | /** 75 | * Inserts an item into the QuadTree. 76 | * @method insert 77 | * @param {Object|Array} item The item or Array of items to be inserted into the QuadTree. The item should expose x, y 78 | * properties that represents its position in 2D space. 79 | **/ 80 | QuadTree.prototype.insert = function(item) 81 | { 82 | if(item instanceof Array) 83 | { 84 | var len = item.length; 85 | 86 | for(var i = 0; i < len; i++) 87 | { 88 | this.root.insert(item[i]); 89 | } 90 | } 91 | else 92 | { 93 | this.root.insert(item); 94 | } 95 | }; 96 | 97 | /** 98 | * Clears all nodes and children from the QuadTree 99 | * @method clear 100 | **/ 101 | QuadTree.prototype.clear = function() 102 | { 103 | this.root.clear(); 104 | }; 105 | 106 | /** 107 | * Retrieves all items / points in the same node as the specified item / point. If the specified item 108 | * overlaps the bounds of a node, then all children in both nodes will be returned. 109 | * @method retrieve 110 | * @param {Object} item An object representing a 2D coordinate point (with x, y properties), or a shape 111 | * with dimensions (x, y, width, height) properties. 112 | **/ 113 | QuadTree.prototype.retrieve = function(item) 114 | { 115 | //get a copy of the array of items 116 | var out = this.root.retrieve(item).slice(0); 117 | //return QuadTree._filterResults(out, {x:item.x, y:item.y, width:0, height:0}); 118 | return out; 119 | }; 120 | 121 | QuadTree.prototype.retrieveInBounds = function (bounds) 122 | { 123 | var treeResult = this.root.retrieveInBounds(bounds); 124 | return QuadTree._filterResults(treeResult, bounds); 125 | }; 126 | 127 | QuadTree._filterResults = function(treeResult, bounds) 128 | { 129 | var filteredResult = []; 130 | 131 | if(this.root instanceof BoundsNode) 132 | { 133 | for (var i=0; i < treeResult.length; i++) 134 | { 135 | var node = treeResult[i]; 136 | if (QuadTree._isBoundOverlappingBound(node, bounds)) 137 | { 138 | filteredResult.push(node); 139 | } 140 | } 141 | } 142 | else 143 | { 144 | treeResult.forEach(function(node){ 145 | if(QuadTree._isPointInsideBounds(node, bounds)) 146 | { 147 | filteredResult.push(node); 148 | } 149 | }); 150 | } 151 | 152 | return filteredResult; 153 | }; 154 | 155 | QuadTree._isPointInsideBounds = function (point, bounds) 156 | { 157 | return ( 158 | (point.x >= bounds.x) && 159 | (point.x <= bounds.x + bounds.width) && 160 | (point.y >= bounds.y) && 161 | (point.y <= bounds.y + bounds.height) 162 | ); 163 | }; 164 | 165 | 166 | QuadTree._isBoundOverlappingBound = function (b1, b2) 167 | { 168 | return !( 169 | b1.x > (b2.x + b2.width) || 170 | b2.x > (b1.x + b1.width) || 171 | b1.y > (b2.y + b2.height) || 172 | b2.y > (b1.y + b1.height) 173 | ); 174 | }; 175 | 176 | /************** Node ********************/ 177 | 178 | 179 | function Node(bounds, depth, maxDepth, maxChildren) 180 | { 181 | this._bounds = bounds; 182 | this.children = []; 183 | this.nodes = []; 184 | 185 | if(maxChildren) 186 | { 187 | this._maxChildren = maxChildren; 188 | 189 | } 190 | 191 | if(maxDepth) 192 | { 193 | this._maxDepth = maxDepth; 194 | } 195 | 196 | if(depth) 197 | { 198 | this._depth = depth; 199 | } 200 | }; 201 | 202 | //subnodes 203 | Node.prototype.nodes = null; 204 | Node.prototype._classConstructor = Node; 205 | 206 | //children contained directly in the node 207 | Node.prototype.children = null; 208 | Node.prototype._bounds = null; 209 | 210 | //read only 211 | Node.prototype._depth = 0; 212 | 213 | Node.prototype._maxChildren = 4; 214 | Node.prototype._maxDepth = 4; 215 | 216 | Node.TOP_LEFT = 0; 217 | Node.TOP_RIGHT = 1; 218 | Node.BOTTOM_LEFT = 2; 219 | Node.BOTTOM_RIGHT = 3; 220 | 221 | 222 | Node.prototype.insert = function(item) 223 | { 224 | if(this.nodes.length) 225 | { 226 | var index = this._findIndex(item); 227 | 228 | this.nodes[index].insert(item); 229 | 230 | return; 231 | } 232 | 233 | this.children.push(item); 234 | 235 | var len = this.children.length; 236 | if(!(this._depth >= this._maxDepth) && 237 | len > this._maxChildren) 238 | { 239 | this.subdivide(); 240 | 241 | for(var i = 0; i < len; i++) 242 | { 243 | this.insert(this.children[i]); 244 | } 245 | 246 | this.children.length = 0; 247 | } 248 | }; 249 | 250 | Node.prototype.retrieve = function(item) 251 | { 252 | if(this.nodes.length) 253 | { 254 | var index = this._findIndex(item); 255 | 256 | return this.nodes[index].retrieve(item); 257 | } 258 | 259 | return this.children; 260 | }; 261 | 262 | Node.prototype.retrieveInBounds = function(bounds) 263 | { 264 | var result = []; 265 | 266 | if(this.collidesWith(bounds)) 267 | { 268 | result = result.concat(this._stuckChildren); 269 | 270 | if(this.children.length) 271 | { 272 | result = result.concat(this.children); 273 | } 274 | else 275 | { 276 | if(this.nodes.length) 277 | { 278 | for (var i = 0; i < this.nodes.length; i++) 279 | { 280 | result = result.concat(this.nodes[i].retrieveInBounds(bounds)); 281 | } 282 | } 283 | } 284 | } 285 | 286 | return result; 287 | }; 288 | 289 | 290 | Node.prototype.collidesWith = function (bounds) 291 | { 292 | var b1 = this._bounds; 293 | var b2 = bounds; 294 | 295 | return !( 296 | b1.x > (b2.x + b2.width) || 297 | b2.x > (b1.x + b1.width) || 298 | b1.y > (b2.y + b2.height) || 299 | b2.y > (b1.y + b1.height) 300 | ); 301 | }; 302 | 303 | Node.prototype._findIndex = function(item) 304 | { 305 | var b = this._bounds; 306 | var left = (item.x > b.x + b.width / 2)? false : true; 307 | var top = (item.y > b.y + b.height / 2)? false : true; 308 | 309 | //top left 310 | var index = Node.TOP_LEFT; 311 | if(left) 312 | { 313 | //left side 314 | if(!top) 315 | { 316 | //bottom left 317 | index = Node.BOTTOM_LEFT; 318 | } 319 | } 320 | else 321 | { 322 | //right side 323 | if(top) 324 | { 325 | //top right 326 | index = Node.TOP_RIGHT; 327 | } 328 | else 329 | { 330 | //bottom right 331 | index = Node.BOTTOM_RIGHT; 332 | } 333 | } 334 | 335 | return index; 336 | }; 337 | 338 | 339 | Node.prototype.subdivide = function() 340 | { 341 | var depth = this._depth + 1; 342 | 343 | var bx = this._bounds.x; 344 | var by = this._bounds.y; 345 | 346 | //floor the values 347 | var b_w_h = (this._bounds.width / 2)|0; 348 | var b_h_h = (this._bounds.height / 2)|0; 349 | var bx_b_w_h = bx + b_w_h; 350 | var by_b_h_h = by + b_h_h; 351 | 352 | //top left 353 | this.nodes[Node.TOP_LEFT] = new this._classConstructor({ 354 | x:bx, 355 | y:by, 356 | width:b_w_h, 357 | height:b_h_h 358 | }, 359 | depth, this._maxDepth, this._maxChildren); 360 | 361 | //top right 362 | this.nodes[Node.TOP_RIGHT] = new this._classConstructor({ 363 | x:bx_b_w_h, 364 | y:by, 365 | width:b_w_h, 366 | height:b_h_h 367 | }, 368 | depth, this._maxDepth, this._maxChildren); 369 | 370 | //bottom left 371 | this.nodes[Node.BOTTOM_LEFT] = new this._classConstructor({ 372 | x:bx, 373 | y:by_b_h_h, 374 | width:b_w_h, 375 | height:b_h_h 376 | }, 377 | depth, this._maxDepth, this._maxChildren); 378 | 379 | 380 | //bottom right 381 | this.nodes[Node.BOTTOM_RIGHT] = new this._classConstructor({ 382 | x:bx_b_w_h, 383 | y:by_b_h_h, 384 | width:b_w_h, 385 | height:b_h_h 386 | }, 387 | depth, this._maxDepth, this._maxChildren); 388 | }; 389 | 390 | Node.prototype.clear = function() 391 | { 392 | this.children.length = 0; 393 | 394 | var len = this.nodes.length; 395 | for(var i = 0; i < len; i++) 396 | { 397 | this.nodes[i].clear(); 398 | } 399 | 400 | this.nodes.length = 0; 401 | }; 402 | 403 | 404 | /******************** BoundsQuadTree ****************/ 405 | 406 | function BoundsNode(bounds, depth, maxChildren, maxDepth) 407 | { 408 | Node.call(this, bounds, depth, maxChildren, maxDepth); 409 | this._stuckChildren = []; 410 | } 411 | 412 | BoundsNode.prototype = new Node(); 413 | BoundsNode.prototype._classConstructor = BoundsNode; 414 | BoundsNode.prototype._stuckChildren = null; 415 | 416 | //we use this to collect and conctenate items being retrieved. This way 417 | //we dont have to continuously create new Array instances. 418 | //Note, when returned from QuadTree.retrieve, we then copy the array 419 | BoundsNode.prototype._out = []; 420 | 421 | BoundsNode.prototype.insert = function(item) 422 | { 423 | if(this.nodes.length) 424 | { 425 | var index = this._findIndex(item); 426 | var node = this.nodes[index]; 427 | 428 | //todo: make _bounds bounds 429 | if(item.x >= node._bounds.x && 430 | item.x + item.width <= node._bounds.x + node._bounds.width && 431 | item.y >= node._bounds.y && 432 | item.y + item.height <= node._bounds.y + node._bounds.height) 433 | { 434 | this.nodes[index].insert(item); 435 | } 436 | else 437 | { 438 | this._stuckChildren.push(item); 439 | } 440 | 441 | return; 442 | } 443 | 444 | this.children.push(item); 445 | 446 | var len = this.children.length; 447 | 448 | if(this._depth < this._maxDepth && 449 | len > this._maxChildren) 450 | { 451 | this.subdivide(); 452 | 453 | for(var i = 0; i < len; i++) 454 | { 455 | this.insert(this.children[i]); 456 | } 457 | 458 | this.children.length = 0; 459 | } 460 | }; 461 | 462 | BoundsNode.prototype.getChildren = function() 463 | { 464 | return this.children.concat(this._stuckChildren); 465 | }; 466 | 467 | BoundsNode.prototype.retrieve = function(item) 468 | { 469 | var out = this._out; 470 | out.length = 0; 471 | if(this.nodes.length) 472 | { 473 | var index = this._findIndex(item); 474 | 475 | out.push.apply(out, this.nodes[index].retrieve(item)); 476 | } 477 | 478 | out.push.apply(out, this._stuckChildren); 479 | out.push.apply(out, this.children); 480 | 481 | return out; 482 | }; 483 | 484 | BoundsNode.prototype.clear = function() 485 | { 486 | 487 | this._stuckChildren.length = 0; 488 | 489 | //array 490 | this.children.length = 0; 491 | 492 | var len = this.nodes.length; 493 | 494 | if(!len) 495 | { 496 | return; 497 | } 498 | 499 | for(var i = 0; i < len; i++) 500 | { 501 | this.nodes[i].clear(); 502 | } 503 | 504 | //array 505 | this.nodes.length = 0; 506 | 507 | //we could call the super clear function but for now, im just going to inline it 508 | //call the hidden super.clear, and make sure its called with this = this instance 509 | //Object.getPrototypeOf(BoundsNode.prototype).clear.call(this); 510 | }; 511 | 512 | //BoundsNode.prototype.getChildCount 513 | 514 | window.QuadTree = QuadTree; 515 | 516 | /* 517 | //http://ejohn.org/blog/objectgetprototypeof/ 518 | if ( typeof Object.getPrototypeOf !== "function" ) { 519 | if ( typeof "test".__proto__ === "object" ) { 520 | Object.getPrototypeOf = function(object){ 521 | return object.__proto__; 522 | }; 523 | } else { 524 | Object.getPrototypeOf = function(object){ 525 | // May break if the constructor has been tampered with 526 | return object.constructor.prototype; 527 | }; 528 | } 529 | } 530 | */ 531 | 532 | }(this)); -------------------------------------------------------------------------------- /bower_components/leaflet/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet", 3 | "version": "0.7.3", 4 | "description": "JavaScript library for mobile-friendly interactive maps", 5 | "main": [ 6 | "dist/leaflet.js", 7 | "dist/leaflet.css", 8 | "dist/leaflet-src.js", 9 | "dist/images/layers-2x.png", 10 | "dist/images/layers.png", 11 | "dist/images/marker-icon-2x.png", 12 | "dist/images/marker-icon.png", 13 | "dist/images/marker-shadow.png" 14 | ], 15 | "ignore": [ 16 | ".*", 17 | "CHANGELOG.json", 18 | "FAQ.md", 19 | "debug", 20 | "spec", 21 | "src", 22 | "build" 23 | ], 24 | "homepage": "https://github.com/Leaflet/Leaflet", 25 | "_release": "0.7.3", 26 | "_resolution": { 27 | "type": "version", 28 | "tag": "v0.7.3", 29 | "commit": "8a5fdfc6e3db2807b8f0dd617474e4ab2949142b" 30 | }, 31 | "_source": "git://github.com/Leaflet/Leaflet.git", 32 | "_target": "^0.7.3", 33 | "_originalSource": "leaflet" 34 | } -------------------------------------------------------------------------------- /bower_components/leaflet/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing to Leaflet 2 | ======================= 3 | 4 | 1. [Getting Involved](#getting-involved) 5 | 2. [Reporting Bugs](#reporting-bugs) 6 | 3. [Contributing Code](#contributing-code) 7 | 4. [Improving Documentation](#improving-documentation) 8 | 9 | ## Getting Involved 10 | 11 | Third-party patches are absolutely essential on our quest to create the best mapping library that will ever exist. 12 | However, they're not the only way to get involved with the development of Leaflet. 13 | You can help the project tremendously by discovering and [reporting bugs](#reporting-bugs), 14 | [improving documentation](#improving-documentation), 15 | helping others on the [Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) 16 | and [GitHub issues](https://github.com/Leaflet/Leaflet/issues), 17 | showing your support for your favorite feature suggestions on [Leaflet UserVoice page](http://leaflet.uservoice.com), 18 | tweeting to [@LeafletJS](http://twitter.com/LeafletJS) 19 | and spreading the word about Leaflet among your colleagues and friends. 20 | 21 | ## Reporting Bugs 22 | 23 | Before reporting a bug on the project's [issues page](https://github.com/Leaflet/Leaflet/issues), 24 | first make sure that your issue is caused by Leaflet, not your application code 25 | (e.g. passing incorrect arguments to methods, etc.). 26 | Second, search the already reported issues for similar cases, 27 | and if it's already reported, just add any additional details in the comments. 28 | 29 | After you made sure that you've found a new Leaflet bug, 30 | here are some tips for creating a helpful report that will make fixing it much easier and quicker: 31 | 32 | * Write a **descriptive, specific title**. Bad: *Problem with polylines*. Good: *Doing X in IE9 causes Z*. 33 | * Include **browser, OS and Leaflet version** info in the description. 34 | * Create a **simple test case** that demonstrates the bug (e.g. using [JSFiddle](http://jsfiddle.net/)). 35 | * Check whether the bug can be reproduced in **other browsers**. 36 | * Check if the bug occurs in the stable version, master, or both. 37 | * *Bonus tip:* if the bug only appears in the master version but the stable version is fine, 38 | use `git bisect` to find the exact commit that introduced the bug. 39 | 40 | If you just want some help with your project, 41 | try asking [on the Leaflet forum](https://groups.google.com/forum/#!forum/leaflet-js) instead. 42 | 43 | ## Contributing Code 44 | 45 | ### Considerations for Accepting Patches 46 | 47 | While we happily accept patches, we're also commited to keeping Leaflet simple, lightweight and blazingly fast. 48 | So bugfixes, performance optimizations and small improvements that don't add a lot of code 49 | are much more likely to get accepted quickly. 50 | 51 | Before sending a pull request with a new feature, first check if it's been discussed before already 52 | (either on [GitHub issues](https://github.com/Leaflet/Leaflet/issues) 53 | or [Leaflet UserVoice](http://leaflet.uservoice.com/)), 54 | and then ask yourself two questions: 55 | 56 | 1. Are you sure that this new feature is important enough to justify its presense in the Leaflet core? 57 | Or will it look better as a plugin in a separate repository? 58 | 2. Is it written in a simple, concise way that doesn't add bulk to the codebase? 59 | 60 | If your feature or API improvement did get merged into master, 61 | please consider submitting another pull request with the corresponding [documentation update](#improving-documentation). 62 | 63 | ### Setting up the Build System 64 | 65 | To set up the Leaflet build system, install [Node](http://nodejs.org/), 66 | then run the following commands in the project root: 67 | 68 | ``` 69 | npm install -g jake 70 | npm install 71 | ``` 72 | 73 | You can build minified Leaflet by running `jake` (it will be built from source in the `dist` folder). 74 | For a custom build with selected components, open `build/build.html` in the browser and follow the instructions from there. 75 | 76 | ### Making Changes to Leaflet Source 77 | 78 | If you're not yet familiar with the way GitHub works (forking, pull requests, etc.), 79 | be sure to check out the awesome [article about forking](https://help.github.com/articles/fork-a-repo) 80 | on the GitHub Help website — it will get you started quickly. 81 | 82 | You should always write each batch of changes (feature, bugfix, etc.) in **its own topic branch**. 83 | Please do not commit to the `master` branch, or your unrelated changes will go into the same pull request. 84 | 85 | You should also follow the code style and whitespace conventions of the original codebase. 86 | In particular, use tabs for indentation and spaces for alignment. 87 | 88 | Before commiting your changes, run `jake lint` to catch any JS errors in the code and fix them. 89 | If you add any new files to the Leaflet source, make sure to also add them to `build/deps.js` 90 | so that the build system knows about them. 91 | 92 | Also, please make sure that you have [line endings configured properly](https://help.github.com/articles/dealing-with-line-endings) in Git! Otherwise the diff will show that all lines of a file were changed even if you touched only one. 93 | 94 | Happy coding! 95 | 96 | ## Running the Tests 97 | 98 | To run the tests from the command line, 99 | install [PhantomJS](http://phantomjs.org/) (and make sure it's in your `PATH`), 100 | then run: 101 | 102 | ``` 103 | jake test 104 | ``` 105 | 106 | To run all the tests in actual browsers at the same time, you can do: 107 | 108 | ``` 109 | jake test --ff --chrome --safari --ie 110 | ``` 111 | 112 | To run the tests in a browser manually, open `spec/index.html`. 113 | 114 | ## Code Coverage 115 | 116 | To generate a detailed report about test coverage (which helps tremendously when working on test improvements), run: 117 | 118 | ``` 119 | jake test --cov 120 | ``` 121 | 122 | After that, open `spec/coverage//index.html` in a browser to see the report. 123 | From there you can click through folders/files to get details on their individual coverage. 124 | 125 | ## Improving Documentation 126 | 127 | The code of the live Leaflet website that contains all documentation and examples is located in the `gh-pages` branch 128 | and is automatically generated from a set of HTML and Markdown files by [Jekyll](https://github.com/mojombo/jekyll). 129 | 130 | The easiest way to make little improvements such as fixing typos without even leaving the browser 131 | is by editing one of the files with the online GitHub editor: 132 | browse the [gh-pages branch](https://github.com/Leaflet/Leaflet/tree/gh-pages), 133 | choose a certain file for editing (e.g. `reference.html` for API reference), 134 | click the Edit button, make changes and follow instructions from there. 135 | Once it gets merged, the changes will immediately appear on the website. 136 | 137 | If you need to make edits in a local repository to see how it looks in the process, do the following: 138 | 139 | 1. [Install Ruby](http://www.ruby-lang.org/en/) if don't have it yet. 140 | 2. Run `gem install jekyll`. 141 | 3. Run `jekyll serve --watch` in the root `Leaflet` folder. 142 | 4. Open `localhost:4000` in your browser. 143 | 144 | Now any file changes will be updated when you reload pages automatically. 145 | After commiting the changes, just send a pull request. 146 | 147 | If you need to update documentation according to a new feature that only appeared in the master version (not stable one), 148 | you need to make changes to `gh-pages-master` branch instead of `gh-pages`. 149 | It will get merged into the latter when released as stable. 150 | 151 | ## Thank You 152 | 153 | Not only are we grateful for any contributions, — helping Leaflet and its community actually makes you AWESOME. 154 | Join [this approved list of awesome people](https://github.com/Leaflet/Leaflet/graphs/contributors) 155 | and help us push the limits of what's possible with online maps! 156 | -------------------------------------------------------------------------------- /bower_components/leaflet/Jakefile.js: -------------------------------------------------------------------------------- 1 | /* 2 | Leaflet 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 | function hint(msg, paths) { 18 | return function () { 19 | console.log(msg); 20 | jake.exec('node node_modules/jshint/bin/jshint -c ' + paths, 21 | {printStdout: true}, function () { 22 | console.log('\tCheck passed.\n'); 23 | complete(); 24 | }); 25 | } 26 | } 27 | 28 | desc('Check Leaflet source for errors with JSHint'); 29 | task('lint', {async: true}, hint('Checking for JS errors...', 'build/hintrc.js src')); 30 | 31 | desc('Check Leaflet specs source for errors with JSHint'); 32 | task('lintspec', {async: true}, hint('Checking for specs JS errors...', 'spec/spec.hintrc.js spec/suites')); 33 | 34 | desc('Combine and compress Leaflet source files'); 35 | task('build', {async: true}, function () { 36 | build.build(complete); 37 | }); 38 | 39 | desc('Run PhantomJS tests'); 40 | task('test', ['lint', 'lintspec'], {async: true}, function () { 41 | build.test(complete); 42 | }); 43 | 44 | task('default', ['test', 'build']); 45 | 46 | jake.addListener('complete', function () { 47 | process.exit(); 48 | }); 49 | -------------------------------------------------------------------------------- /bower_components/leaflet/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2013, Vladimir Agafonkin 2 | Copyright (c) 2010-2011, CloudMade 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, are 6 | permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of 9 | conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 | of conditions and the following disclaimer in the documentation and/or other materials 13 | provided with the distribution. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 17 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 18 | COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 22 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /bower_components/leaflet/PLUGIN-GUIDE.md: -------------------------------------------------------------------------------- 1 | # Leaflet Plugin Authoring Guide 2 | 3 | One of the greatest things about Leaflet is its powerful plugin ecosystem. 4 | The [Leaflet plugins page](http://leafletjs.com/plugins.html) lists dozens of awesome plugins, and more are being added every week. 5 | 6 | This guide lists a number of best practices for publishing a Leaflet plugin that meets the quality standards of Leaflet itself. 7 | 8 | 1. [Presentation](#presentation) 9 | - [Repository](#repository) 10 | - [Name](#name) 11 | - [Demo](#demo) 12 | - [Readme](#readme) 13 | - [License](#license) 14 | 2. [Code](#code) 15 | - [File Structure](#file-structure) 16 | - [Code Conventions](#code-conventions) 17 | - [Plugin API](#plugin-api) 18 | 19 | ## Presentation 20 | 21 | ### Repository 22 | 23 | The best place to put your Leaflet plugin to is a separate [GitHub](http://github.com) repository. 24 | If you create a collection of plugins for different uses, 25 | don't put them in one repo — 26 | it's usually easier to work with small, self-contained plugins in individual repositories. 27 | 28 | ### Name 29 | 30 | Most existing plugins follow the convention of naming plugins (and repos) like this: `Leaflet.MyPluginName`. 31 | You can use other forms (e.g. "leaflet-my-plugin-name"), 32 | just make sure to include the word "Leaflet" in the name so that it's obvious that it's a Leaflet plugin. 33 | 34 | ### Demo 35 | 36 | The most essential thing to do when publishing a plugin is to include a demo that showcases what the plugin does — 37 | it's usually the first thing people will look for. 38 | 39 | The easiest way to put up a demo is using [GitHub Pages](http://pages.github.com/). 40 | A good [starting point](https://help.github.com/articles/creating-project-pages-manually) is creating a `gh-pages` branch in your repo and adding an `index.html` page to it — 41 | after pushing, it'll be published as `http://.github.io/`. 42 | 43 | ### Readme 44 | 45 | The next thing you need to have is a descriptive `README.md` in the root of the repo (or a link to a website with a similar content). 46 | At a minimum it should contain the following items: 47 | 48 | - name of the plugin 49 | - a simple, concise description of what it does 50 | - requirements 51 | - Leaflet version 52 | - other external dependencies (if any) 53 | - browser / device compatibility 54 | - links to demos 55 | - instructions for including the plugin 56 | - simple usage code example 57 | - API reference (methods, options, events) 58 | 59 | ### License 60 | 61 | Every open source repository should include a license. 62 | If you don't know what open source license to choose for your code, 63 | [MIT License](http://opensource.org/licenses/MIT) and [BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause) are both good choices. 64 | You can either put it in the repo as a `LICENSE` file or just link to the license from the Readme. 65 | 66 | ## Code 67 | 68 | ### File Structure 69 | 70 | Keep the file structure clean and simple, 71 | don't pile up lots of files in one place — 72 | make it easy for a new person to find their way in your repo. 73 | 74 | A barebones repo for a simple plugin would look like this: 75 | 76 | ``` 77 | my-plugin.js 78 | README.md 79 | ``` 80 | 81 | An example of a more sophisticated plugin file structure: 82 | 83 | ``` 84 | /src - JS source files 85 | /dist - minified plugin JS, CSS, images 86 | /spec - test files 87 | /lib - any external libraries/plugins if necessary 88 | /examples - HTML examples of plugin usage 89 | README.md 90 | LICENSE 91 | package.json 92 | ``` 93 | 94 | ### Code Conventions 95 | 96 | Everyone's tastes are different, but it's important to be consistent with whatever conventions you choose for your plugin. 97 | 98 | For a good starting point, check out [Airbnb JavaScript Guide](https://github.com/airbnb/javascript). 99 | Leaflet follows pretty much the same conventions 100 | except for using smart tabs (hard tabs for indentation, spaces for alignment) 101 | and putting a space after the `function` keyword. 102 | 103 | ### Plugin API 104 | 105 | Never expose global variables in your plugin.
106 | If you have a new class, put it directly in the `L` namespace (`L.MyPlugin`).
107 | If you inherit one of the existing classes, make it a sub-property (`L.TileLayer.Banana`).
108 | If you want to add new methods to existing Leaflet classes, you can do it like this: `L.Marker.include({myPlugin: …})`. 109 | 110 | Function, method and property names should be in `camelCase`.
111 | Class names should be in `CapitalizedCamelCase`. 112 | 113 | If you have a lot of arguments in your function, consider accepting an options object instead 114 | (putting default values where possible so that users don't need specify all of them): 115 | 116 | ```js 117 | // bad 118 | marker.myPlugin('bla', 'foo', null, {}, 5, 0); 119 | 120 | // good 121 | marker.myPlugin('bla', { 122 | optionOne: 'foo', 123 | optionThree: 5 124 | }); 125 | ``` 126 | 127 | And most importantly, keep it simple. Leaflet is all about *simplicity*. 128 | -------------------------------------------------------------------------------- /bower_components/leaflet/README.md: -------------------------------------------------------------------------------- 1 | Leaflet 2 | 3 | Leaflet is an open source JavaScript library for **mobile-friendly interactive maps**. 4 | It is developed by [Vladimir Agafonkin][] of [MapBox][] with a team of dedicated [contributors][]. 5 | Weighing just about 30 KB of gzipped JS code, it has all the [features][] most developers ever need for online maps. 6 | 7 | Leaflet is designed with *simplicity*, *performance* and *usability* in mind. 8 | It works efficiently across all major desktop and mobile platforms out of the box, 9 | taking advantage of HTML5 and CSS3 on modern browsers while being accessible on older ones too. 10 | It can be extended with a huge amount of [plugins][], 11 | has a beautiful, easy to use and [well-documented][] API 12 | and a simple, readable [source code][] that is a joy to [contribute][] to. 13 | 14 | For more info, docs and tutorials, check out the [official website][].
15 | For **Leaflet downloads** (including the built master version), check out the [download page][]. 16 | 17 | We're happy to meet new contributors. 18 | If you want to **get involved** with Leaflet development, check out the [contribution guide][contribute]. 19 | Let's make the best mapping library that will ever exist, 20 | and push the limits of what's possible with online maps! 21 | 22 | [![Build Status](https://travis-ci.org/Leaflet/Leaflet.png?branch=master)](https://travis-ci.org/Leaflet/Leaflet) 23 | 24 | [Vladimir Agafonkin]: http://agafonkin.com/en 25 | [contributors]: https://github.com/Leaflet/Leaflet/graphs/contributors 26 | [features]: http://leafletjs.com/features.html 27 | [plugins]: http://leafletjs.com/plugins.html 28 | [well-documented]: http://leafletjs.com/reference.html "Leaflet API reference" 29 | [source code]: https://github.com/Leaflet/Leaflet "Leaflet GitHub repository" 30 | [hosted on GitHub]: http://github.com/Leaflet/Leaflet 31 | [contribute]: https://github.com/Leaflet/Leaflet/blob/master/CONTRIBUTING.md "A guide to contributing to Leaflet" 32 | [official website]: http://leafletjs.com 33 | [download page]: http://leafletjs.com/download.html 34 | [MapBox]: https://mapbox.com 35 | -------------------------------------------------------------------------------- /bower_components/leaflet/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet", 3 | "version": "0.7.3", 4 | "description": "JavaScript library for mobile-friendly interactive maps", 5 | "main": [ 6 | "dist/leaflet.js", 7 | "dist/leaflet.css", 8 | "dist/leaflet-src.js", 9 | "dist/images/layers-2x.png", 10 | "dist/images/layers.png", 11 | "dist/images/marker-icon-2x.png", 12 | "dist/images/marker-icon.png", 13 | "dist/images/marker-shadow.png" 14 | ], 15 | "ignore": [ 16 | ".*", 17 | "CHANGELOG.json", 18 | "FAQ.md", 19 | "debug", 20 | "spec", 21 | "src", 22 | "build" 23 | ] 24 | } -------------------------------------------------------------------------------- /bower_components/leaflet/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet", 3 | "version": "0.7.3", 4 | "description": "JavaScript library for mobile-friendly interactive maps", 5 | "scripts": [ 6 | "dist/leaflet.js", 7 | "dist/leaflet-src.js" 8 | ], 9 | "images": [ 10 | "dist/images/layers-2x.png", 11 | "dist/images/layers.png", 12 | "dist/images/marker-icon-2x.png", 13 | "dist/images/marker-icon.png", 14 | "dist/images/marker-shadow.png" 15 | ], 16 | "styles": [ 17 | "dist/leaflet.css" 18 | ], 19 | "main": "dist/leaflet-src.js" 20 | } -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet/dist/images/layers-2x.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet/dist/images/layers.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet/dist/images/marker-icon-2x.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet/dist/images/marker-icon.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/domoritz/vbb-coverage/50da104f1d754c2ff668b69da81f31090ff43dce/bower_components/leaflet/dist/images/marker-shadow.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/leaflet.css: -------------------------------------------------------------------------------- 1 | /* required styles */ 2 | 3 | .leaflet-map-pane, 4 | .leaflet-tile, 5 | .leaflet-marker-icon, 6 | .leaflet-marker-shadow, 7 | .leaflet-tile-pane, 8 | .leaflet-tile-container, 9 | .leaflet-overlay-pane, 10 | .leaflet-shadow-pane, 11 | .leaflet-marker-pane, 12 | .leaflet-popup-pane, 13 | .leaflet-overlay-pane svg, 14 | .leaflet-zoom-box, 15 | .leaflet-image-layer, 16 | .leaflet-layer { 17 | position: absolute; 18 | left: 0; 19 | top: 0; 20 | } 21 | .leaflet-container { 22 | overflow: hidden; 23 | -ms-touch-action: none; 24 | } 25 | .leaflet-tile, 26 | .leaflet-marker-icon, 27 | .leaflet-marker-shadow { 28 | -webkit-user-select: none; 29 | -moz-user-select: none; 30 | user-select: none; 31 | -webkit-user-drag: none; 32 | } 33 | .leaflet-marker-icon, 34 | .leaflet-marker-shadow { 35 | display: block; 36 | } 37 | /* map is broken in FF if you have max-width: 100% on tiles */ 38 | .leaflet-container img { 39 | max-width: none !important; 40 | } 41 | /* stupid Android 2 doesn't understand "max-width: none" properly */ 42 | .leaflet-container img.leaflet-image-layer { 43 | max-width: 15000px !important; 44 | } 45 | .leaflet-tile { 46 | filter: inherit; 47 | visibility: hidden; 48 | } 49 | .leaflet-tile-loaded { 50 | visibility: inherit; 51 | } 52 | .leaflet-zoom-box { 53 | width: 0; 54 | height: 0; 55 | } 56 | /* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ 57 | .leaflet-overlay-pane svg { 58 | -moz-user-select: none; 59 | } 60 | 61 | .leaflet-tile-pane { z-index: 2; } 62 | .leaflet-objects-pane { z-index: 3; } 63 | .leaflet-overlay-pane { z-index: 4; } 64 | .leaflet-shadow-pane { z-index: 5; } 65 | .leaflet-marker-pane { z-index: 6; } 66 | .leaflet-popup-pane { z-index: 7; } 67 | 68 | .leaflet-vml-shape { 69 | width: 1px; 70 | height: 1px; 71 | } 72 | .lvml { 73 | behavior: url(#default#VML); 74 | display: inline-block; 75 | position: absolute; 76 | } 77 | 78 | 79 | /* control positioning */ 80 | 81 | .leaflet-control { 82 | position: relative; 83 | z-index: 7; 84 | pointer-events: auto; 85 | } 86 | .leaflet-top, 87 | .leaflet-bottom { 88 | position: absolute; 89 | z-index: 1000; 90 | pointer-events: none; 91 | } 92 | .leaflet-top { 93 | top: 0; 94 | } 95 | .leaflet-right { 96 | right: 0; 97 | } 98 | .leaflet-bottom { 99 | bottom: 0; 100 | } 101 | .leaflet-left { 102 | left: 0; 103 | } 104 | .leaflet-control { 105 | float: left; 106 | clear: both; 107 | } 108 | .leaflet-right .leaflet-control { 109 | float: right; 110 | } 111 | .leaflet-top .leaflet-control { 112 | margin-top: 10px; 113 | } 114 | .leaflet-bottom .leaflet-control { 115 | margin-bottom: 10px; 116 | } 117 | .leaflet-left .leaflet-control { 118 | margin-left: 10px; 119 | } 120 | .leaflet-right .leaflet-control { 121 | margin-right: 10px; 122 | } 123 | 124 | 125 | /* zoom and fade animations */ 126 | 127 | .leaflet-fade-anim .leaflet-tile, 128 | .leaflet-fade-anim .leaflet-popup { 129 | opacity: 0; 130 | -webkit-transition: opacity 0.2s linear; 131 | -moz-transition: opacity 0.2s linear; 132 | -o-transition: opacity 0.2s linear; 133 | transition: opacity 0.2s linear; 134 | } 135 | .leaflet-fade-anim .leaflet-tile-loaded, 136 | .leaflet-fade-anim .leaflet-map-pane .leaflet-popup { 137 | opacity: 1; 138 | } 139 | 140 | .leaflet-zoom-anim .leaflet-zoom-animated { 141 | -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); 142 | -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); 143 | -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); 144 | transition: transform 0.25s cubic-bezier(0,0,0.25,1); 145 | } 146 | .leaflet-zoom-anim .leaflet-tile, 147 | .leaflet-pan-anim .leaflet-tile, 148 | .leaflet-touching .leaflet-zoom-animated { 149 | -webkit-transition: none; 150 | -moz-transition: none; 151 | -o-transition: none; 152 | transition: none; 153 | } 154 | 155 | .leaflet-zoom-anim .leaflet-zoom-hide { 156 | visibility: hidden; 157 | } 158 | 159 | 160 | /* cursors */ 161 | 162 | .leaflet-clickable { 163 | cursor: pointer; 164 | } 165 | .leaflet-container { 166 | cursor: -webkit-grab; 167 | cursor: -moz-grab; 168 | } 169 | .leaflet-popup-pane, 170 | .leaflet-control { 171 | cursor: auto; 172 | } 173 | .leaflet-dragging .leaflet-container, 174 | .leaflet-dragging .leaflet-clickable { 175 | cursor: move; 176 | cursor: -webkit-grabbing; 177 | cursor: -moz-grabbing; 178 | } 179 | 180 | 181 | /* visual tweaks */ 182 | 183 | .leaflet-container { 184 | background: #ddd; 185 | outline: 0; 186 | } 187 | .leaflet-container a { 188 | color: #0078A8; 189 | } 190 | .leaflet-container a.leaflet-active { 191 | outline: 2px solid orange; 192 | } 193 | .leaflet-zoom-box { 194 | border: 2px dotted #38f; 195 | background: rgba(255,255,255,0.5); 196 | } 197 | 198 | 199 | /* general typography */ 200 | .leaflet-container { 201 | font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; 202 | } 203 | 204 | 205 | /* general toolbar styles */ 206 | 207 | .leaflet-bar { 208 | box-shadow: 0 1px 5px rgba(0,0,0,0.65); 209 | border-radius: 4px; 210 | } 211 | .leaflet-bar a, 212 | .leaflet-bar a:hover { 213 | background-color: #fff; 214 | border-bottom: 1px solid #ccc; 215 | width: 26px; 216 | height: 26px; 217 | line-height: 26px; 218 | display: block; 219 | text-align: center; 220 | text-decoration: none; 221 | color: black; 222 | } 223 | .leaflet-bar a, 224 | .leaflet-control-layers-toggle { 225 | background-position: 50% 50%; 226 | background-repeat: no-repeat; 227 | display: block; 228 | } 229 | .leaflet-bar a:hover { 230 | background-color: #f4f4f4; 231 | } 232 | .leaflet-bar a:first-child { 233 | border-top-left-radius: 4px; 234 | border-top-right-radius: 4px; 235 | } 236 | .leaflet-bar a:last-child { 237 | border-bottom-left-radius: 4px; 238 | border-bottom-right-radius: 4px; 239 | border-bottom: none; 240 | } 241 | .leaflet-bar a.leaflet-disabled { 242 | cursor: default; 243 | background-color: #f4f4f4; 244 | color: #bbb; 245 | } 246 | 247 | .leaflet-touch .leaflet-bar a { 248 | width: 30px; 249 | height: 30px; 250 | line-height: 30px; 251 | } 252 | 253 | 254 | /* zoom control */ 255 | 256 | .leaflet-control-zoom-in, 257 | .leaflet-control-zoom-out { 258 | font: bold 18px 'Lucida Console', Monaco, monospace; 259 | text-indent: 1px; 260 | } 261 | .leaflet-control-zoom-out { 262 | font-size: 20px; 263 | } 264 | 265 | .leaflet-touch .leaflet-control-zoom-in { 266 | font-size: 22px; 267 | } 268 | .leaflet-touch .leaflet-control-zoom-out { 269 | font-size: 24px; 270 | } 271 | 272 | 273 | /* layers control */ 274 | 275 | .leaflet-control-layers { 276 | box-shadow: 0 1px 5px rgba(0,0,0,0.4); 277 | background: #fff; 278 | border-radius: 5px; 279 | } 280 | .leaflet-control-layers-toggle { 281 | background-image: url(images/layers.png); 282 | width: 36px; 283 | height: 36px; 284 | } 285 | .leaflet-retina .leaflet-control-layers-toggle { 286 | background-image: url(images/layers-2x.png); 287 | background-size: 26px 26px; 288 | } 289 | .leaflet-touch .leaflet-control-layers-toggle { 290 | width: 44px; 291 | height: 44px; 292 | } 293 | .leaflet-control-layers .leaflet-control-layers-list, 294 | .leaflet-control-layers-expanded .leaflet-control-layers-toggle { 295 | display: none; 296 | } 297 | .leaflet-control-layers-expanded .leaflet-control-layers-list { 298 | display: block; 299 | position: relative; 300 | } 301 | .leaflet-control-layers-expanded { 302 | padding: 6px 10px 6px 6px; 303 | color: #333; 304 | background: #fff; 305 | } 306 | .leaflet-control-layers-selector { 307 | margin-top: 2px; 308 | position: relative; 309 | top: 1px; 310 | } 311 | .leaflet-control-layers label { 312 | display: block; 313 | } 314 | .leaflet-control-layers-separator { 315 | height: 0; 316 | border-top: 1px solid #ddd; 317 | margin: 5px -10px 5px -6px; 318 | } 319 | 320 | 321 | /* attribution and scale controls */ 322 | 323 | .leaflet-container .leaflet-control-attribution { 324 | background: #fff; 325 | background: rgba(255, 255, 255, 0.7); 326 | margin: 0; 327 | } 328 | .leaflet-control-attribution, 329 | .leaflet-control-scale-line { 330 | padding: 0 5px; 331 | color: #333; 332 | } 333 | .leaflet-control-attribution a { 334 | text-decoration: none; 335 | } 336 | .leaflet-control-attribution a:hover { 337 | text-decoration: underline; 338 | } 339 | .leaflet-container .leaflet-control-attribution, 340 | .leaflet-container .leaflet-control-scale { 341 | font-size: 11px; 342 | } 343 | .leaflet-left .leaflet-control-scale { 344 | margin-left: 5px; 345 | } 346 | .leaflet-bottom .leaflet-control-scale { 347 | margin-bottom: 5px; 348 | } 349 | .leaflet-control-scale-line { 350 | border: 2px solid #777; 351 | border-top: none; 352 | line-height: 1.1; 353 | padding: 2px 5px 1px; 354 | font-size: 11px; 355 | white-space: nowrap; 356 | overflow: hidden; 357 | -moz-box-sizing: content-box; 358 | box-sizing: content-box; 359 | 360 | background: #fff; 361 | background: rgba(255, 255, 255, 0.5); 362 | } 363 | .leaflet-control-scale-line:not(:first-child) { 364 | border-top: 2px solid #777; 365 | border-bottom: none; 366 | margin-top: -2px; 367 | } 368 | .leaflet-control-scale-line:not(:first-child):not(:last-child) { 369 | border-bottom: 2px solid #777; 370 | } 371 | 372 | .leaflet-touch .leaflet-control-attribution, 373 | .leaflet-touch .leaflet-control-layers, 374 | .leaflet-touch .leaflet-bar { 375 | box-shadow: none; 376 | } 377 | .leaflet-touch .leaflet-control-layers, 378 | .leaflet-touch .leaflet-bar { 379 | border: 2px solid rgba(0,0,0,0.2); 380 | background-clip: padding-box; 381 | } 382 | 383 | 384 | /* popup */ 385 | 386 | .leaflet-popup { 387 | position: absolute; 388 | text-align: center; 389 | } 390 | .leaflet-popup-content-wrapper { 391 | padding: 1px; 392 | text-align: left; 393 | border-radius: 12px; 394 | } 395 | .leaflet-popup-content { 396 | margin: 13px 19px; 397 | line-height: 1.4; 398 | } 399 | .leaflet-popup-content p { 400 | margin: 18px 0; 401 | } 402 | .leaflet-popup-tip-container { 403 | margin: 0 auto; 404 | width: 40px; 405 | height: 20px; 406 | position: relative; 407 | overflow: hidden; 408 | } 409 | .leaflet-popup-tip { 410 | width: 17px; 411 | height: 17px; 412 | padding: 1px; 413 | 414 | margin: -10px auto 0; 415 | 416 | -webkit-transform: rotate(45deg); 417 | -moz-transform: rotate(45deg); 418 | -ms-transform: rotate(45deg); 419 | -o-transform: rotate(45deg); 420 | transform: rotate(45deg); 421 | } 422 | .leaflet-popup-content-wrapper, 423 | .leaflet-popup-tip { 424 | background: white; 425 | 426 | box-shadow: 0 3px 14px rgba(0,0,0,0.4); 427 | } 428 | .leaflet-container a.leaflet-popup-close-button { 429 | position: absolute; 430 | top: 0; 431 | right: 0; 432 | padding: 4px 4px 0 0; 433 | text-align: center; 434 | width: 18px; 435 | height: 14px; 436 | font: 16px/14px Tahoma, Verdana, sans-serif; 437 | color: #c3c3c3; 438 | text-decoration: none; 439 | font-weight: bold; 440 | background: transparent; 441 | } 442 | .leaflet-container a.leaflet-popup-close-button:hover { 443 | color: #999; 444 | } 445 | .leaflet-popup-scrolled { 446 | overflow: auto; 447 | border-bottom: 1px solid #ddd; 448 | border-top: 1px solid #ddd; 449 | } 450 | 451 | .leaflet-oldie .leaflet-popup-content-wrapper { 452 | zoom: 1; 453 | } 454 | .leaflet-oldie .leaflet-popup-tip { 455 | width: 24px; 456 | margin: 0 auto; 457 | 458 | -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; 459 | filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); 460 | } 461 | .leaflet-oldie .leaflet-popup-tip-container { 462 | margin-top: -1px; 463 | } 464 | 465 | .leaflet-oldie .leaflet-control-zoom, 466 | .leaflet-oldie .leaflet-control-layers, 467 | .leaflet-oldie .leaflet-popup-content-wrapper, 468 | .leaflet-oldie .leaflet-popup-tip { 469 | border: 1px solid #999; 470 | } 471 | 472 | 473 | /* div icon */ 474 | 475 | .leaflet-div-icon { 476 | background: #fff; 477 | border: 1px solid #666; 478 | } 479 | -------------------------------------------------------------------------------- /bower_components/leaflet/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet", 3 | "version": "0.7.3", 4 | "description": "JavaScript library for mobile-friendly interactive maps", 5 | "devDependencies": { 6 | "jake": "~0.7.4", 7 | "jshint": "~2.3.0", 8 | "uglify-js": "~2.4.3", 9 | "mocha": "~1.14.0", 10 | "happen": "~0.1.3", 11 | "karma": "~0.12.0", 12 | "karma-mocha": "~0.1.1", 13 | "karma-coverage": "~0.2.0", 14 | "karma-phantomjs-launcher": "^0.1.2", 15 | "karma-chrome-launcher": "^0.1.2", 16 | "tin": "^0.4.0", 17 | "copyfiles": "0.0.1" 18 | }, 19 | "main": "dist/leaflet-src.js", 20 | "scripts": { 21 | "test": "jake test", 22 | "prepublish": "jake build", 23 | "publish": "./build/publish.sh" 24 | }, 25 | "repository": { 26 | "type": "git", 27 | "url": "git://github.com/Leaflet/Leaflet.git" 28 | }, 29 | "keywords": [ 30 | "gis", 31 | "map" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /data/convert.py: -------------------------------------------------------------------------------- 1 | import csv 2 | with open('stops.txt', 'rb') as csvfile: 3 | content = [] 4 | reader = csv.reader(csvfile) 5 | for row in reader: 6 | content.append('[{0},{1}]'.format(row[4], row[5])) 7 | print '[' + ','.join(content) + ']' 8 | -------------------------------------------------------------------------------- /data/source.js: -------------------------------------------------------------------------------- 1 | var sources = [ 2 | { 3 | 'text': "Europe", 4 | 'children': [ 5 | { 6 | 'text': 'Germany', 7 | 'children': [ 8 | { 9 | 'id': 'VBB', 10 | 'text': 'Verkehrsverbund Berlin Brandenburg' 11 | } 12 | ] 13 | } 14 | ] 15 | } 16 | ]; -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | VBB coverage visualization 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |
24 | Radius covered by a station: 25 | 26 | meters 27 |
28 |
29 |
30 |
31 |
32 | Fork me on GitHub 33 | 34 | 35 | -------------------------------------------------------------------------------- /main.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | font-family: sans-serif; 6 | } 7 | 8 | #map { 9 | top: 0; 10 | left: 0; 11 | position: absolute; 12 | height: 100%; 13 | width: 100%; 14 | } 15 | 16 | .transport-selection { 17 | position: fixed; 18 | left: 150px; 19 | top: 10px; 20 | z-index: 1000; 21 | width: 600px; 22 | } 23 | 24 | .select2-container { 25 | min-width: 400px; 26 | } 27 | 28 | .overlay { 29 | padding: 7px; 30 | color: #333; 31 | background-color: #fff; 32 | background-color: rgba(255, 255, 255, 0.6); 33 | z-index: 10; 34 | position: fixed; 35 | top: 10px; 36 | left: 60px; 37 | } 38 | 39 | .overlay input { 40 | padding: 2px; 41 | } -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | //============ 3 | // Base Layers 4 | 5 | var osm = L.tileLayer('http://{s}.tile2.opencyclemap.org/transport/{z}/{x}/{y}.png', { 6 | attribution: '© OpenStreetMap contributors,' + 7 | 'tiles from OpenCycleMap' 8 | }); 9 | 10 | map = new L.Map('map', { 11 | center: new L.LatLng(52.51538, 13.40997), 12 | zoom: 8, 13 | layers: [osm] 14 | }); 15 | 16 | L.control.scale().addTo(map); 17 | L.control.locate().addTo(map); 18 | 19 | //================ 20 | // Set up overlays 21 | 22 | var initRadius = 800; 23 | $('input.range').attr('value', initRadius); 24 | 25 | var coverageLayer = new L.TileLayer.MaskCanvas({'opacity': 0.5, radius: initRadius, useAbsoluteRadius: true, 'attribution': 'Get the data at daten.berlin.de. Code on Github'}); 26 | 27 | var loadOverlay = function(id) { 28 | var url = 'data/' + id + '.json'; 29 | $.getJSON(url).success(function(data) { 30 | coverageLayer.setData(data); 31 | //L.rectangle(coverageLayer.bounds, {color: "#ff7800", weight: 1}).addTo(map); 32 | map.fitBounds(coverageLayer.bounds); 33 | map.addLayer(coverageLayer); 34 | }).error(function(err) { 35 | alert('An error occurred when loading the JSON', err); 36 | }); 37 | }; 38 | 39 | loadOverlay('VBB'); 40 | 41 | $('input.range').change(function() { 42 | var value = $(this).val(); 43 | coverageLayer.setRadius(value); 44 | }); 45 | }); --------------------------------------------------------------------------------