From 06e83c9e6a8eb3aa52c4ceb8a9d8013ac34681c2 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Thu, 6 Jun 2013 12:06:43 -0400
Subject: [PATCH] FIX: Hitting enter while the invite dialog is up should
 submit the form, not refresh the entire page :)

---
 .../discourse/controllers/invite_controller.js         |  2 ++
 .../discourse/controllers/invite_private_controller.js |  3 +++
 .../discourse/templates/modal/invite.js.handlebars     |  6 ++----
 .../templates/modal/invite_private.js.handlebars       |  6 ++----
 .../discourse/views/modal/invite_private_view.js       | 10 ++++------
 .../javascripts/discourse/views/modal/invite_view.js   | 10 ++++------
 .../discourse/views/modal/modal_body_view.js           |  2 +-
 7 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/app/assets/javascripts/discourse/controllers/invite_controller.js b/app/assets/javascripts/discourse/controllers/invite_controller.js
index 6f5a87cad..3eea5785d 100644
--- a/app/assets/javascripts/discourse/controllers/invite_controller.js
+++ b/app/assets/javascripts/discourse/controllers/invite_controller.js
@@ -26,6 +26,8 @@ Discourse.InviteController = Discourse.ObjectController.extend(Discourse.ModalFu
   }.property('email'),
 
   createInvite: function() {
+    if (this.get('disabled')) return;
+
     var inviteController = this;
     this.set('saving', true);
     this.set('error', false);
diff --git a/app/assets/javascripts/discourse/controllers/invite_private_controller.js b/app/assets/javascripts/discourse/controllers/invite_private_controller.js
index 7e5e0f60a..61fac5b72 100644
--- a/app/assets/javascripts/discourse/controllers/invite_private_controller.js
+++ b/app/assets/javascripts/discourse/controllers/invite_private_controller.js
@@ -20,6 +20,9 @@ Discourse.InvitePrivateController = Discourse.ObjectController.extend(Discourse.
   }.property('saving'),
 
   invite: function() {
+
+    if (this.get('disabled')) return;
+
     var invitePrivateController = this;
     this.set('saving', true);
     this.set('error', false);
diff --git a/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars b/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars
index e64b1d59e..b26089d98 100644
--- a/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/modal/invite.js.handlebars
@@ -9,10 +9,8 @@
   {{#if finished}}
     {{{successMessage}}}
   {{else}}
-    <form>
-      <label>{{i18n topic.invite_reply.email}}</label>
-      {{textField value=email placeholderKey="topic.invite_reply.email_placeholder"}}
-    </form>
+    <label>{{i18n topic.invite_reply.email}}</label>
+    {{textField value=email placeholderKey="topic.invite_reply.email_placeholder"}}
   {{/if}}
 </div>
 <div class="modal-footer">
diff --git a/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars b/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars
index 1f073c693..4f6b5df10 100644
--- a/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars
+++ b/app/assets/javascripts/discourse/templates/modal/invite_private.js.handlebars
@@ -9,10 +9,8 @@
   {{#if finished}}
     {{i18n topic.invite_private.success}}
   {{else}}
-    <form>
-      <label>{{i18n topic.invite_private.email_or_username}}</label>
-      {{textField value=emailOrUsername placeholderKey="topic.invite_private.email_or_username_placeholder"}}
-    </form>
+    <label>{{i18n topic.invite_private.email_or_username}}</label>
+    {{textField value=emailOrUsername placeholderKey="topic.invite_private.email_or_username_placeholder"}}
   {{/if}}
 </div>
 <div class="modal-footer">
diff --git a/app/assets/javascripts/discourse/views/modal/invite_private_view.js b/app/assets/javascripts/discourse/views/modal/invite_private_view.js
index da59ac861..312c7ae05 100644
--- a/app/assets/javascripts/discourse/views/modal/invite_private_view.js
+++ b/app/assets/javascripts/discourse/views/modal/invite_private_view.js
@@ -10,12 +10,10 @@ Discourse.InvitePrivateView = Discourse.ModalBodyView.extend({
   templateName: 'modal/invite_private',
   title: Em.String.i18n('topic.invite_private.title'),
 
-  didInsertElement: function() {
-    this._super();
-    var invitePrivateModalView = this;
-    Em.run.schedule('afterRender', function() {
-      invitePrivateModalView.$('input').focus();
-    });
+  keyUp: function(e) {
+    // Add the invitee if they hit enter
+    if (e.keyCode === 13) { this.get('controller').invite(); }
+    return false;
   }
 
 });
diff --git a/app/assets/javascripts/discourse/views/modal/invite_view.js b/app/assets/javascripts/discourse/views/modal/invite_view.js
index 3c1bbf4bd..472a330ba 100644
--- a/app/assets/javascripts/discourse/views/modal/invite_view.js
+++ b/app/assets/javascripts/discourse/views/modal/invite_view.js
@@ -10,13 +10,11 @@ Discourse.InviteView = Discourse.ModalBodyView.extend({
   templateName: 'modal/invite',
   title: Em.String.i18n('topic.invite_reply.title'),
 
-  didInsertElement: function() {
-    this._super();
 
-    var inviteModalView = this;
-    Em.run.schedule('afterRender', function() {
-      inviteModalView.$('input').focus();
-    });
+  keyUp: function(e) {
+    // Add the invitee if they hit enter
+    if (e.keyCode === 13) { this.get('controller').createInvite(); }
+    return false;
   }
 
 });
diff --git a/app/assets/javascripts/discourse/views/modal/modal_body_view.js b/app/assets/javascripts/discourse/views/modal/modal_body_view.js
index 065ee3b37..41a2789de 100644
--- a/app/assets/javascripts/discourse/views/modal/modal_body_view.js
+++ b/app/assets/javascripts/discourse/views/modal/modal_body_view.js
@@ -15,7 +15,7 @@ Discourse.ModalBodyView = Discourse.View.extend({
 
     var modalBodyView = this;
     Em.run.schedule('afterRender', function() {
-      modalBodyView.$('form input:first').focus();
+      modalBodyView.$('input:first').focus();
     });
 
     var title = this.get('title');