ผู้ใช้:Bebiezaza/iScript/modules/mainTabs.js

จากวิกิพีเดีย สารานุกรมเสรี

หมายเหตุ: หลังเผยแพร่ คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง

  • ไฟร์ฟอกซ์ / ซาฟารี: กด Shift ค้างขณะคลิก Reload หรือกด Ctrl-F5 หรือ Ctrl-R (⌘-R บนแมค)
  • กูเกิล โครม: กด Ctrl-Shift-R (⌘-Shift-R บนแมค)
  • อินเทอร์เน็ตเอกซ์พลอเรอร์ และ Edge: กด Ctrl ค้างขณะคลิก Refresh หรือกด Ctrl-F5
  • โอเปร่า: กด Ctrl-F5
// ========================================================
// สคริปต์จัดให้: mainTabs module
//
// Copyright (C) 2006-2022, Jutiphan Mongkolsuthree
// 2021-2023, Bebiezaza
// Certain functions are copyrighted by their
// respective copyright holders
//
// Created: 07/01/2007
// Rewritten: 23/10/2021
// Replaced: lastdiff, cleanup, advert
// ========================================================
/* <pre><nowiki> */

/*
 ****************************************
 *** Edit section 0
 ****************************************
 * Mode of invocation:     Tab on pages ("0") with edit permission where this sub-module is active
 * Active on:              Existing non-special pages where page content model is of wikitext
 */
function editSection0() {
    if (mw.config.get('wgNamespaceNumber') < 0 || mw.config.get('wgPageContentModel') !== "wikitext" || mw.config.get('wgArticleId') === 0) return;

    var editTab, url;
    if (!(editTab = document.getElementById('ca-edit'))) return;
    if (!(url = editTab.getElementsByTagName('a')[0].href)) return;

    addTab(url + "&section=0", "0", "ca-edit-0", "แก้ไขย่อหน้าแรกสุด", editTab.nextSibling, true);

    if (window.location.href.indexOf("&section=0") !== -1) {
        // if (["vector", "vector-2022"].indexOf(mw.config.get('skin')) === -1) editTab.classList.remove("selected");
        document.getElementById("ca-edit-0").classList.add("selected");
    }
}

/*
 ****************************************
 *** Latest difference
 ****************************************
 * Mode of invocation:     Tab on non-diff and diff pages ("ล่าสุด")
 * Active on:              Existing non-special pages
 */
function lastDiff() {
    if (mw.config.get('wgNamespaceNumber') >= 0 && mw.config.get('wgArticleId') !== 0) {
        addTab(mw.util.getUrl(mw.config.get('wgPageName'), {diff: 'cur', oldid: 'prev'}), "ล่าสุด", "ca-ldff", "ดูความแตกต่างล่าสุด", document.getElementById('ca-history').nextSibling, true);
    }
}

/* notify */
function addTemplate(template, desc, addTime, yearType) {
    var pageName = mw.config.get("wgPageName");
    var content = iScriptAPI.getPageContent(pageName);
    var summary = "";

    if (content == "") return mw.notify($('<span style="color: red">ไม่พบบทความที่เลือก ซึ่งอาจถูกลบโดยผู้ดูแลระบบไปแล้ว</span>'));
    else if (content.indexOf("{{" + template) >= 0) return mw.notify($('<span style="color: red">ขออภัย บทความนี้ได้ถูก' + desc + 'ไปแล้ว</span>'));

    // yearType true = CE, false = BE
    var jsDate = new Date();
    if (addTime) template += "|date={{subst:CURRENTMONTHNAME}} " + (yearType ? jsDate.getFullYear() : jsDate.getFullYear() + 543);
    if (template == "เก็บกวาด") {
        content = content.replace(/{{ต้องการหมวดหมู่}}\n?/g, "");
        content = content.replace(/{{ต้องการวิกิลิงก์}}\n?/g, "");
    }

    content = "{{" + template + "}}\n" + content;
    summary = desc + iScriptConfig.Tagline;
    // push source
    mw.notify('กำลังบันทึกไปที่หน้า  ' + pageName + ' กรุณารอสักครู่...');
    iScriptAPI.editPage(pageName, content, summary, true, true);
}

/* notifyFiles */
function addFileTemplate(template, desc, talkAction) {
    var pageName = mw.config.get("wgPageName");
    var content = iScriptAPI.getPageContent(pageName);
    var summary = "";

    if (content == "") return mw.notify($('<span style="color: red">ไม่พบไฟล์ที่เลือก ซึ่งอาจถูกลบโดยผู้ดูแลระบบไปแล้ว</span>'));
    else if (content.indexOf("{{" + template) != -1) return mw.notify($('<span style="color: red">ขออภัย ไฟล์นี้ได้ถูก' + desc + 'ไปแล้ว</span>'));

    if (iScriptConfig.autoNotifyUploader || confirm('เพื่อเป็นมารยาทที่ดี คุณต้องการจะแจ้งผู้ใช้ที่อัปโหลดภาพนี้หรือไม่?') == true) {
        var uploader = selectUploader(pageName);
        if (uploader = "null") return mw.notify($('<span style="color: red">ยกเลิกการ' + desc + 'แล้ว เพื่อความปลอดภัย</span>'));
        openInNewWindow(mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=User_talk:" + uploader + "&action=edit&iScriptAction=" + talkAction + "&target=" + pageName);
    }

    content = "{{" + template + "|{{subst:LOCALDAY2}}/{{subst:LOCALMONTH}}/" + getBEYear() + "}}\n" + content;
    summary = desc + iScriptConfig.Tagline;
    // push source
    mw.notify('กำลังบันทึกไปที่หน้า  ' + pageName + ' กรุณารอสักครู่...');
    iScriptAPI.editPage(pageName, content, summary, false, true);
}

/* speedyAFD */
function addAFDRequest() {
    var pageName = mw.config.get("wgPageName");
    var content = iScriptAPI.getPageContent(pageName);
    var summary = "";

    if (mw.config.get('wgArticleId') === 0) return mw.notify($('<span style="color: red">ไม่พบบทความที่เลือก ซึ่งอาจถูกลบโดยผู้ดูแลระบบไปแล้ว</span>'));
    else if (content.indexOf("{{ลบ") != -1) return mw.notify($('<span style="color: red">บทความนี้ได้ถูกแจ้งลบไปก่อนหน้านี้แล้ว ยกเลิกการแจ้งลบเพื่อป้องกันการแจ้งซ้ำ</span>'));

    var reason = prompt("กรุณาระบุสาเหตุที่แจ้งลบ:", "");
    if (reason == "" || reason == null) return mw.notify($('<span style="color: red">ยกเลิกการแจ้งลบแล้ว</span>'));

    if (mw.config.get('wgNamespaceNumber') == 6 && (iScriptConfig.autoNotifyUploader || confirm('เพื่อเป็นมารยาทที่ดี คุณต้องการจะแจ้งผู้ใช้ที่อัปโหลดภาพนี้หรือไม่?') == true)) {
        var uploader = selectUploader(pageName);
        if (uploader = "null") return mw.notify($('<span style="color: red">ยกเลิกการแจ้งลบแล้ว เพื่อความปลอดภัย</span>'));
        openInNewWindow(mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=User_talk:" + uploader + "&action=edit&iScriptAction=warnIFD&target=" + pageName);
    }

    if (mw.config.get('wgNamespaceNumber') == 10) {
        content = "<noinclude>{{ลบ|" + reason + "}}</noinclude>" + content;
    } else if (mw.config.get('wgTitle').indexOf("js") == mw.config.get('wgTitle').length - 2 || mw.config.get('wgTitle').indexOf("css") == mw.config.get('wgTitle').length - 3) {
        content = "/* {{ลบ|" + reason + "}} */\n\n" + content;
    } else {
        content = "{{ลบ|" + reason + "}}\n\n" + content;
    }
    summary = "แจ้งลบ" + iScriptConfig.Tagline + ": " + reason;
    // push source
    mw.notify('กำลังแจ้งลบบทความ กรุณารอสักครู่...');
    iScriptAPI.editPage(pageName, content, summary, false, true);
}

/* projectMenu */
// build button
function populateWPMenu() {
    if (iScriptConfig.wikiProjectTabs == "none") return;
    var config = iScriptConfig.wikiProjectTabs.replace(/ /g, "").split(",");
    
    if (config == "all") {
        Wikiprojects.sort(dynamicSort("name"));
        for (var i in Wikiprojects) {
            addWPMenu("↑วิกิ" + Wikiprojects[i].name, "ca-WP" + Wikiprojects[i].link, "แจ้งอยู่ใน" + Wikiprojects[i].project_name, "javascript:addWPBanner('" + Wikiprojects[i].template + "', '" + Wikiprojects[i].project_name + "', '" + Wikiprojects[i].link + "')");
        }
    } else if (config == "recent") {
        for (var i = 0; i <= 9; i++) {
            addWPMenu("↑วิกิ" + Wikiprojects[i].name, "ca-WP" + Wikiprojects[i].link, "แจ้งอยู่ใน" + Wikiprojects[i].project_name, "javascript:addWPBanner('" + Wikiprojects[i].template + "', '" + Wikiprojects[i].project_name + "', '" + Wikiprojects[i].link + "')");
        }
    } else {
        for (var j in config) {
            for (var i in Wikiprojects) {
                if (config[j].toLowerCase() == Wikiprojects[i].link.toLowerCase()) {
                    addWPMenu("↑วิกิ" + Wikiprojects[i].name, "ca-WP" + Wikiprojects[i].link, "แจ้งอยู่ใน" + Wikiprojects[i].project_name, "javascript:addWPBanner('" + Wikiprojects[i].template + "', '" + Wikiprojects[i].project_name + "', '" + Wikiprojects[i].link + "')");
                    break;
                }
            }
        }
    }
}

// execute
function addWPBanner(template, projectName, link) {
    var pagePrefix = "พูดคุย:";
    if (mw.config.get("wgNamespaceNumber") > 2) {
        pagePrefix = mw.config.get("wgPageName").substr(0, mw.config.get("wgPageName").indexOf(":") + 1);
        if (mw.config.get("wgNamespaceNumber") % 2 == 0) {
            if (pagePrefix.indexOf("ผู้ใช้") != -1) {
                pagePrefix = "คุยกับ" + pagePrefix;
            } else {
                pagePrefix = "คุยเรื่อง" + pagePrefix;
            }
        }
    }
    var pageName = pagePrefix + mw.config.get("wgTitle");
    var content = iScriptAPI.getPageContent(pageName);
    var contentTemplate = content.indexOf("{{" + template);
    var summary = "";
    var level;

    // prompt
    if (mw.config.get('wgNamespaceNumber') == 14 || mw.config.get('wgNamespaceNumber') == 15) {
        level = "หมวดหมู่";
    } else {
        level = prompt("กรุณาระบุระดับของบทความนี้: คัดสรร คุณภาพ ดี พอใช้ โครง รายชื่อ (เว้นว่างและคลิก OK หากจะไม่ระบุ)", "");
        if (level == undefined) return;
    }

    if (level.length == 0) {
        if (content.indexOf("{{" + template) >= 0) return mw.notify($('<span style="color: red">ขออภัย บทความนี้ได้ถูกแจ้งอยู่ใน' + projectName + 'ไปแล้ว</span>'));
        content = "{{" + template + "}}\n" + content;
        summary = "แจ้งอยู่ใน[[WP:" + link + "|" + template + "]]" + iScriptConfig.Tagline;
    } else {
        if (contentTemplate >= 0) {
            var searcher = new RegExp("\\{\\{" + template + "(\\}\\}|\\|ระดับ=(.*?)\\}\\})", "ig");
            var currentLevel = searcher.exec(content)[2];
            content = content.replace(searcher, "{{" + template + "|ระดับ=" + level + "}}");
            if (currentLevel == undefined) summary = "เปลี่ยนระดับ" + template + iScriptConfig.Tagline + ": ไม่ได้ระบุ → " + level;
            else summary = "เปลี่ยนระดับ" + template + iScriptConfig.Tagline + ": " + currentLevel + " → " + level;
        } else {
            if (level.indexOf("คัดสรร") != -1 || level.indexOf("คุณภาพ") != -1) {
                content = content.replace(/((\{\{เป็นบทความ(คุณภาพ|คัดสรร)(\|.*?)?\}\}\r?\n)+)/ig, "$1{{" + template + "|ระดับ=" + level + "}}\n");
                content = content.replace(/((\{\{(GA|FA)(\|.*?)?\}\}\r?\n)+)/ig, "$1{{" + template + "|ระดับ=" + level + "}}\n");
            } else content = "{{" + template + "|ระดับ=" + level + "}}\n" + content;
            summary = "แจ้งอยู่ใน[[WP:" + link + "|" + projectName + "]]" + iScriptConfig.Tagline + ": " + level;
        }
    }
    // push source
    mw.notify('กำลังบันทึกไปที่หน้า  ' + pageName + ' กรุณารอสักครู่...');
    iScriptAPI.editPageWithCreate(pageName, content, summary, true, false);
}

$(document).ready(function() {
    editSection0();
    lastDiff();

    if (mw.config.get('wgAction') == "view" && document.getElementById('ca-edit') != null && mw.config.get('wgNamespaceNumber') >= 0 && mw.config.get('wgArticleId') !== 0) {
        if (mw.config.get('wgNamespaceNumber') == 0) {
            addMenu("★เก็บกวาด", "ca-scleanup", "เก็บกวาดทันใจ", "growth", mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + mw.config.get('wgPageName') + "&action=edit&iScriptAction=speedyCleanup");
        }

        if (iScriptConfig.Edition == Editions.Wikipedia) {
            if (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgTitle') == "ทดลองเขียน") {
                addMenu("↑ปรับภาษา", "ca-improveLang", "แจ้งควรปรับการใช้ภาษา", "growth", "javascript:addTemplate('แก้ภาษา', 'แจ้งควรปรับการใช้ภาษา', false)");
                addMenu("↑ต้องการเก็บกวาด", "ca-needCleanup", "แจ้งต้องการเก็บกวาด", "style", "javascript:addTemplate('เก็บกวาด', 'แจ้งต้องการเก็บกวาด', false)");
                addMenu("↑ตรวจลิขสิทธิ์", "ca-nCopyvioCheck", "แจ้งต้องการตรวจลิขสิทธิ์", "content", "javascript:addTemplate('ตรวจลิขสิทธิ์', 'แจ้งต้องการตรวจลิขสิทธิ์', false)");
                addMenu("↑โฆษณา", "ca-advert", "แจ้งโฆษณา", "content", "javascript:addTemplate('โฆษณา', 'แจ้งโฆษณา', false)");
                addMenu("↑ต้องการอ้างอิง", "ca-ref", "แจ้งต้องการอ้างอิง", "content", "javascript:addTemplate('ต้องการอ้างอิง', 'แจ้งต้องการอ้างอิง', true)");
                addMenu("↑คุณเป็นใคร", "ca-Who", "แจ้งว่าคุณเป็นใคร", "content", "javascript:addTemplate('ใคร', 'แจ้งคุณเป็นใคร', true)");
                addMenu("↑เรซูเม", "ca-resume", "แจ้งเรซูเม", "content", "javascript:addTemplate('เรซูเม', 'แจ้งอ่านเหมือนเรซูเม', true)");
                addMenu("↑ไม่เป็นกลาง", "ca-POV", "แจ้งไม่เป็นกลาง", "content", "javascript:addTemplate('ไม่เป็นกลาง', 'แจ้งไม่เป็นกลาง', false)");
                addMenu("↑ไม่สำคัญ", "ca-importance", "แจ้งขาดความสำคัญ", "content", "javascript:addTemplate('ขาดความสำคัญ', 'แจ้งขาดความสำคัญ', true)");
                addMenu("↑ไม่เป็นสารานุกรม", "ca-Unencyclopedic", "แจ้งไม่เป็นสารานุกรม", "content", "javascript:addTemplate('ไม่เป็นสารานุกรม', 'แจ้งไม่เป็นสารานุกรม', true, true)");
            } else if (mw.config.get('wgNamespaceNumber') == 6) {
                addMenu("↑สถานะลิขสิทธิ์ผิด", "ca-invalidLicense", "แจ้งสัญญาอนุญาตไม่ถูกต้อง", "content", "javascript:addFileTemplate('ภาพที่อาจจะละเมิดลิขสิทธิ์', 'แจ้งต้องการตรวจสอบสัญญาอนุญาต', 'warnInvalidImageLicense')");
                addMenu("↑ไม่มีแหล่งที่มา", "ca-noSource", "แจ้งไม่มีแหล่งที่มา", "content", "javascript:addFileTemplate('ไม่มีแหล่งที่มา', 'แจ้งไม่มีแหล่งที่มาภาพ', 'warnNoSource')");
                addMenu("↑ไม่ได้ระบุลิขสิทธิ์", "ca-noLicense", "แจ้งไม่ได้ระบุสัญญาอนุญาต", "content", "javascript:addFileTemplate('ไม่ได้ระบุ', 'แจ้งไม่ได้ระบุสัญญาอนุญาต', 'warnNoImageLicense')");
            }
        } else if (iScriptConfig.Edition == Editions.Uncyclopedia) {
            if (mw.config.get('wgNamespaceNumber') == 0 || mw.config.get('wgTitle') == "ทดลองเขียน") {
                addMenu("↑ไม่เป็นไร้สาระนุกรม", "ca-NonUnencyclopedic", "แจ้งไม่เป็นไร้สาระนุกรม", "content", "javascript:addTemplate('ไม่เป็นไร้สาระนุกรม', 'แจ้งไม่เป็นไร้สาระนุกรม', false)");
                addMenu("↑ไม่ใช่เรื่องจริง", "ca-TrueStory", "แจ้งว่าไม่ใช่เรื่องจริง", "content", "javascript:addTemplate('ไม่ใช่เรื่องจริง', 'แจ้งไม่ใช่เรื่องจริง', false)");
            }
        }

        addMenu("↑ลบ", "ca-sd", "แจ้งลบ", "serious", "javascript:addAFDRequest()");
    }

    // yes, this if-else argument is very long and probably needs refactor to this whole js document
    // TL;DR this is usable in non-special namespace where the action is view on content namespace or view+edit on talk namespace.
    // On content namespace: exists, being main, template, or WP:SANDBOX
    // On talk namespace: exists or not, being main, template, or WP:SANDBOX
    // Only on Wikipedia
    if (iScriptConfig.Edition == Editions.Wikipedia && ([0, 1, 14, 15].indexOf(mw.config.get('wgNamespaceNumber')) !== -1 || mw.config.get('wgTitle') == "ทดลองเขียน")) {
        if (mw.config.get('wgNamespaceNumber') % 2 === 0 && mw.config.get('wgArticleId') !== 0 && !mw.config.get('wgIsMainPage')) {
            if (["view"].indexOf(mw.config.get('wgAction')) !== -1) {
                populateWPMenu();
            }
        } else if (mw.config.get('wgNamespaceNumber') % 2 === 1) {
            if (["view", "edit"].indexOf(mw.config.get('wgAction')) !== -1) {
                populateWPMenu();
            }
        }
    }

    if (mw.config.get('wgAction') == "edit" && document.URL.indexOf("&iScriptAction=") != -1) {
        if (document.URL.lastIndexOf("&iScriptAction=speedyCleanup") != -1) {
            doCleanupTag(1);
            document.editform.submit();
            return;
        }
    }
});
/* </nowiki></pre> */