Files
resourcespace/lib/js/jquery.capslockstate.js
2025-07-18 16:20:14 +07:00

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