копировать ссылку
This commit is contained in:
@@ -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]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ function Игра()
|
|||||||
{
|
{
|
||||||
if (z64)
|
if (z64)
|
||||||
{
|
{
|
||||||
var код = изZ64(z64);
|
var код = мир.изZ64(z64);
|
||||||
/**/console.debug("Игра.исполнитьКод:", код);
|
/**/console.debug("Игра.исполнитьКод:", код);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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,34 +53,6 @@ function Редактор(события, имяРедактора)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.установитьAce = function()
|
|
||||||
{
|
|
||||||
var область = document.getElementById(имяРедактора);
|
|
||||||
this.ace = window.ace.edit(имяРедактора);
|
|
||||||
this.ace.session.setMode("ace/mode/javascript");
|
|
||||||
this.ace.session.setUseWrapMode(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.улавливатьЗавершениеРедактирования = function()
|
|
||||||
{
|
|
||||||
var тут = this;
|
|
||||||
this.ace.session.on("change", function(дельта) {
|
|
||||||
const билет = uuid();
|
|
||||||
тут.билет = билет;
|
|
||||||
setTimeout(
|
|
||||||
function()
|
|
||||||
{
|
|
||||||
if (билет == тут.билет)
|
|
||||||
{
|
|
||||||
события.уведомить("завершили редактирование");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
1000
|
|
||||||
);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
this.проверитьКорректностьКода = function()
|
this.проверитьКорректностьКода = function()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -93,6 +66,33 @@ function Редактор(события, имяРедактора)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.улавливатьЗавершениеРедактирования = function()
|
||||||
|
{
|
||||||
|
var тут = this;
|
||||||
|
this.ace.session.on("change", function(дельта) {
|
||||||
|
const билет = мир.uuid();
|
||||||
|
тут.билет = билет;
|
||||||
|
setTimeout(
|
||||||
|
function()
|
||||||
|
{
|
||||||
|
if (билет == тут.билет)
|
||||||
|
{
|
||||||
|
события.уведомить("завершили редактирование");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
300
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
this.установитьAce = function()
|
||||||
|
{
|
||||||
|
var область = document.getElementById(имяРедактора);
|
||||||
|
this.ace = window.ace.edit(имяРедактора);
|
||||||
|
this.ace.session.setMode("ace/mode/javascript");
|
||||||
|
this.ace.session.setUseWrapMode(true);
|
||||||
|
};
|
||||||
|
|
||||||
// Конструктор.
|
// Конструктор.
|
||||||
this.создать();
|
this.создать();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ function Муром()
|
|||||||
{
|
{
|
||||||
this.события = new События();
|
this.события = new События();
|
||||||
this.редактор = new Редактор(this.события, "редактор");
|
this.редактор = new Редактор(this.события, "редактор");
|
||||||
this.пульт = new Пульт(this.события, "ошибка", "пуск");
|
this.пульт = new Пульт(this.события, "ошибка", "перезапустить", "отдельно", "ссылка");
|
||||||
};
|
};
|
||||||
|
|
||||||
// Конструктор.
|
// Конструктор.
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.0/редактор/index.html
|
3.1/редактор/index.html
|
||||||
Reference in New Issue
Block a user