screenfull.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. (function () {
  2. 'use strict';
  3. var isCommonjs = typeof module !== 'undefined' && module.exports;
  4. var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element;
  5. var fn = (function () {
  6. var val;
  7. var valLength;
  8. var fnMap = [
  9. [
  10. 'requestFullscreen',
  11. 'exitFullscreen',
  12. 'fullscreenElement',
  13. 'fullscreenEnabled',
  14. 'fullscreenchange',
  15. 'fullscreenerror'
  16. ],
  17. // new WebKit
  18. [
  19. 'webkitRequestFullscreen',
  20. 'webkitExitFullscreen',
  21. 'webkitFullscreenElement',
  22. 'webkitFullscreenEnabled',
  23. 'webkitfullscreenchange',
  24. 'webkitfullscreenerror'
  25. ],
  26. // old WebKit (Safari 5.1)
  27. [
  28. 'webkitRequestFullScreen',
  29. 'webkitCancelFullScreen',
  30. 'webkitCurrentFullScreenElement',
  31. 'webkitCancelFullScreen',
  32. 'webkitfullscreenchange',
  33. 'webkitfullscreenerror'
  34. ],
  35. [
  36. 'mozRequestFullScreen',
  37. 'mozCancelFullScreen',
  38. 'mozFullScreenElement',
  39. 'mozFullScreenEnabled',
  40. 'mozfullscreenchange',
  41. 'mozfullscreenerror'
  42. ],
  43. [
  44. 'msRequestFullscreen',
  45. 'msExitFullscreen',
  46. 'msFullscreenElement',
  47. 'msFullscreenEnabled',
  48. 'MSFullscreenChange',
  49. 'MSFullscreenError'
  50. ]
  51. ];
  52. var i = 0;
  53. var l = fnMap.length;
  54. var ret = {};
  55. for (; i < l; i++) {
  56. val = fnMap[i];
  57. if (val && val[1] in document) {
  58. for (i = 0, valLength = val.length; i < valLength; i++) {
  59. ret[fnMap[0][i]] = val[i];
  60. }
  61. return ret;
  62. }
  63. }
  64. return false;
  65. })();
  66. var screenfull = {
  67. request: function (elem) {
  68. var request = fn.requestFullscreen;
  69. elem = elem || document.documentElement;
  70. // Work around Safari 5.1 bug: reports support for
  71. // keyboard in fullscreen even though it doesn't.
  72. // Browser sniffing, since the alternative with
  73. // setTimeout is even worse.
  74. if (/5\.1[\.\d]* Safari/.test(navigator.userAgent)) {
  75. elem[request]();
  76. } else {
  77. elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
  78. }
  79. },
  80. exit: function () {
  81. document[fn.exitFullscreen]();
  82. },
  83. toggle: function (elem) {
  84. if (this.isFullscreen) {
  85. this.exit();
  86. } else {
  87. this.request(elem);
  88. }
  89. },
  90. raw: fn
  91. };
  92. if (!fn) {
  93. if (isCommonjs) {
  94. module.exports = false;
  95. } else {
  96. window.screenfull = false;
  97. }
  98. return;
  99. }
  100. Object.defineProperties(screenfull, {
  101. isFullscreen: {
  102. get: function () {
  103. return Boolean(document[fn.fullscreenElement]);
  104. }
  105. },
  106. element: {
  107. enumerable: true,
  108. get: function () {
  109. return document[fn.fullscreenElement];
  110. }
  111. },
  112. enabled: {
  113. enumerable: true,
  114. get: function () {
  115. // Coerce to boolean in case of old WebKit
  116. return Boolean(document[fn.fullscreenEnabled]);
  117. }
  118. }
  119. });
  120. if (isCommonjs) {
  121. module.exports = screenfull;
  122. } else {
  123. window.screenfull = screenfull;
  124. }
  125. })();