[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / gis / lib / leaflet / plugins / Control.FullScreen.js
index d356a4e..093ea8b 100644 (file)
@@ -1,11 +1,13 @@
-(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) {
@@ -25,19 +27,21 @@ L.Control.FullScreen = L.Control.extend({
 
                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)
@@ -49,7 +53,7 @@ L.Control.FullScreen = L.Control.extend({
                        .addListener(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault)
                        .addListener(document, fullScreenApi.fullScreenEventName, this._handleEscKey, context);
 
-               return link;
+               return this.link;
        },
        
        toggleFullScreen: function () {
@@ -57,7 +61,7 @@ L.Control.FullScreen = L.Control.extend({
                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');
                        }
@@ -68,7 +72,7 @@ L.Control.FullScreen = L.Control.extend({
                }
                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');
                        }
@@ -78,6 +82,10 @@ L.Control.FullScreen = L.Control.extend({
                }
        },
        
+       _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) {
@@ -111,9 +119,9 @@ source : http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugi
        var 
                fullScreenApi = { 
                        supportsFullScreen: false,
-                       isFullScreen: function() { return false; }, 
-                       requestFullScreen: function() {}, 
-                       cancelFullScreen: function() {},
+                       isFullScreen: function () { return false; }, 
+                       requestFullScreen: function () {}, 
+                       cancelFullScreen: function () {},
                        fullScreenEventName: '',
                        prefix: ''
                },
@@ -124,40 +132,64 @@ source : http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugi
                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);