forked from darcyclarke/jQuery-Fullscreen-Plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.fullscreen-1.0.min.js
40 lines (39 loc) · 4.14 KB
/
jquery.fullscreen-1.0.min.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
/**
* jQuery Fullscreen
*
* @author Darcy Clarke
* @version 1.0
*
* Copyright (c) 2012 Darcy Clarke
* Dual licensed under the MIT and GPL licenses.
*
* ADDS:
*
* - $.support.fullscreen (boolean)
*
* - :fullscreen pseudo selector & filter (.is .find .filter)
*
* - $(el).on("fullscreenchange", fn)
* - $(el).trigger("requestFullScreen", fn) or $(el).requestFullScreen(fn)
* - $(el).trigger("cancelFullScreen", fn) or $(el).cancelFullScreen(fn)
*
* USES:
*
* - :-webkit-full-screen and :-moz-fullscreen (no fallbacks)
*
* - webkit/moz fullscreenchange
* - webkit/moz Cancel/Request FullScreen
* - W3C fullscreenchange
* - W3C Exit/Request FullScreen
*
* FALLBACKS:
*
* - Utilizes fullscreen popups with load/unload events to mimic Cancel/Request Fullscreen events
* - Trigger fullscreenchange on load/unload events
* - To note: You must turn on fallback support
*
* Example:
* $.extend({ $.fullscreen.settings, { fallback : true, window_url : 'http://google.com' });
*
*/
(function(a){var b=a.fs=a.fullscreen={};b.settings={timeout:10,loaded:false,fallback:false,window_handler:window,window_name:"fullscreen",window_url:"",window_settings:{height:window.screen.height,width:window.screen.width,directories:0,location:0,menubar:0,resizable:0,status:0,toolbar:0,scrollbars:0},callback:function(c){if(!b.settings.loaded){var d=this,e=a.support.fullscreen?b.fullscreenchange:"load unload";b.settings.loaded=true;c.call(d);setTimeout(function(){a(d).on(e,function(){if(b.settings.loaded)b.settings.loaded=false})},b.settings.timeout)}}};b.el=document.createElement("div");b.selectors="full-screen";b.prefixes="-webkit- -moz- -o- -ms- -khtml- ".split(" ");b.domPrefixes="Webkit Moz O ms Khtml ".split(" "),b.events={change:"fullscreenchange".split(" "),request:"requestFullScreen RequestFullScreen".split(" "),cancel:"cancelFullScreen CancelFullScreen exitFullscreen".split(" ")};b.isEventSupported=function(a,b){var c=a in b;if(!c){b.setAttribute(a,"return;");c=typeof b[a]=="function"}return c};b.test=function(a,b,c){return function(){for(i in a){var d=a[i].toLowerCase();for(x in b){var e=d+b[x];if(c(e))return e}}return false}()};a.extend(a.support,{fullscreen:!!function(){return b.test(b.domPrefixes,b.events.cancel,function(a){return document[a]})}()});if(a.support.fullscreen){b.fullscreenchange=b.test(b.domPrefixes,b.events.change,function(a){return b.isEventSupported("on"+a,b.el)});b.RequestFullScreen=b.test(b.domPrefixes,b.events.request,function(a){return b.isEventSupported(a,b.el)});b.cancelFullScreen=b.test(b.domPrefixes,b.events.cancel,function(a){return document[a]});a.extend(a.expr[":"],{fullscreen:function(c){return a.fs.test(b.prefixes,b.selectors,function(b){return a(c).is(b)})}})}a.event.special.fullscreenchange={setup:function(){var c=a.support.fullscreen?this:b.window_handler,d=a.support.fullscreen?b.fullscreenchange:"load unload";a(c).on(d,a.event.special.fullscreenchange.handler)},teardown:function(){var c=a.support.fullscreen?this:b.window_handler,d=a.support.fullscreen?b.fullscreenchange:"load unload";a(c).off(d,a.event.special.fullscreenchange.handler)},handler:function(a){return true}};a.fn.requestFullScreen=function(c){c=typeof c!="function"?function(){}:c;return this.each(function(d,e){if(b.settings.loaded){a(e).CancelFullScreen()}else{if(a.support.fullscreen){this[b.RequestFullScreen]();b.settings.callback.apply(e,[c])}else{if(b.settings.fallback){if(b.settings.window_handler&&b.settings.window_handler!=window)b.settings.window_handler.moveTo(0,0);b.window_handler=window.open(b.settings.window_url,b.settings.window_name,a.param(b.settings.window_settings).replace("&",","),false);b.window_handler.onload=function(){b.settings.callback.apply(b.window_handler,[c])};b.window_handler.onreadystatechange=function(){b.settings.callback.apply(b.window_handler,[c])};setTimeout(function(){b.settings.callback.apply(b.window_handler,[c])},b.settings.timeout)}}}})};a.fn.cancelFullScreen=function(c){c=typeof c!="function"?function(){}:c;b.settings.loaded=false;return this.each(function(d,e){if(a.support.fullscreen){document[b.CancelFullScreen]();c()}else{a(this).trigger("fullscreenchange");b.settings.window_handler.close();c()}})}})(jQuery);