{"version":3,"file":"L.Control.Bookmarks.js","sources":["../src/string.js","../src/storage/global.js","../src/storage/localstorage.js","../src/storage.js","../src/formpopup.js","../src/leaflet.delegate.js","../src/bookmarks.js","../index.js"],"sourcesContent":["/**\n * Substitutes {{ obj.field }} in strings\n *\n * @param {String} str\n * @param {Object} object\n * @param {RegExp=} regexp\n * @return {String}\n */\nexport function substitute(str, object, regexp) {\n return str.replace(regexp || (/{{([\\s\\S]+?)}}/g), function(match, name) {\n name = trim(name);\n\n if (name.indexOf('.') === -1) {\n if (match.charAt(0) == '\\\\') return match.slice(1);\n return (object[name] != null) ? object[name] : '';\n\n } else { // nested\n let result = object;\n name = name.split('.');\n for (var i = 0, len = name.length; i < len; i++) {\n if (name[i] in result) result = result[name[i]];\n else return '';\n }\n return result;\n }\n });\n}\n\nconst alpha = 'abcdefghijklmnopqrstuvwxyz';\n/**\n * Unique string from date. Puts character at the beginning,\n * for the sake of good manners\n *\n * @return {String}\n */\nexport function unique(prefix) {\n return (prefix || alpha[Math.floor(Math.random() * alpha.length)]) +\n (new Date()).getTime().toString(16);\n}\n\n/**\n * Trim whitespace\n * @param {String} str\n * @return {String}\n */\nexport function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Clean and trim\n * @param {String} str\n * @return {String}\n */\nexport function clean(str) {\n return trim(str.replace(/\\s+/g, ' '));\n}\n","/**\n * @type {Object}\n */\nconst data = {};\n\n/**\n * Object based storage\n * @class Storage.Engine.Global\n * @constructor\n */\nexport default class GlobalStorage {\n constructor (prefix) {\n\n /**\n * @type {String}\n */\n this._prefix = prefix;\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n getItem (key, callback) {\n callback(data[this._prefix + key]);\n }\n\n /**\n * @param {String} key\n * @param {*} item\n * @param {Function} callback\n */\n setItem (key, item, callback) {\n data[this._prefix + key] = item;\n callback(item);\n }\n\n /**\n * @param {Function} callback\n */\n getAllItems (callback) {\n const items = [];\n for (const key in data) {\n if (data.hasOwnProperty(key) && key.indexOf(this_prefix) === 0) {\n items.push(data[key]);\n }\n }\n callback(items);\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n removeItem (key, callback) {\n this.getItem(key, (item) => {\n if (item) {\n delete data[this._prefix + key];\n } else {\n item = null;\n }\n if (callback) callback(item);\n });\n }\n}\n","/**\n * @const\n * @type {RegExp}\n */\nconst JSON_RE = /^[\\{\\[](.)*[\\]\\}]$/;\n\n/**\n * LocalStoarge based storage\n */\nexport default class LocalStorage {\n\n constructor (prefix) {\n /**\n * @type {String}\n */\n this._prefix = prefix;\n\n /**\n * @type {LocalStorage}\n */\n this._storage = window.localStorage;\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n getItem (key, callback) {\n let item = this._storage.getItem(this._prefix + key);\n if (item && JSON_RE.test(item)) {\n item = JSON.parse(item);\n }\n callback(item);\n }\n\n /**\n * @param {Function} callback\n */\n getAllItems (callback) {\n const items = [];\n const prefixLength = this._prefix.length;\n for (const key in this._storage) {\n if (this._storage.getItem(key) !== null &&\n key.indexOf(this._prefix) === 0) {\n this.getItem(key.substring(prefixLength), (item) => items.push(item));\n }\n }\n callback(items);\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n removeItem (key, callback) {\n const self = this;\n this.getItem(key, (item) => {\n this._storage.removeItem(self._prefix + key);\n if (callback) callback(item);\n });\n }\n\n /**\n * @param {String} key\n * @param {*} item\n * @param {Function} callback\n */\n setItem (key, item, callback) {\n let itemStr = item.toString();\n if (itemStr === '[object Object]') {\n itemStr = JSON.stringify(item)\n }\n this._storage.setItem(this._prefix + key, itemStr);\n callback(item);\n }\n}\n","import { unique } from './string';\n\nimport XHR from './storage/xhr';\nimport GlobalStorage from './storage/global';\nimport LocalStorage from './storage/localstorage';\n\n/**\n * @const\n * @enum {Number}\n */\nexport const EngineType = {\n // XHR: 1, // we don't have it included\n GLOBALSTORAGE: 2,\n LOCALSTORAGE: 3\n};\n\n/**\n * Persistent storage, depends on engine choice: localStorage/ajax\n * @param {String} name\n */\nexport default class Storage {\n\n constructor(name, engineType) {\n\n if (typeof name !== 'string') {\n engineType = name;\n name = unique();\n }\n\n /**\n * @type {String}\n */\n this._name = name;\n\n /**\n * @type {Storage.Engine}\n */\n this._engine = Storage.createEngine(engineType,\n this._name, Array.prototype.slice.call(arguments, 2));\n }\n\n /**\n * Engine factory\n * @param {Number} type\n * @param {String} prefix\n * @return {Storage.Engine}\n */\n static createEngine (type, prefix, args) {\n if (type === EngineType.GLOBALSTORAGE) {\n return new GlobalStorage(prefix);\n }\n if (type === EngineType.LOCALSTORAGE) {\n return new LocalStorage(prefix);\n }\n }\n\n /**\n * @param {String} key\n * @param {*} item\n * @param {Function} callback\n */\n setItem (key, item, callback) {\n this._engine.setItem(key, item, callback);\n return this;\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n getItem (key, callback) {\n this._engine.getItem(key, callback);\n return this;\n }\n\n /**\n * @param {Function} callback\n */\n getAllItems (callback) {\n this._engine.getAllItems(callback);\n }\n\n /**\n * @param {String} key\n * @param {Function} callback\n */\n removeItem (key, callback) {\n this._engine.removeItem(key, callback);\n }\n}\n\n","import L from 'leaflet';\nimport { unique, substitute } from './string';\n\nconst modes = {\n CREATE: 1,\n UPDATE: 2,\n SHOW: 3,\n OPTIONS: 4\n};\n\n/**\n * New bookmark form popup\n *\n * @class FormPopup\n * @extends {L.Popup}\n */\nexport default L.Popup.extend( /** @lends FormPopup.prototype */ {\n\n statics: { modes },\n\n /**\n * @type {Object}\n */\n options: {\n mode: modes.CREATE,\n className: 'leaflet-bookmarks-form-popup',\n templateOptions: {\n formClass: 'leaflet-bookmarks-form',\n inputClass: 'leaflet-bookmarks-form-input',\n inputErrorClass: 'has-error',\n idInputClass: 'leaflet-bookmarks-form-id',\n coordsClass: 'leaflet-bookmarks-form-coords',\n submitClass: 'leaflet-bookmarks-form-submit',\n inputPlaceholder: 'Bookmark name',\n removeClass: 'leaflet-bookmarks-form-remove',\n editClass: 'leaflet-bookmarks-form-edit',\n cancelClass: 'leaflet-bookmarks-form-cancel',\n editableClass: 'editable',\n removableClass: 'removable',\n menuItemClass: 'nav-item',\n editMenuText: 'Edit',\n removeMenuText: 'Remove',\n cancelMenuText: 'Cancel',\n submitTextCreate: '+',\n submitTextEdit: ''\n },\n generateNames: false,\n minWidth: 160,\n generateNamesPrefix: 'Bookmark ',\n template: '
' +\n '
' +\n '' +\n '
' +\n '
{{ coords }}
' +\n '
',\n menuTemplate: ''\n },\n\n /**\n * @param {Object} options\n * @param {L.Layer} source\n * @param {Object=} bookmark\n *\n * @constructor\n */\n initialize: function(options, source, control, bookmark) {\n /**\n * @type {Object}\n */\n this._bookmark = bookmark;\n\n /**\n * @type {L.Control.Bookmarks}\n */\n this._control = control;\n\n /**\n * @type {L.LatLng}\n */\n this._latlng = source.getLatLng();\n\n /**\n * For dragging purposes we're not maintaining the usual\n * link between the marker and Popup, otherwise it will simply be destroyed\n */\n source._popup_ = this;\n\n L.Popup.prototype.initialize.call(this, options, source);\n },\n\n /**\n * Add menu button\n */\n _initLayout: function() {\n L.Popup.prototype._initLayout.call(this);\n\n if (this.options.mode === modes.SHOW &&\n (this._bookmark.editable || this._bookmark.removable)) {\n\n const menuButton = this._menuButton =\n L.DomUtil.create('a', 'leaflet-popup-menu-button');\n this._container.insertBefore(menuButton, this._closeButton);\n menuButton.href = '#menu';\n menuButton.innerHTML = '';\n L.DomEvent.disableClickPropagation(menuButton);\n L.DomEvent.on(menuButton, 'click', this._onMenuButtonClick, this);\n }\n },\n\n /**\n * Show options menu\n */\n _showMenu: function() {\n this._map.fire('bookmark:options', { data: this._bookmark });\n },\n\n /**\n * @param {MouseEvent} evt\n */\n _onMenuButtonClick: function(evt) {\n L.DomEvent.preventDefault(evt);\n this._showMenu();\n this._close();\n },\n\n /**\n * Renders template only\n * @override\n */\n _updateContent: function() {\n let content;\n if (this.options.mode === modes.SHOW) {\n content = this._control._getPopupContent(this._bookmark);\n } else {\n let template = this.options.template;\n let submitText = this.options.templateOptions.submitTextCreate;\n if (this.options.mode === modes.OPTIONS) {\n template = this.options.menuTemplate;\n }\n if (this.options.mode === modes.UPDATE) {\n submitText = this.options.templateOptions.submitTextEdit;\n }\n const modeClass = [];\n if (this._bookmark.editable) {\n modeClass.push(this.options.templateOptions.editableClass);\n }\n if (this._bookmark.removable) {\n modeClass.push(this.options.templateOptions.removableClass);\n }\n content = substitute(template,\n L.Util.extend({}, this._bookmark || {}, this.options.templateOptions, {\n submitText: submitText,\n coords: this.formatCoords(\n this._source.getLatLng(),\n this._map.getZoom()\n ),\n mode: modeClass.join(' ')\n }));\n }\n this._content = content;\n L.Popup.prototype._updateContent.call(this);\n this._onRendered();\n },\n\n /**\n * Form rendered, set up create or edit\n */\n _onRendered: function() {\n if (\n this.options.mode === modes.CREATE ||\n this.options.mode === modes.UPDATE\n ) {\n const form = this._contentNode.querySelector('.' +\n this.options.templateOptions.formClass);\n const input = form.querySelector('.' +\n this.options.templateOptions.inputClass);\n\n L.DomEvent.on(form, 'submit', this._onSubmit, this);\n setTimeout(this._setFocus.bind(this), 250);\n } else if (this.options.mode === modes.OPTIONS) {\n L.DomEvent.delegate(this._container,\n '.' + this.options.templateOptions.editClass,\n 'click', this._onEditClick, this);\n L.DomEvent.delegate(this._container,\n '.' + this.options.templateOptions.removeClass,\n 'click', this._onRemoveClick, this);\n L.DomEvent.delegate(this._container,\n '.' + this.options.templateOptions.cancelClass,\n 'click', this._onCancelClick, this);\n }\n },\n\n /**\n * Set focus at the end of input\n */\n _setFocus: function() {\n const input = this._contentNode.querySelector('.' +\n this.options.templateOptions.inputClass);\n // Multiply by 2 to ensure the cursor always ends up at the end;\n // Opera sometimes sees a carriage return as 2 characters.\n const strLength = input.value.length * 2;\n input.focus();\n input.setSelectionRange(strLength, strLength);\n },\n\n /**\n * Edit button clicked\n * @param {Event} evt\n */\n _onEditClick: function(evt) {\n L.DomEvent.preventDefault(evt);\n this._map.fire('bookmark:edit', { data: this._bookmark });\n this._close();\n },\n\n /**\n * Remove button clicked\n * @param {Event} evt\n */\n _onRemoveClick: function(evt) {\n L.DomEvent.preventDefault(evt);\n this._map.fire('bookmark:remove', { data: this._bookmark });\n this._close();\n },\n\n /**\n * Back from options view\n * @param {Event} evt\n */\n _onCancelClick: function(evt) {\n L.DomEvent.preventDefault(evt);\n this._map.fire('bookmark:show', { data: this._bookmark });\n this._close();\n },\n\n /**\n * Creates bookmark object from form data\n * @return {Object}\n */\n _getBookmarkData: function() {\n const options = this.options;\n if (options.getBookmarkData) {\n return options.getBookmarkData.call(this);\n }\n const input = this._contentNode.querySelector('.' +\n options.templateOptions.inputClass);\n const idInput = this._contentNode.querySelector('.' +\n options.templateOptions.idInputClass);\n return {\n latlng: this._source.getLatLng(),\n zoom: this._map.getZoom(),\n name: input.value,\n id: idInput.value || unique()\n };\n },\n\n /**\n * Form submit, dispatch eventm close popup\n * @param {Event} evt\n */\n _onSubmit: function(evt) {\n L.DomEvent.stop(evt);\n\n const input = this._contentNode.querySelector('.' +\n this.options.templateOptions.inputClass);\n input.classList.remove(this.options.templateOptions.inputErrorClass);\n\n if (input.value === '' && this.options.generateNames) {\n input.value = unique(this.options.generateNamesPrefix);\n }\n\n const validate = this.options.validateInput || (() => true);\n\n if (input.value !== '' && validate.call(this, input.value)) {\n const bookmark = L.Util.extend({}, this._bookmark, this._getBookmarkData());\n const map = this._map;\n\n this._close();\n if (this.options.mode === modes.CREATE) {\n map.fire('bookmark:add', { data: bookmark });\n } else {\n map.fire('bookmark:edited', { data: bookmark });\n }\n } else {\n input.classList.add(this.options.templateOptions.inputErrorClass);\n }\n },\n\n /**\n * @param {L.LatLng} coords\n * @param {Number=} zoom\n * @return {String}\n */\n formatCoords: function(coords, zoom) {\n if (this.options.formatCoords) {\n return this.options.formatCoords.call(this, coords, zoom);\n }\n return [coords.lat.toFixed(4), coords.lng.toFixed(4), zoom]\n .join(', ');\n },\n\n /**\n * Hook to source movements\n * @param {L.Map} map\n * @return {Element}\n */\n onAdd: function(map) {\n this._source.on('dragend', this._onSourceMoved, this);\n this._source.on('dragstart', this._onSourceMoveStart, this);\n return L.Popup.prototype.onAdd.call(this, map);\n },\n\n /**\n * @param {L.Map} map\n */\n onRemove: function(map) {\n this._source.off('dragend', this._onSourceMoved, this);\n L.Popup.prototype.onRemove.call(this, map);\n },\n\n /**\n * Marker drag\n */\n _onSourceMoveStart: function() {\n // store\n this._bookmark = L.Util.extend(this._bookmark || {}, this._getBookmarkData());\n this._container.style.display = 'none';\n },\n\n /**\n * Marker moved\n * @param {Event} e\n */\n _onSourceMoved: function(e) {\n this._latlng = this._source.getLatLng();\n this._container.style.display = '';\n this._source.openPopup();\n this.update();\n }\n});\n","import L from 'leaflet';\n\n/**\n * Courtesy of https://github.com/component/matches-selector\n */\nconst matchesSelector = ((ElementPrototype) => {\n const matches = ElementPrototype.matches ||\n ElementPrototype.webkitMatchesSelector ||\n ElementPrototype.mozMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n ElementPrototype.oMatchesSelector ||\n // hello IE\n function(selector) {\n var node = this,\n parent = (node.parentNode || node.document),\n nodes = parent.querySelectorAll(selector);\n\n for (var i = 0, len = nodes.length; i < len; ++i) {\n if (nodes[i] == node) return true;\n }\n return false;\n };\n\n /**\n * @param {Element} element\n * @param {String} selector\n * @return {Boolean}\n */\n return function(element, selector) {\n return matches.call(element, selector);\n };\n})(Element.prototype);\n\n/**\n * Courtesy of https://github.com/component/closest\n *\n * @param {Element} element\n * @param {String} selector\n * @param {Boolean} checkSelf\n * @param {Element} root\n *\n * @return {Element|Null}\n */\nfunction closest(element, selector, checkSelf, root) {\n element = checkSelf ? {\n parentNode: element\n } : element\n\n root = root || document;\n\n // Make sure `element !== document` and `element != null`\n // otherwise we get an illegal invocation\n while ((element = element.parentNode) && element !== document) {\n if (matchesSelector(element, selector)) return element\n // After `matches` on the edge case that\n // the selector matches the root\n // (when the root is not the document)\n if (element === root) return null;\n }\n}\n\n/**\n * Based on https://github.com/component/delegate\n *\n * @param {Element} el\n * @param {String} selector\n * @param {String} type\n * @param {Function} fn\n *\n * @return {Function}\n */\nL.DomEvent.delegate = function(el, selector, type, fn, bind) {\n return L.DomEvent.on(el, type, (evt) => {\n const target = evt.target || evt.srcElement;\n evt.delegateTarget = closest(target, selector, true, el);\n if (evt.delegateTarget && !evt.propagationStopped) {\n fn.call(bind || el, evt);\n }\n });\n};\n","import L from 'leaflet';\nimport Storage, { EngineType } from './storage';\nimport FormPopup from './formpopup';\nimport { substitute } from './string';\nimport './leaflet.delegate';\n\n// expose\nL.Util._template = L.Util._template || substitute;\n\n/**\n * Bookmarks control\n * @class L.Control.Bookmarks\n * @extends {L.Control}\n */\nexport default L.Control.extend( /** @lends Bookmarks.prototype */ {\n\n statics: {\n Storage,\n FormPopup\n },\n\n /**\n * @type {Object}\n */\n options: {\n localStorage: true,\n\n /* you can provide access to your own storage,\n * xhr for example, but make sure it has all\n * required endpoints:\n *\n * .getItem(id, callback)\n * .setItem(id, callback)\n * .getAllItems(callback)\n * .removeItem(id, callback)\n */\n storage: null,\n name: 'leaflet-bookmarks',\n position: 'topright', // chose your own if you want\n\n containerClass: 'leaflet-bar leaflet-bookmarks-control',\n expandedClass: 'expanded',\n headerClass: 'bookmarks-header',\n listClass: 'bookmarks-list',\n iconClass: 'bookmarks-icon',\n iconWrapperClass: 'bookmarks-icon-wrapper',\n listWrapperClass: 'bookmarks-list-wrapper',\n listWrapperClassAdd: 'list-with-button',\n wrapperClass: 'bookmarks-container',\n addBookmarkButtonCss: 'add-bookmark-button',\n\n animateClass: 'bookmark-added-anim',\n animateDuration: 150,\n\n formPopup: {\n popupClass: 'bookmarks-popup'\n },\n\n bookmarkTemplate: '
  • ' +\n '×' +\n '{{ data.name }}' +\n '{{ data.coords }}' +\n '
  • ',\n\n emptyTemplate: '
  • ' +\n '{{ data.emptyMessage }}
  • ',\n\n dividerTemplate: '
  • ',\n\n bookmarkTemplateOptions: {\n itemClass: 'bookmark-item',\n nameClass: 'bookmark-name',\n coordsClass: 'bookmark-coords',\n removeClass: 'bookmark-remove',\n emptyClass: 'bookmarks-empty'\n },\n\n defaultBookmarkOptions: {\n editable: true,\n removable: true\n },\n\n title: 'Bookmarks',\n emptyMessage: 'No bookmarks yet',\n addBookmarkMessage: 'Add new bookmark',\n collapseOnClick: true,\n scrollOnAdd: true,\n scrollDuration: 1000,\n popupOnShow: true,\n addNewOption: true,\n\n /**\n * This you can change easily to output\n * whatever you have stored in bookmark\n *\n * @type {String}\n */\n popupTemplate: '

    {{ name }}

    {{ latlng }}, {{ zoom }}

    ',\n\n /**\n * Prepare your bookmark data for template.\n * If you don't change it, the context of this\n * function will be bookmarks control, so you can\n * access the map or other things from here\n *\n * @param {Object} bookmark\n * @return {Object}\n */\n getPopupContent: function(bookmark) {\n return substitute(this.options.popupTemplate, {\n latlng: this.formatCoords(bookmark.latlng),\n name: bookmark.name,\n zoom: this._map.getZoom()\n });\n }\n },\n\n /**\n * @param {Object} options\n * @constructor\n */\n initialize: function(options) {\n\n options = options || {};\n\n /**\n * Bookmarks array\n * @type {Array}\n */\n this._data = [];\n\n /**\n * @type {Element}\n */\n this._list = null;\n\n /**\n * @type {L.Marker}\n */\n this._marker = null;\n\n /**\n * @type {HTMLElement}\n */\n this._addButton = null;\n\n /**\n * @type {Element}\n */\n this._icon = null;\n\n /**\n * @type {Boolean}\n */\n this._isCollapsed = true;\n\n L.Util.setOptions(this, options);\n\n /**\n * @type {Storage}\n */\n this._storage = options.storage ||\n (this.options.localStorage ?\n new Storage(this.options.name, EngineType.LOCALSTORAGE) :\n new Storage(this.options.name, EngineType.GLOBALSTORAGE));\n\n L.Control.prototype.initialize.call(this, this.options);\n },\n\n /**\n * @param {L.Map} map\n */\n onAdd: function(map) {\n const container = this._container = L.DomUtil.create('div',\n this.options.containerClass\n );\n\n L.DomEvent\n .disableClickPropagation(container)\n .disableScrollPropagation(container);\n container.innerHTML = '
    ' +\n '';\n\n this._icon = container.querySelector('.' + this.options.iconClass);\n this._icon.title = this.options.title;\n\n this._createList(this.options.bookmarks);\n\n const wrapper = L.DomUtil.create('div',\n this.options.wrapperClass, this._container);\n wrapper.appendChild(this._listwrapper);\n\n this._initLayout();\n\n L.DomEvent\n .on(container, 'click', this._onClick, this)\n .on(container, 'contextmenu', L.DomEvent.stopPropagation);\n\n map\n .on('bookmark:new', this._onBookmarkAddStart, this)\n .on('bookmark:add', this._onBookmarkAdd, this)\n .on('bookmark:edited', this._onBookmarkEdited, this)\n .on('bookmark:show', this._onBookmarkShow, this)\n .on('bookmark:edit', this._onBookmarkEdit, this)\n .on('bookmark:options', this._onBookmarkOptions, this)\n .on('bookmark:remove', this._onBookmarkRemove, this)\n .on('resize', this._initLayout, this);\n\n return container;\n },\n\n /**\n * @param {L.Map} map\n */\n onRemove: function(map) {\n map\n .off('bookmark:new', this._onBookmarkAddStart, this)\n .off('bookmark:add', this._onBookmarkAdd, this)\n .off('bookmark:edited', this._onBookmarkEdited, this)\n .off('bookmark:show', this._onBookmarkShow, this)\n .off('bookmark:edit', this._onBookmarkEdit, this)\n .off('bookmark:options', this._onBookmarkOptions, this)\n .off('bookmark:remove', this._onBookmarkRemove, this)\n .off('resize', this._initLayout, this);\n\n if (this._marker) this._marker._popup_._close();\n\n if (this.options.addNewOption) {\n L.DomEvent.off(this._container.querySelector('.' +\n this.options.addBookmarkButtonCss), 'click',\n this._onAddButtonPressed, this);\n }\n\n this._marker = null;\n this._popup = null;\n this._container = null;\n },\n\n /**\n * @return {Array.}\n */\n getData: function() {\n return this._filterBookmarksOutput(this._data);\n },\n\n /**\n * @param {Array.|Function|null} bookmarks\n */\n _createList: function(bookmarks) {\n this._listwrapper = L.DomUtil.create(\n 'div', this.options.listWrapperClass, this._container);\n this._list = L.DomUtil.create(\n 'ul', this.options.listClass, this._listwrapper);\n\n // select bookmark\n L.DomEvent.delegate(\n this._list,\n '.' + this.options.bookmarkTemplateOptions.itemClass,\n 'click',\n this._onBookmarkClick,\n this\n );\n\n this._setEmptyListContent();\n\n if (L.Util.isArray(bookmarks)) {\n this._appendItems(bookmarks);\n } else if (typeof bookmarks === 'function') {\n this._appendItems(bookmarks());\n } else {\n this._storage.getAllItems((bookmarks) => this._appendItems(bookmarks));\n }\n },\n\n /**\n * Empty list\n */\n _setEmptyListContent: function() {\n this._list.innerHTML = substitute(this.options.emptyTemplate,\n L.Util.extend(this.options.bookmarkTemplateOptions, {\n data: {\n emptyMessage: this.options.emptyMessage\n }\n }));\n },\n\n /**\n * Sees that the list size is not too big\n */\n _initLayout: function() {\n const size = this._map.getSize();\n this._listwrapper.style.maxHeight =\n Math.min(size.y * 0.6, size.y - 100) + 'px';\n\n if (this.options.position === 'topleft') {\n L.DomUtil.addClass(this._container, 'leaflet-bookmarks-to-right');\n }\n if (this.options.addNewOption) {\n const addButton = L.DomUtil.create('div', this.options.addBookmarkButtonCss);\n if (this._addButton === null) {\n this._listwrapper.parentNode.appendChild(addButton);\n this._addButton = addButton;\n this._listwrapper.parentNode\n .classList.add(this.options.listWrapperClassAdd);\n addButton.innerHTML = '+' +\n '' +\n this.options.addBookmarkMessage + '';\n L.DomEvent.on(addButton, 'click', this._onAddButtonPressed, this);\n }\n }\n },\n\n /**\n * @param {MouseEvent} evt\n */\n _onAddButtonPressed: function(evt) {\n L.DomEvent.stop(evt);\n this.collapse();\n this._map.fire('bookmark:new', {\n latlng: this._map.getCenter()\n });\n },\n\n /**\n * I don't care if they're unique or not,\n * if you do - handle this\n *\n * @param {Array.} bookmarks\n * @return {Array.}\n */\n _filterBookmarks: function(bookmarks) {\n if (this.options.filterBookmarks) {\n return this.options.filterBookmarks.call(this, bookmarks);\n }\n return bookmarks;\n },\n\n /**\n * Filter bookmarks for output. This one allows you to save dividers as well\n *\n * @param {Array.} bookmarks\n * @return {Array.}\n */\n _filterBookmarksOutput: function(bookmarks) {\n if (this.options.filterBookmarksOutput) {\n return this.options.filterBookmarksOutput.call(this, bookmarks);\n }\n return bookmarks;\n },\n\n /**\n * Append list items(render)\n * @param {Array.} bookmarks\n */\n _appendItems: function(bookmarks) {\n let html = '';\n let wasEmpty = this._data.length === 0;\n let bookmark;\n\n // maybe you have something in mind?\n bookmarks = this._filterBookmarks(bookmarks);\n\n // store\n this._data = this._data.concat(bookmarks);\n\n for (let i = 0, len = bookmarks.length; i < len; i++) {\n html += this._renderBookmarkItem(bookmarks[i]);\n }\n\n if (html !== '') {\n // replace `empty` message if needed\n if (wasEmpty) {\n this._list.innerHTML = html;\n } else {\n this._list.innerHTML += html;\n }\n }\n\n if (this._isCollapsed) {\n const container = this._container;\n const className = this.options.animateClass;\n container.classList.add(className);\n window.setTimeout(function() {\n container.classList.remove(className);\n }, this.options.animateDuration);\n } else {\n this._scrollToLast();\n }\n },\n\n /**\n * Scrolls to last element of the list\n */\n _scrollToLast: function() {\n const listwrapper = this._listwrapper;\n let pos = this._listwrapper.scrollTop;\n const targetVal = this._list.lastChild.offsetTop;\n let start = 0;\n\n const step = (targetVal - pos) / (this.options.scrollDuration / (1000 / 16));\n\n function scroll(timestamp) {\n if (!start) start = timestamp\n //var progress = timestamp - start;\n\n pos = Math.min(pos + step, targetVal);\n listwrapper.scrollTop = pos;\n if (pos !== targetVal) {\n L.Util.requestAnimFrame(scroll);\n }\n }\n L.Util.requestAnimFrame(scroll);\n },\n\n /**\n * Render single bookmark item\n * @param {Object} bookmark\n * @return {String}\n */\n _renderBookmarkItem: function(bookmark) {\n if (bookmark.divider) {\n return substitute(this.options.dividerTemplate, bookmark);\n }\n\n this.options.bookmarkTemplateOptions.data =\n this._getBookmarkDataForTemplate(bookmark);\n\n return substitute(\n this.options.bookmarkTemplate,\n this.options.bookmarkTemplateOptions\n );\n },\n\n /**\n * Extracts data and style expressions for item template\n * @param {Object} bookmark\n * @return {Object}\n */\n _getBookmarkDataForTemplate: function(bookmark) {\n if (this.options.getBookmarkDataForTemplate) {\n return this.options.getBookmarkDataForTemplate.call(this, bookmark);\n }\n return {\n coords: this.formatCoords(bookmark.latlng),\n name: this.formatName(bookmark.name),\n zoom: bookmark.zoom,\n id: bookmark.id\n };\n },\n\n /**\n * @param {L.LatLng} latlng\n * @return {String}\n */\n formatCoords: function(latlng) {\n if (this.options.formatCoords) {\n return this.options.formatCoords.call(this, latlng);\n }\n return latlng[0].toFixed(4) + ', ' + latlng[1].toFixed(4);\n },\n\n /**\n * @param {String} name\n * @return {String}\n */\n formatName: function(name) {\n if (this.options.formatName) {\n return this.options.formatName.call(this, name);\n }\n return name;\n },\n\n /**\n * Shows bookmarks list\n */\n expand: function() {\n L.DomUtil.addClass(this._container, this.options.expandedClass);\n this._isCollapsed = false;\n },\n\n /**\n * Hides bookmarks list and the form\n */\n collapse: function() {\n L.DomUtil.removeClass(this._container, this.options.expandedClass);\n this._isCollapsed = true;\n },\n\n /**\n * @param {Event} evt\n */\n _onClick: function(evt) {\n const expanded = L.DomUtil.hasClass(this._container, this.options.expandedClass);\n let target = evt.target || evt.srcElement;\n\n if (expanded) {\n if (target === this._container) {\n return this.collapse();\n }\n // check if it's inside the header\n while (target !== this._container) {\n if (L.DomUtil.hasClass(target, this.options.headerClass) ||\n L.DomUtil.hasClass(target, this.options.listWrapperClass)) {\n this.collapse();\n break;\n }\n target = target.parentNode;\n }\n } else this.expand();\n },\n\n /**\n * @param {Object} evt\n */\n _onBookmarkAddStart: function(evt) {\n if (this._marker) this._popup._close();\n\n this._marker = new L.Marker(evt.latlng, {\n icon: this.options.icon || new L.Icon.Default(),\n draggable: true,\n riseOnHover: true\n }).addTo(this._map);\n this._marker.on('popupclose', this._onPopupClosed, this);\n\n // open form\n this._popup = new L.Control.Bookmarks.FormPopup(\n L.Util.extend(this.options.formPopup, {\n mode: L.Control.Bookmarks.FormPopup.modes.CREATE\n }),\n this._marker,\n this,\n L.Util.extend({}, evt.data, this.options.defaultBookmarkOptions)\n ).addTo(this._map);\n },\n\n /**\n * Bookmark added\n * @param {Object} bookmark\n */\n _onBookmarkAdd: function(bookmark) {\n const map = this._map;\n bookmark = this._cleanBookmark(bookmark.data);\n this._storage.setItem(bookmark.id, bookmark, (item) => {\n map.fire('bookmark:saved', {\n data: item\n });\n this._appendItems([item]);\n });\n this._showBookmark(bookmark);\n },\n\n /**\n * Update done\n * @param {Event} evt\n */\n _onBookmarkEdited: function(evt) {\n const map = this._map;\n const bookmark = this._cleanBookmark(evt.data);\n this._storage.setItem(bookmark.id, bookmark, (item) => {\n map.fire('bookmark:saved', { data: item });\n const data = this._data;\n this._data = [];\n for (var i = 0, len = data.length; i < len; i++) {\n if (data[i].id === bookmark.id) {\n data.splice(i, 1, bookmark);\n }\n }\n this._appendItems(data);\n });\n this._showBookmark(bookmark);\n },\n\n /**\n * Cleans circular reference for JSON\n * @param {Object} bookmark\n * @return {Object}\n */\n _cleanBookmark: function(bookmark) {\n if (!L.Util.isArray(bookmark.latlng)) {\n bookmark.latlng = [bookmark.latlng.lat, bookmark.latlng.lng];\n }\n return bookmark;\n },\n\n /**\n * Form closed\n * @param {Object} evt\n */\n _onPopupClosed: function(evt) {\n this._map.removeLayer(this._marker);\n this._marker = null;\n this._popup = null;\n },\n\n /**\n * @param {String} id\n * @return {Object|Null}\n */\n _getBookmark: function(id) {\n for (let i = 0, len = this._data.length; i < len; i++) {\n if (this._data[i].id === id) return this._data[i];\n }\n return null;\n },\n\n /**\n * @param {Object} evt\n */\n _onBookmarkShow: function(evt) {\n this._gotoBookmark(evt.data);\n },\n\n /**\n * Event handler for edit\n * @param {Object} evt\n */\n _onBookmarkEdit: function(evt) {\n this._editBookmark(evt.data);\n },\n\n /**\n * Remove bookmark triggered\n * @param {Event} evt\n */\n _onBookmarkRemove: function(evt) {\n this._removeBookmark(evt.data);\n },\n\n /**\n * Bookmark options called\n * @param {Event} evt\n */\n _onBookmarkOptions: function(evt) {\n this._bookmarkOptions(evt.data);\n },\n\n /**\n * Show menu popup\n * @param {Object} bookmark\n */\n _bookmarkOptions: function(bookmark) {\n const coords = L.latLng(bookmark.latlng);\n const marker = this._marker = this._createMarker(coords, bookmark);\n // open form\n this._popup = new L.Control.Bookmarks.FormPopup(\n L.Util.extend(this.options.formPopup, {\n mode: L.Control.Bookmarks.FormPopup.modes.OPTIONS\n }),\n marker,\n this,\n bookmark\n ).addTo(this._map);\n },\n\n /**\n * Call edit popup\n * @param {Object} bookmark\n */\n _editBookmark: function(bookmark) {\n const coords = L.latLng(bookmark.latlng);\n const marker = this._marker = this._createMarker(coords, bookmark);\n marker.dragging.enable();\n // open form\n this._popup = new L.Control.Bookmarks.FormPopup(\n L.Util.extend(this.options.formPopup, {\n mode: L.Control.Bookmarks.FormPopup.modes.UPDATE\n }),\n marker,\n this,\n bookmark\n ).addTo(this._map);\n },\n\n /**\n * Returns a handler that will remove the bookmark from map\n * in case it got removed from the list\n * @param {Object} bookmark\n * @param {L.Marker} marker\n * @return {Function}\n */\n _getOnRemoveHandler: function(bookmark, marker) {\n return function (evt) {\n if (evt.data.id === bookmark.id) {\n marker.clearAllEventListeners();\n if (marker._popup_) marker._popup_._close();\n this.removeLayer(marker);\n }\n };\n },\n\n /**\n * Creates bookmark marker\n * @param {L.LatLng} coords\n * @param {Object} bookmark\n * @return {L.Marker}\n */\n _createMarker: function(coords, bookmark) {\n const marker = new L.Marker(coords, {\n icon: this.options.icon || new L.Icon.Default(),\n riseOnHover: true\n }).addTo(this._map);\n const removeIfRemoved = this._getOnRemoveHandler(bookmark, marker);\n this._map.on('bookmark:removed', removeIfRemoved, this._map);\n marker\n .on('popupclose', () => this._map.removeLayer(this))\n .on('remove', () => this._map.off('bookmark:removed', removeIfRemoved));\n return marker;\n },\n\n /**\n * Shows bookmark, nothing else\n * @param {Object} bookmark\n */\n _showBookmark: function(bookmark) {\n if (this._marker) this._marker._popup_._close();\n const coords = L.latLng(bookmark.latlng);\n const marker = this._createMarker(coords, bookmark);\n const popup = new L.Control.Bookmarks.FormPopup(\n L.Util.extend(this.options.formPopup, {\n mode: L.Control.Bookmarks.FormPopup.modes.SHOW\n }),\n marker,\n this,\n bookmark\n );\n if (this.options.popupOnShow) popup.addTo(this._map);\n this._popup = popup;\n this._marker = marker;\n },\n\n /**\n * @param {Object} bookmark\n */\n _gotoBookmark: function(bookmark) {\n this._map.setView(bookmark.latlng, bookmark.zoom);\n this._showBookmark(bookmark);\n },\n\n /**\n * @param {Object} bookmark\n */\n _removeBookmark: function(bookmark) {\n const remove = (proceed) => {\n if (!proceed) return this._showBookmark(bookmark);\n\n this._data.splice(this._data.indexOf(bookmark), 1);\n this._storage.removeItem(bookmark.id, (bookmark) => {\n this._onBookmarkRemoved(bookmark);\n });\n };\n\n if (typeof this.options.onRemove === 'function') {\n this.options.onRemove(bookmark, remove);\n } else {\n remove(true);\n }\n },\n\n /**\n * @param {Object} bookmark\n */\n _onBookmarkRemoved: function(bookmark) {\n const li = this._list.querySelector('.' +\n this.options.bookmarkTemplateOptions.itemClass +\n \"[data-id='\" + bookmark.id + \"']\");\n\n this._map.fire('bookmark:removed', { data: bookmark });\n\n if (li) {\n L.DomUtil.setOpacity(li, 0);\n setTimeout(() => {\n if (li.parentNode) li.parentNode.removeChild(li);\n if (this._data.length === 0) this._setEmptyListContent();\n }, 250);\n }\n },\n\n /**\n * Gets popup content\n * @param {Object} bookmark\n * @return {String}\n */\n _getPopupContent: function(bookmark) {\n if (this.options.getPopupContent) {\n return this.options.getPopupContent.call(this, bookmark);\n }\n return JSON.stringify(bookmark);\n },\n\n /**\n * @param {Event} e\n */\n _onBookmarkClick: function(evt) {\n const bookmark = this._getBookmarkFromListItem(evt.delegateTarget);\n if (!bookmark) return;\n L.DomEvent.stopPropagation(evt);\n\n // remove button hit\n if (L.DomUtil.hasClass(evt.target || evt.srcElement,\n this.options.bookmarkTemplateOptions.removeClass)) {\n this._removeBookmark(bookmark);\n } else {\n this._map.fire('bookmark:show', { data: bookmark });\n if (this.options.collapseOnClick) this.collapse();\n }\n },\n\n /**\n * In case you've decided to play with ids - we've got you covered\n * @param {Element} li\n * @return {Object|Null}\n */\n _getBookmarkFromListItem: function(li) {\n if (this.options.getBookmarkFromListItem) {\n return this.options.getBookmarkFromListItem.call(this, li);\n }\n return this._getBookmark(li.getAttribute('data-id'));\n },\n\n /**\n * GeoJSON feature out of a bookmark\n * @param {Object} bookmark\n * @return {Object}\n */\n bookmarkToFeature: function(bookmark) {\n const coords = this._getBookmarkCoords(bookmark);\n bookmark = JSON.parse(JSON.stringify(bookmark)); // quick copy\n delete bookmark.latlng;\n\n return L.GeoJSON.getFeature({\n feature: {\n type: 'Feature',\n id: bookmark.id,\n properties: bookmark\n }\n }, {\n type: 'Point',\n coordinates: coords\n });\n },\n\n /**\n * @param {Object} bookmark\n * @return {Array.}\n */\n _getBookmarkCoords: function(bookmark) {\n if (bookmark.latlng instanceof L.LatLng) {\n return [bookmark.latlng.lat, bookmark.latlng.lng];\n }\n return bookmark.latlng.reverse();\n },\n\n /**\n * Read bookmarks from GeoJSON FeatureCollectio\n * @param {Object} geojson\n * @return {Object}\n */\n fromGeoJSON: function(geojson) {\n const bookmarks = [];\n for (let i = 0, len = geojson.features.length; i < len; i++) {\n const bookmark = geojson.features[i];\n if (!bookmark.properties.divider) {\n bookmark.properties.latlng = bookmark.geometry\n .coordinates.concat().reverse();\n }\n bookmarks.push(bookmark.properties);\n }\n return bookmarks;\n },\n\n /**\n * @return {Object}\n */\n toGeoJSON: function() {\n return {\n type: 'FeatureCollection',\n features: ((data) => {\n const result = [];\n for (let i = 0, len = data.length; i < len; i++) {\n if (!data[i].divider) {\n result.push(this.bookmarkToFeature(data[i]));\n }\n }\n return result;\n })(this._data)\n };\n }\n});\n","import L from 'leaflet';\nimport Bookmarks from './src/bookmarks';\n\nL.Control.Bookmarks = Bookmarks;\n\nexport default Bookmarks;\n"],"names":["let","const","this"],"mappings":"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"}