User:Twinzor/wikimark.js

// //WikiMark // //A bookmarking tool for Wikipedia. // //By User:Twinzor on enwp. //Bookmark popup window functionality copied from //User:Js/popupBookmarks.js with some modifications // //If you improve my sloppy code, I would //appreaciate it if you could drop me //a line on my talkpage. Thanks! // //Reading configuration or setting defaults if not present:

if(typeof WikimarkConfigWikimarksPage == 'undefined') { var wikimarkspage = "/WikiMarks"; } else { var wikimarkspage = "/"+WikimarkConfigWikimarksPage; }

if(typeof WikimarkConfigKeepSection == 'undefined') { var wikimarksect = 0; } else { var wikimarksect = WikimarkConfigKeepSection; }

if(typeof WikimarkConfigListType == 'undefined') { var listtype = "*"; } else { var listtype = WikimarkConfigListType; }

if(typeof WikimarkConfigAddMenu == 'undefined') { var addMenulocation = "p-cactions"; var menuPrefix = "ca-"; } else if( WikimarkConfigAddMenu == "cactions" ) { var addMenulocation = "p-cactions"; var menuPrefix = "ca-"; } else if( WikimarkConfigAddMenu == "personal" ) { var addMenulocation = "p-personal"; var menuPrefix = "pt-"; } else if( WikimarkConfigAddMenu == "toolbox" ) { var addMenulocation = "p-tb"; var menuPrefix = "t-"; } else if( WikimarkConfigAddMenu == "navigation" ) { var addMenulocation = "p-navigation"; var menuPrefix = "n-"; } else { var addMenulocation = "p-cactions"; var menuPrefix = "ca-"; }

if(typeof WikimarkConfigPopup == 'undefined') { var wmPopup = 0; } else if( WikimarkConfigPopup == 1 ) { var wmPopup = 1; }

if(typeof WikimarkConfigViewMenu == 'undefined') { var viewMenulocation = "p-cactions"; var menuPrefixV = "ca-"; } else if( WikimarkConfigViewMenu == "cactions" ) { var viewMenulocation = "p-cactions"; var menuPrefixV = "ca-"; } else if( WikimarkConfigViewMenu == "personal" ) { var viewMenulocation = "p-personal"; var menuPrefixV = "pt-"; } else if( WikimarkConfigViewMenu == "toolbox" ) { var viewMenulocation = "p-tb"; var menuPrefixV = "t-"; } else if( WikimarkConfigViewMenu == "navigation" ) { var viewMenulocation = "p-navigation"; var menuPrefixV = "n-"; } else { var viewMenulocation = "p-cactions"; var menuPrefixV = "ca-"; }

if(typeof WikimarkConfigWikimarksUsername == 'undefined') { var wikimarkEncodedUserName = encodeURIComponent(mw.config.get('wgUserName')); } else { var wikimarkEncodedUserName = WikimarkConfigWikimarksUsername; }

if(typeof WikimarkConfigPopShow == 'undefined') { WikimarkConfigPopShow=0; } if(typeof WikimarkConfigPopHide == 'undefined') { WikimarkConfigPopHide=0 }

var myBkmShowOnHover = WikimarkConfigPopShow; var myBkmHideOnHover = WikimarkConfigPopHide; var wikimarklinkprefix = mw.config.get('wgServer')+mw.config.get('wgScript');

$(WikiMarkInit); function WikiMarkInit { if(typeof WikimarkConfigViewNextTo == 'undefined') { var viewNextto = ''; }   else { var viewNextto = document.getElementById(menuPrefixV+WikimarkConfigViewNextTo); }

if(typeof WikimarkConfigAddNextTo == 'undefined') { var addNextto = ''; }   else { var addNextto = document.getElementById(menuPrefix+WikimarkConfigAddNextTo); }   addPortletLink (addMenulocation, 'javascript:doAddWikiMark', 'WikiMark', menuPrefix+'addwikimark', 'WikiMark this page', '', addNextto); if(wmPopup == 0) { addPortletLink (viewMenulocation, wikimarklinkprefix+"?title=User:"+wikimarkEncodedUserName+wikimarkspage, 'My WikiMarks', menuPrefixV+'showwikimark', 'Open your WikiMarks', '', viewNextto); }   else { myBookmarksLoad; } } function doAddWikiMark { var wikimarkNewpage = mw.config.get('wgPageName').replace(/_/g, " "); if(wikimarkNewpage.indexOf("File:")==0) { wikimarkNewpage = ":" + wikimarkNewpage; }   else if(wikimarkNewpage.indexOf("Category:")==0) { wikimarkNewpage = ":" + wikimarkNewpage; }   var wikimarkNewpageName = wikimarkNewpage; if(wikimarksect == 1) { var newpageURL = location.href; if(newpageURL.indexOf("#")) { anchor = newpageURL.split("#"); newpageSect = anchor[1]; var wikimarkNewpageLink = wikimarkNewpage; wikimarkNewpage = wikimarkNewpage + "#" + newpageSect; wikimarkNewpage = wikimarkNewpage.replace(/_/g, " "); wikimarkNewpageName = wikimarkNewpageLink + " (Section: " + newpageSect + ")"; }   }    var f;    f=document.createElement("IFRAME"); f.id="WikiMarksLoader"; if(wikimarkNewpageName == wikimarkNewpage) { var wikimarkLinktext = wikimarkNewpage; }   else { var wikimarkLinktext = wikimarkNewpage+"|"+wikimarkNewpageName; }   f.onload=function { var wikimark_cmt = "Adding "+wikimarkNewpage+" to my WikiMarks list. (Using WikiMark)"; e=f.contentWindow.document.editform,e.wpTextbox1.value+=listtype+"["+"["+wikimarkLinktext+"]"+"]\n",e.wpSummary.value=wikimark_cmt,e.wpSave.click; var iframe = document.getElementById('WikiMarksLoader'); jsMsg(""+wikimarkNewpageName+" has been added to your WikiMarks."); iframe.style.display="none"; };   f.src=wikimarklinkprefix+"?title=User:"+wikimarkEncodedUserName+wikimarkspage+"&action=edit",document.body.appendChild(f); };

//Everything below here came from User:Js/popupBookmarks.js //with some modifications to make it compatible with WikiMark

var myBkmPage = wikimarkspage; myBkmPage = 'User:' + wikimarkEncodedUserName + myBkmPage; var myBkmURL = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1','') + myBkmPage;

function myBookmarksLoad { var obj_id = viewMenulocation var obj = document.getElementById(obj_id) if (!obj) return var bkmLink if (obj.className && obj.className == 'portlet') { if(typeof WikimarkConfigViewNextTo == 'undefined') { var viewNextto = ''; }  else { var viewNextto = document.getElementById(menuPrefixV+WikimarkConfigViewNextTo); }   if(typeof WikimarkConfigAddNextTo == 'undefined') { var addNextto = ''; }  else { var addNextto = document.getElementById(menuPrefix+WikimarkConfigAddNextTo); }  mw.util.addPortletLink(viewMenulocation, myBkmURL, 'my wikimarks', menuPrefixV+'bkmmenu', 'Open your WikiMarks', '', viewNextto) obj = document.getElementById(menuPrefixV+'bkmmenu') } if (window.myBkmShowOnHover != 2) obj.addEventListener( 'click', myBookmarks) if (window.myBkmShowOnHover) obj.addEventListener('mouseover', myBookmarks) }

function myBookmarks(e){ if (e.preventDefault) e.preventDefault; else e.returnValue = false //do not follow the link if (!window.bkmMenu) myBookmarksIni window.bkmMenu.ShowHide(e) return false }

function myBookmarksIni{ if(typeof sajax_init_object === 'undefined') return; var ht = sajax_init_object ht.open('GET', myBkmURL + '?action=render', false) ht.send(null) bkmMenu = new mnuObj('papka', ht.responseText,     (window.myBkmHideOnHover!=2), window.myBkmHideOnHover) if (window.myBkmNewWin){ var links = bkmMenu.div.getElementsByTagName('a') for (var i=0; ipage]' + ' [edit] ' }

/* MENU */

function mnuObj(id, html, isMouseUp, isMouseOut) { var d = document.createElement('div') d.id=id d.className = 'menudiv' d.innerHTML=html d.style.display='none' d.style.position='absolute' d.style.padding='5px' d.style.border='3px outset' d.style.zIndex = '50' d.style.backgroundColor='#EEEEEE' document.body.appendChild(d) this.div = d this.div.obj = this //backlink

this.Hide = function { this.div.style.display = 'none' }

this.ShowHide = function (e){ if (this.div.style.display == 'block') this.Hide else this.Show(e) }

this.Show = function (e){ this.div.style.display = 'block' var e = e || window.event if (!e) return var coords = getMousePos(e) var posx = coords[0], posy = coords[1] this.div.style.top = posy + 5 + 'px' posx -= elementWidth(this.div)/2 if (posx + elementWidth(this.div) > windowWidth)  posx = windowWidth - elementWidth(this.div) - 20 else if (posx < 0) posx = 10 this.div.style.left = posx + 'px' }

this.hideOnMouseUp = function (e){ var e = e || window.event if ((e.which && e.which == 3) || (e.button && e.button == 2)) return //except right-click var targ = e.srcElement || e.target while (targ && (!targ.className || targ.className != 'menudiv')) targ = targ.parentNode if (!targ) return targ.style.display = 'none' }

this.hideOnMouseOut = function(e){ var e = e || window.event var targ = e.srcElement || e.target while (targ && (!targ.className || targ.className != 'menudiv')) targ = targ.parentNode if (!targ) return var toEl = e.toElement || e.relatedTarget while (toEl && toEl != targ && toEl.nodeName != 'BODY') toEl = toEl.parentNode if (toEl == targ) return targ.style.display = 'none' }

if (isMouseUp) this.div.addEventListener('mouseup', this.hideOnMouseUp) if (isMouseOut) this.div.addEventListener('mouseout', this.hideOnMouseOut) }

/*API */

function windowWidth{ if (self.innerWidth) // all except Explorer return self.innerWidth else if (document.documentElement && document.documentElement.clientWidth)// Explorer 6 Strict Mode return document.documentElement.clientWidth else if (document.body) // other Explorers return document.body.clientWidth else return 0 }

function elementWidth(el){ return Math.max(el.scrollWidth, el.offsetWidth) }

function getMousePos(ev){ var posx = 0;	var posy = 0 if (ev.pageX) return [ev.pageX, ev.pageY] else if (ev.clientX) return [ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft, ev.clientY + document.body.scrollTop + document.documentElement.scrollTop] else return null }

//