├── README.md ├── bower_components ├── concavehull │ ├── .bower.json │ ├── Gruntfile.js │ ├── README.md │ ├── bower.json │ ├── dist │ │ ├── concavehull.js │ │ └── concavehull.min.js │ ├── example │ │ └── commonjs-example.js │ ├── module │ │ └── ConcaveHull.js │ ├── package.json │ └── releases │ │ ├── 0.1.0.zip │ │ ├── 0.1.1.zip │ │ ├── 0.1.2.zip │ │ ├── 0.1.3.zip │ │ ├── 0.1.4.zip │ │ ├── 0.1.5.zip │ │ └── master.zip ├── d3 │ ├── .bower.json │ ├── .spmignore │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── composer.json │ ├── d3.js │ └── d3.min.js ├── evispa-timo-jsclipper │ ├── .bower.json │ ├── README.md │ ├── README.txt │ ├── bower.json │ ├── clipper.js │ └── clipper_unminified.js ├── graham_scan │ ├── .bower.json │ ├── bower.json │ ├── graham_scan.min.js │ ├── license.txt │ └── src │ │ └── graham_scan.js ├── leaflet.freedraw │ ├── .bower.json │ ├── EXCEPTIONS.md │ ├── Gruntfile.js │ ├── LICENSE │ ├── Procfile │ ├── README.md │ ├── bower.json │ ├── components │ │ ├── FreeDraw.js │ │ ├── Hull.js │ │ ├── Memory.js │ │ ├── Options.js │ │ └── Utilities.js │ ├── dist │ │ ├── leaflet.freedraw-src.js │ │ └── leaflet.freedraw.js │ ├── example │ │ ├── css │ │ │ ├── Default.css │ │ │ ├── Map.css │ │ │ └── Planes.css │ │ ├── images │ │ │ ├── airplane47.png │ │ │ ├── airplane8.png │ │ │ ├── rocket20.png │ │ │ └── small116.png │ │ ├── index.html │ │ ├── js │ │ │ └── Example.js │ │ └── server │ │ │ └── default.js │ ├── karma.conf.js │ ├── package.json │ └── releases │ │ ├── 0.1.0.zip │ │ ├── 0.1.1.zip │ │ ├── 0.1.10.zip │ │ ├── 0.1.11.zip │ │ ├── 0.1.12.zip │ │ ├── 0.1.13.zip │ │ ├── 0.1.14.zip │ │ ├── 0.1.15.zip │ │ ├── 0.1.16.zip │ │ ├── 0.1.2.zip │ │ ├── 0.1.3.zip │ │ ├── 0.1.4.zip │ │ ├── 0.1.5.zip │ │ ├── 0.1.6.zip │ │ ├── 0.1.7.zip │ │ ├── 0.1.8.zip │ │ ├── 0.1.9.zip │ │ ├── 0.10.0.zip │ │ ├── 0.2.0.zip │ │ ├── 0.2.1.zip │ │ ├── 0.2.10.zip │ │ ├── 0.2.2.zip │ │ ├── 0.2.3.zip │ │ ├── 0.2.4.zip │ │ ├── 0.2.5.zip │ │ ├── 0.2.6.zip │ │ ├── 0.2.7.zip │ │ ├── 0.2.8.zip │ │ ├── 0.2.9.zip │ │ ├── 0.3.0.zip │ │ ├── 0.3.1.zip │ │ ├── 0.3.2.zip │ │ ├── 0.3.3.zip │ │ ├── 0.3.4.zip │ │ ├── 0.3.5.zip │ │ ├── 0.3.6.zip │ │ ├── 0.3.7.zip │ │ ├── 0.3.8.zip │ │ ├── 0.3.9.zip │ │ ├── 0.4.0.zip │ │ ├── 0.4.1.zip │ │ ├── 0.4.2.zip │ │ ├── 0.4.3.zip │ │ ├── 0.4.4.zip │ │ ├── 0.4.5.zip │ │ ├── 0.4.6.zip │ │ ├── 0.4.7.zip │ │ ├── 0.4.8.zip │ │ ├── 0.4.9.zip │ │ ├── 0.5.0.zip │ │ ├── 0.5.1.zip │ │ ├── 0.5.10.zip │ │ ├── 0.5.11.zip │ │ ├── 0.5.12.zip │ │ ├── 0.5.13.zip │ │ ├── 0.5.3.zip │ │ ├── 0.5.5.zip │ │ ├── 0.5.6.zip │ │ ├── 0.5.7.zip │ │ ├── 0.5.8.zip │ │ ├── 0.5.9.zip │ │ ├── 0.6.0.zip │ │ ├── 0.6.1.zip │ │ ├── 0.6.10.zip │ │ ├── 0.6.2.zip │ │ ├── 0.6.3.zip │ │ ├── 0.6.4.zip │ │ ├── 0.6.5.zip │ │ ├── 0.6.6.zip │ │ ├── 0.6.7.zip │ │ ├── 0.6.8.zip │ │ ├── 0.6.9.zip │ │ ├── 0.7.0.zip │ │ ├── 0.7.1.zip │ │ ├── 0.7.2.zip │ │ ├── 0.7.3.zip │ │ ├── 0.7.4.zip │ │ ├── 0.7.5.zip │ │ ├── 0.7.6.zip │ │ ├── 0.7.7.zip │ │ ├── 0.7.8.zip │ │ ├── 0.7.9.zip │ │ ├── 0.8.0.zip │ │ ├── 0.8.1.zip │ │ ├── 0.8.2.zip │ │ ├── 0.8.3.zip │ │ ├── 0.8.4.zip │ │ ├── 0.8.5.zip │ │ ├── 0.8.6.zip │ │ ├── 0.8.7.zip │ │ ├── 0.8.8.zip │ │ ├── 0.8.9.zip │ │ ├── 0.9.0.zip │ │ ├── 0.9.10.zip │ │ ├── 0.9.2.zip │ │ ├── 0.9.3.zip │ │ ├── 0.9.4.zip │ │ ├── 0.9.5.zip │ │ ├── 0.9.6.zip │ │ ├── 0.9.7.zip │ │ ├── 0.9.8.zip │ │ ├── 0.9.9.zip │ │ ├── 1.0.0.zip │ │ ├── 1.0.2.zip │ │ ├── 1.0.3.zip │ │ ├── 1.0.4.zip │ │ ├── 1.0.5.zip │ │ ├── 1.0.6.zip │ │ ├── 1.0.7.zip │ │ ├── 1.0.8.zip │ │ ├── 1.0.9.zip │ │ ├── 1.1.0.zip │ │ ├── 1.1.10.zip │ │ ├── 1.1.11.zip │ │ ├── 1.1.13.zip │ │ ├── 1.1.14.zip │ │ ├── 1.1.2.zip │ │ ├── 1.1.3.zip │ │ ├── 1.1.4.zip │ │ ├── 1.1.5.zip │ │ ├── 1.1.6.zip │ │ ├── 1.1.7.zip │ │ ├── 1.1.8.zip │ │ └── 1.1.9.zip └── 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 ├── css └── hoodstyles.css ├── img ├── GitHub-Mark-32px.png ├── bird_black_32_0.png ├── glyphicons-halflings-white.png ├── glyphicons-halflings.png ├── heart.svg ├── instructions1.gif ├── instructions2.gif ├── instructions2_point.gif ├── instructions2_poly.gif ├── instructions3.gif ├── instructions3_point.gif ├── instructions3_poly.gif └── pencil.png ├── index.html ├── js ├── googleanalytics.js ├── hoodscript.js ├── jquery.slimscroll.min.js ├── names.js └── typeahead.min.js ├── libs ├── Leaflet.Editable.js ├── Leaflet.draw │ ├── images │ │ ├── spritesheet-2x.png │ │ └── spritesheet.png │ ├── leaflet.draw.css │ ├── leaflet.draw.ie.css │ └── leaflet.draw.js └── bootstrap │ ├── config.json │ ├── css │ ├── bootstrap.css │ └── bootstrap.min.css │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff │ └── js │ ├── bootstrap.js │ └── bootstrap.min.js └── php ├── .htaccess ├── add.php ├── cartodbProxy.php ├── flag.php └── heart.php /README.md: -------------------------------------------------------------------------------- 1 | #neighborhoods 2 | 3 | http://bostonography.com/hoods 4 | 5 | This is a Boston-flavored version of https://github.com/enam/neighborhoods. It's set up the same way as in the instructions below. Apart from some hard-coded titles and text for Boston, a key difference between this project and the original is in its drawing tools. This project uses a combination of [Leaflet.editable](https://github.com/yohanboniface/Leaflet.Editable) and a messy hacked-up version of [Leaflet.FreeDraw](https://github.com/Wildhoney/Leaflet.FreeDraw). 6 | 7 | See more about this particular project at http://bostonography.com/2015/map-your-neighborhood-again/ 8 | 9 | **Please read the original README below, and then note one addition in my implementation:** 10 | This version stores point locations in a separate table. In CartoDB, duplicate your neighborhoods table and give it the same name but with a `_point` extension. 11 | 12 | * * * 13 | *slightly modified original README from https://github.com/enam/neighborhoods below* 14 | 15 | Crowd sourcing neighborhood boundaries, stories, and descriptions. Making pretty maps. 16 | 17 | This project is designed to collect boundaries and descriptions of neighborhoods and the like, and immediatley make them available for cartographic presentation and exploration. 18 | 19 | ###Steps to Configure 20 | 21 | 1. Create a [CartoDB](http://cartodb.com/) account. 22 | -add a table. ~~ easiest ~~ One way would be to dowload the shapefile from the [Live Site](http://pnwmaps.com/neighborhoods), add it to your cartoDB account, and empty it. That way you would get the field names and data types rolled right over. However a couple items need updating. The "description" field gets imported as "descriptio" with no "n". Needs updating in the cartodb table. Also, the "flag" field needs data type changed back to boolean. Not really sure why it doesn't import correctly...but there it is. 23 | 24 | 2. Change the configuration settings in the top bit of [hoodscript.js](https://github.com/enam/neighborhoods/blob/master/js/hoodscript.js). 25 | 26 | 3. Update the API key and such in [cartodbProxy.php](https://github.com/enam/neighborhoods/blob/master/php/cartodbProxy.php). AND move this file somewhere above your web root. 27 | 28 | 4. Update the include path in [add.php](https://github.com/enam/neighborhoods/blob/master/php/add.php), [flag.php](https://github.com/enam/neighborhoods/blob/master/php/flag.php), and [heart.php](https://github.com/enam/neighborhoods/blob/master/php/heart.php) for wherever you put cartodbProxy.php on your server. 29 | 30 | 5. Change [googleanalytics.js](https://github.com/enam/neighborhoods/blob/master/js/googleanalytics.js) to use your analytics code if you want, or remove the script that includes it from line 215 of [index.html](https://github.com/enam/neighborhoods/blob/master/index.html). 31 | 32 | 6. Grab a beer. Don't know if you have a brewery nearby? Check [here](http://nickmartinelli.com) :) 33 | 34 | ###Thanks! 35 | ###These are the things in the toolbox. 36 | 1. [CartoDB](http://cartodb.com/) 37 | 2. [Leaflet](http://leafletjs.com/) 38 | 3. [Bootstrap](http://getbootstrap.com/javascript/) 39 | 4. [Leaflet Draw!](https://github.com/Leaflet/Leaflet.draw) 40 | 5. [Slim Scroll](http://rocha.la/jQuery-slimScroll/) 41 | 6. Whole project was inspired by [Bostonography](http://bostonography.com/2012/crowdsourced-neighborhood-boundaries-part-one-consensus/). 42 | 43 | ###author 44 | * [Nick Martinelli](https://twitter.com/nichom) 45 | Please contact me if you do make use, or improve the code, because there is a lot that could use improving, and I would love any tips! I'd also really enjoy seeing what people do. 46 | -------------------------------------------------------------------------------- /bower_components/concavehull/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "concavehull", 3 | "version": "0.1.5", 4 | "homepage": "https://github.com/Wildhoney/ConcaveHull", 5 | "authors": [ 6 | "Adam Timberlake " 7 | ], 8 | "description": "Workable refactoring into a module of a concave hull algorithm.", 9 | "main": "dist/concavehull.min.js", 10 | "license": "MIT", 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "_release": "0.1.5", 19 | "_resolution": { 20 | "type": "version", 21 | "tag": "v0.1.5", 22 | "commit": "be82b11b13e252e457cf8b9bcbac5a2d1ff59a46" 23 | }, 24 | "_source": "git://github.com/Wildhoney/ConcaveHull.git", 25 | "_target": "~0.1.2", 26 | "_originalSource": "concavehull" 27 | } -------------------------------------------------------------------------------- /bower_components/concavehull/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | 5 | /** 6 | * @property pkg 7 | * @type {Object} 8 | */ 9 | pkg: grunt.file.readJSON('package.json'), 10 | 11 | /** 12 | * @property jshint 13 | * @type {Object} 14 | */ 15 | jshint: { 16 | all: 'module/*.js', 17 | options: { 18 | jshintrc: '.jshintrc' 19 | } 20 | }, 21 | 22 | /** 23 | * @property uglify 24 | * @type {Object} 25 | */ 26 | uglify: { 27 | options: { 28 | banner: '/*! <%= pkg.name %> by <%= pkg.author %> created on <%= grunt.template.today("yyyy-mm-dd") %> */\n' 29 | }, 30 | build: { 31 | src: ['dist/<%= pkg.name %>.js'], 32 | dest: 'dist/<%= pkg.name %>.min.js' 33 | } 34 | }, 35 | 36 | /** 37 | * @property compress 38 | * @type {Object} 39 | */ 40 | compress: { 41 | main: { 42 | options: { 43 | archive: 'releases/<%= pkg.version %>.zip' 44 | }, 45 | files: [ 46 | { flatten: true, src: 'dist/<%= pkg.name %>.js', dest: './', filter: 'isFile' } 47 | ] 48 | } 49 | }, 50 | 51 | /** 52 | * @property concat 53 | * @type {Object} 54 | */ 55 | concat: { 56 | options: { 57 | separator: '\n\n' 58 | }, 59 | dist: { 60 | src: ['module/*.js'], 61 | dest: 'dist/<%= pkg.name %>.js' 62 | } 63 | }, 64 | 65 | /** 66 | * @property copy 67 | * @type {Object} 68 | */ 69 | copy: { 70 | // vendor: { 71 | // expand: true, 72 | // flatten: true, 73 | // src: ['module/*'], 74 | // dest: 'example/js/vendor/ng-video', 75 | // filter: 'isFile' 76 | // }, 77 | release: { 78 | src: 'releases/<%= pkg.version %>.zip', 79 | dest: 'releases/master.zip' 80 | } 81 | 82 | } 83 | 84 | }); 85 | 86 | grunt.loadNpmTasks('grunt-contrib-jasmine'); 87 | grunt.loadNpmTasks('grunt-contrib-uglify'); 88 | grunt.loadNpmTasks('grunt-contrib-jshint'); 89 | grunt.loadNpmTasks('grunt-contrib-compress'); 90 | grunt.loadNpmTasks('grunt-contrib-concat'); 91 | grunt.loadNpmTasks('grunt-contrib-copy'); 92 | 93 | grunt.registerTask('build', ['concat', 'uglify', 'copy', 'compress']); 94 | grunt.registerTask('test', ['jshint']); 95 | grunt.registerTask('default', ['jshint', 'copy', 'concat', 'uglify', 'compress']); 96 | 97 | }; -------------------------------------------------------------------------------- /bower_components/concavehull/README.md: -------------------------------------------------------------------------------- 1 | ConcaveHull 2 | =================== 3 | 4 | ![Travis](http://img.shields.io/travis/Wildhoney/ConcaveHull.svg?style=flat) 5 |   6 | ![npm](http://img.shields.io/npm/v/concavehull.svg?style=flat) 7 |   8 | ![License MIT](http://img.shields.io/badge/License-MIT-lightgrey.svg?style=flat) 9 | 10 | * **Heroku**: [http://freedraw.herokuapp.com/](http://freedraw.herokuapp.com/) — uses `ConcaveHull` by default; 11 | * **npm:** `npm install concavehull` 12 | * **Bower:** `bower install concavehull` 13 | 14 | --- 15 | 16 | Based on the [StackOverflow question](http://stackoverflow.com/questions/16407533/translating-concave-hull-algorithm-to-c-sharp) about the CSharp implementation of a [paper written by Adriano Moreira and Maribel Yasmina Santos](http://repositorium.sdum.uminho.pt/bitstream/1822/6429/1/ConcaveHull_ACM_MYS.pdf) from the University of Minho. 17 | 18 | Initially a prototype was [created by nredko](http://nredko.github.io/ConcaveHull) – and this implementation is a refactor to transform it into a fully working module. 19 | 20 | ## Getting Started 21 | 22 | Using `ConcaveHull` is terribly simple – all you have to do is pass an array of objects that conform to the `{ x: {Number}, y: {Number} }` format – in the case of [Leaflet.js](http://leafletjs.com/) this is just an array of `L.LatLng` objects. 23 | 24 | Once you have your array of latitudinal and longitudinal values, you can instantiate the object, and then invoke the `getLatLngs` method: 25 | 26 | ```javascript 27 | var latLngs = new ConcaveHull(latLngs).getLatLngs(); 28 | ``` 29 | 30 | You can manually specify the maximum length of edges in metres by passing it into the constructor as the second argument: 31 | 32 | ```javascript 33 | var edgeLength = 35, 34 | latLngs = new ConcaveHull(latLngs, edgeLength).getLatLngs(); 35 | ``` -------------------------------------------------------------------------------- /bower_components/concavehull/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "concavehull", 3 | "version": "0.1.5", 4 | "homepage": "https://github.com/Wildhoney/ConcaveHull", 5 | "authors": [ 6 | "Adam Timberlake " 7 | ], 8 | "description": "Workable refactoring into a module of a concave hull algorithm.", 9 | "main": "dist/concavehull.min.js", 10 | "license": "MIT", 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ] 18 | } -------------------------------------------------------------------------------- /bower_components/concavehull/dist/concavehull.js: -------------------------------------------------------------------------------- 1 | (function($math) { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module ConcaveHull 7 | * @author Adam Timberlake 8 | * @author Nikolay Redko 9 | * @link https://github.com/Wildhoney/ConcaveHull 10 | * @param latLngs {Object} 11 | * @param maxDistance {Number} 12 | * @constructor 13 | */ 14 | var ConcaveHull = function ConcaveHull(latLngs, maxDistance) { 15 | 16 | var result = this.convertLatLngs(latLngs); 17 | this.points = result.points; 18 | this.maxDistance = isFinite(maxDistance) ? maxDistance : (result.maxDistance + 1); 19 | 20 | }; 21 | 22 | /** 23 | * @property prototype 24 | * @type {Object} 25 | */ 26 | ConcaveHull.prototype = { 27 | 28 | /** 29 | * @property points 30 | * @type {Array} 31 | */ 32 | points: [], 33 | 34 | /** 35 | * @property maxDistance 36 | * @type {Number} 37 | */ 38 | maxDistance: 0, 39 | 40 | /** 41 | * @method convertLatLngs 42 | * @param latLngs {Array} 43 | * @return {Object} 44 | */ 45 | convertLatLngs: function convertLatLngs(latLngs) { 46 | 47 | var longestDistance = 0, 48 | convertedPoints = latLngs.map(function(latLng, $index) { 49 | 50 | // Transform the lat/long values into those the concave hull algorithm expects. 51 | latLng.x = latLng.lng; 52 | latLng.y = this.lat2y(latLng); 53 | 54 | if (latLngs[$index - 1]) { 55 | 56 | var distance = this.distanceTo(latLng, latLngs[$index - 1]); 57 | 58 | if (distance > longestDistance) { 59 | longestDistance = distance; 60 | } 61 | 62 | } 63 | 64 | return latLng; 65 | 66 | }.bind(this)); 67 | 68 | return { points: convertedPoints, maxDistance: longestDistance }; 69 | 70 | }, 71 | 72 | /** 73 | * @method distanceTo 74 | * @param firstLatLng {Object} 75 | * @param secondLatLng {Object} 76 | * @return {Number} 77 | */ 78 | distanceTo: function distanceTo(firstLatLng, secondLatLng) { 79 | 80 | var R = 6378137, 81 | d2r = $math.PI / 180, 82 | dLat = (secondLatLng.lat - firstLatLng.lat) * d2r, 83 | dLon = (secondLatLng.lng - firstLatLng.lng) * d2r, 84 | lat1 = firstLatLng.lat * d2r, 85 | lat2 = secondLatLng.lat * d2r, 86 | sin1 = $math.sin(dLat / 2), 87 | sin2 = $math.sin(dLon / 2); 88 | 89 | var a = sin1 * sin1 + sin2 * sin2 * $math.cos(lat1) * $math.cos(lat2); 90 | return R * 2 * $math.atan2($math.sqrt(a), $math.sqrt(1 - a)); 91 | 92 | }, 93 | 94 | /** 95 | * @method getLatLngs 96 | * @return {Object} 97 | */ 98 | getLatLngs: function getLatLngs() { 99 | 100 | if (this.length <= 3) { 101 | return this.points; 102 | } 103 | 104 | var byY = this.points.slice().sort(function sort(a, b) { 105 | return a.y - b.y; 106 | }); 107 | 108 | var hull = [], 109 | start = byY[0], 110 | current = start, 111 | previous = { x: current.x, y: current.y - 1 }; 112 | 113 | hull.push(start); 114 | 115 | var next, count = 0; 116 | 117 | /** 118 | * @method sortPoints 119 | * @type {Function} 120 | */ 121 | var sortPoints = function(a, b) { 122 | return this.getAngle(current, previous, b) - this.getAngle(current, previous, a); 123 | }.bind(this); 124 | 125 | while(true) { 126 | 127 | count++; 128 | 129 | var byAngle = this.points.slice().sort(sortPoints); 130 | 131 | for (var i = 0, l = byAngle.length; i < l; i++) { 132 | 133 | if (this.distanceTo(current, byAngle[i]) < this.maxDistance && !this.isIntersecting(hull, byAngle[i])) { 134 | next = byAngle[i]; 135 | break; 136 | } 137 | 138 | } 139 | 140 | if (!next) { 141 | 142 | // No polygon can be found. 143 | return this.points; 144 | 145 | } 146 | 147 | if (next === current) { 148 | 149 | // Concave hull algorithm has gone very wrong indeed. 150 | return this.points; 151 | 152 | } 153 | 154 | hull.push(next); 155 | 156 | if (next === start) { 157 | 158 | // Everything is okay! 159 | return hull; 160 | 161 | } 162 | 163 | previous = current; 164 | current = next; 165 | next = undefined; 166 | 167 | if (count > 1000) { 168 | 169 | // Concave hull algorithm has gone very wrong... again. 170 | return this.points; 171 | 172 | } 173 | 174 | } 175 | 176 | }, 177 | 178 | /** 179 | * @method isIntersecting 180 | * @param latLngs {Object} 181 | * @param otherLatLngs {Object} 182 | * @return {Boolean} 183 | */ 184 | isIntersecting: function isIntersecting(latLngs, otherLatLngs) { 185 | 186 | for (var i = 1, l = latLngs.length - 1; i < l; i++) { 187 | 188 | if (this.intersect(latLngs[i - 1], latLngs[i], latLngs[l], otherLatLngs)) { 189 | return true; 190 | } 191 | 192 | } 193 | 194 | return false; 195 | 196 | }, 197 | 198 | /** 199 | * @method intersect 200 | * @param p1 {Object} 201 | * @param p2 {Object} 202 | * @param q1 {Object} 203 | * @param q2 {Object} 204 | * @return {Boolean} 205 | */ 206 | intersect: function intersect(p1, p2, q1, q2) { 207 | 208 | if ((p1.x === q1.x && p1.y === q1.y || p2.x === q2.x && p2.y === q2.y) || 209 | (p1.x === q2.x && p1.y === q2.y || p2.x === q1.x && p2.y === q1.y)) { 210 | return false; 211 | } 212 | 213 | return (this.ccw(p1,p2,q1) * this.ccw(p1,p2,q2) <= 0) && (this.ccw(q1,q2,p1) * this.ccw(q1,q2,p2) <= 0); 214 | 215 | }, 216 | 217 | /** 218 | * @method lat2y 219 | * @param latLng {Object} 220 | * @return {Number} 221 | */ 222 | lat2y: function lat2y(latLng) { 223 | return 180.0 / $math.PI * $math.log($math.tan($math.PI / 4.0 + latLng.lat * ($math.PI / 180.0) / 2.0)); 224 | }, 225 | 226 | /** 227 | * @method ccw 228 | * @param p0 {Object} 229 | * @param p1 {Object} 230 | * @param p2 {Object} 231 | * @return {Number} 232 | */ 233 | ccw: function ccw(p0, p1, p2) { 234 | 235 | var epsilon = 1e-13, 236 | dx1 = p1.x - p0.x, 237 | dy1 = p1.y - p0.y, 238 | dx2 = p2.x - p0.x, 239 | dy2 = p2.y - p0.y, 240 | d = dx1 * dy2 - dy1 * dx2; 241 | 242 | if (d > epsilon) { 243 | return 1; 244 | } 245 | 246 | if (d < -epsilon) { 247 | return -1; 248 | } 249 | 250 | if ((dx1*dx2 < -epsilon) || (dy1*dy2 < -epsilon)) { 251 | return -1; 252 | } 253 | 254 | if ((dx1*dx1+dy1*dy1) < (dx2*dx2+dy2*dy2)+epsilon) { 255 | return 1; 256 | } 257 | 258 | return 0; 259 | 260 | }, 261 | 262 | /** 263 | * @method getAngle 264 | * @param current {Object} 265 | * @param previous {Object} 266 | * @param next {Object} 267 | * @return {Number} 268 | */ 269 | getAngle: function getAngle(current, previous, next) { 270 | 271 | if (next.x === current.x && next.y === current.y) { 272 | return -9000; 273 | } 274 | 275 | if (next.x === previous.x && next.y === previous.y) { 276 | return -360.0; 277 | } 278 | 279 | var a = { x: current.x - previous.x, y: current.y - previous.y }, 280 | b = { x: next.x - current.x, y: next.y - current.y }; 281 | 282 | var vector = (a.x * b.y) - (b.x * a.y), 283 | scale = (a.x * b.x) + (a.y * b.y), 284 | angle; 285 | 286 | if (scale === 0) { 287 | 288 | if (vector > 0) { 289 | angle = 90.0; 290 | } 291 | 292 | if (vector < 0) { 293 | angle = -90.0; 294 | } 295 | 296 | } else { 297 | 298 | angle = $math.atan(vector / scale) * 180.0 / $math.PI; 299 | 300 | if (scale < 0) { 301 | 302 | if (vector >= 0) { 303 | angle += 180.0; 304 | } 305 | 306 | if (vector < 0) { 307 | angle -= 180.0; 308 | } 309 | 310 | } 311 | } 312 | 313 | if (angle === 360.0) { 314 | angle = 0; 315 | } 316 | 317 | return 180.0 - angle; 318 | 319 | } 320 | 321 | }; 322 | 323 | /** 324 | * Process of defining the module in the global scope. 325 | * 326 | * @method defineModule 327 | * @return {void} 328 | */ 329 | (function defineModule() { 330 | 331 | if (typeof module !== 'undefined' && module.exports) { 332 | 333 | // Add CommonJS Support! 334 | module.exports = ConcaveHull; 335 | return; 336 | 337 | } 338 | 339 | if (typeof define === 'function' && define.amd) { 340 | 341 | // Add AMD Support! 342 | define(function addAMDSupport() { 343 | return ConcaveHull; 344 | }); 345 | 346 | return; 347 | 348 | } 349 | 350 | // Otherwise the default is a normal export on the "window" property. 351 | window.ConcaveHull = ConcaveHull; 352 | 353 | })(); 354 | 355 | })(Math); -------------------------------------------------------------------------------- /bower_components/concavehull/dist/concavehull.min.js: -------------------------------------------------------------------------------- 1 | /*! concavehull by Adam Timberlake created on 2015-01-23 */ 2 | !function(a){"use strict";var b=function(a,b){var c=this.convertLatLngs(a);this.points=c.points,this.maxDistance=isFinite(b)?b:c.maxDistance+1};b.prototype={points:[],maxDistance:0,convertLatLngs:function(a){var b=0,c=a.map(function(c,d){if(c.x=c.lng,c.y=this.lat2y(c),a[d-1]){var e=this.distanceTo(c,a[d-1]);e>b&&(b=e)}return c}.bind(this));return{points:c,maxDistance:b}},distanceTo:function(b,c){var d=6378137,e=a.PI/180,f=(c.lat-b.lat)*e,g=(c.lng-b.lng)*e,h=b.lat*e,i=c.lat*e,j=a.sin(f/2),k=a.sin(g/2),l=j*j+k*k*a.cos(h)*a.cos(i);return 2*d*a.atan2(a.sqrt(l),a.sqrt(1-l))},getLatLngs:function(){if(this.length<=3)return this.points;var a=this.points.slice().sort(function(a,b){return a.y-b.y}),b=[],c=a[0],d=c,e={x:d.x,y:d.y-1};b.push(c);for(var f,g=0,h=function(a,b){return this.getAngle(d,e,b)-this.getAngle(d,e,a)}.bind(this);;){g++;for(var i=this.points.slice().sort(h),j=0,k=i.length;k>j;j++)if(this.distanceTo(d,i[j])1e3)return this.points}},isIntersecting:function(a,b){for(var c=1,d=a.length-1;d>c;c++)if(this.intersect(a[c-1],a[c],a[d],b))return!0;return!1},intersect:function(a,b,c,d){return a.x===c.x&&a.y===c.y||b.x===d.x&&b.y===d.y||a.x===d.x&&a.y===d.y||b.x===c.x&&b.y===c.y?!1:this.ccw(a,b,c)*this.ccw(a,b,d)<=0&&this.ccw(c,d,a)*this.ccw(c,d,b)<=0},lat2y:function(b){return 180/a.PI*a.log(a.tan(a.PI/4+b.lat*(a.PI/180)/2))},ccw:function(a,b,c){var d=1e-13,e=b.x-a.x,f=b.y-a.y,g=c.x-a.x,h=c.y-a.y,i=e*h-f*g;return i>d?1:-d>i?-1:-d>e*g||-d>f*h?-1:g*g+h*h+d>e*e+f*f?1:0},getAngle:function(b,c,d){if(d.x===b.x&&d.y===b.y)return-9e3;if(d.x===c.x&&d.y===c.y)return-360;var e,f={x:b.x-c.x,y:b.y-c.y},g={x:d.x-b.x,y:d.y-b.y},h=f.x*g.y-g.x*f.y,i=f.x*g.x+f.y*g.y;return 0===i?(h>0&&(e=90),0>h&&(e=-90)):(e=180*a.atan(h/i)/a.PI,0>i&&(h>=0&&(e+=180),0>h&&(e-=180))),360===e&&(e=0),180-e}},function(){return"undefined"!=typeof module&&module.exports?void(module.exports=b):"function"==typeof define&&define.amd?void define(function(){return b}):void(window.ConcaveHull=b)}()}(Math); -------------------------------------------------------------------------------- /bower_components/concavehull/example/commonjs-example.js: -------------------------------------------------------------------------------- 1 | var points = [ 2 | { lat: -0.08385658264160156, lng: 51.50564395807757 }, 3 | { lat: -0.08085250854492186, lng: 51.50452203516731 }, 4 | { lat: -0.0775909423828125, lng: 51.50473573689897 }, 5 | { lat: -0.07750511169433594, lng: 51.502919240234235 }, 6 | { lat: -0.078277587890625, lng: 51.501743821453736 }, 7 | { lat: -0.07930755615234375, lng: 51.50104924156018 }, 8 | { lat: -0.08316993713378906, lng: 51.50019435946635 }, 9 | { lat: -0.087890625, lng: 51.49987377454688 }, 10 | { lat: -0.09037971496582031, lng: 51.498805141862064 }, 11 | { lat: -0.09252548217773438, lng: 51.49859141231831 }, 12 | { lat: -0.09278297424316405, lng: 51.499980636437265 }, 13 | { lat: -0.09055137634277344, lng: 51.50436175821088 }, 14 | { lat: -0.08677482604980469, lng: 51.50692612186487 }, 15 | { lat: -0.08385658264160156, lng: 51.50564395807757 } 16 | ]; 17 | 18 | var ConcaveHull = require('../module/ConcaveHull.js'); 19 | console.log(new ConcaveHull(points).getLatLngs()); -------------------------------------------------------------------------------- /bower_components/concavehull/module/ConcaveHull.js: -------------------------------------------------------------------------------- 1 | (function($math) { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module ConcaveHull 7 | * @author Adam Timberlake 8 | * @author Nikolay Redko 9 | * @link https://github.com/Wildhoney/ConcaveHull 10 | * @param latLngs {Object} 11 | * @param maxDistance {Number} 12 | * @constructor 13 | */ 14 | var ConcaveHull = function ConcaveHull(latLngs, maxDistance) { 15 | 16 | var result = this.convertLatLngs(latLngs); 17 | this.points = result.points; 18 | this.maxDistance = isFinite(maxDistance) ? maxDistance : (result.maxDistance + 1); 19 | 20 | }; 21 | 22 | /** 23 | * @property prototype 24 | * @type {Object} 25 | */ 26 | ConcaveHull.prototype = { 27 | 28 | /** 29 | * @property points 30 | * @type {Array} 31 | */ 32 | points: [], 33 | 34 | /** 35 | * @property maxDistance 36 | * @type {Number} 37 | */ 38 | maxDistance: 0, 39 | 40 | /** 41 | * @method convertLatLngs 42 | * @param latLngs {Array} 43 | * @return {Object} 44 | */ 45 | convertLatLngs: function convertLatLngs(latLngs) { 46 | 47 | var longestDistance = 0, 48 | convertedPoints = latLngs.map(function(latLng, $index) { 49 | 50 | // Transform the lat/long values into those the concave hull algorithm expects. 51 | latLng.x = latLng.lng; 52 | latLng.y = this.lat2y(latLng); 53 | 54 | if (latLngs[$index - 1]) { 55 | 56 | var distance = this.distanceTo(latLng, latLngs[$index - 1]); 57 | 58 | if (distance > longestDistance) { 59 | longestDistance = distance; 60 | } 61 | 62 | } 63 | 64 | return latLng; 65 | 66 | }.bind(this)); 67 | 68 | return { points: convertedPoints, maxDistance: longestDistance }; 69 | 70 | }, 71 | 72 | /** 73 | * @method distanceTo 74 | * @param firstLatLng {Object} 75 | * @param secondLatLng {Object} 76 | * @return {Number} 77 | */ 78 | distanceTo: function distanceTo(firstLatLng, secondLatLng) { 79 | 80 | var R = 6378137, 81 | d2r = $math.PI / 180, 82 | dLat = (secondLatLng.lat - firstLatLng.lat) * d2r, 83 | dLon = (secondLatLng.lng - firstLatLng.lng) * d2r, 84 | lat1 = firstLatLng.lat * d2r, 85 | lat2 = secondLatLng.lat * d2r, 86 | sin1 = $math.sin(dLat / 2), 87 | sin2 = $math.sin(dLon / 2); 88 | 89 | var a = sin1 * sin1 + sin2 * sin2 * $math.cos(lat1) * $math.cos(lat2); 90 | return R * 2 * $math.atan2($math.sqrt(a), $math.sqrt(1 - a)); 91 | 92 | }, 93 | 94 | /** 95 | * @method getLatLngs 96 | * @return {Object} 97 | */ 98 | getLatLngs: function getLatLngs() { 99 | 100 | if (this.length <= 3) { 101 | return this.points; 102 | } 103 | 104 | var byY = this.points.slice().sort(function sort(a, b) { 105 | return a.y - b.y; 106 | }); 107 | 108 | var hull = [], 109 | start = byY[0], 110 | current = start, 111 | previous = { x: current.x, y: current.y - 1 }; 112 | 113 | hull.push(start); 114 | 115 | var next, count = 0; 116 | 117 | /** 118 | * @method sortPoints 119 | * @type {Function} 120 | */ 121 | var sortPoints = function(a, b) { 122 | return this.getAngle(current, previous, b) - this.getAngle(current, previous, a); 123 | }.bind(this); 124 | 125 | while(true) { 126 | 127 | count++; 128 | 129 | var byAngle = this.points.slice().sort(sortPoints); 130 | 131 | for (var i = 0, l = byAngle.length; i < l; i++) { 132 | 133 | if (this.distanceTo(current, byAngle[i]) < this.maxDistance && !this.isIntersecting(hull, byAngle[i])) { 134 | next = byAngle[i]; 135 | break; 136 | } 137 | 138 | } 139 | 140 | if (!next) { 141 | 142 | // No polygon can be found. 143 | return this.points; 144 | 145 | } 146 | 147 | if (next === current) { 148 | 149 | // Concave hull algorithm has gone very wrong indeed. 150 | return this.points; 151 | 152 | } 153 | 154 | hull.push(next); 155 | 156 | if (next === start) { 157 | 158 | // Everything is okay! 159 | return hull; 160 | 161 | } 162 | 163 | previous = current; 164 | current = next; 165 | next = undefined; 166 | 167 | if (count > 1000) { 168 | 169 | // Concave hull algorithm has gone very wrong... again. 170 | return this.points; 171 | 172 | } 173 | 174 | } 175 | 176 | }, 177 | 178 | /** 179 | * @method isIntersecting 180 | * @param latLngs {Object} 181 | * @param otherLatLngs {Object} 182 | * @return {Boolean} 183 | */ 184 | isIntersecting: function isIntersecting(latLngs, otherLatLngs) { 185 | 186 | for (var i = 1, l = latLngs.length - 1; i < l; i++) { 187 | 188 | if (this.intersect(latLngs[i - 1], latLngs[i], latLngs[l], otherLatLngs)) { 189 | return true; 190 | } 191 | 192 | } 193 | 194 | return false; 195 | 196 | }, 197 | 198 | /** 199 | * @method intersect 200 | * @param p1 {Object} 201 | * @param p2 {Object} 202 | * @param q1 {Object} 203 | * @param q2 {Object} 204 | * @return {Boolean} 205 | */ 206 | intersect: function intersect(p1, p2, q1, q2) { 207 | 208 | if ((p1.x === q1.x && p1.y === q1.y || p2.x === q2.x && p2.y === q2.y) || 209 | (p1.x === q2.x && p1.y === q2.y || p2.x === q1.x && p2.y === q1.y)) { 210 | return false; 211 | } 212 | 213 | return (this.ccw(p1,p2,q1) * this.ccw(p1,p2,q2) <= 0) && (this.ccw(q1,q2,p1) * this.ccw(q1,q2,p2) <= 0); 214 | 215 | }, 216 | 217 | /** 218 | * @method lat2y 219 | * @param latLng {Object} 220 | * @return {Number} 221 | */ 222 | lat2y: function lat2y(latLng) { 223 | return 180.0 / $math.PI * $math.log($math.tan($math.PI / 4.0 + latLng.lat * ($math.PI / 180.0) / 2.0)); 224 | }, 225 | 226 | /** 227 | * @method ccw 228 | * @param p0 {Object} 229 | * @param p1 {Object} 230 | * @param p2 {Object} 231 | * @return {Number} 232 | */ 233 | ccw: function ccw(p0, p1, p2) { 234 | 235 | var epsilon = 1e-13, 236 | dx1 = p1.x - p0.x, 237 | dy1 = p1.y - p0.y, 238 | dx2 = p2.x - p0.x, 239 | dy2 = p2.y - p0.y, 240 | d = dx1 * dy2 - dy1 * dx2; 241 | 242 | if (d > epsilon) { 243 | return 1; 244 | } 245 | 246 | if (d < -epsilon) { 247 | return -1; 248 | } 249 | 250 | if ((dx1*dx2 < -epsilon) || (dy1*dy2 < -epsilon)) { 251 | return -1; 252 | } 253 | 254 | if ((dx1*dx1+dy1*dy1) < (dx2*dx2+dy2*dy2)+epsilon) { 255 | return 1; 256 | } 257 | 258 | return 0; 259 | 260 | }, 261 | 262 | /** 263 | * @method getAngle 264 | * @param current {Object} 265 | * @param previous {Object} 266 | * @param next {Object} 267 | * @return {Number} 268 | */ 269 | getAngle: function getAngle(current, previous, next) { 270 | 271 | if (next.x === current.x && next.y === current.y) { 272 | return -9000; 273 | } 274 | 275 | if (next.x === previous.x && next.y === previous.y) { 276 | return -360.0; 277 | } 278 | 279 | var a = { x: current.x - previous.x, y: current.y - previous.y }, 280 | b = { x: next.x - current.x, y: next.y - current.y }; 281 | 282 | var vector = (a.x * b.y) - (b.x * a.y), 283 | scale = (a.x * b.x) + (a.y * b.y), 284 | angle; 285 | 286 | if (scale === 0) { 287 | 288 | if (vector > 0) { 289 | angle = 90.0; 290 | } 291 | 292 | if (vector < 0) { 293 | angle = -90.0; 294 | } 295 | 296 | } else { 297 | 298 | angle = $math.atan(vector / scale) * 180.0 / $math.PI; 299 | 300 | if (scale < 0) { 301 | 302 | if (vector >= 0) { 303 | angle += 180.0; 304 | } 305 | 306 | if (vector < 0) { 307 | angle -= 180.0; 308 | } 309 | 310 | } 311 | } 312 | 313 | if (angle === 360.0) { 314 | angle = 0; 315 | } 316 | 317 | return 180.0 - angle; 318 | 319 | } 320 | 321 | }; 322 | 323 | /** 324 | * Process of defining the module in the global scope. 325 | * 326 | * @method defineModule 327 | * @return {void} 328 | */ 329 | (function defineModule() { 330 | 331 | if (typeof module !== 'undefined' && module.exports) { 332 | 333 | // Add CommonJS Support! 334 | module.exports = ConcaveHull; 335 | return; 336 | 337 | } 338 | 339 | if (typeof define === 'function' && define.amd) { 340 | 341 | // Add AMD Support! 342 | define(function addAMDSupport() { 343 | return ConcaveHull; 344 | }); 345 | 346 | return; 347 | 348 | } 349 | 350 | // Otherwise the default is a normal export on the "window" property. 351 | window.ConcaveHull = ConcaveHull; 352 | 353 | })(); 354 | 355 | })(Math); -------------------------------------------------------------------------------- /bower_components/concavehull/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "concavehull", 3 | "version": "0.1.5", 4 | "description": "Workable refactoring into a module of a concave hull algorithm.", 5 | "main": "dist/concavehull.min.js", 6 | "scripts": { 7 | "test": "grunt test" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/Wildhoney/ConcaveHull.git" 12 | }, 13 | "author": "Adam Timberlake ", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/Wildhoney/ConcaveHull/issues" 17 | }, 18 | "homepage": "https://github.com/Wildhoney/ConcaveHull", 19 | "dependencies": { 20 | "bower": "^1.3.9", 21 | "grunt": "^0.4.5", 22 | "grunt-cli": "^0.1.13", 23 | "grunt-contrib-compress": "^0.10.0", 24 | "grunt-contrib-concat": "^0.5.0", 25 | "grunt-contrib-copy": "^0.5.0", 26 | "grunt-contrib-jasmine": "^0.7.0", 27 | "grunt-contrib-jshint": "^0.10.0", 28 | "grunt-contrib-uglify": "^0.5.1" 29 | } 30 | } -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.0.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.1.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.2.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.3.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.4.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/0.1.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/0.1.5.zip -------------------------------------------------------------------------------- /bower_components/concavehull/releases/master.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/concavehull/releases/master.zip -------------------------------------------------------------------------------- /bower_components/d3/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3", 3 | "version": "3.4.13", 4 | "main": "d3.js", 5 | "scripts": [ 6 | "d3.js" 7 | ], 8 | "ignore": [ 9 | ".DS_Store", 10 | ".git", 11 | ".gitignore", 12 | ".npmignore", 13 | ".travis.yml", 14 | "Makefile", 15 | "bin", 16 | "component.json", 17 | "index.js", 18 | "lib", 19 | "node_modules", 20 | "package.json", 21 | "src", 22 | "test" 23 | ], 24 | "homepage": "https://github.com/mbostock/d3", 25 | "_release": "3.4.13", 26 | "_resolution": { 27 | "type": "version", 28 | "tag": "v3.4.13", 29 | "commit": "e2dc80f5385c153066150075a4208131e0b78c68" 30 | }, 31 | "_source": "git://github.com/mbostock/d3.git", 32 | "_target": "~3.4.11", 33 | "_originalSource": "d3" 34 | } -------------------------------------------------------------------------------- /bower_components/d3/.spmignore: -------------------------------------------------------------------------------- 1 | bin 2 | lib 3 | src 4 | test 5 | -------------------------------------------------------------------------------- /bower_components/d3/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | If you’re looking for ways to contribute, please [peruse open issues](https://github.com/mbostock/d3/issues?milestone=&page=1&state=open). The icebox is a good place to find ideas that are not currently in development. If you already have an idea, please check past issues to see whether your idea or a similar one was previously discussed. 4 | 5 | Before submitting a pull request, consider implementing a live example first, say using [bl.ocks.org](http://bl.ocks.org). Real-world use cases go a long way to demonstrating the usefulness of a proposed feature. The more complex a feature’s implementation, the more usefulness it should provide. Share your demo using the #d3js tag on Twitter or by sending it to the d3-js Google group. 6 | 7 | If your proposed feature does not involve changing core functionality, consider submitting it instead as a [D3 plugin](https://github.com/d3/d3-plugins). New core features should be for general use, whereas plugins are suitable for more specialized use cases. When in doubt, it’s easier to start with a plugin before “graduating” to core. 8 | 9 | To contribute new documentation or add examples to the gallery, just [edit the Wiki](https://github.com/mbostock/d3/wiki)! 10 | 11 | ## How to Submit a Pull Request 12 | 13 | 1. Click the “Fork” button to create your personal fork of the D3 repository. 14 | 15 | 2. After cloning your fork of the D3 repository in the terminal, run `npm install` to install D3’s dependencies. 16 | 17 | 3. Create a new branch for your new feature. For example: `git checkout -b my-awesome-feature`. A dedicated branch for your pull request means you can develop multiple features at the same time, and ensures that your pull request is stable even if you later decide to develop an unrelated feature. 18 | 19 | 4. The `d3.js` and `d3.min.js` files are built from source files in the `src` directory. _Do not edit `d3.js` directly._ Instead, edit the source files, and then run `make` to build the generated files. 20 | 21 | 5. Use `make test` to run tests and verify your changes. If you are adding a new feature, you should add new tests! If you are changing existing functionality, make sure the existing tests run, or update them as appropriate. 22 | 23 | 6. Sign D3’s [Individual Contributor License Agreement](https://docs.google.com/forms/d/1CzjdBKtDuA8WeuFJinadx956xLQ4Xriv7-oDvXnZMaI/viewform). Unless you are submitting a trivial patch (such as fixing a typo), this form is needed to verify that you are able to contribute. 24 | 25 | 7. Submit your pull request, and good luck! 26 | -------------------------------------------------------------------------------- /bower_components/d3/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2014, Michael Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * The name Michael Bostock may not be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, 21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /bower_components/d3/README.md: -------------------------------------------------------------------------------- 1 | # Data-Driven Documents 2 | 3 | 4 | 5 | **D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation. 6 | 7 | Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki) 8 | 9 | For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock). 10 | -------------------------------------------------------------------------------- /bower_components/d3/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3", 3 | "version": "3.4.13", 4 | "main": "d3.js", 5 | "scripts": [ 6 | "d3.js" 7 | ], 8 | "ignore": [ 9 | ".DS_Store", 10 | ".git", 11 | ".gitignore", 12 | ".npmignore", 13 | ".travis.yml", 14 | "Makefile", 15 | "bin", 16 | "component.json", 17 | "index.js", 18 | "lib", 19 | "node_modules", 20 | "package.json", 21 | "src", 22 | "test" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /bower_components/d3/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mbostock/d3", 3 | "description": "A small, free JavaScript library for manipulating documents based on data.", 4 | "keywords": ["dom", "svg", "visualization", "js", "canvas"], 5 | "homepage": "http://d3js.org/", 6 | "license": "BSD-3-Clause", 7 | "authors": [ 8 | { 9 | "name": "Mike Bostock", 10 | "homepage": "http://bost.ocks.org/mike" 11 | } 12 | ], 13 | "support": { 14 | "issues": "https://github.com/mbostock/d3/issues", 15 | "wiki": "https://github.com/mbostock/d3/wiki", 16 | "API": "https://github.com/mbostock/d3/wiki/API-Reference", 17 | "source": "https://github.com/mbostock/d3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/evispa-timo-jsclipper/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evispa-timo-jsclipper", 3 | "main": "clipper.js", 4 | "description": "Boolean operations and offsetting library in Javascript.", 5 | "license": "BSL-1.0", 6 | "keywords": [ 7 | "clipper", 8 | "jsclipper", 9 | "javascript-clipper" 10 | ], 11 | "authors": [ 12 | "Timo", 13 | "Angus Johnson (http://www.angusj.com)" 14 | ], 15 | "ignore": [], 16 | "homepage": "https://github.com/evispa/timo-jsclipper", 17 | "_release": "a3a7de28f9", 18 | "_resolution": { 19 | "type": "branch", 20 | "branch": "master", 21 | "commit": "a3a7de28f90a8353975cabdaff03eeb78ac8cd71" 22 | }, 23 | "_source": "git://github.com/evispa/timo-jsclipper.git", 24 | "_target": "*", 25 | "_originalSource": "evispa-timo-jsclipper" 26 | } -------------------------------------------------------------------------------- /bower_components/evispa-timo-jsclipper/README.md: -------------------------------------------------------------------------------- 1 | Javascript Clipper 2 | ========= 3 | 4 | Clone of http://sourceforge.net/projects/jsclipper 5 | 6 | Description 7 | --------- 8 | 9 | Boolean operations and offsetting library in Javascript. 10 | 11 | The Javascript Clipper library performs clipping and offsetting for both lines and polygons. All four boolean clipping operations are supported - intersection, union, difference and exclusive-or. Polygons can be of any shape including self-intersecting polygons. 12 | 13 | Javascript Clipper is a port of Angus Johnson's Clipper library: https://sourceforge.net/projects/polyclipping/ 14 | 15 | LIVE DEMO: http://jsclipper.sourceforge.net/6.1.3.2/main_demo.html 16 | 17 | Information and examples: 18 | http://jsclipper.sourceforge.net/6.1.3.2/ 19 | 20 | Features 21 | --------- 22 | * Line and polygon clipping - intersection, union, difference & xor 23 | * Line and polygon offsetting with 3 types of joining - miter, square and round 24 | * Polygons can be of any shape, including self-intersecting polygons 25 | * Minkowski Addition and Minkowski Difference functions included 26 | * The library is written in Javascript 27 | * Comprehensive documentation 28 | * Demos use inline SVG and Canvas libraries 29 | * The library is significantly faster than commercial alternatives 30 | * Uses Tom Wu's fast big integer library 31 | 32 | License 33 | --------- 34 | Boost Software License (BSL1.0) http://opensource.org/licenses/BSL-1.0 35 | 36 | Copyright 37 | --------- 38 | Javascript Clipper 39 | Author: Timo 40 | 41 | Original Clipper 42 | Author: Angus Johnson 2010-2014 http://www.angusj.com 43 | -------------------------------------------------------------------------------- /bower_components/evispa-timo-jsclipper/README.txt: -------------------------------------------------------------------------------- 1 | ============================================================ 2 | Javascript Clipper Change Log 3 | ============================================================ 4 | 5 | v6.1.3.2 (1 February 2014) 6 | * Update: Unnecessary closures removed around ref/out calls and major 7 | speedup and code cleanliness achieved. Intersection operation speedup 8 | in newest Chrome is 2.3x (from 2530 ms to 1107 ms) and in newest 9 | Firefox 1.7x (from 7186 ms to 4164 ms). 10 | 11 | v6.1.3.1 (21 January 2014) 12 | * Fixed potential endless loop condition when adding open 13 | paths to Clipper. 14 | * Added PointInPolygon function. 15 | * Overloaded MinkowskiSum function to accommodate multi-contour 16 | paths. 17 | 18 | v6.1.2.1 (15 December 2013) 19 | * Minor improvement to joining polygons. 20 | 21 | v6.1.1.1 (13 December 2013) 22 | * Fixed a couple of bugs affecting open paths that could 23 | raise unhandled exceptions. 24 | * Fixed Uncaught ReferenceError: DistanceFromLineSqrd is not defined when 25 | using CleanPolygon or CleanPolygons 26 | * Fixed SimplifyPolygon calls in Main Demo 27 | 28 | v6.1.0.1 (12 December 2013) 29 | * Added: Info and Examples page: http://jsclipper.sourceforge.net/6.1.0.1/ 30 | * Added: Clipper 6 documentation in 31 | https://sourceforge.net/p/jsclipper/wiki/documentation/ 32 | * Migration guide for Clipper 5 users in 33 | https://sourceforge.net/p/jsclipper/wiki/migration5to6/ 34 | * Modified: To accommodate open paths, several functions have been renamed: 35 | Polygon -> Path 36 | Polygons -> Paths 37 | AddPolygon -> AddPath 38 | AddPolygons -> AddPaths 39 | PolyTreeToPolygons -> PolyTreeToPaths 40 | ReversePolygons -> ReversePaths 41 | * Modified: OffsetPolygons function is replaced by ClipperOffset 42 | class, which is much more flexible. There is also now deprecated 43 | OffsetPaths function, which may be removed in future update. 44 | * Update: ExPolygons has been replaced with the PolyTree & 45 | PolyNode classes to more fully represent the parent-child 46 | relationships of the polygons returned by Clipper. There is 47 | for backward compatibility ClipperLib.JS.PolyTreeToExPolygons. 48 | * Added: Open path (polyline) clipping. 49 | * Update: Major improvement in the merging of 50 | shared/collinear edges in clip solutions (see Execute). 51 | * Added: The IntPoint structure now has an optional 'Z' member. 52 | (See the precompiler directive use_xyz.) 53 | * Added: New CleanPolygon and CleanPolygons functions. 54 | * Added: MinkowskiSum and MinkowskiDiff functions added. 55 | * Added: Several other new functions have been added including 56 | PolyTreeToPaths, OpenPathsFromPolyTree and ClosedPathsFromPolyTree. 57 | * Added: ReverseSolution, PreserveCollinear and StrictlySimple properties to Clipper class 58 | * Added: The Clipper constructor now accepts an optional InitOptions 59 | parameter to simplify setting properties. 60 | * Modified: The Clipper class has a new ZFillFunction property. 61 | * Deprecated: Version 6 is a major upgrade from previous versions 62 | and quite a number of changes have been made to exposed structures 63 | and functions. To minimize inconvenience to existing library users, 64 | some code has been retained and some added to maintain backward 65 | compatibility. However, because this code will be removed in a 66 | future update, it has been marked as deprecated and a precompiler 67 | directive use_deprecated has been defined. 68 | * Changed: The behaviour of the 'miter' JoinType has been 69 | changed so that when squaring occurs, it's no longer 70 | extended up to the miter limit but is squared off at 71 | exactly 'delta' units. (This improves the look of mitering 72 | with larger limits at acute angles.) 73 | * Bugfixes: Several minor bugs have been fixed including 74 | occasionally an incorrect nesting within the PolyTree structure. 75 | 76 | 5.0.2.3 - 27 November 2013 77 | * Added: Node.js compatibility. 78 | * Bugfix: jQuery's "event.returnValue is deprecated." warning is stripped. 79 | 80 | 5.0.2.2 - 11 September 2013 81 | * Bugfix: SlopesEqual() uses now big integers only when needed and causes speed improvements in certain cases. 82 | * Bugfix: Fixed inconsistent use of DV in jsbn.js, in function bnpFromInt() DV replaced with this.DV. 83 | * BugFix: ExPolygons structure is now working as expected. 84 | * Added: Main Demo has now Ex-button in Polygon Explorer, which shows Solution as ExPolygons structure. 85 | * Added: ExPolygons is now explained in wiki in https://sourceforge.net/p/jsclipper/wiki/ExPolygons/ 86 | * Added: Web Workers compatibility 87 | * Added: Web Workers support page is available in https://sourceforge.net/p/jsclipper/wiki/Web%20Workers/ 88 | 89 | 5.0.2.1 - 12 January 2013 90 | * Update: Clipper library updated to version 5.0.2. The Area algorithm has been updated and is faster. 91 | 'CheckInputs' parameter of the OffsetPolygons function has been renamed 'AutoFix'. 92 | * Added: ClipperLib.Clean(), which removes too near vertices to avoid micro-self-intersection-artifacts when offsetting. 93 | * Added: ClipperLib.Lighten(), which reduces count of vertices using perpendicular distance reduction algorithm. 94 | * Added: ClipperLib.Clone(), which make true clone of polygons. 95 | Several updates to the Main Demo: 96 | * Added: Clean, Simplify, Lighten buttons 97 | * Change: Custom Polygons: input boxes to textareas to allow more data 98 | * Added: Polygon Output Formats (Clipper, Plain, SVG) 99 | * Update: Polygon Explorer: Also multipolygon is clickable (on Points column) 100 | * Added: Polygon Explorer: When numbers on Points or Points in subpolygons are clicked, the area of multipolygon or subpolygon is shown 101 | * Update: Several updates to wiki in https://sourceforge.net/p/jsclipper/wiki/Home/ 102 | 103 | 4.9.7.2 - 1 January 2013 104 | * Update: Browser specific speedup for ClipperLib.Clipper.Round(), ClipperLib.Cast_Int32() and ClipperLib.Cast_Int64(). 105 | * Update: Major enhancements for Main Demo. Including benchmark, custom polygons and polygon importer. 106 | * Update: Documentation is updated with new screenshots of Main Demo. Browser speedtest is published in Wiki. 107 | 108 | 4.9.7.1 - 12 December 2012 109 | * Initial release -------------------------------------------------------------------------------- /bower_components/evispa-timo-jsclipper/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evispa-timo-jsclipper", 3 | "version": "v6.1.3.2", 4 | "main": "clipper.js", 5 | "description": "Boolean operations and offsetting library in Javascript.", 6 | "license": "BSL-1.0", 7 | "keywords": ["clipper", "jsclipper", "javascript-clipper"], 8 | "authors": ["Timo", "Angus Johnson (http://www.angusj.com)"], 9 | "ignore": [] 10 | } 11 | -------------------------------------------------------------------------------- /bower_components/graham_scan/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graham_scan", 3 | "version": "1.0.2", 4 | "main": "graham_scan.min.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "test", 9 | "*.md", 10 | "*.jstd", 11 | ".gitignore", 12 | "example", 13 | "qunit-lib" 14 | ], 15 | "keywords": [ 16 | "convex", 17 | "hull" 18 | ], 19 | "homepage": "http://brian3kb.github.io/graham_scan_js", 20 | "authors": [ 21 | "Brian Barnett " 22 | ], 23 | "description": "Implementation of the Graham Scan algorithm to calculate a convex hull from a given array of x, y coordinates.", 24 | "_release": "1.0.2", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "1.0.2", 28 | "commit": "f0febff8a5ede65894532e120c8bc16b7a06467a" 29 | }, 30 | "_source": "git://github.com/brian3kb/graham_scan_js.git", 31 | "_target": "~1.0.2", 32 | "_originalSource": "graham_scan" 33 | } -------------------------------------------------------------------------------- /bower_components/graham_scan/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graham_scan", 3 | "version": "1.0.2", 4 | "main": "graham_scan.min.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "test", 9 | "*.md", 10 | "*.jstd", 11 | ".gitignore", 12 | "example", 13 | "qunit-lib" 14 | ], 15 | "keywords": [ 16 | "convex", 17 | "hull" 18 | ], 19 | "homepage": "http://brian3kb.github.io/graham_scan_js", 20 | "authors": [ 21 | "Brian Barnett " 22 | ], 23 | "description": "Implementation of the Graham Scan algorithm to calculate a convex hull from a given array of x, y coordinates." 24 | } 25 | -------------------------------------------------------------------------------- /bower_components/graham_scan/graham_scan.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Graham's Scan Convex Hull Algorithm 3 | * Author: Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/ 4 | * Date: 14/06/13 5 | * Updated: 25/01/14 6 | * Description: An implementation of the Graham's Scan Convex Hull algorithm in Javascript.*/ 7 | function ConvexHullGrahamScan(){this.anchorPoint=undefined;this.reverse=false;this.points=[]}ConvexHullGrahamScan.prototype={constructor:ConvexHullGrahamScan,Point:function(e,t){this.x=e;this.y=t},_findPolarAngle:function(e,t){var n=57.295779513082;var r=t.x-e.x;var i=t.y-e.y;if(r==0&&i==0){return 0}var s=Math.atan2(i,r)*n;if(this.reverse){if(s<=0){s+=360}}else{if(s>=0){s+=360}}return s},addPoint:function(e,t){if(this.anchorPoint===undefined){this.anchorPoint=new this.Point(e,t)}else if(this.anchorPoint.y>t||this.anchorPoint.y==t&&this.anchorPoint.x>e){this.anchorPoint.y=t;this.anchorPoint.x=e;this.points.unshift(new this.Point(e,t));return}this.points.push(new this.Point(e,t))},_sortPoints:function(){var e=this;return this.points.sort(function(t,n){var r=e._findPolarAngle(e.anchorPoint,t);var i=e._findPolarAngle(e.anchorPoint,n);if(ri){return 1}return 0})},_checkPoints:function(e,t,n){var r;var i=this._findPolarAngle(e,t);var s=this._findPolarAngle(e,n);if(i>s){r=i-s;return!(r>180)}else if(i180}return false},getHull:function(){var e=[],t,n;this.reverse=this.points.every(function(e){return e.x<0&&e.y<0});t=this._sortPoints();n=t.length;if(n<4){return t}e.push(t.shift(),t.shift());while(true){var r,i,s;e.push(t.shift());r=e[e.length-3];i=e[e.length-2];s=e[e.length-1];if(this._checkPoints(r,i,s)){e.splice(e.length-2,1)}if(t.length==0){if(n==e.length){return e}t=e;n=t.length;e=[];e.push(t.shift(),t.shift())}}}} -------------------------------------------------------------------------------- /bower_components/graham_scan/license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Brian Barnett 4 | http://brianbar.net/ 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. -------------------------------------------------------------------------------- /bower_components/graham_scan/src/graham_scan.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Graham's Scan Convex Hull Algorithm 3 | * Author: Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/ 4 | * Date: 14/06/13 5 | * Updated: 20/09/13 6 | * Description: An implementation of the Graham's Scan Convex Hull algorithm in Javascript, outlined with the following 7 | * formal algorithm: 8 | * 9 | * GRAHAM_SCAN(Q) 10 | * 11 | * 1. Find p0 in Q with minimum y-coordinate (and minimum x-coordinate if there are ties). 12 | * 2. Sort the remaining points of Q (that is, Q − {p0}) by polar angle in counterclockwise order with respect to p0. 13 | * 3. TOP [S] = 0 ▷ Lines 3-6 initialize the stack to contain, from bottom to top, first three points. 14 | * 4. PUSH (p0, S) 15 | * 5. PUSH (p1, S) 16 | * 6. PUSH (p2, S) 17 | * 7. for i = 3 to m ▷ Perform test for each point p3, ..., pm. 18 | * 8. do while the angle between NEXT_TO_TOP[S], TOP[S], and pi makes a non-left turn ▷ remove if not a vertex 19 | * 9. do POP(S) 20 | * 10. PUSH (S, pi) 21 | * 11. return S 22 | * 23 | * 24 | * Source: http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/ConvexHull/GrahamScan/grahamScan.htm 25 | * 26 | * Usage: 27 | * 28 | * //Create a new instance. 29 | * var convexHull = new ConvexHullGrahamScan(); 30 | * 31 | * //add points (needs to be done for each point, a foreach loop on the input array can be used.) 32 | * convexHull.addPoint(item.lon, item.lat); 33 | * 34 | * //getHull() returns the array of points that make up the convex hull. 35 | * var hullPoints = convexHull.getHull(); 36 | */ 37 | 38 | function ConvexHullGrahamScan() { 39 | 40 | this.anchorPoint = undefined; 41 | this.reverse = false; 42 | this.points = []; 43 | } 44 | 45 | 46 | ConvexHullGrahamScan.prototype = { 47 | 48 | constructor: ConvexHullGrahamScan, 49 | 50 | Point: function (x, y) { 51 | this.x = x; 52 | this.y = y; 53 | }, 54 | 55 | _findPolarAngle: function (a, b) { 56 | var ONE_RADIAN = 57.295779513082; 57 | var deltaX = (b.x - a.x); 58 | var deltaY = (b.y - a.y); 59 | 60 | if (deltaX == 0 && deltaY == 0) { 61 | return 0; 62 | } 63 | 64 | var angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN; 65 | 66 | if (this.reverse){ 67 | if (angle <= 0) { 68 | angle += 360; 69 | } 70 | }else{ 71 | if (angle >= 0) { 72 | angle += 360; 73 | } 74 | } 75 | 76 | return angle; 77 | }, 78 | 79 | addPoint: function (x, y) { 80 | //Check to see if anchorPoint has been defined yet. 81 | if (this.anchorPoint === undefined) { 82 | //Create new anchorPoint. 83 | this.anchorPoint = new this.Point(x, y); 84 | 85 | // Sets anchorPoint if point being added is further left. 86 | } else if (this.anchorPoint.y > y || (this.anchorPoint.y == y && this.anchorPoint.x > x)) { 87 | this.anchorPoint.y = y; 88 | this.anchorPoint.x = x; 89 | this.points.unshift(new this.Point(x, y)); 90 | return; 91 | } 92 | 93 | this.points.push(new this.Point(x, y)); 94 | }, 95 | 96 | _sortPoints: function () { 97 | var self = this; 98 | 99 | return this.points.sort(function (a, b) { 100 | var polarA = self._findPolarAngle(self.anchorPoint, a); 101 | var polarB = self._findPolarAngle(self.anchorPoint, b); 102 | 103 | if (polarA < polarB) { 104 | return -1; 105 | } 106 | if (polarA > polarB) { 107 | return 1; 108 | } 109 | 110 | return 0; 111 | }); 112 | }, 113 | 114 | _checkPoints: function (p0, p1, p2) { 115 | var difAngle; 116 | var cwAngle = this._findPolarAngle(p0, p1); 117 | var ccwAngle = this._findPolarAngle(p0, p2); 118 | 119 | if (cwAngle > ccwAngle) { 120 | 121 | difAngle = cwAngle - ccwAngle; 122 | 123 | return !(difAngle > 180); 124 | 125 | } else if (cwAngle < ccwAngle) { 126 | 127 | difAngle = ccwAngle - cwAngle; 128 | 129 | return (difAngle > 180); 130 | 131 | } 132 | 133 | return false; 134 | }, 135 | 136 | getHull: function () { 137 | var hullPoints = [], 138 | points, 139 | pointsLength; 140 | 141 | this.reverse = this.points.every(function(point){ 142 | return (point.x < 0 && point.y < 0); 143 | }); 144 | 145 | points = this._sortPoints(); 146 | pointsLength = points.length; 147 | 148 | //If there are less than 4 points, joining these points creates a correct hull. 149 | if (pointsLength < 4) { 150 | return points; 151 | } 152 | 153 | //move first two points to output array 154 | hullPoints.push(points.shift(), points.shift()); 155 | 156 | //scan is repeated until no concave points are present. 157 | while (true) { 158 | var p0, 159 | p1, 160 | p2; 161 | 162 | hullPoints.push(points.shift()); 163 | 164 | p0 = hullPoints[hullPoints.length - 3]; 165 | p1 = hullPoints[hullPoints.length - 2]; 166 | p2 = hullPoints[hullPoints.length - 1]; 167 | 168 | if (this._checkPoints(p0, p1, p2)) { 169 | hullPoints.splice(hullPoints.length - 2, 1); 170 | } 171 | 172 | if (points.length == 0) { 173 | if (pointsLength == hullPoints.length) { 174 | return hullPoints; 175 | } 176 | points = hullPoints; 177 | pointsLength = points.length; 178 | hullPoints = []; 179 | hullPoints.push(points.shift(), points.shift()); 180 | } 181 | } 182 | } 183 | }; -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.freedraw", 3 | "version": "1.1.14", 4 | "homepage": "https://github.com/Wildhoney/Leaflet.FreeDraw", 5 | "authors": [ 6 | "Adam Timberlake " 7 | ], 8 | "description": "Zoopla inspired freehand polygon creation using Leaflet.js.", 9 | "main": "dist/leaflet.freedraw.js", 10 | "keywords": [ 11 | "leaflet", 12 | "freedraw", 13 | "polygon", 14 | "drawing", 15 | "freehand" 16 | ], 17 | "license": "MIT", 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests" 24 | ], 25 | "dependencies": { 26 | "d3": "~3.4.11", 27 | "leaflet": "~0.7.3", 28 | "graham_scan": "~1.0.2", 29 | "concavehull": "~0.1.2", 30 | "evispa-timo-jsclipper": "*" 31 | }, 32 | "devDependencies": { 33 | "hammerjs": "~2.0.4", 34 | "angular": "~1.3.14", 35 | "underscore": "~1.8.2" 36 | }, 37 | "_release": "1.1.14", 38 | "_resolution": { 39 | "type": "version", 40 | "tag": "v1.1.14", 41 | "commit": "bfa659f4c259ae681d1b6f7204a3560d625e4ab7" 42 | }, 43 | "_source": "git://github.com/Wildhoney/Leaflet.FreeDraw.git", 44 | "_target": "~1.1.14", 45 | "_originalSource": "leaflet.freedraw", 46 | "_direct": true 47 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/EXCEPTIONS.md: -------------------------------------------------------------------------------- 1 | # Passing an `L.Map` instance 2 | 3 | FreeDraw requires access to the `L.Map` instance, and therefore must be passed on instantiation of `FreeDraw`: 4 | 5 | ```javascript 6 | var map = L.map(mapContainer).setView([51.505, -0.09], 13); 7 | freeDraw = new FreeDraw(map); 8 | ``` -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | 5 | /** 6 | * @property pkg 7 | * @type {Object} 8 | */ 9 | pkg: grunt.file.readJSON('package.json'), 10 | 11 | /** 12 | * @property jshint 13 | * @type {Object} 14 | */ 15 | jshint: { 16 | all: 'components/*.js', 17 | options: { 18 | jshintrc: '.jshintrc' 19 | } 20 | }, 21 | 22 | /** 23 | * @property uglify 24 | * @type {Object} 25 | */ 26 | uglify: { 27 | options: { 28 | banner: '/*! <%= pkg.name %> by <%= pkg.author %> created on <%= grunt.template.today("yyyy-mm-dd") %> */\n' 29 | }, 30 | build: { 31 | src: ['dist/<%= pkg.name %>-src.js'], 32 | dest: 'dist/<%= pkg.name %>.js' 33 | } 34 | }, 35 | 36 | /** 37 | * @property compress 38 | * @type {Object} 39 | */ 40 | compress: { 41 | main: { 42 | options: { 43 | archive: 'releases/<%= pkg.version %>.zip' 44 | }, 45 | files: [ 46 | { flatten: true, src: 'dist/<%= pkg.name %>.js', dest: './', filter: 'isFile' } 47 | ] 48 | } 49 | }, 50 | 51 | /** 52 | * @property jasmine 53 | * @type {Object} 54 | */ 55 | jasmine: { 56 | components: { 57 | src: ['components/FreeDraw.js', 'components/*.js'], 58 | options: { 59 | specs: 'tests/JasmineTests.js', 60 | helpers: ['example/js/vendor/leaflet/dist/leaflet-src.js', 61 | 'example/js/vendor/concavehull/dist/concavehull.js', 62 | 'example/js/vendor/d3/d3.js', 63 | 'example/js/vendor/evispa-timo-jsclipper/clipper_unminified.js'] 64 | } 65 | } 66 | }, 67 | 68 | /** 69 | * @property karma 70 | * @type {Object} 71 | */ 72 | karma: { 73 | components: { 74 | configFile: 'karma.conf.js', 75 | background: false, 76 | browsers: ['Firefox'] 77 | } 78 | }, 79 | 80 | /** 81 | * @property concat 82 | * @type {Object} 83 | */ 84 | concat: { 85 | options: { 86 | separator: '\n\n' 87 | }, 88 | dist: { 89 | src: ['components/FreeDraw.js', 'components/*.js'], 90 | dest: 'dist/<%= pkg.name %>-src.js' 91 | } 92 | }, 93 | 94 | /** 95 | * @property copy 96 | * @type {Object} 97 | */ 98 | copy: { 99 | vendor: { 100 | expand: true, 101 | flatten: true, 102 | src: ['components/*'], 103 | dest: 'example/js/vendor/<%= pkg.name %>', 104 | filter: 'isFile' 105 | } 106 | }, 107 | 108 | /** 109 | * @property watch 110 | * @type {Object} 111 | */ 112 | watch: { 113 | scripts: { 114 | files: ['components/*.js'], 115 | tasks: ['build'], 116 | options: { 117 | spawn: false 118 | } 119 | } 120 | } 121 | 122 | }); 123 | 124 | grunt.loadNpmTasks('grunt-karma'); 125 | grunt.loadNpmTasks('grunt-contrib-uglify'); 126 | grunt.loadNpmTasks('grunt-contrib-jshint'); 127 | grunt.loadNpmTasks('grunt-contrib-compress'); 128 | grunt.loadNpmTasks('grunt-contrib-concat'); 129 | grunt.loadNpmTasks('grunt-contrib-copy'); 130 | grunt.loadNpmTasks('grunt-contrib-jasmine'); 131 | grunt.loadNpmTasks('grunt-contrib-watch'); 132 | 133 | grunt.registerTask('build', ['concat', 'uglify', 'copy', 'compress']); 134 | grunt.registerTask('test', ['jshint', 'jasmine', 'karma']); 135 | grunt.registerTask('default', ['test', 'build']); 136 | 137 | }; -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Adam Timberlake 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 all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 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 THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/Procfile: -------------------------------------------------------------------------------- 1 | web: node example/server/default.js -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/README.md: -------------------------------------------------------------------------------- 1 | Leaflet.FreeDraw 2 | ================ 3 | 4 | ![Travis](http://img.shields.io/travis/Wildhoney/Leaflet.FreeDraw.svg?style=flat) 5 |   6 | ![npm](http://img.shields.io/npm/v/leaflet.freedraw.svg?style=flat) 7 |   8 | ![MIT License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat) 9 |   10 | ![IE9+](http://img.shields.io/badge/support-IE9-blue.svg?style=flat) 11 | 12 | * **Heroku**: [http://freedraw.herokuapp.com/](http://freedraw.herokuapp.com/) 13 | * **Bower:** `bower install leaflet.freedraw`; 14 | 15 | Use [Leaflet.draw](https://github.com/Leaflet/Leaflet.draw) for drawing pre-defined polygons and linear shapes – `Leaflet.FreeDraw`'s selling point is that it allows you to freely draw a polygon like [Zoopla](http://www.zoopla.co.uk/for-sale/map/property/london/?include_retirement_homes=true&include_shared_ownership=true&new_homes=include&q=London&results_sort=newest_listings&search_source=home&pn=1&view_type=map). Hulls are also supported to normalise polygons when users draw an insane polygon – currently `Leaflet.FreeDraw` supports Brian Barnett's [Graham Scan module](https://github.com/brian3kb/graham_scan_js) and my adaptation of the [concave hull algorithm](https://github.com/Wildhoney/ConcaveHull). 16 | 17 | `L.FreeDraw` has been tested in IE9+ 18 | 19 | **Note:** For drawing polylines instead, try [`L.Pather`](https://github.com/Wildhoney/L.Pather). 20 | 21 | ![FreeDraw Screenshot](http://i.imgur.com/5ab3P4j.png) 22 | 23 | --- 24 | 25 | ## Getting Started 26 | 27 | `L.FreeDraw` follows the same convention as other modules, and therefore you should invoke the `addLayer` on your map instance – passing in an instance of `L.FreeDraw`. 28 | 29 | ```javascript 30 | // Create Leaflet.js instance and then add FreeDraw on top. 31 | var map = L.map('map').setView([51.505, -0.09], 14); 32 | map.addLayer(new L.FreeDraw()); 33 | ``` 34 | 35 | Upon instantiation of `L.FreeDraw` you can immediately define the mode – with the default being `L.FreeDraw.MODES.VIEW` – please see [modes](#modes) for more information. 36 | 37 | ```javascript 38 | // Allow the user to only create and edit polygons. 39 | map.addLayer(new L.FreeDraw({ 40 | mode: L.FreeDraw.MODES.CREATE | L.FreeDraw.MODES.EDIT 41 | })); 42 | ``` 43 | 44 | Worth noting is that Leaflet.js often ships with `new`able equivalents – such as `L.map` for `new L.Map` — [see why here](http://37.media.tumblr.com/6a9fcffde2da977266b0ea99b15d5803/tumblr_n42cjjsriB1smcbm7o1_400.gif) — `L.FreeDraw` follows the same convention and provides a convenient `L.freeDraw` method for instantiating `L.FreeDraw` for you whilst passing through the options. 45 | 46 | ![Washes Right Off](http://images1.fanpop.com/images/photos/2500000/Calvin-and-Hobbes-Comic-Strips-calvin-and-hobbes-2509598-600-191.gif) 47 | 48 | Furthermore by invoking the `cancelAction` method you can cancel the current action – such as drawing a polygon – this method is especially useful for allowing the user to cancel their action by pressing the escape key. 49 | 50 | ## Fetching Markers 51 | 52 | Once the user has created, deleted, or edited a polygon, you'll likely wish to load in markers based on the polygons visible – with `L.FreeDraw` the event `markers` is emitted with an array of `L.LatLng` objects in the first argument as `eventData.latLngs`: 53 | 54 | ```javascript 55 | freeDraw.on('markers', function getMarkers(eventData) { 56 | var latLngs = eventData.latLngs; 57 | // ... 58 | }); 59 | ``` 60 | 61 | Once you have your markers it's entirely up to you to add them to your Leaflet.js map using the [marker methods](http://leafletjs.com/reference.html#marker). 62 | 63 | ## Options 64 | 65 | FreeDraw has quite a few options – all of which can be seen by taking a look at the `L.FreeDraw.Options` object. However, there are certain options that you are likely to use more than others. 66 | 67 | ```javascript 68 | // Prevent the rendering of the polygon via a convex/concave hull. 69 | freeDraw.options.setHullAlgorithm(false); 70 | 71 | // Utilise Brian Barnett's convex hull. 72 | freeDraw.options.setHullAlgorithm('brian3kb/graham_scan_js'); 73 | 74 | // ...Or my adaptation of the concave hull. 75 | freeDraw.options.setHullAlgorithm('Wildhoney/ConcaveHull'); 76 | ``` 77 | 78 | For the hull algorithm implementations, take a look at the [following paper](http://ubicomp.algoritmi.uminho.pt/local/concavehull.html) on convex hulls and concave hulls. 79 | 80 | All of the polygons drawn with `L.FreeDraw` can be modified using the options and [standard CSS](http://tutorials.jenkov.com/svg/svg-and-css.html). 81 | 82 | Once the user has drawn their free-hand drawing, it is converted into a polygon by Leaflet.js – you can define how smooth the rendered polygon is by using the `setSmoothFactor` method – by default the `smoothFactor` is **5**. 83 | 84 | ### Polygon Mutation 85 | 86 | When a user is modifying a polygon the `markers` event is emitted each and every time – which may be overkill, especially if your requests are somewhat time consuming. In this case `L.FreeDraw` allows you to defer the fetching of markers for when the edit mode has been exited with `freeDraw.options.setBoundariesAfterEdit(true)`. 87 | 88 | ### Polygon Intersection 89 | 90 | By invoking the `freeDraw.allowPolygonMerging(true)` method, `L.FreeDraw` will attempt to join up any polygons that intersect. 91 | 92 | ### Exit Create Mode 93 | 94 | After drawing a polygon the `L.FreeDraw.MODES.CREATE` mode will automatically be exited – but this can be suppressed by specifying `freeDraw.options.exitModeAfterCreate(false)` in which case the create mode will be persisted until the user explicitly exits it. 95 | 96 | ## Modes 97 | 98 | FreeDraw by default uses the `L.FreeDraw.MODES.VIEW` mode which prevents the user from creating, editing, or deleting any polygons. When instantiating `L.FreeDraw` you may override the default mode – in the following case a user may **only** delete polygons: 99 | 100 | ```javascript 101 | var freeDraw = new L.FreeDraw({ 102 | mode: L.FreeDraw.MODES.DELETE 103 | }); 104 | ``` 105 | 106 | In specifying the mode you are using [bitwise operators](http://en.wikipedia.org/wiki/Bitwise_operation) with the mapping being as follows: 107 | 108 | ```javascript 109 | L.FreeDraw.MODES = { 110 | VIEW: 1, 111 | CREATE: 2, 112 | EDIT: 4, 113 | DELETE: 8, 114 | APPEND: 16, 115 | EDIT_APPEND: 4 | 16, 116 | ALL: 1 | 2 | 4 | 8 | 16 117 | } 118 | ``` 119 | 120 | Therefore you're able to combine the bitwise operators to specify multiple modes. For example, if you would like to allow the user to create and delete, then you would specify the options as `L.FreeDraw.MODES.CREATE | L.FreeDraw.MODES.DELETE`. By allowing a user to perform every action you would have to concatenate all of the modes via the pipe (`|`) character – therefore `L.FreeDraw` provides the convenient `L.FreeDraw.MODES.ALL` property which does that for you. 121 | 122 | Using the `L.FreeDraw.MODES.ALL` property you could easily enable all the modes **except** edit with the following: `L.FreeDraw.MODES.ALL ^ L.FreeDraw.MODES.EDIT`. 123 | 124 | All modes allow the user to zoom and drag **except** when you have the `L.FreeDraw.MODES.CREATE` enabled – even when used in conjunction with other modes. 125 | 126 | It's quite likely that you'll want to change the mode as the user interacts with your application – for this you have the `setMode` method which accepts an aforementioned bitwise operator for determining what actions the user is able to perform. 127 | 128 | ```javascript 129 | // Change the mode to allow the user to only edit and delete polygons. 130 | var freeDraw = new L.FreeDraw(); 131 | freeDraw.setMode(L.FreeDraw.MODES.EDIT | L.FreeDraw.MODES.DELETE); 132 | ``` 133 | 134 | `L.FreeDraw` also ships with the `freeDraw.unsetMode` for unsetting a mode based on the current mode. 135 | 136 | You may also listen to updates of the mode using the `freeDraw.on('mode')` event. 137 | 138 | ### Elbow Creation 139 | 140 | Using the `L.FreeDraw.MODES.APPEND` mode you can allow users to create new edges on the polygon. If both the `L.FreeDraw.MODES.APPEND` and `L.FreeDraw.MODES.DELETE` modes are active at the same time then some logic is applied to decide whether the user wishes to delete or create a new edge. However if `L.FreeDraw.MODES.APPEND` is active and `L.FreeDraw.MODES.DELETE` is not then any click on the polygon will create a new edge – and vice-versa for the inverse. 141 | 142 | If you would like to control the edge size in which a new polygon will be created when both aforementioned modes are active, you can do so using the `setMaximumDistanceForElbow` method where the default is currently set to **10**. 143 | 144 | Even when the `L.FreeDraw.MODES.APPEND` mode is active exclusively, you still may not wish for **any** click to add a new elbow, and therefore by enabling the `addElbowOnlyWithinDistance` mode a click on the polygon will stay pay attention to the `setMaximumDistanceForElbow` value. 145 | 146 | ### Class Names 147 | 148 | Depending on the mode you can apply different CSS styles – for example when the user is not in edit mode you probably wish to hide the edges – by default all edges would be hidden, and only enabled when the `mode-edit` class has been applied to the `map` node: 149 | 150 | ```css 151 | section.map.mode-edit div.polygon-elbow { 152 | opacity: 1; 153 | pointer-events: all; 154 | } 155 | ``` 156 | 157 | Each mode maps to a different class which is conditionally applied to the `map` based on whether that mode is active: 158 | 159 | * `mode-view` maps to `L.FreeDraw.MODES.VIEW`; 160 | * `mode-create` maps to `L.FreeDraw.MODES.CREATE`; 161 | * `mode-edit` maps to `L.FreeDraw.MODES.EDIT`; 162 | * `mode-delete` maps to `L.FreeDraw.MODES.DELETE`; 163 | * `mode-append` maps to `L.FreeDraw.MODES.APPEND`; 164 | 165 | Another example would be changing the `cursor` type when the user is in polygon creation mode: 166 | 167 | ```css 168 | section.map.mode-create { 169 | cursor: crosshair; 170 | } 171 | ``` 172 | 173 | You may change the class name of the polygon edges with the `setIconClassName` method, and the SVG class name with `setSVGClassName`. 174 | 175 | # Common Issues 176 | 177 | ## Invisible Drawing Path 178 | 179 | When you're drawing a polygon on the map, the path that is being drawn is invisible – this is caused by a handful of missing styles that you need to apply to the `svg.tracer` node: 180 | 181 | ```css 182 | svg.tracer { 183 | position: absolute; 184 | top: 0; 185 | left: 0; 186 | width: 100%; 187 | height: 100%; 188 | } 189 | ``` 190 | 191 | It's worth noting that the above style properties may well be changed to suit your circumstances, but this is a good starting point. 192 | -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.freedraw", 3 | "version": "1.1.14", 4 | "homepage": "https://github.com/Wildhoney/Leaflet.FreeDraw", 5 | "authors": [ 6 | "Adam Timberlake " 7 | ], 8 | "description": "Zoopla inspired freehand polygon creation using Leaflet.js.", 9 | "main": "dist/leaflet.freedraw.js", 10 | "keywords": [ 11 | "leaflet", 12 | "freedraw", 13 | "polygon", 14 | "drawing", 15 | "freehand" 16 | ], 17 | "license": "MIT", 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests" 24 | ], 25 | "dependencies": { 26 | "d3": "~3.4.11", 27 | "leaflet": "~0.7.3", 28 | "graham_scan": "~1.0.2", 29 | "concavehull": "~0.1.2", 30 | "evispa-timo-jsclipper": "*" 31 | }, 32 | "devDependencies": { 33 | "hammerjs": "~2.0.4", 34 | "angular": "~1.3.14", 35 | "underscore": "~1.8.2" 36 | } 37 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/components/Hull.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module FreeDraw 7 | * @submodule Hull 8 | * @author Adam Timberlake 9 | * @link https://github.com/Wildhoney/Leaflet.FreeDraw 10 | * @constructor 11 | */ 12 | L.FreeDraw.Hull = function FreeDrawHull() {}; 13 | 14 | /** 15 | * @property prototype 16 | * @type {Object} 17 | */ 18 | L.FreeDraw.Hull.prototype = { 19 | 20 | /** 21 | * @property map 22 | * @type {L.Map|null} 23 | */ 24 | map: null, 25 | 26 | /** 27 | * @method setMap 28 | * @param map {L.Map} 29 | * @return {void} 30 | */ 31 | setMap: function setMap(map) { 32 | this.map = map; 33 | }, 34 | 35 | /** 36 | * @link https://github.com/brian3kb/graham_scan_js 37 | * @method brian3kbGrahamScan 38 | * @param latLngs {L.LatLng[]} 39 | * @return {L.LatLng[]} 40 | */ 41 | brian3kbGrahamScan: function brian3kbGrahamScan(latLngs) { 42 | 43 | var convexHull = new ConvexHullGrahamScan(), 44 | resolvedPoints = [], 45 | points = [], 46 | hullLatLngs = []; 47 | 48 | latLngs.forEach(function forEach(latLng) { 49 | 50 | // Resolve each latitude/longitude to its respective container point. 51 | points.push(this.map.latLngToLayerPoint(latLng)); 52 | 53 | }.bind(this)); 54 | 55 | points.forEach(function forEach(point) { 56 | convexHull.addPoint(point.x, point.y); 57 | }.bind(this)); 58 | 59 | var hullPoints = convexHull.getHull(); 60 | 61 | hullPoints.forEach(function forEach(hullPoint) { 62 | resolvedPoints.push(L.point(hullPoint.x, hullPoint.y)); 63 | }.bind(this)); 64 | 65 | // Create an unbroken polygon. 66 | resolvedPoints.push(resolvedPoints[0]); 67 | 68 | resolvedPoints.forEach(function forEach(point) { 69 | hullLatLngs.push(this.map.layerPointToLatLng(point)); 70 | }.bind(this)); 71 | 72 | return hullLatLngs; 73 | 74 | }, 75 | 76 | /** 77 | * @link https://github.com/Wildhoney/ConcaveHull 78 | * @method wildhoneyConcaveHull 79 | * @param latLngs {L.LatLng[]} 80 | * @return {L.LatLng[]} 81 | */ 82 | wildhoneyConcaveHull: function wildhoneyConcaveHull(latLngs) { 83 | latLngs.push(latLngs[0]); 84 | return new ConcaveHull(latLngs).getLatLngs(); 85 | } 86 | 87 | } 88 | 89 | }()); -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/components/Memory.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module FreeDraw 7 | * @submodule Memory 8 | * @author Adam Timberlake 9 | * @link https://github.com/Wildhoney/Leaflet.FreeDraw 10 | * @constructor 11 | */ 12 | L.FreeDraw.Memory = function FreeDrawMemory() {}; 13 | 14 | /** 15 | * @property prototype 16 | * @type {Object} 17 | */ 18 | L.FreeDraw.Memory.prototype = { 19 | 20 | /** 21 | * @property states 22 | * @type {Array} 23 | */ 24 | states: [[]], 25 | 26 | /** 27 | * @property current 28 | * @type {Number} 29 | */ 30 | current: 0, 31 | 32 | /** 33 | * @method save 34 | * @param polygons {Array} 35 | * @return {void} 36 | */ 37 | save: function save(polygons) { 38 | 39 | this.current++; 40 | 41 | if (this.states[this.current]) { 42 | 43 | // If the current state exists then the user has started to overwrite their 44 | // redo history, which is expected behaviour. With that in mind, let's remove 45 | // the states before the current! 46 | this.clearFrom(this.current); 47 | 48 | } 49 | 50 | if (!this.states[this.current]) { 51 | 52 | // Otherwise the index is currently empty and therefore we should initialise it 53 | // to an empty array. 54 | this.states[this.current] = []; 55 | 56 | } 57 | 58 | polygons.forEach(function forEach(polygon) { 59 | 60 | // Each polygon is represented as a separate entry in the array. 61 | this.states[this.current].push(polygon._latlngs); 62 | 63 | }.bind(this)); 64 | 65 | }, 66 | 67 | /** 68 | * Responsible for rewinding the state and returning the current state. 69 | * 70 | * @method previous 71 | * @return {Array} 72 | */ 73 | undo: function undo() { 74 | 75 | this.current--; 76 | 77 | if (!this.states[this.current]) { 78 | 79 | // Index doesn't exist in the state array. 80 | this.current++; 81 | 82 | } 83 | return this.states[this.current]; 84 | 85 | }, 86 | 87 | /** 88 | * @method canUndo 89 | * @return {Boolean} 90 | */ 91 | canUndo: function canUndo() { 92 | return !!this.states[this.current - 1]; 93 | }, 94 | 95 | /** 96 | * Responsible for fast-forwarding the state and returning the current state. 97 | * 98 | * @method previous 99 | * @return {Array} 100 | */ 101 | redo: function redo() { 102 | 103 | this.current++; 104 | 105 | if (!this.states[this.current]) { 106 | 107 | // Index doesn't exist in the state array. 108 | this.current--; 109 | 110 | } 111 | 112 | return this.states[this.current]; 113 | 114 | }, 115 | 116 | /** 117 | * @method canRedo 118 | * @return {Boolean} 119 | */ 120 | canRedo: function canRedo() { 121 | return !!this.states[this.current + 1]; 122 | }, 123 | 124 | /** 125 | * Responsible for clearing the history from a given index, including the index supplied. 126 | * 127 | * @method clearFrom 128 | * @param index {Number} 129 | * @return {void} 130 | */ 131 | clearFrom: function clearFrom(index) { 132 | this.states.splice(index); 133 | } 134 | 135 | }; 136 | 137 | })(); -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/components/Options.js: -------------------------------------------------------------------------------- 1 | (function($window, L) { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module FreeDraw 7 | * @submodule Options 8 | * @author Adam Timberlake 9 | * @link https://github.com/Wildhoney/Leaflet.FreeDraw 10 | * @constructor 11 | */ 12 | L.FreeDraw.Options = function FreeDrawOptions() {}; 13 | 14 | /** 15 | * @property prototype 16 | * @type {Object} 17 | */ 18 | L.FreeDraw.Options.prototype = { 19 | 20 | /** 21 | * @property multiplePolygons 22 | * @type {Boolean} 23 | */ 24 | multiplePolygons: true, 25 | 26 | /** 27 | * @property events 28 | * @type {Array} 29 | */ 30 | events: [], 31 | 32 | /** 33 | * @property simplifyPolygon 34 | * @type {Boolean} 35 | */ 36 | simplifyPolygon: true, 37 | 38 | /** 39 | * @property invalidLength 40 | * @type {Boolean} 41 | */ 42 | invalidLength: 3, 43 | 44 | /** 45 | * @property hullAlgorithm 46 | * @type {String|Boolean} 47 | */ 48 | hullAlgorithm: 'wildhoneyConcaveHull', 49 | 50 | /** 51 | * @property boundariesAfterEdit 52 | * @type {Boolean} 53 | */ 54 | boundariesAfterEdit: false, 55 | 56 | /** 57 | * @property createExitMode 58 | * @type {Boolean} 59 | */ 60 | createExitMode: true, 61 | 62 | /** 63 | * @property attemptMerge 64 | * @type {Boolean} 65 | */ 66 | attemptMerge: true, 67 | 68 | /** 69 | * @property smoothFactor 70 | * @type {Number} 71 | */ 72 | smoothFactor: 5, 73 | 74 | /** 75 | * @property iconClassName 76 | * @type {String} 77 | */ 78 | iconClassName: 'polygon-elbow', 79 | 80 | /** 81 | * @property svgClassName 82 | * @type {String} 83 | */ 84 | svgClassName: 'tracer', 85 | 86 | /** 87 | * @property polygonClassName 88 | * @type {String} 89 | */ 90 | polygonClassName: 'tracer', 91 | 92 | /** 93 | * @property deleteExitMode 94 | * @type {Boolean} 95 | */ 96 | deleteExitMode: false, 97 | 98 | /** 99 | * @property memoriseEachEdge 100 | * @type {Boolean} 101 | */ 102 | memoriseEachEdge: true, 103 | 104 | /** 105 | * @property destroyPrevious 106 | * @type {Boolean} 107 | */ 108 | destroyPrevious: false, 109 | 110 | /** 111 | * @property disablePropagation 112 | * @type {Boolean} 113 | */ 114 | disablePropagation: false, 115 | 116 | /** 117 | * @property elbowDistance 118 | * @type {Number} 119 | */ 120 | elbowDistance: 10, 121 | 122 | /** 123 | * @property onlyInDistance 124 | * @type {Boolean} 125 | */ 126 | onlyInDistance: false, 127 | 128 | /** 129 | * @property hullAlgorithms 130 | * @type {Object} 131 | */ 132 | hullAlgorithms: { 133 | 134 | /** 135 | * @property brian3kb/graham_scan_js 136 | * @type {Object} 137 | */ 138 | 'brian3kb/graham_scan_js': { 139 | method: 'brian3kbGrahamScan', 140 | name: 'Graham Scan JS', 141 | global: 'ConvexHullGrahamScan', 142 | link: 'https://github.com/brian3kb/graham_scan_js' 143 | }, 144 | 145 | /** 146 | * @property Wildhoney/ConcaveHull 147 | * @type {Object} 148 | */ 149 | 'Wildhoney/ConcaveHull': { 150 | method: 'wildhoneyConcaveHull', 151 | name: 'Concave Hull', 152 | global: 'ConcaveHull', 153 | link: 'https://github.com/Wildhoney/ConcaveHull' 154 | } 155 | 156 | }, 157 | 158 | /** 159 | * @method setEvents 160 | * @param {Array} eventMap 161 | * @return {void} 162 | */ 163 | setEvents: function setEvents(eventMap) { 164 | this.events = eventMap; 165 | }, 166 | 167 | /** 168 | * @method setMemoriseEachEdge 169 | * @param value {Boolean} 170 | * @return {void} 171 | */ 172 | setMemoriseEachEdge: function setMemoriseEachEdge(value) { 173 | this.memoriseEachEdge = !!value; 174 | }, 175 | 176 | /** 177 | * @method addElbowOnlyWithinDistance 178 | * @param value {Boolean} 179 | */ 180 | addElbowOnlyWithinDistance: function addElbowOnlyWithinDistance(value) { 181 | this.onlyInDistance = !!value; 182 | }, 183 | 184 | /** 185 | * @method setPathClipperPadding 186 | * @param value {Number} 187 | * @return {void} 188 | */ 189 | setPathClipperPadding: function setPathClipperPadding(value) { 190 | 191 | // Prevent polygons outside of the viewport from being clipped. 192 | L.Path.CLIP_PADDING = value; 193 | 194 | }, 195 | 196 | /** 197 | * @method disableStopPropagation 198 | * @return {void} 199 | */ 200 | disableStopPropagation: function disableStopPropagation() { 201 | this.disablePropagation = true; 202 | }, 203 | 204 | /** 205 | * @method setMaximumDistanceForElbow 206 | * @param maxDistance {Number} 207 | * @return {void} 208 | */ 209 | setMaximumDistanceForElbow: function setMaximumDistanceForElbow(maxDistance) { 210 | this.elbowDistance = +maxDistance; 211 | }, 212 | 213 | /** 214 | * @method exitModeAfterCreate 215 | * @param value {Boolean} 216 | * @return {void} 217 | */ 218 | exitModeAfterCreate: function exitModeAfterCreate(value) { 219 | this.createExitMode = !!value; 220 | }, 221 | 222 | /** 223 | * @method exitModeAfterDelete 224 | * @param value {Boolean} 225 | * @return {void} 226 | */ 227 | exitModeAfterDelete: function exitModeAfterDelete(value) { 228 | this.deleteExitMode = !!value; 229 | }, 230 | 231 | /** 232 | * @method destroyPreviousPolygon 233 | * @param value {Boolean} 234 | * @return {void} 235 | */ 236 | destroyPreviousPolygon: function destroyPreviousPolygon(value) { 237 | this.destroyPrevious = !!value; 238 | }, 239 | 240 | /** 241 | * @method allowMultiplePolygons 242 | * @param allow {Boolean} 243 | * @return {void} 244 | */ 245 | allowMultiplePolygons: function allowMultiplePolygons(allow) { 246 | this.multiplePolygons = !!allow; 247 | }, 248 | 249 | /** 250 | * @method setSVGClassName 251 | * @param className {String} 252 | * @return {void} 253 | */ 254 | setSVGClassName: function setSVGClassName(className) { 255 | this.svgClassName = className; 256 | }, 257 | 258 | /** 259 | * @method setBoundariesAfterEdit 260 | * @param value {Boolean} 261 | * @return {void} 262 | */ 263 | setBoundariesAfterEdit: function setBoundariesAfterEdit(value) { 264 | this.boundariesAfterEdit = !!value; 265 | }, 266 | 267 | /** 268 | * @method smoothFactor 269 | * @param factor {Number} 270 | * @return {void} 271 | */ 272 | setSmoothFactor: function setSmoothFactor(factor) { 273 | this.smoothFactor = +factor; 274 | }, 275 | 276 | /** 277 | * @method setIconClassName 278 | * @param className {String} 279 | * @return {void} 280 | */ 281 | setIconClassName: function setIconClassName(className) { 282 | this.iconClassName = className; 283 | }, 284 | 285 | /** 286 | * @method setPolygonClassName 287 | * @param className {String} 288 | * @return {void} 289 | */ 290 | setPolygonClassName: function setPolygonClassName(className) { 291 | this.polygonClassName = className; 292 | }, 293 | 294 | /** 295 | * @method setHullAlgorithm 296 | * @param algorithm {String|Boolean} 297 | * @return {void} 298 | */ 299 | setHullAlgorithm: function setHullAlgorithm(algorithm) { 300 | 301 | if (algorithm && !this.hullAlgorithms.hasOwnProperty(algorithm)) { 302 | 303 | // Ensure the passed algorithm is valid. 304 | return; 305 | 306 | } 307 | 308 | if (!algorithm) { 309 | this.hullAlgorithm = false; 310 | return; 311 | } 312 | 313 | // Resolve the hull algorithm. 314 | algorithm = this.hullAlgorithms[algorithm]; 315 | 316 | if (typeof $window[algorithm.global] === 'undefined') { 317 | 318 | // Ensure hull algorithm module has been included. 319 | L.FreeDraw.Throw(algorithm.name + ' is a required library for concave/convex hulls', algorithm.link); 320 | 321 | } 322 | 323 | this.hullAlgorithm = algorithm.method; 324 | 325 | } 326 | 327 | }; 328 | 329 | })(window, window.L); -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/components/Utilities.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | "use strict"; 4 | 5 | /** 6 | * @module FreeDraw 7 | * @submodule Utilities 8 | * @author Adam Timberlake 9 | * @link https://github.com/Wildhoney/Leaflet.FreeDraw 10 | */ 11 | L.FreeDraw.Utilities = { 12 | 13 | /** 14 | * Responsible for converting the multiple polygon points into a MySQL object for 15 | * geo-spatial queries. 16 | * 17 | * @method getMySQLMultiPolygon 18 | * @param latLngGroups {Array} 19 | * @return {String} 20 | */ 21 | getMySQLMultiPolygon: function getMySQLMultiPolygon(latLngGroups) { 22 | 23 | var groups = []; 24 | 25 | latLngGroups.forEach(function forEach(latLngs) { 26 | 27 | var group = []; 28 | 29 | latLngs.forEach(function forEach(latLng) { 30 | group.push(latLng.lng + ' ' + latLng.lat); 31 | }); 32 | 33 | groups.push('((' + group.join(',') + '))'); 34 | 35 | }); 36 | 37 | return 'MULTIPOLYGON(' + groups.join(',') + ')'; 38 | 39 | }, 40 | 41 | /** 42 | * Responsible to generating disparate MySQL polygons from the lat/long boundaries. 43 | * 44 | * @method getMySQLPolygons 45 | * @param latLngGroups {L.LatLng[]} 46 | * @returns {Array} 47 | */ 48 | getMySQLPolygons: function getMySQLPolygons(latLngGroups) { 49 | 50 | var groups = []; 51 | 52 | latLngGroups.forEach(function forEach(latLngs) { 53 | 54 | var group = []; 55 | 56 | latLngs.forEach(function forEach(latLng) { 57 | group.push(latLng.lng + ' ' + latLng.lat); 58 | }); 59 | 60 | groups.push('POLYGON((' + group.join(',') + '))'); 61 | 62 | }); 63 | 64 | return groups; 65 | 66 | }, 67 | 68 | /** 69 | * Responsible to generating JSON object for geo-spatial queries. 70 | * 71 | * @method getMySQLPolygons 72 | * @param latLngGroups {L.LatLng[]} 73 | * @returns {Hash} 74 | */ 75 | 76 | getJsonPolygons: function getJsonPolygons(latLngGroups) { 77 | 78 | var groups = []; 79 | 80 | latLngGroups.forEach(function forEach(latLngs) { 81 | 82 | var group = []; 83 | 84 | latLngs.forEach(function forEach(latLng) { 85 | group.push('[' + latLng.lng + ', ' + latLng.lat + ']'); 86 | }); 87 | 88 | groups.push('{ "latLngs": [' + group.join(', ') + '] }'); 89 | 90 | }); 91 | 92 | return groups; 93 | 94 | } 95 | 96 | 97 | }; 98 | 99 | })(); 100 | -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/css/Default.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | 7 | body, html { 8 | overflow: hidden; 9 | } 10 | 11 | a { 12 | color: dodgerblue; 13 | } 14 | 15 | section.information { 16 | width: 100%; 17 | height: 100%; 18 | top: 0; 19 | right: -100%; 20 | background-color: white; 21 | z-index: 20001; 22 | position: absolute; 23 | padding: 15px 25px; 24 | cursor: default; 25 | } 26 | 27 | section.information h1 { 28 | font-family: Lato, Arial, Helvetica, sans-serif; 29 | text-transform: uppercase; 30 | font-size: 22px; 31 | } 32 | 33 | section.information h2 { 34 | font-family: Times New Roman, Times, serif; 35 | font-size: 11px; 36 | font-style: italic; 37 | font-weight: normal; 38 | margin-top: -2px; 39 | } 40 | 41 | section.information p.description { 42 | font-family: Lato, Arial, Helvetica, sans-serif; 43 | font-size: 12px; 44 | margin: 8px 0 0 0; 45 | } 46 | 47 | section.information h3.modes { 48 | margin-top: 20px; 49 | } 50 | 51 | section.information label.toggle-modes { 52 | background-color: rgba(0, 0, 0, .2); 53 | font-size: 10px; 54 | text-transform: uppercase; 55 | margin-top: 10px; 56 | display: inline-block; 57 | color: white; 58 | text-shadow: 1px 1px 0 rgba(0, 0, 0, .1); 59 | border-radius: 3px; 60 | padding: 2px 8px; 61 | } 62 | 63 | section.information ul.controls { 64 | list-style-type: square; 65 | margin: 15px 0 0 25px; 66 | } 67 | 68 | section.information ul.controls li { 69 | font-family: Lato, Arial, Helvetica, sans-serif; 70 | font-size: 14px; 71 | } 72 | 73 | section.information ul.controls li.disabled a { 74 | color: rgba(0, 0, 0, .35); 75 | } 76 | 77 | section.information ul.controls li a { 78 | cursor: pointer; 79 | transition: color .25s; 80 | } 81 | 82 | section.information ul.controls li:not(.disabled) a:hover { 83 | color: black; 84 | } 85 | 86 | section.information ul.controls li span.only { 87 | color: rgba(0, 0, 0, .25); 88 | font-size: 10px; 89 | margin-left: 5px; 90 | cursor: pointer; 91 | transition: color .25s; 92 | } 93 | 94 | section.information ul.controls li span.only:hover { 95 | color: rgba(0, 0, 0, .35); 96 | } 97 | 98 | section.information span.current-mode { 99 | color: rgba(0, 0, 0, .25); 100 | font-size: 10px; 101 | margin-left: 10px; 102 | } 103 | 104 | section.git-hub { 105 | margin-top: 60px; 106 | opacity: .65; 107 | } 108 | 109 | section.git-hub img { 110 | width: 200px; 111 | } 112 | 113 | section.git-hub a { 114 | text-decoration: none; 115 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/css/Map.css: -------------------------------------------------------------------------------- 1 | section.map { 2 | position: absolute; 3 | left: 0; 4 | top: 0; 5 | width: 50%; 6 | overflow: visible; 7 | height: 100%; 8 | } 9 | 10 | section.map section.overlay { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | pointer-events: none; 15 | box-shadow: inset -100px 0 100px -100px rgba(0, 0, 0, .25); 16 | width: 100%; 17 | height: 100%; 18 | z-index: 2001; 19 | } 20 | 21 | section.map.mode-create { 22 | cursor: crosshair !important; 23 | } 24 | 25 | section.map g path { 26 | transition: all 0.25s; 27 | stroke-width: 4px; 28 | stroke-opacity: 1; 29 | stroke: #D7217E; 30 | position: absolute; 31 | z-index: 1001; 32 | fill: #D7217E; 33 | fill-opacity: .75; 34 | -webkit-filter: none; 35 | } 36 | 37 | section.map.mode-delete path { 38 | cursor: no-drop !important; 39 | } 40 | 41 | section.map.mode-delete path:hover { 42 | fill: #4d4d4d !important; 43 | } 44 | 45 | section.map div.polygon-elbow { 46 | -webkit-transition: opacity .25s; 47 | box-shadow: 0 0 0 2px white, 0 0 10px rgba(0, 0, 0, .35); 48 | border: 5px solid #D7217E; 49 | border-radius: 10px; 50 | transition: opacity 0.25s; 51 | cursor: move; 52 | opacity: 0; 53 | pointer-events: none; 54 | box-sizing: border-box; 55 | width: 0 !important; 56 | height: 0 !important; 57 | } 58 | 59 | section.map div.polygon-elbow.non-polygon { 60 | opacity: 0 !important; 61 | pointer-events: none !important; 62 | border: 5px solid darkgray; 63 | } 64 | 65 | section.map.mode-edit div.polygon-elbow { 66 | opacity: 1; 67 | pointer-events: all; 68 | } 69 | 70 | section.map svg.tracer { 71 | position: absolute; 72 | top: 0; 73 | left: 0; 74 | width: 100%; 75 | height: 100%; 76 | z-index: 2001; 77 | pointer-events: none; 78 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/css/Planes.css: -------------------------------------------------------------------------------- 1 | section.planes { 2 | position: absolute; 3 | z-index: 4000; 4 | pointer-events: none; 5 | top: 0; 6 | left: 0; 7 | width: 100%; 8 | height: 100%; 9 | } 10 | 11 | section.planes img.plane { 12 | position: absolute; 13 | } 14 | 15 | @-webkit-keyframes rotation { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(360deg); } 18 | } 19 | 20 | /* First Plane */ 21 | 22 | section.planes img.plane.first { 23 | width: 48px; 24 | transform: translate(-200px, 250px) rotate(43deg); 25 | -webkit-animation: first 15s infinite linear; 26 | } 27 | 28 | @-webkit-keyframes first { 29 | 20% { transform: translate(0, 250px) rotate(43deg) scale(1); } 30 | 40% { transform: translate(300px, 250px) rotate(43deg) scale(1.2); } 31 | 60% { transform: translate(600px, 250px) rotate(43deg) scale(0.6); } 32 | 80% { transform: translate(900px, 250px) rotate(43deg) scale(0.6); } 33 | 100% { transform: translate(1200px, 250px) rotate(43deg) scale(0.8); } 34 | } 35 | 36 | /* Second Plane */ 37 | 38 | section.planes div.rotate.first { 39 | position: absolute; 40 | z-index: 40001; 41 | height: 500px; 42 | top: -60px; 43 | left: -50px; 44 | width: 55px; 45 | -webkit-animation: rotation 15s infinite; 46 | } 47 | 48 | section.planes div.rotate.first img.plane { 49 | width: 40px; 50 | -webkit-transform: rotate(90deg); 51 | } 52 | 53 | /* Third Plane */ 54 | 55 | section.planes img.plane.third { 56 | transform: translate(1400px, 1200px) rotate(275deg); 57 | width: 42px; 58 | -webkit-animation: third 20s infinite linear; 59 | } 60 | 61 | @-webkit-keyframes third { 62 | 25% { transform: translate(1000px, 800px) rotate(275deg) scale(1); } 63 | 50% { transform: translate(600px, 400px) rotate(275deg) scale(0.85); } 64 | 75% { transform: translate(200px, 0px) rotate(275deg) scale(1.2); } 65 | 100% { transform: translate(-200px, -400px) rotate(275deg) scale(0.8); } 66 | } 67 | 68 | /* Fourth Plane */ 69 | 70 | section.planes div.rotate.second { 71 | position: absolute; 72 | z-index: 40001; 73 | height: 500px; 74 | top: 500px; 75 | right: 25%; 76 | width: 55px; 77 | -webkit-animation: rotation 15s infinite linear; 78 | } 79 | 80 | section.planes div.rotate.second img.plane { 81 | width: 48px; 82 | -webkit-transform: rotate(45deg); 83 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/images/airplane47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/example/images/airplane47.png -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/images/airplane8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/example/images/airplane8.png -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/images/rocket20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/example/images/rocket20.png -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/images/small116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/example/images/small116.png -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Leaflet.FreeDraw 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
38 | 39 |
40 | 41 |
42 | 43 |
44 | 45 |
46 | 47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 |

Leaflet.FreeDraw

55 |

Plugin by Adam Timberlake.

56 | 57 |

FreeDraw allows you to draw a freehand polygon on the map – which is then converted to a normalised polygon which can be manipulated.

58 | 59 |

Modes

60 |

Since FreeDraw uses bitwise operators to determine the current mode, you are able to combine modes – such as only allowing a user to create, or allowing a combination of both edit and delete – or all modes at once!

61 | 62 | 63 | Developers: Current bitwise mode is {{mode}}. 64 | 65 | 83 | 84 |
85 | 86 |

As with all of my open-source projectsFreeDraw is on GitHub.com. See you there!

87 |
88 | 89 |
90 | 91 |
92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/js/Example.js: -------------------------------------------------------------------------------- 1 | (function Example($angular) { 2 | 3 | $angular.module('leafletApp', []).controller('MapController', function MapController($scope) { 4 | 5 | /** 6 | * @constant MODES 7 | * @type {Object} 8 | */ 9 | $scope.MODES = L.FreeDraw.MODES; 10 | 11 | /** 12 | * @property mode 13 | * @type {Number} 14 | */ 15 | $scope.mode = L.FreeDraw.MODES.ALL; 16 | 17 | /** 18 | * @method isDisabled 19 | * @param mode {Number} 20 | * @returns {Boolean} 21 | */ 22 | $scope.isDisabled = function isDisabled(mode) { 23 | return !(mode & $scope.mode); 24 | }; 25 | 26 | /** 27 | * @method toggleMode 28 | * @param mode {Number} 29 | * @return {void} 30 | */ 31 | $scope.toggleMode = function toggleMode(mode) { 32 | 33 | if ($scope.isDisabled(mode)) { 34 | 35 | // Enabled the mode. 36 | $scope.mode = $scope.mode | mode; 37 | return; 38 | 39 | } 40 | 41 | // Otherwise disable it. 42 | $scope.mode = $scope.mode ^ mode; 43 | 44 | }; 45 | 46 | /** 47 | * @method setModeOnly 48 | * @param mode {Number} 49 | * @return {void} 50 | */ 51 | $scope.setModeOnly = function setModeOnly(mode) { 52 | $scope.mode = $scope.MODES.VIEW | mode; 53 | }; 54 | 55 | }).directive('map', function mapDirective() { 56 | 57 | return { 58 | 59 | /** 60 | * @property restrict 61 | * @type {String} 62 | */ 63 | restrict: 'C', 64 | 65 | /** 66 | * @property scope 67 | * @type {Object} 68 | */ 69 | scope: { 70 | mode: '=' 71 | }, 72 | 73 | /** 74 | * @method controller 75 | * @param $scope {Object} 76 | * @return {void} 77 | */ 78 | controller: function controller($scope) { 79 | 80 | /** 81 | * @constant TILE_URL 82 | * @type {String} 83 | */ 84 | $scope.TILE_URL = 'https://tiles.lyrk.org/lr/{z}/{x}/{y}?apikey=f2ae86661a4e487bbced29a755799884'; 85 | 86 | }, 87 | 88 | /** 89 | * @method link 90 | * @param scope {Object} 91 | * @param element {Object} 92 | * @return {void} 93 | */ 94 | link: function link(scope, element) { 95 | 96 | // Setup Leaflet: http://leafletjs.com/examples/quick-start.html 97 | var map = new L.Map(element[0], { doubleClickZoom: false }).setView([51.505, -0.09], 14); 98 | L.tileLayer(scope.TILE_URL).addTo(map); 99 | 100 | var freeDraw = new L.FreeDraw({ 101 | mode: scope.mode 102 | }); 103 | 104 | //freeDraw.options.setEvents(['mousedown', 'mouseup', 'dblclick']); 105 | //freeDraw.options.setHullAlgorithm(false); 106 | //freeDraw.options.allowMultiplePolygons(false); 107 | //freeDraw.options.destroyPreviousPolygon(true); 108 | //freeDraw.options.exitModeAfterCreate(false); 109 | 110 | freeDraw.on('mode', function modeReceived(eventData) { 111 | scope.mode = eventData.mode; 112 | 113 | if (!scope.$root.$$phase) { 114 | scope.$apply(); 115 | } 116 | 117 | }); 118 | 119 | scope.$watch('mode', function modeReceived(mode) { 120 | freeDraw.setMode(mode); 121 | }); 122 | 123 | freeDraw.on('markers', function getMarkers(eventData) { 124 | 125 | // Output the lat/lngs in the MySQL multi-polygon format. 126 | console.log(L.FreeDraw.Utilities.getMySQLMultiPolygon(eventData.latLngs)); 127 | 128 | }); 129 | 130 | map.addLayer(freeDraw); 131 | 132 | } 133 | 134 | } 135 | }); 136 | 137 | })(window.angular); -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/example/server/default.js: -------------------------------------------------------------------------------- 1 | (function($process) { 2 | 3 | "use strict"; 4 | 5 | var express = require('express'), 6 | app = express(), 7 | server = require('http').createServer(app); 8 | 9 | app.use(express.static(__dirname + '/..')); 10 | server.listen($process.env.PORT || 3507); 11 | 12 | })(process); -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/karma.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = function(config) { 2 | 3 | config.set({ 4 | 5 | basePath: '', 6 | frameworks: ['jasmine'], 7 | files: [ 8 | 'tests/KarmaTests.js', 9 | 'example/js/vendor/leaflet/dist/leaflet-src.js', 10 | 'example/js/vendor/evispa-timo-jsclipper/clipper_unminified.js', 11 | 'example/js/vendor/d3/d3.js', 12 | { pattern: 'tests/fixtures/*' }, 13 | { pattern: 'components/*' } 14 | ], 15 | exclude: [], 16 | preprocessors: { 17 | 'tests/fixtures/*.html': ['html2js'], 18 | 'tests/fixtures/*.json': ['html2js'] 19 | }, 20 | reporters: ['progress'], 21 | port: 9876, 22 | colors: true, 23 | logLevel: config.LOG_INFO, 24 | autoWatch: false, 25 | browsers: ['Firefox'], 26 | singleRun: true 27 | 28 | }); 29 | 30 | }; 31 | -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "leaflet.freedraw", 3 | "version": "1.1.14", 4 | "description": "Zoopla inspired freehand polygon creation using Leaflet.js.", 5 | "main": "dist/leaflet.freedraw.js", 6 | "scripts": { 7 | "test": "grunt test", 8 | "start": "node example/server/default.js" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/Wildhoney/Leaflet.FreeDraw.git" 13 | }, 14 | "keywords": [ 15 | "leaflet", 16 | "freedraw", 17 | "polygon", 18 | "drawing", 19 | "freehand" 20 | ], 21 | "author": "Adam Timberlake ", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/Wildhoney/Leaflet.FreeDraw/issues" 25 | }, 26 | "homepage": "https://github.com/Wildhoney/Leaflet.FreeDraw", 27 | "dependencies": { 28 | "express": "^4.9.0" 29 | }, 30 | "devDependencies": { 31 | "bower": "^1.3.12", 32 | "grunt": "^0.4.5", 33 | "grunt-cli": "^0.1.13", 34 | "grunt-contrib-compress": "^0.12.0", 35 | "grunt-contrib-concat": "^0.5.0", 36 | "grunt-contrib-copy": "^0.7.0", 37 | "grunt-contrib-jasmine": "^0.8.0", 38 | "grunt-contrib-jshint": "^0.10.0", 39 | "grunt-contrib-uglify": "^0.6.0", 40 | "grunt-contrib-watch": "^0.6.1", 41 | "grunt-karma": "^0.9.0", 42 | "karma": "^0.12.24", 43 | "karma-firefox-launcher": "^0.1.3", 44 | "karma-fixture": "^0.2.1-1", 45 | "karma-html2js-preprocessor": "^0.1.0", 46 | "karma-jasmine": "^0.1.5" 47 | } 48 | } -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.11.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.11.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.12.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.12.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.13.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.13.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.14.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.14.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.15.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.15.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.16.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.16.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.1.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.1.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.10.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.10.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.2.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.2.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.3.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.3.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.4.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.4.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.11.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.11.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.12.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.12.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.13.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.13.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.5.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.5.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.6.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.6.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.7.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.7.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.1.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.8.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.8.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/0.9.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/0.9.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.0.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.0.9.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.0.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.10.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.10.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.11.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.11.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.13.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.13.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.14.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.14.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.2.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.3.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.4.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.5.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.5.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.6.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.7.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.8.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.8.zip -------------------------------------------------------------------------------- /bower_components/leaflet.freedraw/releases/1.1.9.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet.freedraw/releases/1.1.9.zip -------------------------------------------------------------------------------- /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/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet/dist/images/layers-2x.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet/dist/images/layers.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet/dist/images/marker-icon-2x.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet/dist/images/marker-icon.png -------------------------------------------------------------------------------- /bower_components/leaflet/dist/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/bower_components/leaflet/dist/images/marker-shadow.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /css/hoodstyles.css: -------------------------------------------------------------------------------- 1 | #map{ 2 | position: absolute; 3 | left: 0px; 4 | right: 0px; 5 | top:0px; 6 | bottom: 0px; 7 | background-color:#000000; 8 | } 9 | .leaflet-top { 10 | top: 50px; 11 | } 12 | .leaflet-draw-guide-dash { 13 | font-size: 1%; 14 | opacity: 1; 15 | position: absolute; 16 | width: 2px; 17 | height: 2px; 18 | } 19 | .leaflet-bar { 20 | box-shadow: 0px 1px 7px rgba(0, 0, 0, 0.0); 21 | border-style: solid; 22 | border-width: thin; 23 | border-color: #ccc; 24 | background: rgba(255,255,255,1); 25 | } 26 | .leaflet-control-layers { 27 | box-shadow: 0px 1px 7px rgba(0, 0, 0, 0.0); 28 | border-style: solid; 29 | border-width: thin; 30 | border-color: #ccc; 31 | background: rgba(255,255,255,1); 32 | } 33 | .leaflet-container a{ 34 | color:#444; 35 | } 36 | .leaflet-container .leaflet-control-attribution{ 37 | box-shadow: 0px 1px 7px rgba(0, 0, 0, 0.0); 38 | border-style: none; 39 | height: 17px; 40 | background: rgba(255,255,255,.6); 41 | } 42 | .linksbackground{ 43 | position:absolute; 44 | right:0px; 45 | bottom:17px; 46 | width:20px; 47 | height:86px; 48 | background-color:#ffffff; 49 | opacity: 0.6; 50 | } 51 | .link-icons{ 52 | position:absolute;right:2px; 53 | } 54 | a:hover { 55 | text-decoration: none; 56 | color: #000; 57 | } 58 | .glyphicon{ 59 | opacity: .7; 60 | color: #000; 61 | } 62 | .row{ 63 | padding-bottom: 10px; 64 | 65 | } 66 | .glyphicon:hover{ 67 | opacity:1; 68 | cursor: pointer; 69 | } 70 | #descriptionDiv{ 71 | width:350px; 72 | overflow:hidden; 73 | position:absolute; 74 | top:130px; 75 | bottom: 0px; 76 | left:30px; 77 | margin-top:7px; 78 | margin-left:-10px; 79 | pointer-events:none; 80 | } 81 | .yesMouse{ 82 | pointer-events:all; 83 | } 84 | .noMouse{ 85 | pointer-events:none; 86 | } 87 | #accordian{ 88 | pointer-events:none; 89 | } 90 | .slimScrollDiv{ 91 | pointer-events:none; 92 | } 93 | .slimScrollBar{ 94 | pointer-events:all; 95 | } 96 | .detailText{ 97 | font-size: 12px; 98 | color: #fff; 99 | pointer-events:none; 100 | padding-bottom: 0px; 101 | } 102 | .row{ 103 | padding-bottom: 2px; 104 | } 105 | .loveflag{ 106 | font-size: 10px; 107 | color:#fff; 108 | } 109 | .loveflag.flagged{ 110 | color: red; 111 | } 112 | .loveIcon{ 113 | position: absolute; 114 | z-index: 99999; 115 | top:150px; 116 | left:150px; 117 | opacity: 0; 118 | } 119 | .lovecount{ 120 | font-size: 10px; 121 | color: #999999; 122 | } 123 | .icon-row{ 124 | margin-top: 0px; 125 | padding-bottom: 5px; 126 | } 127 | .panel{ 128 | margin-left: 10px; 129 | } 130 | .panel-group .panel { 131 | margin-bottom: 0px; 132 | } 133 | .panel-default{ 134 | background-color: rgba(20,20,20,0.8 ); 135 | border-style: none; 136 | max-width: 300px; 137 | } 138 | .panel-heading{ 139 | opacity:.8; 140 | border-style: none; 141 | padding-top: 3px; 142 | padding-left: 5px; 143 | padding-bottom: 4px; 144 | padding-right: 5px; 145 | } 146 | .panel-heading a{ 147 | font-size: 12px; 148 | color: #000; 149 | } 150 | .panel-group .panel-heading + .panel-collapse .panel-body{ 151 | border-top:none; 152 | border-top-style: none; 153 | } 154 | .collapse .panel-body{ 155 | border-top-style: none; 156 | } 157 | .navbar { 158 | background:rgba(0,0,0,.8); 159 | } 160 | .nav, .navbar-nav{ 161 | height:50px; 162 | font-size: 12px; 163 | } 164 | .links{ 165 | font-size: 14px; 166 | } 167 | .circleBase { 168 | -webkit-border-radius: 999px; 169 | -moz-border-radius: 999px; 170 | border-radius: 999px; 171 | behavior: url(PIE.htc); 172 | } 173 | .type1 { 174 | width: 35px; 175 | height: 35px; 176 | background: #777; 177 | border: 0px 178 | } 179 | .navText{ 180 | color: #777; 181 | } 182 | .navbar-inverse .navbar-nav > li > a:hover 183 | color:rgb(153,153,153); 184 | } 185 | .spaceBtn:active{ 186 | background-color:hsl( #000); 187 | }; 188 | .twitter-typeahead .tt-query, 189 | .twitter-typeahead .tt-hint { 190 | margin-bottom: 0; 191 | } 192 | .tt-hint { 193 | display: none; 194 | width: 100%; 195 | height: 38px; 196 | padding: 8px 12px; 197 | font-size: 14px; 198 | line-height: 1.428571429; 199 | color: #999; 200 | vertical-align: middle; 201 | background-color: #ffffff; 202 | border: 1px solid #cccccc; 203 | border-radius: 4px; 204 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 205 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 206 | -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 207 | transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 208 | } 209 | .tt-dropdown-menu { 210 | min-width: 160px; 211 | margin-top: 2px; 212 | padding: 5px 0; 213 | background-color: #ffffff; 214 | border: 1px solid #cccccc; 215 | border: 1px solid rgba(0, 0, 0, 0.15); 216 | border-radius: 4px; 217 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); 218 | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); 219 | background-clip: padding-box; 220 | 221 | } 222 | .tt-suggestion { 223 | display: block; 224 | padding: 3px 20px; 225 | } 226 | .tt-suggestion.tt-is-under-cursor { 227 | color: #fff; 228 | background-color: #428bca; 229 | } 230 | .tt-suggestion.tt-is-under-cursor a { 231 | color: #fff; 232 | } 233 | .tt-suggestion p { 234 | margin: 0; 235 | } 236 | .btn{ 237 | -webkit-box-shadow: 3px 3px 5px 0px rgba(0,0,0,0.5); 238 | -moz-box-shadow: 3px 3px 5px 0px rgba(0,0,0,0.5); 239 | box-shadow: 3px 3px 5px 0px rgba(0,0,0,0.5); 240 | } 241 | #btnBar .btn{ 242 | display: none; 243 | } 244 | #btnBar .btn#startPolyBtn, #btnBar .btn#startMarkerBtn{ 245 | background-color: #ccd8f0; 246 | font-weight: bold; 247 | border-color: #333; 248 | display: block; 249 | width: 260px; 250 | text-align: left; 251 | } 252 | 253 | #btnBar .btn#startMarkerBtn{ 254 | margin-top: 10px; 255 | } 256 | 257 | svg.tracer { 258 | position: absolute; 259 | top: 0; 260 | left: 0; 261 | width: 100%; 262 | height: 100%; 263 | pointer-events: none; 264 | } 265 | 266 | path.tracer{ 267 | fill: none; 268 | stroke: #D7217E; 269 | stroke-opacity: .9; 270 | } 271 | .modal-body .img-container{ 272 | text-align: center; 273 | margin-bottom: 15px; 274 | } 275 | .modal-footer{ 276 | margin-top: 0; 277 | } 278 | 279 | .navbar-brand.abbrev{ display: none; } 280 | 281 | .leaflet-container.drawing{ 282 | cursor: url(../img/pencil.png) 0 32, pointer; 283 | } 284 | 285 | @media (max-width: 400px){ 286 | html, body{ max-width: 100%; overflow: hidden; } 287 | .navbar-brand{ display: none; } 288 | .navbar-brand.abbrev{ display: block; } 289 | #descriptionDiv{ 290 | top: 120px; 291 | left: 20px; 292 | max-width: 150px; 293 | } 294 | #generalModal img{ 295 | max-width: 100%; 296 | } 297 | .modal-body{ 298 | 299 | overflow: auto; 300 | padding: 15px; 301 | } 302 | .leaflet-top{ 303 | top: auto; 304 | bottom: 25px; 305 | } 306 | a.link-icons, .linksbackground{ display: none; } 307 | #submitModal .col-xs-4, #submitModal .col-xs-8{ 308 | float: none; 309 | width: auto; 310 | padding-top: 0; 311 | } 312 | #submitModal label br{ 313 | display: none; 314 | } 315 | #cityLivingGroup .btn, #neighborhoodLivingGroup .btn{ 316 | padding: 6px; 317 | } 318 | .modal h3{ 319 | margin: 0 20px 0 0; 320 | } 321 | 322 | #descriptionDiv .col-xs-3{ 323 | width: 100%; 324 | } 325 | #descriptionDiv .col-xs-9{ 326 | width: 100%; 327 | } 328 | .icon-row{ 329 | float: right; 330 | margin-top: -55px; 331 | margin-right: 5px; 332 | width: 50%; 333 | } 334 | .icon-row > div:first-child{ 335 | margin-bottom: 10px; 336 | } 337 | .loveflag{ 338 | font-size: 18px; 339 | } 340 | .lovecount{ 341 | display: none; 342 | } 343 | #descriptionDiv .detailText > .row{ 344 | margin-bottom: 5px; 345 | } 346 | } -------------------------------------------------------------------------------- /img/GitHub-Mark-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/GitHub-Mark-32px.png -------------------------------------------------------------------------------- /img/bird_black_32_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/bird_black_32_0.png -------------------------------------------------------------------------------- /img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /img/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/instructions1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions1.gif -------------------------------------------------------------------------------- /img/instructions2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions2.gif -------------------------------------------------------------------------------- /img/instructions2_point.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions2_point.gif -------------------------------------------------------------------------------- /img/instructions2_poly.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions2_poly.gif -------------------------------------------------------------------------------- /img/instructions3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions3.gif -------------------------------------------------------------------------------- /img/instructions3_point.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions3_point.gif -------------------------------------------------------------------------------- /img/instructions3_poly.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/instructions3_poly.gif -------------------------------------------------------------------------------- /img/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/img/pencil.png -------------------------------------------------------------------------------- /js/googleanalytics.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 5 | ga('create', 'UA-20198240-1', 'pnwmaps.com'); 6 | ga('send', 'pageview'); -------------------------------------------------------------------------------- /js/jquery.slimscroll.min.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) 2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. 4 | * 5 | * Version: 1.3.0 6 | * 7 | */ 8 | (function(f){jQuery.fn.extend({slimScroll:function(h){var a=f.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:0.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:0.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},h);this.each(function(){function r(d){if(s){d=d|| 9 | window.event;var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);f(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,f,h){k=!1;var e=d,g=b.outerHeight()-c.outerHeight();f&&(e=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),e=Math.min(Math.max(e,0),g),e=0=b.outerHeight()?k=!0:(c.stop(!0,!0).fadeIn("fast"),a.railVisible&&g.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(A=setTimeout(function(){a.disableFadeOut&&s||(x||y)||(c.fadeOut("slow"),g.fadeOut("slow"))},1E3))}var s,x,y,A,z,u,l,B,D=30,k=!1,b=f(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(), 12 | c=b.parent().find("."+a.barClass),g=b.parent().find("."+a.railClass);w();if(f.isPlainObject(h)){if("height"in h&&"auto"==h.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height",q);b.css("height",q)}if("scrollTo"in h)n=parseInt(a.scrollTo);else if("scrollBy"in h)n+=parseInt(a.scrollBy);else if("destroy"in h){c.remove();g.remove();b.unwrap();return}m(n,!1,!0)}}else{a.height="auto"==a.height?b.parent().height():a.height;n=f("
").addClass(a.wrapperClass).css({position:"relative", 13 | overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden",width:a.width,height:a.height});var g=f("
").addClass(a.railClass).css({width:a.size,height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=f("
").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible? 14 | "block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position?{right:a.distance}:{left:a.distance};g.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(g);a.railDraggable&&c.bind("mousedown",function(a){var b=f(document);y=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)}); 15 | b.bind("mouseup.slimscroll",function(a){y=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1});g.hover(function(){v()},function(){p()});c.hover(function(){x=!0},function(){x=!1});b.hover(function(){s=!0;v();p()},function(){s=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(z=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&& 16 | (m((z-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),z=b.originalEvent.touches[0].pageY)});w();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),m(0,!0)):"top"!==a.start&&(m(f(a.start).position().top,null,!0),a.alwaysVisible||c.hide());C()}});return this}});jQuery.fn.extend({slimscroll:jQuery.fn.slimScroll})})(jQuery); -------------------------------------------------------------------------------- /js/names.js: -------------------------------------------------------------------------------- 1 | var hoodNames = [ 2 | "Allston", 3 | "Back Bay", 4 | "Bay Village", 5 | "Beacon Hill", 6 | "Brighton", 7 | "Charlestown", 8 | "Chinatown", 9 | "Leather District", 10 | "Dorchester", 11 | "Downtown", 12 | "East Boston", 13 | "Fenway/Kenmore", 14 | "Fenway", 15 | "Kenmore Square", 16 | "Hyde Park", 17 | "Jamaica Plain", 18 | "Mattapan", 19 | "North End", 20 | "Roslindale", 21 | "Roxbury", 22 | "South Boston", 23 | "South End", 24 | "West End", 25 | "West Roxbury", 26 | "Fort Point", 27 | "Seaport", 28 | "Waterfront", 29 | "Mission Hill", 30 | "Longwood", 31 | "Central Square", 32 | "Harvard Square", 33 | "Cambridgeport", 34 | "Area 4", 35 | "Inman Square", 36 | "Kendall Square", 37 | "Porter Square", 38 | "Davis Square", 39 | "Winter Hill" 40 | ]; 41 | 42 | var cityNames = [ 43 | "Boston", 44 | "Cambridge", 45 | "Somerville", 46 | "Brookline", 47 | "Chelsea", 48 | "Revere", 49 | "Quincy", 50 | "Watertown", 51 | "Medford", 52 | "Malden", 53 | "Everett" 54 | ]; -------------------------------------------------------------------------------- /libs/Leaflet.draw/images/spritesheet-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/libs/Leaflet.draw/images/spritesheet-2x.png -------------------------------------------------------------------------------- /libs/Leaflet.draw/images/spritesheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/libs/Leaflet.draw/images/spritesheet.png -------------------------------------------------------------------------------- /libs/Leaflet.draw/leaflet.draw.css: -------------------------------------------------------------------------------- 1 | /* ================================================================== */ 2 | /* Toolbars 3 | /* ================================================================== */ 4 | 5 | .leaflet-draw-section { 6 | position: relative; 7 | } 8 | 9 | .leaflet-draw-toolbar { 10 | margin-top: 12px; 11 | } 12 | 13 | .leaflet-draw-toolbar-top { 14 | margin-top: 0; 15 | } 16 | 17 | .leaflet-draw-toolbar-notop a:first-child { 18 | border-top-right-radius: 0; 19 | } 20 | 21 | .leaflet-draw-toolbar-nobottom a:last-child { 22 | border-bottom-right-radius: 0; 23 | } 24 | 25 | .leaflet-draw-toolbar a { 26 | background-image: url('images/spritesheet.png'); 27 | background-repeat: no-repeat; 28 | } 29 | 30 | .leaflet-retina .leaflet-draw-toolbar a { 31 | background-image: url('images/spritesheet-2x.png'); 32 | background-size: 210px 30px; 33 | } 34 | 35 | .leaflet-draw a { 36 | display: block; 37 | text-align: center; 38 | text-decoration: none; 39 | } 40 | 41 | /* ================================================================== */ 42 | /* Toolbar actions menu 43 | /* ================================================================== */ 44 | 45 | .leaflet-draw-actions { 46 | display: none; 47 | list-style: none; 48 | margin: 0; 49 | padding: 0; 50 | position: absolute; 51 | left: 26px; /* leaflet-draw-toolbar.left + leaflet-draw-toolbar.width */ 52 | top: 0; 53 | } 54 | 55 | .leaflet-right .leaflet-draw-actions { 56 | right:26px; 57 | left:auto; 58 | } 59 | 60 | .leaflet-draw-actions li { 61 | display: inline-block; 62 | } 63 | 64 | .leaflet-draw-actions li:first-child a { 65 | border-left: none; 66 | } 67 | 68 | .leaflet-draw-actions li:last-child a { 69 | -webkit-border-radius: 0 4px 4px 0; 70 | border-radius: 0 4px 4px 0; 71 | } 72 | 73 | .leaflet-right .leaflet-draw-actions li:last-child a { 74 | -webkit-border-radius: 0; 75 | border-radius: 0; 76 | } 77 | 78 | .leaflet-right .leaflet-draw-actions li:first-child a { 79 | -webkit-border-radius: 4px 0 0 4px; 80 | border-radius: 4px 0 0 4px; 81 | } 82 | 83 | .leaflet-draw-actions a { 84 | background-color: #919187; 85 | border-left: 1px solid #AAA; 86 | color: #FFF; 87 | font: 11px/19px "Helvetica Neue", Arial, Helvetica, sans-serif; 88 | line-height: 28px; 89 | text-decoration: none; 90 | padding-left: 10px; 91 | padding-right: 10px; 92 | height: 28px; 93 | } 94 | 95 | .leaflet-draw-actions-bottom { 96 | margin-top: 0; 97 | white-space: nowrap; 98 | } 99 | 100 | .leaflet-draw-actions-top { 101 | margin-top: 1px; 102 | white-space: nowrap; 103 | } 104 | 105 | .leaflet-draw-actions-top a, 106 | .leaflet-draw-actions-bottom a { 107 | height: 27px; 108 | line-height: 27px; 109 | } 110 | 111 | .leaflet-draw-actions a:hover { 112 | background-color: #A0A098; 113 | } 114 | 115 | .leaflet-draw-actions-top.leaflet-draw-actions-bottom a { 116 | height: 26px; 117 | line-height: 26px; 118 | } 119 | 120 | /* ================================================================== */ 121 | /* Draw toolbar 122 | /* ================================================================== */ 123 | 124 | .leaflet-draw-toolbar .leaflet-draw-draw-polyline { 125 | background-position: -2px -2px; 126 | } 127 | 128 | .leaflet-draw-toolbar .leaflet-draw-draw-polygon { 129 | background-position: -31px -2px; 130 | } 131 | 132 | .leaflet-draw-toolbar .leaflet-draw-draw-rectangle { 133 | background-position: -62px -2px; 134 | } 135 | 136 | .leaflet-draw-toolbar .leaflet-draw-draw-circle { 137 | background-position: -92px -2px; 138 | } 139 | 140 | .leaflet-draw-toolbar .leaflet-draw-draw-marker { 141 | background-position: -122px -2px; 142 | } 143 | 144 | /* ================================================================== */ 145 | /* Edit toolbar 146 | /* ================================================================== */ 147 | 148 | .leaflet-draw-toolbar .leaflet-draw-edit-edit { 149 | background-position: -152px -2px; 150 | } 151 | 152 | .leaflet-draw-toolbar .leaflet-draw-edit-remove { 153 | background-position: -182px -2px; 154 | } 155 | 156 | .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled { 157 | background-position: -212px -2px; 158 | } 159 | 160 | .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled { 161 | background-position: -242px -2px; 162 | } 163 | 164 | /* ================================================================== */ 165 | /* Drawing styles 166 | /* ================================================================== */ 167 | 168 | .leaflet-mouse-marker { 169 | background-color: #fff; 170 | cursor: crosshair; 171 | } 172 | 173 | .leaflet-draw-tooltip { 174 | background: rgb(54, 54, 54); 175 | background: rgba(0, 0, 0, 0.5); 176 | border: 1px solid transparent; 177 | -webkit-border-radius: 4px; 178 | border-radius: 4px; 179 | color: #fff; 180 | font: 12px/18px "Helvetica Neue", Arial, Helvetica, sans-serif; 181 | margin-left: 20px; 182 | margin-top: -21px; 183 | padding: 4px 8px; 184 | position: absolute; 185 | visibility: hidden; 186 | white-space: nowrap; 187 | z-index: 6; 188 | } 189 | 190 | .leaflet-draw-tooltip:before { 191 | border-right: 6px solid black; 192 | border-right-color: rgba(0, 0, 0, 0.5); 193 | border-top: 6px solid transparent; 194 | border-bottom: 6px solid transparent; 195 | content: ""; 196 | position: absolute; 197 | top: 7px; 198 | left: -7px; 199 | } 200 | 201 | .leaflet-error-draw-tooltip { 202 | background-color: #F2DEDE; 203 | border: 1px solid #E6B6BD; 204 | color: #B94A48; 205 | } 206 | 207 | .leaflet-error-draw-tooltip:before { 208 | border-right-color: #E6B6BD; 209 | } 210 | 211 | .leaflet-draw-tooltip-single { 212 | margin-top: -12px 213 | } 214 | 215 | .leaflet-draw-tooltip-subtext { 216 | color: #f8d5e4; 217 | } 218 | 219 | .leaflet-draw-guide-dash { 220 | font-size: 1%; 221 | opacity: 0.6; 222 | position: absolute; 223 | width: 5px; 224 | height: 5px; 225 | } 226 | 227 | /* ================================================================== */ 228 | /* Edit styles 229 | /* ================================================================== */ 230 | 231 | .leaflet-edit-marker-selected { 232 | background: rgba(254, 87, 161, 0.1); 233 | border: 4px dashed rgba(254, 87, 161, 0.6); 234 | -webkit-border-radius: 4px; 235 | border-radius: 4px; 236 | } 237 | 238 | .leaflet-edit-move { 239 | cursor: move; 240 | } 241 | 242 | .leaflet-edit-resize { 243 | cursor: pointer; 244 | } 245 | -------------------------------------------------------------------------------- /libs/Leaflet.draw/leaflet.draw.ie.css: -------------------------------------------------------------------------------- 1 | /* Conditional stylesheet for IE. */ 2 | 3 | .leaflet-draw-toolbar { 4 | border: 3px solid #999; 5 | } 6 | 7 | .leaflet-draw-toolbar a { 8 | background-color: #eee; 9 | } 10 | 11 | .leaflet-draw-toolbar a:hover { 12 | background-color: #fff; 13 | } 14 | 15 | .leaflet-draw-actions { 16 | left: 32px; 17 | margin-top: 3px; 18 | } 19 | 20 | .leaflet-draw-actions li { 21 | display: inline; 22 | zoom: 1; 23 | } 24 | 25 | .leaflet-edit-marker-selected { 26 | border: 4px dashed #fe93c2; 27 | } 28 | 29 | .leaflet-draw-actions a { 30 | background-color: #999; 31 | } 32 | 33 | .leaflet-draw-actions a:hover { 34 | background-color: #a5a5a5; 35 | } 36 | 37 | .leaflet-draw-actions-top a { 38 | margin-top: 1px; 39 | } 40 | 41 | .leaflet-draw-actions-bottom a { 42 | height: 28px; 43 | line-height: 28px; 44 | } 45 | 46 | .leaflet-draw-actions-top.leaflet-draw-actions-bottom a { 47 | height: 27px; 48 | line-height: 27px; 49 | } -------------------------------------------------------------------------------- /libs/bootstrap/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "vars": { 3 | "@screen-xs-min": "0px", 4 | "@grid-float-breakpoint": "0px" 5 | }, 6 | "css": [ 7 | "print.less", 8 | "type.less", 9 | "code.less", 10 | "grid.less", 11 | "tables.less", 12 | "forms.less", 13 | "buttons.less", 14 | "glyphicons.less", 15 | "button-groups.less", 16 | "input-groups.less", 17 | "navs.less", 18 | "navbar.less", 19 | "breadcrumbs.less", 20 | "pagination.less", 21 | "pager.less", 22 | "labels.less", 23 | "badges.less", 24 | "jumbotron.less", 25 | "thumbnails.less", 26 | "alerts.less", 27 | "progress-bars.less", 28 | "media.less", 29 | "list-group.less", 30 | "panels.less", 31 | "wells.less", 32 | "close.less", 33 | "dropdowns.less", 34 | "tooltip.less", 35 | "popovers.less", 36 | "modals.less", 37 | "carousel.less", 38 | "utilities.less", 39 | "responsive-utilities.less", 40 | "component-animations.less" 41 | ], 42 | "js": [ 43 | "alert.js", 44 | "button.js", 45 | "carousel.js", 46 | "dropdown.js", 47 | "modal.js", 48 | "tooltip.js", 49 | "popover.js", 50 | "tab.js", 51 | "affix.js", 52 | "collapse.js", 53 | "scrollspy.js", 54 | "transition.js" 55 | ] 56 | } -------------------------------------------------------------------------------- /libs/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/libs/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /libs/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /libs/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awoodruff/neighborhoods/a4a26762d35be146d5e739db7027fff26d590c3b/libs/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /php/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | SecFilterEngine Off 3 | SecFilterScanPOST Off 4 | -------------------------------------------------------------------------------- /php/add.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /php/cartodbProxy.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /php/flag.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /php/heart.php: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------