integration wip: saving document
[fnpeditor.git] / src / editor / modules / data / saveDialog.js
index e1f49b4..3aa17ec 100644 (file)
@@ -1,11 +1,18 @@
-define([
-'libs/text!./saveDialog.html',
-'libs/underscore',
-'libs/backbone'
-], function(saveDialogTemplate, _, Backbone) {
+define(function(require) {
 
     'use strict';
 
+    var _ = require('libs/underscore'),
+        Backbone = require('libs/backbone'),
+        saveDialogTemplate = require('libs/text!./saveDialog.html'),
+        fieldTemplates = {};
+        fieldTemplates.checkbox = require('libs/text!./templates/checkbox.html');
+        fieldTemplates.select = require('libs/text!./templates/select.html');
+        fieldTemplates.textarea = require('libs/text!./templates/textarea.html');
+        fieldTemplates.input = require('libs/text!./templates/input.html');
+
+
+
     var DialogView = Backbone.View.extend({
         template: _.template(saveDialogTemplate),
         events: {
@@ -19,16 +26,34 @@ define([
         },
         show: function() {
             this.setElement(this.template());
+
+            var body = this.$('.modal-body');
+            this.options.fields.forEach(function(field) {
+                var template = fieldTemplates[field.type];
+                if(!template) {
+                    throw new Error('Field type {type} not recognized.'.replace('{type}', field.type));
+                }
+                body.append(
+                    _.template(template)(_.extend({description: ''}, field))
+                );
+            });
+
             this.$el.modal({backdrop: 'static'});
             this.$el.modal('show');
             this.$('textarea').focus();
-
         },
         onSave: function(e) {
             e.preventDefault();
-            var view = this;
+            var view = this,
+                formData = {};
+
+            this.options.fields.forEach(function(field) {
+                var widget = view.$('[name=' + field.name +']');
+                formData[field.name] = widget.val();
+            });
+
             this.trigger('save', {
-                data: {description: view.$el.find('textarea').val()},
+                formData: formData,
                 success: function() { view.actionsDisabled = false; view.close(); },
                 error: function() { view.actionsDisabled = false; view.close(); },
             });
@@ -50,8 +75,8 @@ define([
     });
 
     return {
-        create: function() {
-            return new DialogView();
+        create: function(config) {
+            return new DialogView(config);
         }
     };