FEATURE: on iPad bluetooth keyboard use ALT-ENTER for post submit

FEATURE: on iPad bluetooth keyboard use ALT-ENTER for post submit

Command and Control can not be properly detected via JavaScript so lean on Alt that can be detected.

diff --git a/app/assets/javascripts/discourse/controllers/preferences/interface.js.es6 b/app/assets/javascripts/discourse/controllers/preferences/interface.js.es6
index 16f1c8b..3b9d6e6 100644
--- a/app/assets/javascripts/discourse/controllers/preferences/interface.js.es6
+++ b/app/assets/javascripts/discourse/controllers/preferences/interface.js.es6
@@ -10,7 +10,7 @@ import {
   setLocalTheme
 } from "discourse/lib/theme-selector";
 import { popupAjaxError } from "discourse/lib/ajax-error";
-import { safariHacksDisabled } from "discourse/lib/utilities";
+import { safariHacksDisabled, isiPad } from "discourse/lib/utilities";
 
 const USER_HOMES = {
   1: "latest",
@@ -49,10 +49,7 @@ export default Ember.Controller.extend(PreferencesTabController, {
 
   @computed()
   isiPad() {
-    return (
-      navigator.userAgent.match(/iPad/g) &&
-      !navigator.userAgent.match(/Trident/g)
-    );
+    return isiPad();
   },
 
   @computed()
diff --git a/app/assets/javascripts/discourse/lib/utilities.js.es6 b/app/assets/javascripts/discourse/lib/utilities.js.es6
index 23e0248..60fbf6d 100644
--- a/app/assets/javascripts/discourse/lib/utilities.js.es6
+++ b/app/assets/javascripts/discourse/lib/utilities.js.es6
@@ -550,6 +550,17 @@ export function isAppleDevice() {
   );
 }
 
+let iPadDetected = undefined;
+
+export function isiPad() {
+  if (iPadDetected === undefined) {
+    iPadDetected =
+      navigator.userAgent.match(/iPad/g) &&
+      !navigator.userAgent.match(/Trident/g);
+  }
+  return iPadDetected;
+}
+
 export function safariHacksDisabled() {
   let pref = localStorage.getItem("safari-hacks-disabled");
   let result = false;
diff --git a/app/assets/javascripts/discourse/mixins/key-enter-escape.js.es6 b/app/assets/javascripts/discourse/mixins/key-enter-escape.js.es6
index 8019870..d3949f9 100644
--- a/app/assets/javascripts/discourse/mixins/key-enter-escape.js.es6
+++ b/app/assets/javascripts/discourse/mixins/key-enter-escape.js.es6
@@ -1,11 +1,19 @@
+import { isiPad } from "discourse/lib/utilities";
+
 // A mixin where hitting ESC calls `cancelled` and ctrl+enter calls `save.
 export default {
   keyDown(e) {
     if (e.which === 27) {
       this.cancelled();
       return false;
-    } else if (e.which === 13 && (e.ctrlKey || e.metaKey)) {
+    } else if (
+      e.which === 13 &&
+      (e.ctrlKey || e.metaKey || (isiPad() && e.altKey))
+    ) {
       // CTRL+ENTER or CMD+ENTER
+      //
+      // iPad physical keyboard does not offer Command or Control detection
+      // so use ALT-ENTER
       this.save();
       return false;
     }

GitHub sha: 06abecdb