// ==UserScript==
// @name theOne
// @namespace clf/wp
// @description clf+wp quick nav v4.0
// @include http://mycoffeelounge.net/*
// @include http://www.mycoffeelounge.net/*
// @include http://whirlpool.net.au/*
// @include http://*.whirlpool.net.au/*
// ==/UserScript==
(function() {
//
if(document.body) {
var gm_thisScript='clf/wp/theOne';
var gm_thisTitle='clf+wp quick nav v4.0';
if(document.getElementById(gm_thisScript)) return; //already running
var gm_link=document.createElement('A');
gm_link.id=gm_thisScript;
gm_link.rel='greasemonkey';
gm_link.title=gm_thisTitle;
gm_link.style.display="none";
document.body.appendChild(gm_link);
}
//
var EventManager= {
_registry: null,
Initialise: function() {
if (this._registry == null) {
this._registry = [];
EventManager.Add(window, '_unload', this.CleanUp);
}
},
Add: function(obj, type, fn, useCapture) {
this.Initialise();
var realType=(type=='_unload'?'unload':type);
if (typeof obj == 'string')
obj = document.getElementById(obj);
if (obj == null || fn == null)
return false;
obj.addEventListener(realType, fn, useCapture);
this._registry.push({obj:obj, type:type, fn:fn, useCapture:useCapture});
return true;
},
CleanUp: function() {
for (var i = 0; i < EventManager._registry.length; i++) {
with(EventManager._registry[i]) {
if(type=='unload') fn();
obj.removeEventListener(type,fn,useCapture);
}
}
EventManager._registry = null;
}
};
var dodge=[ "data:image/png;base64,",
"iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAABmJLR0QA/wD/AP+g",
"vaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QsRFgUFBOT53wAAADZJ",
"REFUeNpj+P//fz0TAwMDAxMDA8M/JgYGhv+oxD+8XGwSRCghnUttdUR4lcaOpNhB",
"/8iMNwAb6GTGZICmgQAAAABJRU5ErkJggg=="
].join('');
function addElement(rt, typ) {
var obj=document.createElement(typ);
return rt.appendChild(obj);
}
function createPopup(conf) {
var name=conf.name;
var wideWork=conf.dropDown.width*conf.other.sizePX;
var navW=wideWork+3*(conf.other.sizePX);
var ddW=wideWork+2*(conf.other.sizePX);
var divW=wideWork+1*(conf.other.sizePX);
var topPos=-(conf.other.sizePX*3);
var leftPos=-(conf.other.sizePX+1);
var leftW=wideWork;
var rightPos=wideWork+conf.flyOut.offset;
var retVal={root:null, sect:null, zIndex:999, name:name};
var root = document.createElement("div");
retVal.root=root;
root.id=name+"_nav";
var uList=addElement(root, "ul");
var lButton=addElement(uList, "li");
lButton.id=name+"_button";
var dParent=addElement(lButton, "div");
dParent.id=name+"_parent";
var trigLink=addElement(dParent, "a");
trigLink.href="";
trigLink.appendChild(conf.icon.el);
var dDrop=addElement(dParent, "div");
dDrop.id=name+"_dropdown";
var uDrop=addElement(dDrop, "ul");
retVal.sect=uDrop;
var style=[
"#@_nav { position: fixed; left:",conf.icon.left,"; top: ",conf.icon.top,"; ",
"font-size:",conf.other.sizePX,"px;",
"font-family:Arial,sans-serif; background: transparent;",
"width: ",conf.icon.width,"; height:",conf.icon.height,";}",
"#@_nav ul, #@_nav li { padding: 0; margin: 0; list-style: none; }",
"#@_nav:hover { width:",navW,"px; }",
//"#@_button { width: 16px; }",
"#@_dropdown { width: ",ddW,"px; position: absolute; left: -3000px; top: 0;",
"background: transparent; }",
"#@_dropdown div { width: ",divW,"px; position: absolute; left: -3000px; top: 0;",
"background: transparent; }",
"#@_dropdown ul { width: ",leftW,"px; margin: ",conf.other.sizePX,"px;",
"border: 1px solid #444;border-width: 0 0 1px; }",
"#@_dropdown div ul { margin: 30px 30px 30px 0; }",
"#@_nav a,",
"#@_nav span { display: block; text-decoration: none;}",
"#@_dropdown a,",
"#@_dropdown span { padding: 2px; }",
"#@_dropdown span { cursor:default; }",
"#@_nav ul ul li { border: 1px solid #444; border-width:1px 1px 0;}",
"#@_dropdown li { position: relative; }",
"#@_button:hover #@_dropdown { left:",leftPos,"px; top:",topPos,"px;}",
"#@_dropdown li:hover div { top:-31px; left:",rightPos,"px;}",
"#@_nav #@_mini-zone { padding: 0; width: 15px; height: 15px; font-size: 1px; left: -3000px;",
"bottom: -15px; top: auto; background: transparent; }",
"#@_nav #@_dropdown li:hover #@_mini-zone { left: auto; right: -4px; top: auto; }",
"#@_parent {z-index: 1000;}",
//
//"#@_parent a { color:#f0f; }",
"#@_dropdown li { background: ",conf.dropDown.bg,"; }",
"#@_dropdown li:hover { background: ",conf.dropDown.hBg,";color:",conf.dropDown.hFg,"; }",
"#@_dropdown ul ul li { background: ",conf.flyOut.bg,"; }",
"#@_dropdown ul ul li:hover { background: ",conf.flyOut.hBg,";color:",conf.flyOut.hFg,"; }",
"#@_dropdown li a,",
"#@_dropdown li span { color: ",conf.dropDown.fg,"; }",
"#@_dropdown ul ul li a,",
"#@_dropdown ul ul li a { color: ",conf.flyOut.fg,"; }",
"#@_dropdown ul { border-color:",conf.dropDown.border,";}",
"#@_nav ul ul li { border-color:",conf.flyOut.border,"; }",
// "TD.mainforum>DIV+A+TABLE+TABLE+TABLE {position:fixed;top:0;}",
".@_sep { height:4px; background-color:",conf.dropDown.border,"; }",
".@_section:before { content: '- '; }",
".@_hidden { visibility:hidden; }"
].join("");
var realStyle=style.replace(/@_/g, name+"_");
var head = document.getElementsByTagName('head')[0];
if (!head) return null;
var el = document.createElement('style');
el.type = 'text/css';
el.innerHTML = realStyle;
head.appendChild(el);
return retVal;
}
function addSection(sect, obj, className) {
for(var s in sect) { // build up the menu
var x=sect[s];
var lHead=addElement(obj.sect, "li");
lHead.className=obj.name+"_drop "+obj.name+"_left";
if(className=='hidden') lHead.className+=' '+obj.name+"_"+className;
lHead.style.zIndex=obj.zIndex--;
var aHead=addElement(lHead, "span");
aHead.className=obj.name+"_"+className;
if(x.click && typeof x.click == "function") {
aHead.addEventListener("click", x.click, false);
aHead.style.cursor="pointer";
}
//aHead.href="";
aHead.appendChild(document.createTextNode(s));
if(s.length) {
var dZone=addElement(lHead, "div");
dZone.id=obj.name+"_mini-zone";
var dCont=addElement(lHead, "div");
var uCont=addElement(dCont, "ul");
for(var f in x) {
var y=x[f];
if(typeof y != "function") {
var lItem=addElement(uCont, "li");
lItem.className=obj.name+"_drop "+obj.name+"_right";
var aItem=addElement(lItem, "a");
aItem.href=y;
aItem.appendChild(document.createTextNode(f));
}
}
}
}
}
//------------------------------------------
var menuConfig={
name: "theOne",
other: { sizePX:11 }, // text size in pixels
icon: { el:null, width:"16px", height:"16px", left:"146px", top:"24px" },
dropDown: { fg:"#fff", bg:"#004", hFg:"#fff", hBg:"orange", border:"#000000",
width:12 }, // multiplied by sizePX to get width of menu column
flyOut: { fg:"#fff", bg:"#448", hFg:"#fff", hBg:"orange", border:"#000000",
offset:-2 } // left offset of flyout menu ... 0 or negative works better
};
//------------------------------------------
var gfx=[ "data:image/png;base64,",
"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",
"RK5CYII="
].join('');
var contacts={}; // id : {name:"blah", online:true/false}
function readContacts(url) {
GM_xmlhttpRequest( {
method:"GET",
url:url,
headers: {
"User-Agent":window.navigator.userAgent,
"Accept":"text/html,text/xml,text/plain"
},
onload: function(resp) {
if(resp.status=="200") {
var xmlDoc;
if(unsafeWindow) {
var dp=new XPCNativeWrapper(window, "DOMParser()");
xmlDoc=new dp.DOMParser().parseFromString(resp.responseText,"application/xml");
}
else
xmlDoc=new uWin.DOMParser().parseFromString(resp.responseText,"application/xml");
var trig=[
"//whirlpool/contact/userid/text()",
"//whirlpool/contact/username/text()",
"//whirlpool/contact/online/text()"
].join("|");
var things=document.evaluate(trig,
xmlDoc,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
var pop="";
for(var i=0; i < things.snapshotLength; i+=3) {
var userId=things.snapshotItem(i).nodeValue;
var name=things.snapshotItem(i+1).nodeValue;
var online=things.snapshotItem(i+2).nodeValue;
contacts[userId]={name:name, online:online};
pop+=(pop.length?"
":"");
pop+=(online=="True"?"":"")+name+": is ";
pop+=(online=="True"?"online":"offline");
}
if(pop.length) doPopup2(pop);
}
else doPopu2("contacts RSS seems broken");
}
});
}
function fader(e,v,f) {
// var h;
function fadeIn(el, delta, to, atEnd) {
var x=parseFloat(el.style.opacity)+delta;
if(x > 0.99) x=0.99;
el.style.opacity=x;
// var y=parseInt(h-h*x);
// el.style.bottom="-"+y+"px";
if(x<0.99) window.setTimeout(fadeIn, to, el, delta, to, atEnd);
else if(typeof atEnd == "function") atEnd();
}
function fadeOut(el, delta, to, atEnd) {
var x=parseFloat(el.style.opacity)-delta;
if(x < 0.01) x=0.01;
el.style.opacity=x;
// var y=parseInt(h-h*x);
// el.style.bottom="-"+y+"px";
if(x>0.01) window.setTimeout(fadeOut, to, el, delta, to, atEnd);
else if(typeof atEnd == "function") atEnd();
}
e.style.bottom="0";
// e.style.bottom="-1000em";
e.style.display="block";
// h=e.clientHeight;
fadeIn(e, 0.03, 50, function() {
window.setTimeout( function() {
fadeOut(e, 0.03, 50, function() {
e.style.display="none";
if(typeof f == "function") f();
});
}, v);
});
}
var pup=document.createElement("div");
pup.style.display="none";
pup.style.position="fixed";
pup.style.right="32px";
pup.style.opacity="0.01";
pup.style.backgroundColor="orange";
pup.style.backgroundRepeat='repeat-x';
pup.style.backgroundPosition='top left';
pup.style.backgroundImage='url('+dodge+')';
pup.style.padding="10px";
pup.style.border="gold 3px ridge";
pup=document.body.appendChild(pup);
function doPopup2(html) {
pup.innerHTML=html;
fader(pup, 3000, null);
}
function loadIndex(lookFor) { // read index, and return section/forums in an object
var sections={};
var inSection=false;
var things = document.evaluate(lookFor, document.body, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
var currSect=null;
for(var i=0; i= 0);
var inCLF=(document.location.host.indexOf("mycoffeelounge") >= 0);
// WP
var wpSectObj=null;
var wpContrib="forum-user.cfm";
var serialNo="Undefined";
if(inWP &&
document.location.host.indexOf("whirlpool.") == 0 &&
document.location.pathname=="/profile/index.cfm" &&
document.location.search=="?a=preferences") {
var serial=document.getElementById("serialno");
if(serial) {
serialNo=serial.firstChild.nodeValue;
GM_setValue("WpSerial", serialNo);
}
}
else
serialNo=GM_getValue("WpSerial", serialNo);
if(inWP &&
(document.location.pathname=="/" || document.location.pathname=="/forum.cfm")&&
document.location.host.indexOf("forums.") == 0) {
wpSectObj=loadIndex('//TD[@class="indexhead"]/B|//TD[@class="indexL2"]/DIV/A/B');
GM_setValue("wpForums", uneval(wpSectObj));
var lnk=getAny('//DIV[@class="nav_item_name"]/A[contains(@href, "forum-user.cfm?id=")]');
if(lnk)
wpContrib=lnk.href;
GM_setValue("wpContrib", lnk.href);
}
else {
wpSectObj=eval(GM_getValue("wpForums",
"({'Please visit index page':{'Click Here':'http://forums.whirlpool.net.au/'}})"));
wpContrib=GM_getValue("wpContrib", wpContrib);
}
var wpX=wpContrib.indexOf("=");
var wpLogout="";
if(wpX>0)
wpLogout=wpContrib.substr(wpX);
var wpRssLinks="http://whirlpool.net.au/external/rss-links.cfm?serial="+serialNo;
var wpRssContacts="http://whirlpool.net.au/external/wpm-contacts.cfm?serial="+serialNo;
function doContacts(e) {
if(e) {
e.stopPropagation();
e.preventDefault();
}
readContacts(wpRssContacts);
}
// window.setInterval(doContacts, 60000);
// doContacts();
var wpSection={
"WP User":{
"Contributed Threads" : wpContrib,
"People Online" : "http://forums.whirlpool.net.au/forum-user-online.cfm",
"Inbox" : "http://forums.whirlpool.net.au/whim.cfm?show=inbox",
"Outbox" : "http://forums.whirlpool.net.au/whim.cfm?show=outbox",
"Contacts" : "http://forums.whirlpool.net.au/whim-contacts.cfm",
"Subscriptions" : "http://forums.whirlpool.net.au/forum-subs.cfm",
"Thread Search" : "http://forums.whirlpool.net.au/forum-search.cfm",
"Your Settings" : "http://whirlpool.net.au/user.cfm",
"Log out" : "http://whirlpool.net.au/login.cfm?logout"+wpLogout,
"Whoogle" : "http://ideatriage.com/WPSearch.html",
// "Links RSS" : wpRssLinks,
// "Contacts RSS" : wpRssContacts,
"click" : doContacts
}
};
// CLF
var clfSectObj=null;
var clfContrib="cl-user.php";
if(inCLF && document.location.pathname == "/index.php") {
var indexStyle1=getAny('//TD[@class="Coffee3"]');
var xp=indexStyle1?'//TR/TD[@class="Coffee3"][2]/B|'+
'//TR/TD[@class="themeindex3"]/DIV/A/B|'+
'//TR/TD[@class="themeindex1"]/DIV/A/B':
'//TD[@class="IndexingHeading"]/FONT/B|//TD[@class="IndexPageTD2"]/DIV/A/B';
clfSectObj=loadIndex(xp);
GM_setValue("clfForums", uneval(clfSectObj));
var lnk=getAny('//DIV[@class="welcomemsg2"]/A[contains(@href, "cl-user.php?")]');
if(lnk) {
var x=lnk.href.split("&");
clfContrib=x[0]
}
GM_setValue("clfContrib", clfContrib);
}
else {
clfSectObj=eval(GM_getValue("clfForums",
"({'Please visit index page':{'Click Here':'http://www.mycoffeelounge.net/index.php'}})"));
clfContrib=GM_getValue("clfContrib", clfContrib);
}
var clfSection={
"CLF User":{
"Recent Threads" : "http://mycoffeelounge.net/forum-recent.php",
"Contributed Threads" : clfContrib,
"People Online" : "http://www.mycoffeelounge.net/cl-members.php",
"Inbox" : "http://www.mycoffeelounge.net/coaster-inbox.php",
"Outbox" : "http://www.mycoffeelounge.net/coaster-outbox.php",
"Caffeine Level" : "http://www.mycoffeelounge.net/cl-caffeine-level.php",
"Thread Search" : "http://www.mycoffeelounge.net/cl-thread-search.php",
"Full Text Search" : "http://www.mycoffeelounge.net/cl-full-text-search.php",
"Your Settings" : "http://www.mycoffeelounge.net/user.php",
"Log out" : "http://www.mycoffeelounge.net/logout.php",
"Meh-oogle" : "http://goodbyepolar.com/search/",
"Mod" : "http://www.mycoffeelounge.net/mod-main.php",
"Froth Central" : "http://www.mycoffeelounge.net/mod-froth-central.php",
"The Grinder" : "http://www.mycoffeelounge.net/cl-mod-grinder.php?cid=85",
"User Notes" : "http://www.mycoffeelounge.net/mod-user-notes.php",
"Online Members" : "http://www.mycoffeelounge.net/mod-online.php",
}
};
//
var separator={"":{}};
if(inWP) { //let's match the current theme
var dummy=document.createElement("DIV");
dummy.className="navlink1";
menuConfig.dropDown.bg=
document.defaultView.getComputedStyle(dummy, '').getPropertyValue("background-color");
dummy.className="navlink3";
menuConfig.flyOut.bg=
document.defaultView.getComputedStyle(dummy, '').getPropertyValue("background-color");
}
if(inCLF) { //let's match the current theme
var dummy=document.createElement("TD");
dummy.className="navmenu";
menuConfig.dropDown.bg=menuConfig.flyOut.bg=
document.defaultView.getComputedStyle(dummy, '').getPropertyValue("background-color");
if(getAny('//a[starts-with(@onclick, "psmiley")]') && document.forms[0] && ! document.post) {
document.post=document.forms[0];
}
}
//
var sideNav=inCLF?getAny('//TD[@class="navmenu"]'):true;
var Img=document.createElement("img");
Img.src=inWP?gfx:"http://www.mycoffeelounge.net/wiki/56-663.gif";
Img.style.borderStyle="none";
Img.style.backgroundColor="transparent";
Img.style.width=(sideNav || inWP)?"16px":"19px";
Img.style.height=Img.style.width;
menuConfig.icon.el=Img;
menuConfig.icon.left=sideNav?"146px":"0";
var pu=createPopup(menuConfig);
var clfForum={"Forums":clfSectObj};
var wpForum={"Forums":wpSectObj};
addSection(({'Hidden':{'Hidden':''}}), pu, "hidden");
addSection(clfSection, pu, "site");
addSection(clfSectObj, pu, "section");
addSection(separator, pu, "sep");
addSection(wpSection, pu, "site");
addSection(wpSectObj, pu, "section");
document.body.appendChild(pu.root);
})();