jquery.fullscreen.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /**
  2. * @preserve jquery.fullscreen 1.1.5
  3. * https://github.com/code-lts/jquery-fullscreen-plugin
  4. * Copyright (C) 2012-2013 Klaus Reimer <k@ailis.de>
  5. * Licensed under the MIT license
  6. * (See http://www.opensource.org/licenses/mit-license)
  7. */
  8. (function(jQuery) {
  9. /**
  10. * Sets or gets the fullscreen state.
  11. *
  12. * @param {boolean=} state
  13. * True to enable fullscreen mode, false to disable it. If not
  14. * specified then the current fullscreen state is returned.
  15. * @return {boolean|Element|jQuery|null}
  16. * When querying the fullscreen state then the current fullscreen
  17. * element (or true if browser doesn't support it) is returned
  18. * when browser is currently in full screen mode. False is returned
  19. * if browser is not in full screen mode. Null is returned if
  20. * browser doesn't support fullscreen mode at all. When setting
  21. * the fullscreen state then the current jQuery selection is
  22. * returned for chaining.
  23. * @this {jQuery}
  24. */
  25. function fullScreen(state)
  26. {
  27. var e, func, doc;
  28. // Do nothing when nothing was selected
  29. if (!this.length) return this;
  30. // We only use the first selected element because it doesn't make sense
  31. // to fullscreen multiple elements.
  32. e = (/** @type {Element} */ this[0]);
  33. // Find the real element and the document (Depends on whether the
  34. // document itself or a HTML element was selected)
  35. if (e.ownerDocument)
  36. {
  37. doc = e.ownerDocument;
  38. }
  39. else
  40. {
  41. doc = e;
  42. e = doc.documentElement;
  43. }
  44. // When no state was specified then return the current state.
  45. if (state == null)
  46. {
  47. // When fullscreen mode is not supported then return null
  48. if (!((/** @type {?Function} */ doc["exitFullscreen"])
  49. || (/** @type {?Function} */ doc["webkitExitFullscreen"])
  50. || (/** @type {?Function} */ doc["webkitCancelFullScreen"])
  51. || (/** @type {?Function} */ doc["msExitFullscreen"])
  52. || (/** @type {?Function} */ doc["mozCancelFullScreen"])))
  53. {
  54. return null;
  55. }
  56. // Check fullscreen state
  57. state = fullScreenState(doc);
  58. if (!state) return state;
  59. // Return current fullscreen element or "true" if browser doesn't
  60. // support this
  61. return (/** @type {?Element} */ doc["fullscreenElement"])
  62. || (/** @type {?Element} */ doc["webkitFullscreenElement"])
  63. || (/** @type {?Element} */ doc["webkitCurrentFullScreenElement"])
  64. || (/** @type {?Element} */ doc["msFullscreenElement"])
  65. || (/** @type {?Element} */ doc["mozFullScreenElement"])
  66. || state;
  67. }
  68. // When state was specified then enter or exit fullscreen mode.
  69. if (state)
  70. {
  71. // Enter fullscreen
  72. func = (/** @type {?Function} */ e["requestFullscreen"])
  73. || (/** @type {?Function} */ e["webkitRequestFullscreen"])
  74. || (/** @type {?Function} */ e["webkitRequestFullScreen"])
  75. || (/** @type {?Function} */ e["msRequestFullscreen"])
  76. || (/** @type {?Function} */ e["mozRequestFullScreen"]);
  77. if (func)
  78. {
  79. func.call(e);
  80. }
  81. return this;
  82. }
  83. else
  84. {
  85. // Exit fullscreen
  86. func = (/** @type {?Function} */ doc["exitFullscreen"])
  87. || (/** @type {?Function} */ doc["webkitExitFullscreen"])
  88. || (/** @type {?Function} */ doc["webkitCancelFullScreen"])
  89. || (/** @type {?Function} */ doc["msExitFullscreen"])
  90. || (/** @type {?Function} */ doc["mozCancelFullScreen"]);
  91. if (func && fullScreenState(doc)) func.call(doc);
  92. return this;
  93. }
  94. }
  95. /**
  96. * Check fullscreen state
  97. *
  98. * @param {Document} doc The content document
  99. * @return {Boolean}
  100. */
  101. function fullScreenState(doc) {
  102. return !!(doc["fullscreenElement"] || doc["msFullscreenElement"] || doc["webkitIsFullScreen"] || doc["mozFullScreen"]);
  103. }
  104. /**
  105. * Toggles the fullscreen mode.
  106. *
  107. * @return {!jQuery}
  108. * The jQuery selection for chaining.
  109. * @this {jQuery}
  110. */
  111. function toggleFullScreen()
  112. {
  113. return (/** @type {!jQuery} */ fullScreen.call(this,
  114. !fullScreen.call(this)));
  115. }
  116. /**
  117. * Handles the browser-specific fullscreenchange event and triggers
  118. * a jquery event for it.
  119. *
  120. * @param {?Event} event
  121. * The fullscreenchange event.
  122. */
  123. function fullScreenChangeHandler(event)
  124. {
  125. jQuery(document).trigger(new jQuery.Event("fullscreenchange"));
  126. }
  127. /**
  128. * Handles the browser-specific fullscreenerror event and triggers
  129. * a jquery event for it.
  130. *
  131. * @param {?Event} event
  132. * The fullscreenerror event.
  133. */
  134. function fullScreenErrorHandler(event)
  135. {
  136. jQuery(document).trigger(new jQuery.Event("fullscreenerror"));
  137. }
  138. /**
  139. * Installs the fullscreenchange event handler.
  140. */
  141. function installFullScreenHandlers()
  142. {
  143. var e, change, error;
  144. // Determine event name
  145. e = document;
  146. if (e["webkitCancelFullScreen"])
  147. {
  148. change = "webkitfullscreenchange";
  149. error = "webkitfullscreenerror";
  150. }
  151. else if (e["msExitFullscreen"])
  152. {
  153. change = "MSFullscreenChange";
  154. error = "MSFullscreenError";
  155. }
  156. else if (e["mozCancelFullScreen"])
  157. {
  158. change = "mozfullscreenchange";
  159. error = "mozfullscreenerror";
  160. }
  161. else
  162. {
  163. change = "fullscreenchange";
  164. error = "fullscreenerror";
  165. }
  166. // Install the event handlers
  167. jQuery(document).bind(change, fullScreenChangeHandler);
  168. jQuery(document).bind(error, fullScreenErrorHandler);
  169. }
  170. jQuery.fn["fullScreen"] = fullScreen;
  171. jQuery.fn["toggleFullScreen"] = toggleFullScreen;
  172. installFullScreenHandlers();
  173. })(jQuery);