forked from jerroydmoore/leaflet-button
-
Notifications
You must be signed in to change notification settings - Fork 0
/
L.Control.Button.js
104 lines (88 loc) · 3.23 KB
/
L.Control.Button.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
* The MIT License (MIT)
*
* Copyright (c) 2013 Jerroyd Moore
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
L.Control.Button = L.Control.extend({
includes: L.Mixin.Events,
options: {
position: 'topleft'
},
initialize: function (body, options) {
L.setOptions(this, options);
var classNames = 'leaflet-bar leaflet-control button-control'.split('/\s+/');
if (options && options.className) {
classNames = classNames.concat(('' + options.className).split(/\s+/));
}
var button = L.DomUtil.create('div', classNames.join(' '));
button.innerHTML = this._prepareBody(body);
this._container = button;
return this;
},
_prepareBody: function (body) {
var code = body.replace(/^\s+|\s+$/, '');
if (code.charAt(0) !== '<') {
code = '<a href="javascript:;">' + code + '</a>';
}
return code;
},
isToggled: function () {
return L.DomUtil.hasClass(this._container, this.options.toggleButton);
},
_fireClick: function (e) {
this.fire('click');
if (this.options.toggleButton) {
var btn = this._container;
if (this.isToggled()) {
L.DomUtil.removeClass(this._container, this.options.toggleButton);
} else {
L.DomUtil.addClass(this._container, this.options.toggleButton);
}
}
},
onAdd: function (map) {
if (this._container) {
L.DomEvent.on(this._container, 'click', this._fireClick, this);
var stop = L.DomEvent.stopPropagation;
L.DomEvent.on(this._container, 'mousedown', stop)
.on(this._container, 'touchstart', stop)
.on(this._container, 'dblclick', stop)
.on(this._container, 'mousewheel', stop)
.on(this._container, 'MozMozMousePixelScroll', stop);
this.fire('load');
this._map = map;
}
return this._container;
},
onRemove: function (map) {
if (this._container && this._map) {
L.DomEvent.off(this._container, 'click', this._fireClick, this);
L.DomEvent.off(this._container, 'mousedown', stop)
.off(this._container, 'touchstart', stop)
.off(this._container, 'dblclick', stop)
.off(this._container, 'mousewheel', stop)
.off(this._container, 'MozMozMousePixelScroll', stop);
this.fire('unload');
this._map = null;
}
return this;
}
});
L.control.button = function (label, options) {
return new L.Control.Button(label, options);
};