<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://meta.wikioasis.org/wiki/User:Bosco/RfD.js?action=history&amp;feed=atom</id>
	<title>User:Bosco/RfD.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://meta.wikioasis.org/wiki/User:Bosco/RfD.js?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:Bosco/RfD.js?action=history"/>
	<updated>2026-05-25T08:29:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://meta.wikioasis.org/wiki/User:Bosco/RfD.js?diff=5354&amp;oldid=prev</id>
		<title>Bosco: Req delete for non-admins on any page</title>
		<link rel="alternate" type="text/html" href="https://meta.wikioasis.org/wiki/User:Bosco/RfD.js?diff=5354&amp;oldid=prev"/>
		<updated>2026-05-25T04:14:27Z</updated>

		<summary type="html">&lt;p&gt;Req delete for non-admins on any page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * MediaWiki JS helper: Request deletion / 请求删除 / 請求刪除&lt;br /&gt;
 * Adds a tab to the page toolbar that prompts for a reason&lt;br /&gt;
 * and prepends {{delete|reason}} with a language‑specific summary.&lt;br /&gt;
 * Runs in all namespaces except -1 (Special pages).&lt;br /&gt;
 */&lt;br /&gt;
mw.loader.using([&amp;#039;mediawiki.util&amp;#039;, &amp;#039;mediawiki.api&amp;#039;], function () {&lt;br /&gt;
    // Only run if not Special namespace (-1)&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === -1) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Detect wiki language (not user interface language)&lt;br /&gt;
    var rawLang = mw.config.get(&amp;#039;wgContentLanguage&amp;#039;) || &amp;#039;en&amp;#039;;&lt;br /&gt;
    var lang;&lt;br /&gt;
&lt;br /&gt;
    if ([&amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh-cn&amp;#039;, &amp;#039;zh-my&amp;#039;, &amp;#039;zh-sg&amp;#039;].indexOf(rawLang) !== -1) {&lt;br /&gt;
        lang = &amp;#039;zh-hans&amp;#039;;&lt;br /&gt;
    } else if ([&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-tw&amp;#039;, &amp;#039;zh-mo&amp;#039;].indexOf(rawLang) !== -1) {&lt;br /&gt;
        lang = &amp;#039;zh-hant&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
        lang = &amp;#039;en&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Labels by language&lt;br /&gt;
    var linkText, tooltip, summary, reasonPrompt, errorMessage;&lt;br /&gt;
&lt;br /&gt;
    if (lang === &amp;#039;zh-hans&amp;#039;) {&lt;br /&gt;
        linkText     = &amp;#039;请求删除&amp;#039;;&lt;br /&gt;
        tooltip      = &amp;#039;请求删除&amp;#039;;&lt;br /&gt;
        summary      = &amp;#039;请求删除&amp;#039;;&lt;br /&gt;
        reasonPrompt = &amp;#039;请输入删除理由：&amp;#039;;&lt;br /&gt;
        errorMessage = &amp;#039;保存页面时出错&amp;#039;;&lt;br /&gt;
    } else if (lang === &amp;#039;zh-hant&amp;#039;) {&lt;br /&gt;
        linkText     = &amp;#039;請求刪除&amp;#039;;&lt;br /&gt;
        tooltip      = &amp;#039;請求刪除&amp;#039;;&lt;br /&gt;
        summary      = &amp;#039;請求刪除&amp;#039;;&lt;br /&gt;
        reasonPrompt = &amp;#039;請輸入刪除理由：&amp;#039;;&lt;br /&gt;
        errorMessage = &amp;#039;儲存頁面時出錯&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
        linkText     = &amp;#039;Request deletion&amp;#039;;&lt;br /&gt;
        tooltip      = &amp;#039;Request deletion&amp;#039;;&lt;br /&gt;
        summary      = &amp;#039;Requesting deletion&amp;#039;;&lt;br /&gt;
        reasonPrompt = &amp;#039;Enter reason for deletion:&amp;#039;;&lt;br /&gt;
        errorMessage = &amp;#039;Error saving page&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Add the portlet link&lt;br /&gt;
    var link = mw.util.addPortletLink(&lt;br /&gt;
        &amp;#039;p-cactions&amp;#039;,&lt;br /&gt;
        &amp;#039;#&amp;#039;,&lt;br /&gt;
        linkText,&lt;br /&gt;
        &amp;#039;ca-requestdeletion&amp;#039;,&lt;br /&gt;
        tooltip&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    // Click handler&lt;br /&gt;
    $(link).on(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        var reason = prompt(reasonPrompt);&lt;br /&gt;
        if (!reason) return;&lt;br /&gt;
&lt;br /&gt;
        var pageName = mw.config.get(&amp;#039;wgPageName&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        // Fetch current content&lt;br /&gt;
        new mw.Api().get({&lt;br /&gt;
            action: &amp;#039;query&amp;#039;,&lt;br /&gt;
            prop: &amp;#039;revisions&amp;#039;,&lt;br /&gt;
            rvprop: &amp;#039;content&amp;#039;,&lt;br /&gt;
            rvslots: &amp;#039;main&amp;#039;,&lt;br /&gt;
            titles: pageName&lt;br /&gt;
        }).done(function (data) {&lt;br /&gt;
            var pages = data.query.pages;&lt;br /&gt;
            var pageId = Object.keys(pages)[0];&lt;br /&gt;
            var content = pages[pageId].revisions[0].slots.main[&amp;#039;*&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
            // Prepend delete template&lt;br /&gt;
            var newContent = &amp;#039;{{delete|&amp;#039; + reason + &amp;#039;}}\n&amp;#039; + content;&lt;br /&gt;
&lt;br /&gt;
            // Save with language‑specific summary + RfD.js link&lt;br /&gt;
            new mw.Api().postWithToken(&amp;#039;csrf&amp;#039;, {&lt;br /&gt;
                action: &amp;#039;edit&amp;#039;,&lt;br /&gt;
                title: pageName,&lt;br /&gt;
                text: newContent,&lt;br /&gt;
                summary: summary + &amp;#039;）（[[meta:User:Bosco/RfD.js|RfD.js]]&amp;#039;&lt;br /&gt;
            }).done(function () {&lt;br /&gt;
                location.reload();&lt;br /&gt;
            }).fail(function (err) {&lt;br /&gt;
                alert(errorMessage + &amp;#039;: &amp;#039; + JSON.stringify(err));&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Bosco</name></author>
	</entry>
</feed>