User:Greenpickle/monobook.js: Difference between revisions
Jump to navigation
Jump to search
Greenpickle (talk | contribs) No edit summary |
Greenpickle (talk | contribs) No edit summary |
||
Line 23: | Line 23: | ||
if (isAnchor) { | if (isAnchor) { | ||
child = document.createElement('a'); | child = document.createElement('a'); | ||
child.setAttribute('href | child.setAttribute('href', | ||
'javascript:switchable.setVisible(' + i + ', ' + j + ');'); | |||
} else child = document.createElement('strong'); | } else child = document.createElement('strong'); | ||
child.appendChild(document.createTextNode(label)); | child.appendChild(document.createTextNode(label)); | ||
Line 39: | Line 38: | ||
this[i].setAttribute('visiblesection', visible.toString()); | this[i].setAttribute('visiblesection', visible.toString()); | ||
} | } | ||
return visible; | return Math.max(0, Math.min(visible, this[i].sections.length - 1)); | ||
} | } | ||
Line 123: | Line 122: | ||
// initialise on page load | // initialise on page load | ||
if (window.addEventListener !== undefined) | if (window.addEventListener !== undefined) | ||
addEventListener('load', initialiseSwitchable, false); | |||
else if (window.attachEvent !== undefined) | else if (window.attachEvent !== undefined) | ||
attachEvent('onload', initialiseSwitchable); | |||
else | else onload = initialiseSwitchable; |
Revision as of 14:18, October 27, 2010
document.write('<script type="text/javascript" src="http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript&"></script>\n<script type="text/javascript" src="http://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js&action=raw&ctype=text/javascript"></script>');
include = false;
RCNSTList = ['User', 'User talk', 'User blog', 'User blog talk', 'User blog comment', 'User blog comment talk', 'User avatar log', 'User creation log'];
RCNSTPageListInclude = [];
RCNSTPageListExclude = [];
RCNSTbeforecheckboxes = '<span id="rcnst"><hr />\n';
RCNSTaftercheckboxes = '</span>';
RCNSTbeforecheckbox = '';
RCNSTaftercheckbox = '\n';
document.write('<script type="text/javascript" src="http://pikminwiki.com/index.php?title=User:Greenpickle/rcnst.js&action=raw&ctype=text/javascript"></script>');
var switchableAnchorPrefix = '';
function initialiseSwitchable () {
// get the elements we care about
switchable = getElementsByClassName('switchable');
// some functions
switchable.createTab = function (label, isAnchor, i, j) {
var tab = document.createElement('li');
var child;
if (isAnchor) {
child = document.createElement('a');
child.setAttribute('href',
'javascript:switchable.setVisible(' + i + ', ' + j + ');');
} else child = document.createElement('strong');
child.appendChild(document.createTextNode(label));
tab.appendChild(child);
return tab;
}
switchable.getVisible = function (i) {
var visible = this[i].getAttribute('visiblesection');
if (visible) visible = parseInt(visible);
if (visible === null || isNaN(visible)) {
visible = 0;
this[i].setAttribute('visiblesection', visible.toString());
}
return Math.max(0, Math.min(visible, this[i].sections.length - 1));
}
switchable.updateVisible = function (i) {
if (isNaN(parseInt(i))) {
// update all switchables if no valid number given
for (var i = 0; i < this.length; i++)
this.updateVisible(i);
} else {
var visible = this.getVisible(i);
var sections = this[i].sections;
var tc = this[i].tabContainer;
var currentTab;
for (var j = 0; j < sections.length; j++) {
if (j == visible) {
// change 'show' link
currentTab = this.createTab(sections[j].sectionName,
false);
currentTab.j = j;
tc.replaceChild(currentTab, tc.tabs[j]);
// show section if hidden
if (sections.hidden[j] !== undefined) {
this[i].appendChild(sections[j]);
sections.hidden[j] = undefined;
}
} else {
// change 'show' link
if (tc.currentTab !== undefined && tc.currentTab.j == j)
tc.replaceChild(tc.tabs[j], tc.currentTab);
// hide section if visible
if (sections.hidden[j] === undefined)
sections.hidden[j] = this[i].removeChild(sections[j]);
}
}
if (currentTab !== undefined) tc.currentTab = currentTab;
}
}
switchable.setVisible = function (i, j) {
this[i].setAttribute('visiblesection', j);
this.updateVisible(i);
}
// initialise
for (var i = 0; i < switchable.length; i++) {
var sections = getElementsByClassName('switch', switchable[i]);
sections.hidden = Array(sections.length);
switchable[i].sections = sections;
// create show/hide anchors
var tabContainer = document.createElement('ul');
switchable[i].appendChild(tabContainer);
switchable[i].tabContainer = tabContainer;
tabContainer.tabs = [];
for (var j = 0; j < sections.length; j++) {
// re-append section to place it after links
switchable[i].appendChild(sections[j]);
// use section's name if it has one
var sectionName = sections[j].getAttribute('sectionname');
if (!sectionName) sectionName = j.toString();
sections[j].sectionName = sectionName;
// create anchor
var tab = switchable.createTab(
switchableAnchorPrefix + sectionName, true, i, j);
tabContainer.appendChild(tab);
tabContainer.tabs.push(tab);
}
}
this.switchable = switchable;
// initial show/hide
switchable.updateVisible();
}
function getElementsByClassName (cls, node) {
if (node === undefined) node = document;
var result = [];
var pool = node.getElementsByTagName("*");
var re = new RegExp('\\b' + cls + '\\b');
for (var i = 0; i < pool.length; i++)
if (re.test(pool[i].className)) result.push(pool[i]);
return result;
}
// initialise on page load
if (window.addEventListener !== undefined)
addEventListener('load', initialiseSwitchable, false);
else if (window.attachEvent !== undefined)
attachEvent('onload', initialiseSwitchable);
else onload = initialiseSwitchable;