사용자:기나ㅏㄴ/redirectcreator.js

위키백과, 우리 모두의 백과사전.

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다. 구글 크롬, 파이어폭스, 마이크로소프트 엣지, 사파리: ⇧ Shift 키를 누른 채 "새로 고침" 버튼을 클릭하십시오. 더 자세한 정보를 보려면 위키백과:캐시 무시하기 항목을 참고하십시오.

//한국어판 설명은 [[사용자:기나ㅏㄴ/redirectcreator]]을 참고하십시오.
$.when(mw.loader.using(['mediawiki.util'], $.ready)).done( function() {
	mw.util.addPortletLink("p-tb", mw.config.get('wgArticlePath').replace('$1', "특수:빈문서/RedirectCreator"), '넘겨주기 문서 생성기' , "넘겨주기 생성" , "넘겨주기 생성");
});

if (mw.config.get('wgCanonicalNamespace')+':'+mw.config.get('wgTitle') === '특수:빈문서/RedirectCreator' && mw.config.get('wgAction') == 'view');

if (!RedirCreator && mw.config.get("wgPageName").toLowerCase().startsWith("특수:검색".toLowerCase())) {
    var RedirCreator = {}
    $(document).ready(function () {
        if (!$(".mw-search-exists").text()) {
            var page = $("#ooui-php-1").val()
            $(".mw-search-result-heading").each(function (i) {
                $(this).append('<span class="redirectcreator">(<a id="redirectcreator-' + i + '" href="javascript:void(0)">넘겨주기</a>)</span>')
                $("#redirectcreator-" + i).click(function (e) {
                    e.preventDefault()
                    var target = $(this).parent().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: " [[User:기나ㅏㄴ/redirectcreator|redirect creator]]을 이용하여 [[" + page + "]]→[[" + target + "]] 넘겨주기를 생성함.",
                                    token: result.query.tokens.csrftoken
                                }).done(function (result) {
                                    if (result.error) {
                                        alert(result.error.info)
                                    } else {
                                        mw.notify("넘겨주기 문서가 성공적으로 생성되었습니다!")
                                        $(".redirectcreator").remove();
                                    }
                                }).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("Redirect creator - " + 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" 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-form").find("input").keydown(function (e) {
                if (RedirCreator.isEmpty($(this).val()) && $(this).prop('required')) {
                	$(this).css("background-color", "yellow");
                    exit = true
                } else {
                	$(this).css("background-color", "white");
                }
            })
            $("#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>시작하기</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 = false
                }
            })
            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: " [[User:기나ㅏㄴ/redirectcreator|redirect creator]]을 이용하여 [[" + page + "]]→[[" + target + "]] 넘겨주기를 생성함.",
                                        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"
                                    })
                                }
                            }).fail(function () {
                                throw "Fail"
                            })
                        }
                    }).fail(function () {
                        throw "Fail"
                    })
                } catch (Error) {
                    alert("연결이 끊겼습니다. 중단합니다.")
                    output("<br><span style=\"color:red\">실패.</span>");
                }
            }
            next()
        }
    })
}