wip: Experimenting with new approach - dividing visualEditor module
[fnpeditor.git] / modules / metadataEditor / metadataEditor.js
diff --git a/modules/metadataEditor/metadataEditor.js b/modules/metadataEditor/metadataEditor.js
new file mode 100644 (file)
index 0000000..5c3e4fc
--- /dev/null
@@ -0,0 +1,90 @@
+define([\r
+'libs/jquery-1.9.1.min',\r
+'libs/underscore-min',\r
+'./transformations',\r
+'libs/text!./templates/main.html',\r
+'libs/text!./templates/item.html'\r
+], function($, _, transformations, mainTemplate, itemTemplate) {\r
+\r
+'use strict';\r
+\r
+return function(sandbox) {\r
+\r
+    \r
+    var view = {\r
+        node: $(_.template(mainTemplate)()),\r
+        setup: function() {\r
+            var metaTable = this.metaTable = this.node.find('table');\r
+            \r
+            this.node.find('.rng-module-metadataEditor-addBtn').click(function() {\r
+                var newRow = view._addMetaRow('', '');\r
+                $(newRow.find('td div')[0]).focus();\r
+                //isDirty = true;\r
+            });\r
+            \r
+            this.metaTable.on('click', '.rng-visualEditor-metaRemoveBtn', function(e) {\r
+                $(e.target).closest('tr').remove();\r
+                //isDirty = true;\r
+            });\r
+            \r
+            this.metaTable.on('keydown', '[contenteditable]', function(e) {\r
+                console.log(e.which);\r
+                if(e.which === 13) { \r
+                    if($(document.activeElement).hasClass('rng-module-metadataEditor-metaItemKey')) {\r
+                        metaTable.find('.rng-module-metadataEditor-metaItemValue').focus();\r
+                    } else {\r
+                        var input = $('<input>');\r
+                        input.appendTo('body').focus()\r
+                        view.node.find('.rng-module-metadataEditor-addBtn').focus();\r
+                        input.remove();\r
+                    }\r
+                    e.preventDefault();\r
+                }\r
+                \r
+            });\r
+        },\r
+        getMetaData: function() {\r
+            var toret = {};\r
+            this.node.find('tr').each(function() {\r
+                var tr = $(this);\r
+                var inputs = $(this).find('td [contenteditable]');\r
+                var key = $(inputs[0]).text();\r
+                var value = $(inputs[1]).text();\r
+                toret[key] = value;\r
+            });\r
+            return toret;\r
+        },\r
+        setMetadata: function(metadata) {\r
+            var view = this;\r
+            this.metaTable.find('tr').remove();\r
+            _.each(_.keys(metadata), function(key) {    \r
+                view._addMetaRow(key, metadata[key]);\r
+            });\r
+        },\r
+        _addMetaRow: function(key, value) {\r
+            var newRow = $(_.template(itemTemplate)({key: key || '', value: value || ''}));\r
+            newRow.appendTo(this.metaTable);\r
+            return newRow;\r
+        }\r
+    }\r
+    \r
+    view.setup();\r
+    \r
+    return {\r
+        start: function() {\r
+            sandbox.publish('ready');\r
+        },\r
+        setMetadata: function(xml) {\r
+            view.setMetadata(transformations.getMetadata(xml));\r
+        },\r
+        getMetadata: function() {\r
+            return view.getMetadata();\r
+        },\r
+        getView: function() {\r
+            return view.node;\r
+        }\r
+        \r
+    };\r
+}\r
+\r
+});
\ No newline at end of file