1,38 → 1,5 |
const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START; |
const STATE_TRANSFERRING = Components.interfaces.nsIWebProgressListener.STATE_TRANSFERRING; |
const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP; |
|
var LatRusWebProgressListener = { |
QueryInterface: function(aIID) |
{ |
if(aIID.equals(Components.interfaces.nsIWebProgressListener) |
|| aIID.equals(Components.interfaces.nsISupportsWeakReference) |
|| aIID.equals(Components.interfaces.nsISupports)) |
{ |
return this; |
} |
|
throw Components.results.NS_NOINTERFACE; |
}, |
|
onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) |
{ |
// try to take control at first possible stage |
if(aFlag & (STATE_START | STATE_TRANSFERRING | STATE_STOP)) { |
aWebProgress.DOMWindow.document.removeEventListener('keypress', LatRus.onKeyPress, true); |
aWebProgress.DOMWindow.document.addEventListener('keypress', LatRus.onKeyPress, true); |
} |
return 0; |
}, |
|
onLocationChange: function() { return 0; }, |
onProgressChange: function() { return 0; }, |
onStatusChange: function() { return 0; }, |
onSecurityChange: function() { return 0; }, |
onLinkIconAvailable: function() { return 0; }, |
} |
|
var latRusWorker = null; |
var latRusEnabled = false; |
|
var LatRus = { |
init: function() |
39,48 → 6,30 |
{ |
latRusWorker = new Worker(); |
|
gBrowser.addProgressListener(LatRusWebProgressListener, |
Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); |
gBrowser.tabContainer.addEventListener("TabSelect", LatRus.onTabSelect, false); |
|
LatRus.setEnabled(false); |
}, |
|
uninit: function() |
{ |
gBrowser.removeProgressListener(LatRusWebProgressListener); |
}, |
|
onTabSelect: function(aEvent) |
{ |
if(aEvent.target.linkedBrowser.latRusEnabled == undefined) { |
aEvent.target.linkedBrowser.latRusEnabled = false; // the default value |
} |
|
LatRus.updateEnabled(); |
}, |
|
onKeyPress: function(aEvent) |
{ |
if(!gBrowser.selectedBrowser.latRusEnabled) return; |
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"); |
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)); |
aEvent.preventDefault(); |
aEvent.target.dispatchEvent(newEvent); |
aEvent.originalTarget.dispatchEvent(newEvent); |
}, |
|
toggleEnabled: function() |
{ |
LatRus.setEnabled(!gBrowser.selectedBrowser.latRusEnabled); |
LatRus.setEnabled(!latRusEnabled); |
}, |
|
setEnabled: function(enabled) |
{ |
gBrowser.selectedBrowser.latRusEnabled = enabled; |
latRusEnabled = enabled; |
LatRus.updateEnabled(); |
}, |
|
88,12 → 37,12 |
{ |
var item = document.getElementById("context-latrus-enabled"); |
if(item) { |
item.setAttribute("checked", gBrowser.selectedBrowser.latRusEnabled); |
item.setAttribute("checked", latRusEnabled); |
} |
|
var panel = document.getElementById("latrus-panel"); |
if(panel) { |
panel.label = (gBrowser.selectedBrowser.latRusEnabled ? "RUS" : "LAT"); |
panel.label = (latRusEnabled ? "RUS" : "LAT"); |
} |
}, |
|
161,8 → 110,11 |
}, |
}; |
|
/* REGISTER */ |
if(!latRusWorker && !window.frameElement) { |
window.addEventListener('load', LatRus.init, false); |
window.addEventListener('unload', LatRus.uninit, false); |
window.addEventListener('keypress', LatRus.onKeyPress, true); |
} |
|
Worker.engTable = new Array( |
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', |