ميدياويكي:Gadget-Archiver.js

من كوبتيكبيديا
اذهب إلى التنقلاذهب الى البحث
لم تعد النسخة القابلة للطباعة مدعومة وقد تحتوي على أخطاء في العرض. يرجى تحديث علامات متصفحك المرجعية واستخدام وظيفة الطباعة الافتراضية في متصفحك بدلا منها.

ملاحظة: بعد النشر، أنت قد تحتاج إلى إفراغ الكاش الخاص بمتصفحك لرؤية التغييرات.

  • فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
  • جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
  • إنترنت إكسبلورر/إيدج: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
  • أوبرا: اضغط Ctrl-F5.
//https://en.wikipedia.org/wiki/User:Σ/Testing_facility/Archiver.js
// Translated by: [[User:Zaher.Kadour/Archiver.js]]
$(document).ready(function() {
    if (mw.config.get("wgNamespaceNumber") % 2 === 0 && ![4].includes(mw.config.get("wgNamespaceNumber")))
        // ليس صفحة نقاش وليس صفحة خاصة
        return;
    $("head").append("<style>a.arkylink { font-weight:bold } .arkyhighlight { background-color:#D9E9FF }</style>");
    var validSections = new Object();
    var fromTos = new Object();
    var wikiText = "";
    var revStamp;
    var startArchiveButton = mw.util.addPortletLink("p-cactions", "#", "أرشفة", "pt-oeca", "بدء/إنهاء معالج الأرشفة", null, null);
    var overlay = $(document.createElement("button"));
    $(startArchiveButton).click(function(e) {
        $(".arkylink").click();
        $(".arky").toggle();
        $("#archivebutton").toggle();
    });
    overlay.html("أرشف جميع الأقسام المحددة")
        .attr("id", 'archivebutton')
        .css("position", 'fixed')
        .css("bottom", 0)
        .css("height", '44px')
        .css("width", '100%')
        .css("font-size", '200%');
    $(document.body).append(overlay);
    overlay.toggle();
    overlay.click(function(e) {
        var numOfThreads, archiveTarget;
        var sections, archiveThis;
        var cutOffset, revisedPage;
        function cut(s, start, end) {
            return s.substr(0, start) + s.substring(end);
        }
        cutOffset = numOfThreads = 0;
        revisedPage = wikiText;
        sections = $("a.arkylink").map(function() {
            return $(this).attr("data-section");
        });
        if (!(numOfThreads = sections.length))
            return alert("لم تحدد أي قسم، إلغاء");
        archiveTarget = prompt("أرشفة " + numOfThreads + " أقسام: ما هو عنوان صفحة الأرشيف؟", mw.config.get("wgPageName"));
        if (!archiveTarget || archiveTarget == mw.config.get("wgPageName"))
            return alert("لم تحدد صفحة الأرشيف، إلغاء");
        sections.each(function(i, n) {
            revisedPage = cut(
                    revisedPage,
                    fromTos[n][0] - cutOffset,
                    fromTos[n][1] - cutOffset
            );
            cutOffset += fromTos[n][1] - fromTos[n][0];
        });
        archiveThis = sections.map(function() {
            return wikiText.substring(fromTos[this][0], fromTos[this][1]);
        }).toArray().join("");
        console.log("archive this:" + archiveThis);
        console.log("revised page:" + revisedPage);
        if (1) new mw.Api().postWithToken("csrf", {action: 'edit', title: mw.config.get("wgPageName"), text: revisedPage, summary: "أرشفة " + numOfThreads + " أقسام إلى [[" + archiveTarget + "]]", basetimestamp: revStamp, starttimestamp: revStamp})
            .done(function(res1) {
                alert("تم نقل القسم بنجاح");
                console.log(res1);
                new mw.Api().postWithToken("csrf", {action: 'edit', title: archiveTarget, appendtext: "\n" + archiveThis, summary: "أرشفة من [[" + mw.config.get("wgPageName") + "]]"})
                    .done(function(res2) {
                        alert("تم إضافة الأقسام إلى صفحة الأرشيف بنجاح");
                    })
                    .fail(function(res2) {
                        alert("فشل إضافة القسم إلى صفحة الأرشيف. التدقيق اليدوي مطلوب.");
                    })
                    .always(function(res2) {
                        console.log(res2);
                        window.location.reload();
                    });
            })
            .fail(function(res1) {
                alert("فشل نقل القسم من صفحة النقاش. إلغاء عملية الأرشفة.");
                console.log(res1);
                window.location.reload();
            });
    });
    new mw.Api().get({action: 'parse', page: mw.config.get("wgPageName")}).done(function(dataShit) {
        new mw.Api().get({action: 'query', pageids: mw.config.get("wgArticleId"), prop: ['revisions'], rvprop: ['content', 'timestamp']}).done(function(shit) {
            var rv;
            rv = shit.query.pages[mw.config.get("wgArticleId")].revisions[0];
            wikiText = rv["*"];
            revStamp = rv['timestamp'];
        });
        $(dataShit.parse.sections)
            .filter(function(i, s) { return s.index == parseInt(s.index) })
            .each(function(i, s) { validSections[s.index] = s });
        for (var i in validSections) {
            i = parseInt(i);
            fromTos[i] = [
                validSections[i].byteoffset,
                validSections.hasOwnProperty(i+1)?validSections[i+1].byteoffset:Infinity
            ];
        }
        $("#mw-content-text").find(":header").find("span.mw-headline").each(function(i, title) {
            var header, editSection, sectionNumber;
            header = $(this).parent();
            editSection = header.find(".mw-editsection"); // 1st child
            sectionNumber = header.find(".mw-editsection a:first");
            if (sectionNumber[0]) {
                sectionNumber = sectionNumber.attr("href").match(/&section=(\d+)/);
                if (sectionNumber)
                    sectionNumber = sectionNumber[1];
            } else // eg <h2>not a real section</h2>
                sectionNumber = undefined;
            if (validSections.hasOwnProperty(sectionNumber))
                editSection[0].innerHTML += "&nbsp;<span class=arky style=display:none><span class=mw-editsection-bracket>[</span><a data-section=" + sectionNumber + " " + "onclick=$(this).closest(':header').toggleClass('arkyhighlight');$(this).toggleClass('arkylink');>أرشف</a><span class=mw-editsection-bracket>]</span></span>";
        });
    });
});