Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1310 → Rev 1311

/firefox/latrus/trunk/src/chrome/content/latrus.js
0,0 → 1,105
var latRusWorker = null;
var latRusEnabled = false;
 
var LatRus = {
init: function()
{
var appcontent = document.getElementById("appcontent");
if(appcontent) {
appcontent.addEventListener("DOMContentLoaded", LatRus.onPageLoad, true);
}
 
latRusWorker = new Worker();
LatRus.setEnabled(latRusEnabled); // update menu and panel
},
 
onPageLoad: function(aEvent)
{
if(aEvent.originalTarget.nodeName == "#document") {
aEvent.originalTarget.addEventListener('keypress', LatRus.onKeyPress, true);
}
},
 
onKeyPress: function(aEvent)
{
if(!latRusEnabled) return;
if(aEvent.ctrlKey || aEvent.altKey || aEvent.charCode == 0) return true;
if(aEvent.keyCode == 255) return; // our loop event
 
var newEvent = document.commandDispatcher.focusedWindow.document.createEvent("KeyEvents");
newEvent.initKeyEvent(aEvent.type, aEvent.bubbles, aEvent.cancelable, aEvent.view,
false, false, false, false, 255, latRusWorker.convertChar(aEvent.charCode));
aEvent.preventDefault();
aEvent.target.dispatchEvent(newEvent);
},
 
toggleEnabled: function()
{
LatRus.setEnabled(!latRusEnabled);
},
 
setEnabled: function(enabled)
{
latRusEnabled = enabled;
 
var item = document.getElementById("context-latrus-enabled");
if(item) {
item.setAttribute("checked", latRusEnabled);
}
 
var panel = document.getElementById("latrus-panel");
if(panel) {
panel.label = (latRusEnabled ? "RUS" : "LAT");
}
},
};
 
window.addEventListener('load', LatRus.init, false);
 
Worker.engTable = new Array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'\"', '\'', '§', '$', '&', '/', '(', ')', '=', '?', '`', '-',
'_', '#', '+', '*', ',', '.', 'ä', 'ö', 'ü', 'ß');
Worker.rusTable1 = new Array(
'а', 'б', 'ц', 'д', 'е', 'ф', 'г', 'х', 'и', 'й', 'к', 'л', 'м',
'н', 'о', 'п', 'ч', 'р', 'с', 'т', 'у', 'в', 'ш', 'ж', 'я', 'з',
'ъ', 'ь', '§', '$', '&', '/', '(', ')', '=', '?', '`', '-',
'_', '#', '+', '*', ',', '.', 'э', 'ы', 'ю', 'щ');
Worker.rusTable2 = new Array(
'ф', 'и', 'с', 'в', 'у', 'а', 'п', 'р', 'ш', 'о', 'л', 'д', 'ь',
'т', 'щ', 'з', 'й', 'к', 'ы', 'е', 'г', 'м', 'ц', 'ч', 'я', 'н',
'\"', '/', 'â„–', ';', ':', '?', '*', '(', ')', '_', '=', '.',
',', '\\', 'ъ', 'Ъ', 'б', 'ю');
 
function Worker()
{
this.convertTable = Worker.buildConvertTable(Worker.engTable, Worker.rusTable1, true);
}
 
Worker.buildConvertTable = function(fromTable, toTable, autoUpperCase)
{
var res = new Object();
 
for(var i = 0, l = Math.min(fromTable.length, toTable.length); i < l; ++i) {
res[fromTable[i].charCodeAt(0)] = toTable[i].charCodeAt(0);
if(autoUpperCase) {
if(fromTable[i].toUpperCase() != fromTable[i]) {
res[fromTable[i].toUpperCase().charCodeAt(0)] = toTable[i].toUpperCase().charCodeAt(0);
}
}
}
 
return res;
}
 
Worker.prototype.convertChar = function(c)
{
if(this.convertTable) {
var r = this.convertTable[c];
if(r != undefined) return r;
}
 
return c; // not found or no table
}