User:Js/popupBookmarks.js

if (!window.myBkmPage) myBkmPage = '/Bookmarks' if (myBkmPage.charAt(0)=='/') myBkmPage = 'User:' + mw.config.get('wgUserName') + myBkmPage var myBkmURL = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1','') + myBkmPage

if (doneOnloadHook) myBookmarksLoad else addOnloadHook(myBookmarksLoad)

function myBookmarksLoad { var obj_id = window.myBkmPlace || 'p-personal' var obj = document.getElementById(obj_id) if (!obj) return var bkmLink if (obj.className && obj.className == 'portlet') { mw.util.addPortletLink(obj_id, myBkmURL, window.myBkmName || 'Bookmarks', 't-bkmmenu') obj = document.getElementById('t-bkmmenu') } if (window.myBkmShowOnHover != 2) addHandler(obj, 'click', myBookmarks) if (window.myBkmShowOnHover) addHandler(obj, 'mouseover', myBookmarks) }

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

function myBookmarksIni{ 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) addHandler(this.div, 'mouseup', this.hideOnMouseUp) if (isMouseOut) addHandler(this.div, '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 }