د "ميډياويکي:Common.js" د بڼو تر مېنځ توپير
Appearance
Content deleted Content added
د "←Any JavaScript here will be loaded for all users on every page load.: ←</pre> ==JavaScript standard library== <pre>: ←</pre> ===importScript=== <pre>: /..." تورو مخ جوړ شو |
د سمون لنډیز نسته |
||
۶۰۵ کرښه: | ۶۰۵ کرښه: | ||
return false; |
return false; |
||
}}, |
}}, |
||
(status ? ' |
(status ? 'پټول ' : 'ښکاره کول ') + category)); |
||
for (var i=0; i < this.buttons.childNodes.length; i++) { |
for (var i=0; i < this.buttons.childNodes.length; i++) { |
||
if (this.buttons.childNodes[i].id < newToggle.id) { |
if (this.buttons.childNodes[i].id < newToggle.id) { |
||
۶۲۳ کرښه: | ۶۲۳ کرښه: | ||
return; |
return; |
||
} |
} |
||
document.getElementById('p-visibility-' + category).innerHTML = (status ? ' |
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'پټول ' : 'ښکاره کول ') + category; |
||
}, |
}, |
||
۶۳۵ کرښه: | ۶۳۵ کرښه: | ||
} |
} |
||
} |
} |
||
document.getElementById('p-visibility-' + category).innerHTML = (status ? ' |
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'پټول ' : 'ښکاره کول ') + category; |
||
var current = getCookie('Visibility'); |
var current = getCookie('Visibility'); |
||
if (!current) |
if (!current) |
د ۰۳:۵۱, ۱۲ نومبر ۲۰۱۲ بڼه
/* Any JavaScript here will be loaded for all users on every page load. */
/*</pre>
==JavaScript standard library==
<pre>*/
/*</pre>
===importScript===
<pre>*/
/**
* importScript inserts a javascript page either
* from Wiktionary: importScript('User:Connel MacKensie/yetanother.js');
* from another Wikimedia wiki: importScript('User:Lupin/insane.js','en.wikipedia.org');
*
* by specifying the third argument, an oldid can be passed to ensure that updates to the script are not included.
* by specifying the fourth argument, a specific version of JavaScript can be declared.
*
* based on [[w:MediaWiki:Common.js]] 2007-11-29
**/
function importScript(page, wiki, oldid, jsver) {
//Default to local
if ( !wiki ) {
wiki=wgScript;
} else {
wiki='//'+escape(wiki)+'/w/index.php';
}
var url = wiki + '?title='
+ mw.util.wikiUrlencode( page )
+ (oldid ? '&oldid='+encodeURIComponent( oldid ) : '')
+ '&action=raw&ctype=text/javascript';
//Only include scripts once
if ( loadedScripts[url] ) {
return false;
}
loadedScripts[url] = true;
var scriptElem = document.createElement("script");
scriptElem.setAttribute("src",url);
scriptElem.setAttribute("type", jsver ? "application/javascript;version=" + jsver : "text/javascript");
document.getElementsByTagName("head")[0].appendChild(scriptElem);
return true;
}
/*</pre>
=== DOM creation ===
<pre>*/
/**
* Create a new DOM node for the current document.
* Basic usage: var mySpan = newNode('span', "Hello World!")
* Supports attributes and event handlers*: var mySpan = newNode('span', {style:"color: red", focus: function(){alert(this)}, id:"hello"}, "World, Hello!")
* Also allows nesting to create trees: var myPar = newNode('p', newNode('b',{style:"color: blue"},"Hello"), mySpan)
*
* *event handlers, there are some issues with IE6 not registering event handlers on some nodes that are not yet attached to the DOM,
* it may be safer to add event handlers later manually.
**/
function newNode(tagname){
var node = document.createElement(tagname);
for( var i=1;i<arguments.length;i++ ){
if(typeof arguments[i] == 'string'){ //Text
node.appendChild( document.createTextNode(arguments[i]) );
}else if(typeof arguments[i] == 'object'){
if(arguments[i].nodeName){ //If it is a DOM Node
node.appendChild(arguments[i]);
}else{ //Attributes (hopefully)
for(var j in arguments[i]){
if(j == 'class'){ //Classname different because...
node.className = arguments[i][j];
}else if(j == 'style'){ //Style is special
node.style.cssText = arguments[i][j];
}else if(typeof arguments[i][j] == 'function'){ //Basic event handlers
newNode.addEventHandler(node, j, arguments[i][j]);
}else{
node.setAttribute(j,arguments[i][j]); //Normal attributes
}
}
}
}
}
node.addEventHandler =
function(eventName, handler)
{ newNode.addEventHandler(this, eventName, handler); };
return node;
}
newNode.addEventHandler = function(node, eventName, handler)
{
try{ node.addEventListener(eventName,handler,false); //W3C
}catch(e){try{ node.attachEvent('on'+eventName,handler,"Language"); //MSIE
}catch(e){ node['on'+eventName]=handler; }} //Legacy
};
/*</pre>
=== CSS ===
<pre>*/
/**
* Cross browser CSS - yurk
* @deprecated: Use mw.util.addCSS() instead
*/
var p_styleSheet=false;
window.addCSSRule = function (selector,cssText){
mw.util.addCSS( selector+'{' + cssText + '}' );
}
/*</pre>
===Cookies===
<pre>
*/
/* @deprecated: Use $.cookie instead */
function setCookie(cookieName, cookieValue) {
var today = new Date();
var expire = new Date();
var nDays = 30;
expire.setTime( today.getTime() + (3600000 * 24 * nDays) );
document.cookie = cookieName + "=" + escape(cookieValue)
+ ";path=/"
+ ";expires="+expire.toGMTString();
// We need to delete the more specific paths for the next while. Safe to remove this by July 2011, if not before.
document.cookie = cookieName + "=" + ";path=/w" +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
document.cookie = cookieName + "=" + ";path=/wiki" +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
function getCookie(cookieName) {
var start = document.cookie.indexOf( cookieName + "=" );
if ( start == -1 ) return "";
var len = start + cookieName.length + 1;
if ( ( !start ) &&
( cookieName != document.cookie.substring( 0, cookieName.length ) ) )
{
return "";
}
var end = document.cookie.indexOf( ";", len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}
function deleteCookie(cookieName) {
if ( getCookie(cookieName) ) {
document.cookie = cookieName + "=" + ";path=/" +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
}
/*</pre>
==Wiktionary Customisation==
<pre>*/
if ( document.getElementById('footer') ) {
jQuery.ready()
}
//initialize the storage for script options. Gadgets that set script
//options should also include this line as they are loaded before us.
if ( typeof WiktScriptPrefs == 'undefined') {
WiktScriptPrefs = {};
}
/*</pre>
===[[MediaWiki:Youhavenewmessages]] to display differently for non-newbies with JS than for others===
<pre>*/
/* Suspected unresponsive page culprit: see the GP (Nov. 2010, "Blocking script execution on each page") */
/* if (wgUserGroups && wgUserGroups.join("").indexOf("autoconfirmed") > -1)
{
addCSSRule(".msgfornewbies", "display: none");
}else{
addCSSRule(".msgfornonnewbies", "display: none");
} */
/*</pre>
===[[WT:FEED]]===
<pre>*/
if ( !wgUserName ) {
importScript('User:Conrad.Irwin/feedback.js');
}
/*</pre>
===WT:PREFS===
<pre>*/
if ( getCookie('WiktPrefs') || mw.config.get('wgPageName') == "Wiktionary:Per-browser_preferences") {
//importScript('User:Connel_MacKenzie/custom.js');
importScript('User:Hippietrail/custom.js');
}
/*</pre>
===Edit page javascript===
<pre>*/
$(document).ready( function() {
if ( wgAction == 'edit' || wgAction == 'submit' || document.getElementById('editpage-specialchars') ) {
importScript('MediaWiki:Edit.js');
}
});
/*</pre>
===Page specific extensions===
<pre>*/
/*</pre>
====Wiktionary:Main Page====
<pre>*/
// Hide the title and "Redirected from" (maybe we should keep the redirected from so's people update their bookmarks ;)
// Broken in IE!
if ( wgPageName == 'Wiktionary:Main_Page' && !( wgAction == 'view' || wgAction == 'submit' ) ){
mw.util.addCSS( '.firstHeading { display: block !important; }' );
mw.util.addCSS( '#contentSub { display: inline !important; }' );
}
if (wgPageName == 'Wiktionary:Main_Page') {
$(function () {
mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/Wiktionary#List_of_Wiktionaries',
'Complete list', 'interwiki-completelist', 'Complete list of Wiktionaries');
});
}
/*</pre>
====Special:Search====
<pre>*/
if ( wgPageName == 'Special:Search') {
importScript('MediaWiki:SpecialSearch.js');
}
addOnloadHook(function () { if(document.getElementById('preloadGuide')) {
importScript('MediaWiki:SpecialSearch.js');
}});
/*</pre>
====Unsupported titles====
<pre>*/
function unsupp() {
//if (wgCanonicalNamespace != 'Appendix') return;//pages have been moved to mainspace, so commenting out this line
if (wgTitle.indexOf('Unsupported titles/') != 0) return;
string="";
if (document.getElementById('unsupportedpage')) {string=document.getElementById('unsupportedpage').title;};
if (string=="") {string="["+wgTitle.slice(19)+"]";};
document.getElementById('firstHeading').innerHTML = string;
};
addOnloadHook(unsupp);
/*</pre>
====Custom search engines====
<pre>*/
if( wgPageName=='Help:Tips_and_tricks' ){
importScript('MediaWiki:CustomSearch.js');
}
/*</pre>
====Turn headings in comments into real headings on JavaScript source pages====
<pre>*/
else if ((wgNamespaceNumber == 2 || wgNamespaceNumber == 8) && wgTitle.lastIndexOf('.js') != -1 && wgAction == 'view') {
importScript('MediaWiki:JavascriptHeadings.js');
}
/*</pre>
====Geonotice====
<pre>*/
/*Ended December 2009
else if (wgPageName == "Special:Watchlist") //watchlist scripts
{
importScriptURI('http://toolserver.org/~para/geoip.fcgi');
addOnloadHook(function() { importScriptURI('http://en.wiktionary.org/w/index.php?title=MediaWiki:Geonotice.js&action=raw&ctype=text/javascript&maxage=3600'); });
}
*/
/*</pre>
====New-section redirects====
<pre>*/
// This allows the new-section link (the "+" tab) to point to a different
// URL, as specified by the page (so that, for example, the new-section link
// for the Grease pit will add a new section to the appropriate monthly
// subpage):
importScript('MediaWiki:NewSectionRedirects.js');
/*</pre>
===Add editor.js for editing translations===
<pre>*/
importScript('User:Conrad.Irwin/editor.js');
/*</pre>
===Make tabs for citations-pages and template-documentation-pages===
<pre>*/
function citations_tab(){
var texts = {
// tab id : [ label, hover-text, access-key (c if tab comes first, 3 if last) ]
'ca-nstab-main': ['Entry', 'View the dictionary entry', 'c'],
'ca-nstab-citations': ['Citations', 'View the citations page', '3'],
'ca-nstab-template': ['Template', 'View the template', 'c'],
'ca-nstab-documentation': ['Documentation', 'View the documentation', '3']
}
var lookup = new Object(); // {page-title: tab-node} these are looked up and changed to red if missing.
// Returns [id-of-portlet, node-to-insert-before or null] for inserting the tab.
function get_insert_position(id) {
var portlet = document.getElementById('p-namespaces') ? 'p-namespaces' : 'p-cactions';
var insbef = null;
if (texts[id][2] == 'c') { // otherwise '3'
insbef = document.getElementById(portlet).getElementsByTagName('ul')[0].firstChild;
} else if (portlet == 'p-cactions' ) { // 'last' in Monobook means "before Edit"
var insbef = document.getElementById('ca-edit');
if(! insbef) insbef = document.getElementById('ca-viewsource');
}
return [portlet, insbef];
}
// Add a new namespace with addPortletLink using the lookup table above.
function add_namespace_tab(page, id) {
var insert = get_insert_position(id);
mw.util.addPortletLink( insert[0], mw.util.wikiGetlink( page ), texts[id][0], id, texts[id][1], texts[id][2], insert[1] );
if (page == wgPageName) { // Can by-pass lookup
var tab = document.getElementById(id);
tab.className = 'selected';
if (wgArticleId == 0) {
make_tab_red(tab);
}
} else { // lookup the redness with the ajax below
lookup[page]=document.getElementById(id);
}
}
// Replace the two current tabs with new ones, used when in the third namespace.
function change_main_tabs(old_id, new_id, talk_page) {
// Remove old tab.
var ct = document.getElementById(old_id);
ct.parentNode.removeChild(ct);
// Add new tab.
add_namespace_tab(wgPageName, new_id);
// Change destination of talk tab.
var dt = document.getElementById('ca-talk');
var a = dt.getElementsByTagName('a')[0]
a.setAttribute('href', mw.util.wikiGetlink( talk_page ));
lookup[talk_page] = dt;
if(dt.className) dt.className = dt.className.replace('new','');
}
// Change a blue-link to a red-link
function make_tab_red(tab){
tab.className = tab.className+' new';
var a = tab.getElementsByTagName('a')[0];
var href = a.getAttribute('href');
a.setAttribute('href',href+(href.indexOf('?')>0?'&':'?')+'action=edit&redlink=1');
}
if( wgCanonicalNamespace == 'Citations' ){
change_main_tabs('ca-nstab-citations', 'ca-nstab-citations', 'Talk:' + wgTitle);
add_namespace_tab(wgTitle, 'ca-nstab-main');
}else if( wgCanonicalNamespace == '' || wgCanonicalNamespace == 'Talk' ){
add_namespace_tab('Citations:'+wgTitle, 'ca-nstab-citations');
}else if( wgCanonicalNamespace == 'Template' && /\/doc$/.test(wgTitle) ){
var baseTitle = wgTitle.replace(/\/doc$/, "");
change_main_tabs('ca-nstab-template', 'ca-nstab-documentation', 'Template talk:' + baseTitle);
add_namespace_tab('Template:' + baseTitle, 'ca-nstab-template');
}else if( wgCanonicalNamespace == 'Template' || wgCanonicalNamespace == 'Template_talk' ){
add_namespace_tab('Template:'+wgTitle+'/doc', 'ca-nstab-documentation');
}else{ //Nothing to see here...
return false;
}
//Now check for red pages - would be nicer to use MwJsApi() from editor.js, but possible race-condition
// [[mw:RL/JD]]: sajax_init_object is deprecated. Use $.ajax, $.getJSON and/or $.get
var ajaxer = sajax_init_object();
if(! ajaxer) return false;
var url = wgScriptPath+ '/api.php?format=json&action=query&prop=info&titles=';
var spl = '';
for(var page in lookup){
url+=spl+encodeURIComponent(page);
spl='|';
}
ajaxer.onreadystatechange = function(){
if( ajaxer.readyState == 4 ){
if( ajaxer.status == 200 ){
var resps = eval('(' + ajaxer.responseText + ')');
for (var x in resps.query.pages) {
if (Number(x) < 0) {
make_tab_red(lookup[resps.query.pages[x].title]);
}
}
}
}
}
ajaxer.open("GET", url);
ajaxer.send('');
}
jQuery(document).ready( citations_tab );
/*</pre>
===Import newentrywiz.js===
<pre>*/
jQuery(document).ready(function(){
if(document.getElementById('necblah')){
importScript('User:Yair rand/newentrywiz.js');
}
});
/*</pre>
===Import adddefinition.js===
<pre>*/
importScript('User:Yair rand/adddefinition.js');
/*</pre>
===Import rhymesedit.js===
<pre>*/
wgNamespaceNumber == 106 && importScript("User:Yair rand/rhymesedit.js");
/*</pre>
===Import Targeted Translations===
<pre>*/
importScript("User:Yair rand/TargetedTranslations.js");
/*</pre>
==URL Fixes==
<pre>*/
/**
* doRedirect will redirect if a did you mean box is found, and create a
* "redirected from X" if a rdfrom is passed in the get parameters
* The first half is an ugly workaround for Bugzilla:3339, :(
* The second half is an ugly workaround for not having serverware support :(
**/
/*</pre>
===Did you mean ____ redirects===
<pre>*/
function doRedirect() {
// REDIRECTED FROM
if( window.location.href.indexOf('rdfrom=') != -1 ) {
var wiktDYMfrom = decodeURIComponent(window.location.href.replace(/^(.+[&\?]rdfrom=([^&]+).*|.*)?$/,"$2"));
jQuery('#siteSub').after(
newNode('div', {id: 'contentSub'}, '(Auto-redirected from ',
newNode('tt', newNode('a', {href: mw.util.wikiGetlink(wiktDYMfrom) + '?redirect=no', 'class': 'new'}, wiktDYMfrom)),
')'));
} else {
// DID YOU MEAN
var target = jQuery('#did-you-mean a').html(),
pagetitle = jQuery('h1').first().text().trim();
if( target && target != pagetitle
&& !window.location.href.match(/[&\?]redirect=no|[&\?]action=(?!view)/)
&& (getCookie('WiktionaryDisableAutoRedirect') != 'true')
&& wgArticleId === 0
&& !/Redirected from/.test(jQuery('#contentSub').html())) {
document.location = mw.util.wikiGetlink( target ) + '?rdfrom=' + mw.util.wikiUrlencode( pagetitle );
}
}
// Random page in a given language
document.location.toString().replace(/[?&]rndlang=([^&#]+)[^#]*(?:#(.+))?/, function (m, lang, headlang) {
var script = 'http://toolserver.org/~hippietrail/randompage.fcgi';
var insert = document.getElementById('contentSub');
if (headlang) {
var heading = document.getElementById(headlang);
if (heading) heading = heading.parentNode;
if (heading) {
insert = newNode('div', {style: 'font-size: 84%; line-height: 1.2em;'});
heading.parentNode.insertBefore(insert, heading.nextSibling)
}
}
if (!insert || insert.innerHTML != "") return;
insert.appendChild(newNode('span', {style: 'color: #888;'}, "Another ",
newNode('a', {href: script + '?langs=1'}, "Random"), " word in ",
newNode('a', {href: script + '?langname=' + lang}, decodeURIComponent(lang))
));
});
}
addOnloadHook(doRedirect);
/*</pre>
===Fix Wikified section titles===
<pre>*/
addOnloadHook(function () {
// {temp|template}
if (/\.7B\.7Btemp\.7C(.*?)\.7D\.7D/.test(window.location.href)) {
var url=window.location.href.replace(/\.7B\.7Btemp.7C/g, ".7B.7B");
window.location = url;
}
});
addOnloadHook(function () {
if(wgAction != 'edit')
return;
if(! /[?&]section=\d/.test(window.location.href))
return;
var wpSummary = document.getElementById('wpSummary');
if(! wpSummary)
return;
if(wpSummary.value.substr(0, 3) != '/* ')
return;
if(wpSummary.value.substr(wpSummary.value.length - 4) != ' */ ')
return;
wpSummary.value = wpSummary.value.replace(/\{\{temp(late)?\|/g, '{{');
});
/*</pre>
== Visibility toggling ==
<pre>*/
var VisibilityToggles = {
// toggles[category] = [[show, hide],...]; statuses[category] = [true, false,...]; buttons = <li>
toggles: {}, statuses: {}, buttons: null,
// Add a new toggle, adds a Show/Hide category button in the toolbar,
// and will call show_function and hide_function once on register, and every alternate click.
register: function (category, show_function, hide_function) {
var id = 0;
if (!this.toggles[category]) {
this.toggles[category] = [];
this.statuses[category] = [];
} else {
id = this.toggles[category].length;
}
this.toggles[category].push([show_function, hide_function]);
this.statuses[category].push(this.currentStatus(category));
this.addGlobalToggle(category);
(this.statuses[category][id] ? show_function : hide_function)();
return function () {
var statuses = VisibilityToggles.statuses[category];
statuses[id] = !statuses[id]
VisibilityToggles.checkGlobalToggle(category);
return (statuses[id] ? show_function : hide_function)();
}
},
// Add a new global toggle to the side bar
addGlobalToggle: function(category) {
if (document.getElementById('p-visibility-'+category))
return;
if (!this.buttons) {
this.buttons = newNode('ul');
var collapsed = $.cookie("vector-nav-p-visibility") == "false", toolbox = newNode('div', {'class': "portal portlet "+(collapsed?"collapsed":"expanded"), 'id': 'p-visibility'},
newNode('h5', 'Visibility'),
newNode('div', {'class': "pBody body"}, collapsed?undefined:{'style':'display:block;'}, this.buttons)
);
var sidebar = document.getElementById('mw-panel') || document.getElementById('column-one');
var insert = null;
if (insert = (document.getElementById('p-lang') || document.getElementById('p-feedback')))
sidebar.insertBefore(toolbox, insert);
else
sidebar.appendChild(toolbox);
}
var status = this.currentStatus(category);
var newToggle = newNode('li', newNode('a', {
id: 'p-visibility-' + category,
style: 'cursor: pointer',
href: '#visibility-' + category,
click: function(e)
{
VisibilityToggles.toggleGlobal(category);
if (e && e.preventDefault)
e.preventDefault();
else
window.event.returnValue = false;
return false;
}},
(status ? 'پټول ' : 'ښکاره کول ') + category));
for (var i=0; i < this.buttons.childNodes.length; i++) {
if (this.buttons.childNodes[i].id < newToggle.id) {
this.buttons.insertBefore(newToggle, this.buttons.childNodes[i]);
return;
}
}
this.buttons.appendChild(newToggle);
},
// Update the toggle-all buttons when all things are toggled one way
checkGlobalToggle: function(category) {
var statuses = this.statuses[category];
var status = statuses[0];
for (var i = 1; i < statuses.length; i++) {
if (status != statuses[i])
return;
}
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'پټول ' : 'ښکاره کول ') + category;
},
// Toggle all un-toggled elements when the global button is clicked
toggleGlobal: function(category) {
var status = document.getElementById('p-visibility-' + category).innerHTML.indexOf('Show ') == 0;
for (var i = 0; i < this.toggles[category].length; i++ ) {
if (this.statuses[category][i] != status) {
this.toggles[category][i][status ? 0 : 1]();
this.statuses[category][i] = status;
}
}
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'پټول ' : 'ښکاره کول ') + category;
var current = getCookie('Visibility');
if (!current)
current = ";";
current = current.replace(';' + category + ';', ';');
if (status)
current = current + category + ";";
setCookie('Visibility', current);
},
currentStatus: function(category) {
if (window.location.hash.toLowerCase().split('_')[0] == '#' + category.toLowerCase())
return true;
if (window.location.href.search(/[?](.*&)?hidecats=/) > 0)
{
var hidecats = window.location.href;
hidecats = hidecats.replace(/^[^?]+[?]((?!hidecats=)[^&]*&)*hidecats=/, '');
hidecats = hidecats.replace(/&.*/, '');
hidecats = hidecats.split(',');
for (var i = 0; i < hidecats.length; ++i)
if (hidecats[i] == category || hidecats[i] == 'all')
return false;
else if (hidecats[i] == '!' + category || hidecats[i] == 'none')
return true;
}
if (getCookie('WiktionaryPreferencesShowNav') == 'true')
return true;
if (getCookie('Visibility').indexOf(';' + category + ';') >= 0)
return true;
// TODO check category-specific cookies
return false;
}
};
/*</pre>
=== NavBars ===
<pre>*/
var NavigationBarHide = 'hide ▲';
var NavigationBarShow = 'show ▼';
function NavToggleCategory(navFrame)
{
var table = navFrame.getElementsByTagName('table')[0];
if (table && table.className == "translations")
return "translations";
var heading = navFrame.previousSibling;
while (heading) {
if (/[hH][4-6]/.test(heading.nodeName)) {
if (heading.getElementsByTagName('span')[1])
heading = heading.getElementsByTagName('span')[1];
else
heading = heading.getElementsByTagName('span')[0];
return $(heading).text().toLowerCase()
// jQuery's .text() is inconsistent about whitespace:
.trim().replace(/\s+/g, ' ')
// remove numbers added by the "Auto-number headings" pref:
.replace(/^[1-9][0-9.]+ ?/, '');
}
else if (/[hH][1-3]/.test(heading.nodeName))
break;
heading = heading.previousSibling;
}
return "other boxes";
};
function createNavToggle(navFrame){
var navHead, navToggle, navContent;
for (var j=0; j < navFrame.childNodes.length; j++) {
var div = navFrame.childNodes[j];
switch (div.className) {
case 'NavHead':
navHead = div;
break;
case 'NavContent':
navContent = div;
break;
}
}
if (!navHead || !navContent)
return;
// Step 1, don't react when a subitem is clicked.
for (var i=0; i<navHead.childNodes.length; i++) {
var child = navHead.childNodes[i];
if (child.nodeName == "A") {
child.onclick = function (e)
{
if (e && e.stopPropagation)
e.stopPropagation();
else
window.event.cancelBubble = true;
}
}
}
// Step 2, toggle visibility when bar is clicked.
// NOTE This function was chosen due to some funny behaviour in Safari.
navToggle = newNode('a', {href: 'javascript:(function(){})()'}, '');
navHead.insertBefore(newNode('span', {'class': 'NavToggle'}, '[', navToggle, ']'), navHead.firstChild);
navHead.style.cursor = "pointer";
navHead.onclick = VisibilityToggles.register(NavToggleCategory(navFrame),
function show() {
navToggle.innerHTML = NavigationBarHide;
if (navContent)
navContent.style.display = "block";
},
function hide() {
navToggle.innerHTML = NavigationBarShow;
if (navContent)
navContent.style.display = "none";
});
};
addOnloadHook( function ()
{
var divs = $(".NavFrame");
for (var i=0; i<divs.length; i++) {
// NOTE: some templates use a class of NavFrame for the style, but for legacy reasons, are not NavFrames
if (divs[i].className == "NavFrame") {
createNavToggle(divs[i]);
}
}
});
/*</pre>
===Hidden Quotes===
<pre>*/
function setupHiddenQuotes(li)
{
var HQToggle, liComp;
var HQShow = 'quotations ▼';
var HQHide = 'quotations ▲';
for (var k = 0; k < li.childNodes.length; k++) {
// Look at each component of the definition.
liComp = li.childNodes[k];
// If we find a ul or dl, we have quotes or example sentences, and thus need a button.
if (/^(ul|UL)$/.test(liComp.nodeName)) {
HQToggle = newNode('a', {href: 'javascript:(function(){})()'}, '');
li.insertBefore(newNode('span', {'class': 'HQToggle'}, ' [', HQToggle, ']'), liComp);
HQToggle.onclick = VisibilityToggles.register('quotations',
function show() {
HQToggle.innerHTML = HQHide;
for (var child = li.firstChild; child != null; child = child.nextSibling) {
if (/^(ul|UL)$/.test(child.nodeName)) {
child.style.display = 'block';
}
}
},
function hide() {
HQToggle.innerHTML = HQShow;
for (var child = li.firstChild; child != null; child = child.nextSibling) {
if (/^(ul|UL)$/.test(child.nodeName)) {
child.style.display = 'none';
}
}
});
break;
}
}
}
addOnloadHook( function ()
{
if (wgNamespaceNumber == 0) {
var ols, lis, li;
// First, find all the ordered lists, i.e. all the series of definitions.
var ols = document.getElementsByTagName('ol');
for(var i = 0; i < ols.length; i++) {
// Then, for every set, find all the individual definitions.
for (var j = 0; j < ols[i].childNodes.length; j++) {
li = ols[i].childNodes[j];
if (li.nodeName.toUpperCase() == 'LI') {
setupHiddenQuotes(li);
}
}
}
}
});
/*</pre>
== Interproject links ==
<pre>*/
/*
#########
### ProjectLinks
### by [[user:Pathoschild]] (idea from an older, uncredited script)
### * generates a sidebar list of links to other projects from {{projectlinks}}
#########
*/
function Projectlinks() {
var elements = new Array();
var spans = document.getElementsByTagName('span');
// filter for projectlinks
for (var i=0, j=0; i<spans.length; i++) {
if (spans[i].className == 'interProject') {
elements[j] = spans[i].getElementsByTagName('a')[0];
j++;
}
}
if (j == 0)
return;
// sort alphabetically
function sortbylabel(a,b) {
// get labels
a = a.innerHTML.replace(/^.*<a[^>]*>(.*)<\/a>.*$/i,'$1');
b = b.innerHTML.replace(/^.*<a[^>]*>(.*)<\/a>.*$/i,'$1');
// return sort order
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
elements.sort(sortbylabel);
// Create the list of project links
var pllist = newNode('ul');
for (var i=0; i<elements.length; i++) {
pllist.appendChild(newNode('li', elements[i]));
}
var collapsed = $.cookie("vector-nav-p-projects") == "false";
var projectBox = newNode('div', {'class': 'portlet portal '+(collapsed?"collapsed":"expanded"), id: 'p-projects'},
newNode('h5', 'In other projects'),
newNode('div', {'class': 'pBody body'}, collapsed?undefined:{'style':'display:block;'}, pllist)
);
var insert = document.getElementById('p-tb');
if (!insert)
return;
if (insert.nextSibling)
insert.parentNode.insertBefore(projectBox, insert.nextSibling);
else
insert.parentNode.appendChild(projectBox);
}
addOnloadHook(Projectlinks);
/*</pre>
===Scripts specific to Internet Explorer===
<pre>*/
if (navigator.appName == "Microsoft Internet Explorer")
{
/** Internet Explorer bug fix **************************************************
*
* Description: Fixes IE horizontal scrollbar bug
* Maintainers: [[User:Tom-]]?
*/
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" : "";
}
document.attachEvent("onreadystatechange", fixIEScroll);
document.attachEvent("onresize", fixIEScroll);
// In print IE (7?) does not like line-height
mw.util.addCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
// IE overflow bug
mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
// IE zoomfix
// Use to fix right floating div/table inside tables
mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}');
// Import scripts specific to Internet Explorer 6
if (navigator.appVersion.substr(22, 1) == "6") {
importScript("MediaWiki:Common.js/IE60Fixes.js")
}
}
/*</pre>
===Category page fixes===
<pre>*/
$(document).ready(function($){
var s, c;
if( wgNamespaceNumber === 14 && ( s = document.getElementById("catfix") ) ) {
c = "#" + s.className.split("CATFIX-")[1];
s = s.getElementsByTagName("*")[0] || document.createElement("span");
$("#mw-pages>.mw-content-ltr").find("li>a").each(function(){
var li = this.parentNode, clone = s.cloneNode( false );
li.removeChild( this );
this.setAttribute("href", this.getAttribute("href", 2) + c );
clone.appendChild( this );
li.appendChild( clone );
})
}
})
/*</pre>
===Temporary button for enabling two proposed scripts===
<pre>*/
if ( $.cookie("YRNewStuff") || location.search.indexOf("tabbedlanguages=on") != -1 )
{
importScript("User:Yair rand/editor2.js")
importScript("User:Yair rand/TabbedLanguages2.js")
}
addOnloadHook(function () {
if(document.getElementById('YRNewStuff-enable-button'))
{
document.getElementById('YRNewStuff-enable-button').innerHTML = ""
var toggle = newNode('span', {click: function ()
{
if( $.cookie("YRNewStuff") ){
$.cookie("YRNewStuff", null,{path:"/"})
toggle.innerHTML = "Enable tabbed languages and definition editing options."
}
else{
$.cookie("YRNewStuff",1,{expires:30,path:"/"})
toggle.innerHTML = "Disable tabbed languages and definition editing options."
}
} }, ($.cookie("YRNewStuff")?"Disable":"Enable")+" tabbed languages and definition editing options.")
document.getElementById('YRNewStuff-enable-button').appendChild(toggle);
}
})
/*</pre>
===WT:ES Discussion tool===
<pre>*/
wgPageName == "Wiktionary:Etymology_scriptorium" && importScript("User:Yair rand/DiscussionSandbox.js");