میڈیاویکی:Gadget-Peshkar-addInfobox.js

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

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

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

//<nowiki>
var peshkarAddInfobox = (function() {

    // خانۂ معلومات کے سانچوں کے کلیدی الفاظ
    var infoboxIdentifiers = ['Infobox', 'Geobox', 'Taxobox', 'Japanese city', 'India Districts', 'Drugbox', 'Chembox', 'خانہ معلومات', 'خانۂ معلومات'];

    // خانۂ معلومات کے چند تراجم
    var infoboxTranslations = [
        ['Active', 'فعال'],
        ['No', 'نہیں'],
        ['فہرست خودمختار ممالک', 'فہرست خودمختار ممالک|ملک'],
        ['ہسپانوی بلدیات', 'ہسپانوی بلدیات|بلدیہ'],
        ['کمیون (فرانسیسی ملکی تقسیمات)', 'کمیون (فرانسیسی ملکی تقسیمات)|کمیون'],
        ['آذربائجان کی انتظامی تقسیمات', 'آذربائجان کی انتظامی تقسیمات|بخش'],
        ['پاکستان کی انتظامی تقسیمات', 'پاکستان کی انتظامی تقسیمات|صوبہ'],
        ['مرکزی یورپی وقت', 'مرکزی یورپی وقت|وقت'],
        ['صوبجات قزاقستان', 'صوبجات قزاقستان|صوبہ'],
        ['برما کی انتظامی تقسیمات', 'برما کی انتظامی تقسیمات|صوبہ'],
        ['خودمختار ہسپانوی صوبجات', 'خودمختار ہسپانوی صوبجات|خودمختار صوبہ'],
        ['صوبجات برازیل', 'صوبجات برازیل|صوبہ'],
        ['البانوی صوبجات', 'البانوی صوبجات|صوبہ'],
        ['جورجیا کی انتظامی تقسیمات', 'جورجیا کی انتظامی تقسیمات|صوبہ'],
        ['صوبجات سری لنکا', 'صوبجات سری لنکا|صوبہ'],
        ['ہسپانوی صوبجات', 'ہسپانوی صوبجات|صوبہ'],
        ['فہرست بلدیات پالنیشیا', 'فہرست بلدیات پالنیشیا|بلدیہ'],
        ['صوبجات افغانستان', 'صوبجات افغانستان|صوبہ'],
        ['افغانستان کے اضلاع', 'افغانستان کے اضلاع|ضلع'],
        ['بھارت کی ریاستیں اور عملداریاں', 'بھارت کی ریاستیں اور عملداریاں|ریاست'],
        ['صوبجات ترکی', 'صوبجات ترکی|صوبہ'],
        ['محافظات مصر', 'محافظات مصر|محافظہ'],
        ['اطالیہ کی علاقائی تقسیم', 'اطالیہ کی علاقائی تقسیم|تقسیم'],
        ['اطالیہ کے صوبہ جات', 'اطالیہ کے صوبہ جات|صوبہ'],
        ['ہالینڈ کے صوبہ جات', 'ہالینڈ کے صوبہ جات|صوبہ'],
        ['صوبجات آئرلینڈ', 'صوبجات آئرلینڈ|صوبہ'],
        ['صوبجات سویڈن', 'صوبجات سویڈن|سویڈن'],
        ['سویڈن کی کاؤنٹیاں', 'سویڈن کی کاؤنٹیاں|کاؤنٹی'],
        ['چین کے صوبے', 'چین کے صوبے|صوبہ'],
        ['بلدیات جرمنی', 'بلدیات جرمنی|بلدیہ'],
        ['بھارت کے اضلاع', 'بھارت کے اضلاع|ضلع'],
        ['کاؤنٹی (ریاستہائے متحدہ)', 'کاؤنٹی (ریاستہائے متحدہ)|کاؤنٹی'],
        ['ریاستہائے متحدہ امریکا کی سیاسی تقسیم', 'ریاستہائے متحدہ امریکا کی سیاسی تقسیم|ریاست'],
        ['ارمینیا کے شہروں کی فہرست', 'ارمینیا کے شہروں کی فہرست|شہر'],
        ['Country', 'ملک'],
        ['country', 'ملک'],
        ['Region', 'علاقہ'],
        ['Districts', 'ضلع'],
        ['Mayor', 'میئر'],
        ['Vice Mayor', 'نائب میئر'],
        ['Vice mayor', 'نائب میئر'],
        ['Settled', 'آبادی'],
        ['Tourism region', 'سیاحتی علاقہ'],
        ['First mentioned', 'ذکر اولین'],
        ['Phone prefix', 'فون سابقہ'],
        ['Independent', 'خودمختار'],
        ['mayor', 'میئر'],
        ['City Mayor', 'میئر'],
        ['Governing body', 'حاکم عملہ'],
        ['Town', 'قصبہ'],
        ['City', 'شہر'],
        ['Established', 'قیام'],
        ['Number of city council members', 'تعداد اراکین شہر کونسل'],
        ['Island', 'جزیرہ'],
        ['island', 'جزیرہ'],
        ['Post Code', 'رمز ڈاک'],
        ['Post code', 'رمز ڈاک'],
        ['post code', 'رمز ڈاک'],
        ['Postal code', 'رمز ڈاک'],
        ['Autonomous Region', 'خودمختار علاقہ'],
        ['Province', 'صوبہ'],
        ['Founded', 'قیام'],
        ['Incorporated', 'ثبت شدہ'],
        ['Granted city rights', 'مشہور بنام شہر'],
        ['ZIP code', 'زپ کوڈ'],
        ['Religions', 'مذاہب'],
        ['Mesoregion', 'نیم علاقہ'],
        ['Languages', 'زبانیں'],
        ['Official', 'دفتری'],
        ['State', 'صوبہ'],
        ['Telephone code', 'رمز ٹیلیفون'],
        ['Municipality', 'بلدیہ'],
        ['Seat', 'نشست'],
        ['Racial makeup', 'نژاد'],
        ['Body', 'اراکین'],
        ['Nearest city', 'نزدیک ترین شہر'],
        ['Civic agency', 'نمائندہ شہر'],
        ['District', 'ضلع'],
        ['constituency', 'حلقہ نیابت'],
        ['County', 'کاؤنٹی'],
        ['Administrator', 'منتظم'],
        ['Governing body', 'حاکم عملہ'],
        ['Waterways', 'آبی گذرگاہیں'],
        ['Environs', 'محیط'],
        ['Vice-chairman', 'معاون'],
        ['Chairman', 'چیئرمین'],
        ['Roadmaster', 'ناظم راہ'],
        ['Capital', 'پایہ تخت'],
        ['Councillor', 'رکن شوری'],
        ['Administrative body', 'انتظامی عملہ'],
        ['Quadrant', 'سمت'],
        ['Ward', 'متناسقات'],
        ['Sector', 'خطہ'],
        ['Postcode', 'رمز ڈاک'],
        ['Village President', 'سرپنچ'],
        ['Sub-Region', 'ذیلی علاقہ'],
        ['3-digit postal code prefix', 'سہ عددی رمز ڈاک سابقہ'],
        ['Post office Founded', 'قیام ڈاک گھر'],
        ['Incorporated (Village)', 'تبدیل از گاؤں'],
        ['Incorporated (Town)', 'تبدیل از شہر'],
        ['Census Ranking', 'درجات مردم شماری'],
        ['Historic Sites', 'تاریخی مقامات'],
        ['Zone', 'خطہ'],
        ['Municipality/City', 'بلدیہ/شہر'],
        ['Department', 'بخش'],
        ['Location in the state of', 'ریاست میں محل وقوع'],
        ['(population and area)', '(آبادی و رقبہ)'],
        ['Congressional district', 'کانگریسی ضلع'],
        ['Airport', 'ہوائی اڈا'],
        ['Public transit', 'عوامی نقل و حمل'],
        ['City from', 'شہر بننے کی تاریخ'],
        ['Oblast', 'اوبلاست'],
        ['Raion', 'رایون'],
        ['City status', 'شہر کا درجہ'],
        ['Phone code', 'فون کوڈ'],
        ['Leader', 'رہنما'],
        ['City rights', 'شہر بنا'],
        ['Urban areas', 'شہری علاقہ'],
        ['Location in Russia', 'روس میں محل وقوع'],
        ['Location in Ukraine', 'یوکرین میں محل وقوع'],
        ['Territory', 'علاقہ'],
        ['Abolished', 'منسوخ'],
        ['abolished', 'منسوخ']
    ];

    // انگریزی صفحہ سے خانۂ معلومات اخذ کرنے کے لیے

    async function getInfobox(text) {
        let startIndex = -1;
        let endIndex = -1;
        let count = 0;
        let infoboxContent = '';

        for (const identifier of infoboxIdentifiers) {
            const pattern = new RegExp('{{\\s*' + identifier + '\\s*', 'i');
            startIndex = text.search(pattern);
            if (startIndex !== -1) {
                break;
            }
        }

        if (startIndex === -1) return '';
        for (let i = startIndex; i < text.length; i++) {
            if (text[i] === '{' && text[i + 1] === '{') {
                count++;
                i++;
            } else if (text[i] === '}' && text[i + 1] === '}') {
                count--;
                if (count === 0) {
                    endIndex = i + 2;
                    break;
                }
                i++;
            }
        }

        while (endIndex < text.length && /\s/.test(text[endIndex])) {
            endIndex++;
        }
        infoboxContent = count === 0 ? text.substring(startIndex, endIndex) : '';
        infoboxContent += '\n';

        const wikilinkRegex = /\[\[([^\]]+)\]\]/g;
        let matches = [...infoboxContent.matchAll(wikilinkRegex)];
        for (const match of matches) {
            const pageTitle = match[1].replace(/ /g, '_');
            const params = new URLSearchParams({
                action: 'query',
                titles: pageTitle,
                prop: 'langlinks',
                lllang: 'ur',
                format: 'json',
                origin: '*'
            });

            const apiUrl = `https://en.wikipedia.org/w/api.php?${params}`;
            try {

                const response = await fetch(apiUrl);
                const data = await response.json();
                if (data.query && data.query.pages) {
                    const page = data.query.pages;
                    const pageId = Object.keys(page)[0];
                    if (pageId !== "-1" && page[pageId].langlinks) {
                        const urduTitle = page[pageId].langlinks[0]['*'];
                        infoboxContent = infoboxContent.replace(match[0], `[[${urduTitle}]]`);
                    }
                }
            } catch (error) {
                console.error('Error fetching data:', error);
            }
        }
        return infoboxContent;
    }

    // اردو صفحہ میں خانۂ معلومات شامل کرنے کے لیے

    async function addInfobox(pageContent) {
        if (infoboxIdentifiers.some(identifier => pageContent.includes(identifier))) {
            return pageContent;
        }
        const currentPage = mw.config.get('wgPageName');

        try {
            const data = await new mw.Api().get({
                action: 'query',
                prop: 'langlinks',
                titles: currentPage,
                lllang: 'en',
                formatversion: 2
            });

            if (data.query.pages.length > 0 && data.query.pages[0].langlinks && data.query.pages[0].langlinks.length > 0) {
                const englishTitle = data.query.pages[0].langlinks[0].title;
                const endpoint = 'https://en.wikipedia.org/w/api.php';
                const params = new URLSearchParams({
                    action: 'query',
                    prop: 'revisions',
                    titles: englishTitle,
                    rvprop: 'content',
                    rvslots: 'main',
                    formatversion: 2,
                    format: 'json'
                });

                const response = await fetch(`${endpoint}?origin=*&${params.toString()}`, {
                    method: 'GET',
                    headers: {
                        'Content-Type': 'application/json'
                    }
                });
                const responseData = await response.json();
                if (responseData.query.pages.length > 0 && responseData.query.pages[0].revisions && responseData.query.pages[0].revisions.length > 0) {
                    let content = responseData.query.pages[0].revisions[0].slots.main.content;
                    content = content.replace(/\r/g, '');
                    content = content.replace(/\|\s*name\s*=\s*\w+/gi, '| name = {{subst:PAGENAME}}');
                    content = content.replace(/\|\s*title\s*=\s*\w+/gi, '| title = {{subst:PAGENAME}}');
                    content = content.replace(/]]s /g, ']] ').replace(/]] and \[\[/g, ']] اور [[').replace(/\]\], \[\[/g, ']]، [[');
                    content = content.replace(/–present\n/g, '-تا حال\n').replace(/– present\n/g, '- تاحال\n').replace(/–present /g, '-تا حال\n');
                    content = content.replace(/– present /g, '- تاحال ');

                    let infoboxContent = await getInfobox(content);
                    if (infoboxContent) {
                        for (const [english, urdu] of infoboxTranslations) {
                            const regex = new RegExp(`(\\|\\s*[^|=]+\\s*=\\s*)(${english})([^|}]*)`, 'gi');
                            infoboxContent = infoboxContent.replace(regex, `$1${urdu}$3`);
                        }

                        const maintenanceTemplatesEndRegex = /(?:\r?\n|\r)(?=\{\{[^{]*\}\}(?:\r?\n|\r)*[\u0600-\u06FF])/;
                        let match = maintenanceTemplatesEndRegex.exec(pageContent);
                        let lastIndex = 0;
                        while (match) {
                            lastIndex = match.index + match[0].length;
                            match = maintenanceTemplatesEndRegex.exec(pageContent.substring(lastIndex));
                        }
                        if (lastIndex > 0) {
                            pageContent = pageContent.slice(0, lastIndex) + infoboxContent + pageContent.slice(lastIndex);
                        } else {
                            pageContent = infoboxContent + pageContent;
                        }
                    }
                } else {
                    console.error('No content found for the English page');
                }
            } else {}
            return pageContent;
        } catch (error) {
            console.error('Error:', error);
            throw error;
        }
    }
    return {
        addInfobox: addInfobox
    };
}());

if (typeof window !== "undefined") {
    window.peshkarAddInfobox = peshkarAddInfobox;
}
//</nowiki>