editor: Dialog improvements
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 28 Feb 2014 08:35:02 +0000 (09:35 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Fri, 28 Feb 2014 11:56:20 +0000 (12:56 +0100)
- close, cancel events
- adding text content
- handling empty fields list

src/editor/modules/data/dialog.html
src/editor/modules/data/dialog.js

index 9ac7888..97adf56 100644 (file)
@@ -7,6 +7,6 @@
     </div>
     <div class="modal-footer">
         <a href="#" class="btn btn-info btn-mini save-btn"><%= submitButtonText %></a>
-        <a href="#" class="btn btn-danger btn-mini cancel-btn"><%= gettext('Cancel') %></a>
+        <a href="#" class="btn btn-danger btn-mini cancel-btn"><%= cancelButtonText %></a>
     </div>
 </div>
\ No newline at end of file
index a2c56e2..c32738a 100644 (file)
@@ -1,5 +1,6 @@
 define(function(require) {
 
+    /* globals gettext */
     'use strict';
 
     var _ = require('libs/underscore'),
@@ -17,7 +18,7 @@ define(function(require) {
         template: _.template(dialogTemplate),
         events: {
             'click .save-btn': 'onSave',
-            'click .cancel-btn': 'close',
+            'click .cancel-btn': 'onCancel',
             'click .close': 'close'
         },
         initialize: function() {
@@ -25,10 +26,13 @@ define(function(require) {
             this.actionsDisabled = false;
         },
         show: function() {
-            this.setElement(this.template(this.options));
+            this.setElement(this.template(_.extend({
+                submitButtonText: gettext('Submit'),
+                cancelButtonText: gettext('Cancel')
+            }, this.options)));
 
             var body = this.$('.modal-body');
-            this.options.fields.forEach(function(field) {
+            (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));
@@ -38,6 +42,10 @@ define(function(require) {
                 );
             });
 
+            if(this.options.text) {
+                body.append('<p>' + this.options.text + '</p>');
+            }
+
             this.$el.modal({backdrop: 'static'});
             this.$el.modal('show');
             this.$('textarea').focus();
@@ -47,7 +55,7 @@ define(function(require) {
             var view = this,
                 formData = {};
 
-            this.options.fields.forEach(function(field) {
+            (this.options.fields || []).forEach(function(field) {
                 var widget = view.$('[name=' + field.name +']');
                 formData[field.name] = widget.val();
             });
@@ -58,6 +66,10 @@ define(function(require) {
                 error: function() { view.actionsDisabled = false; view.close(); },
             });
         },
+        onCancel: function() {
+            this.trigger('cancel');
+            this.close();
+        },
         close: function(e) {
             if(e) {
                 e.preventDefault();
@@ -66,6 +78,7 @@ define(function(require) {
                 this.$el.modal('hide');
                 this.$el.remove();
             }
+            this.trigger('close');
         },
         toggleButtons: function(toggle) {
             this.$('.btn, button').toggleClass('disabled', !toggle);