[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / gis / lib / leaflet / plugins / Control.FullScreen.js
1 (function() {
2
3 L.Control.FullScreen = L.Control.extend({
4 options: {
5 position: 'topleft',
6 title: 'Full Screen',
7 forceSeparateButton: false,
8 forcePseudoFullscreen: false
9 },
10
11 onAdd: function (map) {
12 var className = 'leaflet-control-zoom-fullscreen', container;
13
14 if (map.zoomControl && !this.options.forceSeparateButton) {
15 container = map.zoomControl._container;
16 } else {
17 container = L.DomUtil.create('div', 'leaflet-bar');
18 }
19
20 this._createButton(this.options.title, className, container, this.toggleFullScreen, this);
21
22 return container;
23 },
24
25 _createButton: function (title, className, container, fn, context) {
26 var link = L.DomUtil.create('a', className, container);
27 link.href = '#';
28 link.title = title;
29
30 L.DomEvent
31 .addListener(link, 'click', L.DomEvent.stopPropagation)
32 .addListener(link, 'click', L.DomEvent.preventDefault)
33 .addListener(link, 'click', fn, context);
34
35 L.DomEvent
36 .addListener(container, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation)
37 .addListener(container, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault)
38 .addListener(container, fullScreenApi.fullScreenEventName, this._handleEscKey, context);
39
40 L.DomEvent
41 .addListener(document, fullScreenApi.fullScreenEventName, L.DomEvent.stopPropagation)
42 .addListener(document, fullScreenApi.fullScreenEventName, L.DomEvent.preventDefault)
43 .addListener(document, fullScreenApi.fullScreenEventName, this._handleEscKey, context);
44
45 return link;
46 },
47
48 toggleFullScreen: function () {
49 var map = this._map;
50 map._exitFired = false;
51 if (map._isFullscreen) {
52 if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
53 fullScreenApi.cancelFullScreen(map._container);
54 } else {
55 L.DomUtil.removeClass(map._container, 'leaflet-pseudo-fullscreen');
56 }
57 map.invalidateSize();
58 map.fire('exitFullscreen');
59 map._exitFired = true;
60 map._isFullscreen = false;
61 }
62 else {
63 if (fullScreenApi.supportsFullScreen && !this.options.forcePseudoFullscreen) {
64 fullScreenApi.requestFullScreen(map._container);
65 } else {
66 L.DomUtil.addClass(map._container, 'leaflet-pseudo-fullscreen');
67 }
68 map.invalidateSize();
69 map.fire('enterFullscreen');
70 map._isFullscreen = true;
71 }
72 },
73
74 _handleEscKey: function () {
75 var map = this._map;
76 if (!fullScreenApi.isFullScreen(map) && !map._exitFired) {
77 map.fire('exitFullscreen');
78 map._exitFired = true;
79 map._isFullscreen = false;
80 }
81 }
82 });
83
84 L.Map.addInitHook(function () {
85 if (this.options.fullscreenControl) {
86 this.fullscreenControl = L.control.fullscreen(this.options.fullscreenControlOptions);
87 this.addControl(this.fullscreenControl);
88 }
89 });
90
91 L.control.fullscreen = function (options) {
92 return new L.Control.FullScreen(options);
93 };
94
95 /*
96 Native FullScreen JavaScript API
97 -------------
98 Assumes Mozilla naming conventions instead of W3C for now
99
100 source : http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/
101
102 */
103
104 var
105 fullScreenApi = {
106 supportsFullScreen: false,
107 isFullScreen: function() { return false; },
108 requestFullScreen: function() {},
109 cancelFullScreen: function() {},
110 fullScreenEventName: '',
111 prefix: ''
112 },
113 browserPrefixes = 'webkit moz o ms khtml'.split(' ');
114
115 // check for native support
116 if (typeof document.exitFullscreen !== 'undefined') {
117 fullScreenApi.supportsFullScreen = true;
118 } else {
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;
124 break;
125 }
126 }
127 }
128
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) {
134 case '':
135 return document.fullScreen;
136 case 'webkit':
137 return document.webkitIsFullScreen;
138 default:
139 return document[this.prefix + 'FullScreen'];
140 }
141 };
142 fullScreenApi.requestFullScreen = function(el) {
143 return (this.prefix === '') ? el.requestFullscreen() : el[this.prefix + 'RequestFullScreen']();
144 };
145 fullScreenApi.cancelFullScreen = function(el) {
146 return (this.prefix === '') ? document.exitFullscreen() : document[this.prefix + 'CancelFullScreen']();
147 };
148 }
149
150 // jQuery plugin
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);
157 }
158 });
159 };
160 }
161
162 // export api
163 window.fullScreenApi = fullScreenApi;
164 })();