Leaflet Map WordPress Plugin
========

![Leaflet](https://img.shields.io/badge/leaflet-1.3.4-green.svg?style=flat)
![WordPress](https://img.shields.io/badge/wordpress-4.9.7-green.svg?style=flat)

![Header Image](https://ps.w.org/leaflet-map/assets/banner-1544x500.png?rev=1693083)

Add a map generated with [LeafletJS](http://leafletjs.com/): an open-source JavaScript library for mobile-friendly interactive maps. Map tiles are provided by default through [OpenStreetMap](http://www.openstreetmap.org/), or [MapQuest](https://www.mapquest.ca/) (with an app key).  Can be set per map with shortcode attributes or through the dashboard settings.

![Admin Screenshot](https://imgur.com/W4BGTif.jpg)

Installation
------------

* (simple) Install via the WordPress plugins page on your WordPress site: `/wp-admin/plugin-install.php` (search Leaflet)

* (needlessly complicated) Copy this repo (or download a release of it) into your WordPress plugins directory: `/wp-content/plugins/`. You might also need to name the directory 'leaflet-map', like so: `git clone https://github.com/bozdoz/wp-plugin-leaflet-map.git leaflet-map`


Available Shortcodes
--------------------

### [leaflet-map]

![Alternate map tiles](https://imgur.com/oURcNiX.jpg)

Height, width, latitude, longitude and zoom are the basic attributes: 

```
[leaflet-map height=250 width=250 lat=44.67 lng=-63.61 zoom=5]
```

However, you can also just give it an address, and the chosen geocoder (default: Nominatum) will look it up for you:

```
[leaflet-map address="Oslo, Norway"]
```

#### [leaflet-map] Options:

Option | Default
--- | ---
`lat` and `lng` or `address` | lat: 44.67, lng: -63.61
`zoom` | 12
`height` | 250
`width` | 100%
`fit_markers` | 0 (false)
`zoomcontrol` | 0 (false)
`scrollwheel` | 0 (false)
`doubleclickzoom` | 0 (false)
`min_zoom` | 0
`max_zoom` | 20
`subdomains` | abc
`attribution` | ©Leaflet ©OpenStreetMap
`closepopuponclick` | false
`trackresize` | false
`boxzoom` | true
`dragging` | true
`keyboard` | true

---

### [leaflet-image]

Much the same as leaflet-map above, but uses `src` for the source image.

---

### [leaflet-marker]

![Markers with HTML within a popup](https://imgur.com/ap38lwe.jpg)

Add a marker to any map by adding `[leaflet-marker]` after any `[leaflet-map]` shortcode.  You can adjust the lat/lng in the same way, as well as some other basic functionality (popup message, draggable, visible on load).  Also, if you want to add a link to a marker popup, use `[leaflet-marker]Message here: click here[/leaflet-marker]` and add a link like you normally would with the WordPress editor.

#### [leaflet-marker] Options:

Option | Usage
--- | ---
`lat` and `lng` or `address` | Location on the map; defaults to map center; `lat`/`lng` are floats, `address` is a string
`draggable` | Make a marker draggable (`boolean`); default `false`
`title` | Add a hover-over message to your marker (different than popup)
`alt` | Add an alt text to the marker image
`zindexoffset` | Define the z-index for the marker image
`opacity` | Define the css opacity for the marker image
`iconurl` | Give a url for the marker image file
`iconsize` | Set the size of the icon: e.g. "80,50" for 80px width 50px height 
`iconanchor` | Set the anchor position of the icon: e.g. "40,60" for 40px left 60px top
`shadowurl` | Give a url for the marker shadow image file
`shadowsize` | Set the size of the shadow: e.g. "80,50" for 80px width 50px height 
`shadowanchor` | Set the anchor position of the shadow: e.g. "40,60" for 40px left 60px top
`popupanchor` | Set the anchor position of the popup: e.g. "40,60" for 40px left 60px top
`svg` | Boolean for whether the marker should be created as an svg: default `false`
`background` | Background color for an SVG marker (above)
`color` | color of the SVG marker (above)
`iconclass` | className for the marker image

---

### [leaflet-line]

![Fitted Colored Line](https://imgur.com/dixNDtF.jpg)

Add a line to the map by adding `[leaflet-line]`. You can specify the postions with a list separated by semi-colon `;` or bar `|` using lat/lng: `[leaflet-line latlngs="41, 29; 44, 18"]` or addresses: `[leaflet-line addresses="Istanbul; Sarajevo"]`, or x/y coordinates for image maps.

Add a popup to the line by adding text to the content of the shortcode: 

`[leaflet-line addresses="new york; chicago"]New York to Chicago[/leaflet-line]`

#### [leaflet-line] Options

Option | Usage
--- | ---
`addresses`, `latlngs`, or `coordinates` | For geocoded addresses, latitude/longitude, or x/y coordinates for Image Maps (see [leaflet-image]); ex: `[leaflet-line latlngs="41, 29; 44, 18"]` or addresses: `[leaflet-line addresses="Istanbul; Sarajevo"]`
`fitbounds` | Fit the map to the bounds of the line (instead of whatever center you gave the map originally)

---
### [leaflet-circle]

Add a circle to the map by adding `[leaflet-circle]`. You can specify the position using `lat` and `lng` and the radius in meters using `radius`. You can also customize the style using [Leaflet's Path options](https://leafletjs.com/reference-1.3.4.html#path-option). Example: `[leaflet-circle message="max distance" lng=5.117909610271454 lat=52.097914814706094 radius=17500 color="#0DC143" fillOpacity=0.1]`.

### [leaflet-geojson]

[![Random GeoJSON created by me](https://imgur.com/fJktgtI.jpg)](https://gist.github.com/bozdoz/064a7101b95a324e8852fe9381ab9a18)

Or you can add a geojson shape via a url: 

```
[leaflet-geojson src="https://rawgit.com/bozdoz/567817310f102d169510d94306e4f464/raw/2fdb48dafafd4c8304ff051f49d9de03afb1718b/map.geojson"]
```

#### [leaflet-geojson] Options

Option | Usage
--- | ---
`src` | Source of the geojson file
`

### [leaflet-kml]

Same idea as geojson (above), but takes KML files and loads [Mapbox's togeojson library](https://github.com/mapbox/togeojson)

Contributing
-------------

[View Contribution guidelines](https://github.com/bozdoz/wp-plugin-leaflet-map/blob/master/CONTRIBUTING.md)

Wish List
---------

* A map editor/shortcode generator (so users can see what they're adding to the page)
