1,24 → 1,25 |
var latRusWorker = null; |
var latRusEnabled = false; |
var latRusShowHint = true; |
var LatRus = { |
inited: false, |
worker: null, |
enabled: false, |
showHint: true, |
|
var LatRus = { |
init: function() |
{ |
latRusWorker = new Worker(); |
|
LatRus.worker = new LatRusWorker_Rus(); |
LatRus.setEnabled(false); |
inited = true; |
}, |
|
onKeyPress: function(aEvent) |
{ |
if(!latRusEnabled) return; |
if(!LatRus.enabled) return; |
if(aEvent.ctrlKey || aEvent.altKey || aEvent.charCode == 0) return true; |
if(aEvent.keyCode == 255) return; // our loop event |
|
var newEvent = aEvent.target.ownerDocument.createEvent("KeyEvents"); |
newEvent.initKeyEvent(aEvent.type, aEvent.bubbles, aEvent.cancelable, aEvent.view, |
false, false, false, false, 255, latRusWorker.convertCode(aEvent.charCode)); |
false, false, false, false, 255, LatRus.worker.convertCode(aEvent.charCode)); |
aEvent.preventDefault(); |
aEvent.originalTarget.dispatchEvent(newEvent); |
}, |
25,12 → 26,12 |
|
toggleEnabled: function() |
{ |
LatRus.setEnabled(!latRusEnabled); |
LatRus.setEnabled(!LatRus.enabled); |
}, |
|
setEnabled: function(enabled) |
{ |
latRusEnabled = enabled; |
LatRus.enabled = enabled; |
LatRus.updateEnabled(); |
}, |
|
38,12 → 39,12 |
{ |
var item = document.getElementById("context-latrus-enabled"); |
if(item) { |
item.setAttribute("checked", latRusEnabled); |
item.setAttribute("checked", LatRus.enabled); |
} |
|
var panel = document.getElementById("latrus-panel"); |
if(panel) { |
panel.label = (latRusEnabled ? "RUS" : "LAT"); |
panel.label = (LatRus.enabled ? "RUS" : "LAT"); |
} |
}, |
|
92,7 → 93,7 |
var selection = LatRus.getSelectedText(e); |
if(!selection) return; |
|
var res = latRusWorker[transformation].call(latRusWorker, selection); |
var res = LatRus.worker[transformation].call(LatRus.worker, selection); |
var start = e.selectionStart; |
var end = e.selectionEnd; |
var scrollTop = e.scrollTop; |
107,12 → 108,12 |
|
toggleHint: function() |
{ |
LatRus.setHint(!latRusShowHint); |
LatRus.setHint(!LatRus.ShowHint); |
}, |
|
setHint: function(showHint) |
{ |
latRusShowHint = showHint; |
LatRus.ShowHint = showHint; |
LatRus.updateHint(); |
}, |
|
120,17 → 121,17 |
{ |
var item = document.getElementById("panel-latrus-show-hint"); |
if(item) { |
item.setAttribute("checked", latRusShowHint); |
item.setAttribute("checked", LatRus.ShowHint); |
} |
|
var panel = document.getElementById("latrus_hint"); |
if(panel) { |
panel.hidden = !latRusShowHint; |
panel.hidden = !LatRus.ShowHint; |
} |
|
var splitter = document.getElementById("latrus_splitter"); |
if(splitter) { |
splitter.hidden = !latRusShowHint; |
splitter.hidden = !LatRus.ShowHint; |
} |
}, |
|
141,88 → 142,117 |
}; |
|
/* REGISTER */ |
if(!latRusWorker && !window.frameElement) { |
if(!LatRus.inited && !window.frameElement) { |
window.addEventListener('load', LatRus.init, false); |
window.addEventListener('keypress', LatRus.onKeyPress, true); |
} |
|
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() |
function LatRusWorker() |
{ |
this.convertCodes = new Object(); |
this.convertChars = new Object(); |
this.backCodes = new Object(); |
this.backChars = new Object(); |
|
Worker.buildConvertTable(Worker.engTable, Worker.rusTable1, true, this.convertCodes, this.convertChars); |
Worker.buildConvertTable(Worker.rusTable1, Worker.engTable, true, this.backCodes, this.backChars); |
this.init(); |
} |
LatRusWorker.prototype = { |
init: function() |
{ |
this.convertCodes = new Object(); |
this.convertChars = new Object(); |
this.backCodes = new Object(); |
this.backChars = new Object(); |
}, |
|
Worker.buildConvertTable = function(fromTable, toTable, autoUpperCase, resCodes, resChars) |
{ |
for(var i = 0, l = Math.min(fromTable.length, toTable.length); i < l; ++i) { |
resCodes[fromTable[i].charCodeAt(0)] = toTable[i].charCodeAt(0); |
resChars[fromTable[i].charAt(0)] = toTable[i].charAt(0); |
if(autoUpperCase) { |
var fromUpper = fromTable[i].toUpperCase() |
if(fromUpper != fromTable[i]) { |
var toUpper = toTable[i].toUpperCase(); |
buildConvertTable: function(fromTable, toTable, autoUpperCase, resCodes, resChars) |
{ |
for(var i = 0, l = Math.min(fromTable.length, toTable.length); i < l; ++i) { |
resCodes[fromTable[i].charCodeAt(0)] = toTable[i].charCodeAt(0); |
resChars[fromTable[i].charAt(0)] = toTable[i].charAt(0); |
if(autoUpperCase) { |
var fromUpper = fromTable[i].toUpperCase() |
if(fromUpper != fromTable[i]) { |
var toUpper = toTable[i].toUpperCase(); |
|
resCodes[fromUpper.charCodeAt(0)] = toUpper.charCodeAt(0); |
resChars[fromUpper.charAt(0)] = toUpper.charAt(0); |
resCodes[fromUpper.charCodeAt(0)] = toUpper.charCodeAt(0); |
resChars[fromUpper.charAt(0)] = toUpper.charAt(0); |
} |
} |
} |
} |
} |
}, |
|
Worker.prototype.convertCode = function(c) |
{ |
return this.convert(this.convertCodes, c); |
} |
convertCode: function(c) |
{ |
return this.convert(this.convertCodes, c); |
}, |
|
Worker.prototype.convertStringForward = function(s) |
{ |
return this.convertString(this.convertChars, s); |
convertStringForward: function(s) |
{ |
return this.convertString(this.convertChars, s); |
}, |
|
convertStringBackward: function(s) |
{ |
return this.convertString(this.backChars, s); |
}, |
|
convertString: function(table, s) |
{ |
var res = ""; |
|
for(var i = 0, l = s.length; i < l; ++i) { |
res += this.convert(table, s.charAt(i)); |
} |
|
return res; |
}, |
|
convert: function(table, c) |
{ |
if(table) { |
var r = table[c]; |
if(r != undefined) return r; |
} |
|
return c; // not found or no table |
}, |
} |
|
Worker.prototype.convertStringBackward = function(s) |
function LatRusWorker_Rus() |
{ |
return this.convertString(this.backChars, s); |
this.__super = LatRusWorker; |
LatRusWorker_Rus.prototype.__proto__ = this.__super.prototype; |
this.__super.call(this); |
} |
LatRusWorker_Rus.prototype = { |
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.prototype.convertString = function(table, s) |
{ |
var res = ""; |
|
for(var i = 0, l = s.length; i < l; ++i) { |
res += this.convert(table, s.charAt(i)); |
} |
rusTable: new Array( |
'а', 'б', 'ц', 'д', 'е', 'ф', 'г', 'х', 'и', 'й', 'к', 'л', 'м', |
'н', 'о', 'п', 'ч', 'р', 'с', 'т', 'у', 'в', 'ш', 'ж', 'я', 'з', |
'ъ', 'ь', '§', '$', '&', '/', '(', ')', '=', '?', '`', '-', |
'_', '#', '+', '*', ',', '.', 'э', 'ы', 'ю', 'щ'), |
|
return res; |
init: function() |
{ |
this.__super.prototype.init.apply(this); |
|
this.buildConvertTable(this.engTable, this.rusTable, true, this.convertCodes, this.convertChars); |
this.buildConvertTable(this.rusTable, this.engTable, true, this.backCodes, this.backChars); |
}, |
} |
|
Worker.prototype.convert = function(table, c) |
function LatRusWorker_RusStd() |
{ |
if(table) { |
var r = table[c]; |
if(r != undefined) return r; |
} |
|
return c; // not found or no table |
this.__super = LatRusWorker_Rus; |
LatRusWorker_RusStd.prototype.__proto__ = this.__super.prototype; |
this.__super.call(this); |
} |
LatRusWorker_RusStd.prototype = { |
rusTable: new Array( |
'ф', 'и', 'с', 'в', 'у', 'а', 'п', 'р', 'ш', 'о', 'л', 'д', 'ь', |
'т', 'щ', 'з', 'й', 'к', 'ы', 'е', 'г', 'м', 'ц', 'ч', 'я', 'н', |
'\"', '/', 'â„–', ';', ':', '?', '*', '(', ')', '_', '=', '.', |
',', '\\', 'ъ', 'Ъ', 'б', 'ю'), |
} |
|