X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/360d9d37f72b1c6e2edb83c3a0218e55578134f3..cb900d10b9d0d42b0b6aa035be45dcbaa2f61af6:/src/redakcja/static/js/wiki/view_properties.js?ds=inline diff --git a/src/redakcja/static/js/wiki/view_properties.js b/src/redakcja/static/js/wiki/view_properties.js index 1fff64fe..35d00690 100644 --- a/src/redakcja/static/js/wiki/view_properties.js +++ b/src/redakcja/static/js/wiki/view_properties.js @@ -2,12 +2,13 @@ let w = function() {}; w = console.log; - + const elementDefs = { "ilustr": { "attributes": [ { "name": "src", + "type": "media", }, { "name": "alt", @@ -37,334 +38,380 @@ } }; - function PropertiesPerspective(options) { - let oldCallback = options.callback || function() {}; - this.vsplitbar = 'WŁAŚCIWOŚCI'; + class PropertiesPerspective extends $.wiki.SidebarPerspective { + constructor(options) { + let oldCallback = options.callback || function() {}; - options.callback = function() { - let self = this; + options.callback = function() { + let self = this; - self.$pane = $("#side-properties"); - - $("#simple-editor").on('click', '[x-node]', function(e) { - if (!e.redakcja_edited) { - e.redakcja_edited = true; - self.edit(this); - } - }); + self.vsplitbar = 'WŁAŚCIWOŚCI'; + self.$pane = $("#side-properties"); - self.$pane.on('click', '#parents li', function(e) { - self.edit($(this).data('node')); - }); + $("#simple-editor").on('click', '[x-node]', function(e) { + if (!e.redakcja_edited) { + e.redakcja_edited = true; + self.edit(this); + } + }); - $(document).on('click', '#bubbles .badge', function(e) { - self.edit($(this).data('node')); - }); + self.$pane.on('click', '#parents li', function(e) { + self.edit($(this).data('node')); + }); - self.$pane.on('change', '.form-control', function() { - let $input = $(this); + $(document).on('click', '#bubbles .badge', function(e) { + self.edit($(this).data('node')); + }); - let inputval; - if ($input.attr('type') == 'checkbox') { - inputval = $input.is(':checked'); - } else { - inputval = $input.val(); - } - - if ($input.data("edited")) { - if ($input.data("edited-attr")) { - $input.data("edited").attr($input.data("edited-attr"), inputval); + self.$pane.on('change', '.form-control', function() { + let $input = $(this); + + let inputval; + if ($input.attr('type') == 'checkbox') { + inputval = $input.is(':checked'); } else { - $input.data("edited").text(inputval); + inputval = $input.val(); } - return; - } - - html2text({ - element: self.$edited[0], - success: function(xml) { - w(222) - let $xmlelem = $($.parseXML(xml)); - w(333, $xmlelem) - w($input.data('property'), $input.val()); - $xmlelem.contents().attr($input.data('property'), inputval); - w(444, $xmlelem) - let newxml = (new XMLSerializer()).serializeToString($xmlelem[0]); - w(555, newxml) - xml2html({ - xml: newxml, - base: self.doc.getBase(), - success: function(html) { - let htmlElem = $(html); - self.$edited.replaceWith(htmlElem); - self.edit(htmlElem); - } - }); - }, - error: function(e) {console.log(e);}, + + if ($input.data("edited")) { + if ($input.data("edited-attr")) { + $input.data("edited").attr($input.data("edited-attr"), inputval); + } else { + $input.data("edited").text(inputval); + } + return; + } + + html2text({ + element: self.$edited[0], + success: function(xml) { + w(222) + let $xmlelem = $($.parseXML(xml)); + w(333, $xmlelem) + w($input.data('property'), $input.val()); + $xmlelem.contents().attr($input.data('property'), inputval); + w(444, $xmlelem) + let newxml = (new XMLSerializer()).serializeToString($xmlelem[0]); + w(555, newxml) + xml2html({ + xml: newxml, + base: self.doc.getBase(), + success: function(html) { + let htmlElem = $(html); + self.$edited.replaceWith(htmlElem); + self.edit(htmlElem); + } + }); + }, + error: function(e) {console.log(e);}, + }); + self.$edited; }); - self.$edited; - }); - - self.$pane.on('click', '.meta-add', function() { - // create a metadata item - let $fg = $(this).parent(); - let ns = $fg.data('ns'); - let tag = $fg.data('tag'); - let field = $fg.data('field'); - let span = $(''); - span.attr('x-node', tag); - span.attr('x-ns', ns) - if (field.value_type.hasLanguage) { - span.attr('x-a-xml-lang', 'pl'); - } - rdf = $("> [x-node='RDF']", self.$edited); - if (!rdf.length) { - rdf = $(""); - self.$edited.prepend(rdf); - self.$edited.prepend('\n '); - - } - rdfdesc = $("> [x-node='Description']", rdf); - if (!rdfdesc.length) { - rdfdesc = $(""); - rdf.prepend(rdfdesc); - rdf.prepend('\n '); + self.$pane.on('click', '.meta-add', function() { + // create a metadata item + let $fg = $(this).parent(); + let ns = $fg.data('ns'); + let tag = $fg.data('tag'); + let field = $fg.data('field'); + let span = $(''); + span.attr('x-node', tag); + span.attr('x-ns', ns) + if (field.value_type.hasLanguage) { + span.attr('x-a-xml-lang', 'pl'); + } + + let rdf = $("> [x-node='RDF']", self.$edited); + if (!rdf.length) { + rdf = $(""); + self.$edited.prepend(rdf); + self.$edited.prepend('\n '); + + } + let rdfdesc = $("> [x-node='Description']", rdf); + if (!rdfdesc.length) { + rdfdesc = $(""); + rdf.prepend(rdfdesc); + rdf.prepend('\n '); + rdfdesc.append('\n '); + rdf.append('\n '); + } + span.appendTo(rdfdesc); rdfdesc.append('\n '); - rdf.append('\n '); - } - span.appendTo(rdfdesc); - rdfdesc.append('\n '); - self.displayMetaProperty($fg); - - return false; - }); - - self.$pane.on('click', '.meta-delete', function() { - let $fg = $(this).closest('.form-group'); - $('input', $fg).data('edited').remove(); - self.displayMetaProperty($fg); - return false; - }); + self.displayMetaProperty($fg); + return false; + }); - - self.$pane.on('click', '.current-convert', function() { - self.convert($(this).attr('data-to')); - }); - self.$pane.on('click', '#current-delete', function() { - self.delete(); - }); - - - oldCallback.call(this); - }; + self.$pane.on('click', '.meta-delete', function() { + let $fg = $(this).closest('.form-group'); + $('input', $fg).data('edited').remove(); + self.displayMetaProperty($fg); + return false; + }); - $.wiki.SidebarPerspective.call(this, options); - } + $('#media-chooser').on('show.bs.modal', function (event) { + var input = $("input", $(event.relatedTarget).parent()); + var modal = $(this); + modal.data('target-input', input); + var imglist = modal.find('.modal-body'); + imglist.html(''); + $.each(self.doc.galleryImages, (i, imgItem) => { + img = $("").attr("src", imgItem.thumb).attr('title', imgItem.url).data('url', imgItem.url).on('click', function() { + imglist.find('img').removeClass('active'); + $(this).addClass('active'); + }); + imglist.append(img); + }); + }) + $('#media-chooser .ctrl-ok').on('click', function (event) { + $('#media-chooser').data('target-input') + .val( + (new URL($('#media-chooser .active').data('url'), document.baseURI)).href + ).trigger('change'); + $('#media-chooser').modal('hide'); + }); + + self.$pane.on('click', '.current-convert', function() { + self.convert($(this).attr('data-to')); + }); + self.$pane.on('click', '#current-delete', function() { + self.delete(); + }); - PropertiesPerspective.prototype = new $.wiki.SidebarPerspective(); + oldCallback.call(this); + }; - PropertiesPerspective.prototype.edit = function(element) { - let self = this; + super(options); + } - let $node = $(element); - $("#parents", self.$pane).empty(); - $("#bubbles").empty(); + edit(element) { + let self = this; - let b = $("
").text($node.attr('x-node')); - b.data('node', element); - $("#bubbles").append(b); + $("#parents", self.$pane).empty(); + $("#bubbles").empty(); - $node.parents('[x-node]').each(function() { - let a = $("
  • " ) + .append( "
    " + t + "
    " ) + .appendTo( ul ); + }; + } + } + $aninput.data('edited', $(element)) + $aninput.val( + $(element).text() ); - lang_input.appendTo(pp); - pp.appendTo(ig); + $aninput.appendTo(ig); + + let ap = $("
    "); + ap.appendTo(ig); + $("").appendTo(ap); + + // lang } - let $aninput; - if (field.value_type.widget == 'select') { - $aninput = $(""); - if (field.value_type.autocomplete) { - $aninput.autocomplete(field.value_type.autocomplete); + displayMetaProperty($fg) { + let self = this; + let ns = $fg.data('ns'); + let tag = $fg.data('tag'); + let field = $fg.data('field'); + + // clear container + $('.c', $fg).empty(); + + let selector = "> [x-node='RDF'] > [x-node='Description'] > [x-node='"+tag+"']"; + if (ns) { + selector += "[x-ns='"+ns+"']"; + } + $(selector, self.$edited).each(function() { + self.addMetaInput( + $('.c', $fg), + field, + this); + }); + + let count = $('.c > .input-group', $fg).length; + if (field.required) { + if (!count) { + $('
    WYMAGANE
    ').appendTo($('.c', $fg)); + } } } - $aninput.data('edited', $(element)) - $aninput.val( - $(element).text() - ); - $aninput.appendTo(ig); - - let ap = $("
    "); - ap.appendTo(ig); - $("").appendTo(ap); - - // lang - }; - - PropertiesPerspective.prototype.displayMetaProperty = function($fg) { - let self = this; - let ns = $fg.data('ns'); - let tag = $fg.data('tag'); - let field = $fg.data('field'); + addEditField(defn, value, elem) { + let self = this; + let $form = $("#properties-form", self.$pane); + + let $fg = $("
    "); + $("