3 L
.Control
.FullScreen
= L
.Control
.extend({
7 forceSeparateButton
: false,
8 forcePseudoFullscreen
: false
11 onAdd: function (map
) {
12 var className
= 'leaflet-control-zoom-fullscreen', container
;
14 if (map
.zoomControl
&& !this.options
.forceSeparateButton
) {
15 container
= map
.zoomControl
._container
;
17 container
= L
.DomUtil
.create('div', 'leaflet-bar');
20 this._createButton(this.options
.title
, className
, container
, this.toggleFullScreen
, this);
25 _createButton: function (title
, className
, container
, fn
, context
) {
26 var link
= L
.DomUtil
.create('a', className
, container
);
31 .addListener(link
, 'click', L
.DomEvent
.stopPropagation
)
32 .addListener(link
, 'click', L
.DomEvent
.preventDefault
)
33 .addListener(link
, 'click', fn
, context
);
36 .addListener(container
, fullScreenApi
.fullScreenEventName
, L
.DomEvent
.stopPropagation
)
37 .addListener(container
, fullScreenApi
.fullScreenEventName
, L
.DomEvent
.preventDefault
)
38 .addListener(container
, fullScreenApi
.fullScreenEventName
, this._handleEscKey
, context
);
41 .addListener(document
, fullScreenApi
.fullScreenEventName
, L
.DomEvent
.stopPropagation
)
42 .addListener(document
, fullScreenApi
.fullScreenEventName
, L
.DomEvent
.preventDefault
)
43 .addListener(document
, fullScreenApi
.fullScreenEventName
, this._handleEscKey
, context
);
48 toggleFullScreen: function () {
50 map
._exitFired
= false;
51 if (map
._isFullscreen
) {
52 if (fullScreenApi
.supportsFullScreen
&& !this.options
.forcePseudoFullscreen
) {
53 fullScreenApi
.cancelFullScreen(map
._container
);
55 L
.DomUtil
.removeClass(map
._container
, 'leaflet-pseudo-fullscreen');
58 map
.fire('exitFullscreen');
59 map
._exitFired
= true;
60 map
._isFullscreen
= false;
63 if (fullScreenApi
.supportsFullScreen
&& !this.options
.forcePseudoFullscreen
) {
64 fullScreenApi
.requestFullScreen(map
._container
);
66 L
.DomUtil
.addClass(map
._container
, 'leaflet-pseudo-fullscreen');
69 map
.fire('enterFullscreen');
70 map
._isFullscreen
= true;
74 _handleEscKey: function () {
76 if (!fullScreenApi
.isFullScreen(map
) && !map
._exitFired
) {
77 map
.fire('exitFullscreen');
78 map
._exitFired
= true;
79 map
._isFullscreen
= false;
84 L
.Map
.addInitHook(function () {
85 if (this.options
.fullscreenControl
) {
86 this.fullscreenControl
= L
.control
.fullscreen(this.options
.fullscreenControlOptions
);
87 this.addControl(this.fullscreenControl
);
91 L
.control
.fullscreen = function (options
) {
92 return new L
.Control
.FullScreen(options
);
96 Native FullScreen JavaScript API
98 Assumes Mozilla naming conventions instead of W3C for now
100 source : http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/
106 supportsFullScreen
: false,
107 isFullScreen: function() { return false; },
108 requestFullScreen: function() {},
109 cancelFullScreen: function() {},
110 fullScreenEventName
: '',
113 browserPrefixes
= 'webkit moz o ms khtml'.split(' ');
115 // check for native support
116 if (typeof document
.exitFullscreen
!== 'undefined') {
117 fullScreenApi
.supportsFullScreen
= true;
119 // check for fullscreen support by vendor prefix
120 for (var i
= 0, il
= browserPrefixes
.length
; i
< il
; i
++ ) {
121 fullScreenApi
.prefix
= browserPrefixes
[i
];
122 if (typeof document
[fullScreenApi
.prefix
+ 'CancelFullScreen' ] !== 'undefined' ) {
123 fullScreenApi
.supportsFullScreen
= true;
129 // update methods to do something useful
130 if (fullScreenApi
.supportsFullScreen
) {
131 fullScreenApi
.fullScreenEventName
= fullScreenApi
.prefix
+ 'fullscreenchange';
132 fullScreenApi
.isFullScreen = function() {
133 switch (this.prefix
) {
135 return document
.fullScreen
;
137 return document
.webkitIsFullScreen
;
139 return document
[this.prefix
+ 'FullScreen'];
142 fullScreenApi
.requestFullScreen = function(el
) {
143 return (this.prefix
=== '') ? el
.requestFullscreen() : el
[this.prefix
+ 'RequestFullScreen']();
145 fullScreenApi
.cancelFullScreen = function(el
) {
146 return (this.prefix
=== '') ? document
.exitFullscreen() : document
[this.prefix
+ 'CancelFullScreen']();
151 if (typeof jQuery
!== 'undefined') {
152 jQuery
.fn
.requestFullScreen = function() {
153 return this.each(function() {
154 var el
= jQuery(this);
155 if (fullScreenApi
.supportsFullScreen
) {
156 fullScreenApi
.requestFullScreen(el
);
163 window
.fullScreenApi
= fullScreenApi
;