<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://imamreza.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-asbox.js</id>
	<title>مدیاویکی:Gadget-asbox.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://imamreza.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-asbox.js"/>
	<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;action=history"/>
	<updated>2026-09-10T20:48:11Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=311&amp;oldid=prev</id>
		<title>Admin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=311&amp;oldid=prev"/>
		<updated>2026-09-03T16:33:26Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fa&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;→ نسخهٔ قدیمی‌تر&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;نسخهٔ ‏۳ سپتامبر ۲۰۲۶، ساعت ۲۰:۰۳&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;fa&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(بدون تفاوت)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki_fa:diff:1.41:old-310:rev-311 --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=310&amp;oldid=prev</id>
		<title>*&gt;Jeeputer: +دندانه و تمیزکاری با beautifier.io</title>
		<link rel="alternate" type="text/html" href="https://imamreza.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-asbox.js&amp;diff=310&amp;oldid=prev"/>
		<updated>2021-12-22T08:53:03Z</updated>

		<summary type="html">&lt;p&gt;+دندانه و تمیزکاری با beautifier.io&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * &lt;br /&gt;
 * Originally written by [[:en:User:SD0001]] at [[:en:User:SD0001/StubSorter.js]]&lt;br /&gt;
 * این نسخهٔ فارسی تنها برای سازگاری با ویکی‌پدیای فارسی بومی‌سازی شده و کدهای آن منتسب به نویسندهٔ ابزار در ویکی‌پدیای انگلیسی است&lt;br /&gt;
 * Ajax-based stub tag manager&lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// jshint maxerr: 999&lt;br /&gt;
$.when(&lt;br /&gt;
    $.ready,&lt;br /&gt;
    mw.loader.using([&amp;#039;mediawiki.util&amp;#039;, &amp;#039;mediawiki.api&amp;#039;, &amp;#039;mediawiki.Title&amp;#039;, &amp;#039;jquery.chosen&amp;#039;])&lt;br /&gt;
).then(function() {&lt;br /&gt;
&lt;br /&gt;
    var API = new mw.Api({&lt;br /&gt;
        ajax: {&lt;br /&gt;
            headers: {&lt;br /&gt;
                &amp;#039;Api-User-Agent&amp;#039;: &amp;#039;[[w:en:User:SD0001/StubSorter.js]]&amp;#039;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    var callback = function(e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        // if already present, don&amp;#039;t duplicate&lt;br /&gt;
        if ($(&amp;#039;#stub-sorter-wrapper&amp;#039;).length !== 0) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $(&amp;#039;#mw-content-text&amp;#039;).before(&lt;br /&gt;
            $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-wrapper&amp;#039;).css({&lt;br /&gt;
                &amp;#039;max-height&amp;#039;: &amp;#039;max-content&amp;#039;,&lt;br /&gt;
                &amp;#039;background-color&amp;#039;: &amp;#039;#c0ffec&amp;#039;,&lt;br /&gt;
                &amp;#039;margin-bottom&amp;#039;: &amp;#039;10px&amp;#039;&lt;br /&gt;
            }).append(&lt;br /&gt;
                $(&amp;#039;&amp;lt;select&amp;gt;&amp;#039;)&lt;br /&gt;
                .attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-select&amp;#039;)&lt;br /&gt;
                .attr(&amp;#039;multiple&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
                .change(handlePreview),&lt;br /&gt;
&lt;br /&gt;
                $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-previewbox&amp;#039;).css({&lt;br /&gt;
                    &amp;#039;background-color&amp;#039;: &amp;#039;#cfd8eb&amp;#039; // &amp;#039;#98b685&amp;#039;&lt;br /&gt;
                    // &amp;#039;border-bottom&amp;#039;: &amp;#039;solid 0.5px #aaaaaa&amp;#039;&lt;br /&gt;
                })&lt;br /&gt;
            )&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        var $select = $(&amp;#039;#stub-sorter-select&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        var selectExistingStubTags = function($html) {&lt;br /&gt;
            $html.find(&amp;#039;.stub .hlist .nv-view a&amp;#039;).each(function(_, e) {&lt;br /&gt;
                var template = e.title.slice(&amp;#039;الگو:&amp;#039;.length);&lt;br /&gt;
                $select.append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).text(template).val(template).attr(&amp;#039;selected&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
                );&lt;br /&gt;
            });&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        if (mw.config.get(&amp;#039;wgCurRevisionId&amp;#039;) === mw.config.get(&amp;#039;wgRevisionId&amp;#039;)) {&lt;br /&gt;
            // Viewing the current version of the page, no need for api call to get the page html&lt;br /&gt;
            selectExistingStubTags($(&amp;#039;.mw-parser-output&amp;#039;));&lt;br /&gt;
        } else {&lt;br /&gt;
            // In edit/history/diff/oldrevision mode, get the page html by api call&lt;br /&gt;
            var pageNameToEncode = mw.config.get(&amp;#039;wgPageName&amp;#039;);&lt;br /&gt;
            API.parse(new mw.Title(encodeURIComponent(pageNameToEncode))).then(function(html) {&lt;br /&gt;
                selectExistingStubTags($(html));&lt;br /&gt;
                $select.trigger(&amp;#039;chosen:updated&amp;#039;);&lt;br /&gt;
                $select.trigger(&amp;#039;click&amp;#039;);&lt;br /&gt;
                $input.focus();&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $select.chosen({&lt;br /&gt;
            search_contains: true,&lt;br /&gt;
            placeholder_text_multiple: &amp;#039;برای افزودن یک برچسب خرد، شروع به نوشتن کنید...&amp;#039;,&lt;br /&gt;
            width: &amp;#039;100%&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
            // somehow beacuse of the hacks below, the no_results_text shows up&lt;br /&gt;
            // when the search results are loading, and not when there are no results&lt;br /&gt;
            no_results_text: &amp;#039;بارگذاری نتایج برای&amp;#039;&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        var $input = $(&amp;#039;#stub_sorter_select_chosen input&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        var menuFrozen = false;&lt;br /&gt;
        var searchBy = getPref(&amp;#039;searchBy&amp;#039;, &amp;#039;prefix&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        $(&amp;#039;#stub_sorter_select_chosen .chosen-choices&amp;#039;).after(&lt;br /&gt;
&lt;br /&gt;
            $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).append(&lt;br /&gt;
&lt;br /&gt;
                // Freeze button&lt;br /&gt;
                $(&amp;#039;&amp;lt;span&amp;gt;&amp;#039;).append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;).text(&amp;#039;منو باز بماند &amp;#039;).click(function() {&lt;br /&gt;
                        menuFrozen = !menuFrozen;&lt;br /&gt;
                        if (menuFrozen) {&lt;br /&gt;
                            $(this).text(&amp;#039;منو بسته شود &amp;#039;);&lt;br /&gt;
                            $(this).parent().css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;);&lt;br /&gt;
                        } else {&lt;br /&gt;
                            $(this).text(&amp;#039;منو باز بماند &amp;#039;);&lt;br /&gt;
                            $(this).parent().css(&amp;#039;font-weight&amp;#039;, &amp;#039;normal&amp;#039;);&lt;br /&gt;
                        }&lt;br /&gt;
                        $input[0].focus();&lt;br /&gt;
                        $input.trigger(&amp;#039;keyup&amp;#039;);&lt;br /&gt;
                    }).css({&lt;br /&gt;
                        &amp;#039;padding-right&amp;#039;: &amp;#039;5px&amp;#039;,&lt;br /&gt;
                        &amp;#039;padding-left&amp;#039;: &amp;#039;100px&amp;#039;&lt;br /&gt;
                    })&lt;br /&gt;
                ),&lt;br /&gt;
&lt;br /&gt;
                // Search mode select&lt;br /&gt;
                $(&amp;#039;&amp;lt;select&amp;gt;&amp;#039;).append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).text(&amp;#039;اول پیشوندهای منطبق را فهرست کن&amp;#039;).val(&amp;#039;prefix&amp;#039;),&lt;br /&gt;
                    $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).text(&amp;#039;اول موارد منطبق در عنوان‌ها را فهرست کن&amp;#039;).val(&amp;#039;intitle&amp;#039;),&lt;br /&gt;
                    $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).text(&amp;#039;استفاده از جستجوی دقیق انطباق نویسه‌ها&amp;#039;).val(&amp;#039;regex&amp;#039;)&lt;br /&gt;
                ).change(function(e) {&lt;br /&gt;
                    searchBy = e.target.value;&lt;br /&gt;
                    $input.trigger(&amp;#039;keyup&amp;#039;);&lt;br /&gt;
                }),&lt;br /&gt;
&lt;br /&gt;
                // help button after the search mode select&lt;br /&gt;
                $(&amp;#039;&amp;lt;small&amp;gt;&amp;#039;).append(&lt;br /&gt;
                    &amp;#039; (&amp;#039;,&lt;br /&gt;
                    $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;, {&lt;br /&gt;
                        text: &amp;#039;راهنما&amp;#039;,&lt;br /&gt;
                        href: mw.util.getUrl(&amp;#039;راهنما:ابزار/خردیاب&amp;#039;),&lt;br /&gt;
                        target: &amp;#039;_blank&amp;#039;&lt;br /&gt;
                    }),&lt;br /&gt;
                    &amp;#039;)&amp;#039;&lt;br /&gt;
                )&lt;br /&gt;
            ).css({&lt;br /&gt;
                &amp;#039;border-bottom&amp;#039;: &amp;#039;solid 0.5px #aaaaaa&amp;#039;,&lt;br /&gt;
                &amp;#039;border-left&amp;#039;: &amp;#039;solid 0.5px #aaaaaa&amp;#039;,&lt;br /&gt;
                &amp;#039;border-right&amp;#039;: &amp;#039;solid 0.5px #aaaaaa&amp;#039;&lt;br /&gt;
            })&lt;br /&gt;
&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        // Save button&lt;br /&gt;
        $(&amp;#039;&amp;lt;button&amp;gt;&amp;#039;)&lt;br /&gt;
            .text(&amp;#039;ذخیره&amp;#039;).css({&lt;br /&gt;
                &amp;#039;float&amp;#039;: &amp;#039;left&amp;#039;&lt;br /&gt;
            })&lt;br /&gt;
            .attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-save&amp;#039;)&lt;br /&gt;
            .attr(&amp;#039;accesskey&amp;#039;, &amp;#039;s&amp;#039;)&lt;br /&gt;
            .click(handleSave)&lt;br /&gt;
            .insertAfter($(&amp;#039;#stub_sorter_select_chosen .chosen-choices&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
        // hide selected items in dropdown&lt;br /&gt;
        mw.util.addCSS(&lt;br /&gt;
            &amp;#039;#stub_sorter_select_chosen .chosen-results .result-selected { display: none; }&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        // Focus on the search box as soon as the the sorter menu loads&lt;br /&gt;
        // Add placeholder, because chosen&amp;#039;s native placeholder doesn&amp;#039;t work with a changing menu.&lt;br /&gt;
        // Reset the search box width to accomodate the placeholder text&lt;br /&gt;
        // Keep resetting whenever the input goes out of focus&lt;br /&gt;
        $input&lt;br /&gt;
            .focus()&lt;br /&gt;
            .attr(&amp;#039;placeholder&amp;#039;, &amp;#039;برای افزودن یک برچسب خرد، شروع به نوشتن کنید...&amp;#039;)&lt;br /&gt;
            .css(&amp;#039;width&amp;#039;, &amp;#039;200px&amp;#039;)&lt;br /&gt;
            .blur(function() {&lt;br /&gt;
                $(this).css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
        // also reset it when an option is selected by clicking on it&lt;br /&gt;
        // or when clicking on the search box after the $input has become narrow (despite our best efforts...)&lt;br /&gt;
        $(&amp;#039;.chosen-container&amp;#039;).click(function() {&lt;br /&gt;
            $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Adapted from [[User:Enterprisey/afch-master.js/submissions.js]]&amp;#039;s category selection menu:&lt;br /&gt;
        // Offer dynamic suggestions!&lt;br /&gt;
        // Since jquery.chosen doesn&amp;#039;t natively support dynamic results,&lt;br /&gt;
        // we sneakily inject some dynamic suggestions instead.&lt;br /&gt;
        // Consider upgrading to select2 or OOUI to avoid these hacks&lt;br /&gt;
        $input.keyup(function(e) {&lt;br /&gt;
            var searchStr = $input.val();&lt;br /&gt;
&lt;br /&gt;
            // The worst hack. Because Chosen keeps messing with the&lt;br /&gt;
            // width of the text box, keep on resetting it to 100%&lt;br /&gt;
            $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
            $input.parent().css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            // Ignore arrow keys and home/end keys to allow users to navigate through the suggestions or through the search query&lt;br /&gt;
            // and don&amp;#039;t show results when an empty string is provided&lt;br /&gt;
            if ((e.which &amp;gt;= 35 &amp;amp;&amp;amp; e.which &amp;lt;= 40) ||&lt;br /&gt;
                (menuFrozen &amp;amp;&amp;amp; e.which !== undefined) ||&lt;br /&gt;
                !searchStr) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // true when fake keyup is produced by the Freeze button&lt;br /&gt;
            // in this case, api limit has to be raised to 500&lt;br /&gt;
            var extended = e.which === undefined;&lt;br /&gt;
&lt;br /&gt;
            $.when(&lt;br /&gt;
                searchBy !== &amp;#039;regex&amp;#039; ? getStubSearchResults(&amp;#039;prefix&amp;#039;, searchStr, extended) : undefined,&lt;br /&gt;
                searchBy !== &amp;#039;regex&amp;#039; ? getStubSearchResults(&amp;#039;intitle&amp;#039;, searchStr, extended) : undefined,&lt;br /&gt;
                searchBy === &amp;#039;regex&amp;#039; ? getStubSearchResults(&amp;#039;regex&amp;#039;, searchStr, extended) : undefined&lt;br /&gt;
            ).then(function(stubsPrefix, stubsIntitle, stubsRegex) {&lt;br /&gt;
&lt;br /&gt;
                var stubs;&lt;br /&gt;
                switch (searchBy) {&lt;br /&gt;
                    case &amp;#039;prefix&amp;#039;:&lt;br /&gt;
                        stubs = uniqElements(stubsPrefix, stubsIntitle);&lt;br /&gt;
                        break;&lt;br /&gt;
                    case &amp;#039;intitle&amp;#039;:&lt;br /&gt;
                        stubs = uniqElements(stubsIntitle, stubsPrefix);&lt;br /&gt;
                        break;&lt;br /&gt;
                    case &amp;#039;regex&amp;#039;:&lt;br /&gt;
                        stubs = stubsRegex;&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Reset the text box width again&lt;br /&gt;
                $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
                $input.parent().css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
                // If the input has changed since we started searching,&lt;br /&gt;
                // don&amp;#039;t show outdated results&lt;br /&gt;
                if ($input.val() !== searchStr) {&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                // Clear existing suggestions&lt;br /&gt;
                $select.children().not(&amp;#039;:selected&amp;#039;).remove();&lt;br /&gt;
&lt;br /&gt;
                // Now, add the new suggestions&lt;br /&gt;
                stubs.forEach(function(stub) {&lt;br /&gt;
&lt;br /&gt;
                    // do not add if already selected&lt;br /&gt;
                    if ($select.val().indexOf(stub) !== -1) {&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    $select.append(&lt;br /&gt;
                        $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).text(stub).val(stub)&lt;br /&gt;
                    );&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
                // We&amp;#039;ve changed the &amp;lt;select&amp;gt;, now tell Chosen to&lt;br /&gt;
                // rebuild the visible list&lt;br /&gt;
                $select.trigger(&amp;#039;liszt:updated&amp;#039;);&lt;br /&gt;
                $select.trigger(&amp;#039;chosen:updated&amp;#039;);&lt;br /&gt;
                $input.val(searchStr);&lt;br /&gt;
                $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
                $input.parent().css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            }).catch(function(e) {&lt;br /&gt;
                if ($input.val() !== searchStr) {&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                $select.children().not(&amp;#039;:selected&amp;#039;).remove();&lt;br /&gt;
                $select.append(&lt;br /&gt;
                    $(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;)&lt;br /&gt;
                    .text(&amp;#039;خطا در دریافت نتایج: &amp;#039; + e)&lt;br /&gt;
                    .attr(&amp;#039;disabled&amp;#039;, &amp;#039;true&amp;#039;)&lt;br /&gt;
                );&lt;br /&gt;
                $select.trigger(&amp;#039;liszt:updated&amp;#039;);&lt;br /&gt;
                $select.trigger(&amp;#039;chosen:updated&amp;#039;);&lt;br /&gt;
                $input.val(searchStr);&lt;br /&gt;
                $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
                $input.parent().css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var getStubSearchResults = function(searchType, searchStr, extended) {&lt;br /&gt;
        var query = {&lt;br /&gt;
            &amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
            &amp;#039;list&amp;#039;: &amp;#039;search&amp;#039;,&lt;br /&gt;
            &amp;#039;srsearch&amp;#039;: &amp;#039;incategory:&amp;quot;الگو:مقاله‌های_خرد&amp;quot; &amp;#039;,&lt;br /&gt;
            &amp;#039;srnamespace&amp;#039;: &amp;#039;10&amp;#039;,&lt;br /&gt;
            &amp;#039;srlimit&amp;#039;: extended ? &amp;#039;500&amp;#039; : &amp;#039;100&amp;#039;,&lt;br /&gt;
            &amp;#039;srqiprofile&amp;#039;: &amp;#039;classic&amp;#039;,&lt;br /&gt;
            &amp;#039;srprop&amp;#039;: &amp;#039;&amp;#039;,&lt;br /&gt;
            &amp;#039;srsort&amp;#039;: &amp;#039;relevance&amp;#039;&lt;br /&gt;
        };&lt;br /&gt;
        switch (searchType) {&lt;br /&gt;
            case &amp;#039;prefix&amp;#039;:&lt;br /&gt;
                query.srsearch += &amp;#039;prefix:&amp;quot;الگو:&amp;#039; + searchStr + &amp;#039;&amp;quot;&amp;#039;;&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;#039;intitle&amp;#039;:&lt;br /&gt;
                var searchStrWords = searchStr.split(&amp;#039; &amp;#039;).filter(function(e) {&lt;br /&gt;
                    return !/^\s*$/.test(e);&lt;br /&gt;
                });&lt;br /&gt;
                query.srsearch += &amp;#039;intitle:&amp;quot;&amp;#039; + searchStrWords.join(&amp;#039;&amp;quot; intitle:&amp;quot;&amp;#039;) + &amp;#039;&amp;quot;&amp;#039;;&lt;br /&gt;
                break;&lt;br /&gt;
            case &amp;#039;regex&amp;#039;:&lt;br /&gt;
                query.srsearch += &amp;#039;intitle:/&amp;#039; + mw.util.escapeRegExp(searchStr) + &amp;#039;/i&amp;#039;;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return API.get(query).then(function(response) {&lt;br /&gt;
            if (response &amp;amp;&amp;amp; response.query &amp;amp;&amp;amp; response.query.search) {&lt;br /&gt;
                return response.query.search.map(function(e) {&lt;br /&gt;
                    return e.title.slice(5);&lt;br /&gt;
                });&lt;br /&gt;
            } else {&lt;br /&gt;
                return $.Deferred().reject(JSON.stringify(response));&lt;br /&gt;
            }&lt;br /&gt;
        }, function(e) {&lt;br /&gt;
            return $.Deferred().reject(JSON.stringify(e));&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var handlePreview = function() {&lt;br /&gt;
&lt;br /&gt;
        // Show preview&lt;br /&gt;
        var $this = $(this);&lt;br /&gt;
        var selectedTags = $this.val();&lt;br /&gt;
        if (selectedTags.length) {&lt;br /&gt;
            var tagsWikitext = &amp;#039;{{&amp;#039; + selectedTags.join(&amp;#039;}}\n{{&amp;#039;) + &amp;#039;}}&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            API.parse(tagsWikitext).then(function(parsedhtmldiv) {&lt;br /&gt;
&lt;br /&gt;
                // Do nothing if tag selection has changed since we&lt;br /&gt;
                // sent the parse API call, comparing lengths is enough&lt;br /&gt;
                if (selectedTags.length !== $this.val().length) {&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                $(&amp;#039;#stub-sorter-previewbox&amp;#039;).html(parsedhtmldiv);&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            $(&amp;#039;#stub-sorter-previewbox&amp;#039;).empty();&lt;br /&gt;
        }&lt;br /&gt;
        // $input.css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;);  // doesn&amp;#039;t work&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var handleSave = function submit() {&lt;br /&gt;
        $(&amp;#039;#stub-sorter-error&amp;#039;).remove();&lt;br /&gt;
        var $status = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).text(&amp;#039;واکشی صفحه...&amp;#039;)&lt;br /&gt;
            .attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-status&amp;#039;)&lt;br /&gt;
            .css({&lt;br /&gt;
                &amp;#039;float&amp;#039;: &amp;#039;left&amp;#039;&lt;br /&gt;
            });&lt;br /&gt;
        $(this).replaceWith($status);&lt;br /&gt;
        API.edit(mw.config.get(&amp;#039;wgPageName&amp;#039;), function(revision) {&lt;br /&gt;
            $status.text(&amp;#039;ذخیرهٔ صفحه...&amp;#039;);&lt;br /&gt;
            var pageText = revision.content;&lt;br /&gt;
&lt;br /&gt;
            var tagsBefore = (pageText.match(/\{\{[^{]*(?:خرد|ناقص)(?:\|.*?)?\}\}/g) || []).map(function(e) {&lt;br /&gt;
                // capitalise first char after {{&lt;br /&gt;
                return e[0] + e[1] + e[2].toUpperCase() + e.slice(3);&lt;br /&gt;
            });&lt;br /&gt;
            var tagsAfter = $(&amp;#039;#stub-sorter-select&amp;#039;).val().map(function(e) {&lt;br /&gt;
                return &amp;#039;{{&amp;#039; + e + &amp;#039;}}&amp;#039;;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // Automatically remove {{Stub}} if accidentally left behind&lt;br /&gt;
            if (tagsAfter.length &amp;gt; 1) {&lt;br /&gt;
                var idx = tagsAfter.indexOf(&amp;#039;{{خرد}}&amp;#039;);&lt;br /&gt;
                if (idx !== -1) {&lt;br /&gt;
                    tagsAfter.splice(idx, 1);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // remove all stub tags&lt;br /&gt;
            pageText = pageText.replace(/\{\{[^{]*(?:خرد|ناقص)(?:\|.*?)?\}\}\s*/g, &amp;#039;&amp;#039;).trim();&lt;br /&gt;
&lt;br /&gt;
            // add selected stub tags&lt;br /&gt;
            pageText += &amp;#039;\n\n&amp;#039; + tagsAfter.join(&amp;#039;\n&amp;#039;); // per [[MOS:LAYOUT]]&lt;br /&gt;
&lt;br /&gt;
            // For producing edit summary&lt;br /&gt;
            var summary = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var tagsAdded = tagsAfter.filter(function(e) {&lt;br /&gt;
                return tagsBefore.indexOf(e) === -1;&lt;br /&gt;
            });&lt;br /&gt;
            var tagsRemoved = tagsBefore.filter(function(e) {&lt;br /&gt;
                return tagsAfter.indexOf(e) === -1;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            tagsRemoved.forEach(function(e) {&lt;br /&gt;
                summary += &amp;#039;–&amp;#039; + e + &amp;#039;، &amp;#039;;&lt;br /&gt;
            });&lt;br /&gt;
            tagsAdded.forEach(function(e) {&lt;br /&gt;
                summary += &amp;#039;+&amp;#039; + e + &amp;#039;، &amp;#039;;&lt;br /&gt;
            });&lt;br /&gt;
            summary = summary.slice(0, -2); // remove the final &amp;#039;, &amp;#039;&lt;br /&gt;
&lt;br /&gt;
            return {&lt;br /&gt;
                text: pageText,&lt;br /&gt;
                summary: summary + &amp;#039; با کمک [[راهنما:ابزار/خردیاب|خردیاب]]&amp;#039;,&lt;br /&gt;
                nocreate: 1,&lt;br /&gt;
                minor: getPref(&amp;#039;minor&amp;#039;, true),&lt;br /&gt;
                watchlist: getPref(&amp;#039;watchlist&amp;#039;, &amp;#039;nochange&amp;#039;)&lt;br /&gt;
            };&lt;br /&gt;
        }).then(function() {&lt;br /&gt;
            $status.text(&amp;#039;انجام شد. بارگذاری مجدد صفحه...&amp;#039;);&lt;br /&gt;
            setTimeout(function() {&lt;br /&gt;
                window.location.href = mw.util.getUrl(mw.config.get(&amp;#039;wgPageName&amp;#039;));&lt;br /&gt;
            }, 500);&lt;br /&gt;
        }).fail(function(e) {&lt;br /&gt;
            $status.text(&amp;#039;ذخیرهٔ ناموفق. لطفاً دوباره تلاش کنید.&amp;#039;)&lt;br /&gt;
                .attr(&amp;#039;id&amp;#039;, &amp;#039;stub-sorter-error&amp;#039;)&lt;br /&gt;
                .css({&lt;br /&gt;
                    &amp;#039;color&amp;#039;: &amp;#039;red&amp;#039;,&lt;br /&gt;
                    &amp;#039;font-weight&amp;#039;: &amp;#039;bold&amp;#039;,&lt;br /&gt;
                    &amp;#039;padding-left&amp;#039;: &amp;#039;5px&amp;#039;&lt;br /&gt;
                });&lt;br /&gt;
            console.error(e); // eslint-disable-line no-console&lt;br /&gt;
            setTimeout(function() {&lt;br /&gt;
                $status.before($(&amp;#039;#stub-sorter-save&amp;#039;));&lt;br /&gt;
                $(&amp;#039;#stub-sorter-save&amp;#039;).click(handleSave);&lt;br /&gt;
            }, 500);&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // utility function to get unique elements from 2 arrays&lt;br /&gt;
    var uniqElements = function(arr1, arr2) {&lt;br /&gt;
        var obj = {};&lt;br /&gt;
        var i;&lt;br /&gt;
        for (i = 0; i &amp;lt; arr1.length; i++) {&lt;br /&gt;
            obj[arr1[i]] = 0;&lt;br /&gt;
        }&lt;br /&gt;
        for (i = 0; i &amp;lt; arr2.length; i++) {&lt;br /&gt;
            obj[arr2[i]] = 0;&lt;br /&gt;
        }&lt;br /&gt;
        return Object.keys(obj);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // function to obtain a preference option from common.js&lt;br /&gt;
    var getPref = function(name, defaultVal) {&lt;br /&gt;
        if (window[&amp;#039;stubSorter_&amp;#039; + name] === undefined) {&lt;br /&gt;
            return defaultVal;&lt;br /&gt;
        } else {&lt;br /&gt;
            return window[&amp;#039;stubSorter_&amp;#039; + name];&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     ********************* SET UP *********************&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    // auto start the script when navigating to an article from CAT:STUBS&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;رده:مقاله‌های خرد&amp;#039;) {&lt;br /&gt;
        $(&amp;#039;#mw-pages li a&amp;#039;).each(function(_, e) {&lt;br /&gt;
            e.href += &amp;#039;?startstubsorter=y&amp;#039;;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    // show only on existing articles, and my sandbox (for testing)&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === 0 &amp;amp;&amp;amp; mw.config.get(&amp;#039;wgCurRevisionId&amp;#039;) !== 0 ) {&lt;br /&gt;
        mw.util.addPortletLink(getPref(&amp;#039;portlet&amp;#039;, &amp;#039;p-cactions&amp;#039;), &amp;#039;#&amp;#039;, &amp;#039;خرد&amp;#039;,&lt;br /&gt;
            &amp;#039;ca-stub&amp;#039;, &amp;#039;افزودن یا حذف الگوهای خرد&amp;#039;).addEventListener(&amp;#039;click&amp;#039;, callback);&lt;br /&gt;
    }&lt;br /&gt;
    if (mw.util.getParamValue(&amp;#039;startstubsorter&amp;#039;)) {&lt;br /&gt;
        setTimeout(function() {&lt;br /&gt;
            $(&amp;#039;#ca-stub&amp;#039;).click();&lt;br /&gt;
        }, 1000);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>*&gt;Jeeputer</name></author>
	</entry>
</feed>