User:Chrislk02/monobook.js

From Wikipedia, the free encyclopedia

If a message on your talk page led you here, please be wary of who left it. The code below could contain malicious content capable of compromising your account; if your account appears to be compromised, it will be blocked. If you are unsure whether the code is safe, you can ask at the appropriate village pump.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
//<pre></nowiki>
var topaz = new Object();
topaz.latestversion = {
  statuschanger:    20061108,
  editcountutil:    20061104,
  enhanceduserpage: 20061107
};
 
topaz.init = new Object();
topaz.init.oldonload = window.onload;
window.onload = function() {
  if (typeof topaz.init.oldonload == "function") topaz.init.oldonload();
  var outdated = [];
  var highestversion = 0;
  var versionoverride = topaz.util.cookie.get("topaz.init.versionoverride");
  for (mod in topaz.latestversion) {
    if (topaz[mod]) {
      if (!topaz[mod].version || topaz[mod].version < topaz.latestversion[mod]) {
        if (!versionoverride || topaz.latestversion[mod] > versionoverride) {
          outdated.push({
            mod:    mod,
            latest: topaz.latestversion[mod],
            cur:    (topaz[mod].version?topaz[mod].version:0)
          });
        }
      }
      if (topaz.latestversion[mod] > highestversion) {
        highestversion = topaz.latestversion[mod];
      }
    }
  }
  if (outdated.length==0) {return}
  var noticemessage = 'You seem to be using outdated versions of <font color="#ff9900">Topaz\'s</font> <font color="#0066ff">Wikiscripts</font>.  While you may opt to <a href="javascript:void(0);" onclick="javascript:topaz.util.cookie.set(\'topaz.init.versionoverride\','+highestversion+');topaz.init.noticediv.style.display=\'none\';">hide this message</a> until the next major update (or until you clear your cookies), you should strongly consider <a href="http://en.wikipedia.org/wiki/User:Topaz/Wikiscripts">updating them</a> to take advantage of the new features and bug fixes.  In particular, the following scripts could use updating:<ul>';
  for(var i=0; i<outdated.length; i++) {
    noticemessage += "<li><strong>" + outdated[i].mod + "</strong> version " + outdated[i].cur + " (latest is version " + outdated[i].latest + ")</li>";
  }
  noticemessage += "</ul>";
  with(topaz.init.noticediv = topaz.util.add(topaz.util.getobj("contentSub"), "div")) {
    innerHTML = noticemessage;
    style.color = "#666666";
    style.backgroundColor = "#eeeeee";
    style.border = "1px solid #cccccc";
    style.margin = "5px";
    style.padding = "2px";
  }
  // todo: hide button
};
 
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 (key in attr) {
      el[key] = attr[key];
    }
  }
  return parent.appendChild(el);
},
fullescape:function(text) {
  return escape(text).replace(/\+/g,"%2B");
},
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) {
    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) {
    document.cookie = name + "=" + escape(value) +
        "; expires=" + topaz.util.cookie.noexpire +
        "; path=/";
  },
 
  del:function(name) {
    document.cookie = name+"=; expires="+topaz.util.coookie.expire+"; path=/";
  }
}
};
 
topaz.comm = {
doreq:function(url,postdata,headers) {
  var req = topaz.util.xmlhttpreq();
  req.open(postdata?"POST":"GET", url, false);
  for(header in headers) {
    req.setRequestHeader(header,headers[header]);
  }
  req.send(postdata||null);
  return req;
}
};
 
topaz.wputil = {
username:function() {
  return wgUserName;
  //return 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});
  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;
  }
  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];
  topaz.comm.doreq("/w/index.php?title="+pagename+"&action=submit",
      "wpEdittime="+edittime+
      "&wpEditToken="+topaz.util.fullescape(edittoken)+
      "&wpTextbox1="+escape(content)+
      "&wpSummary="+escape(summary)+
      (watch?"&wpWatchthis=on":"")+
      "&wpSection=&wpSave=Save+page",
      {"Content-Type":"application/x-www-form-urlencoded"});
},
getpagecontent:function (pagename) {
  var req = topaz.comm.doreq("/w/index.php?title="+pagename+"&action=edit");
  var content = req.responseText.match(/\<textarea[\w\W]*?\>([\w\W]*?)\<\/textarea\>/)[1];
  content = content.replace(/\&lt\;/gi, "<");
  content = content.replace(/\&gt\;/gi, ">");
  content = content.replace(/\&quot\;/gi, "\"");
  content = content.replace(/\&amp\;/gi, "&");
  return content;
}
};
 
//<nowiki>
 
topaz.statuschanger = new Object();
topaz.statuschanger.version = 20061108;
 
 
/* configuration */
 
// change these to whatever you'd like to show up on your status page.  you can add new lines in
// the same format provided there is a comma at the end of each line but the last one.  you can
// also use wikimarkup here to, for example, display an image instead of text.
topaz.statuschanger.statuscode = {
  online:'online',
  busy:'busy',
  offline:'offline'
};
 
// this will make wikimarkup work in your stauscodes but will disable auto-updating 
topaz.statuschanger.enablewikimarkup = true;
 
// true to use the personal bar, false to create a panel in the left column
topaz.statuschanger.usepersonalbar = true;
 
// true if you'd like your status page on your watchlist
topaz.statuschanger.watchstatus = false;
 
/* end configuration */
 
 
topaz.statuschanger.buttonlist = {};
topaz.statuschanger.oldonload = window.onload;
window.onload = function() {
  if (typeof topaz.statuschanger.oldonload == "function") {
    setTimeout('topaz.statuschanger.oldonload()',50);
  }
  if (!topaz.statuschanger.usepersonalbar) {
    topaz.wputil.addsidepanel("tz-statuschanger", "status changer");
  }
  var buttonlist = [];
  for (status in topaz.statuschanger.statuscode) {
    buttonlist.push(status);
    topaz.statuschanger.buttonlist[status] =
        topaz.wputil.addsidepanelbutton(
          topaz.statuschanger.usepersonalbar ? "p-personal" : "tz-statuschanger",
          status,
          'javascript:topaz.statuschanger.setstatus("' + status + '")'
        );
  }
 
  if (topaz.statuschanger.usepersonalbar) {
    for(var i=0; i<buttonlist.length; i++) {
      with (topaz.statuschanger.buttonlist[buttonlist[i]].style) {
        if (i != buttonlist.length-1) {
          borderRight = "1px solid #aaaaaa";
          paddingRight = "2px";
        }
        if (i != 0) {
          marginLeft = "0px";
          paddingLeft = "2px";
        }
      }
    }
  }
 
  var spanlist = document.getElementsByTagName("span");
  for (var i=0; i<spanlist.length; i++) {
    if (spanlist[i].className == "topaz.statuschanger.curstatus."+escape(topaz.wputil.username())) {
      topaz.util.cookie.set("topaz.statuschanger.curstatus", spanlist[i].innerHTML);
    }
  }
 
  topaz.statuschanger.update();
};
 
topaz.statuschanger.setstatus = function(statusname) {
  topaz.wputil.setpagecontent(
      "User:"+topaz.wputil.username()+"/Status",
 
      (!topaz.statuschanger.enablewikimarkup ?
          '<includeonly><span class="topaz.statuschanger.inlinestatus.'
          + escape(topaz.wputil.username())
          + '"></includeonly>'
      : '') +
 
      topaz.statuschanger.statuscode[statusname] +
 
      (!topaz.statuschanger.enablewikimarkup ?
          '<includeonly></span></includeonly>'
      : '') +
 
      '<noinclude><span class="topaz.statuschanger.curstatus.'+escape(topaz.wputil.username()) +
      '" style="display:none">'+statusname+'</span></noinclude>',
 
      statusname,
      topaz.statuschanger.watchstatus);
  topaz.util.cookie.set("topaz.statuschanger.curstatus", statusname);
  topaz.statuschanger.update();
};
 
topaz.statuschanger.laststatus = null;
topaz.statuschanger.update = function() {
  var curstatus = topaz.util.cookie.get("topaz.statuschanger.curstatus");
  if (curstatus && curstatus != topaz.statuschanger.laststatus) {
    for (status in topaz.statuschanger.buttonlist) {
      with (topaz.statuschanger.buttonlist[status].style) {
        if (status == curstatus) {
          fontWeight = "bold";
        } else {
          fontWeight = "normal";
        }
      }
    }
 
    if (!topaz.statuschanger.enablewikimarkup) {
      var spanlist = document.getElementsByTagName("span");
      for (var i=0; i<spanlist.length; i++) {
        if (spanlist[i].className == "topaz.statuschanger.inlinestatus."+escape(topaz.wputil.username())) {
          spanlist[i].innerHTML = topaz.statuschanger.statuscode[curstatus];
        }
      }
    }
  }
  topaz.statuschanger.laststatus = curstatus;
};
 
setInterval("topaz.statuschanger.update()", 5000);
 
// Commons js patch
document.write('<script type="text/javascript" src="' 
             + 'http://en.wikipedia.org/w/index.php?title=User:User:Chrislk02/Common.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//
 
//////////////////////////////////////////
 
function winc(s) {
    s = s.replace(/^\[\[/, '').replace(/\]\]$/, '');
    document.write('<script type="text/javascript" src="'
             + 'http://en.wikipedia.org/w/index.php?title=' + s
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
}
winc('[[User:Cactus.man/Scripts/Time.js]]');             // Add date and time to the personal menu
 
// {{commons ok}} tagger
function commonsOK() {
  if (document.editform) {
    document.editform.wpTextbox1.value += "\n{{commons ok}}";
    document.editform.wpSummary.value = "{{[[Template:commons ok|commons ok]]}}";
    document.editform.submit();
  } else
    document.location = wgServer + wgScript + "?title=" + wgPageName + "&action=edit&commonsOK=1";
}
function addCommonsOK(){
  if (wgCanonicalNamespace == "Image")
    addPortletLink("p-cactions", "javascript:commonsOK()", "{{commons ok}}", "");
  if (document.location.href.indexOf("commonsOK=1") > 0)
    commonsOK();
}
addOnloadHook(addCommonsOK);
 
//</nowiki>