Участник:Afinogenoff/bookmarks.js
Замечание: Чтобы после сохранения вступили в силу изменения стилей, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=common&*, если используете скин Common.
Чтобы вступили в силу изменения скриптов, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=common&*, если используете скин Common.
Гаджеты и импортируемые скрипты загружаются отдельными файлами.
if (!window.myBkmPage) myBkmPage = '/Закладки';
if (myBkmPage.charAt(0)=='/') myBkmPage = 'User:' + wgUserName + myBkmPage;
var myBkmURL = wgServer + wgArticlePath.replace('$1','') + myBkmPage;
addOnloadHook(function () {
var obj_id = window.myBkmPlace || 'p-personal';
var obj = document.getElementById(obj_id);
if (!obj) return;
var bkmLink;
if (obj.className && obj.className == 'portlet') {
addPortletLink(obj_id, myBkmURL, window.myBkmName || 'закладки', 't-bkmmenu');
obj = document.getElementById('t-bkmmenu')
}
if (window.myBkmShowOnHover != 2) addEvent(obj, 'click', myBookmarks)
if (window.myBkmShowOnHover) addEvent(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);
}
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; i<links.length; i++)
links[i].target = '_blank';
}
bkmMenu.div.innerHTML += '<div style="text-align:right">[<a href="' + myBkmURL + '">page</a>]'
+ ' [<a href="' + myBkmURL + '?action=edit">edit</a>]</div>';
}
/* 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) addEvent(this.div, 'mouseup', this.hideOnMouseUp)
if (isMouseOut) addEvent(this.div, 'mouseout', this.hideOnMouseOut);
}
/*API */
function addEvent(obj, event, func) {
if (obj.addEventListener) obj.addEventListener( event, func, false );
else if (obj.attachEvent) obj.attachEvent ('on'+event, func)
}
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 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
}