|
|
(7 intermediate revisions by the same user not shown) |
Line 31: |
Line 31: |
| // | | // |
| | | |
− | //<nowiki>
| + | function gid(i) { |
− | //WikiMark
| + | return document.getElementById(i); |
− | //
| |
− | //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(wgUserName);
| |
− | }
| |
− | else {
| |
− | var wikimarkEncodedUserName = WikimarkConfigWikimarksUsername;
| |
− | }
| |
− |
| |
− | var myBkmShowOnHover = WikimarkConfigPopShow;
| |
− | var myBkmHideOnHover = WikimarkConfigPopHide;
| |
− | var wikimarklinkprefix = wgServer+wgScript;
| |
− |
| |
− | addOnloadHook(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 replaceRecentChangesLink(){ |
− | function doAddWikiMark () { | + | if(gid('n-recentchanges')) { |
− | var wikimarkNewpage = wgPageName.replace(/_/g, " ");
| + | var a = gid('n-recentchanges').getElementsByTagName('a'); |
− | if(wikimarkNewpage.indexOf("File:")==0) { | + | for(i in a) { |
− | wikimarkNewpage = ":" + wikimarkNewpage; | + | a[i].href = '/w/index.php?title=Special:RecentChanges&hidebots=0'; |
− | }
| |
− | 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 = wgServer + 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);
| |
− | }
| |
− | addPortletLink(viewMenulocation, myBkmURL, 'my wikimarks', menuPrefixV+'bkmmenu', 'Open your WikiMarks', '', viewNextto)
| |
− | obj = document.getElementById(menuPrefixV+'bkmmenu')
| |
− | }
| |
− | if (window.myBkmShowOnHover != 2) addHandler(obj, 'click', myBookmarks)
| |
− | if (window.myBkmShowOnHover) addHandler(obj, 'mouseover', myBookmarks)
| |
| } | | } |
− |
| + | addOnloadHook(replaceRecentChangesLink); |
− |
| + | |
− | 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; 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) 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
| |
− | }
| |
− |
| |
− | // </nowiki>
| |