//<nowiki>
//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 [[User:Twinzor/Wikimark|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; 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) 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
}
// </nowiki>