screenfull.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import "./chunk-Y2F7D3TJ.js";
  2. // F:/test/exam_exam/node_modules/screenfull/index.js
  3. var methodMap = [
  4. [
  5. "requestFullscreen",
  6. "exitFullscreen",
  7. "fullscreenElement",
  8. "fullscreenEnabled",
  9. "fullscreenchange",
  10. "fullscreenerror"
  11. ],
  12. // New WebKit
  13. [
  14. "webkitRequestFullscreen",
  15. "webkitExitFullscreen",
  16. "webkitFullscreenElement",
  17. "webkitFullscreenEnabled",
  18. "webkitfullscreenchange",
  19. "webkitfullscreenerror"
  20. ],
  21. // Old WebKit
  22. [
  23. "webkitRequestFullScreen",
  24. "webkitCancelFullScreen",
  25. "webkitCurrentFullScreenElement",
  26. "webkitCancelFullScreen",
  27. "webkitfullscreenchange",
  28. "webkitfullscreenerror"
  29. ],
  30. [
  31. "mozRequestFullScreen",
  32. "mozCancelFullScreen",
  33. "mozFullScreenElement",
  34. "mozFullScreenEnabled",
  35. "mozfullscreenchange",
  36. "mozfullscreenerror"
  37. ],
  38. [
  39. "msRequestFullscreen",
  40. "msExitFullscreen",
  41. "msFullscreenElement",
  42. "msFullscreenEnabled",
  43. "MSFullscreenChange",
  44. "MSFullscreenError"
  45. ]
  46. ];
  47. var nativeAPI = (() => {
  48. if (typeof document === "undefined") {
  49. return false;
  50. }
  51. const unprefixedMethods = methodMap[0];
  52. const returnValue = {};
  53. for (const methodList of methodMap) {
  54. const exitFullscreenMethod = methodList == null ? void 0 : methodList[1];
  55. if (exitFullscreenMethod in document) {
  56. for (const [index, method] of methodList.entries()) {
  57. returnValue[unprefixedMethods[index]] = method;
  58. }
  59. return returnValue;
  60. }
  61. }
  62. return false;
  63. })();
  64. var eventNameMap = {
  65. change: nativeAPI.fullscreenchange,
  66. error: nativeAPI.fullscreenerror
  67. };
  68. var screenfull = {
  69. // eslint-disable-next-line default-param-last
  70. request(element = document.documentElement, options) {
  71. return new Promise((resolve, reject) => {
  72. const onFullScreenEntered = () => {
  73. screenfull.off("change", onFullScreenEntered);
  74. resolve();
  75. };
  76. screenfull.on("change", onFullScreenEntered);
  77. const returnPromise = element[nativeAPI.requestFullscreen](options);
  78. if (returnPromise instanceof Promise) {
  79. returnPromise.then(onFullScreenEntered).catch(reject);
  80. }
  81. });
  82. },
  83. exit() {
  84. return new Promise((resolve, reject) => {
  85. if (!screenfull.isFullscreen) {
  86. resolve();
  87. return;
  88. }
  89. const onFullScreenExit = () => {
  90. screenfull.off("change", onFullScreenExit);
  91. resolve();
  92. };
  93. screenfull.on("change", onFullScreenExit);
  94. const returnPromise = document[nativeAPI.exitFullscreen]();
  95. if (returnPromise instanceof Promise) {
  96. returnPromise.then(onFullScreenExit).catch(reject);
  97. }
  98. });
  99. },
  100. toggle(element, options) {
  101. return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);
  102. },
  103. onchange(callback) {
  104. screenfull.on("change", callback);
  105. },
  106. onerror(callback) {
  107. screenfull.on("error", callback);
  108. },
  109. on(event, callback) {
  110. const eventName = eventNameMap[event];
  111. if (eventName) {
  112. document.addEventListener(eventName, callback, false);
  113. }
  114. },
  115. off(event, callback) {
  116. const eventName = eventNameMap[event];
  117. if (eventName) {
  118. document.removeEventListener(eventName, callback, false);
  119. }
  120. },
  121. raw: nativeAPI
  122. };
  123. Object.defineProperties(screenfull, {
  124. isFullscreen: {
  125. get: () => Boolean(document[nativeAPI.fullscreenElement])
  126. },
  127. element: {
  128. enumerable: true,
  129. get: () => document[nativeAPI.fullscreenElement] ?? void 0
  130. },
  131. isEnabled: {
  132. enumerable: true,
  133. // Coerce to boolean in case of old WebKit.
  134. get: () => Boolean(document[nativeAPI.fullscreenEnabled])
  135. }
  136. });
  137. if (!nativeAPI) {
  138. screenfull = { isEnabled: false };
  139. }
  140. var screenfull_default = screenfull;
  141. export {
  142. screenfull_default as default
  143. };
  144. //# sourceMappingURL=screenfull.js.map