From: Aleksander Ɓukasz Date: Fri, 17 Jan 2014 14:09:48 +0000 (+0100) Subject: editor: metadata wip - first approach X-Git-Url: https://git.mdrn.pl/fnpeditor.git/commitdiff_plain/83754888235eb240748983ec871475a69dfe7a42 editor: metadata wip - first approach --- diff --git a/src/editor/modules/metadataEditor/metadataEditor.js b/src/editor/modules/metadataEditor/metadataEditor.js index 623dee9..5530de9 100644 --- a/src/editor/modules/metadataEditor/metadataEditor.js +++ b/src/editor/modules/metadataEditor/metadataEditor.js @@ -10,6 +10,7 @@ define([ return function(sandbox) { + var currentNode; var view = { node: $(_.template(mainTemplate)()), @@ -20,12 +21,10 @@ return function(sandbox) { this.node.find('.rng-module-metadataEditor-addBtn').click(function() { var newRow = view._addMetaRow('', ''); $(newRow.find('td div')[0]).focus(); - sandbox.publish('metadataChanged', view.getMetadata()); }); this.metaTable.on('click', '.rng-visualEditor-metaRemoveBtn', function(e) { $(e.target).closest('tr').remove(); - sandbox.publish('metadataChanged', view.getMetadata()); }); this.metaTable.on('keydown', '[contenteditable]', function(e) { @@ -46,26 +45,32 @@ return function(sandbox) { var onKeyUp = function(e) { if(e.which !== 13) { - sandbox.publish('metadataChanged', view.getMetadata()); + var editable = $(e.target), + myIndex = metaTable.find('.'+editable.attr('class')).index(editable), + isKey = _.last(editable.attr('class').split('-')) === 'metaItemKey', + toSet = {}; + toSet[isKey ? 'key' : 'value'] = editable.text(); + currentNode.setMetadataRow(myIndex, toSet); } }; this.metaTable.on('keyup', '[contenteditable]', _.throttle(onKeyUp, 500)); }, getMetadata: function() { - var toret = {}; + var toret = []; this.node.find('tr').each(function() { var inputs = $(this).find('td [contenteditable]'); var key = $(inputs[0]).text(); var value = $(inputs[1]).text(); - toret[key] = value; + toret.push({key:key, value: value}); }); return toret; }, - setMetadata: function(metadata) { - var view = this; + setMetadata: function(node) { + var view = this, + metadata = node.getMetadata(); this.metaTable.find('tr').remove(); - _.each(_.keys(metadata), function(key) { - view._addMetaRow(key, metadata[key]); + metadata.forEach(function(row) { + view._addMetaRow(row.key, row.value); }); }, _addMetaRow: function(key, value) { @@ -81,9 +86,21 @@ return function(sandbox) { start: function() { sandbox.publish('ready'); }, - setDocument: function(xml) { - view.setMetadata(transformations.getMetadata(xml)); - sandbox.publish('metadataSet'); + setDocument: function(document) { + document.on('change', function(event) { + if(event.type === 'nodeMetadataChange' && event.meta.node.sameNode(currentNode)) { + view.setMetadata(currentNode); + } + }); +// view.setMetadata(transformations.getMetadata(xml)); + // sandbox.publish('metadataSet'); to wywalki + }, + setNodeElement: function(node) { + if(currentNode && currentNode.sameNode(node)) { + return; + } + currentNode = node; + view.setMetadata(node); }, getMetadata: function() { return transformations.getXML(view.getMetadata()); diff --git a/src/editor/modules/rng/rng.js b/src/editor/modules/rng/rng.js index fc97f99..665d3a9 100644 --- a/src/editor/modules/rng/rng.js +++ b/src/editor/modules/rng/rng.js @@ -43,6 +43,7 @@ return function(sandbox) { sandbox.getModule('nodeFamilyTree').setElement(nodeElement); sandbox.getModule('nodeBreadCrumbs').setNodeElement(nodeElement); sandbox.getModule('documentToolbar').setNodeElement(nodeElement); + sandbox.getModule('metadataEditor').setNodeElement(nodeElement); }, updateCurrentTextElement: function(textElement) { sandbox.getModule('nodeFamilyTree').setElement(textElement);