-(function() {
+(function () {
L.Control.FullScreen = L.Control.extend({
options: {
position: 'topleft',
title: 'Full Screen',
+ titleCancel: 'Exit Full Screen',
forceSeparateButton: false,
- forcePseudoFullscreen: false
+ forcePseudoFullscreen: false,
+ fullscreenElement: false
},
onAdd: function (map) {
this._createButton(this.options.title, className, content, container, this.toggleFullScreen, this);
+ this._map.on('enterFullscreen exitFullscreen', this._toggleTitle, this);
+
return container;
},
- _createButton: function (title, className, content,container, fn, context) {
- var link = L.DomUtil.create('a', className, container);
- link.href = '#';
- link.title = title;
- link.innerHTML = content;
+ _createButton: function (title, className, content, container, fn, context) {
+ this.link = L.DomUtil.create('a', className, container);
+ this.link.href = '#';
+ this.link.title = title;
+ this.link.innerHTML = content;
L.DomEvent
- .addListener(link, 'click', L.DomEvent.stopPropagation)
- .addListener(link, 'click', L.DomEvent.preventDefault)
- .addListener(link, 'click', fn, context);
+ .addListener(this.link, 'click', L.DomEvent.stopPropagation)
+ .addListener(this.link, 'click', L.DomEvent.preventDefault)
+ .addListener(this.link, 'click', fn, context);
L.DomEvent
.addListener(container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation)
.addListener(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault)
.addListener(document, fullScreenApi.fullScreenEventName, this._handleEscKey, context);
- return link;
+ return this.link;
},
toggleFullScreen: function () {
map._exitFired = false;
if (map._isFullscreen) {
if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
- fullScreenApi.cancelFullScreen(map._container);
+ fullScreenApi.cancelFullScreen(this.options.fullscreenElement ? this.options.fullscreenElement : map._container);
} else {
L.DomUtil.removeClass(map._container, 'leaflet-pseudo-fullscreen');
}
}
else {
if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
- fullScreenApi.requestFullScreen(map._container);
+ fullScreenApi.requestFullScreen(this.options.fullscreenElement ? this.options.fullscreenElement : map._container);
} else {
L.DomUtil.addClass(map._container, 'leaflet-pseudo-fullscreen');
}
}
},
+ _toggleTitle: function () {
+ this.link.title = this._map._isFullscreen ? this.options.title : this.options.titleCancel;
+ },
+
_handleEscKey: function () {
var map = this._map;
if (!fullScreenApi.isFullScreen(map) && !map._exitFired) {
var
fullScreenApi = {
supportsFullScreen: false,
- isFullScreen: function() { return false; },
- requestFullScreen: function() {},
- cancelFullScreen: function() {},
+ isFullScreen: function () { return false; },
+ requestFullScreen: function () {},
+ cancelFullScreen: function () {},
fullScreenEventName: '',
prefix: ''
},
fullScreenApi.supportsFullScreen = true;
} else {
// check for fullscreen support by vendor prefix
- for (var i = 0, il = browserPrefixes.length; i < il; i++ ) {
+ for (var i = 0, il = browserPrefixes.length; i < il; i++) {
fullScreenApi.prefix = browserPrefixes[i];
- if (typeof document[fullScreenApi.prefix + 'CancelFullScreen' ] !== 'undefined' ) {
+ if (typeof document[fullScreenApi.prefix + 'CancelFullScreen'] !== 'undefined') {
fullScreenApi.supportsFullScreen = true;
break;
}
}
+ if (typeof document['msExitFullscreen'] !== 'undefined') {
+ fullScreenApi.prefix = 'ms';
+ fullScreenApi.supportsFullScreen = true;
+ }
}
// update methods to do something useful
if (fullScreenApi.supportsFullScreen) {
- fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange';
- fullScreenApi.isFullScreen = function() {
- switch (this.prefix) {
+ if (fullScreenApi.prefix === 'ms') {
+ fullScreenApi.fullScreenEventName = 'MSFullscreenChange';
+ } else {
+ fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange';
+ }
+ fullScreenApi.isFullScreen = function () {
+ switch (this.prefix) {
case '':
return document.fullScreen;
case 'webkit':
return document.webkitIsFullScreen;
+ case 'ms':
+ return document.msFullscreenElement;
default:
return document[this.prefix + 'FullScreen'];
}
};
- fullScreenApi.requestFullScreen = function(el) {
- return (this.prefix === '') ? el.requestFullscreen() : el[this.prefix + 'RequestFullScreen']();
+ fullScreenApi.requestFullScreen = function (el) {
+ switch (this.prefix) {
+ case '':
+ return el.requestFullscreen();
+ case 'ms':
+ return el.msRequestFullscreen();
+ default:
+ return el[this.prefix + 'RequestFullScreen']();
+ }
};
- fullScreenApi.cancelFullScreen = function(el) {
- return (this.prefix === '') ? document.exitFullscreen() : document[this.prefix + 'CancelFullScreen']();
+ fullScreenApi.cancelFullScreen = function () {
+ switch (this.prefix) {
+ case '':
+ return document.exitFullscreen();
+ case 'ms':
+ return document.msExitFullscreen();
+ default:
+ return document[this.prefix + 'CancelFullScreen']();
+ }
};
}
// jQuery plugin
if (typeof jQuery !== 'undefined') {
- jQuery.fn.requestFullScreen = function() {
- return this.each(function() {
+ jQuery.fn.requestFullScreen = function () {
+ return this.each(function () {
var el = jQuery(this);
if (fullScreenApi.supportsFullScreen) {
fullScreenApi.requestFullScreen(el);