پرش به محتوا

کاربر:Jeeputer/redirectCreator.js: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
برچسب‌ها: واگردانی دستی برگردانده‌شده
جزبدون خلاصۀ ویرایش
برچسب: واگردانی دستی
خط ۴۶: خط ۴۶:
}
}
})
})
} else if (!RedirCreator && mw.config.get("wgPageName").toLowerCase() == "Special:BlankPage/RedirectCreator".toLowerCase()) {
} else if (!RedirCreator && mw.config.get("wgPageName").toLowerCase() == "ویژه:صفحهٔ_خالی/RedirectCreator".toLowerCase()) {
var RedirCreator = {}
var RedirCreator = {}
$(document).ready(function () {
$(document).ready(function () {

نسخهٔ ‏۲۹ ژانویهٔ ۲۰۲۱، ساعت ۰۸:۴۲

if (!RedirCreator && mw.config.get("wgPageName").startsWith("ویژه:جستجو")) {
    var RedirCreator = {}
    $(document).ready(function () {
        if (!$(".mw-search-exists").text()) {
            $(".mw-search-result-heading").each(function (i) {
                $(this).append('(<a id="redirectcreator-' + i + '" href="javascript:void(0)">تغییرمسیر</a>)')
                $("#redirectcreator-" + i).click(function (e) {
                    e.preventDefault()
                    var page = $("#ooui-php-1").val()
                    var target = $(this).parent().find("a").eq(0).text()
                    RedirCreator.run = confirm("ایجاد تغییرمسیر از \«" + page + "\» به \«" + target + "\»؟")
                    if (RedirCreator.run) {
                        $.get(mw.config.get("wgScriptPath") + "/api.php", {
                            action: "query",
                            format: "json",
                            meta: "tokens",
                            type: "csrf"
                        }).done(function (result) {
                            if (result.error) {
                                alert(result.error.info)
                            } else {
                                $.post(mw.config.get("wgScriptPath") + "/api.php", {
                                    action: "edit",
                                    format: "json",
                                    createonly: "1",
                                    title: page,
                                    text: "#تغییرمسیر [[" + target + "]]",
                                    summary: "ایجاد تغییرمسیر از [[" + page + "]] به [[" + target + "]] با کمک [[کاربر:Jeeputer/redirectCreator|ایجادگر تغییرمسیر]]",
                                    token: result.query.tokens.csrftoken
                                }).done(function (result) {
                                    if (result.error) {
                                        alert(result.error.info)
                                    } else {
                                        mw.notify("تغییرمسیر با موفقیت ایجاد شد.")
                                    }
                                }).fail(function () {
                                    location.reload()
                                })
                            }
                        }).fail(function () {
                            location.reload()
                        })
                    }
                })
            })
        }
    })
} else if (!RedirCreator && mw.config.get("wgPageName").toLowerCase() == "ویژه:صفحهٔ_خالی/RedirectCreator".toLowerCase()) {
    var RedirCreator = {}
    $(document).ready(function () {
    	$("#firstHeading").text("ایجادگر تغییرمسیر")
    	$("title").text("ایجادگر تغییرمسیر - " + mw.config.get("wgSiteName"))
        $("#mw-content-text").html("<p>ایجادگر تغییرمسیر، قابلیت ایجاد چندین تغییرمسیر را دارد. لطفاً سیاست‌های ویکی خود برای تغییرمسیر و انجام ویرایش‌های خودکار را مدنظر داشته‌باشید و از این ابزار به‌طور افراطی استفاده نکنید. هرگاه که روی \«شروع\» کلیک کنید، تنها یک فرصت برای لغو انجام کار خواهید داشت.</p>")
        $("#mw-content-text").append("<form id=\"redirectcreator-form\"></form>")
        $("#redirectcreator-form").append('<h2>محدودیت توالی</h2><p>انجام یک ویرایش در هر <input type="number" lang="fa" id="redirectcreator-rate" value="8" required="true"> ثانیه.</p>')
        $("#redirectcreator-form").append('<h2>تغییرمسیر</h2>')
        $("#redirectcreator-form").append('<p>برای ساخت چندین تغییرمسیر با صفحهٔ هدف یکسان، عنوان صفحهٔ هدف را در نخستین جعبهٔ «هدف»، و تمام صفحه‌هایی که باید به آن هدف تغییرمسیر داده‌شوند را در ستون «صفحه‌ها» وارد کنید. هر جعبهٔ اختیاری که خالی گذاشته‌شود، به‌طور خودکار با عنوان اولین هدف مشخص‌شده برای تغییرمسیر پر می‌شود.</p>')
        $("#redirectcreator-form").append('<table id="redirectcreator-table"><tr><th style="align:center">صفحهٔ تغییرمسیر</th><th style="align:center">هدف تغییرمسیر</th><th>(<a id="redirectcreator-addanother">+</a>)</th></tr></table>')
        $("#redirectcreator-table").append('<tr id="redirectcreator-row1"><td><input id="redirectcreator-page1" placeholder="لطفاً عنوان تغییرمسیر را اینجا وارد کنید" required="true"></td><td><input id="redirectcreator-target1" placeholder="لطفاً هدف تغییرمسیر را اینجا وارد کنید (پشتیبانی از عنوان بخش)" required="true"></td><td></td></tr>')
        $('#redirectcreator-page1').keypress(function (e) {
            switch (e.which || e.keyCode) {
                case 35: e.preventDefault()
                    break
                case 60: e.preventDefault()
                    break
                case 62: e.preventDefault()
                    break
                case 91: e.preventDefault()
                    break
                case 93: e.preventDefault()
                    break
                case 123: e.preventDefault()
                    break
                case 125: e.preventDefault()
                    break
                case 124: e.preventDefault()
                    break
            }
        })
        $('#redirectcreator-target1').keypress(function (e) {
            switch (e.which || e.keyCode) {
                case 60: e.preventDefault()
                    break
                case 62: e.preventDefault()
                    break
                case 91: e.preventDefault()
                    break
                case 93: e.preventDefault()
                    break
                case 123: e.preventDefault()
                    break
                case 125: e.preventDefault()
                    break
                case 124: e.preventDefault()
                    break
            }
        })
        RedirCreator.i = 2
        RedirCreator.isEmpty = function (str) {
            return str.replace(/\s/g, '').length == 0;
        }
        RedirCreator.addanother = function () {
            $("#redirectcreator-table").append('<tr id="redirectcreator-row' + RedirCreator.i + '"><td><input id="redirectcreator-page' + RedirCreator.i + '" placeholder="لطفاً عنوان تغییرمسیر را اینجا وارد کنید" required="true"></td><td><input id="redirectcreator-target' + RedirCreator.i + '" placeholder="لطفاً هدف تغییرمسیر را اینجا وارد کنید (پشتیبانی از عنوان بخش)"></td><td>(<a id="redirectcreator-remove' + RedirCreator.i + '" data-redirect-number="' + RedirCreator.i + '">-</a>)</td></tr>')
            $("#redirectcreator-remove" + RedirCreator.i).click(function (e) {
                e.preventDefault()
                var removeid = $(this).data("redirect-number")
                $("#redirectcreator-row" + removeid).remove()
            })
            $('#redirectcreator-page' + RedirCreator.i).keypress(function (e) {
                switch (e.which || e.keyCode) {
                    case 35: e.preventDefault()
                        break
                    case 60: e.preventDefault()
                        break
                    case 62: e.preventDefault()
                        break
                    case 91: e.preventDefault()
                        break
                    case 93: e.preventDefault()
                        break
                    case 123: e.preventDefault()
                        break
                    case 125: e.preventDefault()
                        break
                    case 124: e.preventDefault()
                        break
                }
            })
            $('#redirectcreator-target' + RedirCreator.i).keypress(function (e) {
                switch (e.which || e.keyCode) {
                    case 60: e.preventDefault()
                        break
                    case 62: e.preventDefault()
                        break
                    case 91: e.preventDefault()
                        break
                    case 93: e.preventDefault()
                        break
                    case 123: e.preventDefault()
                        break
                    case 125: e.preventDefault()
                        break
                    case 124: e.preventDefault()
                        break
                }
            })
            RedirCreator.i++;
        }
        $("#redirectcreator-addanother").click(RedirCreator.addanother);
        $("#redirectcreator-form").append('<h2>Start</h2><p>به‌مخض کلیک بر روی شروع، دیگر قادر به تنظیم دوبارهٔ این تنظیمات نخواهید بود؛ اما می‌توانید در هر زمانی با بستند این پنجره از ادامهٔ کار چشم‌پوشی کنید.</p><button type="submit" id="redirectcreator-start" onclick="RedirCreator.start()">شروع</button><div id="redirectcreator-output"></div>')
        RedirCreator.start = function () {
            $("#redirectcreator-form").find("input").prop("disabled", true)
            $("#redirectcreator-form").find("button").prop("disabled", true)
            var exit = false
            // check that all required fields are filled out correctly. If they are not, then immediately stop.
            $("#redirectcreator-form").find("input").each(function (i) {
                if (RedirCreator.isEmpty($(this).val()) && $(this).prop('required')) {
                	$(this).css("background-color", "yellow");
                    exit = true
                } else {
                	$(this).css("background-color", "white");
                }
            })
            if (exit) {
                $("#redirectcreator-form").find("input").prop("disabled", false)
                $("#redirectcreator-form").find("button").prop("disabled", false)
                return
            }
            // autofill non-required fields that are empty with the required target, exit, then wait until it is run again
            RedirCreator.singletarget = $("#redirectcreator-table").find("tr").eq(1).find("input").eq(1).val()
            $("#redirectcreator-table").find("tr").each(function (i) {
                if (i == 0) {
                    return
                }
                if (RedirCreator.isEmpty($(this).find("input").eq(1).val())) {
                    $(this).find("input").eq(1).val(RedirCreator.singletarget)
                    exit = true
                }
            })
            if (exit) {
                alert("تمام جعبه‌های غیرالزامی خالی به‌طور خودکار با عنوان نخستین هدف تغییر مسیر، که الزامی است، پر شدند. لطفاً بررسی کنید و از این که کارها درست انجام شده‌اند، مطمئن شوید.")
                $("#redirectcreator-form").find("input").prop("disabled", false)
                $("#redirectcreator-form").find("button").prop("disabled", false)
                return
            }
            if (!confirm("آیا از آغاز فرایند مطمئن هستید؟")) {
                $("#redirectcreator-form").find("input").prop("disabled", false)
                $("#redirectcreator-form").find("button").prop("disabled", false)
                return
            }

            if (!confirm("آخرین فرصت برای توقف! هرگونه اختلالی که به‌واسطهٔ استفادهٔ شما از این ابزار به‌وجود بیاید، ممکن است به قطع دسترسی ویرایشی شما منجر شود.")) {
                $("#redirectcreator-form").find("input").prop("disabled", false)
                $("#redirectcreator-form").find("button").prop("disabled", false)
                return
            }

            // time to start
            RedirCreator.redirpairs = []
            RedirCreator.delay = $("#redirectcreator-rate").val()
            $("#redirectcreator-table").find("tr").each(function (i) {
                if (i == 0) {
                    return
                }
                RedirCreator.redirpairs.push([$(this).find("input").eq(0).val(), $(this).find("input").eq(1).val()])
            })
            var output = function (text) {
                $("#redirectcreator-output").append(text)
            }
            RedirCreator.j = -1
            var next = function () {
                RedirCreator.j += 1
                if (RedirCreator.j < RedirCreator.redirpairs.length) {
                    RedirCreator.createRedirect(RedirCreator.redirpairs[RedirCreator.j][0], RedirCreator.redirpairs[RedirCreator.j][1])
                } else {
                    output("<span style=\"color:green\">پایان یافت.</span>");
                }
            }
            RedirCreator.createRedirect = function (page, target) {
                output("> ایجاد تغییرمسیر بین " + page + " و " + target + "...");
                try {
                    $.get(mw.config.get("wgScriptPath") + "/api.php", {
                        action: "parse",
                        prop: "wikitext",
                        format: "json",
                        page: target
                    }).done(function (result) {
                        if (result.error) {
                            output("<span style=\"color:orange\">صفحهٔ هدف موجود نیست. در حال پرش...</span><br>");
                            window.setTimeout(next, RedirCreator.delay * 1000);
                        } else {
                            $.get(mw.config.get("wgScriptPath") + "/api.php", {
                                action: "query",
                                format: "json",
                                meta: "tokens",
                                type: "csrf"
                            }).done(function (result) {
                                if (result.error) {
                                    output("<span style=\"color:orange\">خطا: " + result.error.info + " در حال پرش...</span><br>");
                                    window.setTimeout(next, RedirCreator.delay * 1000);
                                } else {
                                    $.post(mw.config.get("wgScriptPath") + "/api.php", {
                                        action: "edit",
                                        format: "json",
                                        createonly: "1",
                                        title: page,
                                        text: "#تغییرمسیر [[" + target + "]]",
                                        summary: "ایجاد تغییرمسیر از [[" + page + "]] به [[" + target + "]] با کمک [[کاربر:Jeeputer/redirectCreator|ایجادگر تغییرمسیر]]",
                                        token: result.query.tokens.csrftoken
                                    }).done(function (result) {
                                        if (result.error) {
                                            output("<span style=\"color:orange\">خطا: " + result.error.info + " در حال پرش...</span><br>");
                                            window.setTimeout(next, RedirCreator.delay * 1000);
                                        } else {
                                            output("<span style=\"color:green\">انجام شد</span><br>");
                                            window.setTimeout(next, RedirCreator.delay * 1000);
                                        }
                                    }).fail(function () {
                                        throw "ناموفق"
                                    })
                                }
                            }).fail(function () {
                                throw "ناموفق"
                            })
                        }
                    }).fail(function () {
                        throw "ناموفق"
                    })
                } catch (Error) {
                    alert("اتصال از دست رفت. در حال چشم‌پوشی.")
                    output("<br><span style=\"color:red\">ناموفق.</span>");
                }
            }
            next()
        }
    })
}