مدیاویکی:Common.js: تفاوت میان نسخه‌ها

بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
 
(یک نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
خط ۱: خط ۱:
/* global mw, $ */


/**********************************************************************
*  Load edit.js for edit-related pages
**********************************************************************/
if (
    mw.config.get("wgAction") === "edit" ||
    mw.config.get("wgAction") === "submit" ||
    mw.config.get("wgCanonicalSpecialPageName") === "Upload"
) {
    importScript("مدیاویکی:Common.js/edit.js");
}
/**********************************************************************
*  Magic editintros
**********************************************************************/
function addEditIntro(name) {
    $(".mw-editsection, #ca-edit")
        .find("a")
        .each(function () {
            this.href = $(this).attr("href") + "&editintro=" + name;
        });
}
if (mw.config.get("wgNamespaceNumber") === 0) {
    $(function () {
        if (document.getElementById("disambigbox")) {
            addEditIntro("Template:Disambig_editintro");
        }
    });


// این باعث می‌شود تصاویر فقط وقتی کاربر اسکرول می‌کند لود شوند
    $(function () {
        var cats = mw.config.get("wgCategories") || [];
        if (cats.includes("افراد زنده")) {
document.addEventListener("DOMContentLoaded", function() {
            addEditIntro("Template:BLP_editintro");
  const imgs = document.querySelectorAll("img");
        }
  imgs.forEach(img => {
    });
    img.setAttribute("loading","lazy");
}
  });
 
});
/**********************************************************************
*  Load additional JS/CSS via URL (Secure)
**********************************************************************/
mw.loader.using(["mediawiki.util"], function () {
    var extraCSS = mw.util.getParamValue("withCSS"),
        extraJS = mw.util.getParamValue("withJS");


    if (extraCSS) {
        if (/^MediaWiki:[^&<>=%#]*\.css$/.test(extraCSS)) {
            mw.loader.load(
                "/w/index.php?title=" +
                    encodeURIComponent(extraCSS) +
                    "&action=raw&ctype=text/css",
                "text/css"
            );
        } else {
            mw.notify("Only pages from the MediaWiki namespace are allowed.", {
                title: "Invalid withCSS value",
            });
        }
    }


    if (extraJS) {
        if (/^MediaWiki:[^&<>=%#]*\.js$/.test(extraJS)) {
            mw.loader.load(
                "/w/index.php?title=" +
                    encodeURIComponent(extraJS) +
                    "&action=raw&ctype=text/javascript"
            );
        } else {
            mw.notify("Only pages from the MediaWiki namespace are allowed.", {
                title: "Invalid withJS value",
            });
        }
    }
});


// می‌توانی جستجوی سریع‌تر فعال کنی:
/**********************************************************************
*  Auto-load Preloaded.js when needed
**********************************************************************/
mw.loader.using(["mediawiki.util"], function () {
    if (mw.util.getParamValue("preload")) {
        mw.loader.load("MediaWiki:Preloaded.js");
    }
});


/**********************************************************************
*  Collapsible tables (modern, safe)
**********************************************************************/
function makeCollapsibleMwCollapsible($content) {
    var $tables = $content
        .find("table.collapsible:not(.mw-collapsible)")
        .addClass("mw-collapsible");


    $.each($tables, function (index, table) {
        if ($(table).hasClass("collapsed")) {
            $(table).addClass("mw-collapsed");
        }
    });


if (window.innerWidth < 720) {
    if ($tables.length > 0) {
  document.body.classList.add("mobile-search-enhanced");
        mw.loader.using("jquery.makeCollapsible").then(function () {
            $tables.makeCollapsible();
        });
    }
}
}
mw.hook("wikipage.content").add(makeCollapsibleMwCollapsible);


/**********************************************************************
*  AutoCollapse, InnerCollapse, OuterCollapse
**********************************************************************/
function mwCollapsibleSetup($collapsibleContent) {
    var autoCollapseThreshold = 2;


//
    $.each($collapsibleContent, function (index, element) {
        var $element = $(element);


mw.loader.using('ext.wikiEditor').then(function () {
        if ($element.hasClass("collapsible")) {
            $element
                .find("tr:first-child > th:first-child")
                .prepend(
                    $element.find("tr:first-child > * > .mw-collapsible-toggle")
                );
        }


$('#wpTextbox1').wikiEditor('addToToolbar', {
        // Auto collapse
        if (
            $collapsibleContent.length >= autoCollapseThreshold &&
            $element.hasClass("autocollapse")
        ) {
            $element.data("mw-collapsible").collapse();
        }


sections: {
        // Inner collapse (requires outercollapse ancestor)
advanced: {
        if ($element.hasClass("innercollapse")) {
type: 'toolbar',
            if ($element.parents(".outercollapse").length > 0) {
label: 'ابزارهای پیشرفته'
                $element.data("mw-collapsible").collapse();
            }
        }
 
        // Ensure toggle inherits proper text color
        var $toggle = $element.find(".mw-collapsible-toggle");
        if ($toggle.length && $toggle.parent()[0].style.color) {
            $toggle.find("a").css("color", "inherit");
        }
    });
}
}
},
mw.hook("wikipage.collapsibleContent").add(mwCollapsibleSetup);
 
/**********************************************************************
*  Dynamic Navigation Bars (single clean version)
**********************************************************************/
var collapseCaption = "نهفتن";
var expandCaption = "نمایش";
var navigationBarHide = "[" + collapseCaption + "]";
var navigationBarShow = "[" + expandCaption + "]";


groups: {
function toggleNavigationBar(indexNavigationBar, event) {
templates: {
    var navToggle = document.getElementById("NavToggle" + indexNavigationBar);
label: 'الگوها'
    var navFrame = document.getElementById("NavFrame" + indexNavigationBar);
}
    var navChild;
},


tools: {
    if (!navFrame || !navToggle) return false;


infobox: {
    var isShown = navToggle.firstChild.data === navigationBarHide;
label: 'اینفوباکس',
type: 'button',
icon: 'https://upload.wikimedia.org/wikipedia/commons/5/5a/VisualEditor_-_Template.svg',
action: {
type: 'encapsulate',
options: {
pre: '{{Infobox\n| نام = \n| تصویر = \n}}\n',
post: ''
}
}
},


ref: {
    for (
label: 'منبع',
        navChild = navFrame.firstChild;
type: 'button',
        navChild !== null;
icon: 'https://upload.wikimedia.org/wikipedia/commons/9/9c/OOjs_UI_icon_reference.svg',
        navChild = navChild.nextSibling
action: {
    ) {
type: 'encapsulate',
        if (navChild.nodeType === 1) {
options: {
            if (
pre: '<ref>',
                $(navChild).hasClass("NavContent") ||
post: '</ref>'
                $(navChild).hasClass("NavPic")
}
            ) {
}
                navChild.style.display = isShown ? "none" : "block";
},
            }
        }
    }


gallery: {
    navToggle.firstChild.data = isShown
label: 'گالری تصاویر',
        ? navigationBarShow
type: 'button',
        : navigationBarHide;
action: {
type: 'encapsulate',
options: {
pre: '<gallery>\nFile:Example.jpg|توضیح\n</gallery>',
post: ''
}
}
},


category: {
    event.preventDefault();
label: 'دسته‌بندی',
type: 'button',
action: {
type: 'encapsulate',
options: {
pre: '[[رده:',
post: ']]'
}
}
}
}


}
function createNavigationBarToggleButton($content) {
    var indexNavigationBar = 0;


});
    $content.find("div.NavFrame:not(.mw-collapsible)").each(function (_, navFrame) {
        indexNavigationBar++;


});
        var $navFrame = $(navFrame);
        var navToggle = document.createElement("a");
        navToggle.className = "NavToggle";
        navToggle.id = "NavToggle" + indexNavigationBar;
        navToggle.href = "#";


        $(navToggle).on(
            "click",
            $.proxy(toggleNavigationBar, null, indexNavigationBar)
        );


        var isCollapsed = $navFrame.hasClass("collapsed");


mw.loader.using('ext.wikiEditor').then(function () {
        // Determine if any child is hidden (compatibility)
        $(navFrame)
            .children()
            .each(function () {
                if (
                    this.nodeType === 1 &&
                    (this.style.display === "none") &&
                    ($(this).hasClass("NavContent") || $(this).hasClass("NavPic"))
                ) {
                    isCollapsed = true;
                }
            });


function enToFaDigits(str) {
        // Apply initial collapsed state
var id = ['0','1','2','3','4','5','6','7','8','9'];
        if (isCollapsed) {
var pd = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
            $(navFrame)
for(var i=0;i<10;i++){
                .children()
str = str.replace(new RegExp(id[i],'g'),pd[i]);
                .each(function () {
}
                    if (
return str;
                        $(this).hasClass("NavContent") ||
}
                        $(this).hasClass("NavPic")
                    ) {
                        this.style.display = "none";
                    }
                });
        }


function faToEnDigits(str) {
        navToggle.appendChild(
var id = ['0','1','2','3','4','5','6','7','8','9'];
            document.createTextNode(
var pd = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
                isCollapsed ? navigationBarShow : navigationBarHide
for(var i=0;i<10;i++){
            )
str = str.replace(new RegExp(pd[i],'g'),id[i]);
        );
}
return str;
}


$('#wpTextbox1').wikiEditor('addToToolbar', {
        // Attach toggle to NavHead
        $(navFrame)
            .children()
            .each(function () {
                if ($(this).hasClass("NavHead")) {
                    navToggle.style.color = this.style.color;
                    this.appendChild(navToggle);
                }
            });


sections: {
        navFrame.id = "NavFrame" + indexNavigationBar;
digits: {
    });
type: 'toolbar',
label: 'تبدیل اعداد'
}
}
},


groups: {
mw.hook("wikipage.content").add(createNavigationBarToggleButton);
convert: {
label: 'ابزار'
}
},


tools: {
/**********************************************************************
*  Add “Complete list of languages” link on Main Page
**********************************************************************/
mw.loader.using(["mediawiki.util"], function () {
    mw.log.deprecate(
        window,
        "addPortletLink",
        mw.util.addPortletLink,
        "Use mw.util.addPortletLink instead"
    );


faDigits: {
    if (["صفحهٔ_اصلی", "بحث:صفحه_اصلی"].includes(mw.config.get("wgPageName"))) {
label: 'اعداد فارسی',
        $(function () {
type: 'button',
            mw.util.addPortletLink(
action: {
                "p-lang",
type: 'callback',
                "//meta.wikimedia.org/wiki/List_of_Wikipedias/fa",
execute: function () {
                "فهرست کامل",
                "interwiki-completelist",
                "فهرست کامل"
            );
        });
    }
});


var textarea = document.getElementById('wpTextbox1');
/**********************************************************************
var start = textarea.selectionStart;
*  WikiMiniAtlas loader
var end = textarea.selectionEnd;
**********************************************************************/
var text = textarea.value.substring(start,end);
(function () {
    var require_wikiminiatlas = false;
    var coord_filter = /geohack/;


textarea.value =
    $(function () {
textarea.value.substring(0,start) +
        $("a.external.text").each(function (_, link) {
enToFaDigits(text) +
            if (link.href && coord_filter.test(link.href)) {
textarea.value.substring(end);
                require_wikiminiatlas = true;
                return false;
            }
        });


}
        if ($("div.kmldata").length) {
}
            require_wikiminiatlas = true;
},
        }


enDigits: {
        if (require_wikiminiatlas) {
label: 'اعداد انگلیسی',
            mw.loader.load(
type: 'button',
                "//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript"
action: {
            );
type: 'callback',
        }
execute: function () {
    });
})();


var textarea = document.getElementById('wpTextbox1');
/**********************************************************************
var start = textarea.selectionStart;
*  Source code pages should be LTR
var end = textarea.selectionEnd;
**********************************************************************/
var text = textarea.value.substring(start,end);
mw.loader.using(["mediawiki.util"], function () {
    if ([2, 4, 8].includes(mw.config.get("wgNamespaceNumber"))) {
        if (/\.(js|css|py)$/.test(mw.config.get("wgPageName"))) {
            mw.util.addCSS(
                ".diff-addedline, .diff-deletedline, .diff-context { direction: ltr; } " +
                    "#wpTextbox1 { direction: ltr; }"
            );
        }
    }


textarea.value =
    // Hide WikiLove for newbies
textarea.value.substring(0,start) +
    if (
faToEnDigits(text) +
        !mw.config.get("wgUserGroups").includes("autoconfirmed") ||
textarea.value.substring(end);
        mw.config.get("wgUserEditCount") < 100
    ) {
        mw.util.addCSS("#ca-wikilove { display: none; }");
    }
});


}
/**********************************************************************
}
*  بهتر کردن نمایش فرمول‌ها در RTL
}
**********************************************************************/
$(function () {
    $("span.mwe-math-mathml-inline").each(function () {
        var $parent = $(this).parent();
        var $grand = $parent.parent();


}
        if (
            $grand.is("p, dd") &&
            $grand.text().trim() === $parent.text().trim()
        ) {
            $grand.css({
                direction: "ltr",
                padding: "1em 0",
            });
        }
    });
});


/**********************************************************************
*  هشدار برای عنوان نادرست ایمیل
**********************************************************************/
$(function () {
    var row = $("#mw-input-wpSubject").parents("tr");
    if (row.length) {
        row.before(
            '<tr><td></td><td style="color:red;font-weight:bold">لطفاً عبارت Wikipedia e-mail ‌را با یک عنوان مناسب جایگزین کنید!</td></tr>'
        );
    }
});
});


/**********************************************************************
*  Bold reference numbers on click
**********************************************************************/
$("sup.reference").click(function () {
    var citeId = $(this).attr("id");
    var selector = 'sup > a[href="#' + citeId + '"]';
    $(selector).css({ color: "#2a4b8d", "font-weight": "bold" });
    $(selector).one("click", function () {
        $(this).css({ color: "", "font-weight": "" });
    });
});
});


mw.loader.using(['jquery'], function () {
/**********************************************************************
*  Hide FileExporter for non-free files  (fixed)
**********************************************************************/
$(function () {
$(function () {
    var nonFreeCats = [
        "محتویات غیر آزاد",
        "تصویرهای با منبع نامعلوم",
        "تصویرهای با پدیدآور نامشخص",
    ];


var menuHTML = `
    if (
<div id="wikiMenuButton">☰</div>
        $("#ca-fileExporter").length === 1 &&
        (mw.config.get("wgCategories") || []).some(function (cat) {
            return nonFreeCats.includes(cat);
        })
    ) {
        $("#ca-fileExporter").hide();
    }
});


<div id="wikiMenu">
/**********************************************************************
<a href="/wiki/صفحه_اصلی">صفحه اصلی</a>
*  Advertisement banner (only for logged-out users)
<a href="/wiki/ویژه:آخرین_تغییرات">آخرین تغییرات</a>
**********************************************************************/
<a href="/wiki/ویژه:صفحه‌ها">همه صفحه‌ها</a>
mw.loader.using("jquery", function () {
<a href="/wiki/ویژه:تصادفی">مقاله تصادفی</a>
    $(function () {
<a href="/wiki/ویژه:جستجو">جستجو</a>
        var disableAd = false;
</div>
`;


$('body').prepend(menuHTML);
        if (mw.config.get("wgUserName") !== null || disableAd) return;


$('#wikiMenuButton').click(function(){
        var adBanner = $(
$('#wikiMenu').toggle();
            '<div id="site-ad-banner">' +
});
                '<a href="https://ble.ir/iranian_law" target="_blank">' +
                '<img src="https://www.illrc.ac.ir/wp-content/uploads/2026/03/1.jpg" alt="Advertisement" class="ad-img">' +
                "</a>" +
                '<button id="close-ad" title="بستن">✖</button>' +
                "</div>"
        );
 
        $("body").append(adBanner);


        $("#close-ad").on("click", function () {
            $("#site-ad-banner").fadeOut();
        });
    });
});
});
});
`