Участник: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
}