From f8dfb5772407898329418480670950566f2c3281 Mon Sep 17 00:00:00 2001 From: Marcin Koziej Date: Fri, 14 Dec 2012 10:09:42 +0100 Subject: [PATCH] Edit attributes in wysiwyg editor --- redakcja/static/css/html.css | 16 ++++++- .../static/js/wiki/view_editor_wysiwyg.js | 47 ++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/redakcja/static/css/html.css b/redakcja/static/css/html.css index 1818467a..b5737f87 100644 --- a/redakcja/static/css/html.css +++ b/redakcja/static/css/html.css @@ -618,7 +618,7 @@ div[x-node] > .uwaga { } .html-editarea textarea { - position: absolute; +/* position: absolute; -- might be unnecessary, and we need attributes to be pushed down*/ top: 0; margin: 0px; padding: 0px; @@ -630,6 +630,20 @@ div[x-node] > .uwaga { /* background-color: ivory;*/ } +.html-editarea .html-editarea-attributes span { + border: 1px dotted black; + padding: 2px; + margin: 2px; +} + +.html-editarea .html-editarea-attributes span label { + background-color: white; + padding: 5px; + min-width: 150px; + display: inline-block; + font-family: mono; +} + .htmlview .out-of-flow-text { display: block; font-face: monospace; diff --git a/redakcja/static/js/wiki/view_editor_wysiwyg.js b/redakcja/static/js/wiki/view_editor_wysiwyg.js index 23abde02..7c0bb0e0 100644 --- a/redakcja/static/js/wiki/view_editor_wysiwyg.js +++ b/redakcja/static/js/wiki/view_editor_wysiwyg.js @@ -348,6 +348,33 @@ txtarea.scrollTop = scrollPos; } + function getXNodeAttributes(node) { + var m = {} + $.map(node.attributes, function(attrNode) { + if (attrNode.nodeName.startsWith('data-wlf-')) { + var n = attrNode.nodeName.substr(9); + var v = attrNode.nodeValue; + m[n] = v; + }; + }); + return m; + } + + function setXNodeAttributes(node, attrs) { + $.map(node.attributes, function(attrNode) { + var xName = attrNode.nodeName.substr(9); + if (attrNode.nodeName.startsWith('data-wlf-') + && xName in attrs) { + attrNode.nodeValue = attrs[xName]; + } + if (attrNode.nodeName.startsWith('x-attr-name-') + && attrNode.nodeValue in attrs) { + node.setAttribute('x-attr-value-' + attrNode.nodeName.substr("x-attr-name-".length), + attrs[attrNode.nodeValue]); + } + }); + } + /* open edition window for selected fragment */ function openForEdit($origin){ var $box = null @@ -376,7 +403,17 @@ } // start edition on this node - var $overlay = $('
').css({ + var $overlay = $('
'); + + $attributes = $('
') + + $.map(getXNodeAttributes($origin.get(0)), + function(v, n) { + $attributes.append(''); + }); + $overlay.append($attributes); + + $overlay.css({ position: 'absolute', height: h, left: x, @@ -459,6 +496,14 @@ else { $origin.html($(element).html()); } + /* Set attributres back to the node */ + var attrs = {}; + $(".html-editarea-attributes [name]") + .each(function(i, textField) { + attrs[textField.name] = textField.value; + }); + setXNodeAttributes($origin.get(0), attrs); + $overlay.remove(); }, error: function(text){ -- 2.20.1