From 7a82b653869515bc561b0a59db327b3f2379cad2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Hanol?= <regis@hanol.fr>
Date: Wed, 22 Jan 2014 16:52:09 +0100
Subject: [PATCH] BUGFIX: restore Mousetrap's bindGlobal plugin

cleared deprecated warnings in admin_customize_view
---
 .../admin/views/admin_customize_view.js       | 38 +++++---------
 vendor/assets/javascripts/mousetrap.js        | 51 +++++++++++++++++++
 2 files changed, 64 insertions(+), 25 deletions(-)

diff --git a/app/assets/javascripts/admin/views/admin_customize_view.js b/app/assets/javascripts/admin/views/admin_customize_view.js
index 317612336..83fc6961e 100644
--- a/app/assets/javascripts/admin/views/admin_customize_view.js
+++ b/app/assets/javascripts/admin/views/admin_customize_view.js
@@ -11,42 +11,30 @@
 Discourse.AdminCustomizeView = Discourse.View.extend({
   templateName: 'admin/templates/customize',
   classNames: ['customize'],
-  headerActive: Ember.computed.equal('selected', 'header'),
-  stylesheetActive: Ember.computed.equal('selected', 'stylesheet'),
-  mobileHeaderActive: Ember.computed.equal('selected', 'mobileHeader'),
-  mobileStylesheetActive: Ember.computed.equal('selected', 'mobileStylesheet'),
+  selected: 'stylesheet',
+  headerActive:     Em.computed.equal('selected', 'header'),
+  stylesheetActive: Em.computed.equal('selected', 'stylesheet'),
+  mobileHeaderActive:     Em.computed.equal('selected', 'mobileHeader'),
+  mobileStylesheetActive: Em.computed.equal('selected', 'mobileStylesheet'),
 
-  init: function() {
-    this._super();
-    this.set('selected', 'stylesheet');
-  },
+  actions: {
+    selectHeader:     function() { this.set('selected', 'header'); },
+    selectStylesheet: function() { this.set('selected', 'stylesheet'); },
 
-  selectHeader: function() {
-    this.set('selected', 'header');
-  },
-
-  selectStylesheet: function() {
-    this.set('selected', 'stylesheet');
-  },
-
-  selectMobileHeader: function() {
-    this.set('selected', 'mobileHeader');
-  },
-
-  selectMobileStylesheet: function() {
-    this.set('selected', 'mobileStylesheet');
+    selectMobileHeader:     function() { this.set('selected', 'mobileHeader'); },
+    selectMobileStylesheet: function() { this.set('selected', 'mobileStylesheet'); },
   },
 
   didInsertElement: function() {
     var controller = this.get('controller');
-    return Mousetrap.bindGlobal(['meta+s', 'ctrl+s'], function() {
-      controller.save();
+    Mousetrap.bindGlobal('mod+s', function() {
+      controller.send("save");
       return false;
     });
   },
 
   willDestroyElement: function() {
-    return Mousetrap.unbindGlobal('meta+s', 'ctrl+s');
+    Mousetrap.unbindGlobal('mod+s');
   }
 
 });
diff --git a/vendor/assets/javascripts/mousetrap.js b/vendor/assets/javascripts/mousetrap.js
index 66f2d5b9c..108216bd7 100644
--- a/vendor/assets/javascripts/mousetrap.js
+++ b/vendor/assets/javascripts/mousetrap.js
@@ -951,3 +951,54 @@
         define(Mousetrap);
     }
 }) (window, document);
+
+/**
+ * adds a bindGlobal method to Mousetrap that allows you to
+ * bind specific keyboard shortcuts that will still work
+ * inside a text input field
+ *
+ * usage:
+ * Mousetrap.bindGlobal('ctrl+s', _saveChanges);
+ * Mousetrap.unbindGlobal('ctrl+s');
+ */
+/* global Mousetrap:true */
+Mousetrap = (function(Mousetrap) {
+    var _globalCallbacks = {},
+        _originalStopCallback = Mousetrap.stopCallback;
+
+    Mousetrap.stopCallback = function(e, element, combo, sequence) {
+        if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
+            return false;
+        }
+
+        return _originalStopCallback(e, element, combo);
+    };
+
+    Mousetrap.bindGlobal = function(keys, callback, action) {
+        Mousetrap.bind(keys, callback, action);
+
+        if (keys instanceof Array) {
+            for (var i = 0; i < keys.length; i++) {
+                _globalCallbacks[keys[i]] = true;
+            }
+            return;
+        }
+
+        _globalCallbacks[keys] = true;
+    };
+
+    Mousetrap.unbindGlobal = function(keys, action) {
+        Mousetrap.unbind(keys, action);
+
+        if (keys instanceof Array) {
+            for (var i = 0; i < keys.length; i++) {
+                _globalCallbacks[keys[i]] = false;
+            }
+            return;
+        }
+
+        _globalCallbacks[keys] = false;
+    };
+
+    return Mousetrap;
+}) (Mousetrap);