Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1315 → Rev 1316

/firefox/latrus/trunk/src/chrome/content/latrus.xul
17,7 → 17,12
 
<popup id="contentAreaContextMenu">
<menu id="context-latrus-submenu" label="LatRus" insertafter="spell-separator">
<menupopup id="context-latrus-menupopup">
<menupopup id="context-latrus-menupopup" onpopupshowing="LatRus.onMenuPopupShowing()">
<menuitem id="context-latrus-tolat" label="Selected text to LAT"
oncommand="LatRus.selectedToLat()" />
<menuitem id="context-latrus-torus" label="Selected text to RUS"
oncommand="LatRus.selectedToRus()" />
<menuseparator id="context-latrus-menupopup-sep" />
<menuitem id="context-latrus-options" label="Options"
oncommand="LatRus.showOptions()" />
</menupopup>
/firefox/latrus/trunk/src/chrome/content/latrus.js
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;
}