You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2016/04/06 12:01:34 UTC

ambari git commit: AMBARI-15728. Modal dialogs no longer handle esc (alexantonenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk 598835003 -> c31a07770


AMBARI-15728. Modal dialogs no longer handle esc (alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c31a0777
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c31a0777
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c31a0777

Branch: refs/heads/trunk
Commit: c31a077708213c8288f92f1ab7aa1019bf4be7c1
Parents: 5988350
Author: Alex Antonenko <hi...@gmail.com>
Authored: Wed Apr 6 12:37:14 2016 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Wed Apr 6 13:01:30 2016 +0300

----------------------------------------------------------------------
 ambari-web/app/views/common/modal_popup.js      |   4 +-
 .../test/views/common/modal_popup_test.js       | 203 +++++++++++++++++++
 2 files changed, 205 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c31a0777/ambari-web/app/views/common/modal_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/modal_popup.js b/ambari-web/app/views/common/modal_popup.js
index f016fcf..571bf82 100644
--- a/ambari-web/app/views/common/modal_popup.js
+++ b/ambari-web/app/views/common/modal_popup.js
@@ -83,7 +83,7 @@ App.ModalPopup = Ember.View.extend({
     this.$().find('#modal').off('enter-key-pressed').off('escape-key-pressed');
   },
 
-  escapeKeyPressed: function() {
+  escapeKeyPressed: function (event) {
     var closeButton = this.$().find('.modal-header > .close').last();
     if (closeButton.length > 0) {
       event.preventDefault();
@@ -93,7 +93,7 @@ App.ModalPopup = Ember.View.extend({
     }
   },
 
-  enterKeyPressed: function() {
+  enterKeyPressed: function (event) {
     var primaryButton = this.$().find('.modal-footer > .btn-success').last();
     if ((!$("*:focus").is("textarea")) && primaryButton.length > 0 && primaryButton.attr('disabled') !== 'disabled') {
       event.preventDefault();

http://git-wip-us.apache.org/repos/asf/ambari/blob/c31a0777/ambari-web/test/views/common/modal_popup_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/common/modal_popup_test.js b/ambari-web/test/views/common/modal_popup_test.js
index ed58834..c4b0104 100644
--- a/ambari-web/test/views/common/modal_popup_test.js
+++ b/ambari-web/test/views/common/modal_popup_test.js
@@ -53,4 +53,207 @@ describe('App.ModalPopup', function() {
     });
   });
 
+  describe('#escapeKeyPressed', function () {
+
+    var returnedValue,
+      event = {
+        preventDefault: Em.K,
+        stopPropagation: Em.K
+      },
+      cases = [
+        {
+          buttons: [],
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'no close button'
+        },
+        {
+          buttons: [{}],
+          preventDefaultCallCount: 1,
+          stopPropagationCallCount: 1,
+          clickCallCount: 1,
+          returnedValue: false,
+          title: 'close button available'
+        }
+      ];
+
+    cases.forEach(function (item) {
+
+      describe(item.title, function () {
+
+        beforeEach(function () {
+          item.buttons.click = Em.K;
+          sinon.stub(popup, '$').returns({
+            find: function () {
+              return {
+                last: function () {
+                  return item.buttons;
+                }
+              }
+            }
+          });
+          sinon.spy(item.buttons, 'click');
+          sinon.spy(event, 'preventDefault');
+          sinon.spy(event, 'stopPropagation');
+          returnedValue = popup.escapeKeyPressed(event);
+        });
+
+        afterEach(function () {
+          popup.$.restore();
+          item.buttons.click.restore();
+          event.preventDefault.restore();
+          event.stopPropagation.restore();
+        });
+
+        it('prevent default behaviour', function () {
+          expect(event.preventDefault.callCount).to.equal(item.preventDefaultCallCount);
+        });
+
+        it('stop event propagation', function () {
+          expect(event.stopPropagation.callCount).to.equal(item.stopPropagationCallCount);
+        });
+
+        it('close button click', function () {
+          expect(item.buttons.click.callCount).to.equal(item.clickCallCount);
+        });
+
+        it('returned value', function () {
+          expect(returnedValue).to.equal(item.returnedValue);
+        });
+
+      });
+
+    });
+
+  });
+
+  describe('#enterKeyPressed', function () {
+
+    var returnedValue,
+      event = {
+        preventDefault: Em.K,
+        stopPropagation: Em.K
+      },
+      cases = [
+        {
+          buttons: [],
+          isTextArea: true,
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'focus on textarea, no primary button'
+        },
+        {
+          buttons: [],
+          isTextArea: false,
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'no focus on textarea, no primary button'
+        },
+        {
+          buttons: [{}],
+          isTextArea: true,
+          disabled: 'disabled',
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'focus on textarea, primary button disabled'
+        },
+        {
+          buttons: [{}],
+          isTextArea: false,
+          disabled: 'disabled',
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'no focus on textarea, primary button disabled'
+        },
+        {
+          buttons: [{}],
+          isTextArea: true,
+          disabled: '',
+          preventDefaultCallCount: 0,
+          stopPropagationCallCount: 0,
+          clickCallCount: 0,
+          returnedValue: undefined,
+          title: 'focus on textarea, primary button enabled'
+        },
+        {
+          buttons: [{}],
+          isTextArea: false,
+          disabled: '',
+          preventDefaultCallCount: 1,
+          stopPropagationCallCount: 1,
+          clickCallCount: 1,
+          returnedValue: false,
+          title: 'no focus on textarea, primary button enabled'
+        }
+      ];
+
+    cases.forEach(function (item) {
+
+      describe(item.title, function () {
+
+        beforeEach(function () {
+          item.buttons.click = Em.K;
+          item.buttons.attr = function () {
+            return item.disabled;
+          };
+          sinon.stub(popup, '$').returns({
+            find: function () {
+              return {
+                last: function () {
+                  return item.buttons;
+                }
+              }
+            }
+          });
+          sinon.stub(window, '$').withArgs('*:focus').returns({
+            is: function () {
+              return item.isTextArea
+            }
+          });
+          sinon.spy(item.buttons, 'click');
+          sinon.spy(event, 'preventDefault');
+          sinon.spy(event, 'stopPropagation');
+          returnedValue = popup.enterKeyPressed(event);
+        });
+
+        afterEach(function () {
+          popup.$.restore();
+          window.$.restore();
+          item.buttons.click.restore();
+          event.preventDefault.restore();
+          event.stopPropagation.restore();
+        });
+
+        it('prevent default behaviour', function () {
+          expect(event.preventDefault.callCount).to.equal(item.preventDefaultCallCount);
+        });
+
+        it('stop event propagation', function () {
+          expect(event.stopPropagation.callCount).to.equal(item.stopPropagationCallCount);
+        });
+
+        it('primary button click', function () {
+          expect(item.buttons.click.callCount).to.equal(item.clickCallCount);
+        });
+
+        it('returned value', function () {
+          expect(returnedValue).to.equal(item.returnedValue);
+        });
+
+      });
+
+    });
+
+  });
+
 });
\ No newline at end of file