مدیاویکی:Common.js: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
بدون خلاصۀ ویرایش |
||
خط ۱: | خط ۱: | ||
/** Collapsible tables ********************************************************* | /** Collapsible tables ********************************************************* | ||
* | * |
نسخهٔ ۳۰ مارس ۲۰۱۹، ساعت ۲۰:۲۴
/** 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");
var i;
function handleButtonLink(index, e) {
window.collapseTable(index);
e.preventDefault();
}
for (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", "#");
$(ButtonLink).on("click", $.proxy(handleButtonLink, ButtonLink, tableIndex));
ButtonLink.appendChild(ButtonText);
Button.appendChild(document.createTextNode("["));
Button.appendChild(ButtonLink);
Button.appendChild(document.createTextNode("]"));
Header.insertBefore(Button, Header.firstChild);
tableIndex++;
}
}
for (i = 0; i < tableIndex; i++) {
if ($(NavigationBoxes[i]).hasClass("collapsed") || (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass("autocollapse"))) {
window.collapseTable(i);
} else if ($(NavigationBoxes[i]).hasClass("innercollapse")) {
var element = NavigationBoxes[i];
while ((element = element.parentNode)) {
if ($(element).hasClass("outercollapse")) {
window.collapseTable(i);
break;
}
}
}
}
}
$(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
window.toggleNavigationBar = function(indexNavigationBar, event) {
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
var NavChild;
if (!NavFrame || !NavToggle) {
return false;
}
/* if shown now */
if (NavToggle.firstChild.data === NavigationBarHide) {
for (NavChild = NavFrame.firstChild; NavChild !== null; NavChild = NavChild.nextSibling) {
if ($(NavChild).hasClass("NavContent") || $(NavChild).hasClass("NavPic")) {
NavChild.style.display = "none";
}
}
NavToggle.firstChild.data = NavigationBarShow;
/* if hidden now */
} else if (NavToggle.firstChild.data === NavigationBarShow) {
for (NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
if ($(NavChild).hasClass("NavContent") || $(NavChild).hasClass("NavPic")) {
NavChild.style.display = "block";
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
event.preventDefault();
};
/* adds show/hide-button to navigation bars */
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var NavFrame;
var NavChild;
/* 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", "#");
$(NavToggle).on("click", $.proxy(window.toggleNavigationBar, window, 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 (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 (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")) {
NavToggle.style.color = NavFrame.childNodes[j].style.color;
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
NavFrame.setAttribute("id", "NavFrame" + indexNavigationBar);
}
}
}
$(createNavigationBarToggleButton);
// Make refrence number that you clicked on bold for proper navigation
// Author: User:Ladsgroup
$( 'sup.reference' ).click( function () {
var citeId = $( this ).attr( 'id' );
$( 'sup > a[href="#' + citeId + '"]').css('color', '#2a4b8d').css('font-weight', 'bold');
$( 'sup > a[href="#' + citeId + '"]').click( function() {
$( this ).css('color', '').css('font-weight', '');
} );
} );
/* google analytics */
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-105346324-1', 'auto');
ga('send', 'pageview');
/* end of google analytics */
/* اضافه کردن تیتر برای یادداشت ها */
$( function() {
if($('#reflist-notes .reflist').text().length>10) {
$('#reflist-notes').before('<h2>یادداشتها</h2>');
}
});
/* تنظیمات پاپ آپ ها */
mw.loader.using( [ 'ext.popups' ], function() { // wait for popups to be loaded
// Time to wait in ms before showing a popup on hover. Default is 500.
mw.popups.render.POPUP_DELAY = 500;
// Time to wait in ms before closing a popup on de-hover. Default is 300.
mw.popups.render.POPUP_CLOSE_DELAY = 300;
// Time to wait in ms before starting the API queries on hover, must be <= POPUP_DELAY. Default is 50.
// Don't change this unless you know what you're doing.
mw.popups.render.API_DELAY = 50;
});