<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://wired.scio.icu/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMassNullEdit.js</id>
	<title>MediaWiki:MassNullEdit.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wired.scio.icu/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMassNullEdit.js"/>
	<link rel="alternate" type="text/html" href="https://wired.scio.icu/index.php?title=MediaWiki:MassNullEdit.js&amp;action=history"/>
	<updated>2026-06-25T16:45:57Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wired.scio.icu/index.php?title=MediaWiki:MassNullEdit.js&amp;diff=223&amp;oldid=prev</id>
		<title>Scio：​创建页面，内容为“/**  * Mass Null Edit  * @description Null edit listed multiple pages.  * @author Ozuzanna  */  (function ($, mw) {     &#039;use strict&#039;;      if (window.loadedMassNullEdit) {         return;     }     window.loadedMassNullEdit = true;      var apiModeData = {         backlinks: {             name: &#039;backlinks&#039;,             limit: &#039;bllimit&#039;,             value: &#039;bltitle&#039;         },         transclusions: {             name: &#039;embeddedin&#039;,             limit: &#039;eilimit&#039;,…”</title>
		<link rel="alternate" type="text/html" href="https://wired.scio.icu/index.php?title=MediaWiki:MassNullEdit.js&amp;diff=223&amp;oldid=prev"/>
		<updated>2024-12-30T06:37:18Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&lt;span class=&quot;autocomment&quot;&gt;*  * Mass Null Edit  * @description Null edit listed multiple pages.  * @author Ozuzanna：​&lt;/span&gt;  (function ($, mw) {     &amp;#039;use strict&amp;#039;;      if (window.loadedMassNullEdit) {         return;     }     window.loadedMassNullEdit = true;      var apiModeData = {         backlinks: {             name: &amp;#039;backlinks&amp;#039;,             limit: &amp;#039;bllimit&amp;#039;,             value: &amp;#039;bltitle&amp;#039;         },         transclusions: {             name: &amp;#039;embeddedin&amp;#039;,             limit: &amp;#039;eilimit&amp;#039;,…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Mass Null Edit&lt;br /&gt;
 * @description Null edit listed multiple pages.&lt;br /&gt;
 * @author Ozuzanna&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
(function ($, mw) {&lt;br /&gt;
    &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    if (window.loadedMassNullEdit) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.loadedMassNullEdit = true;&lt;br /&gt;
&lt;br /&gt;
    var apiModeData = {&lt;br /&gt;
        backlinks: {&lt;br /&gt;
            name: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;bllimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;bltitle&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        transclusions: {&lt;br /&gt;
            name: &amp;#039;embeddedin&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;eilimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;eititle&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        fileusage: {&lt;br /&gt;
            name: &amp;#039;imageusage&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;iulimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;iutitle&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        prefix: {&lt;br /&gt;
            // actual prefixsearch API is MW 1.23+&lt;br /&gt;
            name: &amp;#039;allpages&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;aplimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;apprefix&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        category: {&lt;br /&gt;
            name: &amp;#039;categorymembers&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;cmlimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;cmtitle&amp;#039;&lt;br /&gt;
        },&lt;br /&gt;
        namespace: {&lt;br /&gt;
            name: &amp;#039;allpages&amp;#039;,&lt;br /&gt;
            limit: &amp;#039;aplimit&amp;#039;,&lt;br /&gt;
            value: &amp;#039;apnamespace&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    var config = mw.config.get([&lt;br /&gt;
        &amp;#039;wgCanonicalNamespace&amp;#039;,&lt;br /&gt;
        &amp;#039;wgCanonicalSpecialPageName&amp;#039;,&lt;br /&gt;
        &amp;#039;wgFormattedNamespaces&amp;#039;,&lt;br /&gt;
        &amp;#039;wgNamespaceIds&amp;#039;,&lt;br /&gt;
        &amp;#039;wgRelevantPageName&amp;#039;&lt;br /&gt;
    ]);&lt;br /&gt;
    var editApi = {&lt;br /&gt;
        action: &amp;#039;edit&amp;#039;,&lt;br /&gt;
        summary: &amp;#039;Null edit (this edit should not be visible)&amp;#039;,&lt;br /&gt;
        notminor: true,&lt;br /&gt;
        prependtext: &amp;#039;&amp;#039;,&lt;br /&gt;
        nocreate: true&lt;br /&gt;
    };&lt;br /&gt;
    var i18n;&lt;br /&gt;
    // Media, Special, Message Wall, Thread, Board&lt;br /&gt;
    var nsBlacklist = [&amp;#039;-2&amp;#039;, &amp;#039;-1&amp;#039;, &amp;#039;1200&amp;#039;, &amp;#039;1201&amp;#039;, &amp;#039;2000&amp;#039;];&lt;br /&gt;
    var nsCategory = config.wgFormattedNamespaces[14] + &amp;#039;:&amp;#039;;&lt;br /&gt;
    var nsFile = config.wgFormattedNamespaces[6] + &amp;#039;:&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    var failedPages = [];&lt;br /&gt;
    var input;&lt;br /&gt;
    var modalMain;&lt;br /&gt;
    var modalAddPages;&lt;br /&gt;
    var paused = true;&lt;br /&gt;
    var rateLimited = false;&lt;br /&gt;
    var rateLimitTimeoutId;&lt;br /&gt;
    var stopAddPages = null;&lt;br /&gt;
&lt;br /&gt;
    function log(i18nMsg) {&lt;br /&gt;
        $(&amp;#039;#mne-output&amp;#039;).prepend(i18nMsg.parse(), &amp;#039;&amp;lt;br&amp;gt;&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function pageToNamespaceIdAndTitle(page) {&lt;br /&gt;
        var colonPos = page.indexOf(&amp;#039;:&amp;#039;);&lt;br /&gt;
        var nsText = page.slice(0, colonPos).toLowerCase().replace(/ /g, &amp;#039;_&amp;#039;);&lt;br /&gt;
        var title = page.slice(colonPos + 1);&lt;br /&gt;
        var ns = config.wgNamespaceIds[nsText];&lt;br /&gt;
&lt;br /&gt;
        return {&lt;br /&gt;
            namespaceId: ns || 0,&lt;br /&gt;
            title: ns ? title : page&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function addToInput(pages) {&lt;br /&gt;
        var currentPages = input.value.split(&amp;#039;\n&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        pages = pages.filter(function (page) {&lt;br /&gt;
            return currentPages.indexOf(page) === -1;&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        if (pages.length) {&lt;br /&gt;
            input.value += pages.join(&amp;#039;\n&amp;#039;) + &amp;#039;\n&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return pages.length;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function nullEdit(page) {&lt;br /&gt;
        var query = {&lt;br /&gt;
            title: page&lt;br /&gt;
        };&lt;br /&gt;
        var editReq = editApi.post(query);&lt;br /&gt;
&lt;br /&gt;
        editReq.always(function (result, resultIfRejected) {&lt;br /&gt;
            if (editReq.state() === &amp;#039;rejected&amp;#039;) {&lt;br /&gt;
                result = resultIfRejected;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var error = (result.error &amp;amp;&amp;amp; result.error.code) || &amp;#039;unknown&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            if (result.edit &amp;amp;&amp;amp; result.edit.result === &amp;#039;Success&amp;#039;) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (error === &amp;#039;ratelimited&amp;#039;) {&lt;br /&gt;
                rateLimited = true;&lt;br /&gt;
                input.value = page + &amp;#039;\n&amp;#039; + input.value;&lt;br /&gt;
            } else {&lt;br /&gt;
                failedPages.push(page);&lt;br /&gt;
                log(i18n(&amp;#039;fail&amp;#039;, page, error));&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function pause() {&lt;br /&gt;
        paused = true;&lt;br /&gt;
        rateLimited = false;&lt;br /&gt;
        modalMain.$element.removeClass(&amp;quot;processing&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function start() {&lt;br /&gt;
        paused = false;&lt;br /&gt;
        modalMain.$element.addClass(&amp;quot;processing&amp;quot;);&lt;br /&gt;
        process();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function process() {&lt;br /&gt;
        if (rateLimited) {&lt;br /&gt;
            log(i18n(&amp;#039;notice-ratelimit&amp;#039;));&lt;br /&gt;
            pause();&lt;br /&gt;
            rateLimitTimeoutId = setTimeout(start, 30000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (paused || input === null) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var delay = Number(window.nullEditDelay) || 1000;&lt;br /&gt;
&lt;br /&gt;
        // assume extremely low custom delays (less than 0.1 seconds) are&lt;br /&gt;
        // meant to be seconds, to avoid being repeatedly rate-limited&lt;br /&gt;
        if (delay &amp;lt; 100) {&lt;br /&gt;
            delay *= 1000;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var pages = input.value.split(&amp;#039;\n&amp;#039;);&lt;br /&gt;
        var page;&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            page = pages.shift();&lt;br /&gt;
        } while (page === &amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        input.value = pages.join(&amp;#039;\n&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        if (page) {&lt;br /&gt;
            nullEdit(page.trim());&lt;br /&gt;
            setTimeout(process, delay);&lt;br /&gt;
        } else {&lt;br /&gt;
            log(i18n(&amp;#039;notice-finished&amp;#039;));&lt;br /&gt;
            addToInput(failedPages);&lt;br /&gt;
            failedPages = [];&lt;br /&gt;
            pause();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function addPages(query, mode, displayValue) {&lt;br /&gt;
        var pages = [];&lt;br /&gt;
        var queryApi = new mw.Api({parameters: query});&lt;br /&gt;
&lt;br /&gt;
        function complete(error) {&lt;br /&gt;
            if (error) {&lt;br /&gt;
                log(i18n(&amp;#039;notice-error-&amp;#039; + mode, displayValue, error));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // show success message if either no error (a successful result may be 0 pages)&lt;br /&gt;
            // or error (in which case a multi-request query might still have some results)&lt;br /&gt;
            if (!error || pages.length) {&lt;br /&gt;
                var addedCount = addToInput(pages);&lt;br /&gt;
                log(i18n(&amp;#039;notice-success-&amp;#039; + mode, displayValue, addedCount));&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // reset &amp;quot;add pages&amp;quot; modal if it was used&lt;br /&gt;
            modalAddPages.$element.removeClass(&amp;quot;processing&amp;quot;);&lt;br /&gt;
            modalAddPages.hide();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function collect(more) {&lt;br /&gt;
            var queryReq = queryApi.get(more);&lt;br /&gt;
            queryReq.always(function (result, resultIfRejected) {&lt;br /&gt;
                if (queryReq.state() === &amp;#039;rejected&amp;#039;) {&lt;br /&gt;
                    result = resultIfRejected;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var error = (result.error &amp;amp;&amp;amp; result.error.code) || &amp;#039;unknown&amp;#039;;&lt;br /&gt;
                var data = result.query &amp;amp;&amp;amp; result.query[query.list];&lt;br /&gt;
                var continueData = result[&amp;#039;query-continue&amp;#039;];&lt;br /&gt;
&lt;br /&gt;
                if (data) {&lt;br /&gt;
                    data.forEach(function (entry) {&lt;br /&gt;
                        pages.push(entry.title);&lt;br /&gt;
                    });&lt;br /&gt;
                } else {&lt;br /&gt;
                    complete(error);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (continueData &amp;amp;&amp;amp; stopAddPages === null) {&lt;br /&gt;
                    stopAddPages = !confirm(i18n(&amp;#039;confirm-big-request&amp;#039;, result.limits[query.list]).parse());&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (continueData &amp;amp;&amp;amp; !stopAddPages) {&lt;br /&gt;
                    collect(continueData[query.list]);&lt;br /&gt;
                } else {&lt;br /&gt;
                    complete();&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        modalAddPages.$element.addClass(&amp;quot;processing&amp;quot;);&lt;br /&gt;
        collect();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function addPagesProcess(mode, value) {&lt;br /&gt;
        var modeData = apiModeData[mode];&lt;br /&gt;
        var query = {rawcontinue: &amp;#039;&amp;#039;};&lt;br /&gt;
&lt;br /&gt;
        // cancel if unknown mode or empty/undefined value&lt;br /&gt;
        if (!modeData || !value) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // normalise underscore to space&lt;br /&gt;
        value = value.replace(/_/g, &amp;#039; &amp;#039;);&lt;br /&gt;
        var displayValue = value;&lt;br /&gt;
&lt;br /&gt;
        // mode-specific adjustments&lt;br /&gt;
        switch (mode) {&lt;br /&gt;
        case &amp;#039;namespace&amp;#039;:&lt;br /&gt;
            // use namespace name for displaying namespace requests&lt;br /&gt;
            displayValue = value === &amp;#039;0&amp;#039;&lt;br /&gt;
                ? i18n(&amp;#039;namespace-main&amp;#039;).escape()&lt;br /&gt;
                : config.wgFormattedNamespaces[value];&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;#039;category&amp;#039;:&lt;br /&gt;
            // add namespace to category value if not included,&lt;br /&gt;
            // else remove it from display for brevity&lt;br /&gt;
            if (value.indexOf(nsCategory) !== 0) {&lt;br /&gt;
                value = nsCategory + value;&lt;br /&gt;
            } else {&lt;br /&gt;
                displayValue = displayValue.slice(nsCategory.length);&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;#039;fileusage&amp;#039;:&lt;br /&gt;
            // add namespace to file value if not included,&lt;br /&gt;
            // else remove it from display for brevity&lt;br /&gt;
            if (value.indexOf(nsFile) !== 0) {&lt;br /&gt;
                value = nsFile + value;&lt;br /&gt;
            } else {&lt;br /&gt;
                displayValue = displayValue.slice(nsFile.length);&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;#039;prefix&amp;#039;:&lt;br /&gt;
            // separate namespace id&lt;br /&gt;
            var nsAndTitle = pageToNamespaceIdAndTitle(value);&lt;br /&gt;
            query.apnamespace = nsAndTitle.namespaceId;&lt;br /&gt;
            value = nsAndTitle.title;&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        query.list = modeData.name;&lt;br /&gt;
        query[modeData.value] = value;&lt;br /&gt;
        query[modeData.limit] = &amp;#039;max&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
        addPages(query, mode, displayValue);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function addPagesCreateModalRow(mode) {&lt;br /&gt;
        var $row = $(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).attr(&amp;#039;class&amp;#039;, &amp;#039;mne-addpages-row&amp;#039;);&lt;br /&gt;
        var $radio = $(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;).attr({&lt;br /&gt;
            type: &amp;#039;radio&amp;#039;,&lt;br /&gt;
            name: &amp;#039;mode&amp;#039;,&lt;br /&gt;
            value: mode&lt;br /&gt;
        });&lt;br /&gt;
        var $input = $(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;).attr({&lt;br /&gt;
            type: &amp;#039;text&amp;#039;,&lt;br /&gt;
            name: mode&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        if (mode === &amp;#039;namespace&amp;#039;) {&lt;br /&gt;
            $input = $(&amp;#039;&amp;lt;select&amp;gt;&amp;#039;).attr(&amp;#039;name&amp;#039;, mode);&lt;br /&gt;
&lt;br /&gt;
            Object.keys(config.wgFormattedNamespaces).forEach(function (ns) {&lt;br /&gt;
                if (nsBlacklist.indexOf(ns) !== -1) {&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                var opt = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
                opt.value = ns;&lt;br /&gt;
                opt.textContent = ns === &amp;#039;0&amp;#039;&lt;br /&gt;
                    ? i18n(&amp;#039;namespace-main&amp;#039;).plain()&lt;br /&gt;
                    : config.wgFormattedNamespaces[ns];&lt;br /&gt;
&lt;br /&gt;
                $input.append(opt);&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // select a mode if its value is changed&lt;br /&gt;
        $input.on(&amp;#039;change&amp;#039;, function () {&lt;br /&gt;
            $radio.prop(&amp;#039;checked&amp;#039;, true);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        $row.append(&lt;br /&gt;
            $(&amp;#039;&amp;lt;label&amp;gt;&amp;#039;).append(&lt;br /&gt;
                $radio,&lt;br /&gt;
                document.createTextNode(i18n(&amp;#039;addpages-&amp;#039; + mode).plain())&lt;br /&gt;
            ),&lt;br /&gt;
            $input&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        return $row;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function addPagesOpenModal() {&lt;br /&gt;
        var formData;&lt;br /&gt;
        var $modalContent = $(&amp;#039;&amp;lt;form&amp;gt;&amp;#039;).attr(&amp;#039;id&amp;#039;, &amp;#039;mne-mode&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        Object.keys(apiModeData).forEach(function (mode) {&lt;br /&gt;
            $modalContent.append(addPagesCreateModalRow(mode));&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        modalAddPages.show({&lt;br /&gt;
            title: i18n(&amp;#039;addpages&amp;#039;).plain(),&lt;br /&gt;
            content: $modalContent,&lt;br /&gt;
            onShow: function () {&lt;br /&gt;
                stopAddPages = null;&lt;br /&gt;
                formData = document.forms[&amp;#039;mne-mode&amp;#039;].elements;&lt;br /&gt;
                modalAddPages.$footer.append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;).attr(&amp;#039;id&amp;#039;, &amp;#039;mne-processing-msg&amp;#039;).text(i18n(&amp;#039;processing&amp;#039;).plain()),&lt;br /&gt;
                    mw.libs.QDmodal.getSpinner()&lt;br /&gt;
                );&lt;br /&gt;
            },&lt;br /&gt;
            onHide: function () {&lt;br /&gt;
                stopAddPages = true;&lt;br /&gt;
            },&lt;br /&gt;
            buttons: [{&lt;br /&gt;
                text: i18n(&amp;#039;addpages&amp;#039;).plain(),&lt;br /&gt;
                attr: {id: &amp;#039;mne-addpages-start&amp;#039;},&lt;br /&gt;
                handler: function () {&lt;br /&gt;
                    // formData.mode.value would be better, but not available in IE 11&lt;br /&gt;
                    var mode = modalAddPages.$content.find(&amp;#039;[name=mode]:checked&amp;#039;).val();&lt;br /&gt;
                    var value = formData[mode] &amp;amp;&amp;amp; formData[mode].value;&lt;br /&gt;
                    addPagesProcess(mode, value);&lt;br /&gt;
                }&lt;br /&gt;
            }, {&lt;br /&gt;
                text: i18n(&amp;#039;cancel&amp;#039;).plain(),&lt;br /&gt;
                handler: modalAddPages.hide.bind(modalAddPages)&lt;br /&gt;
            }]&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function autoFillPages() {&lt;br /&gt;
        var relevantPage = config.wgRelevantPageName.replace(/_/g, &amp;#039; &amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        if (config.wgCanonicalNamespace === &amp;#039;Category&amp;#039;) {&lt;br /&gt;
            addPagesProcess(&amp;#039;category&amp;#039;, relevantPage);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (config.wgCanonicalSpecialPageName === &amp;#039;Whatlinkshere&amp;#039;) {&lt;br /&gt;
            addPagesProcess(&amp;#039;backlinks&amp;#039;, relevantPage);&lt;br /&gt;
            addPagesProcess(&amp;#039;transclusions&amp;#039;, relevantPage);&lt;br /&gt;
&lt;br /&gt;
            // relevant page is in the file namespace?&lt;br /&gt;
            if (relevantPage.indexOf(nsFile) === 0) {&lt;br /&gt;
                addPagesProcess(&amp;#039;fileusage&amp;#039;, relevantPage);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (config.wgCanonicalSpecialPageName === &amp;#039;Allpages&amp;#039;) {&lt;br /&gt;
            addPagesProcess(&lt;br /&gt;
                &amp;#039;namespace&amp;#039;,&lt;br /&gt;
                $(&amp;#039;form [name=&amp;quot;namespace&amp;quot;]&amp;#039;).val()&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (config.wgCanonicalSpecialPageName === &amp;#039;Prefixindex&amp;#039;) {&lt;br /&gt;
            var prefix = $(&amp;#039;form [name=&amp;quot;prefix&amp;quot;]&amp;#039;).val();&lt;br /&gt;
            var prefixNs = $(&amp;#039;form [name=&amp;quot;namespace&amp;quot;]&amp;#039;).val();&lt;br /&gt;
            var page = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            if (prefixNs !== &amp;#039;0&amp;#039;) {&lt;br /&gt;
                page += config.wgFormattedNamespaces[prefixNs] + &amp;#039;:&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            page += prefix;&lt;br /&gt;
            addPagesProcess(&amp;#039;prefix&amp;#039;, page);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function openModal(ev) {&lt;br /&gt;
        ev.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        var modalContents = (&lt;br /&gt;
            &amp;#039;&amp;lt;p&amp;gt;&amp;#039; + i18n(&amp;#039;instructions&amp;#039;).escape() + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039; +&lt;br /&gt;
            &amp;#039;&amp;lt;textarea id=&amp;quot;mne-input&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;#039; +&lt;br /&gt;
            &amp;#039;&amp;lt;div id=&amp;quot;mne-output&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;&amp;lt;i&amp;gt;&amp;#039; + i18n(&amp;#039;notice-output&amp;#039;).escape() + &amp;#039;&amp;lt;/i&amp;gt;&amp;#039; +&lt;br /&gt;
            &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        modalMain.show({&lt;br /&gt;
            title: i18n(&amp;#039;title&amp;#039;).plain(),&lt;br /&gt;
            content: modalContents,&lt;br /&gt;
            onShow: function () {&lt;br /&gt;
                input = document.getElementById(&amp;#039;mne-input&amp;#039;);&lt;br /&gt;
                pause();&lt;br /&gt;
                modalMain.$footer.append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;).attr(&amp;#039;id&amp;#039;, &amp;#039;mne-processing-msg&amp;#039;).text(i18n(&amp;#039;processing&amp;#039;).plain()),&lt;br /&gt;
                    mw.libs.QDmodal.getSpinner()&lt;br /&gt;
                );&lt;br /&gt;
            },&lt;br /&gt;
            onHide: function () {&lt;br /&gt;
                pause();&lt;br /&gt;
                input = null;&lt;br /&gt;
                clearTimeout(rateLimitTimeoutId);&lt;br /&gt;
            },&lt;br /&gt;
            buttons: [{&lt;br /&gt;
                text: i18n(&amp;#039;initiate&amp;#039;).plain(),&lt;br /&gt;
                attr: {id: &amp;#039;mne-main-start&amp;#039;},&lt;br /&gt;
                handler: start&lt;br /&gt;
            }, {&lt;br /&gt;
                text: i18n(&amp;#039;pause&amp;#039;).plain(),&lt;br /&gt;
                attr: {id: &amp;#039;mne-main-pause&amp;#039;},&lt;br /&gt;
                handler: pause&lt;br /&gt;
            }, {&lt;br /&gt;
                text: i18n(&amp;#039;addpages&amp;#039;).plain(),&lt;br /&gt;
                handler: addPagesOpenModal&lt;br /&gt;
            }, {&lt;br /&gt;
                text: i18n(&amp;#039;cancel&amp;#039;).plain(),&lt;br /&gt;
                handler: modalMain.hide.bind(modalMain)&lt;br /&gt;
            }]&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using([&lt;br /&gt;
            &amp;#039;mediawiki.api&amp;#039;,&lt;br /&gt;
            &amp;#039;mediawiki.user&amp;#039;&lt;br /&gt;
        ]).then(function () {&lt;br /&gt;
            if (!(editApi instanceof mw.Api)) {&lt;br /&gt;
                editApi.token = mw.user.tokens.get(&amp;#039;csrfToken&amp;#039;) || mw.user.tokens.get(&amp;#039;editToken&amp;#039;);&lt;br /&gt;
                editApi = new mw.Api({parameters: editApi});&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            autoFillPages();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function main() {&lt;br /&gt;
        modalMain = new mw.libs.QDmodal(&amp;#039;mne-main&amp;#039;);&lt;br /&gt;
        modalAddPages = new mw.libs.QDmodal(&amp;#039;mne-addpages&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        modalMain.$element.addClass(&amp;quot;mne-modal&amp;quot;);&lt;br /&gt;
        modalAddPages.$element.addClass(&amp;quot;mne-modal&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var $link = $(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;).append(&lt;br /&gt;
            $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;).attr({&lt;br /&gt;
                href: &amp;#039;#&amp;#039;,&lt;br /&gt;
                id: &amp;#039;t-mne&amp;#039;&lt;br /&gt;
            }).text(i18n(&amp;#039;title&amp;#039;).plain())&lt;br /&gt;
        ).click(openModal);&lt;br /&gt;
&lt;br /&gt;
        $(&amp;#039;#my-tools-menu, #p-tb ul&amp;#039;).prepend($link);&lt;br /&gt;
&lt;br /&gt;
        mw.hook(&amp;#039;dev.placement&amp;#039;).add(function (placement) {&lt;br /&gt;
            placement.script(&amp;#039;MassNullEdit&amp;#039;);&lt;br /&gt;
            $(placement.element(&amp;#039;tools&amp;#039;))[placement.type(&amp;#039;prepend&amp;#039;)]($link);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initDependencies() {&lt;br /&gt;
        var devLoadUrl = &amp;#039;https://dev.fandom.com/load.php?mode=articles&amp;amp;only=scripts&amp;amp;articles=MediaWiki:&amp;#039;;&lt;br /&gt;
        var i18nMsgs = new $.Deferred();&lt;br /&gt;
        var waitFor = [i18nMsgs];&lt;br /&gt;
&lt;br /&gt;
        mw.loader.load(devLoadUrl.replace(&amp;#039;script&amp;#039;, &amp;#039;style&amp;#039;) + &amp;#039;MassNullEdit.css&amp;#039;, &amp;#039;text/css&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!mw.libs.QDmodal) {&lt;br /&gt;
            waitFor.push($.ajax({&lt;br /&gt;
                cache: true,&lt;br /&gt;
                dataType: &amp;#039;script&amp;#039;,&lt;br /&gt;
                url: devLoadUrl + &amp;#039;QDmodal.js&amp;#039;&lt;br /&gt;
            }));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (!(window.dev &amp;amp;&amp;amp; dev.i18n &amp;amp;&amp;amp; dev.i18n.loadMessages)) {&lt;br /&gt;
            mw.loader.load(devLoadUrl + &amp;#039;I18n-js/code.js&amp;amp;*&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        mw.hook(&amp;#039;dev.i18n&amp;#039;).add(function (i18njs) {&lt;br /&gt;
            i18njs.loadMessages(&amp;#039;MassNullEdit&amp;#039;).done(function (i18nData) {&lt;br /&gt;
                i18n = i18nData.msg;&lt;br /&gt;
                i18nMsgs.resolve();&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        $.when.apply($, waitFor).done(main);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    initDependencies();&lt;br /&gt;
}(jQuery, mediaWiki));&lt;/div&gt;</summary>
		<author><name>Scio</name></author>
	</entry>
</feed>