From 7b8c17cd6b09cc3d18edf7c3fd4a4abf4a31c3eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Thu, 9 Sep 2021 15:05:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.1/общее/200.функции.js | 26 ++++++++--- .../700.Игра.js | 2 +- 3.1/редактор/100.Редактор.js | 44 +++++++++---------- 3.1/редактор/200.Пульт.js | 29 ++++++++---- 3.1/редактор/700.Муром.js | 2 +- index.html | 2 +- 6 files changed, 65 insertions(+), 40 deletions(-) diff --git a/3.1/общее/200.функции.js b/3.1/общее/200.функции.js index 192d447..898e2d5 100644 --- a/3.1/общее/200.функции.js +++ b/3.1/общее/200.функции.js @@ -1,18 +1,20 @@ -function вZ64(строка) +var мир = {}; + +мир.вZ64 = function(строка) { var байты = new TextEncoder("utf-8").encode(строка); var архив = pako.deflate(байты, { to: 'string' }); return base64js.fromByteArray(архив); -} +}; -function изZ64(строка) +мир.изZ64 = function(строка) { var архив = base64js.toByteArray(строка); var байты = pako.inflate(архив); return new TextDecoder("utf-8").decode(байты); -} +}; -function uuid() +мир.uuid = function() { // https://stackoverflow.com/a/2117523 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace( @@ -23,4 +25,16 @@ function uuid() return v.toString(16); } ); -} +}; + +мир.назначитьКнопкамСобытия = function(события, список) +{ + for (var номер in список) + { + const пара = список[номер]; + var кнопка = document.getElementById(пара[0]); + кнопка.addEventListener("click", function(_) { + события.уведомить(пара[1]); + }); + } +}; diff --git a/3.1/проигрыватель/700.Игра.js b/3.1/проигрыватель/700.Игра.js index 149ef2a..403f7ab 100644 --- a/3.1/проигрыватель/700.Игра.js +++ b/3.1/проигрыватель/700.Игра.js @@ -13,7 +13,7 @@ function Игра() { if (z64) { - var код = изZ64(z64); + var код = мир.изZ64(z64); /**/console.debug("Игра.исполнитьКод:", код); } }; diff --git a/3.1/редактор/100.Редактор.js b/3.1/редактор/100.Редактор.js index 752affd..a00532a 100644 --- a/3.1/редактор/100.Редактор.js +++ b/3.1/редактор/100.Редактор.js @@ -2,6 +2,7 @@ function Редактор(события, имяРедактора) { this.создать = function() { + this.первоначальныйЗаголовок = document.title; this.установитьAce(); this.улавливатьЗавершениеРедактирования(); this.пз = new ПараметрыЗапуска(); @@ -14,7 +15,7 @@ function Редактор(события, имяРедактора) var z64 = this.пз.параметры["z64"]; if (z64) { - var код = изZ64(z64); + var код = мир.изZ64(z64); this.ace.session.setValue(код); } }; @@ -22,10 +23,10 @@ function Редактор(события, имяРедактора) this.исполнитьКод = function() { var содержимое = this.ace.session.getValue(); - var z64 = вZ64(содержимое); + var z64 = мир.вZ64(содержимое); var путь = window.location.pathname + "?z64=" + z64; history.pushState(null, "", путь); - document.title = `M-3.0 ${z64.length}:${z64.slice(z64.length - 5)}`; + document.title = `${this.первоначальныйЗаголовок} ${z64.length}:${z64.slice(z64.length - 5)}`; // Исполняем явно код лишь первый раз. var проигрыватель = document.getElementById("проигрыватель"); @@ -52,20 +53,24 @@ function Редактор(события, имяРедактора) } }; - - this.установитьAce = function() + this.проверитьКорректностьКода = function() { - var область = document.getElementById(имяРедактора); - this.ace = window.ace.edit(имяРедактора); - this.ace.session.setMode("ace/mode/javascript"); - this.ace.session.setUseWrapMode(true); - } + try + { + eval(this.ace.session.getValue()); + события.уведомить("код корректен"); + } + catch (ошибка) + { + события.уведомить("код некорректен"); + } + }; this.улавливатьЗавершениеРедактирования = function() { var тут = this; this.ace.session.on("change", function(дельта) { - const билет = uuid(); + const билет = мир.uuid(); тут.билет = билет; setTimeout( function() @@ -75,22 +80,17 @@ function Редактор(события, имяРедактора) события.уведомить("завершили редактирование"); } }, - 1000 + 300 ); }); }; - this.проверитьКорректностьКода = function() + this.установитьAce = function() { - try - { - eval(this.ace.session.getValue()); - события.уведомить("код корректен"); - } - catch (ошибка) - { - события.уведомить("код некорректен"); - } + var область = document.getElementById(имяРедактора); + this.ace = window.ace.edit(имяРедактора); + this.ace.session.setMode("ace/mode/javascript"); + this.ace.session.setUseWrapMode(true); }; // Конструктор. diff --git a/3.1/редактор/200.Пульт.js b/3.1/редактор/200.Пульт.js index ab68e69..1b6fdc8 100644 --- a/3.1/редактор/200.Пульт.js +++ b/3.1/редактор/200.Пульт.js @@ -1,16 +1,16 @@ -function Пульт(события, имяОшибки, имяПуска) +function Пульт(события, имяОшибки, имяПерезапуска, имяОтдельно, имяСсылки) { this.создать = function() { var ошибка = document.getElementById(имяОшибки); - - /* - var версия = document.getElementById(имяПуска); - пуск.addEventListener("click", function(событие) { -console.debug("НАДО запустить"); - }); - */ - + мир.назначитьКнопкамСобытия( + события, + [ + [имяПерезапуска, "перезапустить"], + [имяОтдельно, "запустить отдельно"], + [имяСсылки, "скопировать ссылку"], + ] + ); события.подписать(this); }; @@ -24,6 +24,17 @@ console.debug("НАДО запустить"); { this.показатьОшибку(true); } + else if (событие == "скопировать ссылку") + { + navigator.clipboard.writeText(window.location) + .then(() => { + UIkit.notification("Скопировали ссылку", { status: "success", timeout: 1000 }); + }) + .catch(err => { + UIkit.notification("Не удалось скопировать ссылку :(", { status: "danger", timeout: 5000 }); + }); + } + }; diff --git a/3.1/редактор/700.Муром.js b/3.1/редактор/700.Муром.js index 819c30e..e0ca4b0 100644 --- a/3.1/редактор/700.Муром.js +++ b/3.1/редактор/700.Муром.js @@ -4,7 +4,7 @@ function Муром() { this.события = new События(); this.редактор = new Редактор(this.события, "редактор"); - this.пульт = new Пульт(this.события, "ошибка", "пуск"); + this.пульт = new Пульт(this.события, "ошибка", "перезапустить", "отдельно", "ссылка"); }; // Конструктор. diff --git a/index.html b/index.html index 9a0e061..4c9946c 120000 --- a/index.html +++ b/index.html @@ -1 +1 @@ -3.0/редактор/index.html \ No newline at end of file +3.1/редактор/index.html \ No newline at end of file