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

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

بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
 
خط ۱: خط ۱:
/* جست‌وجوی زنده در جدول‌های آرشیو دروس */
/* پایگاه اطلاع‌رسانی آیت‌الله گنجی — MediaWiki:Common.js */
$(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) {
$( function () {
        var table = archive.querySelector('.ganji-archive-table');
'use strict';
        if (!table || archive.querySelector('.ganji-table-search')) {
            return;
        }


        var input = document.createElement('input');
/* تشخیص مطمئن کاربر مهمان و واردشده */
        input.type = 'search';
var isAnonymous = !mw.config.get( 'wgUserName' );
        input.className = 'ganji-table-search';
        input.placeholder = 'جست‌وجو در جلسه، تاریخ و موضوع‌ها…';
        input.setAttribute('aria-label', 'جست‌وجو در جدول جلسات');


        var empty = document.createElement('div');
document.body.classList.toggle( 'ganji-anonymous', isAnonymous );
        empty.className = 'ganji-table-no-results';
document.body.classList.toggle( 'ganji-authenticated', !isAnonymous );
        empty.textContent = 'نتیجه‌ای پیدا نشد.';
        empty.hidden = true;


        archive.insertBefore(input, archive.firstChild);
/* یکسان‌سازی حروف و اعداد برای جست‌وجوی فارسی */
        archive.insertBefore(empty, input.nextSibling);
function normalize( value ) {
return String( value || '' )
.replace( /ي/g, 'ی' )
.replace( /ك/g, 'ک' )
.replace( /[۰-۹]/g, function ( digit ) {
return String( '۰۱۲۳۴۵۶۷۸۹'.indexOf( digit ) );
} )
.replace( /[٠-٩]/g, function ( digit ) {
return String( '٠١٢٣٤٥٦٧٨٩'.indexOf( digit ) );
} )
.replace( /\s+/g, ' ' )
.trim()
.toLowerCase();
}


        input.addEventListener('input', function () {
/* جست‌وجوی زنده در جدول‌های آرشیو */
            var query = normalize(input.value);
document.querySelectorAll( '.ganji-archive' ).forEach( function ( archive ) {
            var visible = 0;
var table = archive.querySelector( '.ganji-archive-table' );
            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 */
if ( !table || archive.querySelector( '.ganji-table-search' ) ) {
    var sidebar = document.querySelector('#mw-navigation nav');
return;
    var content = document.querySelector('.mw-parser-output');
}
    if (!sidebar || !content || sidebar.querySelector('.ganji-sidebar-toc')) {
        return;
    }


    var headings = Array.prototype.slice.call(
var input = document.createElement( 'input' );
        content.querySelectorAll('h2, h3, h4')
input.type = 'search';
    ).filter(function (heading) {
input.className = 'ganji-table-search';
        return !heading.closest('.toc') && !heading.closest('table');
input.placeholder = 'جست‌وجو در جلسه، تاریخ و موضوع‌ها…';
    });
input.setAttribute( 'aria-label', 'جست‌وجو در جدول جلسات' );


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


    var toc = document.createElement('div');
archive.insertBefore( input, archive.firstChild );
    toc.className = 'ganji-sidebar-toc';
archive.insertBefore( empty, input.nextSibling );


    var title = document.createElement('div');
input.addEventListener( 'input', function () {
    title.className = 'ganji-sidebar-toc-title';
var query = normalize( input.value );
    title.textContent = 'فهرست مطالب';
var visible = 0;
    toc.appendChild(title);


    var list = document.createElement('ul');
table.querySelectorAll( 'tbody tr' ).forEach( function ( row ) {
    headings.forEach(function (heading, index) {
var matched = !query ||
        if (!heading.id) {
normalize( row.textContent ).includes( query );
            heading.id = 'ganji-section-' + (index + 1);
        }


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


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


        item.appendChild(link);
empty.hidden = visible !== 0;
        list.appendChild(item);
} );
    });
} );


    toc.appendChild(list);
/* ساخت فهرست مطالب در منوی کناری پوستهٔ Medik */
    sidebar.appendChild(toc);
var sidebar =
});
document.querySelector( '#mw-navigation nav' ) ||
document.querySelector( '#mw-navigation' ) ||
document.querySelector( '.sidebar' );
 
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' ) &&
!heading.classList.contains( 'mw-empty-elt' )
);
} );
 
if ( !headings.length ) {
return;
}
 
var toc = document.createElement( 'div' );
toc.className = 'ganji-sidebar-toc';
 
var tocTitle = document.createElement( 'div' );
tocTitle.className = 'ganji-sidebar-toc-title';
tocTitle.textContent = 'فهرست مطالب';
toc.appendChild( tocTitle );
 
var list = document.createElement( 'ul' );
 
headings.forEach( function ( heading, index ) {
var headline = heading.querySelector( '.mw-headline' );
var target = headline || heading;
 
if ( !target.id ) {
target.id = 'ganji-section-' + ( index + 1 );
}
 
var text = target.textContent
.replace( /\[ویرایش\]/g, '' )
.trim();
 
if ( !text ) {
return;
}
 
var item = document.createElement( 'li' );
item.className =
'ganji-toc-level-' + heading.tagName.toLowerCase();
 
var link = document.createElement( 'a' );
link.href = '#' + target.id;
link.textContent = text;
 
link.addEventListener( 'click', function () {
document.querySelectorAll(
'.ganji-sidebar-toc a.is-active'
).forEach( function ( activeLink ) {
activeLink.classList.remove( 'is-active' );
} );
 
link.classList.add( 'is-active' );
} );
 
item.appendChild( link );
list.appendChild( item );
} );
 
toc.appendChild( list );
sidebar.appendChild( toc );
} );

نسخهٔ کنونی تا ۱۰ سپتامبر ۲۰۲۶، ساعت ۱۷:۵۴

/* پایگاه اطلاع‌رسانی آیت‌الله گنجی — MediaWiki:Common.js */

$( function () {
	'use strict';

	/* تشخیص مطمئن کاربر مهمان و واردشده */
	var isAnonymous = !mw.config.get( 'wgUserName' );

	document.body.classList.toggle( 'ganji-anonymous', isAnonymous );
	document.body.classList.toggle( 'ganji-authenticated', !isAnonymous );

	/* یکسان‌سازی حروف و اعداد برای جست‌وجوی فارسی */
	function normalize( value ) {
		return String( value || '' )
			.replace( /ي/g, 'ی' )
			.replace( /ك/g, 'ک' )
			.replace( /[۰-۹]/g, function ( digit ) {
				return String( '۰۱۲۳۴۵۶۷۸۹'.indexOf( digit ) );
			} )
			.replace( /[٠-٩]/g, function ( digit ) {
				return String( '٠١٢٣٤٥٦٧٨٩'.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( 'tbody tr' ).forEach( function ( row ) {
				var matched = !query ||
					normalize( row.textContent ).includes( query );

				row.hidden = !matched;

				if ( matched ) {
					visible++;
				}
			} );

			empty.hidden = visible !== 0;
		} );
	} );

	/* ساخت فهرست مطالب در منوی کناری پوستهٔ Medik */
	var sidebar =
		document.querySelector( '#mw-navigation nav' ) ||
		document.querySelector( '#mw-navigation' ) ||
		document.querySelector( '.sidebar' );

	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' ) &&
			!heading.classList.contains( 'mw-empty-elt' )
		);
	} );

	if ( !headings.length ) {
		return;
	}

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

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

	var list = document.createElement( 'ul' );

	headings.forEach( function ( heading, index ) {
		var headline = heading.querySelector( '.mw-headline' );
		var target = headline || heading;

		if ( !target.id ) {
			target.id = 'ganji-section-' + ( index + 1 );
		}

		var text = target.textContent
			.replace( /\[ویرایش\]/g, '' )
			.trim();

		if ( !text ) {
			return;
		}

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

		var link = document.createElement( 'a' );
		link.href = '#' + target.id;
		link.textContent = text;

		link.addEventListener( 'click', function () {
			document.querySelectorAll(
				'.ganji-sidebar-toc a.is-active'
			).forEach( function ( activeLink ) {
				activeLink.classList.remove( 'is-active' );
			} );

			link.classList.add( 'is-active' );
		} );

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

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