انتقل إلى المحتوى

ميدياويكي:Common.js

من Dbspedia
مراجعة ٠٦:٥٩، ١٥ أكتوبر ٢٠٢٦ بواسطة Admin (نقاش | مساهمات)

ملاحظة: بعد الحفظ، قد يلزمك محو الاختزان الخاص بمتصفحك لرؤية التغييرات.

  • فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
  • جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
  • إنترنت إكسبلورر/إيدج: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
  • أوبرا: اضغط Ctrl-F5.
/* أي جافاسكريبت هنا سيتم تحميلها لكل المستخدمين مع كل تحميل للصفحة. */

// 1. معالجة وتنسيق صفحة المعرفات برمجياً بالاعتماد على النصوص الحية
if (window.location.href.indexOf('%D8%A7%D9%84%D9%85%D8%B9%D8%B1%D9%81%D8%A7%D8%AA') !== -1 || document.title.indexOf('المعرفات') !== -1) {
    window.addEventListener('DOMContentLoaded', function() {
        // تغيير رؤوس الأعمدة فوراً لتطابق الترتيب الجديد
        var table = document.getElementById('table-ids-mw');
        if (table) {
            var ths = table.getElementsByTagName('th');
            if (ths.length >= 2) {
                ths[0].textContent = 'اسم الصفحة (page_id)';
                ths[1].textContent = 'اسم الصفحة (القناع)';
            }

            // فحص خلية تلو الأخرى وتبديل القيم بناءً على الروابط
            var rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
            for (var i = 0; i < rows.length; i++) {
                var tds = rows[i].getElementsByTagName('td');
                if (tds.length >= 2) {
                    var link = tds[0].getElementsByTagName('a')[0];
                    if (link) {
                        var rawTitle = link.textContent || link.innerText;
                        var rawId = tds[1].textContent || tds[1].innerText;

                        // وضع اسم الصفحة البرمجي (Person:ID) في العمود الأيمن
                        if (rawTitle.indexOf('Person:') === -1 && !isNaN(rawId.trim())) {
                            link.textContent = 'Person:' + rawId.trim();
                        }

                        // وضع اسم القناع النقي في العمود الأيسر باللون الأخضر المميز
                        var cleanMask = rawTitle.replace(/Person:/g, '').replace(/\s*\(.*?\)\s*/g, '').trim();
                        tds[1].textContent = cleanMask;
                        tds[1].style.color = '#27ae60';
                        tds[1].style.fontWeight = 'bold';
                    }
                }
            }
        }
    });
}

// 2. محرك شجرة الأنساب التكراري المطور والمحمي ضد التعليق
window.addEventListener('DOMContentLoaded', function() {
    var containers = document.getElementsByClassName('family-tree-api-render');
    if (containers.length === 0) return;

    for (var i = 0; i < containers.length; i++) {
        (function(container) {
            var rootId = parseInt(container.getAttribute('data-rootid'), 10);
            if (!rootId) return;

            var pageTitle = (document.getElementById('firstHeading') || document.querySelector('.firstHeading')).textContent.trim();
            var apiUrl = '/api.php?action=ask&format=json&query=' + encodeURIComponent('[[معرف الأب::+]] OR [[معرف_الأب::+]]|?معرف الشخص|?معرف_الشخص|?معرف الأب|?معرف_الأب|?Display title of|limit=500');

            var xhr = new XMLHttpRequest();
            xhr.open('GET', apiUrl, true);
            xhr.onload = function() {
                if (xhr.status >= 200 && xhr.status < 400) {
                    var data = JSON.parse(xhr.responseText);
                    var results = (data && data.query && data.query.results) ? data.query.results : null;

                    if (results && Object.keys(results).length > 0) {
                        var rawNodes = [];

                        Object.keys(results).forEach(function(title) {
                            var pageData = results[title];
                            var printouts = pageData.printouts || {};

                            var cleanName = '';
                            if (printouts["Display title of"] && printouts["Display title of"].length > 0) {
                                cleanName = printouts["Display title of"][0].fulltext || printouts["Display title of"][0];
                            }
                            if (!cleanName || !isNaN(cleanName)) {
                                cleanName = title;
                            }
                            cleanName = cleanName.replace(/Person:/g, '').replace(/\s*\(.*?\)\s*/g, '').trim();

                            var currentIdAttr = printouts["معرف الشخص"] || printouts["معرف_الشخص"];
                            var currentId = (currentIdAttr && currentIdAttr.length > 0) ? parseInt(currentIdAttr[0].fulltext || currentIdAttr[0], 10) : parseInt(pageData.pageid, 10);

                            var fatherIdAttr = printouts["معرف الأب"] || printouts["معرف_الأب"];
                            var fatherId = null;
                            if (fatherIdAttr && fatherIdAttr.length > 0) {
                                fatherId = parseInt(fatherIdAttr[0].fulltext || fatherIdAttr[0], 10);
                            }

                            if (currentId && fatherId && !isNaN(fatherId)) {
                                rawNodes.push({ id: currentId, parentId: fatherId, title: cleanName, pageName: title });
                            }
                        });

                        function buildTreeHtml(currentParentId, depth) {
                            if (depth > 12) return "";
                            var children = rawNodes.filter(function(node) { return node.parentId === currentParentId; });
                            if (children.length === 0) return "";

                            children.sort(function(a, b) { return a.title.localeCompare(b.title, 'ar'); });

                            var html = "";
                            var indent = Array(depth + 1).join("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

                            children.forEach(function(child) {
                                html += "<br />" + indent + "←&nbsp;<a href='/index.php?title=" + encodeURIComponent(child.pageName) + "' style='color: #2a4b7c; font-weight: bold;'> " + child.title + "</a>";
                                html += buildTreeHtml(child.id, depth + 1);
                            });
                            return html;
                        }

                        var rootCleanTitle = pageTitle.replace(/Person:/g, '');
                        var childrenHtml = buildTreeHtml(rootId, 1);
                        var finalHtml = "• '''" + rootCleanTitle + "'''";

                        if (childrenHtml) {
                            container.innerHTML = finalHtml + childrenHtml;
                        } else {
                            container.innerHTML = finalHtml + "<br />&nbsp;&nbsp;←&nbsp;<span style='color:#666;'>لا توجد فروع أو ذرية مسجلة نزولاً لهذا المعرف الرقمي في النظام.</span>";
                        }
                    } else {
                        container.innerHTML = "• '''" + pageTitle.replace(/Person:/g, '') + "'''<br />&nbsp;&nbsp;←&nbsp;<span style='color:#666;'>لا توجد فروع مسجلة حالياً في النظام المحلي.</span>";
                    }
                }
            };
            xhr.send();
        })(containers[i]);
    }
});