Usuari:Coet/scripts/topaz.js

Nota: Després de desar, heu de netejar la memòria cau del navegador per veure els canvis. En la majoria de navegadors amb Windows o Linux, premeu Ctrl+F5 o bé premeu Shift i cliqueu el botó "Actualitza" (Ctrl i "Actualitza" amb Internet Explorer). Vegeu més informació i instruccions per a cada navegador a Viquipèdia:Neteja de la memòria cau.

/*
<pre><nowiki>
Reuneix els mòduls de'n [[w:en:User:Topaz|Topaz]] següents:
*[[w:en:User:Topaz/init.js]]
*[[w:en:User:Topaz/util.js]]
*[[w:en:User:Topaz/comm.js]]
*[[w:en:User:Topaz/wputil.js]]
*[[w:en:User:Topaz/statuschanger.js]]
Funcions emprades a [[w:ca:Usuari:Pasqual/scripts/commutadordestat.js]].


ÍNDEX:
topaz.util
 .getobj
 .time
 .add
 .add2
 .fullescape
 .mousebtnmap
 .xmlhttpreq
 .cookie
topaz.com
 .doreq
topaz.wputil
 .username
 .iseditpage
 .pagename
 .setpagecontent
 .getpagecontent
 .getserverpagecontent
 .addpagecontent
*/

var topaz = {};

/********************************  topaz.util  ********************************/

topaz.util = {
getobj:function(id) {
  return document.getElementById ?
             document.getElementById(id) :
             document.all[id];
},
time:function() {
  return((new Date()).getTime()/1000);
},
add:function(parent, tag, attr) {
  var el = document.createElement(tag);
  if (attr) {
    for (var key in attr) {
      el[key] = attr[key];
    }
  }
  return parent.appendChild(el);
},
add2:function(parent, el0, tag, attr) {
  var el = document.createElement(tag);
  if (attr) {
    for (var key in attr) {
      el[key] = attr[key];
    }
  }
  return parent.insertBefore(el, el0);
},
fullescape:function(text) {
  return escape(text).replace(/\+/g,"%2B");
},
urlencode:function(text){
  txt = txt.replace(/\&lt\;/gi, "<");
  txt = txt.replace(/\&gt\;/gi, ">");
  txt = txt.replace(/\&quot\;/gi, "\"");
  txt = txt.replace(/\&amp\;/gi, "%26");
  txt = txt.replace(/\&mdash\;/gi, "—");
  txt = txt.replace(/\&ndash\;/gi, "-");
  txt = txt.replace(/\&/gi, "%26");
  txt = txt.replace(/\%20\;/gi, "%20");
  txt = txt.replace(/\+/gi, "%2B");
  return txt;
},
mousebtnmap:{
  ns:[null,1,3,2],
  ie:[null,1,2,null,3]
},
xmlhttpreq:function() {
  if (window.XMLHttpRequest) {
    xmlhttpobj = new XMLHttpRequest();
  } else {
    try {
      xmlhttpobj = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttpobj = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        xmlhttpobj = null;
      }
    }
  }
  return xmlhttpobj;
},
cookie:{
  noexpire:(function(){
    var d = new Date();
    d.setTime(d.getTime() + (365*24*60*60*1000));
    return d.toGMTString();
  })(),
  expire:(function(){
    var d = new Date();
    d.setTime(d.getTime()-1);
    return d.toGMTString();
  })(),
  get:function(name) {
    name += "-"+mw.config.get('wgUserName');
    var cl = document.cookie.split(/;\s*/);
    for (var i=0; i<cl.length; i++) {
      var curc = cl[i].split(/\=/);
      if (curc[0] == name) {
        return(curc[1]);
      }
    }
    return null;
  },
  set:function(name, value) {
    name += "-"+mw.config.get('wgUserName');
    document.cookie = name + "=" + escape(value) +
        "; expires=" + topaz.util.cookie.noexpire +
        "; path=/";
  },
  del:function(name) {
    name += "-"+mw.config.get('wgUserName')
    document.cookie = name+"=; expires="+topaz.util.coookie.expire+"; path=/";
  }
}
};


/********************************  topaz.comm  ********************************/
topaz.comm = {
doreq:function(url, postdata, headers) {
  var req = topaz.util.xmlhttpreq();
  req.open(postdata ? "POST" : "GET", url, false);
  for(var header in headers) {
    req.setRequestHeader(header, headers[header]);
  }
  req.send(postdata || null);
  return req;
}
};


/*******************************  topaz.wputil  *******************************/
topaz.wputil = {
username:function() {
  return mw.config.get('wgUserName');
  //abans: topaz.util.getobj("pt-userpage").childNodes[0].childNodes[0].nodeValue;
},
iseditpage:function() {
  return document.title.indexOf("Editing ") == 0;
},
pagename:function() {
  var iseditpage = topaz.wputil.iseditpage();
  return document.title.substr(iseditpage ? 8 : 0, document.title.indexOf(" - ")-(iseditpage ? 8 : 0));
},
addsidepanel:function(id, label) {
  var div = topaz.util.add(topaz.util.getobj("column-one"), "div", {className:"portlet",id:id, title: "panell afegit amb els Viquiestris"});
  topaz.util.add(div, "H5").innerHTML = label;
  topaz.util.add(topaz.util.add(div, "div", {className:"pBody"}), "ul");
},
addsidepanelbutton:function(id, label, targhref) {
  var li = topaz.util.add((topaz.util.getobj(id).getElementsByTagName("ul"))[0],"li");
  with(topaz.util.add(li,"a")) {
    innerHTML = label;
    href = targhref;
    title = label+": enllaç afegit amb els Viquiestris"
  }
  return li;
},
addsidepanelbutton2:function(id, label, targhref) {
  var li = topaz.util.add2(
  	(
  		topaz.util.getobj(id).getElementsByTagName("ul")
  	)[0],
  	(
  		(
  			topaz.util.getobj(id).getElementsByTagName("ul")
  		)[0].getElementsByTagName("li")
  	)[0], "li"
 );
  with(topaz.util.add(li,"a")) {
    innerHTML = label;
    href = targhref;
  }
  return li;
},
setpagecontent:function(pagename, content, summary, watch) {
  var prelimresp = topaz.comm.doreq("/w/index.php?title="+pagename+"&action=submit");
  var edittime = prelimresp.responseText.match(/<input type='hidden' value="(\d+)" name="wpEdittime" \/>/)[1];
  var edittoken = prelimresp.responseText.match(/<input type="hidden" value="([^"]+)" name="wpEditToken" \/>/)[1];
  content = topaz.util.urlencode(content);
  url = "/w/index.php?title=" + pagename + "&action=submit";
  data = "wpEdittime=" + edittime +
      "&wpEditToken=" + topaz.util.fullescape(edittoken)+
      "&wpTextbox1=" + content +
      "&wpSummary=" + summary +
      (watch ? "&wpWatchthis=on" : "") +
      "&wpSection=&wpSave=Save+page";
  headers = {"Content-Type":"application/x-www-form-urlencoded"};
  topaz.comm.doreq(url, data, headers);
},
getpagecontent:function (pagename) {
  var req = topaz.comm.doreq("/w/index.php?title=" + pagename + "&action=edit");
  var content = req && req.responseText && req.responseText.match ? (
  	req.responseText.match(/<textarea[\w\W]*?>([\w\W]*?)<\/textarea>/)[1] || '' 
  ) : '';
  return topaz.util.urlencode(content);
},
getpagecontentserver:function (server, pagename) {
  var req = topaz.comm.doreq(server + "/w/index.php?title=" + pagename +
	"&action=edit");
  var content = req.responseText.match(
  	/<textarea[\w\W]*?>([\w\W]*?)<\/textarea>/
  )[1];
  return topaz.util.urlencode(content);
},
addpagecontent:function(pagename, addContent, summary, watch) {
  var newContent = '';
  var prelimresp = topaz.comm.doreq(
  	"/w/index.php?title=" + pagename + "&action=submit"
  );
  var edittime = prelimresp.responseText.match(
  	/<input type='hidden' value="(\d+)" name="wpEdittime" \/>/)[1];
  var edittoken = prelimresp.responseText.match(
  	/<input type="hidden" value="([^"]+)" name="wpEditToken" \/>/)[1];
  var req = topaz.comm.doreq(
  	"/w/index.php?title=" + pagename + "&action=edit"
  );
  var oldContent = req.responseText.match(
  	/<textarea[\w\W]*?>([\w\W]*?)<\/textarea>/)[1];

  oldContent = topaz.util.urlencode(oldContent);
  addContent = topaz.util.urlencode(addContent);
  newContent = oldContent + addContent;
  
  url = "/w/index.php?title=" + pagename + "&action=submit";
  data = "wpEdittime=" + edittime +
      "&wpEditToken=" + topaz.util.fullescape(edittoken) +
      "&wpTextbox1=" + newContent +
      "&wpSummary=" + summary +
      (watch ? "&wpWatchthis=on" : "") +
      "&wpSection=&wpSave=Save+page";
   headers = {"Content-Type":"application/x-www-form-urlencoded"};

  topaz.comm.doreq(url, data, headers);
},
readpagecontent:function (pagename) {
  var req = topaz.comm.doreq("/w/index.php?title=" + pagename);
  var content = req.responseText.match(/<textarea[\w\W]*?\>([\w\W]*?)<\/textarea>/)[1];
  return topaz.util.urlencode(content);
},
getspecialpagecontent:function (pagename) {
  var req = topaz.comm.doreq("/w/index.php?title=" + pagename + "&action=raw");
  return topaz.util.urlencode(content);
}
};


/*
</nowiki>
</pre>
*/