مدیاویکی:Common.js

از آیت‌الله گنجی

نسخهٔ تاریخ ۱۰ سپتامبر ۲۰۲۶، ساعت ۰۳:۳۳ توسط Ostadgan newwikiuser (بحث | مشارکت‌ها)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
/* جست‌وجوی زنده در جدول‌های آرشیو دروس */
$(function () {
    function normalize(value) {
        return String(value || '')
            .replace(/ي/g, 'ی')
            .replace(/ك/g, 'ک')
            .replace(/[۰-۹]/g, function (digit) {
                return '۰۱۲۳۴۵۶۷۸۹'.indexOf(digit);
            })
            .replace(/\s+/g, ' ')
            .trim()
            .toLowerCase();
    }

    document.querySelectorAll('.ganji-archive').forEach(function (archive) {
        var table = archive.querySelector('.ganji-archive-table');
        if (!table || archive.querySelector('.ganji-table-search')) {
            return;
        }

        var input = document.createElement('input');
        input.type = 'search';
        input.className = 'ganji-table-search';
        input.placeholder = 'جست‌وجو در جلسه، تاریخ و موضوع‌ها…';
        input.setAttribute('aria-label', 'جست‌وجو در جدول جلسات');

        var empty = document.createElement('div');
        empty.className = 'ganji-table-no-results';
        empty.textContent = 'نتیجه‌ای پیدا نشد.';
        empty.hidden = true;

        archive.insertBefore(input, archive.firstChild);
        archive.insertBefore(empty, input.nextSibling);

        input.addEventListener('input', function () {
            var query = normalize(input.value);
            var visible = 0;
            table.querySelectorAll('tr').forEach(function (row) {
                if (!row.querySelector('td')) {
                    return;
                }
                var matched = !query || normalize(row.textContent).includes(query);
                row.hidden = !matched;
                if (matched) {
                    visible += 1;
                }
            });
            empty.hidden = visible !== 0;
        });
    });

    /* ساخت فهرست مطالب صفحه در پایین منوی کناری قالب Medik */
    var sidebar = document.querySelector('#mw-navigation nav');
    var content = document.querySelector('.mw-parser-output');
    if (!sidebar || !content || sidebar.querySelector('.ganji-sidebar-toc')) {
        return;
    }

    var headings = Array.prototype.slice.call(
        content.querySelectorAll('h2, h3, h4')
    ).filter(function (heading) {
        return !heading.closest('.toc') && !heading.closest('table');
    });

    if (!headings.length) {
        return;
    }

    var toc = document.createElement('div');
    toc.className = 'ganji-sidebar-toc';

    var title = document.createElement('div');
    title.className = 'ganji-sidebar-toc-title';
    title.textContent = 'فهرست مطالب';
    toc.appendChild(title);

    var list = document.createElement('ul');
    headings.forEach(function (heading, index) {
        if (!heading.id) {
            heading.id = 'ganji-section-' + (index + 1);
        }

        var item = document.createElement('li');
        item.className = 'ganji-toc-level-' + heading.tagName.toLowerCase();

        var link = document.createElement('a');
        link.href = '#' + encodeURIComponent(heading.id);
        link.textContent = (heading.querySelector('.mw-headline') || heading)
            .textContent
            .replace(/\[ویرایش\]/g, '')
            .trim();

        item.appendChild(link);
        list.appendChild(item);
    });

    toc.appendChild(list);
    sidebar.appendChild(toc);
});