میڈیاویکی:Gadget-wikiEdCounters.js

آزاد دائرۃ المعارف، ویکیپیڈیا سے

تفصیل کے لیے کھولیں کے بٹن پر کلک کریں یاددہانی: محفوظ کرنے کے بعد تازہ ترین تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش صاف کرنا ہوگا۔

  • فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دبا کر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R- )
  • گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
  • انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
  • اوپیرا: Tools → Preferences میں جائیں اور کیش صاف کریں

// کاوشِ Yethrosh (2024ء)

mw.loader.using(['mediawiki.api', 'mediawiki.util', 'jquery'], function () {
    
    $(function () {
        const textBox = document.getElementById('wpTextbox1');
        const summaryLabel = document.getElementById('wpSummaryLabel');

        if (!textBox) {
            return;
        }

        // تمام عناصر کی یکساں کلاس
        const counterClass = 'counters';

        // کاؤنٹر کا ایچ ٹی ایم ایل عنصر بنایا جا رہا ہے
        const createCounter = function (id, label) {
            const counter = document.createElement('p');
            counter.classList.add(counterClass);
            counter.id = id;
            summaryLabel.insertBefore(counter, summaryLabel.lastChild);
            counter.innerHTML = `${label}: 0`;
            return counter;
        };

        // حروف کی تعداد
        const charCounter = createCounter('charCounter', 'حروف کی تعداد');

        const updateCharCounter = function () {
            const cleanedText = textBox.value.replace(/[ \t\n*#=\[\]\|{}]+/g, '');
            charCounter.innerHTML = `حروف کی تعداد: ${cleanedText.length}`;
        };

        updateCharCounter();
        textBox.addEventListener('keyup', updateCharCounter);

        // الفاظ کی تعداد
        const wordCounter = createCounter('wordCounter', 'الفاظ کی تعداد');

        const updateWordCounter = function () {
            const text = textBox.value.trim();
            const words = text === '' ? [] : text.split(/\s+/);
            const excludeChars = ['.', ':', '"', '۔‌', '،', "'", '\\', '/', ',', '+', '|', '=', '_', '-', '%', '{', '}', '(', ')', '[', ']', '#', '*', '~', '?', '!', '<', '>', '@'];
            const wordCount = words.filter(word => !excludeChars.includes(word)).length;
            wordCounter.innerHTML = `الفاظ کی تعداد: ${wordCount}`;
        };

        updateWordCounter();
        textBox.addEventListener('keyup', updateWordCounter);
        
        // سطروں کی تعداد
        const lineCounter = createCounter('lineCounter', 'سطروں کی تعداد');

        const updateLineCounter = function () {
            const text = textBox.value;
            const lines = text.split('\n').filter(line => line.trim() !== '');
            lineCounter.innerHTML = `سطروں کی تعداد: ${lines.length}`;
        };

        updateLineCounter();
        textBox.addEventListener('keyup', updateLineCounter);

        // روابط کی تعداد
        const linkCounter = createCounter('linkCounter', 'روابط کی تعداد');

        const updateLinkCounter = function () {
            const text = textBox.value;
            const regex = /\[\[(.*?)(\|.*?)?\]\]/g;
            const matches = text.match(regex);
            linkCounter.innerHTML = `روابط کی تعداد: ${matches ? matches.length : 0}`;
        };

        updateLinkCounter();
        textBox.addEventListener('keyup', updateLinkCounter);

        // سرخ روابط کی تعداد
        const missingPagesCounter = createCounter('missingPagesCounter', 'سرخ روابط کی تعداد');
		
		// ماخوذ از https://www.mediawiki.org/wiki/API:Links#MediaWiki_JS_2
        const fetchMissingPages = function () {
    		return new Promise((resolve, reject) => {
    			const pageName = mw.config.get('wgPageName');
        		const params = {
        			action: 'query',
            		generator: 'links',
            		titles: pageName,
            		gpllimit: 'max',
            		format: 'json'
        		};
        		mwapi = new mw.Api();
        		mwapi.get(params).done(function (data) {
        			const pages = data.query.pages;
            		let missingPages = [];
            		for (const p in pages) {
            			if (pages[p].hasOwnProperty('missing')) {
            				missingPages.push(pages[p].title);
            			}
            		}
            		resolve(missingPages);
        		}).fail(function (error) {
        			reject(error);
        		});
    		});
        };

        const updateMissingPagesCounter = function () {
        	fetchMissingPages().then(missingPages => {
        		missingPagesCounter.innerHTML = `سرخ روابط کی تعداد: ${missingPages.length}`;
        	}).catch(error => {
        		console.error('Error fetching missing pages:', error);
        	});
        };
        
		updateMissingPagesCounter();
        textBox.addEventListener('keyup', updateMissingPagesCounter);

        // سانچوں کی تعداد
        const templateCounter = createCounter('templateCounter', 'سانچوں کی تعداد');

        const updateTemplateCounter = function () {
            const text = textBox.value;
            const regex = /\{\{(.*?)(\|.*?)?\}\}/g;
            const matches = text.match(regex);
            templateCounter.innerHTML = `سانچوں کی تعداد: ${matches ? matches.length : 0}`;
        };

        updateTemplateCounter();
        textBox.addEventListener('keyup', updateTemplateCounter);

        // زمروں کی تعداد
        const categoryCounter = createCounter('categoryCounter', 'زمروں کی تعداد');

        const updateCatCounter = function () {
            const text = textBox.value;
            const regex = /\[\[زمرہ\:(.*?)(\|.*?)?\]\]/g;
            const matches = text.match(regex);
            categoryCounter.innerHTML = `زمروں کی تعداد: ${matches ? matches.length : 0}`;
        };

        updateCatCounter();
        textBox.addEventListener('keyup', updateCatCounter);
    });
});