diff --git a/main.css b/main.css index dbf9a2c..8502441 100644 --- a/main.css +++ b/main.css @@ -2,6 +2,14 @@ font-size: 1em } +#myed-status { + border-bottom: 1px dotted #999999; + margin-bottom: 0.4em; + margin-top: 0.4em; + padding-bottom: 0.4em; + text-align: center; +} + #myed-freq-start { float: right; } @@ -49,6 +57,22 @@ display: block; } +.myed-indikator { + cursor: pointer; +} + +.myed-indikator:hover { + background-color: #eee; +} + +.myed-indikator:before { + content: " ("; +} + +.myed-indikator:after { + content: ") "; +} + .clanek { font-family: Verdana, sans-serif; font-size: 1rem; @@ -101,6 +125,14 @@ content: "("; } +.myed-prevod-razlaga[taksonomija='true'] { + color: grey; +} + +#myed-tax { + margin-bottom: 1em; +} + .myed-prevod-semicolon {} .myed-prevod-semicolon-hidden { display: none; @@ -119,12 +151,23 @@ } .myed-oznaka:not(:empty) { - color: #666666; - text-transform: uppercase; + color: #387434; + text-transform: lowercase; font-size: 0.85em; margin-right: 0.2em; } +.myed-oznaka-div select { + width: 15em; + margin-right: 1em; +} + +.myed-oznaka-key { + width: 5em; + display: inline-block; +} + + .clanek label:hover {box-shadow: 0px 0px 4px #666666;} .clanek label:active {box-shadow: 0px 0px 2px #666666;} .clanek label input {position: relative; top: 0.15em;} diff --git a/main.js b/main.js index d2db600..e9d9ebb 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,8 @@ { -prevodi: null, -zgledi: null, -vecjez: null, +prevodi: [], +zgledi: [], +vecjez: [], +indikatorji: [], xml: null, original: null, freq_start: null, @@ -10,36 +11,62 @@ prevod_locations: [ 'pomen > vecjez', 'pomen > skladenjske_skupine > skladenjska_struktura > kolokacije > vecjez', 'pomen > stalne_zveze > stalna_zveza > vecjez', - 'frazeoloske_zveze > frazeoloska_enota > vecjez' + 'skladenjske_zveze > skladenjska_zveza > vecjez', + 'frazeoloske_zveze > frazeoloska_enota > vecjez', + 'pomen > podpomen > skladenjske_skupine > skladenjska_struktura > kolokacije > vecjez' ], zgledi_locations: [ 'zgledi > vecjez', 'zgledi' ], -empty_prevod: '', -oznake: ["a", "b", "c", "iztok", "ozbo", "hhhh"], +oznake: OZNAKE_JSON, freq_stars_limits: [0, 552, 5206, 8613, 22561], +empty_prevod: function() { + var result = ''; + for(let oznaka_tip in this.oznake) { + result += ``; + } + result += ''; + return result; +}, storeXml: function(xml) { this.xml = xml; - this.prevodi = []; - this.vecjez = []; - this.zgledi = []; - + + for(let loznaka of xml.find("prevod > oznaka")) { + var oznaka = $(loznaka); + var tip = oznaka.attr('tip'); + if (!(tip in this.oznake)) { + oznaka.attr('tip', 'star'); + } + } + 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'); + $(pp).parent().attr('semicolon', 'true'); } for(let lprevod of $(vecjez).find("prevod")) { var prevod = $(lprevod); - if(prevod.text()) { + 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 this.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)); } @@ -61,11 +88,30 @@ storeXml: function(xml) { } } + 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)); + } + } }, loadDependencies: function(url) { this.loadJs("https://cdn.jsdelivr.net/npm/sweet-modal@1.3.2/dist/min/jquery.sweet-modal.min.js"); @@ -89,10 +135,13 @@ loadJs: function(url) { render_freq_start: function() { var element = $("#myed-freq-start"); var freq = element.attr("freq"); + element.text('FREKVENCA: ' + freq); + /* for(let f_lim of this.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'); @@ -145,12 +194,24 @@ bin: function(el) { 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.text(), function(status, text, razlaga) { + 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); @@ -159,7 +220,31 @@ change: function(el, func_after) { 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(); } @@ -180,7 +265,7 @@ add: function(el) { clone.insertBefore(el); var xml_container = this.vecjez[el.attr('line_num')]; - var new_child = $(this.empty_prevod, this.xml); + var new_child = $(this.empty_prevod(), this.xml); xml_container.append(new_child); this.prevodi.push(new_child); @@ -213,6 +298,11 @@ action: function(el, action) { 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]; @@ -249,6 +339,13 @@ registerCallbacks: function() { 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", @@ -278,7 +375,7 @@ registerCallbacks: function() { Screenful.Editor.changed(); }); }); - + // fixing modal stuff $('body').on('keydown', '.sweet-modal-prompt', function(e) { if(e.keyCode == 13) { @@ -351,7 +448,7 @@ editor: function(div, entry, uneditable) { // 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()); + $(this.empty_prevod(), xml).insertBefore(xml.find('prevod').first()); // adding prevod_id to prevodi this.storeXml(xml); @@ -380,25 +477,66 @@ editor: function(div, entry, uneditable) { // select nothing in all hamburger dropdowns $('.myed-clanek-select').prop("selectedIndex", -1); }, -show_modal: function(prevedek, razlaga, callback) { +oznaka_callback: function(el) { + var select = el.parent().find('select'); + var text = window.prompt("Nova oznaka"); + select.append($('`; + for(let [key, value] of Object.entries(this.oznake)) { + options += `
${key}
"; } + var tax = razlaga.attr('taksonomija') == "true" ? "checked" : ""; + var izbrisiStareOznake = ''; + $.sweetModal({ title: 'Spreminjanje Prevedka', content: ` Prevedek:

- Razlaga:

- Oznaka:
+
+ Oznake: ${ options }
${ izbrisiStareOznake }`, buttons: { save: { label: 'Shrani', @@ -411,7 +549,10 @@ show_modal: function(prevedek, razlaga, callback) { action: function() { grabContent(false); }, } }, - onOpen: function() { $('#myed-sm-prevedek').focus(); } + onOpen: function() { + $('#myed-sm-prevedek').focus(); + $('.myed-oznaka-input').on('click', function(e) { self.oznaka_callback($(this)); }); + } }); }, harvester: function(div) { @@ -421,17 +562,35 @@ harvester: function(div) { $(pp).remove(); } - for(let lprevod of $(vecjez).find("prevod")) { + var all_prevod = $(vecjez).find("prevod"); + // if only one prevod and that one is deleted, just create an empty one. + if(all_prevod.length == 1 && $(all_prevod[0]).attr('bin') == 'true') { + var empty = this.empty_prevod(); + all_prevod.append(empty); + $(all_prevod[0]).after(empty); + } + + for(let lprevod of all_prevod) { var prevod = $(lprevod); + if(prevod.attr('bin') == 'true') { + prevod.remove(); + continue; + } + if(prevod.attr('semicolon') == 'true') { prevod.append($("", this.xml)); } + + prevod.removeAttr('semicolon'); + prevod.removeAttr('bin'); } } } + + // save status + var status_txt = $('input[name=status]:checked', '#myed-status').val(); + this.xml.find('status').text(status_txt); - // console.log((new XMLSerializer()).serializeToString(this.xml[0])); - // return sessionStorage.myed_original; return (new XMLSerializer()).serializeToString(this.xml[0]); }, xslt: XSLFILE, diff --git a/main.xslt b/main.xslt index 828c2e7..cd11f6f 100644 --- a/main.xslt +++ b/main.xslt @@ -8,13 +8,64 @@ + +
+ + radio + status + A-HU + + + nepregledano + + radio + status + DESLO + + + v delu + + radio + status + PREHUN + + + za HUN redakcijo + + radio + status + PRISLO + + + za SLO dopolnitev + + radio + status + OUT + + + za izlocitev + + radio + status + Z + + + ZAKLJUCENO +
+
+
- +
+ + + + myed-freq-start @@ -92,33 +143,30 @@ - - - - - ( + + + + myed-indikator + - ) - - + - - - - - - + + + myed-oznaka + + + - - - ( + + + myed-prevod-razlaga + - ) - + - - + @@ -131,10 +179,10 @@ 1 - + - +