проигрыватель

This commit is contained in:
kornerr committed 2021-09-06 15:25:20 +03:00
1 parent 3344af5fca
commit 18213f4df0
13 files changed
+291 -70

No files matched your search

+12 -61
View File
@@ -1,20 +1,20 @@
function Редактор(события, имяОбласти)
function Редактор(события, имяРедактора, имяВоспроизведения)
{
this.создать = function()
{
this.установитьAce();
this.улавливатьЗавершениеРедактирования();
this.разобратьПараметрыЗапуска();
this.пз = new ПараметрыЗапуска();
this.задатьКодПриЗапуске();
события.подписать(this);
};
this.задатьКодПриЗапуске = function()
{
var z64 = this.параметрыЗапуска["z64"];
var z64 = this.пз.параметры["z64"];
if (z64)
{
var код = this.изZ64(z64);
var код = изZ64(z64);
this.ace.session.setValue(код);
}
};
@@ -22,9 +22,13 @@ function Редактор(события, имяОбласти)
this.исполнитьКод = function()
{
var содержимое = this.ace.session.getValue();
var z64 = this.вZ64(содержимое);
var z64 = вZ64(содержимое);
var путь = window.location.pathname + "?z64=" + z64;
history.pushState(null, "", путь);
var воспроизведение = document.getElementById("воспроизведение");
var адрес = "../проигрыватель/index.html?z64=" + z64;
воспроизведение.src = адрес;
};
this.обработатьСобытие = function(событие)
@@ -39,37 +43,11 @@ function Редактор(события, имяОбласти)
}
};
this.разобратьПараметрыЗапуска = function()
{
this.параметрыЗапуска = {};
var запрос = window.location.search.substring(1);
var аргументы = запрос.split("&");
for (var номер in аргументы)
{
var арг = аргументы[номер];
var позицияЗнака = арг.indexOf("=");
// Лишь ключ.
if (позицияЗнака == -1)
{
var ключ = decodeURIComponent(арг);
this.параметрыЗапуска[ключ] = null;
}
// Ключ со значением.
else
{
var сыройКлюч = арг.slice(0, позицияЗнака);
var сыроеЗначение = арг.slice(позицияЗнака + 1);
var ключ = decodeURIComponent(сыройКлюч);
var значение = decodeURIComponent(сыроеЗначение);
this.параметрыЗапуска[ключ] = значение;
}
}
};
this.установитьAce = function()
{
var область = document.getElementById(имяОбласти);
this.ace = window.ace.edit(имяОбласти);
var область = document.getElementById(имяРедактора);
this.ace = window.ace.edit(имяРедактора);
this.ace.session.setMode("ace/mode/javascript");
this.ace.session.setUseWrapMode(true);
}
@@ -78,7 +56,7 @@ function Редактор(события, имяОбласти)
{
var тут = this;
this.ace.session.on("change", function(дельта) {
const билет = тут.uuid();
const билет = uuid();
тут.билет = билет;
setTimeout(
function()
@@ -106,33 +84,6 @@ function Редактор(события, имяОбласти)
}
};
this.вZ64 = function(строка)
{
var байты = new TextEncoder("utf-8").encode(строка);
var архив = pako.deflate(байты, { to: 'string' });
return base64js.fromByteArray(архив);
};
this.изZ64 = function(строка)
{
var архив = base64js.toByteArray(строка);
var байты = pako.inflate(архив);
return new TextDecoder("utf-8").decode(байты);
};
this.uuid = function()
{
// https://stackoverflow.com/a/2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
/[xy]/g,
function(c)
{
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}
);
};
// Конструктор.
this.создать();
}