Cellphone Keyboard

By Oscar's Friend Last update Aug 1, 2008 — Installed 238 times.

There are 9 previous versions of this script.

// ==UserScript==
// @name           Cellphone Keyboard
// @namespace      http://userscripts.org/scripts/show/30887
// @include        file://*
// @include        http://*
// @include        https://*
// ==/UserScript==

(function(){

var delay = 2000;
var lastkey = ['',1,-2];
var timer;

var cellkeys = [['0',' ','-'],
		['1','.','/',':','"'],
		['2','a','b','c'],
		['3','d','e','f'],
		['4','g','h','i'],
		['5','j','k','l'],
		['6','m','n','o'],
		['7','p','q','r','s'],
		['8','t','u','v'],
		['9','w','x','y','z']
		];
/*
function simulate_key(target, type, ctrlKey, altKey, shiftKey, keyCode, charCode) {
	var e = document.createEvent('KeyboardEvent');
	e.initKeyEvent(type, false, false, null, ctrlKey, altKey, shiftKey, false, keyCode, charCode);
	target.dispatchEvent(e);
}
*/

function cellinput(e) {
var text = this.value;
var curpos = this.selectionStart;
var match = false;

if (text.length > 0) {
	var key = text[curpos-1];

	clearTimeout(timer);

	for (var i = 0; i<10; i++) {
		if (key == cellkeys[i][0]) {
			if (key == lastkey[0]) {
				lastkey[0] = key;
				if (lastkey[1] >= cellkeys[i].length-1) {
					lastkey[1] = 0;
				} else {
					lastkey[1] = lastkey[1] + 1;
				}
				if (curpos == lastkey[2]+1) {
					if (curpos == 0) {
						lastkey = ['',1,curpos];
					} else if (curpos == 1) {
						lastkey = [key,1,curpos];
						text = text.substring(0,curpos-1) + cellkeys[i][lastkey[1]] + text.substring(curpos,text.length);
					} else {
						text = text.substring(0,curpos-2) + cellkeys[i][lastkey[1]] + text.substring(curpos,text.length);
						curpos = curpos - 1;
					}
				} else {
					lastkey = [key,1,curpos];
					text = text.substring(0,curpos-1) + cellkeys[i][lastkey[1]] + text.substring(curpos,text.length);
				}
			} else {
				if (curpos > 0) {
					lastkey = [key,1,curpos];
					text = text.substring(0,curpos-1) + cellkeys[i][lastkey[1]] + text.substring(curpos,text.length);
				}
			}
			timer = setTimeout(function(){lastkey = ['',1,curpos];}, delay);
			match = true;
		}
	}

	if (match == false) {
		lastkey = ['',1,curpos];
	}

	this.value = text;
	this.selectionStart = curpos;
	this.selectionEnd = curpos;
	this.focus();

//	simulate_key(inputs[0], 'keypress', false, false, false, null, 32);
//	simulate_key(inputs[0], 'keypress', false, false, false, 8, null);
}	
}

var inputs = document.getElementsByTagName('input');

for (var i = 0; i < inputs.length; i++) {
	inputs[i].addEventListener('input', cellinput, false);
}

var textareas = document.getElementsByTagName('textarea');

for (var i = 0; i < textareas.length; i++) {
	textareas[i].addEventListener('input', cellinput, false);
}

})();