All pastes #197888 Raw Edit

Someone

public text v1 · immutable
·published 2006-10-11 16:17 UTC
rendered paste body
/*

  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);