Skip to content

Instantly share code, notes, and snippets.

@tzi
Created March 4, 2012 00:44
Show Gist options
  • Save tzi/1969473 to your computer and use it in GitHub Desktop.
Save tzi/1969473 to your computer and use it in GitHub Desktop.
A #fun #javascript #bookmarklet : simulate crazy capslock
(function(){
// UTILS
var capslocked = function( event ) {
// UTILS
var key_handler = function( event ) {
// UTILS
var random_value = function( min, max ) {
return Math.floor( Math.random( ) * max + min );
}
var string_repeat = function( string, nb_repeat ) {
var str = string;
for ( var i=1; i<nb_repeat; i++ ) str += string;
return str;
}
var insert_string = function( textarea, string ) {
var text = textarea.value;
text = text.substring( 0, textarea.selectionStart ) + string + text.substring( textarea.selectionEnd );
var new_index = textarea.selectionStart + string.length;
textarea.value = text;
textarea.setSelectionRange( new_index, new_index );
return true;
}
var event_key = function( event ) {
return event.keyCode ? event.keyCode : event.charCode ? event.charCode : event.which;
}
// LOGIC
var key = event_key( event );
var char = String.fromCharCode( key );
if ( ! event.ctrlKey && ! event.altKey ) {
if ( key >= 65 && key <= 90 ) {
return insert_string( textarea, char );
}
if ( char == ' ' ) {
return insert_string( textarea, string_repeat( ' ', random_value( 1, 3) ) );
}
if ( key == 190 || key == 188 || key == 186 || key == 49 ) {
return insert_string( textarea, ' ' + string_repeat( '!', random_value( 2, 5) ) );
}
}
}
// LOGIC
var textarea = event.target;
var top = textarea.scrollTop; // for anti-scroll in firefox
var handled = key_handler( event );
if ( handled ) {
event.returnValue = false;
event.preventDefault();
textarea.scrollTop = top;
return false;
}
return true;
};
// LOGIC
var textareas = document.getElementsByTagName( 'textarea' );
for (var i=0; i<textareas.length; i++) {
textareas[ i ].onkeydown = capslocked;
}
var inputs = document.getElementsByTagName( 'input' );
for (var i=0; i<inputs.length; i++) {
inputs[ i ].onkeydown = capslocked;
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment