MediaWiki:Monobook.js
Kia mōhio koe: I muri i te tiaki, whakawātea te keteroki (whakatōpūtanga rorohiko) o tō matapihi ipurangi kia puta ai ngā rerekētanga katoa. Mozilla/Safari/Konqueror: pēhi i te pātuhi Shift i a koe e pāwhiri ana i te Uta anō (pēhi rānei i te Ctrl-Shift-R), IE: pēhi Ctrl-F5, Opera: pēhi F5.
if (window.showModalDialog && document.compatMode && document.compatMode == "CSS1Compat")
{
var oldWidth;
var docEl = document.documentElement;
function fixIEScroll()
{
if (!oldWidth || docEl.clientWidth > oldWidth)
doFixIEScroll();
else
setTimeout(doFixIEScroll, 1);
oldWidth = docEl.clientWidth;
}
function doFixIEScroll() {
docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
}
if (window.attachEvent) {
document.attachEvent("onreadystatechange", fixIEScroll);
window.attachEvent("onresize", fixIEScroll);
}
}
function LinkFA()
{
// iterate over all <span>-elements
for(var i=0; a = document.getElementsByTagName("span")[i]; i++) {
// if found a FA span
if(a.className == "FA") {
// iterate over all <li>-elements
for(var j=0; b = document.getElementsByTagName("li")[j]; j++) {
// if found a FA link
if(b.className == "interwiki-" + a.id && b.className.indexOf("badge-featuredarticle") === -1 && b.className.indexOf("badge-goodarticle") === -1) {
b.style.padding = "0 0 0 16px";
b.style.backgroundImage = "url('//upload.wikimedia.org/wikipedia/en/6/60/LinkFA-star.png')";
b.style.backgroundRepeat = "no-repeat";
b.title = "This article has gained featured status";
}
}
}
}
}
jQuery(document).ready(LinkFA);
// ============================================================
// BEGIN Dynamic Navigation Bars (experimantal)
// set up the words in your language
var NavigationBarHide = '[ Hide ]';
var NavigationBarShow = '[ Show ]';
// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = 1;
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar)
{
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'none';
}
if (NavChild.className == 'NavContent') {
NavChild.style.display = 'none';
}
}
NavToggle.firstChild.data = NavigationBarShow;
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'block';
}
if (NavChild.className == 'NavContent') {
NavChild.style.display = 'block';
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
var indexNavigationBar = 0;
// iterate over all < div >-elements
for(
var i=0;
NavFrame = document.getElementsByTagName("div")[i];
i++
) {
// if found a navigation bar
if (NavFrame.className == "NavFrame") {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(NavigationBarHide);
NavToggle.appendChild(NavToggleText);
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for(
var j=0;
j < NavFrame.childNodes.length;
j++
) {
if (NavFrame.childNodes[j].className == "NavHead") {
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for(
var i=1;
i<=indexNavigationBar;
i++
) {
toggleNavigationBar(i);
}
}
}
jQuery(document).ready(createNavigationBarToggleButton);
// END Dynamic Navigation Bars
// ============================================================
if (mw.config.get('wgIsMainPage')) {
mw.util.addCSS('#siteSub, #contentSub, h1.firstHeading { display: none!important; } #content, #content div.thumb, #p-cactions li a, #p-cactions li a:hover, #p-cactions li.selected a { background: #fff!important; }');
}
function autofocus() {
if (document.getElementById("wpTextbox1") && document.getElementById("newarticletext") && document.getElementById("ca-nstab-main") )
{
document.editform.wpTextbox1.focus();
}
}
jQuery(document).ready(autofocus);
/* add menu for selecting subsets of secial characters */
//if(document.title.indexOf("Editing ") == 0) {
//document.write('<script type="text/javascript" src="'
// + '//en.wikipedia.org/w/index.php?title=MediaWiki:Charset.js'
// + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//}
/*
* Implements language selection for multilingual elements
*
* In certain environments, it's not feasible to neatly box away each
* different language into its own section of the site. By marking elements
* multilingual, you can emulate this behavior by only displaying only the
* message in the user's language. This reduced the "Tower of Babel" effect.
*
* @author Edward Z. Yang (Ambush Commander)
* @version $Id: language_select.js 888 2006-06-10 19:41:35Z Edward $
*/
/* Configuration: */
// in your monobook.js, set ls_enable = false to stop the javascript
// maybe it should be cookie configurable. However, you can achieve
// something almost to this effect through cookie settings
var ls_enable = true;
// the cookie name we use to stash the info. Generally shouldn't be changed.
var ls_cookie = 'metawiki_language_js';
// link to the language select page
var ls_help_url = '//meta.wikimedia.org/wiki/Meta:Language_select';
// define some meta-variables
var ls__first = true; // the first iteration?
// node compatability fix
if (!window.Node) {
var Node = {
ELEMENT_NODE : 1,
ATTRIBUTE_NODE: 2,
TEXT_NODE: 3,
COMMENT_NODE: 8,
DOCUMENT_NODE: 9,
DOCUMENT_FRAGMENT_NODE: 11
};
}
// autodetects a browser language
function ls_getBrowserLanguage() {
var language;
// borrowed from Wikimedia's site error notice
// find the language
if (navigator.userLanguage) {
// use the user's preferred language (non-Gecko)
language = navigator.userLanguage;
} else if (navigator.appName == 'Netscape') {
// use the only language information available to Gecko
language = navigator.language;
} else {
// get the browser language information in non-Gecko browsers
// (IE, Opera, Konqueror)
language = navigator.browserLanguage;
}
return language;
}
// grabs language from cookie
function ls_getCookieLanguage() {
var allcookies = document.cookie;
var marker = ls_cookie + '=';
var pos = allcookies.indexOf(marker);
// cookie isn't set, so no behavior defined
if (pos === -1) return null;
// cookie is set
var start = pos + marker.length;
var end = allcookies.indexOf(';', start);
if (end == -1) end = allcookies.length;
var raw = allcookies.substring(start,end);
var value = unescape(raw);
return value;
}
// sets a new language to the cookie
function ls_setCookieLanguage(language) {
var today = new Date();
var expiry = new Date(today.getUTCFullYear() + 30, 1);
document.cookie = ls_cookie + '=' + escape(language) + '; expires=' + expiry.toGMTString();
}
// grabs the ISO 639 language code based
// on either the browser or a supplied cookie
// return of "mul" will display all available strings
function ls_getLanguage() {
var language = '';
// Priority:
// 1. Cookie
// 2. Browser autodetection
// grab according to cookie
language = ls_getCookieLanguage();
// grab according to browser if none defined
if (!language) {
language = ls_getBrowserLanguage();
}
// inflexible: can't accept multiple languages
// remove dialect/region code, leaving only the ISO 639 code
var length;
// possible bug: supposedly the language string could be en_US
// switch to regexps when we get the chance
if ((length = language.indexOf('-')) !== -1) {
language = language.substr(0, length);
}
return language;
}
// walks all child elements and finds all elements with multilingual in them
function ls_getAllMultilingualElements(n) {
var elements = new Array();
// possible bug if we have a classname that includes the word multilingual
// but it's unlikely
if (n.className && n.className.indexOf('multilingual') != -1) {
elements = elements.concat(n);
}
var children = n.childNodes;
for(var i=0; i < children.length; i++) {
if (children[i].nodeType !== Node.ELEMENT_NODE) continue;
elements = elements.concat(ls_getAllMultilingualElements(children[i]));
}
return elements;
}
// walks a hash and hides all non-matching languages
function ls_hideAllExcept(lang_element_hash, language) {
for (var n in lang_element_hash) {
if (n == language) {
lang_element_hash[n].style.display = '';
} else {
lang_element_hash[n].style.display = 'none';
}
}
}
// walks a hash and shows all languages
function ls_showAll(lang_element_hash) {
for (var n in lang_element_hash) {
if (lang_element_hash[n].style.display) {
lang_element_hash[n].style.display = '';
}
}
}
// build widget for changing the language cookie
function ls_buildWidget(language) {
// set up the floating form
var form = document.createElement('form');
form.className = 'lang_info';
form.onsubmit = function() {
if (this.elements[2].ls_mul_flag) {
this.elements[2].ls_mul_flag = false;
this.elements[0].value = 'mul';
}
ls_setCookieLanguage(this.elements[0].value);
ls_applyLanguageSelect(); // re-draw elements
return false; // don't perform action
};
form.appendSpace = function() {
this.appendChild(document.createTextNode(' '));
};
// link to language select description page
var link = document.createElement('a');
link.href = ls_help_url;
link.className = 'ls_link';
link.appendChild(document.createTextNode('Language select:'));
form.appendChild(link);
form.appendSpace();
// input box for the language
var input = document.createElement('input');
input.setAttribute('type', 'text');
input.setAttribute('size', '2');
input.setAttribute('maxlength', '3');
input.onclick = function() {
this.select();
};
input.className = 'ls_input';
input.value = language;
form.appendChild(input);
form.appendSpace();
// save button
var submit = document.createElement('input');
submit.setAttribute('type', 'submit');
submit.value = 'Save';
submit.className = 'ls_save';
form.appendChild(submit);
form.appendSpace();
// show all button
// equivalent to setting input box to "mul" and pressing save
var showall = document.createElement('input');
showall.setAttribute('type', 'submit');
showall.value = 'Show all';
showall.onclick = function() {
this.ls_mul_flag = true;
};
form.appendChild(showall);
return form;
}
// main body of the function
function ls_applyLanguageSelect() {
// possible site for cookie checking to disable language select
if (!ls_enable) return;
// grab the language we're striving for
var language = ls_getLanguage();
// grab the body element (only one)
var body = document.getElementsByTagName('body')[0];
// grab an array of multilingual elements
var mls = ls_getAllMultilingualElements(body);
// this will get overwritten many times, temporary variable
var form, language_element_hash;
// iterate through all those elements
for (var i = 0; i < mls.length; i++) {
var ml = mls[i]; // the current multilingual container
var ml_c = ml.childNodes; // children of the container
// if it's the first iteration...
if (ls__first) {
form = ls_buildWidget(language);
ml.appendChild(form, ml_c[0]);
} else {
// update widget
form = ml_c[ml_c.length - 1]; // form is last element
form.elements[0].value = language;
}
form.elements[0].style.background="#FFF";
// tells us whether or not to blindly perform the keep
var message_exists = false;
// iterate through all languages and set up a hash
// with references to each of the language nodes
lang_element_hash = new Object();
for (var j = 0; j < ml_c.length; j++) {
var n = ml_c[j];
if (n.nodeType != Node.ELEMENT_NODE) continue; // skip non-elements
if (!n.lang) continue; // skip non-language specific elements
if (n.lang.indexOf(language) === 0) {
// it turns out our language is here
message_exists = true;
}
lang_element_hash[n.lang] = n;
}
// if a preferred language was kept, do quickest processing
if (message_exists) {
ls_hideAllExcept(lang_element_hash, language);
continue;
}
// otherwise, nothing happened, this means that it wasn't found
// if it's not the first time, repaint all of them
if (!ls__first) {
ls_showAll(lang_element_hash);
}
if (language != 'mul') {
form.elements[0].style.background="#FCC";
}
}
// we've already processed once
ls__first = false;
}
$(document).ready(ls_applyLanguageSelect);
/*
*/