From 0454747053c72fb51e0320266e2805b8bfc6d077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=BB=D0=B0=D0=B2=D1=80=D0=B5=D0=B4=20=7C=20Glavred?= Date: Mon, 28 Dec 2020 15:01:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=D1=82=20=D0=93=D0=BB=D0=B0=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=20=D0=93=D0=B8=D1=82=D0=96=D0=A1=20|=20Chang?= =?UTF-8?q?es=20of=20GitJS=20Glavred?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0000 | 1 + full-screen-helper.js | 331 ++++++++++++++++++++++++++++++++++++++++++ 🎬.js | 24 ++- 🎬.череда | 4 +- 4 files changed, 358 insertions(+), 2 deletions(-) create mode 100644 full-screen-helper.js diff --git a/0000 b/0000 index 3ec037f..7591791 100644 --- a/0000 +++ b/0000 @@ -2,6 +2,7 @@ 0.1.0 https://git.opengamestudio.org/kornerr/nPOBEPuTb-FullScreenHelper +/full-screen-helper.js x /🎬.js /🎬.череда /🏁.js diff --git a/full-screen-helper.js b/full-screen-helper.js new file mode 100644 index 0000000..7e90387 --- /dev/null +++ b/full-screen-helper.js @@ -0,0 +1,331 @@ +/* + * full-screen-helper.js 1.0.5 + * + * Copyright (c) 2020 Guilherme Nascimento (brcontainer@yahoo.com.br) + * + * Released under the MIT license + */ + +(function (u) { + "use strict"; + + var html, body, timer, + + w = typeof window !== 'undefined' ? window : {}, + d = w.document || {}, + $ = w.$ || {}, + + current = null, + + wsso, wssoc = false, escEvt = false, + useviewport = false, allowviewport = true, state = false, + + sc = !!d.exitFullscreen, + mozc = !!d.mozCancelFullScreen, + wkc = !!(d.webkitExitFullscreen || d.webkitCancelFullScreen), + wkco = !!d.webkitCancelFullScreen, + wkcn = !!d.webkitExitFullscreen, + msc = !!d.msExitFullscreen, + + reRoot = /(^|\s+)fsh-infullscreen($|\s+)/i, + reElement = /(^|\s+)full-screen-helper($|\s+)/i, + changeEvents = [], + events = [ + "webkitfullscreenchange", "mozfullscreenchange", + "fullscreenchange", "MSFullscreenChange" + ]; + + var realsupport = sc || mozc || wkc || msc; + + function change(callback, remove) { + if (typeof callback !== "function") return; + + if (!remove) { + changeEvents.push(callback); + return; + } + + if (!remove) { + changeEvents.push(callback); + return; + } + + var relist = []; + + for (var i = 0, j = changeEvents.length; i < j; i++) { + if (changeEvents[i] !== callback) relist.push(callback); + } + + changeEvents = relist; + relist = null; + } + + function isValid(obj) { + if (current) return false; + + if (obj === u || obj === d) return d.body; + + if (typeof obj === "string") return d.querySelector(obj); + + if (w.HTMLElement) { + if (!obj || !(obj instanceof w.HTMLElement && obj.ownerDocument === d)) return false; + } + + if (!obj || obj.nodeType !== 1 || obj.ownerDocument !== d) return false; + + return obj; + } + + function addEvt(obj, type, callback) { + if (obj.addEventListener) { + obj.addEventListener(type, callback); + } else { + obj.attachEvent("on" + type, callback); + } + } + + function isFS1() { + return getElements() && + (w.outerWidth || w.innerWidth || html.clientWidth) == w.screen.width; + } + + function isFS2() { + var element = d.fullscreenElement || d.mozFullScreenElement || + d.webkitFullscreenElement || d.msFullscreenElement; + + if (!element) return false; + + if (element !== current) current = element; + + return true; + } + + function getWSSO() { + if (wssoc) return wssoc; + + if (wsso === false || w.ActiveXObject === u) { + wsso = false; + } else if (wsso === u) { + try { + wsso = new w.ActiveXObject("WScript.Shell"); + wssoc = true; + + addEvt(w, "resize", resizeObserver); + } catch (ee) { + wsso = false; + } + } + + return wssoc; + } + + function escObserver(e) { + e = e || w.event; + + if ((e.wich || e.keyCode) == 27) exit(); + } + + function toggleClass() { + active(wssoc ? isFS1() : isFS2()); + } + + function resizeObserver(e) { + clearTimeout(timer); + timer = setTimeout(toggleClass, wssoc ? 100 : 10); + } + + function getElements() { + if (html) return true; + + body = d.body; + html = d.documentElement || (body && body.parentNode); + + return !!html; + } + + function fallbackRequest(element) { + if (!escEvt) { + escEvt = true; + + addEvt(d, "keydown", escObserver); + } + + if (getWSSO()) { + if (!isFS1()) { + current = element; + + active(true); + wsso.SendKeys("{F11}"); + } + + return; + } + + useviewport = allowviewport; + + if (useviewport) request(element); + } + + function active(enable) { + if (state === enable || !current) return; + + if (!getElements()) { + current = null; + return; + } + + if (enable) { + if (!reRoot.test(html.className)) html.className += " fsh-infullscreen"; + if (!reElement.test(current.className)) current.className += " full-screen-helper"; + } else { + html.className = html.className.replace(reRoot, " "); + current.className = current.className.replace(reElement, " "); + current = null; + } + + state = enable; + setTimeout(triggerEvents, 1); + } + + function triggerEvents() { + for (var i = 0; i < changeEvents.length; i++) changeEvents[i](); + } + + function supported() { + return realsupport || getWSSO(); + } + + function request(element) { + element = isValid(element); + + if (!element) return; + + if (sc) { + element.requestFullscreen(); + } else if (mozc) { + element.mozRequestFullScreen(); + } else if (wkc) { + element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } else if (msc) { + element.msRequestFullscreen(); + } else if (!useviewport) { + fallbackRequest(element); + return; + } + + current = element; + + active(true); + } + + function exit() { + if (!current) return; + + if (sc) { + d.exitFullscreen(); + } else if (mozc) { + d.mozCancelFullScreen(); + } else if (wkcn) { + d.webkitExitFullscreen(); + } else if (wkco) { + d.webkitCancelFullScreen(); + } else if (msc) { + d.msExitFullscreen(); + } else if (!useviewport) { + if (isFS1() && wssoc) { + active(false); + wsso.SendKeys("{F11}"); + } + return; + } + + active(false); + } + + function toggle(element) { + if (current === (element || d.body)) { + exit(); + } else { + request(element); + } + } + + if (realsupport) { + for (var i = events.length - 1; i >= 0; i--) addEvt(d, events[i], resizeObserver); + + addEvt(w, "resize", resizeObserver); + } + + var main = { + "supported": supported, + "request": request, + "toggle": toggle, + "exit": exit, + "current": function () { + return current; + }, + "state": function () { + return state; + }, + "viewport": function (enable) { + allowviewport = !!enable; + }, + "on": function (callback) { + change(callback); + }, + "off": function (callback) { + change(callback, true); + } + }; + + if ($ && $.extend && $.expr) { + $.fn.fullScreenHelper = function (action) { + var element = this[0]; + + if (!element) return; + + switch (action) { + case "toggle": + toggle(element); + break; + case "request": + case u: + request(element); + break; + } + }; + + $.fullScreenHelper = function (action) { + switch (action) { + case "exit": + exit(); + break; + case "supported": + return supported(); + break; + case "state": + return state; + } + }; + + $.expr[":"].fullscreen = function (element) { + return reElement.test(element.className); + }; + + if (!("onfullscreenchange" in d)) { + var $d = $(d); + + change(function () { + $d.trigger("fullscreenchange"); + }); + } + } + + w.FullScreenHelper = main; + + // CommonJS + if (typeof module !== "undefined" && module.exports) module.exports = main; + + // RequireJS + if (typeof define !== "undefined") define(function () { return main; }); +})(); diff --git a/🎬.js b/🎬.js index 6fec8bc..25dc954 100644 --- a/🎬.js +++ b/🎬.js @@ -1,4 +1,26 @@ +ИспользоватьFullScreenHelper = мир => +{ + document.body.innerHTML += ` + + + `; +}; + + +// // // // + + +ЗагрузитьFullScreenHelper = мир => +{ + var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ); + eval(м.содержимое["/full-screen-helper.js"]); +}; + + +// // // // + + ЗадатьЗаголовок = мир => { - document.title = "🚀 ПУСК"; + document.title = "🚀 Проверить Full Screen Helper"; }; \ No newline at end of file diff --git a/🎬.череда b/🎬.череда index ae51ae4..b3462f6 100644 --- a/🎬.череда +++ b/🎬.череда @@ -1,2 +1,4 @@ пуск - задать заголовок \ No newline at end of file + задать заголовок + загрузить FullScreenHelper + использовать FullScreenHelper \ No newline at end of file