MediaWiki:Common.js: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
(more logging for bug search, fixed adding to the start of an infobox)
(removed pagesearch number tweak, .trim does not work because special characters are used, this does not matter too much, it just generates a bunch of unneeded adits on first actual bot use. added ability to remove recipes from pages if they are not needed)
Line 2: Line 2:


/* Testing infobox updating */
/* Testing infobox updating */
var OldContent = "";
var OldContent = "";


Line 238: Line 237:
if (OldContent.length > 0) {
if (OldContent.length > 0) {
//find recipes in page (OldContent)
//find recipes in page (OldContent)
var PageRecipeStart = OldContent.search("\\|recipe") + 8;
var PageRecipeStart = OldContent.search("\\|recipe") + 7;
if (PageRecipeStart < 8) {
if (PageRecipeStart < 7) {
console.log(ItemName + ": No normal recipe found on page.");
console.log(ItemName + ": No normal recipe found on page.");
var PageRecipe = "";
var PageRecipe = "";
Line 264: Line 263:
}
}


var PageTotalRawStart = OldContent.search("\\|total-raw") + 11;
var PageTotalRawStart = OldContent.search("\\|total-raw") + 10;
if (PageTotalRawStart < 11) {
if (PageTotalRawStart < 10) {
console.log(ItemName + ": No total raw found on page.");
console.log(ItemName + ": No total raw found on page.");
var PageTotalRaw = "";
var PageTotalRaw = "";
Line 290: Line 289:
}
}
var PageExpRecipeStart = OldContent.search("\\|expensive-recipe") + 18;
var PageExpRecipeStart = OldContent.search("\\|expensive-recipe") + 17;
if (PageExpRecipeStart < 18) {
if (PageExpRecipeStart < 17) {
console.log(ItemName + ": No expensive recipe found on page.");
console.log(ItemName + ": No expensive recipe found on page.");
var PageExpRecipe = "";
var PageExpRecipe = "";
Line 316: Line 315:
}
}


var PageExpTotalRawStart = OldContent.search("\\|expensive-total-raw") + 21;
var PageExpTotalRawStart = OldContent.search("\\|expensive-total-raw") + 20;
if (PageExpTotalRawStart < 21) {
if (PageExpTotalRawStart < 20) {
console.log(ItemName + ": No expensive total raw found on page.");
console.log(ItemName + ": No expensive total raw found on page.");
var PageExpTotalRaw = "";
var PageExpTotalRaw = "";
Line 355: Line 354:
} else {
} else {
if (PageRecipe.length > 0) {
if (PageRecipe.length > 0) {
var ActualPageRecipeEnd = PageRecipeStart + PageRecipeEnd;
var NewPageRecipeStart = OldContent.search("\\|recipe") + 7;
NewContent = OldContent.slice(0, PageRecipeStart) + " = " + Recipe + " <br />" + OldContent.slice(ActualPageRecipeEnd) //I'm just assuming that PageRecipeEnd must exist because the infobox HAS to end with }}
var NewPageRecipeCut = OldContent.slice(NewPageRecipeStart);
console.log("Replaced " + ItemName + " recipe.");
var NewPageRecipeEnd = NewPageRecipeCut.search("\\|");
console.log("NewContent" + NewContent);
if (NewPageRecipeEnd < 1) {
NewPageRecipeEnd = NewPageRecipeCut.search("}}");
}
var ActualNewPageRecipeEnd = NewPageRecipeStart + NewPageRecipeEnd;
if (Recipe.length > 0) {
NewContent = OldContent.slice(0, NewPageRecipeStart) + " = " + Recipe + " <br />" + OldContent.slice(ActualNewPageRecipeEnd) //I'm just assuming that PageRecipeEnd must exist because the infobox HAS to end with }}
console.log("Replaced " + ItemName + " recipe.");
console.log("NewContent" + NewContent);
} else {
NewPageRecipeStart = NewPageRecipeStart - 7;
NewContent = OldContent.slice(0, NewPageRecipeStart) + OldContent.slice(ActualNewPageRecipeEnd) //I'm just assuming that PageRecipeEnd must exist because the infobox HAS to end with }}
console.log("Removed " + ItemName + " recipe.");
console.log("NewContent" + NewContent);
}
} else if (Recipe.length > 0) {
} else if (Recipe.length > 0) {
var InfoboxStart = OldContent.search("{{Infobox") + 9;
var InfoboxStart = OldContent.search("{{Infobox") + 9;
Line 376: Line 388:
}
}
var ActualNewPageTotalRawEnd = NewPageTotalRawStart + NewPageTotalRawEnd;
var ActualNewPageTotalRawEnd = NewPageTotalRawStart + NewPageTotalRawEnd;
NewContent = NewContent.slice(0, NewPageTotalRawStart) + " = " + TotalRaw + " <br />" + NewContent.slice(ActualNewPageTotalRawEnd) //I'm just assuming that NewPageTotalRawEnd must exist because the infobox HAS to end with }}
if (TotalRaw.length > 0) {
console.log("Replaced " + ItemName + " total-raw.");
NewContent = NewContent.slice(0, NewPageTotalRawStart) + " = " + TotalRaw + " <br />" + NewContent.slice(ActualNewPageTotalRawEnd) //I'm just assuming that NewPageTotalRawEnd must exist because the infobox HAS to end with }}
console.log("NewContent" + NewContent);
console.log("Replaced " + ItemName + " total-raw.");
console.log("NewContent" + NewContent);
} else {
NewPageTotalRawStart = NewPageTotalRawStart - 10;
NewContent = NewContent.slice(0, NewPageTotalRawStart) + NewContent.slice(ActualNewPageTotalRawEnd) //I'm just assuming that NewPageTotalRawEnd must exist because the infobox HAS to end with }}
console.log("Removed " + ItemName + " total-raw.");
console.log("NewContent" + NewContent);
}
} else if (TotalRaw.length > 0) {
} else if (TotalRaw.length > 0) {
var InfoboxStart = NewContent.search("{{Infobox") + 9;
var InfoboxStart = NewContent.search("{{Infobox") + 9;
Line 396: Line 415:
}
}
var ActualNewPageExpRecipeEnd = NewPageExpRecipeStart + NewPageExpRecipeEnd;
var ActualNewPageExpRecipeEnd = NewPageExpRecipeStart + NewPageExpRecipeEnd;
NewContent = NewContent.slice(0, NewPageExpRecipeStart) + " = " + ExpRecipe + " <br />" + NewContent.slice(ActualNewPageExpRecipeEnd) //I'm just assuming that NewPageExpRecipeEnd must exist because the infobox HAS to end with }}
if (ExpRecipe.length > 0) {
console.log("Replaced " + ItemName + " expensive-recipe.");
NewContent = NewContent.slice(0, NewPageExpRecipeStart) + " = " + ExpRecipe + " <br />" + NewContent.slice(ActualNewPageExpRecipeEnd) //I'm just assuming that NewPageExpRecipeEnd must exist because the infobox HAS to end with }}
console.log("NewContent" + NewContent);
console.log("Replaced " + ItemName + " expensive-recipe.");
console.log("NewContent" + NewContent);
} else {
NewPageExpRecipeStart = NewPageExpRecipeStart - 17;
NewContent = NewContent.slice(0, NewPageExpRecipeStart) + NewContent.slice(ActualNewPageExpRecipeEnd) //I'm just assuming that NewPageExpRecipeEnd must exist because the infobox HAS to end with }}
console.log("Removed " + ItemName + " expensive-recipe.");
console.log("NewContent" + NewContent);
}
} else if (ExpRecipe.length > 0) {
} else if (ExpRecipe.length > 0) {
var InfoboxStart = NewContent.search("{{Infobox") + 9;
var InfoboxStart = NewContent.search("{{Infobox") + 9;
Line 416: Line 442:
}
}
var ActualNewPageExpTotalRawEnd = NewPageExpTotalRawStart + NewPageExpTotalRawEnd;
var ActualNewPageExpTotalRawEnd = NewPageExpTotalRawStart + NewPageExpTotalRawEnd;
NewContent = NewContent.slice(0, NewPageExpTotalRawStart) + " = " + ExpTotalRaw + " <br />" + NewContent.slice(ActualNewPageExpTotalRawEnd) //I'm just assuming that NewPageExpTotalRawEnd must exist because the infobox HAS to end with }}
if (ExpTotalRaw.length > 0) {
console.log("Replaced " + ItemName + " expensive-total-raw.");
NewContent = NewContent.slice(0, NewPageExpTotalRawStart) + " = " + ExpTotalRaw + " <br />" + NewContent.slice(ActualNewPageExpTotalRawEnd) //I'm just assuming that NewPageExpTotalRawEnd must exist because the infobox HAS to end with }}
console.log("NewContent" + NewContent);
console.log("Replaced " + ItemName + " expensive-total-raw.");
console.log("NewContent" + NewContent);
} else {
NewPageExpTotalRawStart = NewPageExpTotalRawStart - 20;
NewContent = NewContent.slice(0, NewPageExpTotalRawStart) + NewContent.slice(ActualNewPageExpTotalRawEnd) //I'm just assuming that NewPageExpTotalRawEnd must exist because the infobox HAS to end with }}
console.log("Removed " + ItemName + " expensive-total-raw.");
console.log("NewContent" + NewContent);
}
} else if (ExpTotalRaw.length > 0) {
} else if (ExpTotalRaw.length > 0) {
var InfoboxStart = NewContent.search("{{Infobox") + 9;
var InfoboxStart = NewContent.search("{{Infobox") + 9;

Revision as of 12:46, 9 May 2017

/* Any JavaScript here will be loaded for all users on every page load. */

/* Testing infobox updating */
var OldContent = "";

$("#bottest").click(function(){
    getRecipes();
});

function getRecipes() {
    var Input = prompt("Please enter the recipes");
    if (Input != null) {
		getToken();
		var Items = Input.split(/\s\s/g);
		console.log(Items.length + " Items detected");
		Items.forEach(RemoveDuplicateRecipesAndUpdateInfobox);
    }
};


function RemoveDuplicateRecipesAndUpdateInfobox(Recipes) {
	var ItemNameEnd = Recipes.search("\\|");
	var ItemName = Recipes.slice(0, ItemNameEnd);
	ItemName = ItemName.trim();
	var RecipeStart = Recipes.search("\\|recipe = ") + 10;
	if (RecipeStart < 10) {
		console.log(ItemName + ": No normal recipe found.");
		var Recipe = "";
	} else {
		var RecipeCut = Recipes.slice(RecipeStart);
		var RecipeEnd = RecipeCut.search("\\|");
		if (RecipeEnd < 1) {
			RecipeEnd = RecipeCut.search("}}");
			if (RecipeEnd < 1) {
				var Recipe = RecipeCut;
			} else {
				var Recipe = RecipeCut.slice(0, RecipeEnd);
			}
		} else {
			var Recipe = RecipeCut.slice(0, RecipeEnd);
		}
	}
	
	var TotalRawStart = Recipes.search("\\|total-raw = ") + 13;
	if (TotalRawStart < 13) {
		console.log(ItemName + ": No total raw found.");
		var TotalRaw = "";
	} else {
		var TotalRawCut = Recipes.slice(TotalRawStart);
		var TotalRawEnd = TotalRawCut.search("\\|");
		if (TotalRawEnd < 1) {
			TotalRawEnd = TotalRawCut.search("}}");
			if (TotalRawEnd < 1) {
				var TotalRaw = TotalRawCut;	
			} else {
				var TotalRaw = TotalRawCut.slice(0, TotalRawEnd);
			}	
		} else {
			var TotalRaw = TotalRawCut.slice(0, TotalRawEnd);
		}
	}
		
	var ExpRecipeStart = Recipes.search("\\|expensive-recipe = ") + 20;
	if (ExpRecipeStart < 20) {
		console.log(ItemName + ": No expensive recipe found.");
		var ExpRecipe = "";
	} else {
		var ExpRecipeCut = Recipes.slice(ExpRecipeStart);
		var ExpRecipeEnd = ExpRecipeCut.search("\\|");
		if (ExpRecipeEnd < 1) {
			ExpRecipeEnd = ExpRecipeCut.search("}}");
			if (ExpRecipeEnd < 1) {
				var ExpRecipe = ExpRecipeCut;	
			} else {
				var ExpRecipe = ExpRecipeCut.slice(0, ExpRecipeEnd);
			}	
		} else {
			var ExpRecipe = ExpRecipeCut.slice(0, ExpRecipeEnd);
		}
	}
	
	var ExpTotalRawStart = Recipes.search("\\|expensive-total-raw = ") + 23;
	if (ExpTotalRawStart < 23) {
		console.log(ItemName + ": No expensive total raw found.");
		var ExpTotalRaw = "";
	} else {
		var ExpTotalRawCut = Recipes.slice(ExpTotalRawStart);
		var ExpTotalRawEnd = ExpTotalRawCut.search("\\|");
		if (ExpTotalRawEnd < 1) {
			ExpTotalRawEnd = ExpTotalRawCut.search("}}");
			if (ExpTotalRawEnd < 1) {
				var ExpTotalRaw = ExpTotalRawCut;	
			} else {
				var ExpTotalRaw = ExpTotalRawCut.slice(0, ExpTotalRawEnd);
			}	
		} else {
			var ExpTotalRaw = ExpTotalRawCut.slice(0, ExpTotalRawEnd);
		}
	}
	
	//remove whitespace
	//ItemName = ItemName.trim(); this is done further up for asthestics
	Recipe = Recipe.trim();
	TotalRaw = TotalRaw.trim();
	ExpRecipe = ExpRecipe.trim();
	ExpTotalRaw = ExpTotalRaw.trim();
	
	
	//remove duplicate recipes, but only if the recipe actually exists
	if ((ExpTotalRaw == ExpRecipe) && (ExpTotalRaw.length > 0)) {
		ExpTotalRaw = "";
		console.log(ItemName + ": Removed expensive-total-raw because it was a duplicate of expensive-recipe.");
	} else if ((ExpTotalRaw == TotalRaw) && (ExpTotalRaw.length > 0)) {
		ExpTotalRaw = "";
		console.log(ItemName + ": Removed expensive-total-raw because it was a duplicate of total-raw.");
	}
	if ((ExpRecipe == Recipe) && (ExpRecipe.length > 0)) {
		ExpRecipe = "";
		console.log(ItemName + ": Removed expensive-recipe because it was a duplicate of recipe.");
	}
	if ((TotalRaw == Recipe) && (TotalRaw.length > 0)) {
		TotalRaw = "";
		console.log(ItemName + ": Removed total-raw because it was a duplicate of recipe.");
	}
	
	//Remove Itemnames if the item does not have a page on the wiki, so that the item is removed from the output
	var NoInfobox = ["Express loader", "Fast loader", "Loader", "Basic oil processing", "Advanced oil processing", "Coal liquefaction", "Electric energy interface", "Empty barrel", "Heavy oil cracking", "Light oil cracking", "Player port", "Railgun", "Railgun dart", "Small plane", "Solid fuel from heavy oil", "Solid fuel from light oil", "Solid fuel from petroleum gas"]
	NoInfobox.forEach(function(InfoboxName) {
	if (ItemName == InfoboxName) {
		console.log("Removed " + ItemName + " from output.");
		ItemName = "";
	}
	})
	
	//Change Itemname to wiki one if it's different between the game files and the wiki
	if (ItemName == "Battery equipment") {
		ItemName = "Battery MK1"
	}
	if (ItemName == "Battery mk2 equipment") {
		ItemName = "Battery MK2"
	}
	if (ItemName == "Discharge defense equipment") {
		ItemName = "Discharge defense"
	}
	if (ItemName == "Effectivity module") {
		ItemName = "Efficiency module"
	}
	if (ItemName == "Effectivity module 2") {
		ItemName = "Efficiency module 2"
	}
	if (ItemName == "Effectivity module 3") {
		ItemName = "Efficiency module 3"
	}
	if (ItemName == "Energy shield equipment") {
		ItemName = "Energy shield"
	}
	if (ItemName == "Energy shield mk2 equipment") {
		ItemName = "Energy shield MK2"
	}
	if (ItemName == "Exoskeleton equipment") {
		ItemName = "Exoskeleton"
	}
	if (ItemName == "Fusion reactor equipment") {
		ItemName = "Portable fusion reactor"
	}
	if (ItemName == "Logistic chest active provider") {
		ItemName = "Active provider chest"
	}
	if (ItemName == "Logistic chest passive provider") {
		ItemName = "Passive provider chest"
	}
	if (ItemName == "Logistic chest requester") {
		ItemName = "Requester chest"
	}
	if (ItemName == "Logistic chest storage") {
		ItemName ="Storage chest"
	}
	if (ItemName == "Night vision equipment") {
		ItemName = "Nightvision"
	}
	if (ItemName == "Personal laser defense equipment") {
		ItemName = "Personal laser defense"
	}
	if (ItemName == "Personal roboport equipment") {
		ItemName = "Personal roboport"
	}
	if (ItemName == "Personal roboport mk2 equipment") {
		ItemName = "Personal roboport MK2"
	}
	if (ItemName == "Power armor mk2") {
		ItemName = "Power armor MK2"
	}
	if (ItemName == "Pump") {
		ItemName = "Small pump"
	}
	if (ItemName == "Solar panel equipment") {
		ItemName = "Portable solar panel"
	}
	
	if (ItemName.length > 0) {
		//get page content of the item -> OldContent
		$.ajax({
			url: 'https://wiki.factorio.com/api.php',
			data: {
				format: 'json',
				action: 'query',
				titles: ItemName + "/infobox",
				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];
				OldContent = revisions[Object.keys(revisions)[2]]
				var title = pages[Object.keys(pages)[0]].title;
				console.log("OldContent: " + OldContent);
				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.' );
				OldContent = "";
			}
		});
	} else {
		OldContent = "";
	}
	
	if (OldContent.length > 0) {
		//find recipes in page (OldContent)
		var PageRecipeStart = OldContent.search("\\|recipe") + 7;
		if (PageRecipeStart < 7) {
			console.log(ItemName + ": No normal recipe found on page.");
			var PageRecipe = "";
		} else {
			var PageRecipeCut = OldContent.slice(PageRecipeStart);
			console.log(PageRecipeCut);
			PageRecipeCut.trim(); //removes possible whitespace in front off =
			console.log(PageRecipeCut);
			PageRecipeCut = PageRecipeCut.slice(1); //removes =
			console.log(PageRecipeCut);
			PageRecipeCut.trim(); //removes possible whitespace after =
			console.log(PageRecipeCut);
			var PageRecipeEnd = PageRecipeCut.search("\\|");
			if (PageRecipeEnd < 1) {
				PageRecipeEnd = PageRecipeCut.search("}}");
				if (PageRecipeEnd < 1) {
					var PageRecipe = PageRecipeCut;
				} else {
					var PageRecipe = PageRecipeCut.slice(0, PageRecipeEnd);
				}
			} else {
				var PageRecipe = PageRecipeCut.slice(0, PageRecipeEnd);
			}
		}

		var PageTotalRawStart = OldContent.search("\\|total-raw") + 10;
		if (PageTotalRawStart < 10) {
			console.log(ItemName + ": No total raw found on page.");
			var PageTotalRaw = "";
		} else {
			var PageTotalRawCut = OldContent.slice(PageTotalRawStart);
			console.log(PageTotalRawCut);
			PageTotalRawCut.trim(); //removes possible whitespace in front off =
			console.log(PageTotalRawCut);
			PageTotalRawCut = PageTotalRawCut.slice(1); //removes =
			console.log(PageTotalRawCut);
			PageTotalRawCut.trim(); //removes possible whitespace after =
			console.log(PageTotalRawCut);
			var PageTotalRawEnd = PageTotalRawCut.search("\\|");
			if (PageTotalRawEnd < 1) {
				PageTotalRawEnd = PageTotalRawCut.search("}}");
				if (PageTotalRawEnd < 1) {
					var PageTotalRaw = PageTotalRawCut;	
				} else {
					var PageTotalRaw = PageTotalRawCut.slice(0, PageTotalRawEnd);
				}	
			} else {
				var PageTotalRaw = PageTotalRawCut.slice(0, PageTotalRawEnd);
			}
		}
		
		var PageExpRecipeStart = OldContent.search("\\|expensive-recipe") + 17;
		if (PageExpRecipeStart < 17) {
			console.log(ItemName + ": No expensive recipe found on page.");
			var PageExpRecipe = "";
		} else {
			var PageExpRecipeCut = OldContent.slice(PageExpRecipeStart);
			console.log(PageExpRecipeCut);
			PageExpRecipeCut.trim(); //removes possible whitespace in front off =
			console.log(PageExpRecipeCut);
			PageExpRecipeCut = PageExpRecipeCut.slice(1); //removes =
			console.log(PageExpRecipeCut);
			PageExpRecipeCut.trim(); //removes possible whitespace after =
			console.log(PageExpRecipeCut);
			var PageExpRecipeEnd = PageExpRecipeCut.search("\\|");
			if (PageExpRecipeEnd < 1) {
				PageExpRecipeEnd = PageExpRecipeCut.search("}}");
				if (PageExpRecipeEnd < 1) {
					var PageExpRecipe = PageExpRecipeCut;	
				} else {
					var PageExpRecipe = PageExpRecipeCut.slice(0, PageExpRecipeEnd);
				}	
			} else {
				var PageExpRecipe = PageExpRecipeCut.slice(0, PageExpRecipeEnd);
			}
		}

		var PageExpTotalRawStart = OldContent.search("\\|expensive-total-raw") + 20;
		if (PageExpTotalRawStart < 20) {
			console.log(ItemName + ": No expensive total raw found on page.");
			var PageExpTotalRaw = "";
		} else {
			var PageExpTotalRawCut = OldContent.slice(PageExpTotalRawStart);
			console.log(PageExpTotalRawCut);
			PageExpTotalRawCut.trim(); //removes possible whitespace in front off =
			console.log(PageExpTotalRawCut);
			PageExpTotalRawCut = PageExpTotalRawCut.slice(1); //removes =
			console.log(PageExpTotalRawCut);
			PageExpTotalRawCut.trim(); //removes possible whitespace after =
			console.log(PageExpTotalRawCut);
			var PageExpTotalRawEnd = PageExpTotalRawCut.search("\\|");
			if (PageExpTotalRawEnd < 1) {
				PageExpTotalRawEnd = PageExpTotalRawCut.search("}}");
				if (PageExpTotalRawEnd < 1) {
					var PageExpTotalRaw = PageExpTotalRawCut;	
				} else {
					var PageExpTotalRaw = PageExpTotalRawCut.slice(0, PageExpTotalRawEnd);
				}	
			} else {
				var PageExpTotalRaw = PageExpTotalRawCut.slice(0, PageExpTotalRawEnd);
			}
		}
	
		//remove whitespace
		PageRecipe = PageRecipe.trim();
		PageTotalRaw = PageTotalRaw.trim();
		PageExpRecipe = PageExpRecipe.trim();
		PageExpTotalRaw = PageExpTotalRaw.trim();
		console.log(ItemName + " page recipes: " + PageRecipe + PageTotalRaw + PageExpRecipe + PageExpTotalRaw);
		
		//change page if anything is different (this INCLUDES different formatting)
		var NewContent = "";
		if ((PageRecipe == Recipe) && (PageTotalRaw == TotalRaw) && (PageExpRecipe == ExpRecipe) && (PageExpTotalRaw == ExpTotalRaw)) {
			console.log(ItemName + " page was not changed.")
		} else {
			if (PageRecipe.length > 0) {
				var NewPageRecipeStart = OldContent.search("\\|recipe") + 7;
				var NewPageRecipeCut = OldContent.slice(NewPageRecipeStart);
				var NewPageRecipeEnd = NewPageRecipeCut.search("\\|");
				if (NewPageRecipeEnd < 1) {
					NewPageRecipeEnd = NewPageRecipeCut.search("}}");
				}
				var ActualNewPageRecipeEnd = NewPageRecipeStart + NewPageRecipeEnd;
				if (Recipe.length > 0) {
					NewContent = OldContent.slice(0, NewPageRecipeStart) + " = " + Recipe + " <br />" + OldContent.slice(ActualNewPageRecipeEnd) //I'm just assuming that PageRecipeEnd must exist because the infobox HAS to end with }}
					console.log("Replaced " + ItemName + " recipe.");
					console.log("NewContent" + NewContent);
				} else {
					NewPageRecipeStart = NewPageRecipeStart - 7;
					NewContent = OldContent.slice(0, NewPageRecipeStart) + OldContent.slice(ActualNewPageRecipeEnd) //I'm just assuming that PageRecipeEnd must exist because the infobox HAS to end with }}
					console.log("Removed " + ItemName + " recipe.");
					console.log("NewContent" + NewContent);
				}
			} else if (Recipe.length > 0) {
				var InfoboxStart = OldContent.search("{{Infobox") + 9;
				if (InfoboxStart < 0) {
					InfoboxStart = OldContent.search("{{infobox") + 9;
				}
				NewContent = OldContent.slice(0, InfoboxStart) + "|recipe = " + Recipe + " <br />" + OldContent.slice(InfoboxStart)
				console.log("Added " + ItemName + " recipe to the start of the infobox because no recipe existed beforehand.");
				console.log("NewContent" + NewContent);
			}
			if (PageTotalRaw.length > 0) {
				var NewPageTotalRawStart = NewContent.search("\\|total-raw") + 10;
				var NewPageTotalRawCut = NewContent.slice(NewPageTotalRawStart);
				var NewPageTotalRawEnd = NewPageTotalRawCut.search("\\|");
				if (NewPageTotalRawEnd < 1) {
					NewPageTotalRawEnd = NewPageTotalRawCut.search("}}");
				}
				var ActualNewPageTotalRawEnd = NewPageTotalRawStart + NewPageTotalRawEnd;
				if (TotalRaw.length > 0) {
					NewContent = NewContent.slice(0, NewPageTotalRawStart) + " = " + TotalRaw + " <br />" + NewContent.slice(ActualNewPageTotalRawEnd) //I'm just assuming that NewPageTotalRawEnd must exist because the infobox HAS to end with }}
					console.log("Replaced " + ItemName + " total-raw.");
					console.log("NewContent" + NewContent);
				} else {
					NewPageTotalRawStart = NewPageTotalRawStart - 10;
					NewContent = NewContent.slice(0, NewPageTotalRawStart) + NewContent.slice(ActualNewPageTotalRawEnd) //I'm just assuming that NewPageTotalRawEnd must exist because the infobox HAS to end with }}
					console.log("Removed " + ItemName + " total-raw.");
					console.log("NewContent" + NewContent);
				}
			} else if (TotalRaw.length > 0) {
				var InfoboxStart = NewContent.search("{{Infobox") + 9;
				if (InfoboxStart < 0) {
					InfoboxStart = NewContent.search("{{infobox") + 9;
				}
				NewContent = NewContent.slice(0, InfoboxStart) + "|total-raw = " + TotalRaw + " <br />" +  NewContent.slice(InfoboxStart)
				console.log("Added " + ItemName + " total-raw to the start of the infobox because no total-raw existed beforehand.");
				console.log("NewContent" + NewContent);
			}
			if (PageExpRecipe.length > 0) {
				var NewPageExpRecipeStart = NewContent.search("\\|expensive-recipe") + 17;
				var NewPageExpRecipeCut = NewContent.slice(NewPageExpRecipeStart);
				var NewPageExpRecipeEnd = NewPageExpRecipeCut.search("\\|");
				if (NewPageExpRecipeEnd < 1) {
					NewPageExpRecipeEnd = NewPageExpRecipeCut.search("}}");
				}
				var ActualNewPageExpRecipeEnd = NewPageExpRecipeStart + NewPageExpRecipeEnd;
				if (ExpRecipe.length > 0) { 
					NewContent = NewContent.slice(0, NewPageExpRecipeStart) + " = " + ExpRecipe + " <br />" + NewContent.slice(ActualNewPageExpRecipeEnd) //I'm just assuming that NewPageExpRecipeEnd must exist because the infobox HAS to end with }}
					console.log("Replaced " + ItemName + " expensive-recipe.");
					console.log("NewContent" + NewContent);
				} else {
					NewPageExpRecipeStart = NewPageExpRecipeStart - 17;
					NewContent = NewContent.slice(0, NewPageExpRecipeStart) + NewContent.slice(ActualNewPageExpRecipeEnd) //I'm just assuming that NewPageExpRecipeEnd must exist because the infobox HAS to end with }}
					console.log("Removed " + ItemName + " expensive-recipe.");
					console.log("NewContent" + NewContent);
				}
			} else if (ExpRecipe.length > 0) {
				var InfoboxStart = NewContent.search("{{Infobox") + 9;
				if (InfoboxStart < 0) {
					InfoboxStart = NewContent.search("{{infobox") + 9;
				}
				NewContent = NewContent.slice(0, InfoboxStart) + "|expensive-recipe = " + ExpRecipe + " <br />" +  NewContent.slice(InfoboxStart)
				console.log("Added " + ItemName + " expensive-recipe to the start of the infobox because no total-raw existed beforehand.");
				console.log("NewContent" + NewContent);
			}
			if (PageExpTotalRaw.length > 0) {
				var NewPageExpTotalRawStart = NewContent.search("\\|expensive-total-raw") + 20;
				var NewPageExpTotalRawCut = NewContent.slice(NewPageExpTotalRawStart);
				var NewPageExpTotalRawEnd = NewPageExpTotalRawCut.search("\\|");
				if (NewPageExpTotalRawEnd < 1) {
					NewPageExpTotalRawEnd = NewPageExpTotalRawCut.search("}}");
				}
				var ActualNewPageExpTotalRawEnd = NewPageExpTotalRawStart + NewPageExpTotalRawEnd;
				if (ExpTotalRaw.length > 0) {
					NewContent = NewContent.slice(0, NewPageExpTotalRawStart) + " = " + ExpTotalRaw + " <br />" + NewContent.slice(ActualNewPageExpTotalRawEnd) //I'm just assuming that NewPageExpTotalRawEnd must exist because the infobox HAS to end with }}
					console.log("Replaced " + ItemName + " expensive-total-raw.");
					console.log("NewContent" + NewContent);
				} else {
					NewPageExpTotalRawStart = NewPageExpTotalRawStart - 20;
					NewContent = NewContent.slice(0, NewPageExpTotalRawStart) + NewContent.slice(ActualNewPageExpTotalRawEnd) //I'm just assuming that NewPageExpTotalRawEnd must exist because the infobox HAS to end with }}
					console.log("Removed " + ItemName + " expensive-total-raw.");
					console.log("NewContent" + NewContent);
				}
			} else if (ExpTotalRaw.length > 0) {
				var InfoboxStart = NewContent.search("{{Infobox") + 9;
				if (InfoboxStart < 0) {
					InfoboxStart = NewContent.search("{{infobox") + 9;
				}
				NewContent = NewContent.slice(0, InfoboxStart) + "|expensive-total-raw = " + ExpTotalRaw + " <br />" +  NewContent.slice(InfoboxStart)
				console.log("Added " + ItemName + " expensive-total-raw to the start of the infobox because no expensive-total-raw existed beforehand.");
				console.log("NewContent" + NewContent);
			}
		}
		//alright, NewContent should be defined, add edit here:
		if (NewContent.length > 0) {
			console.log("NewContent: " + NewContent);
		}
	}
	
	
	
	//add formatting to output
	if (Recipe.length > 0) { 
		Recipe = "<br /> |recipe = " + Recipe;
	}
	if (TotalRaw.length > 0) {
		TotalRaw = "<br /> |total-raw = " + TotalRaw;
	}
	if (ExpRecipe.length > 0) {
		ExpRecipe = "<br /> |expensive-recipe = " + ExpRecipe;
	}
	if (ExpTotalRaw.length > 0) {
		ExpTotalRaw = "<br /> |expensive-total-raw = " + ExpTotalRaw;
	}		
		
	//output
	/*var Demo = document.getElementById("demo");
	if (ItemName.length > 0) { //only output item if it has a name
		Demo.innerHTML =
		Demo.innerHTML + ItemName + Recipe + TotalRaw + ExpRecipe + ExpTotalRaw + "<br /> <br />" ;
	}*/
	console.log(ItemName + Recipe + TotalRaw + ExpRecipe + ExpTotalRaw + "<br />");
		
}

var globalToken;

function getToken() {
    $.ajax({
        url: 'https://wiki.factorio.com/api.php',
        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 perform null edit");
        }
    });
}

/*** 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 JavaScript
$(".spoiler-container .button").click(function() {
  $(this).siblings(".text").toggle("slow");
});

var wantedPagesListsLocation = "User:TheWombatGuru/WantedPages"
//Commented out this function to prevent non-admin users from using the bot because their api limits are too low to use it properly
/* $("#create-wanted-pages-list").click(function(){
    getToken();
    createWantedPagesLists();
}); */

function createWantedPagesLists() {
    var wantedPages = getWantedPages();
    wantedPages = wantedPages.sort(compare);

    splitWantedPagesIntoDifferentLanguages(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 wantedFiles = [];
  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"
      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;
      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 {otherWantedPages.push(wantedPages[i])}; break;
    }
  }

  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("file", wantedFiles, "Files");
  createWantedPagesPage("template", wantedTemplates, "Templates");
  createWantedPagesPage("other", otherWantedPages, "Other");
}

function createWantedPagesPage(location, wantedPages, language) {
  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|[https://wiki.factorio.com/index.php?title=" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].title + "]\n|[https://wiki.factorio.com/index.php?title=Special:WhatLinksHere/" + encodeURI(wantedPages[i].title) + " " + wantedPages[i].value + "]");
  }

  formattedWantedPages = formattedWantedPages.concat("\n|}");

  createPage(wantedPagesListsLocation + "/" + location, formattedWantedPages, "(BOT) - Update the list of wanted pages for " + language + ".");
}

function performNullEdit(pageTitle, summary) {
    $.ajax({
        url: 'https://wiki.factorio.com/api.php',
        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: 'https://wiki.factorio.com/api.php',
        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: 'https://wiki.factorio.com/api.php',
        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");
        }
    });
}

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 createPage(pageTitle, content, summary) {
    $.ajax({
        url: 'https://wiki.factorio.com/api.php',
        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");
        },
        error: function( xhr ) {
            console.log("failed to create page");
        }
    });
}

function getWantedPages() {
   var wantedPages = [];

   $.ajax({
        url: 'https://wiki.factorio.com/api.php',
        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;
            for (var i = 0; i < results.length; i++) {
               var pageObject = new WantedPage(results[i].title, results[i].value);
               var alreadyInArray = false;
               for (var j = 0; j < wantedPages.length; j++) {
                 if (wantedPages[j].title == pageObject.title) {
                    alreadyInArray = true;
                 }
               }
               if (!alreadyInArray) {
                 wantedPages.push(pageObject);
               }
               if (pageObject.title == "Rocket defense/it") {
               }
            }
        },
        error: function( xhr ) {
            //alert( 'Error: Request failed. Category' );
        }
  });

$.ajax({
        url: 'https://wiki.factorio.com/api.php',
        data: {
            format: 'json',
            action: 'query',
            list: 'querypage',
            qppage: 'Wantedpages',
            qplimit: '5000',
            qpoffset: '3000',
        },
        async: false,
        dataType: 'json',
        type: 'GET',
        success: function( data ) {
            var results = data.query.querypage.results;
            for (var i = 0; i < results.length; i++) {
               var pageObject = new WantedPage(results[i].title, results[i].value);
               var alreadyInArray = false;
               for (var j = 0; j < wantedPages.length; j++) {
                 if (wantedPages[j].title == pageObject.title) {
                    alreadyInArray = true;
                 }
               }
               if (!alreadyInArray) {
                 wantedPages.push(pageObject);
               }
               if (pageObject.title == "Rocket defense/it") {
               }
            }
        },
        error: function( xhr ) {
            //alert( 'Error: Request failed. Category' );
        }
  });
  return wantedPages;
};

function WantedPage(pageTitle, pageValue) {
   this.title = pageTitle;
   this.value = pageValue;
}


/* 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: 'https://wiki.factorio.com/api.php',
        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: 'https://wiki.factorio.com/api.php',
        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: 'https://wiki.factorio.com/api.php',
        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: 'https://wiki.factorio.com/api.php',
        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 */