/*! * 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);