42,6 → 42,8 |
gBrowser.addProgressListener(LatRusWebProgressListener, |
Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); |
gBrowser.tabContainer.addEventListener("TabSelect", LatRus.onTabSelect, false); |
|
LatRus.setEnabled(false); |
}, |
|
uninit: function() |
66,7 → 68,7 |
|
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)); |
false, false, false, false, 255, latRusWorker.convertCode(aEvent.charCode)); |
aEvent.preventDefault(); |
aEvent.target.dispatchEvent(newEvent); |
}, |
95,6 → 97,64 |
} |
}, |
|
onMenuPopupShowing: function(menu) |
{ |
if(!gContextMenu) return null; |
var textSelected = (LatRus.getSelectedText(gContextMenu.target) != null); |
|
var itemToLat = document.getElementById("context-latrus-tolat"); |
if(itemToLat) { |
itemToLat.disabled = !textSelected; |
} |
|
var itemToRus = document.getElementById("context-latrus-torus"); |
if(itemToRus) { |
itemToRus.disabled = !textSelected; |
} |
}, |
|
selectedToLat: function() |
{ |
if(!gContextMenu) return null; |
LatRus.convertSelectedText(gContextMenu.target, 'convertStringBackward'); |
}, |
|
selectedToRus: function() |
{ |
if(!gContextMenu) return null; |
LatRus.convertSelectedText(gContextMenu.target, 'convertStringForward'); |
}, |
|
getSelectedText: function(e) |
{ |
if(!e) return null; |
if(!e.value) return null; |
|
var start = e.selectionStart; |
var end = e.selectionEnd; |
if(start < 0 || end < 0 || start >= end) return null; |
|
return e.value.toString().substring(start, end); |
}, |
|
convertSelectedText: function(e, transformation) |
{ |
var selection = LatRus.getSelectedText(e); |
if(!selection) return; |
|
var res = latRusWorker[transformation].call(latRusWorker, selection); |
var start = e.selectionStart; |
var end = e.selectionEnd; |
var scrollTop = e.scrollTop; |
var scrollLeft = e.scrollLeft; |
|
e.value = e.value.substring(0, start) + res + e.value.substring(end); |
e.setSelectionRange(start, start + res.length); |
|
e.scrollTop = scrollTop; |
e.scrollLeft = scrollLeft; |
}, |
|
showOptions: function() |
{ |
alert("latrus options"); |
122,29 → 182,62 |
|
function Worker() |
{ |
this.convertTable = Worker.buildConvertTable(Worker.engTable, Worker.rusTable1, true); |
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); |
} |
|
Worker.buildConvertTable = function(fromTable, toTable, autoUpperCase) |
Worker.buildConvertTable = function(fromTable, toTable, autoUpperCase, resCodes, resChars) |
{ |
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); |
resCodes[fromTable[i].charCodeAt(0)] = toTable[i].charCodeAt(0); |
resChars[fromTable[i].charAt(0)] = toTable[i].charAt(0); |
if(autoUpperCase) { |
if(fromTable[i].toUpperCase() != fromTable[i]) { |
res[fromTable[i].toUpperCase().charCodeAt(0)] = toTable[i].toUpperCase().charCodeAt(0); |
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); |
} |
} |
} |
} |
|
Worker.prototype.convertCode = function(c) |
{ |
return this.convert(this.convertCodes, c); |
} |
|
Worker.prototype.convertStringForward = function(s) |
{ |
return this.convertString(this.convertChars, s); |
} |
|
Worker.prototype.convertStringBackward = function(s) |
{ |
return this.convertString(this.backChars, s); |
} |
|
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)); |
} |
|
return res; |
} |
|
Worker.prototype.convertChar = function(c) |
Worker.prototype.convert = function(table, c) |
{ |
if(this.convertTable) { |
var r = this.convertTable[c]; |
if(table) { |
var r = table[c]; |
if(r != undefined) return r; |
} |
|