User:XXN:na/gal.js
Note: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Clear the cache in Tools → Preferences
function removeBlanks(arr) {
var ret = [];
var i, len;
for (i = 0, len = arr.length; i < len; i++) {
var s = arr[i];
s = s.trim();
if (s) {
ret.push(s);
}
}
return ret;
}
function doGalleryImport() {
var articles = document.getElementById("wpGalleryImportPages").value.split("\n");
articles = removeBlanks(articles);
if (!articles.length) {
return;
}
var wpGalleryImportType = document.getElementById("wpGalleryImportType").value, wpGalleryImportSummary = document.getElementById("wpGalleryImportSummary").value, edited = 0, failed = new Array(), error = new Array();
var wpGalleryImportMinor = document.getElementById("wpGalleryImportMinor").checked;
var wpGalleryImportBot = document.getElementById("wpGalleryImportBot").checked;
for(i=0;i<articles.length;i++) {
var article = articles[i];
if(article.length > 0) {
var req = new XMLHttpRequest();
req.open("GET", wgScriptPath + "/api.php?format=json&action=query&prop=info&intoken=edit&uselang=" + wgUserLanguage + "&titles=" + encodeURIComponent(article), false);
req.send(null);
var response = eval("(" + req.responseText + ")").query.pages;
for(var index in response) {
var info = response[index];
var edittoken = info.edittoken;
var postdata = "format=json"
+ "&action=edit&watchlist=nochange"
+ "&title=" + encodeURIComponent(article)
+ "&summary=" + encodeURIComponent(wpGalleryImportSummary)
+ "&token=" + encodeURIComponent(edittoken);
+ "&uselang=" + wgUserLanguage;
if(wpGalleryImportMinor)
postdata += "&minor=1";
else
postdata += "¬minor=1";
if(wpGalleryImportBot)
postdata += "&bot=1";
if(wpGalleryImportType == "replacetext"){
var pagetextru = gettext1(article);
// var re = new RegExp(".*={2,3}\s*Галерея\s*скриншотов\s*={2,3}\s*\<gallery\>([\s\S]*?)\<\/gallery\>.*","gi");
// var gall = pagetext.match(re);
var gall = pagetextru.replace(/^[\s\S]*?=*\s*Галерея\s*скриншотов\s*=*\s*\<gallery\>([\s\S]*?)\<\/gallery\>[\s\S]*$/gi, "$1");
gall = gall.replace(/Файл/gi, "File");
gall = gall.replace(/jpg\s*\|/gi, "jpg{{!}}");
var pagetext = gettext(article);
pagetext = pagetext.replace(/(\n\|Gallery\=)\s*(\|)/, "$1\n" + gall + "\n\n$2");
postdata += "&text=" + encodeURIComponent(pagetext);
}
var req = new XMLHttpRequest();
req.open("POST", wgScriptPath + "/api.php?uselang=" + wgUserLanguage, false);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", postdata.length);
req.send(postdata);
if(eval("(" + req.responseText + ")").edit ) { //If edited, update the count and the button.
edited++;
document.getElementById("wpGalleryImportSubmit").value = "(" + edited + ")";
} else { //If not edited, add the title to the "failed" array and a description of the error to the "error" array.
failed.push(article);
error.push(eval("(" + req.responseText + ")").error.info);
}
}
}
if(!articles[i+1]) {
document.getElementById("wpGalleryImportSubmit").value = "Done (" + edited + ")";
if(failed.length > 0) {
var linkedList = "";
for(x=0; x<failed.length; x++) {
linkedList += "<li><a href=\"" + wgScript + "?title=" + encodeURIComponent(failed[x]) + "\">" + failed[x] + "</a>: " + error[x] + "</li>"; //Links the titles in the "failed" array
}
document.getElementById("wpGalleryImportFailedContainer").innerHTML += '<br /><b>Failed edits:</b><ul>' + linkedList + '</ul>';
}
}
}
}
function gettext1(title){
var req1 = new XMLHttpRequest();
req1.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&uselang=ru&titles="+encodeURIComponent(title), false);
// req1.open("GET", "https://wiki.wargaming.net/ru/index.php?action=raw&ctype=text/javascript&title="+encodeURIComponent(title), false);
req1.send(null);
var response1 = eval('(' + req1.responseText + ')');
pageid1 = response1['query']['pageids'][0];
if (pageid1 == "-1") {
delete req1;
return '';
}
var pagetext1 = response1['query']['pages'][pageid1]['revisions'][0]['*'];
return pagetext1;
}
function gettext(title){
var req = new XMLHttpRequest();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&titles="+encodeURIComponent(title), false);
// req.open("GET", "https://wiki.wargaming.net/en/index.php?action=raw&ctype=text/javascript&title="+encodeURIComponent(title), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
if (pageid == "-1") {
delete req;
return '';
}
var pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];
return pagetext;
}
function GalleryImportform() {
var bodyContent = (skin == "cologneblue" ? "article" : "bodyContent");
document.getElementsByTagName("h1")[0].textContent = "Mass Gallery Import tool";
document.title = "Mass Gallery Import tool";
document.getElementById(bodyContent).innerHTML = '<h3 id="siteSub">by XXN</h3><br /><br />'
+ '<form id="wpGalleryImport" name="wpGalleryImport">'
+ '<b>If you abuse this tool, it\'s <i>your</i> fault, not mine.</b>'
+ '<div id="wpGalleryImportFailedContainer"></div>'
+ '<br /><br />'
+ 'Pages to edit (one on each line, please):<br />'
+ '<textarea tabindex="1" name="wpGalleryImportPages" id="wpGalleryImportPages" rows="10" cols="80"></textarea>'
+ '<br /><br /><table style="background-color:transparent">'
+ '<tr><td>Edit type:</td>'
+ '<td><select id="wpGalleryImportType">'
+ '<option value="replacetext">Import Gallery from RU to EN wiki</option>'
+ '</select></td></tr>'
+ '<tr><td>Edit summary:</td>'
+ '<td><input type="text" id="wpGalleryImportSummary" name="wpGalleryImportSummary" maxlength="255" /></td></tr>'
+ '<tr><td>Mark edits as minor changes:</td>'
+ '<td><input type="checkbox" id="wpGalleryImportMinor" name="wpGalleryImportMinor"/></td></tr>'
+ '<tr><td>Mark edits as bot edit:</td>'
+ '<td><input type="checkbox" id="wpGalleryImportBot" name="wpGalleryImportBot"/></td></tr>'
+ '<tr><td><input type="button" id="wpGalleryImportSubmit" name="wpGalleryImportSubmit" value="Edit" onclick="doGalleryImport()" /></td>'
+ '</form>';
}
if(wgNamespaceNumber == -1 && wgTitle.toLowerCase() == "galleryimport" ) addOnloadHook(GalleryImportform);