[Libreoffice-commits] online.git: 3 commits - loleaflet/docs loleaflet/reference.html loleaflet/src

Mihai Varga mihai.varga at collabora.com
Tue Sep 15 05:26:51 PDT 2015


 loleaflet/docs/css/main.css                     | 1077 +++
 loleaflet/docs/css/normalize.css                |  425 +
 loleaflet/docs/highlight/LICENSE                |   24 
 loleaflet/docs/highlight/highlight.pack.js      |    1 
 loleaflet/docs/highlight/styles/github-gist.css |  211 
 loleaflet/docs/images/choropleth.png            |binary
 loleaflet/docs/images/custom-icons.png          |binary
 loleaflet/docs/images/favicon.ico               |binary
 loleaflet/docs/images/forum-round.png           |binary
 loleaflet/docs/images/geojson.png               |binary
 loleaflet/docs/images/github-round.png          |binary
 loleaflet/docs/images/layers-control.png        |binary
 loleaflet/docs/images/leaf-green.png            |binary
 loleaflet/docs/images/leaf-orange.png           |binary
 loleaflet/docs/images/leaf-red.png              |binary
 loleaflet/docs/images/leaf-shadow.png           |binary
 loleaflet/docs/images/logo.png                  |binary
 loleaflet/docs/images/logos.png                 |binary
 loleaflet/docs/images/mobile.png                |binary
 loleaflet/docs/images/quick-start.png           |binary
 loleaflet/docs/images/sprite.png                |binary
 loleaflet/docs/images/sprite.svg                |   75 
 loleaflet/docs/images/twitter-round.png         |binary
 loleaflet/docs/images/twitter.png               |binary
 loleaflet/docs/js/docs.js                       |   52 
 loleaflet/reference.html                        | 6939 ++++++++++++++++++++++++
 loleaflet/src/layer/tile/TileLayer.js           |    8 
 loleaflet/src/map/Map.js                        |    4 
 28 files changed, 8815 insertions(+), 1 deletion(-)

New commits:
commit bc6bbf2c9376f26b35bf01a9d365674561b3fb3b
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Tue Sep 15 15:26:21 2015 +0300

    loleaflet: handle invalidatetiles:EMPTY

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 89f4ed8..a78dc23 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -201,6 +201,14 @@ L.TileLayer = L.GridLayer.extend({
 		else if (textMsg.startsWith('invalidatetiles:') && !textMsg.match('EMPTY')) {
 			this._onInvalidateTilesMsg(textMsg);
 		}
+		else if (textMsg.startsWith('invalidatetiles:') && textMsg.match('EMPTY')) {
+			var msg = 'invalidatetiles: ';
+			msg += 'part=' + this._selectedPart + ' ';
+			msg += 'x=0 y=0 ';
+			msg += 'width=' + this._docWidthTwips + ' ';
+			msg += 'height=' + this._docHeightTwips;
+			this._onInvalidateTilesMsg(msg);
+		}
 		else if (textMsg.startsWith('searchnotfound:')) {
 			this._onSearchNotFoundMsg(textMsg);
 		}
commit d511290c7cc7a6b784ed86d1031d998e3af22425
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Tue Sep 15 15:14:52 2015 +0300

    loleaflet: default permission is 'view'

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index a8e8129..c1db931 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -12,7 +12,9 @@ L.Map = L.Evented.extend({
 		maxZoom: 20,
 		fadeAnimation: true,
 		trackResize: true,
-		markerZoomAnimation: true
+		markerZoomAnimation: true,
+		edit: false,
+		readonly: false
 	},
 
 	initialize: function (id, options) { // (HTMLElement or String, Object)
commit 41a83b88cfcb374a56d555c978bb436dc99d4baf
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Tue Sep 15 14:59:45 2015 +0300

    loleaflet: html documentation
    
    This is the clean version from the leaflet repository as seen at
    http://leafletjs.com/reference.html
    Changes will gradually be made to this to reflect the new API and the
    changes in the code.

diff --git a/loleaflet/docs/css/main.css b/loleaflet/docs/css/main.css
new file mode 100644
index 0000000..2b6aeb0
--- /dev/null
+++ b/loleaflet/docs/css/main.css
@@ -0,0 +1,1077 @@
+
+/* general styles */
+
+html, body, input, select, button, textarea, table {
+	font-size: 100%;
+	font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	text-rendering: optimizeLegibility;
+}
+
+body {
+	line-height: 1.5;
+	color: #333;
+}
+
+p {
+	margin: 24px 0;
+}
+
+a, a span.hljs-string {
+	color: #1EB300;
+}
+
+a:hover, a:focus {
+	color: #160;
+}
+
+hr {
+	background: #ddd;
+	color: #ddd;
+	height: 1px;
+	margin: 0 0 1.4em;
+	border: none;
+	clear: both;
+}
+
+.clearfix:before,
+.clearfix:after {
+	content: " ";
+	display: table;
+}
+
+.clearfix:after {
+	clear: both;
+}
+
+table {
+	width: 100%;
+	border-collapse: collapse;
+	margin-bottom: 2em;
+}
+
+th, td {
+	text-align: left;
+	border: 0;
+	border: 1px solid #eee;
+	padding: 0.5em 1em 0.5em 1em;
+}
+
+table th {
+	background: #eee;
+}
+
+table td {
+	color: #666;
+}
+
+table td:first-child {
+	color: #777;
+}
+
+table td:last-child {
+	color: black;
+}
+
+table td code i {
+	color: #00A707;
+}
+
+table td code b {
+	color: black;
+	font-weight: normal;
+}
+
+
+/* headings */
+
+h2 {
+	font-weight: 400;
+	font-size: 2em;
+	font-weight: 300;
+	color: black;
+	margin-top: 1.6em;
+	padding-top: .2em;
+}
+
+h2:first-child {
+	margin-top: 1em;
+}
+
+h2:target {
+	color: #1EB300;
+}
+
+h3 {
+	margin-top: 1.5em;
+	padding-top: .5em;
+	color: black;
+	font-weight: 500;
+	font-size: 1.4em;
+}
+
+.blog-page h3 {
+	padding-top: 0;
+}
+
+h4 {
+	font-size: 1.1em;
+	font-weight: 500;
+	margin: 1em 0 1em;
+}
+
+
+/* general layout */
+
+.container {
+	max-width: 54em;
+	padding: 0 6em 1.5em;
+	margin: 0 auto;
+}
+.footer {
+	margin-top: 50px;
+	color: #777;
+}
+
+
+/* header */
+
+h1 {
+	margin: 1.25em 0 1.5em;
+	text-align: center;
+}
+
+h1 a {
+	display: block;
+	margin: auto;
+	padding: 0 2em;
+	-webkit-transition: 0.8s all;
+	-webkit-animation: leafanim 3s ease 3s 1 normal none;
+	transition: 0.8s all;
+	animation: leafanim 3s ease 3s 1 normal none;
+}
+
+ at -webkit-keyframes leafanim {
+	50% { -webkit-filter: hue-rotate(-70deg) saturate(1.2); }
+}
+
+ at keyframes leafanim {
+	50% { -webkit-filter: hue-rotate(-70deg) saturate(1.2); }
+}
+
+h1 a img {
+	display: block;
+	margin: auto;
+	max-width: 100%;
+}
+
+h1 a:hover, h1 a:focus {
+	-webkit-filter: hue-rotate(-70deg) saturate(1.5);
+}
+
+h3.tagline {
+	font-weight: 300;
+	font-size: 1.5em;
+	margin-top: -.75em;
+	padding: 0;
+	color: #777;
+	text-align: center;
+	margin-bottom: 30px;
+}
+
+.nav {
+	overflow: hidden;
+	list-style: none;
+	padding: 0 30px;
+	text-align: center;
+	font-size: 1.25em;
+	margin-bottom: 40px;
+	border-bottom: 1px solid #ddd;
+	padding-bottom: 40px;
+}
+
+.nav li {
+	display: inline-block;
+	padding: .333em .5em;
+	color: #999;
+}
+
+.nav li a {
+	font-weight: 400;
+	text-decoration: none;
+}
+
+.ext-links {
+	position: fixed;
+	top: 1.5em;
+	right: 1.5em;
+}
+
+.ext-link {
+	display: block;
+	opacity: 0.5;
+	-webkit-animation: fadein 1s;
+	animation: fadein 1s;
+}
+.ext-link:hover {
+	opacity: 1;
+}
+ at -webkit-keyframes fadein {
+	from { opacity: 0; }
+	to   { opacity: 0.5; }
+}
+ at keyframes fadein {
+	from { opacity: 0; }
+	to   { opacity: 0.5; }
+}
+
+
+/* content */
+
+.container code, .container pre code {
+	font-family: "Consolas", "Menlo", "Lucida Console", "Courier New", monospace;
+	-webkit-font-smoothing: subpixel-antialiased;
+}
+.container pre code {
+	font-size: 14px;
+	padding: .75em 1em;
+	border-radius: 5px;
+	white-space: pre;
+	overflow: auto;
+}
+.container pre {
+	border-radius: 5px;
+}
+
+.container .map {
+	border: 1px solid #ccc;
+}
+.container .map:focus {
+	border-color: #999;
+}
+
+.quiet {
+	color: #999;
+}
+
+
+/* frontpage */
+
+.map-home {
+	height: 300px;
+	margin-top: 50px;
+	margin-bottom: 50px;
+}
+
+.usedby-title {
+	text-align: center;
+	background-color: #f5f5f5;
+	padding: 1.5em 1em 0.5em;
+	margin: 0;
+}
+
+.usedby {
+	margin: 0 0 3em;
+	text-align: center;
+	padding: 0 3em 2em;
+	background-color: #f5f5f5;
+}
+
+.logo {
+	display: inline-block;
+	opacity: 0.6;
+	height: 32px;
+	overflow: hidden;
+	text-indent: -9999px;
+	margin: 1em;
+	background: url(../images/logos.png);
+	background-repeat: no-repeat;
+	background-size: 100%;
+	vertical-align: middle;
+	-webkit-transition: opacity .15s ease;
+	transition: opacity .15s ease;
+}
+
+.logo:hover { opacity: 1; }
+
+.logo-foursquare {
+	background-position: 50% -4px;
+	width: 135px;
+}
+
+.logo-pinterest {
+	background-position: 50% -39px;
+	width: 115px;
+}
+
+.logo-500px {
+	background-position: 50% -48px;
+	width: 52px;
+	background-size: 80px;
+}
+
+.logo-evernote {
+	background-position: 50% -169px;
+	width: 170px;
+	height: 43px;
+}
+
+.logo-ftimes {
+	background-position: 50% -190px;
+	width: 112px;
+	height: 40px;
+	background-size: 145px;
+}
+
+.logo-github {
+	background-position: 50% -178px;
+	width: 110px;
+}
+
+.logo-wpost {
+	background-position: 50% -327px;
+	width: 170px;
+}
+
+.logo-npr {
+	background-position: 50% -214px;
+	width: 100px;
+	height: 34px;
+}
+
+.logo-usatoday {
+	background-position: 50% -299px;
+	width: 120px;
+	height: 30px;
+}
+
+.logo-facebook {
+	background-position: 50% -356px;
+	width: 130px;
+}
+
+.logo-flickr {
+	background-position: 50% -277px;
+	width: 92px;
+	height: 29px;
+}
+
+.logo-datagov {
+	background-position: 50% -452px;
+	width: 135px;
+	height: 26px;
+}
+
+.logo-ign {
+	background-position: 50% -393px;
+	width: 110px;
+}
+
+.logo-etsy {
+	background-position: 50% -428px;
+	width: 57px;
+	background-size: 110px;
+}
+
+.logo-european-commission {
+	background-position: 50% -526px;
+	width: 125px;
+}
+
+.logo-nps {
+	background-position: 50% -483px;
+	width: 32px;
+	height: 40px;
+	margin-top: .5em;
+	margin-bottom: .5em;
+	background-size: 106px;
+}
+
+.features {
+	-webkit-column-count: 3;
+	-moz-column-count: 3;
+	column-count: 3;
+}
+.features ul {
+	padding-left: 1.6em;
+	margin: 0 0 1.8em;
+}
+.features h3 {
+	margin: 0 0 0.8em;
+	padding: 0;
+}
+.features h4 {
+	margin: 0 0 0.3em;
+}
+
+
+/* tutorials */
+
+.example-img {
+	float: left;
+	width: 14em;
+	max-width: 100%;
+	border-radius: 5px;
+	margin: 0 1.5em 1.5em 0;
+	border: thin solid #ccc;
+}
+
+.examples .container h3 {
+	margin-top: 0;
+}
+.post-date {
+	float: left;
+	width: 130px;
+	line-height: 1.6;
+	color: #999;
+	font-size: 18px;
+}
+.post-info {
+	overflow: hidden;
+}
+.post-title {
+	margin-top: 0;
+}
+
+
+/* plugins */
+
+.plugins td:first-child,
+.plugins td:last-child a {
+	white-space: nowrap;
+}
+
+table.plugins td:first-child a {
+	font-weight: bold;
+}
+
+.plugins-page .toc-col {
+	float: left;
+	width: 25%;
+}
+
+
+/* API docs */
+
+.api-page .toc-col {
+	position: relative;
+	float: left;
+	width: 20%;
+	padding-right: 1em;
+	margin: 0;
+	box-sizing: border-box;
+}
+
+.api-page .toc-col.map-col {
+	border-right: thin solid #eee;
+}
+
+.api-page .toc-col.map-col ~ .toc-col {
+	right: -1.5em;
+}
+
+.api-page #toc ~ h2 {
+	font-weight: 700;
+	font-size: 1.75em;
+	color: #333;
+	border-bottom: 3px solid #555;
+	transition: border-color .25s ease;
+}
+.api-page #toc ~ h2:target {
+	border-color: #1EB300;
+}
+.api-page h2:first-child {
+	border: none;
+}
+
+#toc h4 {
+	margin-top: 0;
+}
+
+#toc ul {
+	padding: 0;
+	list-style: none;
+	margin-top: 0;
+	margin-bottom: 25px;
+}
+
+#toc .colborder {
+	padding-right: 14px;
+}
+
+#toc .span-3 {
+	margin: 0;
+	padding-right: 3em;
+	width: 16.825%;
+	box-sizing: border-box;
+}
+
+#toc .span-3.last {
+	padding-right: 0;
+}
+
+#toc-copy {
+	display: none;
+}
+
+#toc-copy div {
+	border: 0;
+	margin: 0;
+	padding: 0;
+	width: auto;
+	float: none;
+}
+
+#toc-copy h4 {
+	margin: 0;
+	padding-bottom: .333em;
+}
+
+#toc-copy hr {
+	background-color: transparent;
+	margin: 0 0 .5em;
+}
+
+#toc-copy ul {
+	display: none;
+	list-style: none;
+}
+
+#toc-copy ul li {
+	white-space: nowrap;
+}
+
+#toc-copy ul li a {
+	position: relative;
+	padding: .25em .5em 0;
+	z-index: 10;
+}
+
+#toc-copy .toc-col {
+	position: static;
+}
+
+ at media screen and (max-width: 1350px) {
+	#toc-copy {
+		display: block;
+		position: fixed;
+		top: 0.1em;
+		left: 0.25em;
+		width: 32px;
+		height: 32px;
+		opacity: 0;
+		cursor: pointer;
+		-webkit-transition: opacity .2s ease;
+		transition: opacity .2s ease;
+	}
+
+	#toc-copy > div { display: none; }
+
+	.scrolled #toc-copy {
+		opacity: 1;
+		background: white;
+	}
+
+	#toc-copy.active {
+		background-color: white;
+		background-color: rgba(255, 255, 255, 0.9);
+		padding: 2em;
+		width: 100%;
+		height: 100%;
+		overflow-x: hidden;
+		overflow-y: scroll;
+		cursor: default;
+		box-sizing: border-box;
+	}
+
+	#toc-copy:before,
+	#toc-copy:after {
+		content: '';
+		position: absolute;
+		left: 5px;
+		width: 22px;
+		height: 14px;
+		border-top: 2px solid black;
+		cursor: pointer;
+		box-sizing: border-box;
+		-webkit-transition: -webkit-transform .25s ease;
+		transition: transform .25s ease;
+	}
+
+	#toc-copy:before {
+		top: 9px;
+		border-bottom: 2px solid black;
+	}
+
+	#toc-copy:after {
+		top: 15px;
+	}
+
+	#toc-copy.active:before {
+		top: 5px;
+		left: 9px;
+		border-bottom: 0;
+		-webkit-transform: rotate(-135deg);
+		transform: rotate(-135deg);
+	}
+
+	#toc-copy.active:after {
+		top: 13px;
+		left: 9px;
+		-webkit-transform: rotate(-45deg);
+		transform: rotate(-45deg);
+	}
+
+	#toc-copy.active div { display: block; }
+
+	#toc-copy h4.active, #toc-copy h4:hover {
+		color: black;
+		cursor: pointer;
+	}
+
+	#toc-copy h4.active + ul {
+		display: block;
+		padding: 0;
+		margin: 0 0 .5em;
+	}
+
+	#toc-copy ul li a { padding: .25em 0; }
+}
+
+ at media screen and (min-width: 900px) and (max-width: 1350px) {
+	#toc-copy {
+		width: 40px;
+		height: 40px;
+	}
+
+	#toc-copy.active {
+		padding: 2.5em;
+	}
+
+	#toc-copy:before,
+	#toc-copy:after {
+		left: 8px;
+	}
+
+	#toc-copy:before { top: 13px; }
+
+	#toc-copy:after { top: 19px; }
+
+	#toc-copy.active:before {
+		top: 7px;
+		left: 10px;
+	}
+
+	#toc-copy.active:after {
+		top: 15px;
+		left: 10px;
+	}
+}
+
+ at media screen and (min-width: 1350px) and (min-height: 600px) {
+	#toc-copy {
+		display: block;
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: auto;
+		height: auto;
+		padding: 2em;
+		opacity: 0;
+		transition: opacity .25s ease;
+		-webkit-transition: opacity .25s ease;
+	}
+
+	#toc-copy:before {
+		content: 'Table of contents';
+		display: block;
+		margin: -.25em 0 1em;
+		font-size: 75%;
+		font-weight: 300;
+		text-transform: uppercase;
+	}
+
+	.scrolled #toc-copy { opacity: 1; }
+
+	#toc-copy h4 { padding-right: 5em; }
+
+	#toc-copy ul {
+		position: absolute;
+		left: 100%;
+		margin: -4.9em 0 0 -4.5em;
+		padding: 3em 6em 3em 0;
+	}
+
+	#toc-copy h4:hover + ul,
+	#toc-copy ul:hover {
+		display: block;
+	}
+
+	#toc-copy h4:hover + ul:before,
+	#toc-copy ul:hover:before {
+		content: '';
+		position: absolute;
+		top: 3.775em;
+		right: 100%;
+		margin-right: .25em;
+		width: 1em;
+		height: 1em;
+		border-top: 2px solid #eee;
+	}
+
+	#toc-copy h4:hover + ul:after,
+	#toc-copy ul:hover:after {
+		content: '';
+		position: absolute;
+		z-index: -1;
+		top: -1000px;
+		bottom: -1000px;
+		left: 0;
+		width: 12.5em;
+		background: white;
+		background: rgba(255,255,255,0.9);
+	}
+
+	.plugins-page #toc-copy h4:hover + ul:after,
+	.plugins-page #toc-copy ul:hover:after {
+		width: 17em;
+	}
+
+	#toc-copy h4:hover, #toc-copy h4.hover {
+		color: black;
+		cursor: pointer;
+	}
+}
+
+/* API docs - tables */
+
+.api-page table td {
+	color: #666;
+}
+.api-page table td:first-child {
+	color: #777;
+}
+.api-page table td:last-child {
+	color: black;
+}
+.api-page table td:last-child code {
+	word-break: break-word;
+	white-space: pre-wrap;
+}
+.api-page table td code i {
+	color: #9a9;
+}
+.api-page table td code b {
+	color: black;
+	font-weight: normal;
+}
+.api-page table td,
+.api-page table th {
+	font-size: 14px;
+}
+
+.api-page p {
+	margin-top: 0;
+}
+
+tr:target {
+	background: yellow;
+	-webkit-animation: highlight 2s ease 0.5s 1 normal forwards;
+	        animation: highlight 2s ease 0.5s 1 normal forwards;
+}
+
+ at -webkit-keyframes highlight {
+	0%   { background: yellow; }
+	100% { background: white; }
+}
+ at keyframes highlight {
+	0%   { background: yellow; }
+	100% { background: white; }
+}
+
+.api-page h2[id]:before,
+.api-page tr[id] td:first-child:before {
+	content: 'Permalink';
+	display: inline-block;
+	margin: 0px 5px 0px -35px;
+	width: 30px;
+	height: 0;
+	overflow: hidden;
+	padding-top: 20px;
+	line-height: 20px;
+	vertical-align: baseline;
+	background: url(../images/sprite.png) -0px -0px no-repeat;
+	opacity: 0.2;
+	border-radius: 50%;
+	cursor: pointer;
+	position: absolute;
+}
+
+.api-page h2[id]:before {
+	margin-left: -32px;
+	margin-top: 14px;
+}
+
+.api-page tr[id] td:first-child:before {
+	opacity: 0;
+}
+
+.api-page tr[id]:hover td:first-child:before {
+	opacity: 1;
+}
+
+.api-page h2[id]:hover:before { opacity: 1; }
+
+ at media (-webkit-min-device-pixel-ratio: 1.25),(min-resolution: 120dpi) {
+	.api-page h2[id]:before,
+	.api-page tr[id] td:first-child:before {
+		background-image: url(../images/sprite.svg);
+	}
+}
+
+ at media screen and (max-width: 767px) {
+	#toc .colborder {
+		padding: 0;
+	}
+
+	.colborder {
+		margin: 0;
+		border: 0;
+	}
+
+	#toc .toc-col {
+		width: 50%;
+		float: none;
+		position: static;
+		display: inline-block;
+		margin: 0;
+		border: 0;
+		padding-right: .5em;
+		margin-right: -.25em;
+		vertical-align: top;
+		box-sizing: border-box;
+	}
+
+	.toc-col.last-col {
+		clear: both;
+	}
+
+	th,
+	td {
+		border: 0;
+	}
+
+	tr {
+		border-bottom: 1px solid #eee;
+	}
+
+	table.plugins tbody tr {
+		display: block;
+		padding-bottom: 1em;
+	}
+
+	table.plugins tbody tr td {
+		white-space: normal;
+		display: inline-block;
+		padding-bottom: 0;
+	}
+
+	table.plugins tr:first-child {
+		padding-bottom: 0;
+	}
+
+	table.plugins tr:first-child th {
+		display: block;
+	}
+
+	table.plugins tr:first-child th ~ th {
+		display: none;
+	}
+
+	table.plugins td:first-child {
+		display: block;
+		white-space: normal;
+	}
+
+	.api-page table tbody tr {
+		display: block;
+	}
+
+	.api-page table tbody tr th,
+	.api-page table tbody tr td {
+		display: inline-block;
+		background-color: transparent;
+		width: auto;
+	}
+
+	.api-page table tr:first-child th ~ th {
+		display: none;
+	}
+
+	.api-page table tbody tr th:nth-child(2),
+	.api-page table tbody tr th:nth-child(3) {
+		display: inline-block;
+	}
+
+	.api-page table tr th:last-child {
+		display: none !important;
+	}
+
+	.api-page table tbody tr td:last-child {
+		display: block;
+		border-top: thin dashed #ddd;
+		padding: 1em;
+	}
+
+	/*.api-page table tbody tr td:last-child:before {
+		content: 'Description';
+		display: block;
+		text-transform: uppercase;
+		font-size: 90%;
+		margin-bottom: .75em;
+		color: #666;
+	}*/
+
+	td code {
+		word-break: break-word;
+	}
+}
+
+ at media screen and (max-width: 56em) {
+	.container {
+		padding: 0 2em 1.5em;
+	}
+
+	.footer, .social-buttons {
+		text-align: center;
+	}
+
+	.footer {
+		margin-top: 2em;
+	}
+
+	.ext-links {
+		position: static;
+		margin: 0 auto 2em;
+		text-align: center;
+		clear: both;
+	}
+
+	.ext-link {
+		display: inline-block;
+		vertical-align: middle;
+		margin: .25em;
+	}
+
+	.features {
+		-webkit-column-count: 2;
+		-moz-column-count: 2;
+		column-count: 2;
+	}
+}
+
+ at media screen and (max-width: 500px) {
+	.nav {
+		font-size: 1.25em;
+		padding-bottom: 1em;
+		line-height: 1;
+	}
+
+	h1 {
+		margin: 1em 0;
+	}
+
+	h3.tagline {
+		font-size: 1.05em;
+		margin: 0 1em;
+	}
+
+	.container {
+		padding: 0 1.5em 1.5em;
+	}
+
+	.logo {
+		margin: 0.6em;
+	}
+
+	.usedby-title {
+		padding-top: 1em;
+		padding-bottom: 0.5em;
+		font-size: 1.8em;
+	}
+
+	.usedby {
+		padding-left: 0;
+		padding-right: 0;
+		padding-bottom: 0;
+	}
+
+	.features {
+		-webkit-column-count: 1;
+		-moz-column-count: 1;
+		column-count: 1;
+	}
+
+	.example-img {
+		float: none;
+		display: block;
+		width: auto;
+		margin: 0 0 -.25em;
+		border: 0;
+	}
+
+	.post-date {
+		float: none;
+		width: auto;
+		margin: 0 0 .333em;
+	}
+
+	.api-page h2[id] { text-indent: 24px; }
+	.api-page h2[id]:before { margin-left: -28px; }
+}
+
+.width250 {
+	width: 250px;
+}
+.width200 {
+	width: 200px;
+}
+.width300 {
+	width: 300px;
+}
+.width100 {
+	width: 100px;
+}
+.width140 {
+	width: 140px;
+}
+.minwidth {
+	width: 1px;
+}
+
+.download-page table td a {
+	white-space: nowrap;
+}
+
+.tutorials-back {
+	margin-bottom: -3em;
+}
+
+.post-page h2 {
+	margin-top: 0;
+}
+
+.post-meta {
+	color: #888;
+	margin-top: -1em;
+}
+
+iframe[src*='youtube.com'] {
+	max-width: 100% !important;
+}
+
+#disqus_thread {
+	margin-top: 3em;
+}
+
diff --git a/loleaflet/docs/css/normalize.css b/loleaflet/docs/css/normalize.css
new file mode 100644
index 0000000..08f8950
--- /dev/null
+++ b/loleaflet/docs/css/normalize.css
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+  background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+  font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; /* 1 */
+  font: inherit; /* 2 */
+  margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+  text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+  cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+  line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box; /* 2 */
+  box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+  border: 0; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
diff --git a/loleaflet/docs/highlight/LICENSE b/loleaflet/docs/highlight/LICENSE
new file mode 100644
index 0000000..422deb7
--- /dev/null
+++ b/loleaflet/docs/highlight/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of highlight.js nor the names of its contributors 
+      may be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/loleaflet/docs/highlight/highlight.pack.js b/loleaflet/docs/highlight/highlight.pack.js
new file mode 100644
index 0000000..12de77f
--- /dev/null
+++ b/loleaflet/docs/highlight/highlight.pack.js
@@ -0,0 +1 @@
+!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/no-?highlight|plain|text/.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/.exec(i))return E(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(E(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i})
 );return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:"start"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}f+="<"+t(e)+Array.prototype.map.call(e.attributes,r).join("")+">"}function u(e){f+="</"+t(e)+">"}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]
 ?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0]
 .toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?"":w.classPrefix,i='<span class="'+a,o=t?"":"</span>";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(B);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(B);r;){e+=n(B.substr(t,r.index-t));var a=g(L,r);a?(y+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(B)}return e+n(B.substr(t))}function d(){if(L.sL&&!x[L.sL])return n(B);var e=L.sL?f(L.sL,B,!0,M[L.sL]):l(B);return L.r>0&&(y+=e.r),"continuous"==L.subLanguageMode&&(M[L.sL]=e.top),h(e.language,e.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,B=""):e.eB?(k+=n(t)+r,B=""):(k+=r,B=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(B+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(B+=t),k+=b();do L.cN&&(k+="</span>"),y+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),B="",a.st
 arts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"<unnamed>")+'"');return B+=t,t.length||1}var N=E(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,M={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var B="",y=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="</span>");return{r:y,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||w.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(E(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return w.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,w.tabReplace)})),w.useBR&&(e=e.replace(/\n/g,"<br>")),e}function h(e,n,t){var r=n?R[n]:t,a=
 [e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;w.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){w=o(w,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.
 keys(x)}function E(e){return x[e]||x[R[e]]}var w={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=E,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag
 ",bK:"TODO FIXME NOTE BUG XXX",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError Rang
 eError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]
 /,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute"
 ,b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("xml",function(t){var e="[A-Za-z0-9\\._:-]+",s={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/</,r:0,c:[s,{cN:"attribute",b:e,r:0},{b:"=",r:0,c:[{cN:"value",c:[s],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("<!--","-->",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[c],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[c],starts:{e:"</script>",rE:!0,sL:""}},s,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("bash",fu
 nction(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompi
 le zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});
\ No newline at end of file
diff --git a/loleaflet/docs/highlight/styles/github-gist.css b/loleaflet/docs/highlight/styles/github-gist.css
new file mode 100644
index 0000000..a5bef16
--- /dev/null
+++ b/loleaflet/docs/highlight/styles/github-gist.css
@@ -0,0 +1,211 @@
+/**
+ * GitHub Gist Theme
+ * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
+ */
+
+.hljs {
+  display: block;
+  background:#f8f8f8;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+  -webkit-text-size-adjust: none;
+}
+
+.hljs-comment,
+.bash .hljs-shebang,
+.java .hljs-javadoc,
+.javascript .hljs-javadoc {
+  color: #969896;
+}
+
+.hljs-string,
+.apache .hljs-sqbracket,
+.coffeescript .hljs-subst,
+.coffeescript .hljs-regexp,
+.cpp .hljs-preprocessor,
+.c .hljs-preprocessor,
+.javascript .hljs-regexp,
+.json .hljs-attribute,
+.makefile .hljs-variable,
+.markdown .hljs-value,
+.markdown .hljs-link_label,
+.markdown .hljs-strong,
+.markdown .hljs-emphasis,
+.markdown .hljs-blockquote,
+.nginx .hljs-regexp,
+.nginx .hljs-number,
+.objectivec .hljs-preprocessor .hljs-title,
+.perl .hljs-regexp,
+.php .hljs-regexp,
+.xml .hljs-value,
+.less .hljs-built_in,
+.scss .hljs-built_in {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.css .hljs-at_rule,
+.css .hljs-important,
+.http .hljs-request,
+.ini .hljs-setting,
+.java .hljs-javadoctag,
+.javascript .hljs-tag,
+.javascript .hljs-javadoctag,
+.nginx .hljs-title,
+.objectivec .hljs-preprocessor,
+.php .hljs-phpdoc,
+.sql .hljs-built_in,
+.less .hljs-tag,
+.less .hljs-at_rule,
+.scss .hljs-tag,
+.scss .hljs-at_rule,
+.scss .hljs-important,
+.stylus .hljs-at_rule,
+.go .hljs-typename,
+.swift .hljs-preprocessor {
+  color: #a71d5d;
+}
+
+.apache .hljs-common,
+.apache .hljs-cbracket,
+.apache .hljs-keyword,
+.bash .hljs-literal,
+.bash .hljs-built_in,
+.coffeescript .hljs-literal,
+.coffeescript .hljs-built_in,
+.coffeescript .hljs-number,
+.cpp .hljs-number,
+.cpp .hljs-built_in,
+.c .hljs-number,
+.c .hljs-built_in,
+.cs .hljs-number,
+.cs .hljs-built_in,
+.css .hljs-attribute,
+.css .hljs-hexcolor,
+.css .hljs-number,
+.css .hljs-function,
+.http .hljs-literal,
+.http .hljs-attribute,
+.java .hljs-number,
+.javascript .hljs-built_in,
+.javascript .hljs-literal,
+.javascript .hljs-number,
+.json .hljs-number,
+.makefile .hljs-keyword,
+.markdown .hljs-link_reference,
+.nginx .hljs-built_in,
+.objectivec .hljs-literal,
+.objectivec .hljs-number,
+.objectivec .hljs-built_in,
+.php .hljs-literal,
+.php .hljs-number,
+.python .hljs-number,
+.ruby .hljs-prompt,
+.ruby .hljs-constant,
+.ruby .hljs-number,
+.ruby .hljs-subst .hljs-keyword,
+.ruby .hljs-symbol,
+.sql .hljs-number,
+.puppet .hljs-function,
+.less .hljs-number,
+.less .hljs-hexcolor,
+.less .hljs-function,
+.less .hljs-attribute,
+.scss .hljs-preprocessor,
+.scss .hljs-number,
+.scss .hljs-hexcolor,
+.scss .hljs-function,
+.scss .hljs-attribute,
+.stylus .hljs-number,
+.stylus .hljs-hexcolor,
+.stylus .hljs-attribute,
+.stylus .hljs-params,
+.go .hljs-built_in,
+.go .hljs-constant,
+.swift .hljs-built_in,
+.swift .hljs-number {
+  color: #0086b3;
+}
+
+.apache .hljs-tag,
+.cs .hljs-xmlDocTag,
+.css .hljs-tag,
+.xml .hljs-title,
+.stylus .hljs-tag {
+  color: #63a35c;
+}
+
+.bash .hljs-variable,
+.cs .hljs-preprocessor,
+.cs .hljs-preprocessor .hljs-keyword,
+.css .hljs-attr_selector,
+.css .hljs-value,
+.ini .hljs-value,
+.ini .hljs-keyword,
+.javascript .hljs-tag .hljs-title,
+.makefile .hljs-constant,
+.nginx .hljs-variable,
+.xml .hljs-tag,
+.scss .hljs-variable {
+  color: #333333;
+}
+
+.bash .hljs-title,
+.coffeescript .hljs-title,
+.cpp .hljs-title,
+.c .hljs-title,
+.cs .hljs-title,
+.css .hljs-id,
+.css .hljs-class,
+.css .hljs-pseudo,
+.ini .hljs-title,
+.java .hljs-title,
+.javascript .hljs-title,
+.makefile .hljs-title,
+.objectivec .hljs-title,
+.perl .hljs-sub,
+.php .hljs-title,
+.python .hljs-decorator,
+.python .hljs-title,
+.ruby .hljs-parent,
+.ruby .hljs-title,
+.xml .hljs-attribute,
+.puppet .hljs-title,
+.less .hljs-id,
+.less .hljs-pseudo,
+.less .hljs-class,
+.scss .hljs-id,
+.scss .hljs-pseudo,
+.scss .hljs-class,
+.stylus .hljs-class,
+.stylus .hljs-id,
+.stylus .hljs-pseudo,
+.stylus .hljs-title,
+.swift .hljs-title,
+.diff .hljs-chunk {
+  color: #795da3;
+}
+
+.coffeescript .hljs-reserved,
+.coffeescript .hljs-attribute {
+  color: #1d3e81;
+}
+
+.diff .hljs-chunk {
+  font-weight: bold;
+}
+
+.diff .hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.diff .hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.markdown .hljs-link_url {
+  text-decoration: underline;
+}
diff --git a/loleaflet/docs/images/choropleth.png b/loleaflet/docs/images/choropleth.png
new file mode 100644
index 0000000..89fca74
Binary files /dev/null and b/loleaflet/docs/images/choropleth.png differ
diff --git a/loleaflet/docs/images/custom-icons.png b/loleaflet/docs/images/custom-icons.png
new file mode 100644
index 0000000..5c479ef
Binary files /dev/null and b/loleaflet/docs/images/custom-icons.png differ
diff --git a/loleaflet/docs/images/favicon.ico b/loleaflet/docs/images/favicon.ico
new file mode 100644
index 0000000..6081400
Binary files /dev/null and b/loleaflet/docs/images/favicon.ico differ
diff --git a/loleaflet/docs/images/forum-round.png b/loleaflet/docs/images/forum-round.png
new file mode 100644
index 0000000..d7b880b
Binary files /dev/null and b/loleaflet/docs/images/forum-round.png differ
diff --git a/loleaflet/docs/images/geojson.png b/loleaflet/docs/images/geojson.png
new file mode 100644
index 0000000..f81c328
Binary files /dev/null and b/loleaflet/docs/images/geojson.png differ
diff --git a/loleaflet/docs/images/github-round.png b/loleaflet/docs/images/github-round.png
new file mode 100644
index 0000000..9bf4a5b
Binary files /dev/null and b/loleaflet/docs/images/github-round.png differ
diff --git a/loleaflet/docs/images/layers-control.png b/loleaflet/docs/images/layers-control.png
new file mode 100644
index 0000000..f2b29ad
Binary files /dev/null and b/loleaflet/docs/images/layers-control.png differ
diff --git a/loleaflet/docs/images/leaf-green.png b/loleaflet/docs/images/leaf-green.png
new file mode 100644
index 0000000..480c913
Binary files /dev/null and b/loleaflet/docs/images/leaf-green.png differ
diff --git a/loleaflet/docs/images/leaf-orange.png b/loleaflet/docs/images/leaf-orange.png
new file mode 100644
index 0000000..94ea5c1
Binary files /dev/null and b/loleaflet/docs/images/leaf-orange.png differ
diff --git a/loleaflet/docs/images/leaf-red.png b/loleaflet/docs/images/leaf-red.png
new file mode 100644
index 0000000..8c6b7e1
Binary files /dev/null and b/loleaflet/docs/images/leaf-red.png differ
diff --git a/loleaflet/docs/images/leaf-shadow.png b/loleaflet/docs/images/leaf-shadow.png
new file mode 100644
index 0000000..119a71d
Binary files /dev/null and b/loleaflet/docs/images/leaf-shadow.png differ
diff --git a/loleaflet/docs/images/logo.png b/loleaflet/docs/images/logo.png
new file mode 100644
index 0000000..0dca5e9
Binary files /dev/null and b/loleaflet/docs/images/logo.png differ
diff --git a/loleaflet/docs/images/logos.png b/loleaflet/docs/images/logos.png
new file mode 100644
index 0000000..2b4df57
Binary files /dev/null and b/loleaflet/docs/images/logos.png differ
diff --git a/loleaflet/docs/images/mobile.png b/loleaflet/docs/images/mobile.png
new file mode 100644
index 0000000..5a14f91
Binary files /dev/null and b/loleaflet/docs/images/mobile.png differ
diff --git a/loleaflet/docs/images/quick-start.png b/loleaflet/docs/images/quick-start.png
new file mode 100644
index 0000000..26c5c8e
Binary files /dev/null and b/loleaflet/docs/images/quick-start.png differ
diff --git a/loleaflet/docs/images/sprite.png b/loleaflet/docs/images/sprite.png
new file mode 100644
index 0000000..bcbb751
Binary files /dev/null and b/loleaflet/docs/images/sprite.png differ
diff --git a/loleaflet/docs/images/sprite.svg b/loleaflet/docs/images/sprite.svg
new file mode 100644
index 0000000..847976e
--- /dev/null
+++ b/loleaflet/docs/images/sprite.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="400"
+   height="200"
+   id="svg3550"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="New document 9">
+  <defs
+     id="defs3552" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.9263916"
+     inkscape:cx="14.748401"
+     inkscape:cy="150.23988"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:snap-global="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3558"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3555">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-852.36218)">
+    <path
+       style="color:#000000;fill:#4e4e4e;fill-opacity:0.94117647;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 14,857.36218 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 L 11,859.54968 c 0.70051,0 1.3332,0.25386 1.84375,0.65625 l 0.4375,-0.4375 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.39174,0.39174 0.39174,1.04576 0,1.4375 l -1.0625,1.0625 -1.5,1.5 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.0772,-0.0772 -0.10948,-0.1877 -0.15625,-0.28125 l -1.3125,1.3125 1.84375,1.84375 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 l 3.6875,-3.6875 c 0.783469,-0.78347 0.783469,-2.02903 0,-2.8125 l -2.1875,-2.1875 C 15.01451,857.56419 14.51124,857.36218 14,857.36218 z m -3,3 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 l -3.6875,3.6875 c -0.78347,0.78347 -0.78347,2.02903 0,2.8125 l 2.1875,2.1875 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 L 12.5,868.04968 c -0.70051,0 -1.3332,-0.25386 -1.84375,-0.65625 l -0.4375,0.4375 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.39174,-0.39174 -
 0.39174,-1.04576 0,-1.4375 l 1.0625,-1.0625 1.5,-1.5 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.0772,0.0772 0.10948,0.1877 0.15625,0.28125 l 1.3125,-1.3125 -1.84375,-1.84375 C 12.01451,860.56419 11.51124,860.36218 11,860.36218 z"
+       id="rect4010"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4044"
+       d="m 14,877.36218 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 L 11,879.54968 c 0.70051,0 1.3332,0.25386 1.84375,0.65625 l 0.4375,-0.4375 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.39174,0.39174 0.39174,1.04576 0,1.4375 l -1.0625,1.0625 -1.5,1.5 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.0772,-0.0772 -0.10948,-0.1877 -0.15625,-0.28125 l -1.3125,1.3125 1.84375,1.84375 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 l 3.6875,-3.6875 c 0.783469,-0.78347 0.783469,-2.02903 0,-2.8125 l -2.1875,-2.1875 C 15.01451,877.56419 14.51124,877.36218 14,877.36218 z m -3,3 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 l -3.6875,3.6875 c -0.78347,0.78347 -0.78347,2.02903 0,2.8125 l 2.1875,2.1875 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 L 12.5,888.04968 c -0.70051,0 -1.3332,-0.25386 -1.84375,-0.65625 l -0.4375,0.4375 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.39174,-0.39174 -
 0.39174,-1.04576 0,-1.4375 l 1.0625,-1.0625 1.5,-1.5 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.0772,0.0772 0.10948,0.1877 0.15625,0.28125 l 1.3125,-1.3125 -1.84375,-1.84375 C 12.01451,880.56419 11.51124,880.36218 11,880.36218 z"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path6649"
+       d="m 14,897.36218 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 L 11,899.54968 c 0.70051,0 1.3332,0.25386 1.84375,0.65625 l 0.4375,-0.4375 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.39174,0.39174 0.39174,1.04576 0,1.4375 l -1.0625,1.0625 -1.5,1.5 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.0772,-0.0772 -0.10948,-0.1877 -0.15625,-0.28125 l -1.3125,1.3125 1.84375,1.84375 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 l 3.6875,-3.6875 c 0.783469,-0.78347 0.783469,-2.02903 0,-2.8125 l -2.1875,-2.1875 C 15.01451,897.56419 14.51124,897.36218 14,897.36218 z m -3,3 c -0.51124,0 -1.01451,0.20201 -1.40625,0.59375 l -3.6875,3.6875 c -0.78347,0.78347 -0.78347,2.02903 0,2.8125 l 2.1875,2.1875 c 0.78347,0.78347 2.02903,0.78347 2.8125,0 L 12.5,908.04968 c -0.70051,0 -1.3332,-0.25386 -1.84375,-0.65625 l -0.4375,0.4375 c -0.39174,0.39174 -1.04576,0.39174 -1.4375,0 l -1.0625,-1.0625 c -0.39174,-0.39174 -
 0.39174,-1.04576 0,-1.4375 l 1.0625,-1.0625 1.5,-1.5 c 0.19587,-0.19587 0.46313,-0.3125 0.71875,-0.3125 0.25562,0 0.52288,0.11663 0.71875,0.3125 l 1.0625,1.0625 c 0.0772,0.0772 0.10948,0.1877 0.15625,0.28125 l 1.3125,-1.3125 -1.84375,-1.84375 C 12.01451,900.56419 11.51124,900.36218 11,900.36218 z"
+       style="color:#000000;fill:#7b7b7b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+</svg>
diff --git a/loleaflet/docs/images/twitter-round.png b/loleaflet/docs/images/twitter-round.png
new file mode 100644
index 0000000..d56d830
Binary files /dev/null and b/loleaflet/docs/images/twitter-round.png differ
diff --git a/loleaflet/docs/images/twitter.png b/loleaflet/docs/images/twitter.png
new file mode 100644
index 0000000..cd2a916
Binary files /dev/null and b/loleaflet/docs/images/twitter.png differ
diff --git a/loleaflet/docs/js/docs.js b/loleaflet/docs/js/docs.js
new file mode 100644
index 0000000..057b5eb
--- /dev/null
+++ b/loleaflet/docs/js/docs.js
@@ -0,0 +1,52 @@
+
+var tocCopy = document.createElement('div');
+tocCopy.id = 'toc-copy';
+
+var toc = document.querySelector('#toc');
+
+if (toc) {
+  tocCopy.innerHTML = toc.innerHTML;
+  document.getElementsByClassName('container')[0].appendChild(tocCopy);
+
+  var menus = document.querySelectorAll('#toc-copy ul');
+
+  for (var i = 0; i < menus.length; i++) {
+    menus[i].addEventListener('mouseover', function() {
+      this.previousElementSibling.classList.add('hover')
+    });
+
+    menus[i].addEventListener('mouseout', function() {
+      this.previousElementSibling.classList.remove('hover')
+    });
+  }
+
+  var labels = document.querySelectorAll('#toc-copy h4');
+
+  for (var i = 0; i < labels.length; i++) {
+    labels[i].addEventListener('click', function() {
+      this.classList.toggle('active')
+    });
+  }
+
+  tocCopy.addEventListener('click', function(e) {
+    if (e.target.nodeName != 'H4') {
+      this.classList.toggle('active');
+    }
+  });
+
+  var scrollPos = function scrollPos () {
+    var scroll = window.scrollY;
+
+    if (scroll >= (toc.offsetHeight + toc.offsetTop)) {
+      document.body.classList.add('scrolled');
+    } else {
+      document.body.classList.remove('scrolled');
+    }
+  }
+
+  scrollPos();
+
+  window.addEventListener('scroll', function(e) {
+    scrollPos();
+  });
+}
diff --git a/loleaflet/reference.html b/loleaflet/reference.html
new file mode 100644
index 0000000..8390911
--- /dev/null
+++ b/loleaflet/reference.html
@@ -0,0 +1,6939 @@
+<!DOCTYPE html>
+<html>
+<head>
+
+
+	<title>Documentation - Leaflet - a JavaScript library for interactive maps</title>
+
+	<meta charset="utf-8" />
+
+
+
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+
+
+	<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
+
+	<link rel="stylesheet" href="docs/css/normalize.css" />
+	<link rel="stylesheet" href="docs/css/main.css" />
+
+	<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,400italic,700,300' rel='stylesheet' type='text/css'>
+
+	<script src="docs/highlight/highlight.pack.js"></script>
+	<link rel="stylesheet" href="docs/highlight/styles/github-gist.css" />
+
+</head>
+<body class="api-page">
+
+<div class="container">
+
+
+<h2>API Reference</h2>
+
+<div id="toc" class="clearfix">
+	<div class="toc-col map-col">
+		<h4>Map</h4>
+		<ul>
+			<li><a href="#map-usage">Usage example</a></li>
+			<li><a href="#map-constructor">Creation</a></li>
+			<li><a href="#map-options">Options</a></li>
+			<li><a href="#map-events">Events</a></li>
+		</ul>
+		<h4>Map Methods</h4>
+		<ul>
+			<li><a href="#map-set-methods">Modifying map state</a></li>
+			<li><a href="#map-get-methods">Getting map state</a></li>
+			<li><a href="#map-stuff-methods">Layers and controls</a></li>
+			<li><a href="#map-conversion-methods">Conversion methods</a></li>
+			<li><a href="#map-misc-methods">Other methods</a></li>
+		</ul>
+		<h4>Map Misc</h4>
+		<ul>
+			<li><a href="#map-properties">Properties</a></li>
+			<li><a href="#map-panes">Panes</a></li>
+		</ul>
+	</div>
+	<div class="toc-col">
+		<h4>UI Layers</h4>
+		<ul>
+			<li><a href="#marker">Marker</a></li>
+			<li><a href="#popup">Popup</a></li>
+		</ul>
+		<h4>Raster Layers</h4>
+		<ul>
+			<li><a href="#tilelayer">TileLayer</a></li>
+			<li><a href="#tilelayer-wms">TileLayer.WMS</a></li>
+			<li><a href="#imageoverlay">ImageOverlay</a></li>
+		</ul>
+		<h4>Vector Layers</h4>
+		<ul>
+			<li><a href="#path">Path</a></li>
+			<li><a href="#polyline">Polyline</a></li>
+			<li><a href="#polygon">Polygon</a></li>
+			<li><a href="#rectangle">Rectangle</a></li>
+			<li><a href="#circle">Circle</a></li>
+			<li><a href="#circlemarker">CircleMarker</a></li>
+		</ul>
+	</div>
+	<div class="toc-col">
+		<h4>Other Layers</h4>
+		<ul>
+			<li><a href="#layergroup">LayerGroup</a></li>
+			<li><a href="#featuregroup">FeatureGroup</a></li>
+			<li><a href="#geojson">GeoJSON</a></li>
+			<li><a href="#gridlayer">GridLayer</a></li>
+		</ul>
+		<h4>Basic Types</h4>
+		<ul>
+			<li><a href="#latlng">LatLng</a></li>
+			<li><a href="#latlngbounds">LatLngBounds</a></li>
+			<li><a href="#point">Point</a></li>
+			<li><a href="#bounds">Bounds</a></li>
+			<li><a href="#icon">Icon</a></li>
+			<li><a href="#divicon">DivIcon</a></li>
+		</ul>
+		<h4>Controls</h4>
+		<ul>
+			<li><a href="#control-zoom">Zoom</a></li>
+			<li><a href="#control-attribution">Attribution</a></li>
+			<li><a href="#control-layers">Layers</a></li>
+			<li><a href="#control-scale">Scale</a></li>
+		</ul>
+	</div>
+	<div class="toc-col">
+		<h4>Shared Methods</h4>
+		<ul>
+			<li><a href="#events">Event</a></li>
+            <li><a href="#layers">Layer</a></li>
+			<li><a href="#popups">Popup</a></li>
+		</ul>
+		<h4>Utility</h4>
+		<ul>
+			<li><a href="#browser">Browser</a></li>
+			<li><a href="#util">Util</a></li>
+			<li><a href="#transformation">Transformation</a></li>
+			<li><a href="#lineutil">LineUtil</a></li>
+			<li><a href="#polyutil">PolyUtil</a></li>
+		</ul>
+		<h4>DOM Utility</h4>
+		<ul>
+			<li><a href="#domevent">DomEvent</a></li>
+			<li><a href="#domutil">DomUtil</a></li>
+			<li><a href="#posanimation">PosAnimation</a></li>
+			<li><a href="#draggable">Draggable</a></li>
+		</ul>
+	</div>
+	<div class="toc-col last-col">
+		<h4>Base Classes</h4>
+		<ul>
+			<li><a href="#class">Class</a></li>
+			<li><a href="#evented">Evented</a></li>
+			<li><a href="#layer">Layer</a></li>
+			<li><a href="#control">Control</a></li>
+			<li><a href="#handler">Handler</a></li>
+			<!--<li><a class="nodocs" href="#">IFeature</a></li>-->
+			<li><a href="#projection">Projection</a></li>
+			<li><a href="#crs">CRS</a></li>
+		</ul>
+
+		<h4>Misc</h4>
+		<ul>
+			<li><a href="#event-objects">Event objects</a></li>
+			<li><a href="#global">global switches</a></li>
+			<li><a href="#noconflict">noConflict</a></li>
+			<li><a href="#version">version</a></li>
+		</ul>
+	</div>
+</div>
+
+<!--<a href="#toc" id="back-to-top">↑</a>-->
+
+<hr />
+<p>This reference reflects <strong>Leaflet 1.0</strong>.</p>
+
+<h2 id="map-class">Map</h2>
+
+<p>The central class of the API — it is used to create a map on a page and manipulate it.</p>
+
+<h3 id="map-usage">Usage example</h3>
+
+<pre><code class="javascript">// initialize the map on the "map" div with a given center and zoom
+var map = L.map('map', {
+	center: [51.505, -0.09],
+	zoom: 13
+});</code></pre>
+
+<h3 id="map-constructor" class="left">Creation</h3>
+
+<table data-id='map'>
+	<tr>
+		<th>Factory</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>L.map</b>(
+			<nobr><HTMLElement|String> <i>id</i>,</nobr>
+			<nobr><<a href="#map-options">Map options</a>> <i>options?</i> )</nobr>
+		</code></td>
+
+
+		<td>Instantiates a map object given a div element (or its id) and optionally an object literal with map options described below.</td>
+	</tr>
+</table>
+
+
+
+
+<h3 id="map-options">Options</h3>
+
+<h4>Map State Options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th>Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>center</b></code></td>
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>Initial geographical center of the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoom</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>Initial map zoom.</td>
+	</tr>
+	<tr>
+		<td><code><b>layers</b></code></td>
+		<td><code><a href="#layer">Layer</a>[]</code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>Layers that will be added to the map initially.</td>
+	</tr>
+	<tr>
+		<td><code><b>minZoom</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>Minimum zoom level of the map. Overrides any <code>minZoom</code> set on map layers.</td>
+	</tr>
+	<tr>
+		<td><code><b>maxZoom</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>Maximum zoom level of the map. This overrides any <code>maxZoom</code> set on map layers.</td>
+	</tr>
+	<tr id="map-maxbounds">
+		<td><code><b>maxBounds</b></code></td>
+		<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
+		<td><code><span class="literal">null</span></code></td>
+		<td>When this option is set, the map restricts the view to the given geographical bounds, bouncing the user back when he tries to pan outside the view. To set the restriction dynamically, use <a href="#map-setmaxbounds">setMaxBounds</a> method.</td>
+	</tr>
+	<tr id="map-maxbounds">
+		<td><code><b>maxBoundsViscosity</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">0.0</span></code></td>
+		<td>If <code>maxBounds</code> is set, this options will control how solid the bounds are when dragging the map around. The default value of <span class="number">0.0</span> allows the user to drag outside the bounds at normal speed, higher values will slow down map dragging outside bounds, and <span class="number">1.0</span> makes the bounds fully solid, preventing the user from dragging outside the bounds.</td>
+	</tr>
+	<tr>
+		<td><code><b>crs</b></code></td>
+		<td><code><a href="#crs">CRS</a></code></td>
+		<td><code>L.CRS.<br/>EPSG3857</code></td>
+		<td>Coordinate Reference System to use. Don't change this if you're not sure what it means.</td>
+	</tr>
+	<tr>
+		<td><code><b>renderer</b></code></td>
+		<td><code>Renderer</code></td>
+		<td><code>depends</code></td>
+		<td>The default method for drawing vector layers on the map. <code>L.SVG</code> or <code>L.Canvas</code> by default depending on browser support.</td>
+	</tr>
+</table>
+
+<h4>Interaction Options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th class="width140">Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>dragging</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map be draggable with mouse/touch or not.</td>
+	</tr>
+	<tr>
+		<td><code><b>touchZoom</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map can be zoomed by touch-dragging with two fingers. If passed <code><span class="string">'center'</span></code>, it will zoom to the center of the view regardless of where the touch events (fingers) were.</td>
+	</tr>
+	<tr>
+		<td><code><b>scrollWheelZoom</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map can be zoomed by using the mouse wheel. If passed <code><span class="string">'center'</span></code>, it will zoom to the center of the view regardless of where the mouse was.</td>
+	</tr>
+	<tr>
+		<td><code><b>wheelDebounceTime</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="literal">40</span></code></td>
+		<td>Limits the rate at which a wheel can fire (in milliseconds). By default user can't zoom via wheel more often than once per 40 ms.</td>
+	</tr>
+	<tr>
+		<td><code><b>doubleClickZoom</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map can be zoomed in by double clicking on it and zoomed out by double clicking while holding shift. If passed <code><span class="string">'center'</span></code>, double-click zoom will zoom to the center of the view regardless of where the mouse was.</td>
+	</tr>
+	<tr>
+		<td><code><b>boxZoom</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map can be zoomed to a rectangular area specified by dragging the mouse while pressing shift.</td>
+	</tr>
+	<tr>
+		<td><code><b>tap</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Enables mobile hacks for supporting instant taps (fixing 200ms click delay on iOS/Android) and touch holds (fired as <code>contextmenu</code> events).</td>
+	</tr>
+	<tr>
+		<td><code><b>tapTolerance</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">15</span></code></td>
+		<td>The max number of pixels a user can shift his finger during touch for it to be considered a valid tap.</td>
+	</tr>
+	<tr>
+		<td><code><b>trackResize</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the map automatically handles browser window resize to update itself.</td>
+	</tr>
+	<tr>
+		<td><code><b>worldCopyJump</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">false</span></code></td>
+		<td>With this option enabled, the map tracks when you pan to another "copy" of the world and seamlessly jumps to the original one so that all overlays like markers and vector layers are still visible.</td>
+	</tr>
+	<tr>
+		<td><code><b>closePopupOnClick</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Set it to <code><span class="literal">false</span></code> if you don't want popups to close when user clicks the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>bounceAtZoomLimits</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Set it to <code><span class="literal">false</span></code> if you don't want the map to zoom beyond min/max zoom and then bounce back when pinch-zooming.</td>
+	</tr>
+</table>
+
+<h4>Keyboard Navigation Options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th class="width140">Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>keyboard</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Makes the map focusable and allows users to navigate the map with keyboard arrows and <code>+</code>/<code>-</code> keys.</td>
+	</tr>
+	<tr>
+		<td><code><b>keyboardPanOffset</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">80</span></code></td>
+		<td>Amount of pixels to pan when pressing an arrow key.</td>
+	</tr>
+	<tr>
+		<td><code><b>keyboardZoomOffset</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">1</span></code></td>
+		<td>Number of zoom levels to change when pressing <code>+</code> or <code>-</code> key.</td>
+	</tr>
+</table>
+
+<h4>Panning Inertia Options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th class="width140">Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>inertia</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>If enabled, panning of the map will have an inertia effect where the map builds momentum while dragging and continues moving in the same direction for some time. Feels especially nice on touch devices.</td>
+	</tr>
+	<tr>
+		<td><code><b>inertiaDeceleration</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">3000</span></code></td>
+		<td>The rate with which the inertial movement slows down, in pixels/second<sup>2</sup>.</td>
+	</tr>
+	<tr>
+		<td><code><b>inertiaMaxSpeed</b></code></td>
+		<td><code>Number</code></td>
+		<td><code><span class="number">1500</span></code></td>
+		<td>Max speed of the inertial movement, in pixels/second.</td>
+	</tr>
+	<tr>
+		<td><code><b>inertiaThreshold</b></code></td>
+		<td><code>Number</code></td>
+		<td><code>depends</code></td>
+		<td>Number of milliseconds that should pass between stopping the movement and releasing the mouse or touch to prevent inertial movement. <code><span class="number">32</span></code> for touch devices and <code><span class="number">14</span></code> for the rest by default.</td>
+	</tr>
+</table>
+
+<h4>Control options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th class="width140">Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>zoomControl</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the <a href="#control-zoom">zoom control</a> is added to the map by default.</td>
+	</tr>
+	<tr>
+		<td><code><b>attributionControl</b></code></td>
+		<td><code>Boolean</code></td>
+		<td><code><span class="literal">true</span></code></td>
+		<td>Whether the <a href="#control-attribution">attribution control</a> is added to the map by default.</td>
+	</tr>
+</table>
+
+<h4>Animation options</h4>
+
+<table data-id='map'>
+	<tr>
+		<th class="width140">Option</th>
+		<th>Type</th>
+		<th>Default</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>fadeAnimation</b></code></td>
+		<td><code>Boolean</code></td>
+		<td>depends</td>
+		<td>Whether the tile fade animation is enabled. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomAnimation</b></code></td>
+		<td><code>Boolean</code></td>
+		<td>depends</td>
+		<td>Whether the tile zoom animation is enabled. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomAnimationThreshold</b></code></td>
+		<td><code>Number</code></td>
+		<td><span class="number">4</span></td>
+		<td>Won't animate zoom if the zoom difference exceeds this value.</td>
+	</tr>
+	<tr>
+		<td><code><b>markerZoomAnimation</b></code></td>
+		<td><code>Boolean</code></td>
+		<td>depends</td>
+		<td>Whether markers animate their zoom with the zoom animation, if disabled they will disappear for the length of the animation. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
+	</tr>
+</table>
+
+
+<h3 id="map-events">Events</h3>
+
+<p>You can subscribe to the following events using <a href="#events">these methods</a>.</p>
+
+<table data-id='map'>
+	<tr>
+		<th>Event</th>
+		<th>Data</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>click</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the user clicks (or taps) the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>dblclick</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the user double-clicks (or double-taps) the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>mousedown</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the user pushes the mouse button on the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>mouseup</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the user releases the mouse button on the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>mouseover</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the mouse enters the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>mouseout</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the mouse leaves the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>mousemove</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired while the mouse moves over the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>contextmenu</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired when the user pushes the right mouse button on the map, prevents default browser context menu from showing if there are listeners on this event. Also fired on mobile when the user holds a single touch for a second (also called long press).</td>
+	</tr>
+	<tr>
+		<td><code><b>focus</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the user focuses the map either by tabbing to it or clicking/panning.</td>
+	</tr>
+	<tr>
+		<td><code><b>blur</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map loses focus.</td>
+	</tr>
+	<tr>
+		<td><code><b>preclick</b></code></td>
+		<td><code><a href="#mouse-event">MouseEvent</a></code></td>
+		<td>Fired before mouse click on the map (sometimes useful when you want something to happen on click before any existing click handlers start running).</td>
+	</tr>
+	<tr>
+		<td><code><b>load</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map is initialized (when its center and zoom are set for the first time).</td>
+	</tr>
+	<tr>
+		<td><code><b>unload</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map is destroyed with <a href="#map-remove">remove</a> method.</td>
+	</tr>
+	<tr id="map-viewreset">
+		<td><code><b>viewreset</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map needs to redraw its content (this usually happens on map zoom or load). Very useful for creating custom overlays.</td>
+	</tr>
+	<tr>
+		<td><code><b>movestart</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the view of the map starts changing (e.g. user starts dragging the map).</td>
+	</tr>
+	<tr>
+		<td><code><b>move</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired on any movement of the map view.</td>
+	</tr>
+	<tr id="map-moveend">
+		<td><code><b>moveend</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the view of the map stops changing (e.g. user stopped dragging the map).</td>
+	</tr>
+	<tr>
+		<td><code><b>dragstart</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the user starts dragging the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>drag</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired repeatedly while the user drags the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>dragend</b></code></td>
+		<td><code><a href="#dragend-event">DragEndEvent</a></code></td>
+		<td>Fired when the user stops dragging the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomstart</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map zoom is about to change (e.g. before zoom animation).</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomend</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map zoom changes.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomlevelschange</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the number of zoomlevels on the map is changed due to adding or removing a layer.</td>
+	</tr>
+	<tr>
+		<td><code><b>resize</b></code></td>
+		<td><code><a href="#resize-event">ResizeEvent</a></code></td>
+		<td>Fired when the map is resized.</td>
+	</tr>
+	<tr>
+		<td><code><b>autopanstart</b></code></td>
+		<td><code><a href="#event">Event</a></code></td>
+		<td>Fired when the map starts autopanning when opening a popup.</td>
+	</tr>
+	<tr>
+		<td><code><b>layeradd</b></code></td>
+		<td><code><a href="#layer-event">LayerEvent</a></code></td>
+		<td>Fired when a new layer is added to the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>layerremove</b></code></td>
+		<td><code><a href="#layer-event">LayerEvent</a></code></td>
+		<td>Fired when some layer is removed from the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>baselayerchange</b></code></td>
+		<td><code><a href="#layer-event">LayerEvent</a></code>
+		<td>Fired when the base layer is changed through the <a href="#control-layers">layer control</a>.</td>
+	</tr>
+	<tr>
+		<td><code><b>overlayadd</b></code></td>
+		<td><code><a href="#layer-event">LayerEvent</a></code>
+		<td>Fired when an overlay is selected through the <a href="#control-layers">layer control</a>.</td>
+	</tr>
+	<tr>
+		<td><code><b>overlayremove</b></code></td>
+		<td><code><a href="#layer-event">LayerEvent</a></code>
+		<td>Fired when an overlay is deselected through the <a href="#control-layers">layer control</a>.</td>
+	</tr>
+	<tr>
+		<td><code><b>locationfound</b></code></td>
+		<td><code><a href="#location-event">LocationEvent</a></code>
+		<td>Fired when geolocation (using the <a href="#map-locate">locate</a> method) went successfully.</td>
+	</tr>
+	<tr>
+		<td><code><b>locationerror</b></code></td>
+		<td><code><a href="#error-event">ErrorEvent</a></code>
+		<td>Fired when geolocation (using the <a href="map-locate">locate</a> method) failed.</td>
+	</tr>
+	<tr>
+		<td><code><b>popupopen</b></code></td>
+		<td><code><a href="#popup-event">PopupEvent</a></code></td>
+		<td>Fired when a popup is opened (using <code>openPopup</code> method).</td>
+	</tr>
+	<tr>
+		<td><code><b>popupclose</b></code></td>
+		<td><code><a href="#popup-event">PopupEvent</a></code></td>
+		<td>Fired when a popup is closed (using <code>closePopup</code> method).</td>
+	</tr>
+</table>
+
+
+<h3 id="map-set-methods">Methods for Modifying Map State</h3>
+
+<table data-id='map'>
+	<tr>
+		<th>Method</th>
+		<th>Returns</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>setView</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>center</i>,</nobr>
+			<nobr><Number> <i>zoom?</i>,</nobr>
+			<nobr><<a href="#map-zoompanoptions">zoom/pan options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets the view of the map (geographical center and zoom) with the given animation options.</td>
+	</tr>
+	<tr>
+		<td><code><b>setZoom</b>(
+			<nobr><Number> <i>zoom</i></nobr>,
+			<nobr><<a href="#map-zoomoptions">zoom options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets the zoom of the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomIn</b>(
+			<nobr><Number> <em>delta?</em></nobr>,
+			<nobr><<a href="#map-zoomoptions">zoom options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Increases the zoom of the map by <code>delta</code> (<code><span class="number">1</span></code> by default).</td>
+	</tr>
+	<tr>
+		<td><code><b>zoomOut</b>(
+			<nobr><Number> <em>delta?</em></nobr>,
+			<nobr><<a href="#map-zoomoptions">zoom options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Decreases the zoom of the map by <code>delta</code> (<code><span class="number">1</span></code> by default).</td>
+	</tr>
+	<tr>
+		<td><code><b>setZoomAround</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i>, </nobr>
+			<nobr><Number> <i>zoom</i></nobr>,
+			<nobr><<a href="#map-zoomoptions">zoom options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Zooms the map while keeping a specified point on the map stationary (e.g. used internally for scroll zoom and double-click zoom).</td>
+	</tr>
+	<tr id="map-fitbounds">
+		<td><code><b>fitBounds</b>(
+			<nobr><<a href="#latlngbounds">LatLngBounds</a>> <i>bounds</i></nobr>,
+			<nobr><<a href="#map-fitboundsoptions">fitBounds options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets a map view that contains the given geographical bounds with the maximum zoom level possible.</td>
+	</tr>
+	<tr id="map-fitworld">
+		<td><code><b>fitWorld</b>(
+			<nobr><<a href="#map-fitboundsoptions">fitBounds options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets a map view that mostly contains the whole world with the maximum zoom level possible.</td>
+	</tr>
+	<tr>
+		<td><code><b>panTo</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i></nobr>,
+			<nobr><<a href="#map-panoptions">pan options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Pans the map to a given center. Makes an animated pan if new center is not more than one screen away from the current one.</td>
+	</tr>
+	<tr id="map-paninsidebounds">
+		<td><code><b>panInsideBounds</b>(
+			<nobr><<a href="#latlngbounds">LatLngBounds</a>> <i>bounds</i></nobr>,
+			<nobr><<a href="#map-panoptions">pan options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.</td>
+	</tr>
+	<tr>
+		<td><code><b>panBy</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i></nobr>,
+			<nobr><<a href="#map-panoptions">pan options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Pans the map by a given number of pixels (animated).</td>
+	</tr>
+	<tr>
+		<td><code><b>invalidateSize</b>(
+			<nobr><Boolean> <i>animate</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Checks if the map container size changed and updates the map if so — call it after you've changed the map size dynamically, also animating pan by default.</td>
+	</tr>
+	<tr>
+		<td><code><b>invalidateSize</b>(
+			<nobr><<a href="#map-zoompanoptions">zoom/pan options</a>> <i>options</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Checks if the map container size changed and updates the map if so — call it after you've changed the map size dynamically, also animating pan by default. If <code>options.pan</code> is <code><span class="literal">false</span></code>, panning will not occur. If <code>options.debounceMoveend</code> is <code><span class="literal">true</span></code>, it will delay <code>moveend</code> event so that it doesn't happen often even if the method is called many times in a row.</td>
+	</tr>
+	<tr id="map-setmaxbounds">
+		<td><code><b>setMaxBounds</b>(
+			<nobr><<a href="#latlngbounds">LatLngBounds</a>> <i>bounds</i></nobr><!--,
+			<nobr><<a href="#map-zoompanoptions">zoom/pan options</a>> <i>options?</i> )</nobr>-->
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Restricts the map view to the given bounds (see <a href="#map-maxbounds">map maxBounds</a> option)<!--, animating the map view if bounds are changed.  The given animation options are passed through to `setView` or `panInsideBounds`, depending on map zoom level, and can be used to control how the map animates during this change-->.</td>
+	</tr>
+	<tr id="map-locate">
+		<td><code><b>locate</b>(
+			<nobr><<a href="#map-locate-options">Locate options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Tries to locate the user using the <a href="https://en.wikipedia.org/wiki/W3C_Geolocation_API">Geolocation API</a>, firing a <code>locationfound</code> event with location data on success or a <code>locationerror</code> event on failure, and optionally sets the map view to the user's location with respect to detection accuracy (or to the world view if geolocation failed). See <a href="#map-locate-options">Locate options</a> for more details.</td>
+	</tr>
+	<tr>
+		<td><code><b>stopLocate</b>()</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Stops watching location previously initiated by <code><b>map.locate</b>({watch: true})</code> and aborts resetting the map view if <code>map.locate</code> was called with <code>{setView: true}</code>.</td>
+	</tr>
+	<tr id="map-remove">
+		<td><code><b>remove</b>()</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Destroys the map and clears all related event listeners.</td>
+	</tr>
+	<tr id="map-flyto">
+		<td><code><b>flyTo</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i></nobr>,
+			<nobr><Number> <i>zoom?</i>,</nobr>
+			<nobr><<a href="#map-zoompanoptions">zoom/pan options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets the view of the map (geographical center and zoom) performing a smooth pan-zoom animation.</td>
+	</tr>
+	<tr>
+		<td><code><b>flyToBounds</b>(
+			<nobr><<a href="#latlngbounds">LatLngBounds</a>> <i>bounds</i></nobr>,
+			<nobr><<a href="#map-fitboundsoptions">fitBounds options</a>> <i>options?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Sets the view of the map with a smooth animation like <a href="#map-flyto">flyTo</a>, but takes a bounds parameter like <a href="#map-fitbounds">fitBounds</a>.</td>
+	</tr>
+</table>
+
+<h3 id="map-get-methods">Methods for Getting Map State</h3>
+
+<table data-id='map'>
+	<tr>
+		<th>Method</th>
+		<th>Returns</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>getCenter</b>()</code></td>
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns the geographical center of the map view.</td>
+	</tr>
+	<tr>
+		<td><code><b>getZoom</b>()</code></td>
+		<td><code>Number</code></td>
+		<td>Returns the current zoom of the map view.</td>
+	</tr>
+	<tr>
+		<td><code><b>getMinZoom</b>()</code></td>
+		<td><code>Number</code></td>
+		<td>Returns the minimum zoom level of the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>getMaxZoom</b>()</code></td>
+		<td><code>Number</code></td>
+		<td>Returns the maximum zoom level of the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>getBounds</b>()</code></td>
+		<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
+		<td>Returns the LatLngBounds of the current map view.</td>
+	</tr>
+	<tr>
+		<td><code><b>getBoundsZoom</b>(
+			<nobr><<a href="#latlngbounds">LatLngBounds</a>> <i>bounds</i>,</nobr>
+			<nobr><Boolean> <i>inside?</i> )</nobr>
+		</code></td>
+
+		<td><code>Number</code></td>
+
+		<td>Returns the maximum zoom level on which the given bounds fit to the map view in its entirety. If <code>inside</code> (optional) is set to <code><span class="literal">true</span></code>, the method instead returns the minimum zoom level on which the map view fits into the given bounds in its entirety.</td>
+	</tr>
+	<tr>
+		<td><code><b>getSize</b>()</code></td>
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the current size of the map container.</td>
+	</tr>
+	<tr>
+		<td><code><b>getPixelBounds</b>()</code></td>
+		<td><code><a href="#bounds">Bounds</a></code></td>
+		<td>Returns the bounds of the current map view in projected pixel coordinates (sometimes useful in layer and overlay implementations).</td>
+	</tr>
+	<tr>
+		<td><code><b>getPixelOrigin</b>()</code></td>
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the projected pixel coordinates of the top left point of the map layer (useful in custom layer and overlay implementations).</td>
+	</tr>
+	<tr>
+		<td><code><b>getPixelWorldBounds</b>(
+			<nobr><Number> <i>zoom?</i></nobr> )
+		</code></td>
+		<td><code><a href="#bounds">Bounds</a></code></td>
+		<td>Returns the world's bounds in pixel coordinates for zoom level <code>zoom</code>. If <code>zoom</code> is omitted, the map's
+			current zoom is used.</td>
+	</tr>
+</table>
+
+<h3 id="map-stuff-methods">Methods for Layers and Controls</h3>
+
+<table data-id='map'>
+	<tr>
+		<th class="width250">Method</th>
+		<th>Returns</th>
+		<th>Description</th>
+	</tr>
+	<tr id="map-addlayer">
+		<td><code><b>addLayer</b>(
+			<nobr><<a href="#layer">Layer</a>> <i>layer</i></nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Adds the given layer to the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>removeLayer</b>(
+			<nobr><<a href="#layer">Layer</a>> <i>layer</i> )</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Removes the given layer from the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>hasLayer</b>(
+			<nobr><<a href="#layer">Layer</a>> <i>layer</i> )</nobr>
+		</code></td>
+
+		<td><code>Boolean</code></td>
+		<td>Returns <code><span class="literal">true</span></code> if the given layer is currently added to the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>eachLayer</b>(
+			<nobr><Function> <i>fn</i></nobr>,
+			<nobr><Object> <i>context?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Iterates over the layers of the map, optionally specifying context of the iterator function.
+<pre><code>map.eachLayer(function (layer) {
+	layer.bindPopup('Hello');
+});</code></pre>
+		</td>
+	</tr>
+
+	<tr id="map-openpopup">
+		<td><code><b>openPopup</b>(
+			<nobr><<a href="#popup">Popup</a>> <i>popup</i> )</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).</td>
+	</tr>
+	<tr id="map-openpopup2">
+		<td><code><b>openPopup</b>(
+			<nobr><String> <i>html</i> </nobr> | <nobr><HTMLElement> <i>el</i>,
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i></nobr>,
+			<nobr><<a href="#popup-options">Popup options</a>> <i>options?</i> )</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Creates a popup with the specified options and opens it in the given point on a map.</td>
+	</tr>
+	<tr id="map-closepopup">
+		<td><code><b>closePopup</b>(
+			<nobr><<a href="#popup">Popup</a>> <i>popup?</i> )</nobr>
+		</code></td>
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Closes the popup previously opened with <a href="#map-openpopup">openPopup</a> (or the given one).</td>
+	</tr>
+	<tr id="map-addcontrol">
+		<td><code><b>addControl</b>(
+			<nobr><<a href="#control">IControl</a>> <i>control</i> )</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Adds the given control to the map.</td>
+	</tr>
+	<tr>
+		<td><code><b>removeControl</b>(
+			<nobr><<a href="#control">IControl</a>> <i>control</i> )</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">this</span></code></td>
+		<td>Removes the given control from the map.</td>
+	</tr>
+		<td><code><b>getRenderer</b>(
+			<nobr><<a href="#layer">Layer</a>> <i>layer</i>)</nobr>
+		</code></td>
+
+		<td><code><span class="keyword">Renderer</span></code></td>
+		<td>Returns the renderer for the given layer.</td>
+	</tr>
+</table>
+
+
+<h3 id="map-conversion-methods">Conversion Methods</h3>
+
+<table data-id='map'>
+	<tr>
+		<th class="width200">Method</th>
+		<th>Returns</th>
+		<th>Description</th>
+	</tr>
+	<tr>
+		<td><code><b>latLngToLayerPoint</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the map layer point that corresponds to the given geographical coordinates (useful for placing overlays on the map).</td>
+	</tr>
+	<tr>
+		<td><code><b>layerPointToLatLng</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns the geographical coordinates of a given map layer point.</td>
+	</tr>
+	<tr>
+		<td><code><b>containerPointToLayerPoint</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Converts the point relative to the map container to a point relative to the map layer.</td>
+	</tr>
+	<tr>
+		<td><code><b>layerPointToContainerPoint</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Converts the point relative to the map layer to a point relative to the map container.</td>
+	</tr>
+	<tr>
+		<td><code><b>latLngToContainerPoint</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the map container point that corresponds to the given geographical coordinates.</td>
+	</tr>
+	<tr>
+		<td><code><b>containerPointToLatLng</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns the geographical coordinates of a given map container point.</td>
+	</tr>
+	<tr>
+		<td><code><b>project</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i>,</nobr>
+			<nobr><Number> <i>zoom?</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Projects the given geographical coordinates to absolute pixel coordinates for the given zoom level (current zoom level by default).</td>
+	</tr>
+	<tr>
+		<td><code><b>unproject</b>(
+			<nobr><<a href="#point">Point</a>> <i>point</i>,</nobr>
+			<nobr><Number> <i>zoom?</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Projects the given absolute pixel coordinates to geographical coordinates for the given zoom level (current zoom level by default).</td>
+	</tr>
+	<tr>
+		<td><code><b>mouseEventToContainerPoint</b>(
+			<nobr><MouseEvent> <i>event</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the pixel coordinates of a mouse click (relative to the top left corner of the map) given its event object.</td>
+	</tr>
+	<tr>
+		<td><code><b>mouseEventToLayerPoint</b>(
+			<nobr><MouseEvent> <i>event</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#point">Point</a></code></td>
+		<td>Returns the pixel coordinates of a mouse click relative to the map layer given its event object.
+	</tr>
+	<tr>
+		<td><code><b>mouseEventToLatLng</b>(
+			<nobr><MouseEvent> <i>event</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns the geographical coordinates of the point the mouse clicked on given the click's event object.</td>
+	</tr>
+	<tr>
+		<td><code><b>wrapLatLng</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns a <code>LatLng</code> where <code>lat</code> and <code>lng</code> has been wrapped according to the map's CRS's <code><a href="#crs-wraplat">wrapLat</a></code> and <code><a href="#crs-wraplng">wrapLng</a></code> properties, if they are outside the CRS's bounds.</td>
+	</tr>
+	<tr>
+		<td><code><b>distance</b>(
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng1</i>,</nobr>
+			<nobr><<a href="#latlng">LatLng</a>> <i>latlng2</i> )</nobr>
+		</code></td>
+
+		<td><code><a href="#latlng">LatLng</a></code></td>
+		<td>Returns the distance in meters between two geographic coordinates in the map's CRS.</td>
+	</tr>
+</table>
+
+<h3 id="map-misc-methods">Other Methods</h3>
+
+<table data-id='map'>
+	<tr>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list