الفرق بين المراجعتين لصفحة: «ميدياويكي:Common.js»
اذهب إلى التنقل
اذهب إلى البحث
وسم: رجوع |
لا ملخص تعديل وسم: مسترجع |
||
سطر ١: | سطر ١: | ||
/* | /* Import more specific scripts if necessary */ | ||
if | |||
if (mw.config.get('wgAction') == "edit" || mw.config.get('wgAction') == "submit" || mw.config.get('wgCanonicalSpecialPageName') == "Upload") //scripts specific to editing pages | |||
{ | |||
} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == | importScript("MediaWiki:Common.js/edit.js"); | ||
importScript( | } | ||
} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) == | else if (mw.config.get('wgCanonicalSpecialPageName') == "Watchlist") //watchlist scripts | ||
{ | |||
importScript("MediaWiki:Common.js/watchlist.js"); | |||
} | |||
else if (mw.config.get('wgCanonicalSpecialPageName') == "Search") //scripts specific to Special:Search | |||
{ | |||
importScript("MediaWiki:Common.js/search.js"); | |||
} | } | ||
/** Sysop Javascript ******************************************************* | |||
* | |||
* Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]]. | |||
*/ | |||
function sysopFunctions() { | |||
if ( mw.config.get('wgUserGroups') && !window.disableSysopJS ) { | |||
for ( var g = 0; g < mw.config.get('wgUserGroups').length; ++g ) { | |||
if ( mw.config.get('wgUserGroups')[g] == "sysop" ) { | |||
importScript( "MediaWiki:Sysop.js" ); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
$(document).ready( sysopFunctions ); | |||
/** WikiMiniAtlas ******************************************************* | |||
* | |||
* Description: WikiMiniAtlas is a popup click and drag world map. | |||
* This script causes all of our coordinate links to display the WikiMiniAtlas popup button. | |||
* The script itself is located on meta because it is used by many projects. | |||
* See [[Meta:WikiMiniAtlas]] for more information. | |||
* Maintainers: [[User:Dschwen]] | |||
*/ | |||
mw.loader.load("//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript"); | |||
if (navigator.appName == "Microsoft Internet Explorer" && document.createStyleSheet) { | |||
if ( | document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";'); | ||
} | } | ||
/** Interwiki links to featured articles *************************************** | |||
* | |||
* Description: Highlights interwiki links to featured articles (or | |||
* equivalents) by changing the bullet before the interwiki link | |||
* into a star. | |||
* Maintainers: [[User:R. Koot]] | |||
*/ | |||
function LinkFA() | |||
{ | |||
if ( document.getElementById( "p-lang" ) ) { | |||
var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" ); | |||
for ( var i = 0; i < InterwikiLinks.length; i++ ) { | |||
if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) { | |||
InterwikiLinks[i].className += " FA"; | |||
InterwikiLinks[i].title = "This is a featured article in another language."; | |||
} | |||
} | |||
} | |||
} | } | ||
$(document).ready( LinkFA ); | |||
/** Collapsible tables ********************************************************* | |||
* | |||
* Description: Allows tables to be collapsed, showing only the header. See | |||
* [[Wikipedia:NavFrame]]. | |||
* Maintainers: [[User:R. Koot]] | |||
*/ | |||
var autoCollapse = 2; | |||
var collapseCaption = '▼'; | |||
var expandCaption = '◄'; | |||
function collapseTable( tableIndex ) | |||
{ | |||
var Button = document.getElementById( "collapseButton" + tableIndex ); | |||
var Table = document.getElementById( "collapsibleTable" + tableIndex ); | |||
if ( !Table || !Button ) { | |||
return false; | |||
} | |||
var Rows = Table.rows; | |||
if ( Button.firstChild.data == collapseCaption ) { | |||
if ( | for ( var i = 1; i < Rows.length; i++ ) { | ||
Rows[i].style.display = "none"; | |||
} | |||
Button.firstChild.data = expandCaption; | |||
} else { | |||
for ( var i = 1; i < Rows.length; i++ ) { | |||
Rows[i].style.display = Rows[0].style.display; | |||
} | |||
Button.firstChild.data = collapseCaption; | |||
} | |||
} | } | ||
function createCollapseButtons() | |||
{ | |||
var tableIndex = 0; | |||
var NavigationBoxes = {}; | |||
var Tables = document.getElementsByTagName( "table" ); | |||
for ( var i = 0; i < Tables.length; i++ ) { | |||
if ( $(Tables[i]).hasClass( "collapsible" ) ) { | |||
/* only add button and increment count if there is a header row to work with */ | |||
var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; | |||
if (!HeaderRow) continue; | |||
var Header = HeaderRow.getElementsByTagName( "th" )[0]; | |||
if (!Header) continue; | |||
NavigationBoxes[ tableIndex ] = Tables[i]; | |||
Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); | |||
var Button = document.createElement( "span" ); | |||
var ButtonLink = document.createElement( "a" ); | |||
var ButtonText = document.createTextNode( collapseCaption ); | |||
Button.className = "collapseButton"; //Styles are declared in Common.css | |||
ButtonLink.style.color = Header.style.color; | |||
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); | |||
ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); | |||
ButtonLink.appendChild( ButtonText ); | |||
Button.appendChild( document.createTextNode( "[" ) ); | |||
Button.appendChild( ButtonLink ); | |||
Button.appendChild( document.createTextNode( "]" ) ); | |||
Header.insertBefore( Button, Header.childNodes[0] ); | |||
tableIndex++; | |||
} | |||
} | |||
} | |||
for ( var i = 0; i < tableIndex; i++ ) { | |||
if ( $(NavigationBoxes[i]).hasClass( "collapsed" ) || ( tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass( "autocollapse" ) ) ) { | |||
collapseTable( i ); | |||
} | |||
else if ( $(NavigationBoxes[i]).hasClass( "innercollapse" ) ) { | |||
var element = NavigationBoxes[i]; | |||
while (element = element.parentNode) { | |||
if ( $(element).hasClass( "outercollapse" ) ) { | |||
collapseTable ( i ); | |||
break; | |||
} | |||
} | |||
} | |||
} | } | ||
} | } | ||
$(document).ready( createCollapseButtons ); | |||
/** | /** Dynamic Navigation Bars (experimental) ************************************* | ||
* | * | ||
* | * Description: See [[Wikipedia:NavFrame]]. | ||
* | * Maintainers: UNMAINTAINED | ||
*/ | */ | ||
/ | // set up the words in your language | ||
var NavigationBarHide = '[' + collapseCaption + ']'; | |||
var NavigationBarShow = '[' + expandCaption + ']'; | |||
// 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).hasClass( 'NavPic' ) ) { | |||
NavChild.style.display = 'none'; | |||
} | |||
if ( $(NavChild).hasClass( 'NavContent') ) { | |||
NavChild.style.display = 'none'; | |||
} | |||
} | |||
NavToggle.firstChild.data = NavigationBarShow; | |||
/ | // if hidden now | ||
if ( | } else if (NavToggle.firstChild.data == NavigationBarShow) { | ||
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |||
if ($(NavChild).hasClass( 'NavPic')) { | |||
NavChild.style.display = 'block'; | |||
} | |||
if ($(NavChild).hasClass( '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 | |||
var divs = document.getElementsByTagName("div"); | |||
for (var i = 0; NavFrame = divs[i]; i++) { | |||
// if found a navigation bar | |||
if ($(NavFrame).hasClass( "NavFrame")) { | |||
// | indexNavigationBar++; | ||
var NavToggle = document.createElement("a"); | |||
NavToggle.className = 'NavToggle'; | |||
/ | NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); | ||
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); | |||
if ( | |||
var isCollapsed = $(NavFrame).hasClass( "collapsed" ); | |||
/* | |||
* Check if any children are already hidden. This loop is here for backwards compatibility: | |||
* the old way of making NavFrames start out collapsed was to manually add style="display:none" | |||
* to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make | |||
* the content visible without JavaScript support), the new recommended way is to add the class | |||
* "collapsed" to the NavFrame itself, just like with collapsible tables. | |||
*/ | |||
for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) { | |||
if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) { | |||
if ( NavChild.style.display == 'none' ) { | |||
isCollapsed = true; | |||
} | |||
} | |||
} | |||
if (isCollapsed) { | |||
for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { | |||
if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) { | |||
NavChild.style.display = 'none'; | |||
} | |||
} | |||
} | |||
var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : 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]).hasClass( "NavHead")) { | |||
NavFrame.childNodes[j].appendChild(NavToggle); | |||
} | |||
} | |||
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); | |||
} | |||
} | |||
} | } | ||
$(document).ready( createNavigationBarToggleButton ); | |||
/** | /** Main Page layout fixes ********************************************************* | ||
* | * | ||
* | * Description: Adds an additional link to the complete list of languages available. | ||
* | * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]] | ||
*/ | */ | ||
if (mw.config.get('wgIsMainPage') || mw.config.get('wgPageName') == 'Talk:Main_Page') | |||
$(document).ready(function () { | |||
mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias', | |||
'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias') | |||
var nstab = document.getElementById('ca-nstab-main') | |||
if (nstab && mw.config.get('wgUserLanguage')=='en') | |||
nstab.firstChild.firstChild.nodeValue = 'Main Page' | |||
} | |||
) | |||
if | /** "Technical restrictions" title fix ***************************************** | ||
* | |||
* Description: For pages that have something like Template:Wrongtitle, replace | |||
* the title, but only if it is cut-and-pasteable as a valid | |||
* wikilink. For instance, "NZR WB class" can be changed to | |||
* "NZR W<sup>B</sup> class", but [[C#]] is not an equivalent wikilink, | |||
* so [[C Sharp]] doesn't have its main title changed. | |||
* | |||
* The function looks for a banner like this: | |||
* <div id="RealTitleBanner"> ... <span id="RealTitle">title</span> ... </div> | |||
* Maintainers: Remember_the_dot | |||
*/ | |||
/ | if (mw.config.get('wgIsArticle')) //prevents the "Editing " prefix from disappearing during preview | ||
{ | |||
$(document).ready(function() | |||
{ | |||
var realTitle = document.getElementById("RealTitle") | |||
if (realTitle) | |||
{ | |||
//normalizes a title or a namespace name (but not both) | |||
//trims leading and trailing underscores and converts (possibly multiple) spaces and underscores to single underscores | |||
function normalizeTitle(title) | |||
{ | |||
return title.replace(/^_+/, "").replace(/_+$/, "").replace(/[\s_]+/g, "_") | |||
} | |||
if (realTitle.textContent) //everyone but IE | |||
{ | |||
var realTitleText = realTitle.textContent | |||
} | |||
else //IE | |||
{ | |||
var realTitleText = realTitle.innerText | |||
} | |||
var normalizedRealTitle | |||
var normalizedPageTitle | |||
var indexOfColon = realTitleText.indexOf(":") | |||
var normalizedNamespaceName = normalizeTitle(realTitleText.substring(0, indexOfColon)).toLowerCase() | |||
//make namespace prefix lowercase and uppercase the first letter of the title | |||
if (indexOfColon == -1 || mw.config.get('wgCanonicalNamespace').toLowerCase() != normalizedNamespaceName) //no namespace prefix - either no colon or a nonsensical namespace prefix (for example, "Foo" in "Foo: The Story of My Life") | |||
{ | |||
normalizedRealTitle = normalizeTitle(realTitleText) | |||
normalizedRealTitle = normalizedRealTitle.charAt(0).toUpperCase() + normalizedRealTitle.substring(1) | |||
normalizedPageTitle = mw.config.get('wgPageName').charAt(0).toUpperCase() + mw.config.get('wgPageName').substring(1) | |||
} | |||
else //using a namespace prefix | |||
{ | |||
var normalizedRealPageTitle = normalizeTitle(realTitleText.substring(indexOfColon + 1)) | |||
normalizedRealTitle = normalizedNamespaceName | |||
if (normalizedNamespaceName != "") //namespace 0 is a special case where the leading colon should never be shown | |||
{ | |||
normalizedRealTitle += ":" | |||
} | |||
normalizedRealTitle += normalizedRealPageTitle.charAt(0).toUpperCase() + normalizedRealPageTitle.substring(1) | |||
normalizedPageTitle = mw.config.get('wgPageName').substring(0, mw.config.get('wgPageName').indexOf(":") + 1).toLowerCase() + mw.config.get('wgPageName').substring(mw.config.get('wgPageName').indexOf(":") + 1) | |||
} | |||
if (normalizedRealTitle == normalizedPageTitle) //normalized titles match, so we can do full replacement | |||
{ | |||
var h1 = document.getElementsByTagName("h1")[0] | |||
//remove all child nodes, including text | |||
while (h1.firstChild) | |||
{ | |||
h1.removeChild(h1.firstChild) | |||
} | |||
//populate with nodes of real title | |||
while (realTitle.firstChild) //the children are moved to a new parent element | |||
{ | |||
h1.appendChild(realTitle.firstChild) | |||
} | |||
//delete the real title banner since the problem is solved | |||
var realTitleBanner = document.getElementById("RealTitleBanner") | |||
if (realTitleBanner) realTitleBanner.parentNode.removeChild(realTitleBanner) | |||
} | |||
//no matter what, correct the page title | |||
document.title = realTitleText + " - Wikipedia, the free encyclopedia" | |||
} | |||
}) | |||
} | } | ||
/* | /***** uploadwizard_newusers ******** | ||
* | * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]] | ||
* | * | ||
* | * Maintainers: [[User:Krimpet]] | ||
*/ | ****/ | ||
if ( | function uploadwizard_newusers() { | ||
if (mw.config.get('wgNamespaceNumber') == 4 && mw.config.get('wgCanonicalSpecialPageName') == "Upload" && mw.config.get('wgAction') == "view") { | |||
var oldDiv = document.getElementById("autoconfirmedusers"), | |||
newDiv = document.getElementById("newusers"); | |||
if (oldDiv && newDiv) { | |||
if (typeof mw.config.get('wgUserGroups') == "object" && mw.config.get('wgUserGroups')) { | |||
for (i = 0; i < mw.config.get('wgUserGroups').length; i++) { | |||
if (mw.config.get('wgUserGroups')[i] == "autoconfirmed") { | |||
oldDiv.style.display = "block"; | |||
newDiv.style.display = "none"; | |||
return; | |||
} | |||
} | } | ||
} | |||
oldDiv.style.display = "none"; | |||
newDiv.style.display = "block"; | |||
return; | |||
} | |||
} | |||
} | } | ||
$(document).ready(uploadwizard_newusers); | |||
} | /** Disambig editintro ******************************************************** | ||
* | |||
* Description: Adds an editintro on disambiguation pages. Original code | |||
* located at [[User:RockMFR/disambigeditintro.js]]. | |||
* | |||
* Maintainers: [[User:RockMFR]], [[User:Quiddity]] | |||
*/ | |||
if (mw.config.get('wgNamespaceNumber') == 0) $(document).ready(function(){ | |||
if (!document.getElementById('disambig')) return | |||
var el = document.getElementById('ca-edit') | |||
if (el) el = el.getElementsByTagName('a')[0] | |||
if (el) el.href += '&editintro=Template:Disambig_editintro' | |||
}) | |||
// | /** Mobile browser helper link ************************************************ | ||
* | |||
* Adds a link to the mobile-optimized gateway at en.m.wikimedia.org | |||
* for viewers on iPhone, iPod Touch, and Android devices. | |||
* This is semi-experimental to drive more test traffic there for now; | |||
* it's still in development but very usable for reading! | |||
* | |||
* Currently set to always show the link on main page and search results, | |||
* and w/ 25% probability on other page views. | |||
* | |||
* Maintainer: [[User:Brion VIBBER]] | |||
*/ | |||
if (/(Android|iPhone|iPod)/.test(navigator.userAgent)) { | |||
$(document).ready(function() { | |||
var prob = 1.0; | |||
if (mw.config.get('wgCanonicalNamespace') == 'Special' && mw.config.get('wgCanonicalSpecialPageName') == 'Search') { | |||
var pageLink = '?search=' + encodeURIComponent(document.getElementById('searchText').value); | |||
} else if (mw.config.get('wgIsMainPage')) { | |||
var pageLink = '::Home'; // Special case | |||
} else { | |||
var pageLink = encodeURIComponent(mw.config.get('wgPageName')).replace('%2F','/').replace('%3A',':'); | |||
} | |||
if (prob < Math.random()) return; | |||
var div = document.createElement('div'); | |||
div.style.fontSize = '30pt'; | |||
div.style.lineHeight = '40pt'; | |||
div.style.textAlign = 'center'; | |||
div.style.marginTop = '20px'; | |||
div.style.marginBottom = '20px'; | |||
div.style.padding = '20px'; | |||
div.style.border = '2px solid gray'; | |||
div.appendChild(document.createTextNode("View this page on ")); | |||
var link = document.createElement('a'); | |||
link.href = 'http://en.m.wikipedia.org/wiki/' + pageLink; | |||
link.appendChild(document.createTextNode("Wikipedia's mobile site")); | |||
div.appendChild(link); | |||
var content=document.getElementById('content'); | |||
content.insertBefore(div,content.firstChild); | |||
}); | |||
} | |||
// Add purge menu + auto purge | |||
if (mw.config.get('wgAction')==='purge'){$('form[action*="action=purge"]').submit();} | |||
mw.util.addPortletLink ('p-cactions','?action=purge','تفضيه الكاش'); | |||
pagename=mw.config.get('wgPageName').replace(/_/g, " "); | |||
var d=$("<li>"); | |||
$("#p-views ul").append(d); | |||
d.append( | |||
$("<span>") | |||
.append( | |||
$("<a>") | |||
.attr("href","https://arz.wikipedia.org/wiki/"+pagename+"?action=purge") | |||
.attr("title","تفضيه الكاش") | |||
.append( | |||
$("<img>") | |||
.attr("src","//upload.wikimedia.org/wikipedia/commons/1/10/Reload_icon_-_Green.svg") | |||
.attr("style","margin-bottom:5px; width:18px;height:auto;margin-top:-5px") | |||
) | |||
) | |||
); | |||
if (mw.config.get( 'skin' )=='minerva'){ // Only add to minerva skin | |||
var d=$("<li>"); | |||
$("#p-tb").append(d); | |||
d.append( | |||
$("<span>") | |||
.append( | |||
$("<a>") | |||
.attr("href","https://arz.wikipedia.org/wiki/"+pagename+"?action=purge") | |||
.attr("title","تفضيه الكاش") | |||
.addClass("toggle-list-item__anchor mw-ui-icon-before mw-ui-icon mw-ui-icon-before") | |||
.append( | |||
$("<img>") | |||
.attr("src","//upload.wikimedia.org/wikipedia/commons/1/17/OOjs_UI_icon_reload.svg") | |||
.attr("style","margin-right:-32px;width:22px;height:auto;") | |||
) | |||
.append( | |||
$("<span>") | |||
.addClass("toggle-list-item__icon") | |||
.attr("style","position:relative;top:-8px!important;padding-right:14px") | |||
.append( | |||
$("<span>") | |||
.addClass("toggle-list-item__label") | |||
.text("تفضيه الكاش") | |||
.attr("style","position:relative;top:-3px!important;color:#00bfa5!important") | |||
) | |||
) | |||
).addClass("toggle-list-item") | |||
); | |||
} | } | ||
// End add purge menu + auto purge ------------------------------------------ | |||
// | // Hide errors | ||
$(".error").css({"visibility":"hidden","display":"none"}); | |||
$(".error").parent('li').css({"visibility":"hidden","display":"none"}); | |||
مراجعة ١٧:٤٤، ٢٠ نوفمبر ٢٠٢١
/* Import more specific scripts if necessary */ if (mw.config.get('wgAction') == "edit" || mw.config.get('wgAction') == "submit" || mw.config.get('wgCanonicalSpecialPageName') == "Upload") //scripts specific to editing pages { importScript("MediaWiki:Common.js/edit.js"); } else if (mw.config.get('wgCanonicalSpecialPageName') == "Watchlist") //watchlist scripts { importScript("MediaWiki:Common.js/watchlist.js"); } else if (mw.config.get('wgCanonicalSpecialPageName') == "Search") //scripts specific to Special:Search { importScript("MediaWiki:Common.js/search.js"); } /** Sysop Javascript ******************************************************* * * Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]]. */ function sysopFunctions() { if ( mw.config.get('wgUserGroups') && !window.disableSysopJS ) { for ( var g = 0; g < mw.config.get('wgUserGroups').length; ++g ) { if ( mw.config.get('wgUserGroups')[g] == "sysop" ) { importScript( "MediaWiki:Sysop.js" ); break; } } } } $(document).ready( sysopFunctions ); /** WikiMiniAtlas ******************************************************* * * Description: WikiMiniAtlas is a popup click and drag world map. * This script causes all of our coordinate links to display the WikiMiniAtlas popup button. * The script itself is located on meta because it is used by many projects. * See [[Meta:WikiMiniAtlas]] for more information. * Maintainers: [[User:Dschwen]] */ mw.loader.load("//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript"); if (navigator.appName == "Microsoft Internet Explorer" && document.createStyleSheet) { document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";'); } /** Interwiki links to featured articles *************************************** * * Description: Highlights interwiki links to featured articles (or * equivalents) by changing the bullet before the interwiki link * into a star. * Maintainers: [[User:R. Koot]] */ function LinkFA() { if ( document.getElementById( "p-lang" ) ) { var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" ); for ( var i = 0; i < InterwikiLinks.length; i++ ) { if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) { InterwikiLinks[i].className += " FA"; InterwikiLinks[i].title = "This is a featured article in another language."; } } } } $(document).ready( LinkFA ); /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainers: [[User:R. Koot]] */ var autoCollapse = 2; var collapseCaption = '▼'; var expandCaption = '◄'; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = {}; var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( $(Tables[i]).hasClass( "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = "collapseButton"; //Styles are declared in Common.css ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( $(NavigationBoxes[i]).hasClass( "collapsed" ) || ( tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass( "autocollapse" ) ) ) { collapseTable( i ); } else if ( $(NavigationBoxes[i]).hasClass( "innercollapse" ) ) { var element = NavigationBoxes[i]; while (element = element.parentNode) { if ( $(element).hasClass( "outercollapse" ) ) { collapseTable ( i ); break; } } } } } $(document).ready( createCollapseButtons ); /** Dynamic Navigation Bars (experimental) ************************************* * * Description: See [[Wikipedia:NavFrame]]. * Maintainers: UNMAINTAINED */ // set up the words in your language var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']'; // 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).hasClass( 'NavPic' ) ) { NavChild.style.display = 'none'; } if ( $(NavChild).hasClass( '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).hasClass( 'NavPic')) { NavChild.style.display = 'block'; } if ($(NavChild).hasClass( '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 var divs = document.getElementsByTagName("div"); for (var i = 0; NavFrame = divs[i]; i++) { // if found a navigation bar if ($(NavFrame).hasClass( "NavFrame")) { indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');'); var isCollapsed = $(NavFrame).hasClass( "collapsed" ); /* * Check if any children are already hidden. This loop is here for backwards compatibility: * the old way of making NavFrames start out collapsed was to manually add style="display:none" * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make * the content visible without JavaScript support), the new recommended way is to add the class * "collapsed" to the NavFrame itself, just like with collapsible tables. */ for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) { if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) { if ( NavChild.style.display == 'none' ) { isCollapsed = true; } } } if (isCollapsed) { for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if ( $(NavChild).hasClass( 'NavPic' ) || $(NavChild).hasClass( 'NavContent' ) ) { NavChild.style.display = 'none'; } } } var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : 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]).hasClass( "NavHead")) { NavFrame.childNodes[j].appendChild(NavToggle); } } NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); } } } $(document).ready( createNavigationBarToggleButton ); /** Main Page layout fixes ********************************************************* * * Description: Adds an additional link to the complete list of languages available. * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]] */ if (mw.config.get('wgIsMainPage') || mw.config.get('wgPageName') == 'Talk:Main_Page') $(document).ready(function () { mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias', 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias') var nstab = document.getElementById('ca-nstab-main') if (nstab && mw.config.get('wgUserLanguage')=='en') nstab.firstChild.firstChild.nodeValue = 'Main Page' } ) /** "Technical restrictions" title fix ***************************************** * * Description: For pages that have something like Template:Wrongtitle, replace * the title, but only if it is cut-and-pasteable as a valid * wikilink. For instance, "NZR WB class" can be changed to * "NZR W<sup>B</sup> class", but [[C#]] is not an equivalent wikilink, * so [[C Sharp]] doesn't have its main title changed. * * The function looks for a banner like this: * <div id="RealTitleBanner"> ... <span id="RealTitle">title</span> ... </div> * Maintainers: Remember_the_dot */ if (mw.config.get('wgIsArticle')) //prevents the "Editing " prefix from disappearing during preview { $(document).ready(function() { var realTitle = document.getElementById("RealTitle") if (realTitle) { //normalizes a title or a namespace name (but not both) //trims leading and trailing underscores and converts (possibly multiple) spaces and underscores to single underscores function normalizeTitle(title) { return title.replace(/^_+/, "").replace(/_+$/, "").replace(/[\s_]+/g, "_") } if (realTitle.textContent) //everyone but IE { var realTitleText = realTitle.textContent } else //IE { var realTitleText = realTitle.innerText } var normalizedRealTitle var normalizedPageTitle var indexOfColon = realTitleText.indexOf(":") var normalizedNamespaceName = normalizeTitle(realTitleText.substring(0, indexOfColon)).toLowerCase() //make namespace prefix lowercase and uppercase the first letter of the title if (indexOfColon == -1 || mw.config.get('wgCanonicalNamespace').toLowerCase() != normalizedNamespaceName) //no namespace prefix - either no colon or a nonsensical namespace prefix (for example, "Foo" in "Foo: The Story of My Life") { normalizedRealTitle = normalizeTitle(realTitleText) normalizedRealTitle = normalizedRealTitle.charAt(0).toUpperCase() + normalizedRealTitle.substring(1) normalizedPageTitle = mw.config.get('wgPageName').charAt(0).toUpperCase() + mw.config.get('wgPageName').substring(1) } else //using a namespace prefix { var normalizedRealPageTitle = normalizeTitle(realTitleText.substring(indexOfColon + 1)) normalizedRealTitle = normalizedNamespaceName if (normalizedNamespaceName != "") //namespace 0 is a special case where the leading colon should never be shown { normalizedRealTitle += ":" } normalizedRealTitle += normalizedRealPageTitle.charAt(0).toUpperCase() + normalizedRealPageTitle.substring(1) normalizedPageTitle = mw.config.get('wgPageName').substring(0, mw.config.get('wgPageName').indexOf(":") + 1).toLowerCase() + mw.config.get('wgPageName').substring(mw.config.get('wgPageName').indexOf(":") + 1) } if (normalizedRealTitle == normalizedPageTitle) //normalized titles match, so we can do full replacement { var h1 = document.getElementsByTagName("h1")[0] //remove all child nodes, including text while (h1.firstChild) { h1.removeChild(h1.firstChild) } //populate with nodes of real title while (realTitle.firstChild) //the children are moved to a new parent element { h1.appendChild(realTitle.firstChild) } //delete the real title banner since the problem is solved var realTitleBanner = document.getElementById("RealTitleBanner") if (realTitleBanner) realTitleBanner.parentNode.removeChild(realTitleBanner) } //no matter what, correct the page title document.title = realTitleText + " - Wikipedia, the free encyclopedia" } }) } /***** uploadwizard_newusers ******** * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]] * * Maintainers: [[User:Krimpet]] ****/ function uploadwizard_newusers() { if (mw.config.get('wgNamespaceNumber') == 4 && mw.config.get('wgCanonicalSpecialPageName') == "Upload" && mw.config.get('wgAction') == "view") { var oldDiv = document.getElementById("autoconfirmedusers"), newDiv = document.getElementById("newusers"); if (oldDiv && newDiv) { if (typeof mw.config.get('wgUserGroups') == "object" && mw.config.get('wgUserGroups')) { for (i = 0; i < mw.config.get('wgUserGroups').length; i++) { if (mw.config.get('wgUserGroups')[i] == "autoconfirmed") { oldDiv.style.display = "block"; newDiv.style.display = "none"; return; } } } oldDiv.style.display = "none"; newDiv.style.display = "block"; return; } } } $(document).ready(uploadwizard_newusers); /** Disambig editintro ******************************************************** * * Description: Adds an editintro on disambiguation pages. Original code * located at [[User:RockMFR/disambigeditintro.js]]. * * Maintainers: [[User:RockMFR]], [[User:Quiddity]] */ if (mw.config.get('wgNamespaceNumber') == 0) $(document).ready(function(){ if (!document.getElementById('disambig')) return var el = document.getElementById('ca-edit') if (el) el = el.getElementsByTagName('a')[0] if (el) el.href += '&editintro=Template:Disambig_editintro' }) /** Mobile browser helper link ************************************************ * * Adds a link to the mobile-optimized gateway at en.m.wikimedia.org * for viewers on iPhone, iPod Touch, and Android devices. * This is semi-experimental to drive more test traffic there for now; * it's still in development but very usable for reading! * * Currently set to always show the link on main page and search results, * and w/ 25% probability on other page views. * * Maintainer: [[User:Brion VIBBER]] */ if (/(Android|iPhone|iPod)/.test(navigator.userAgent)) { $(document).ready(function() { var prob = 1.0; if (mw.config.get('wgCanonicalNamespace') == 'Special' && mw.config.get('wgCanonicalSpecialPageName') == 'Search') { var pageLink = '?search=' + encodeURIComponent(document.getElementById('searchText').value); } else if (mw.config.get('wgIsMainPage')) { var pageLink = '::Home'; // Special case } else { var pageLink = encodeURIComponent(mw.config.get('wgPageName')).replace('%2F','/').replace('%3A',':'); } if (prob < Math.random()) return; var div = document.createElement('div'); div.style.fontSize = '30pt'; div.style.lineHeight = '40pt'; div.style.textAlign = 'center'; div.style.marginTop = '20px'; div.style.marginBottom = '20px'; div.style.padding = '20px'; div.style.border = '2px solid gray'; div.appendChild(document.createTextNode("View this page on ")); var link = document.createElement('a'); link.href = 'http://en.m.wikipedia.org/wiki/' + pageLink; link.appendChild(document.createTextNode("Wikipedia's mobile site")); div.appendChild(link); var content=document.getElementById('content'); content.insertBefore(div,content.firstChild); }); } // Add purge menu + auto purge if (mw.config.get('wgAction')==='purge'){$('form[action*="action=purge"]').submit();} mw.util.addPortletLink ('p-cactions','?action=purge','تفضيه الكاش'); pagename=mw.config.get('wgPageName').replace(/_/g, " "); var d=$("<li>"); $("#p-views ul").append(d); d.append( $("<span>") .append( $("<a>") .attr("href","https://arz.wikipedia.org/wiki/"+pagename+"?action=purge") .attr("title","تفضيه الكاش") .append( $("<img>") .attr("src","//upload.wikimedia.org/wikipedia/commons/1/10/Reload_icon_-_Green.svg") .attr("style","margin-bottom:5px; width:18px;height:auto;margin-top:-5px") ) ) ); if (mw.config.get( 'skin' )=='minerva'){ // Only add to minerva skin var d=$("<li>"); $("#p-tb").append(d); d.append( $("<span>") .append( $("<a>") .attr("href","https://arz.wikipedia.org/wiki/"+pagename+"?action=purge") .attr("title","تفضيه الكاش") .addClass("toggle-list-item__anchor mw-ui-icon-before mw-ui-icon mw-ui-icon-before") .append( $("<img>") .attr("src","//upload.wikimedia.org/wikipedia/commons/1/17/OOjs_UI_icon_reload.svg") .attr("style","margin-right:-32px;width:22px;height:auto;") ) .append( $("<span>") .addClass("toggle-list-item__icon") .attr("style","position:relative;top:-8px!important;padding-right:14px") .append( $("<span>") .addClass("toggle-list-item__label") .text("تفضيه الكاش") .attr("style","position:relative;top:-3px!important;color:#00bfa5!important") ) ) ).addClass("toggle-list-item") ); } // End add purge menu + auto purge ------------------------------------------ // Hide errors $(".error").css({"visibility":"hidden","display":"none"}); $(".error").parent('li').css({"visibility":"hidden","display":"none"});