Usuário:BraunOBruno/CriadorDeRedirecionamentos.js
Nota: Depois de publicar, poderá ter de contornar a cache do seu navegador para ver as alterações.
- Firefox / Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
- Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
- Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
mw.loader.using("mediawiki.util", function(){
mw.util.addPortletLink(
"p-tb",
"https://pt.wikipedia.org/wiki/Especial:P%C3%A1gina_em_branco/CriadorDeRedirecionamentos",
"Criador de redirecionamentos",
"tb-redirs.side"
);
});
if (!RedirCreator && mw.config.get("wgPageName").toLowerCase().startsWith("Especial:Pesquisar".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)">redirecionar</a>)</span>')
$("#redirectcreator-" + i).click(function (e) {
e.preventDefault()
var target = $(this).parent().parent().find("a").eq(0).text()
RedirCreator.run = confirm("Criar redirecionamento de \"" + page + "\" para \"" + 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: "#REDIRECIONAMENTO [[" + target + "]]",
summary: "Redirecionamento de [[" + page + "]] para [[" + target + "]] foi criado usando [[Usuário:BraunOBruno/CriadorDeRedirecionamentos|redirect creator]]",
token: result.query.tokens.csrftoken
}).done(function (result) {
if (result.error) {
alert(result.error.info)
} else {
mw.notify("Redirecionamento criado com sucesso.")
$(".redirectcreator").remove();
}
}).fail(function () {
location.reload()
})
}
}).fail(function () {
location.reload()
})
}
})
})
}
})
} else if (!RedirCreator && mw.config.get("wgPageName").toLowerCase() == "Especial:Página_em_branco/CriadorDeRedirecionamentos".toLowerCase()) {
var RedirCreator = {}
$(document).ready(function () {
$("#firstHeading").text("Criador de redirecionamentos")
$("title").text("Criador de redirecionamentos - " + mw.config.get("wgSiteName"))
$("#mw-content-text").html("<p>O criador do redirecionamento pode criar vários redirecionamentos. Esteja ciente da política de seu wiki sobre redirecionamentos e ferramentas automatizadas e não use essa ferramenta excessivamente. Depois de clicar em \“Iniciar\”, você terá apenas uma chance de abortar a tarefa.</p>")
$("#mw-content-text").append("<form id=\"redirectcreator-form\"></form>")
$("#redirectcreator-form").append('<h2>Limite</h2><p>Fazer uma edição a cada <input type="number" id="redirectcreator-rate" value="20" required="true" min="0"> segundo(s).</p>')
$("#redirectcreator-form").append('<h2>Redirecionamentos</h2>')
$("#redirectcreator-form").append('<p>Para criar vários redirecionamentos para o mesmo destino, insira o destino no primeiro campo “destino” e todas as páginas a serem redirecionadas para esse destino na coluna “páginas”. Todos os campos opcionais em branco serão preenchidos automaticamente com o primeiro alvo de redirecionamento.</p>')
$("#redirectcreator-form").append('<table id="redirectcreator-table"><tr><th style="align:center">Redirecionar página</th><th style="align:center">Destino do redirecionamento</th><th>(<a id="redirectcreator-addanother">+</a>)</th></tr></table>')
$("#redirectcreator-table").append('<tr id="redirectcreator-row1"><td><input id="redirectcreator-page1" placeholder="Por favor insira o título a ser redirecionado aqui" required="true"></td><td><input id="redirectcreator-target1" placeholder="Por favor insira o destino de redirecionamento aqui (seções são suportadas)" 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="Por favor insira o título a ser redirecionado aqui" required="true"></td><td><input id="redirectcreator-target' + RedirCreator.i + '" placeholder="Por favor insira o destino de redirecionamento aqui (seções são suportadas)"></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>Iniciar</h2><p>Depois de clicar em iniciar, não será possível reconfigurar essas configurações, mas você pode cancelar a qualquer momento fechando essa janela.</p><button type="submit" id="redirectcreator-start" onclick="RedirCreator.start()">Iniciar</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("Todos os campos não obrigatórios em branco foram preenchidos automaticamente com o primeiro alvo de redirecionamento obrigatório. Verifique se tudo foi feito corretamente.")
$("#redirectcreator-form").find("input").prop("disabled", false)
$("#redirectcreator-form").find("button").prop("disabled", false)
return
}
if (!confirm("Tem certeza de que deseja iniciar?")) {
$("#redirectcreator-form").find("input").prop("disabled", false)
$("#redirectcreator-form").find("button").prop("disabled", false)
return
}
if (!confirm("ÚLTIMA CHANCE DE VOLTAR ATRÁS. QUALQUER TRANSTORNO QUE VOCÊ CAUSAR COM ISSO PODERÁ RESULTAR NO SEU BLOQUEIO.")) {
$("#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\">Finalizado.</span>");
}
}
RedirCreator.createRedirect = function (page, target) {
output("> Criando redirecionamento entre " + page + " e " + 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\">Página alvo não existe. Indo para a próxima...<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\">Erro: " + result.error.info + " Indo para a próxima...</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: "#REDIRECIONAMENTO [[" + target + "]]",
summary: "Criado redirecionamento de [[" + page + "]] para [[" + target + "]] usando [[Usuário:BraunOBruno/CriadorDeRedirecionamentos|redirect creator]]",
token: result.query.tokens.csrftoken
}).done(function (result) {
if (result.error) {
output("<span style=\"color:orange\">Erro: " + result.error.info + " Indo para a próxima...</span><br>");
window.setTimeout(next, RedirCreator.delay * 1000);
} else {
output("<span style=\"color:green\"> Feito</span><br>");
window.setTimeout(next, RedirCreator.delay * 1000);
}
}).fail(function () {
throw "Erro"
})
}
}).fail(function () {
throw "Erro"
})
}
}).fail(function () {
throw "Erro"
})
} catch (Error) {
alert("Conexão perdida. Abortando.")
output("<br><span style=\"color:red\">Failed.</span>");
}
}
next()
}
})
}