/* Resize Textarea 0.2 Original coding by Raik Juergens Contact: borstel33@web.de TEXTAREA.baseURI */ var resizeTA = { readFile: function(){ var req = new XMLHttpRequest(); req.open('GET', 'chrome://resizeta/content/data.xml', false); req.send(null); // print the name of the root element or error message var dom = req.responseXML; //alert(dom.documentElement.nodeName == 'parsererror' ? 'error while parsing' : dom.documentElement.nodeName); }, config: function(args) { var settingsHandle = window.openDialog("chrome://resizeta/content/settings.xul", "Config", "chrome,resizable,modal,centerscreen",args); settingsHandle.focus(); }, onLoad: function() { var menu = document.getElementById('contentAreaContextMenu'); menu.addEventListener('popupshowing',this.showContext,false); this.ProfileName(); this.readFile(); return; }, ProfileName: function() { var profileName = Components.classes['@mozilla.org/file/directory_service;1'] .getService(Components.interfaces.nsIProperties).get('ProfD', Components.interfaces.nsIFile) .QueryInterface(Components.interfaces.nsILocalFile).path; profileName = profileName.slice(profileName.lastIndexOf("\\")+1,profileName.length); profileName = profileName.slice(profileName.indexOf('.')+1,profileName.length); //document.getElementById("main-window").setAttribute("title", profileName); document.getElementById('main-window').setAttribute('titlemodifier', profileName); }, showContext: function(e) { with(gContextMenu){ showItem("resizeta-start",(gContextMenu.onTextInput && gContextMenu.target.style.MozUserSelect!='none')); //setItemAttr("resizeta-start","disabled",(gContextMenu.target.style.MozUserSelect=='none')); showItem("resizeta-autowidth", gContextMenu.onTextInput); showItem("resizeta-wrap", gContextMenu.onTextInput); setItemAttr("resizeta-wrap", "checked", (gContextMenu.target.wrap == 'off')); } }, startRSZ: function(){ var TA = gContextMenu.target; with(TA){ addEventListener('mousedown', this.startMOV, true); addEventListener('keypress', this.stopRSZ, false); addEventListener('dblclick', this.stopRSZ, false); style.MozUserSelect='none'; setAttribute('resizeTAcursor',TA.style.cursor); setAttribute('resizeTAbg',TA.style.backgroundColor); setAttribute('resizeTAtxt',TA.style.color); switch(nodeName){ case 'TEXTAREA': style.cursor = 'url(chrome://resizeta/skin/mouseup.gif), move'; break; case 'INPUT': style.cursor = 'e-resize'; break; } style.color = 'graytext'; style.backgroundColor = '-moz-dialog'; focus(); } }, stopRSZ: function(e){ with(e.target){ removeEventListener('mousedown', resizeTA.startMOV, true); removeEventListener('keypress', resizeTA.stopRSZ, false); removeEventListener('dblclick', resizeTA.stopRSZ, false); //alert(baseURI); style.cursor = this.getAttribute('resizeTAcursor'); style.color = this.getAttribute('resizeTAtxt'); style.backgroundColor = this.getAttribute('resizeTAbg'); style.MozUserSelect = ''; removeAttribute('resizeTAcursor', 1); removeAttribute('resizeTAbg', 1); removeAttribute('resizeTAtxt', 1); } e.preventDefault(); if(e.type == "keypress" && e.which == 115) resizeTA.config(); }, startMOV: function(e){ if(e.which != 1)return; switch(e.target.nodeName){ case 'TEXTAREA': e.target.style.cursor = 'url(chrome://resizeta/skin/mousedown.gif), move'; e.target.ownerDocument.addEventListener('mousemove', resizeTA.resizeTA, false); break; case 'INPUT': e.target.ownerDocument.addEventListener('mousemove', resizeTA.resizeIP, true); break; default: return; } resizeTA.curTA = e.target; resizeTA.TAw = e.pageX; resizeTA.TAh = e.pageY; if(!e.target.style.width){ var w = e.target.offsetWidth; e.target.style.width = w + 'px'; e.target.style.width += (e.target.offsetWidth - w); } if(!e.target.style.height){ var h = e.target.offsetHeight; e.target.style.height = h + 'px'; e.target.style.height += (e.target.offsetHeight - h); } //var kWindowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); //var oBrowser = kWindowMediator.getMostRecentWindow("navigator:browser"); //oBrowser.addEventListener('mouseup', resizeTA.stopMOV, false); content.addEventListener('mouseup', resizeTA.stopMOV, true); }, stopMOV: function(e){ if(e.which != 1)return; //Components.reportError("resizeTA: " + e.type + " " + e.target.nodeName); switch(resizeTA.curTA.nodeName){ case 'TEXTAREA': resizeTA.curTA.style.cursor = 'url(chrome://resizeta/skin/mouseup.gif), move'; e.target.ownerDocument.removeEventListener('mousemove', resizeTA.resizeTA, false); break; case 'INPUT': e.target.ownerDocument.removeEventListener('mousemove', resizeTA.resizeIP, true); break; default: } //var kWindowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); //var oBrowser = kWindowMediator.getMostRecentWindow("navigator:browser"); //oBrowser.removeEventListener('mouseup', resizeTA.stopMOV, false); resizeTA.soundPlay("start.wav"); content.removeEventListener('mouseup', resizeTA.stopMOV, true); }, resizeIP: function(e){ resizeTA.curTA.style.width = parseInt(resizeTA.curTA.style.width) + (e.pageX - resizeTA.TAw) + 'px'; resizeTA.TAw = e.pageX; }, resizeTA: function(e){ resizeTA.curTA.style.width = parseInt(resizeTA.curTA.style.width) + (e.pageX - resizeTA.TAw) + 'px'; resizeTA.curTA.style.height = parseInt(resizeTA.curTA.style.height) + (e.pageY - resizeTA.TAh) + 'px'; resizeTA.TAw = e.pageX; resizeTA.TAh = e.pageY; }, autoWidth: function(){ var TA = gContextMenu.target; var w1 = content.scrollMaxX; TA.style.width = content.innerWidth + 'px'; var w2 = content.scrollMaxX - parseInt(w1); TA.style.width = (parseInt(TA.style.width) - parseInt(w2)) + 'px'; }, soundPlay: function(file){ var sample = Components.classes["@mozilla.org/sound;1"].createInstance(); sample = sample.QueryInterface(Components.interfaces.nsISound); var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var uri = ios.newURI("chrome://resizeta/skin/" + file, null, null); sample.play(uri); } }; window.addEventListener("load", function(e) { resizeTA.onLoad(e); }, false);