X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/efe36f4f1b5df351eeb4d40a54c3900cf9a7079b..cafbf791aa805aa9cdd019ba4cbfd6b6ae881693:/src/editor/modules/data/saveDialog.js?ds=sidebyside diff --git a/src/editor/modules/data/saveDialog.js b/src/editor/modules/data/saveDialog.js index 90832e6..3aa17ec 100644 --- a/src/editor/modules/data/saveDialog.js +++ b/src/editor/modules/data/saveDialog.js @@ -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); } };