|
|
(5 intermediate revisions by the same user not shown) |
Line 4: |
Line 4: |
|
| |
|
| /* Script in here will be executed when the page is "ready" */ | | /* Script in here will be executed when the page is "ready" */ |
| $(document).ready(getNumberOfActiveUsers); | | $(document).ready(function() { |
| | getNumberOfActiveUsers(); |
| | var elem = document.getElementById("evoChecker"); |
| | if(elem != null) { |
| | elem.innerHTML = |
| | 'Alternatively, enter an evolution factor below to see the chances.<br>' + |
| | '<input style="margin-bottom:10px" type="number" id="evoInput" min=0 max=1 step=0.01 placeholder="Evolution" onchange="calcEvo()"></input><br>' + |
| | '<table style="float:left;margin-right:10px" class="wikitable" id="evoOutputBiter"></table>' + |
| | '<table class="wikitable" id="evoOutputSpitter"></table>'; |
| | calcEvo(); |
| | } |
| | }); |
|
| |
|
| /* show correct number of active users on the main page */ | | /* show correct number of active users on the main page */ |
Line 30: |
Line 41: |
| } | | } |
| }; | | }; |
| | |
| | /* Collapsible list on [[Prototype definitions]] */ |
| | |
| | $(".prototype-tree li").each(function (index, element) { |
| | if ( $( element ).children("ul").length > 0 ) { |
| | $( element ).addClass("prototype-tree-parent"); |
| | }; |
| | }); |
| | |
| | $(".prototype-tree li.prototype-tree-parent").on("click", function(event) { |
| | // only collapse if I clicked a li or the direct child of a li that is not another list or a link |
| | if ( $( event.currentTarget ).children("ul").length > 0 && $( event.target ).get(0).tagName != "UL" && $( event.target ).get(0).tagName != "A" && ($( event.target ).hasClass("prototype-tree-parent") || $( event.target ).parent().hasClass("prototype-tree-parent")) ) { |
| | $( event.currentTarget ).children("ul")[0].classList.toggle("hidden"); |
| | $( event.currentTarget ).toggleClass("prototype-tree-parent-collapsed"); |
| | return false; // prevents further event bubbling |
| | } |
| | }); |
|
| |
|
| /* Evolution calc */ | | /* Evolution calc */ |
Line 96: |
Line 124: |
| }); | | }); |
| tableElem.innerHTML = html; | | tableElem.innerHTML = html; |
| };
| |
|
| |
| window.onload = function() {
| |
| var elem = document.getElementById("evoChecker");
| |
| if(elem != null) {
| |
| elem.innerHTML =
| |
| 'Alternatively, enter an evolution factor below to see the chances.<br>' +
| |
| '<input style="margin-bottom:10px" type="number" id="evoInput" min=0 max=1 step=0.01 placeholder="Evolution" onchange="calcEvo()"></input><br>' +
| |
| '<table style="float:left;margin-right:10px" class="wikitable" id="evoOutputBiter"></table>' +
| |
| '<table class="wikitable" id="evoOutputSpitter"></table>';
| |
| calcEvo();
| |
| }
| |
| }; | | }; |
|
| |
|
| /* Template:Inventory tooltips */ | | /* Template:Inventory tooltips */ |
|
| |
|
| var lastTouchTime = 0; | | /* var lastTouchTime = 0; |
| document.addEventListener('touchstart', updateLastTouchTime, true); | | document.addEventListener('touchstart', updateLastTouchTime, true); |
| function updateLastTouchTime() { | | function updateLastTouchTime() { |
Line 134: |
Line 150: |
| var newRule = '.tab .factorio-icon:hover:after{display: block; ' + "content: '" + text + "'}"; | | var newRule = '.tab .factorio-icon:hover:after{display: block; ' + "content: '" + text + "'}"; |
| document.styleSheets[0].insertRule(newRule, countCssRules); | | document.styleSheets[0].insertRule(newRule, countCssRules); |
| }); | | }); */ |
|
| |
|
| /* Template:BlueprintString */ | | /* Template:BlueprintString */ |
Line 177: |
Line 193: |
| }); | | }); |
|
| |
|
| //*** Language template ***//
| | $(".tab-head-5").click(function() { |
| if($(".languages-flags .flag").length == 0) {
| | $(".tab-head").removeClass("tab-head-active"); |
| console.log("Not showing languages bar because there's no other language's version of this page."); | | $(this).addClass("tab-head-active"); |
| $(".languages-container").hide(); | | $(".tab").hide(); |
| } | | $(".tab-5").show(); |
| | }); |
|
| |
|
| //Spoiler template
| | $(".tab-head-6").click(function() { |
| $(".spoiler-container .button").click(function() { | | $(".tab-head").removeClass("tab-head-active"); |
| $(this).siblings(".text").toggle("slow"); | | $(this).addClass("tab-head-active"); |
| | $(".tab").hide(); |
| | $(".tab-6").show(); |
| }); | | }); |
|
| |
|
| | $(".tab-head-7").click(function() { |
| | $(".tab-head").removeClass("tab-head-active"); |
| | $(this).addClass("tab-head-active"); |
| | $(".tab").hide(); |
| | $(".tab-7").show(); |
| | }); |
|
| |
|
| /* Wanted pages -> Factorio:Wanted_pages */
| | $(".tab-head-8").click(function() { |
| | $(".tab-head").removeClass("tab-head-active"); |
| | $(this).addClass("tab-head-active"); |
| | $(".tab").hide(); |
| | $(".tab-8").show(); |
| | }); |
|
| |
|
| var wantedPagesListsLocation = "Factorio:Wanted pages";
| | $(".tab-head-9").click(function() { |
| var enPageLength = {};
| | $(".tab-head").removeClass("tab-head-active"); |
| var stubs = {};
| | $(this).addClass("tab-head-active"); |
| var disambigs = {};
| | $(".tab").hide(); |
| var archived = {};
| | $(".tab-9").show(); |
| | }); |
|
| |
|
| function getStubs() {
| | $(".tab-head-10").click(function() { |
| $.ajax({
| | $(".tab-head").removeClass("tab-head-active"); |
| url: apiUrl,
| | $(this).addClass("tab-head-active"); |
| data: {
| | $(".tab").hide(); |
| format: 'json',
| | $(".tab-10").show(); |
| action: 'query',
| | }); |
| list: 'categorymembers',
| |
| cmtitle: 'Category:Stubs',
| |
| cmlimit: 400,
| |
| cmprop: 'title'
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var categorymembers = data.query.categorymembers;
| |
| console.log('Found ' + categorymembers.length + ' stubs.');
| |
| for (var i = 0; i < categorymembers.length; i++) {
| |
| stubs[categorymembers[i].title] = true;
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed.' );
| |
| }
| |
| });
| |
| };
| |
|
| |
|
| function getDisambigs() {
| | $(".tab-head-11").click(function() { |
| $.ajax({
| | $(".tab-head").removeClass("tab-head-active"); |
| url: apiUrl,
| | $(this).addClass("tab-head-active"); |
| data: {
| | $(".tab").hide(); |
| format: 'json',
| | $(".tab-11").show(); |
| action: 'query',
| |
| list: 'categorymembers',
| |
| cmtitle: 'Category:Disambiguations',
| |
| cmlimit: 400,
| |
| cmprop: 'title'
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var categorymembers = data.query.categorymembers;
| |
| console.log('Found ' + categorymembers.length + ' disambigs.');
| |
| for (var i = 0; i < categorymembers.length; i++) {
| |
| disambigs[categorymembers[i].title] = true;
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed.' );
| |
| }
| |
| });
| |
| };
| |
| | |
| | |
| function getArchived() {
| |
| $.ajax({ | |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| list: 'categorymembers',
| |
| cmtitle: 'Category:Archived',
| |
| cmlimit: 400,
| |
| cmprop: 'title'
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var categorymembers = data.query.categorymembers;
| |
| console.log('Found ' + categorymembers.length + ' archived pages.');
| |
| for (var i = 0; i < categorymembers.length; i++) {
| |
| archived[categorymembers[i].title] = true;
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed.' );
| |
| }
| |
| }); | |
| };
| |
| | |
| $("#create-wanted-pages-list").click(function(){ | |
| getToken();
| |
| createWantedPagesLists();
| |
| }); | | }); |
|
| |
|
| function createWantedPagesLists() {
| | //*** Language template ***// |
| getUserGroup();
| | if($(".languages-flags .flag").length == 0) { |
| if (userGroup.some(isBot) == false) return;
| | console.log("Not showing languages bar because there's no other language's version of this page."); |
| enPageLength = {};
| | $(".languages-container").hide(); |
| console.log("Getting wantedPages...");
| |
| var wantedPages = getWantedPages();
| |
| console.log("Got wantedPages.");
| |
| //wantedPages = filterWantedPages(wantedPages); //takes a lot of api requests, not worth it atm
| |
| //console.log("Filtered wantedPages.");
| |
| wantedPages = wantedPages.sort(compare);
| |
| console.log("Sorted wantedPages.");
| |
| splitWantedPagesIntoDifferentLanguages(wantedPages);
| |
| };
| |
| | |
| function getWantedPages() {
| |
| var wantedPages = [];
| |
| | |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| list: 'querypage',
| |
| qppage: 'Wantedpages',
| |
| qplimit: '5000',
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var results = data.query.querypage.results;
| |
| iloop1: for (var i = 0; i < results.length; i++) {
| |
| var pageObject = new WantedPage(results[i].title, results[i].value);
| |
| for (var j = 0; j < wantedPages.length; j++) {
| |
| if (wantedPages[j].title == pageObject.title) {
| |
| continue iloop1; //don't put page into array
| |
| }
| |
| }
| |
| wantedPages.push(pageObject);
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed. Wantedpages' );
| |
| }
| |
| });
| |
|
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| list: 'querypage',
| |
| qppage: 'Wantedpages',
| |
| qplimit: '5000',
| |
| qpoffset: '4000',
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var results = data.query.querypage.results;
| |
| iloop2: for (var i = 0; i < results.length; i++) {
| |
| var pageObject = new WantedPage(results[i].title, results[i].value);
| |
| for (var j = 0; j < wantedPages.length; j++) {
| |
| if (wantedPages[j].title == pageObject.title) {
| |
| continue iloop2; //don't put page into array
| |
| }
| |
| }
| |
| wantedPages.push(pageObject);
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed. Wantedpages' );
| |
| }
| |
| });
| |
|
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| list: 'querypage',
| |
| qppage: 'Wantedpages',
| |
| qplimit: '5000',
| |
| qpoffset: '8000',
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var results = data.query.querypage.results;
| |
| iloop3: for (var i = 0; i < results.length; i++) {
| |
| var pageObject = new WantedPage(results[i].title, results[i].value);
| |
| for (var j = 0; j < wantedPages.length; j++) {
| |
| if (wantedPages[j].title == pageObject.title) {
| |
| continue iloop3; //don't put page into array
| |
| }
| |
| }
| |
| wantedPages.push(pageObject);
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Request failed. Wantedpages' );
| |
| }
| |
| });
| |
| return wantedPages;
| |
| };
| |
| | |
| function filterWantedPages(wantedPages) {
| |
| for (var i = 0; i < wantedPages.length; i++) {
| |
| if ((wantedPages[i].title.indexOf("File:") == -1) && (wantedPages[i].title.indexOf("Template:") == -1)) { //not doing this for file or template pages
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: "json",
| |
| action: 'query',
| |
| list: "backlinks",
| |
| bltitle: wantedPages[i].title,
| |
| bllimit: 500,
| |
| blnamespace: 0|4|6|8|10|12|14|3000|3002 //Main, Project (Factorio), File, MediaWiki, Template, Help, Category, Tutorial, Infobox
| |
| },
| |
| async: false,
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| if (data.query.backlinks.length == 0) {
| |
| console.log("Removing " + wantedPages[i].title + " from the wantedPages.");
| |
| wantedPages.splice(i, 1);
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| alert( 'Error: Backlinks request failed.' );
| |
| }
| |
| });
| |
| }
| |
| }
| |
| return wantedPages;
| |
| };
| |
| | |
| function splitWantedPagesIntoDifferentLanguages(wantedPages) {
| |
| var czechWantedPages = [];
| |
| var germanWantedPages = [];
| |
| var spanishWantedPages = [];
| |
| var frenchWantedPages = [];
| |
| var italianWantedPages = [];
| |
| var japaneseWantedPages = [];
| |
| var dutchWantedPages = [];
| |
| var polishWantedPages = [];
| |
| var portugueseWantedPages = [];
| |
| var russianWantedPages = [];
| |
| var swedishWantedPages = [];
| |
| var ukrainianWantedPages = [];
| |
| var chineseWantedPages = [];
| |
| var turkishWantedPages = [];
| |
| var koreanWantedPages = [];
| |
| var malayanWantedPages = [];
| |
| var danishWantedPages = [];
| |
| var hungarianWantedPages = [];
| |
| var wantedFiles = [];
| |
| var wantedFileTalk = [];
| |
| var wantedTemplates = [];
| |
| var otherWantedPages = [];
| |
| | |
| for (var i = 0; i < wantedPages.length; i++) {
| |
| switch (wantedPages[i].title.slice(-3)) {//"/cs", "/de", "/es", "/fr", "/it", "/ja", "/nl", "/pl", "/-br", "/ru", "/sv", "/uk", "/zh", "/tr", "/ko", "/ms", "/da", "/hu"
| |
| case "/cs": czechWantedPages.push(wantedPages[i]); break;
| |
| case "/de": germanWantedPages.push(wantedPages[i]); break;
| |
| case "/es": spanishWantedPages.push(wantedPages[i]); break;
| |
| case "/fr": frenchWantedPages.push(wantedPages[i]); break;
| |
| case "/it": italianWantedPages.push(wantedPages[i]); break;
| |
| case "/ja": japaneseWantedPages.push(wantedPages[i]); break;
| |
| case "/nl": dutchWantedPages.push(wantedPages[i]); break;
| |
| case "/pl": polishWantedPages.push(wantedPages[i]); break;
| |
| case "-br": portugueseWantedPages.push(wantedPages[i]); break;
| |
| case "/ru": russianWantedPages.push(wantedPages[i]); break;
| |
| case "/sv": swedishWantedPages.push(wantedPages[i]); break;
| |
| case "/uk": ukrainianWantedPages.push(wantedPages[i]); break;
| |
| case "/zh": chineseWantedPages.push(wantedPages[i]); break;
| |
| case "/tr": turkishWantedPages.push(wantedPages[i]); break;
| |
| case "/ko": koreanWantedPages.push(wantedPages[i]); break;
| |
| case "/ms": malayanWantedPages.push(wantedPages[i]); break;
| |
| case "/da": danishWantedPages.push(wantedPages[i]); break;
| |
| case "/hu": hungarianWantedPages.push(wantedPages[i]); break;
| |
| default: if (wantedPages[i].title.slice(0, 5) == "File:") {wantedFiles.push(wantedPages[i])} else if (wantedPages[i].title.slice(0, 9) == "Template:") {wantedTemplates.push(wantedPages[i])} else if (wantedPages[i].title.slice(0, 10) == "File talk:") {wantedFileTalk.push(wantedPages[i])} else {otherWantedPages.push(wantedPages[i])}; break;
| |
| }
| |
| }
| |
|
| |
| getStubs();
| |
| getDisambigs();
| |
| getArchived();
| |
|
| |
| createWantedPagesPage("cs", czechWantedPages, "Czech");
| |
| createWantedPagesPage("de", germanWantedPages, "German");
| |
| createWantedPagesPage("es", spanishWantedPages, "Spanish");
| |
| createWantedPagesPage("fr", frenchWantedPages, "French");
| |
| createWantedPagesPage("it", italianWantedPages, "Italian");
| |
| createWantedPagesPage("ja", japaneseWantedPages, "Japanese");
| |
| createWantedPagesPage("nl", dutchWantedPages, "Dutch");
| |
| createWantedPagesPage("pl", polishWantedPages, "Polish");
| |
| createWantedPagesPage("pt-br", portugueseWantedPages, "Portuguese");
| |
| createWantedPagesPage("ru", russianWantedPages, "Russian");
| |
| createWantedPagesPage("sv", swedishWantedPages, "Swedish");
| |
| createWantedPagesPage("uk", ukrainianWantedPages, "Ukrainian");
| |
| createWantedPagesPage("zh", chineseWantedPages, "Chinese");
| |
| createWantedPagesPage("tr", turkishWantedPages, "Turkish");
| |
| createWantedPagesPage("ko", koreanWantedPages, "Korean");
| |
| createWantedPagesPage("ms", malayanWantedPages, "Malay");
| |
| createWantedPagesPage("da", danishWantedPages, "Danish");
| |
| createWantedPagesPage("hu", hungarianWantedPages, "Hungarian");
| |
| | |
| createWantedPagesPage("file", wantedFiles, "Files");
| |
| createWantedPagesPage("file_talk", wantedFileTalk, "File talk");
| |
| createWantedPagesPage("template", wantedTemplates, "Templates");
| |
| createWantedPagesPage("other", otherWantedPages, "Other");
| |
| } | | } |
|
| |
|
| function createWantedPagesPage(location, wantedPages, language) {
| | //Spoiler template |
| var languageSuffixes = ["cs", "de", "es", "fr", "it", "ja", "nl", "pl", "pt-br", "ru", "sv", "uk", "zh", "tr", "ko", "ms", "da", "hu"]
| | $(".spoiler-container .button").click(function() { |
| if (languageSuffixes.indexOf(location) > -1) {
| | $(this).siblings(".text").toggle("slow"); |
| var formattedWantedPages = "Number of wanted pages in " + language + ": " + wantedPages.length + "\n{|class=wikitable\n!#\n!Page\n!Links to this page\n!Length of the corresponding English page in bytes";
| | }); |
| for (var i = 0; i < wantedPages.length; i++) {
| |
| //I don't dare to make this into a function because I don't want this to be async so lets put a whole api request in here lul
| |
| var enPageTitle = wantedPages[i].title.slice(0, - location.length - 1)
| |
| var length = 0;
| |
| if (enPageTitle == "") {
| |
| length = '---';
| |
| } else if (enPageLength[enPageTitle]) {
| |
| length = enPageLength[enPageTitle];
| |
| } else {
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| titles: enPageTitle,
| |
| prop: 'info',
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'POST',
| |
| success: function( data ) {
| |
| var pages = data.query.pages;
| |
| var pageInfo = pages[Object.keys(pages)[0]];
| |
| length = pageInfo['length'];
| |
| if (!length) length = '---';
| |
| var redirect = pageInfo['redirect'];
| |
| if (redirect == "") {
| |
| length = length + " (Redirect)";
| |
| } else if (disambigs[enPageTitle]) {
| |
| length = length + " (Disambiguation)";
| |
| }
| |
| if (stubs[enPageTitle]) {
| |
| length = length + " (Stub)";
| |
| }
| |
| if (archived[enPageTitle]) {
| |
| length = length + " (Archived)";
| |
| }
| |
| enPageLength[enPageTitle] = length
| |
| },
| |
| error: function( xhr ) {
| |
| alert("Failed to get page length: " + enPageTitle);
| |
| }
| |
| });
| |
| }
| |
| formattedWantedPages = formattedWantedPages.concat("\n|-\n|" + (i + 1) + "\n|[" + mw.config.get('wgServer') + "/index.php?title=" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].title + "]\n|[" + mw.config.get('wgServer') + "/index.php?title=Special:WhatLinksHere/" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].value + "]\n|[" + mw.config.get('wgServer') + "/index.php?title=" + encodeURI(enPageTitle) + " " + length + "]");
| |
| }
| |
| } else { | |
| var formattedWantedPages = "Number of wanted pages in " + language + ": " + wantedPages.length + "\n{|class=wikitable\n!#\n!Page\n!Links to this page";
| |
| for (var i = 0; i < wantedPages.length; i++) {
| |
| formattedWantedPages = formattedWantedPages.concat("\n|-\n|" + (i + 1) + "\n|[" + mw.config.get('wgServer') + "/index.php?title=" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].title + "]\n|[" + mw.config.get('wgServer') + "/index.php?title=Special:WhatLinksHere/" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].value + "]");
| |
| }
| |
| }
| |
| formattedWantedPages = formattedWantedPages.concat("\n|}");
| |
| | |
| createPage(wantedPagesListsLocation + "/" + location, formattedWantedPages, "Updated the list of wanted pages for " + language + ".");
| |
| }
| |
| | |
| function compare(a,b) {
| |
| if (parseInt(a.value) > parseInt(b.value))
| |
| return -1;
| |
| if (parseInt(a.value) < parseInt(b.value))
| |
| return 1;
| |
| if (a.title < b.title)
| |
| return -1;
| |
| if (a.title > b.title)
| |
| return 1;
| |
| return 0;
| |
| } | |
| | |
| function WantedPage(pageTitle, pageValue) {
| |
| this.title = pageTitle;
| |
| this.value = pageValue;
| |
| }
| |
|
| |
|
| //* General/generic functions *// | | //* General/generic functions *// |
Line 796: |
Line 472: |
| }); | | }); |
| } | | } |
|
| |
|
| |
| /* OLD INFOBOX CONVERSION TOOLS */
| |
| /*function targetAllPagesInCategory(category) {
| |
| var languageSuffixes = ["/fr", "/ru", "/de"]; //, "/cs", "/de", "/es", "/fr", "/it", "/nl", "/pl", "/pt-br", "/ru", "/sv", "/uk", "/zh", ""];
| |
| for (var j = 0; j < languageSuffixes.length; j++) {
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| list: 'categorymembers',
| |
| cmtitle: (category + languageSuffixes[j]),
| |
| cmlimit: 500
| |
| },
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var pages = data.query.categorymembers;
| |
| for (var i = 0; i < pages.length; i++) {
| |
| //purgePage(pages[i].title);
| |
| extractPageInfo(pages[i].title, "9c28a1344a20bf189fda7d58339e518257f2dd9b+\\");
| |
|
| |
| }
| |
|
| |
| if ( data && data.query && data.query.result == 'Success' ) {
| |
| window.location.reload(); // reload page if edit was successful
| |
| } else if ( data && data.error ) {
| |
| //alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info + 'Category' );
| |
| } else {
| |
| //alert( 'Error: Unknown result from API. Category' );
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| //alert( 'Error: Request failed. Category' );
| |
| }
| |
| });
| |
| }
| |
| }
| |
|
| |
| function extractPageInfo(pageTitle, token) {
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'query',
| |
| titles: pageTitle,
| |
| prop: 'revisions',
| |
| rvprop: 'content'
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'GET',
| |
| success: function( data ) {
| |
| var pages = data.query.pages;
| |
| var revisions = pages[Object.keys(pages)[0]].revisions[0];
| |
| var content = revisions[Object.keys(revisions)[2]]
| |
| var title = pages[Object.keys(pages)[0]].title;
| |
| createNewInfoboxPage(title, content, token);
| |
| if ( data && data.query && data.query.result == 'Success' ) {
| |
| window.location.reload(); // reload page if edit was successful
| |
| } else if ( data && data.error ) {
| |
| //alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
| |
| } else {
| |
| //alert( 'Error: Unknown result from API.' );
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| //alert( 'Error: Request failed.' );
| |
| }
| |
| });
| |
| }
| |
|
| |
| function createNewInfoboxPage(page, contentOfMainPage, token) {
| |
| var infoboxText = getInfoboxFromFullPageContent(contentOfMainPage);
| |
|
| |
| var infoboxPageTitle = page.replace(/\/(de|fr|nl|it|es|ru|pt\-br|cs|pl|sv|uk|zh)/g, function(piece) {return "";}).concat("/infobox");
| |
| var oldPageRevisedText = getOldPageRevisedText(page, contentOfMainPage, infoboxPageTitle);
| |
| removeInfoboxFromMain(page, oldPageRevisedText, token);
| |
|
| |
| if (infoboxText != null) {
| |
| if (/\/(de|fr|nl|it|es|ru|pt\-br|cs|pl|sv|uk|zh)/g.test(page)) {
| |
| return;
| |
| }
| |
| var newPageTitle = page.concat("/infobox");
| |
| var convertedInfoboxText = convertInfobox(infoboxText, token);
| |
| createPage(newPageTitle, convertedInfoboxText, token, page, contentOfMainPage);
| |
| }
| |
| }
| |
|
| |
| function getOldPageRevisedText(pageTitle, content, infoboxPageTitle) {
| |
| content = content.replace(/{{\bCombat\b(\s+(\||{).+)+\s}}/gi, function (piece) {
| |
| return "{{:" + infoboxPageTitle + "}}";
| |
| });
| |
| return content;
| |
| }
| |
|
| |
| function removeInfoboxFromMain(pageTitle, content, token) {
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'edit',
| |
| title: pageTitle,
| |
| text: content,
| |
| bot: true,
| |
| token: token,
| |
| summary: "(BOT) - Replaced old infobox with a link to the /infobox subpage"
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'POST',
| |
| success: function( data ) {
| |
| if ( data && data.edit && data.edit.result == 'Success' ) {
| |
| window.location.reload(); // reload page if edit was successful
| |
| } else if ( data && data.error ) {
| |
| //alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
| |
| } else {
| |
| //alert( 'Error: Unknown result from API.' );
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| //alert( 'Error: Request failed.' );
| |
| }
| |
| })
| |
| };
| |
|
| |
| function getInfoboxFromFullPageContent(contentOfPage) {
| |
| var matches = contentOfPage.match(/{{\bCombat\b(\s+\|.+)+\s}}/gi);
| |
| if (matches != null && matches.length > 0) {
| |
| infoboxText = matches[0];
| |
| } else {
| |
| infoboxText = null;
| |
| }
| |
| return infoboxText;
| |
| }
| |
|
| |
| function convertInfobox(text) {
| |
| text = text.replace(/{{(\w+)/g, function (piece, $1) {
| |
| var returnText = "{{Infobox\n| category = ";
| |
|
| |
| $1 = $1.toLowerCase();
| |
|
| |
| switch ($1) {
| |
| case "item":
| |
| returnText = returnText.concat("Items");
| |
| break;
| |
| case "machinery":
| |
| returnText = returnText.concat("Machinery");
| |
| break;
| |
| case "combat":
| |
| returnText = returnText.concat("Combat");
| |
| break;
| |
| case "technology":
| |
| returnText = returnText.concat("Technology");
| |
| }
| |
|
| |
| switch ($1) {
| |
| case "machinery":
| |
| returnText = returnText.concat("\n| category-name = Machine");
| |
| break;
| |
| case "item":
| |
| returnText = returnText.concat("\n| category-name = Item");
| |
| break;
| |
| }
| |
|
| |
| return returnText;
| |
| });
| |
|
| |
| text = text.replace("stack_size", "stack-size");
| |
| text = text.replace("poweroutput", "power-output");
| |
| text = text.replace("input", "recipe");
| |
| text = text.replace("raw", "total-raw");
| |
| text = text.replace("technologies", "required-technologies");
| |
| text = text.replace("costmultiplier", "cost-multiplier");
| |
| text = text.replace("requirements", "required-technologies");
| |
| text = text.replace("walkingspeed", "walking-speed");
| |
| text = text.replace("storagesize", "storage-size");
| |
| text = text.replace("gridsize", "grid-size");
| |
| text = text.replace("shootingspeed", "shooting-speed");
| |
| text = text.replace("damagebonus", "damage-bonus");
| |
| text = text.replace("clustersize", "cluster-size");
| |
| text = text.replace("aoesize", "area-of-effect-size");
| |
| text = text.replace("magazinesize", "magazine-size");
| |
| text = text.replace("recharge", "robot-recharge-rate");
| |
| text = text.replace("rechargebuffer", "internal-buffer-recharge-rate");
| |
| text = text.replace("wirereach", "wire-reach");
| |
| text = text.replace("craftingspeed", "crafting-speed");
| |
| text = text.replace("smeltingspeed", "smelting-speed");
| |
| text = text.replace("miningpower", "mining-power");
| |
| text = text.replace("miningspeed", "mining-speed");
| |
| text = text.replace("miningarea", "mining-area");
| |
| text = text.replace("supplyarea", "supply-area");
| |
| text = text.replace("constructionarea", "construction-area");
| |
| text = text.replace("lifetime", "lifespan");
| |
| text = text.replace("inventorysizebonus", "inventory-size-bonus");
| |
| text = text.replace("gridsize", "grid-size");
| |
| text = text.replace("boosttechs", "boosting-technologies");
| |
| text = text.replace("allowstech", "allows");
| |
| text = text.replace("storage", "storage-size");
| |
| text = text.replace(/\|\s*\brecipe\b\s*=\s*(.+)\n\|\s*\boutput\b\s*=\s*(.+)/g, function (piece, $1, $2) {
| |
| return "| recipe = " + $1 + " = " + $2;
| |
| });
| |
|
| |
| text = text.concat("<noinclude>[[Category:Infobox page]]</noinclude>");
| |
|
| |
| return text;
| |
| }
| |
|
| |
| function createPage(pageTitle, content, token, page, contentOfMainPage) {
| |
| $.ajax({
| |
| url: apiUrl,
| |
| data: {
| |
| format: 'json',
| |
| action: 'edit',
| |
| title: pageTitle,
| |
| text: content,
| |
| bot: true,
| |
| createonly: true,
| |
| token: token,
| |
| summary: "(BOT) - Created infobox sub page for " + page
| |
| },
| |
| async: false,
| |
| dataType: 'json',
| |
| type: 'POST',
| |
| success: function( data ) {
| |
|
| |
| if ( data && data.edit && data.edit.result == 'Success' ) {
| |
| window.location.reload(); // reload page if edit was successful
| |
| } else if ( data && data.error ) {
| |
| //alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
| |
| } else {
| |
| //alert( 'Error: Unknown result from API.' );
| |
| }
| |
| },
| |
| error: function( xhr ) {
| |
| //alert( 'Error: Request failed.' );
| |
| }
| |
| });
| |
| }*/
| |
| /* END OF OLD INFOBOX CONVERSION TOOL */
| |
/* Any JavaScript here will be loaded for all users on every page load. */
var apiUrl = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php"
/* Script in here will be executed when the page is "ready" */
$(document).ready(function() {
getNumberOfActiveUsers();
var elem = document.getElementById("evoChecker");
if(elem != null) {
elem.innerHTML =
'Alternatively, enter an evolution factor below to see the chances.<br>' +
'<input style="margin-bottom:10px" type="number" id="evoInput" min=0 max=1 step=0.01 placeholder="Evolution" onchange="calcEvo()"></input><br>' +
'<table style="float:left;margin-right:10px" class="wikitable" id="evoOutputBiter"></table>' +
'<table class="wikitable" id="evoOutputSpitter"></table>';
calcEvo();
}
});
/* show correct number of active users on the main page */
function getNumberOfActiveUsers() {
if (document.getElementById("active-users")) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'allusers',
aulimit: 500,
auactiveusers: true
},
dataType: 'json',
type: 'GET',
success: function(data) {
document.getElementById("active-users").innerHTML = data.query.allusers.length.toString();
},
error: function(xhr) {
console.log( 'Error: Request failed.' );
}
});
}
};
/* Collapsible list on [[Prototype definitions]] */
$(".prototype-tree li").each(function (index, element) {
if ( $( element ).children("ul").length > 0 ) {
$( element ).addClass("prototype-tree-parent");
};
});
$(".prototype-tree li.prototype-tree-parent").on("click", function(event) {
// only collapse if I clicked a li or the direct child of a li that is not another list or a link
if ( $( event.currentTarget ).children("ul").length > 0 && $( event.target ).get(0).tagName != "UL" && $( event.target ).get(0).tagName != "A" && ($( event.target ).hasClass("prototype-tree-parent") || $( event.target ).parent().hasClass("prototype-tree-parent")) ) {
$( event.currentTarget ).children("ul")[0].classList.toggle("hidden");
$( event.currentTarget ).toggleClass("prototype-tree-parent-collapsed");
return false; // prevents further event bubbling
}
});
/* Evolution calc */
//values are in the form [evolution, weight]
const biterSpawner = [
["Small Biter", [[0.0, 0.3], [0.6, 0.0]]],
["Medium Biter", [[0.2, 0.0], [0.6, 0.3], [0.7, 0.1]]],
["Big Biter", [[0.5, 0.0], [1.0, 0.4]]],
["Behemoth Biter", [[0.9, 0.0], [1.0, 0.3]]]
];
const spitterSpawner = [
["Small Biter", [[0.0, 0.3], [0.35, 0.0]]],
["Small Spitter", [[0.25, 0.0], [0.5, 0.3], [0.7, 0.0]]],
["Medium Spitter", [[0.4, 0.0], [0.7, 0.3], [0.9, 0.1]]],
["Big Spitter", [[0.5, 0.0], [1.0, 0.4]]],
["Behemoth Spitter", [[0.9, 0.0], [1.0, 0.3]]]
];
//calculates the interpolated value
function lerp(low, high, pos) {
const s = high[0] - low[0];
const l = (pos - low[0]) / s;
return (low[1] * (1-l)) + (high[1] * l);
};
//gets the weight list
function getValues(map, evo) {
var result = {};
var sum = 0;
map.forEach(function(data) {
const list = data[1];
var low = list[0];
var high = list[list.length-1];
list.forEach(function(val) {
if(val[0] <= evo && val[0] > low[0]) low = val;
if(val[0] >= evo && val[0] < high[0]) high = val;
});
var val = null;
if(evo <= low[0]) val = low[1];
else if(evo >= high[0]) val = high[1];
else val = lerp(low, high, evo);
sum += val;
result[data[0]] = val;
});
Object.keys(result).forEach(function(data, index) {
result[data] = result[data] / sum;
});
return result;
};
function calcEvo() {
const evo = document.getElementById("evoInput").value;
genTable(getValues(biterSpawner, evo), document.getElementById("evoOutputBiter"), "Biter's Nest");
genTable(getValues(spitterSpawner, evo), document.getElementById("evoOutputSpitter"), "Spitter's Nest");
};
function percentile(value) {
return (value*100).toFixed(2) + "%";
};
function genTable(data, tableElem, title) {
var html = '<tr><th>'+title+'</th><th>Chance</th>';
Object.keys(data).forEach(function(value) {
html += '<tr><td>'+value+'</td><td>'+percentile(data[value])+'</td>';
});
tableElem.innerHTML = html;
};
/* Template:Inventory tooltips */
/* var lastTouchTime = 0;
document.addEventListener('touchstart', updateLastTouchTime, true);
function updateLastTouchTime() {
lastTouchTime = new Date();
}
$(".tab-head").mousemove(function(e) {
if (e.buttons > 0) return;
if (new Date() - lastTouchTime < 500) return;
var countCssRules = document.styleSheets[0].cssRules.length;
var newRule = '.tab-head:hover:after{display: block; left: ' + (e.offsetX + 20) + 'px; top: ' + (e.offsetY + 20) + 'px;}';
document.styleSheets[0].insertRule(newRule, countCssRules);
});
$(".tab .factorio-icon").mousemove(function(e) {
if (e.buttons > 0) return;
if (new Date() - lastTouchTime < 500) return;
var countCssRules = document.styleSheets[0].cssRules.length;
$(e.currentTarget).children("a").attr("title", "");
var text = $(e.currentTarget).children("a").children("img").attr("alt");
var newRule = '.tab .factorio-icon:hover:after{display: block; ' + "content: '" + text + "'}";
document.styleSheets[0].insertRule(newRule, countCssRules);
}); */
/* Template:BlueprintString */
$(".bps-box").click(function(event) {
var copyTarget = document.createElement("input");
copyTarget.setAttribute("value", $( event.target ).children("p").html());
document.body.appendChild(copyTarget);
copyTarget.select();
document.execCommand("copy");
document.body.removeChild(copyTarget);
});
/* Template:Inventory */
$(".tab-head-1").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-1").show();
});
$(".tab-head-2").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-2").show();
});
$(".tab-head-3").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-3").show();
});
$(".tab-head-4").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-4").show();
});
$(".tab-head-5").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-5").show();
});
$(".tab-head-6").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-6").show();
});
$(".tab-head-7").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-7").show();
});
$(".tab-head-8").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-8").show();
});
$(".tab-head-9").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-9").show();
});
$(".tab-head-10").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-10").show();
});
$(".tab-head-11").click(function() {
$(".tab-head").removeClass("tab-head-active");
$(this).addClass("tab-head-active");
$(".tab").hide();
$(".tab-11").show();
});
//*** Language template ***//
if($(".languages-flags .flag").length == 0) {
console.log("Not showing languages bar because there's no other language's version of this page.");
$(".languages-container").hide();
}
//Spoiler template
$(".spoiler-container .button").click(function() {
$(this).siblings(".text").toggle("slow");
});
//* General/generic functions *//
/* User is bot if userGroup.some(isBot) == true */
var userGroup = "";
function getUserGroup() {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
meta: 'userinfo',
uiprop: 'groups',
},
async: false,
dataType: 'json',
type: 'GET',
success: function(data) {
userGroup = data.query.userinfo.groups
},
});
};
function isBot(group) {
return group == "bot";
}
/* Get token of this session */
var globalToken;
function getToken() {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
meta: 'tokens',
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
globalToken = data.query.tokens.csrftoken;
},
error: function( xhr ) {
console.log("Failed to get token.");
}
});
}
function genericEditPage(title, content, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: title,
text: content,
token: globalToken,
summary: summary,
bot: true,
nocreate: true
},
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Edited " + title);
},
error: function( xhr ) {
alert("Failed to edit " + title);
}
});
};
function createPage(pageTitle, content, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: pageTitle,
text: content,
token: globalToken,
summary: summary,
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Created page: " + pageTitle);
},
error: function( xhr ) {
console.log("Failed to create page");
}
});
}
function getBacklinks(page) {
var backlinks = [];
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'backlinks',
bltitle: page,
bllimit: 1000,
},
async: false,
type: 'GET',
success: function( data ) {
backlinks = data.query.backlinks;
},
error: function( xhr ) {
alert( 'Error: Backlinks request failed.' );
}
});
return backlinks;
};
function getFileUsage(file) {
var imageusage = [];
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'query',
list: 'imageusage',
iutitle: file,
iulimit: 1000
},
async: false,
type: 'GET',
success: function( data ) {
imageusage = data.query.imageusage;
},
error: function( xhr ) {
alert( 'Error: Imageusage request failed.' );
}
});
return imageusage;
};
function performNullEdit(pageTitle, summary) {
$.ajax({
url: apiUrl,
data: {
format: 'json',
action: 'edit',
title: pageTitle,
section: 0,
text: "",
token: globalToken,
summary: summary,
bot: true
},
async: false,
dataType: 'json',
type: 'POST',
success: function( data ) {
console.log("Performed null edit");
},
error: function( xhr ) {
console.log("Failed to perform null edit");
}
});
}
function purgeWhatLinksHere(pageTitle) {
$.ajax({
url: apiUrl,
data: {
format: "json",
action: 'query',
list: "backlinks",
bltitle: pageTitle,
bllimit: 500
},
async: true,
type: 'GET',
success: function( data ) {
console.log(data);
for (var i = 0; i < data.query.backlinks.length; i++) {
purgePage(data.query.backlinks[i].title);
}
},
error: function( xhr ) {
//alert( 'Error: Request failed.' );
console.log("Failed purging");
}
});
}
function purgePage(pageTitle) {
$.ajax({
url: apiUrl,
data: {
action: 'purge',
forcelinkupdate: true,
titles: pageTitle,
prop: "info"
},
async: true,
type: 'GET',
success: function( data ) {
console.log("purging " + pageTitle);
},
error: function( xhr ) {
//alert( 'Error: Request failed.' );
console.log("Failed purging");
}
});
}