editor - group node removing actions on a toolbar together
[fnpeditor.git] / src / editor / modules / data / saveDialog.js
index 90832e6..3aa17ec 100644 (file)
@@ -1,9 +1,17 @@
-define([
-'libs/text!./saveDialog.html',
-'libs/underscore',
-'libs/backbone',
-'libs/jquery'
-], 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),
@@ -16,25 +24,44 @@ define([
             _.bindAll(this);
             this.actionsDisabled = false;
         },
-        show: function() {           
+        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(); },
             });
         },
         close: function(e) {
-            if(e)
+            if(e) {
                 e.preventDefault();
+            }
             if(!this.actionsDisabled) {
                 this.$el.modal('hide');
                 this.$el.remove();
@@ -48,8 +75,8 @@ define([
     });
 
     return {
-        create: function() {
-            return new DialogView();
+        create: function(config) {
+            return new DialogView(config);
         }
     };