Files
MYPOM/3.0/редактор/100.редактор.js
2021-09-02 14:48:21 +03:00

138 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function Редактор(события, имяОбласти)
{
this.создать = function()
{
this.установитьAce();
this.улавливатьЗавершениеРедактирования();
события.подписать(this);
};
this.обработатьСобытие = function(событие)
{
if (событие == "завершили редактирование")
{
this.проверитьКорректностьКода();
}
else if (событие == "код корректен")
{
this.преобразоватьВZ64();
}
};
this.преобразоватьВZ64 = function()
{
var содержимое = this.ace.session.getValue();
var в = this.в64(содержимое);
var из = this.из64(в);
/**/console.debug("ИГР в/из", в, из);
/**/console.debug("ИГР-01 содержимое:", содержимое);
var байты1 = new TextEncoder("utf-8").encode(содержимое);
/**/console.debug("ИГР-02 байты1:", байты1);
var архив1 = pako.deflate(байты1, { to: 'string' });
/**/console.debug("ИГР-03 архив1:", архив1);
var z64 = base64js.fromByteArray(архив1);
/**/console.debug("ИГР-04 z64:", z64);
var архив2 = base64js.toByteArray(z64);
/**/console.debug("ИГР-05 архив2:", архив2);
var байты2 = pako.inflate(архив2);
/**/console.debug("ИГР-06 байты2:", байты2);
var текст = new TextDecoder("utf-8").decode(байты2);
/**/console.debug("ИГР-07 текст", текст);
};
this.установитьAce = function()
{
var область = document.getElementById(имяОбласти);
this.ace = window.ace.edit(имяОбласти);
this.ace.session.setMode("ace/mode/javascript");
}
this.улавливатьЗавершениеРедактирования = function()
{
var тут = this;
this.ace.session.on("change", function(дельта) {
const билет = тут.uuid();
тут.билет = билет;
setTimeout(
function()
{
if (билет == тут.билет)
{
события.уведомить("завершили редактирование");
}
},
1000
);
});
};
this.проверитьКорректностьКода = function()
{
try
{
eval(this.ace.session.getValue());
события.уведомить("код корректен");
}
catch (ошибка)
{
события.уведомить("код некорректен");
}
};
this.в64 = function(строка)
{
var байты = new TextEncoder("utf-8").encode(строка);
return base64js.fromByteArray(байты);
};
this.из64 = function(шифр)
{
var байты = base64js.toByteArray(шифр);
return new TextDecoder("utf-8").decode(байты);
};
/*
this.вZ64 = function(строка)
{
var байты = new TextEncoder("utf-8").encode(строка);
var архив = pako.deflate(байты, { to: 'string' });
var ret = this.в64(архив);
return ret
};
this.изZ64 = function(шифр)
{
//var архив = this.из64(шифр);
var архив = base64js.toByteArray(шифр);
var байты = null;
try {
байты = pako.inflate(архив);
} catch (err) {
console.error(err);
}
var ret = new TextDecoder("utf-8").decode(байты);
return ret;
};
*/
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.создать();
}