var _code = {
prevodi: [],
zgledi: [],
vecjez: [],
indikatorji: [],
xml: null,
original: null,
freq_start: null,
empty_prevod: function() {
var result = '';
for(let oznaka_tip in constants.oznake) {
result += ``;
}
result += '';
return result;
},
storeXml: function(xml) {
this.xml = xml;
for(let loznaka of xml.find("prevod > oznaka")) {
var oznaka = $(loznaka);
var tip = oznaka.attr('tip');
if (!(tip in constants.oznake)) {
oznaka.attr('tip', 'star');
}
}
for(let fstring of constants.prevod_locations) {
for(let vecjez of xml.find(fstring)) {
for(let pp of $(vecjez).find('pp')) {
$(pp).parent().attr('semicolon', 'true');
}
for(let lprevod of $(vecjez).find("prevod")) {
var prevod = $(lprevod);
if(true) {
prevod.attr('prevod_id', this.prevodi.length);
this.prevodi.push(prevod);
}
prevod.attr('line_num', this.vecjez.length);
prevod.attr('semicolon', prevod.attr('semicolon') || false);
for(let oznaka_tip in constants.oznake) {
var old = prevod.find(`oznaka[tip="${ oznaka_tip }"]`);
if(!old.length) {
to_prepend = ``;
prevod.prepend($(to_prepend, xml));
}
}
if(prevod.find('rzg').length == 0) {
prevod.append($("", xml));
}
}
this.vecjez.push($(vecjez));
}
}
for(let fstring of constants.zgledi_locations) {
for(let zgledi of xml.find(fstring)) {
for(let lzgled of $(zgledi).find('zgled')) {
var zgled = $(lzgled);
zgled.attr('jezik', zgled.attr('ime_korpusa') == "hunTenTen12" ? "hun" : "slo");
zgled.attr('zgled_id', this.zgledi.length);
this.zgledi.push(zgled);
}
for(let lprevod of $(zgledi).find('prevod')) {
if(!$(lprevod).text().trim().length) {
$(lprevod).remove();
}
}
}
}
for(let lpomen of xml.find("pomen")) {
var pomen = $(lpomen);
var indikator = pomen.children(':first');
if(indikator.prop("tagName") != "indikator") {
indikator = $(``, xml)
pomen.prepend(indikator);
}
indikator.attr('indikator_id', this.indikatorji.length);
this.indikatorji.push(indikator);
}
var opomba = xml.find('glava > opomba');
if(!opomba.length) {
var zaglavje = xml.find('glava > zaglavje');
zaglavje.after($('', xml));
}
for(let lclanek of xml.find('clanek')) {
var clanek = $(lclanek);
if(!clanek.find('status').length) {
clanek.prepend($("A-HU", xml));
}
}
},
render_freq_start: function() {
var element = $("#myed-freq-start");
var freq = element.attr("freq");
element.text('FREKVENCA: ' + freq);
/*
for(let f_lim of constants.freq_stars_limits) {
var cls = (f_lim > freq) ? "s0" : "s1";
element.append($(`*`));
}
*/
},
isLast: function(el) {
return el.next().hasClass("myed-prevod-add") || el.next().hasClass('myed-prevod-bin');
},
isFirst: function(el) {
return !el.prev().hasClass('myed-prevod-div') || el.prev().is(':hidden');
},
moveLeft: function(el) {
if(!this.isFirst(el)) {
var xml_el = this.prevodi[el.attr('prevod_id')];
el.prev().before(el);
xml_el.prev().before(xml_el);
Screenful.Editor.changed();
}
},
moveRight: function(el) {
if(el.next().length && !this.isLast(el)) {
var xml_el = this.prevodi[el.attr('prevod_id')];
el.next().after(el);
xml_el.next().after(xml_el);
Screenful.Editor.changed();
}
},
cut: function(el) {
var xml_el = this.prevodi[el.attr('prevod_id')];
el.toggleClass('myed-prevod-cut');
xml_el.attr('cut', el.hasClass('myed-prevod-cut'));
// move to end if cutted
if(el.hasClass('myed-prevod-cut')) {
this.move_to_end(el);
}
Screenful.Editor.changed();
},
move_to_end: function(el) {
var xml_el = this.prevodi[el.attr('prevod_id')];
while(el.next().length && !this.isLast(el)) {
el.next().after(el);
xml_el.next().after(xml_el);
}
},
bin: function(el) {
el.toggleClass('myed-prevod-bin');
this.move_to_end(el);
this.prevodi[el.attr('prevod_id')].attr('bin', el.hasClass('myed-prevod-bin'));
Screenful.Editor.changed();
},
change: function(el, func_after) {
var text_el = el.find('.myed-prevod-text');
var razlaga_el = el.find('.myed-prevod-razlaga');
var oznake_el = el.find('.myed-oznaka').map(function() {
var result = $(this).text();
if(result.length)
return result;
});
var self = this;
self.show_modal(text_el.text(), razlaga_el, oznake_el, function(status, data) {
var text = data["prevedek"];
var razlaga = data['razlaga'];
var razlaga_tax = data['razlaga_tax'];
var deleteOld = data['remove_old'];
var oznake = data['oznake'];
if(status) {
text_el.text(text);
razlaga_el.text(razlaga);
razlaga_el.attr('taksonomija', razlaga_tax);
var xml_el = self.prevodi[el.attr('prevod_id')];
xml_el.find('tekst').text(text);
if(xml_el.find('rzg').length == 0) {
xml_el.append("", this.xml);
}
xml_el.find('rzg').text(razlaga);
xml_el.find('rzg').attr('taksonomija', razlaga_tax);
for (let oznaka of oznake) {
var tip = oznaka[0];
var value = oznaka[1];
// remove --
while(value.startsWith('-') || value.startsWith(' ')) {
value = value.substring(1, );
}
// write into xml
var oznaka_xml = xml_el.find(`oznaka[tip="${ tip }"]`);
oznaka_xml.text(value);
// write into html
var oznaka_html = el.find(`span[title="${ tip }"]`);
oznaka_html.text(value);
}
if(deleteOld) {
xml_el.find(`oznaka[tip="star"]`).text("");
el.find(`span[title="star"]`).text("");
}
Screenful.Editor.changed();
}
if(func_after) {
func_after(status);
}
el.focus();
});
},
add: function(el) {
var self = this;
var to_clone = $('.myed-prevod-div').first();
var clone = $('
' + to_clone.html() + "
");
clone.attr('tabindex', '1');
clone.attr('prevod_id', this.prevodi.length);
clone.find('.myed-clanek-select').prop("selectedIndex", -1);
clone.insertBefore(el);
var xml_container = this.vecjez[el.attr('line_num')];
var new_child = $(this.empty_prevod(), this.xml);
xml_container.append(new_child);
this.prevodi.push(new_child);
this.change(clone, function(result) { if(!result) { self.bin(clone); }});
},
semicolon: function(el) {
var scel = el.find('.myed-prevod-semicolon');
scel.toggleClass('myed-prevod-semicolon-hidden');
var xml_el = this.prevodi[el.attr('prevod_id')];
xml_el.attr('semicolon', !scel.hasClass('myed-prevod-semicolon-hidden'));
},
action: function(el, action) {
if(action == 'left') {
this.moveLeft(el);
}
else if(action == 'right') {
this.moveRight(el);
}
else if(action == "cut") {
this.cut(el);
}
else if(action == "bin") {
this.bin(el);
}
else if(action == "edit") {
this.change(el, null);
}
else if(action == "semicolon") {
this.semicolon(el);
}
},
indikatorEdit: function(el, val) {
this.indikatorji[$(el).attr('indikator_id')].text(val);
$(el).text(val);
Screenful.Editor.changed();
},
zgledPrevod: function(el, val) {
var zgled_id = el.attr('zgled_id');
var zgled = this.zgledi[zgled_id];
var new_el = $(`${ val }`);
el.parent().text(val);
el.remove();
zgled.after(new_el);
Screenful.Editor.changed();
},
registerCallbacks: function() {
var self = this;
var root = $(".clanek");
function get_prevod_div(element) {
while(element.parent().length) {
if(element.hasClass('myed-prevod-div')) {
return element;
}
element = element.parent();
}
return null;
}
root.on('change', '.myed-clanek-select', function(e) {
var el = get_prevod_div($(this));
var action = $(this).find(":selected").val();
self.action(el, action);
$(this).prop("selectedIndex", -1);
});
root.on('click', '.myed-prevod-add', function(e) {
self.add($(this));
});
root.on('click', '.myed-indikator', function() {
var el = $(this);
$.sweetModal.prompt('Indikator', 'Vstavi:', el.text(), function(val) {
self.indikatorEdit(el, val);
});
});
root.on('keydown', '.myed-prevod-div', function(e) {
var action = {
13: "edit",
37: "left",
39: "right",
46: "cut"
}[e.keyCode];
if(action) {
self.action($(this), action);
$(this).focus();
}
});
root.on('click', '.myed-zgled-prevod-btn', function(e) {
var el = $(this);
$.sweetModal.prompt('Prevod Zgleda', 'Vstavi:', '', function(val) {
self.zgledPrevod(el, val);
});
});
root.on('click', '#myed-opomba', function() {
var el = $(this);
$.sweetModal.prompt('Opomba', 'Opomba', el.text(), function(val) {
el.text(val);
self.xml.find('glava > opomba').text(val);
Screenful.Editor.changed();
});
});
// fixing modal stuff
$('body').on('keydown', '.sweet-modal-prompt', function(e) {
if(e.keyCode == 13) {
$('.greenB').first().trigger('click')
return false;
}
else if(e.keyCode == 27) {
$('.redB').first().trigger('click')
return false;
}
});
},
clanekOldCode: function() {
// script from original xslt, don't really wanna touch this!
var clanekShowHide = function(button) {
if(button.target.tagName !== "INPUT") {
// this actually triggers a few times, so...
return;
}
var clanek = $('.clanek');
var boolCollocations = clanek.find(".lblCollocations input").prop("checked");
var boolExamples = clanek.find(".lblExamples input").prop("checked");
if(boolExamples) {
clanek.find(".hiddenExample").slideDown();
}
else {
clanek.find(".hiddenExample").slideUp();
}
if(boolCollocations) {
clanek.find(".hiddenBlock").slideDown();
}
else {
clanek.find(".hiddenBlock").slideUp();
}
};
var clanek = $('.clanek');
var lblCollocations = clanek.find(".lblCollocations");
var lblExamples = clanek.find(".lblExamples");
lblExamples.hide();
lblCollocations.hide()
if(clanek.find(".hiddenBlock").length > 0) {
lblCollocations.show()
lblCollocations.first().on("click", clanekShowHide);
clanek.find(".buttons").show();
}
if(clanek.find("*:visible > .hiddenExample").length > 0) {
lblExamples.show()
lblExamples.first().on("click", clanekShowHide);
clanek.find(".buttons").show();
}
// this is actually new but belongs here
$(".lblPrevodi").first().on('click', function(e) {
if(e.target.tagName !== "INPUT") {
return;
}
$('.myed-zgled-prevod-btn').parent().toggle();
});
$('.myed-zgled-prevod-btn').parent().toggle();
},
editor: function(div, entry, uneditable) {
var xml = $($.parseXML(entry.content));
// for "dodajanje prevodov" we need a model div to copy.
// we create one here, that is then made invisible, but is
// available for copying
$(this.empty_prevod(), xml).insertBefore(xml.find('prevod').first());
// adding prevod_id to prevodi
this.storeXml(xml);
sessionStorage.myed_original = entry.content;
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(plugin_xslt);
resultDocument = xsltProcessor.transformToFragment(xml[0], document);
$(div).append(resultDocument);
// now I need to hide first prevod that was inserted into
// xml by this script, in order to be able to clone it
$('.myed-prevod-div').first().hide();
xml.find('prevod').first().remove();
this.render_freq_start();
this.clanekOldCode();
this.registerCallbacks();
// select nothing in all hamburger dropdowns
$('.myed-clanek-select').prop("selectedIndex", -1);
},
oznaka_callback: function(el) {
var select = el.parent().find('select');
var text = window.prompt("Nova oznaka");
select.append($('