{ prevodi: null, zgledi: null, vecjez: null, xml: null, original: null, prevod_locations: [ 'pomen > vecjez', 'pomen > skladenjske_skupine > skladenjska_struktura > kolokacije > vecjez', 'pomen > stalne_zveze > stalna_zveza > vecjez', 'frazeoloske_zveze > frazeoloska_enota > vecjez' ], zgledi_locations: [ 'zgledi > vecjez', 'zgledi' ], empty_prevod: '', oznake: ["a", "b", "c", "iztok", "ozbo", "hhhh"], storeXml: function(xml) { this.xml = xml; this.prevodi = []; this.vecjez = []; this.zgledi = []; for(let fstring of this.prevod_locations) { for(let vecjez of xml.find(fstring)) { for(let pp of $(vecjez).find('pp')) { $(pp).prev().attr('semicolon', 'true'); } for(let lprevod of $(vecjez).find("prevod")) { var prevod = $(lprevod); if(prevod.text()) { 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); } this.vecjez.push($(vecjez)); } } for(let fstring of this.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(); } } } } }, loadDependencies: function(url) { this.loadJs("https://cdn.jsdelivr.net/npm/sweet-modal@1.3.2/dist/min/jquery.sweet-modal.min.js"); this.loadCss('https://cdn.jsdelivr.net/npm/sweet-modal@1.3.2/dist/min/jquery.sweet-modal.min.css'); }, loadCss: function(url) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = url; link.media = 'all'; $('head').append(link); }, loadJs: function(url) { var newscript = document.createElement('script'); newscript.type = 'text/javascript'; newscript.async = true; newscript.src = url; $('head').append(newscript); }, 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 self = this; self.show_modal(text_el.text(), razlaga_el.text(), function(status, text, razlaga) { if(status) { text_el.text(text); razlaga_el.text(razlaga); 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); 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.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); } }, 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('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); }); }); // 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 xslt_content = new window.DOMParser().parseFromString(this.xslt, "text/xml"); 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(xslt_content); 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(); var styleTag = document.createElement('style'); styleTag.type = 'text/css'; styleTag.appendChild(document.createTextNode(this.css)); document.head.appendChild(styleTag); this.clanekOldCode(); this.loadDependencies(); this.registerCallbacks(); // select nothing in all hamburger dropdowns $('.myed-clanek-select').prop("selectedIndex", -1); }, show_modal: function(prevedek, razlaga, callback) { function grabContent(status) { if(!callback) return; var prevedek_t = $('#myed-sm-prevedek').val(); var razlaga_t = $('#myed-sm-razlaga').val(); callback(status, prevedek_t, razlaga_t); }; var options = ""; for(let option of this.oznake) { options += ``; } $.sweetModal({ title: 'Spreminjanje Prevedka', content: ` Prevedek:

Razlaga:

Oznaka: