aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mousetrap/plugins/global-bind
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mousetrap/plugins/global-bind')
-rw-r--r--lib/mousetrap/plugins/global-bind/README.md15
-rw-r--r--lib/mousetrap/plugins/global-bind/mousetrap-global-bind.js43
-rw-r--r--lib/mousetrap/plugins/global-bind/mousetrap-global-bind.min.js1
3 files changed, 59 insertions, 0 deletions
diff --git a/lib/mousetrap/plugins/global-bind/README.md b/lib/mousetrap/plugins/global-bind/README.md
new file mode 100644
index 0000000..a37a219
--- /dev/null
+++ b/lib/mousetrap/plugins/global-bind/README.md
@@ -0,0 +1,15 @@
+# Global Bind
+
+This extension allows you to specify keyboard events that will work anywhere including inside textarea/input fields.
+
+Usage looks like:
+
+```javascript
+Mousetrap.bindGlobal('ctrl+s', function() {
+ _save();
+});
+```
+
+This means that a keyboard event bound using ``Mousetrap.bind`` will only work outside of form input fields, but using ``Moustrap.bindGlobal`` will work in both places.
+
+If you wanted to create keyboard shortcuts that only work when you are inside a specific textarea you can do that too by creating your own extension.
diff --git a/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.js b/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.js
new file mode 100644
index 0000000..1c4ac14
--- /dev/null
+++ b/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.js
@@ -0,0 +1,43 @@
+/**
+ * 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);
+ */
+/* global Mousetrap:true */
+(function(Mousetrap) {
+ var _globalCallbacks = {};
+ var _originalStopCallback = Mousetrap.prototype.stopCallback;
+
+ Mousetrap.prototype.stopCallback = function(e, element, combo, sequence) {
+ var self = this;
+
+ if (self.paused) {
+ return true;
+ }
+
+ if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
+ return false;
+ }
+
+ return _originalStopCallback.call(self, e, element, combo);
+ };
+
+ Mousetrap.prototype.bindGlobal = function(keys, callback, action) {
+ var self = this;
+ self.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.init();
+}) (Mousetrap);
diff --git a/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.min.js b/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.min.js
new file mode 100644
index 0000000..073ce67
--- /dev/null
+++ b/lib/mousetrap/plugins/global-bind/mousetrap-global-bind.min.js
@@ -0,0 +1 @@
+(function(a){var c={},d=a.prototype.stopCallback;a.prototype.stopCallback=function(e,b,a,f){return this.paused?!0:c[a]||c[f]?!1:d.call(this,e,b,a)};a.prototype.bindGlobal=function(a,b,d){this.bind(a,b,d);if(a instanceof Array)for(b=0;b<a.length;b++)c[a[b]]=!0;else c[a]=!0};a.init()})(Mousetrap);