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);