133 lines
3.8 KiB
JavaScript
Executable File
133 lines
3.8 KiB
JavaScript
Executable File
/*!
|
|
* jQuery capslockstate plugin v1.2.1
|
|
* https://github.com/nosilleg/capslockstate-jquery-plugin/
|
|
*
|
|
* Copyright 2012 Jason Ellison
|
|
* Released under the MIT license
|
|
* https://github.com/nosilleg/capslockstate-jquery-plugin/blob/master/MIT-LICENSE.txt
|
|
*
|
|
* Date: Sun Feb 3 2013 21:34:00 GMT
|
|
*/
|
|
(function($) {
|
|
|
|
var capsLockState = "unknown";
|
|
|
|
var methods = {
|
|
init : function(options) {
|
|
|
|
// Create some defaults, extending them with any options that were provided
|
|
var settings = $.extend({
|
|
// No defaults, because there are no options
|
|
}, options);
|
|
|
|
// Some systems will always return uppercase characters if Caps Lock is on.
|
|
var capsLockForcedUppercase = /MacPPC|MacIntel/.test(window.navigator.platform) === true;
|
|
|
|
var helpers = {
|
|
isCapslockOn : function(event) {
|
|
|
|
var shiftOn = false;
|
|
if (event.shiftKey) { // determines whether or not the shift key was held
|
|
shiftOn = event.shiftKey; // stores shiftOn as true or false
|
|
} else if (event.modifiers) { // determines whether or not shift, alt or ctrl were held
|
|
shiftOn = !!(event.modifiers & 4);
|
|
}
|
|
|
|
var keyString = String.fromCharCode(event.which); // logs which key was pressed
|
|
if (keyString.toUpperCase() === keyString.toLowerCase()) {
|
|
// We can't determine the state for these keys
|
|
} else if (keyString.toUpperCase() === keyString) {
|
|
if (capsLockForcedUppercase === true && shiftOn) {
|
|
// We can't determine the state for these keys
|
|
} else {
|
|
capsLockState = !shiftOn;
|
|
}
|
|
} else if (keyString.toLowerCase() === keyString) {
|
|
capsLockState = shiftOn;
|
|
}
|
|
|
|
return capsLockState;
|
|
|
|
},
|
|
|
|
isCapslockKey : function(event) {
|
|
|
|
var keyCode = event.which; // logs which key was pressed
|
|
if (keyCode === 20) {
|
|
if (capsLockState !== "unknown") {
|
|
capsLockState = !capsLockState;
|
|
}
|
|
}
|
|
|
|
return capsLockState;
|
|
|
|
},
|
|
|
|
hasStateChange : function(previousState, currentState) {
|
|
|
|
if (previousState !== currentState) {
|
|
$('body').trigger("capsChanged");
|
|
|
|
if (currentState === true) {
|
|
$('body').trigger("capsOn");
|
|
} else if (currentState === false) {
|
|
$('body').trigger("capsOff");
|
|
} else if (currentState === "unknown") {
|
|
$('body').trigger("capsUnknown");
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// Check all keys
|
|
$('body').bind("keypress.capslockstate", function(event) {
|
|
var previousState = capsLockState;
|
|
capsLockState = helpers.isCapslockOn(event);
|
|
helpers.hasStateChange(previousState, capsLockState);
|
|
});
|
|
|
|
// Check if key was Caps Lock key
|
|
$('body').bind("keydown.capslockstate", function(event) {
|
|
var previousState = capsLockState;
|
|
capsLockState = helpers.isCapslockKey(event);
|
|
helpers.hasStateChange(previousState, capsLockState);
|
|
});
|
|
|
|
// If the window loses focus then we no longer know the state
|
|
$(window).bind("focus.capslockstate", function() {
|
|
var previousState = capsLockState;
|
|
capsLockState = "unknown";
|
|
helpers.hasStateChange(previousState, capsLockState);
|
|
});
|
|
|
|
// Trigger events on initial load of plugin
|
|
helpers.hasStateChange(null, "unknown");
|
|
|
|
// Maintain chainability
|
|
return this.each(function() {});
|
|
|
|
},
|
|
state : function() {
|
|
return capsLockState;
|
|
},
|
|
destroy : function() {
|
|
return this.each(function() {
|
|
$('body').unbind('.capslockstate');
|
|
$(window).unbind('.capslockstate');
|
|
})
|
|
}
|
|
}
|
|
|
|
jQuery.fn.capslockstate = function(method) {
|
|
|
|
// Method calling logic
|
|
if (methods[method]) {
|
|
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
|
} else if (typeof method === 'object' || !method) {
|
|
return methods.init.apply(this, arguments);
|
|
} else {
|
|
$.error('Method ' + method + ' does not exist on jQuery.capslockstate');
|
|
}
|
|
|
|
};
|
|
})(jQuery); |