Browse Source

копировать ссылку

tags/4.1
parent
commit
7b8c17cd6b
6 changed files with 65 additions and 40 deletions
  1. +20
    -6
      3.1/общее/200.функции.js
  2. +1
    -1
      3.1/проигрыватель/700.Игра.js
  3. +22
    -22
      3.1/редактор/100.Редактор.js
  4. +20
    -9
      3.1/редактор/200.Пульт.js
  5. +1
    -1
      3.1/редактор/700.Муром.js
  6. +1
    -1
      index.html

+ 20
- 6
3.1/общее/200.функции.js View File

@@ -1,18 +1,20 @@
function вZ64(строка)
var мир = {};

мир.вZ64 = function(строка)
{ {
var байты = new TextEncoder("utf-8").encode(строка); var байты = new TextEncoder("utf-8").encode(строка);
var архив = pako.deflate(байты, { to: 'string' }); var архив = pako.deflate(байты, { to: 'string' });
return base64js.fromByteArray(архив); return base64js.fromByteArray(архив);
}
};


function изZ64(строка)
мир.изZ64 = function(строка)
{ {
var архив = base64js.toByteArray(строка); var архив = base64js.toByteArray(строка);
var байты = pako.inflate(архив); var байты = pako.inflate(архив);
return new TextDecoder("utf-8").decode(байты); return new TextDecoder("utf-8").decode(байты);
}
};


function uuid()
мир.uuid = function()
{ {
// https://stackoverflow.com/a/2117523 // https://stackoverflow.com/a/2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace( return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
@@ -23,4 +25,16 @@ function uuid()
return v.toString(16); return v.toString(16);
} }
); );
}
};

мир.назначитьКнопкамСобытия = function(события, список)
{
for (var номер in список)
{
const пара = список[номер];
var кнопка = document.getElementById(пара[0]);
кнопка.addEventListener("click", function(_) {
события.уведомить(пара[1]);
});
}
};

+ 1
- 1
3.1/проигрыватель/700.Игра.js View File

@@ -13,7 +13,7 @@ function Игра()
{ {
if (z64) if (z64)
{ {
var код = изZ64(z64);
var код = мир.изZ64(z64);
/**/console.debug("Игра.исполнитьКод:", код); /**/console.debug("Игра.исполнитьКод:", код);
} }
}; };


+ 22
- 22
3.1/редактор/100.Редактор.js View File

@@ -2,6 +2,7 @@ function Редактор(события, имяРедактора)
{ {
this.создать = function() this.создать = function()
{ {
this.первоначальныйЗаголовок = document.title;
this.установитьAce(); this.установитьAce();
this.улавливатьЗавершениеРедактирования(); this.улавливатьЗавершениеРедактирования();
this.пз = new ПараметрыЗапуска(); this.пз = new ПараметрыЗапуска();
@@ -14,7 +15,7 @@ function Редактор(события, имяРедактора)
var z64 = this.пз.параметры["z64"]; var z64 = this.пз.параметры["z64"];
if (z64) if (z64)
{ {
var код = изZ64(z64);
var код = мир.изZ64(z64);
this.ace.session.setValue(код); this.ace.session.setValue(код);
} }
}; };
@@ -22,10 +23,10 @@ function Редактор(события, имяРедактора)
this.исполнитьКод = function() this.исполнитьКод = function()
{ {
var содержимое = this.ace.session.getValue(); var содержимое = this.ace.session.getValue();
var z64 = вZ64(содержимое);
var z64 = мир.вZ64(содержимое);
var путь = window.location.pathname + "?z64=" + z64; var путь = window.location.pathname + "?z64=" + z64;
history.pushState(null, "", путь); 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("проигрыватель"); 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() this.улавливатьЗавершениеРедактирования = function()
{ {
var тут = this; var тут = this;
this.ace.session.on("change", function(дельта) { this.ace.session.on("change", function(дельта) {
const билет = uuid();
const билет = мир.uuid();
тут.билет = билет; тут.билет = билет;
setTimeout( setTimeout(
function() 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);
}; };


// Конструктор. // Конструктор.


+ 20
- 9
3.1/редактор/200.Пульт.js View File

@@ -1,16 +1,16 @@
function Пульт(события, имяОшибки, имяПуска)
function Пульт(события, имяОшибки, имяПерезапуска, имяОтдельно, имяСсылки)
{ {
this.создать = function() this.создать = function()
{ {
var ошибка = document.getElementById(имяОшибки); var ошибка = document.getElementById(имяОшибки);
/*
var версия = document.getElementById(имяПуска);
пуск.addEventListener("click", function(событие) {
console.debug("НАДО запустить");
});
*/
мир.назначитьКнопкамСобытия(
события,
[
[имяПерезапуска, "перезапустить"],
[имяОтдельно, "запустить отдельно"],
[имяСсылки, "скопировать ссылку"],
]
);
события.подписать(this); события.подписать(this);
}; };


@@ -24,6 +24,17 @@ console.debug("НАДО запустить");
{ {
this.показатьОшибку(true); this.показатьОшибку(true);
} }
else if (событие == "скопировать ссылку")
{
navigator.clipboard.writeText(window.location)
.then(() => {
UIkit.notification("Скопировали ссылку", { status: "success", timeout: 1000 });
})
.catch(err => {
UIkit.notification("Не удалось скопировать ссылку :(", { status: "danger", timeout: 5000 });
});
}

}; };






+ 1
- 1
3.1/редактор/700.Муром.js View File

@@ -4,7 +4,7 @@ function Муром()
{ {
this.события = new События(); this.события = new События();
this.редактор = new Редактор(this.события, "редактор"); this.редактор = new Редактор(this.события, "редактор");
this.пульт = new Пульт(this.события, "ошибка", "пуск");
this.пульт = new Пульт(this.события, "ошибка", "перезапустить", "отдельно", "ссылка");
}; };


// Конструктор. // Конструктор.


+ 1
- 1
index.html View File

@@ -1 +1 @@
3.0/редактор/index.html
3.1/редактор/index.html

Loading…
Cancel
Save