Minecraft Wiki
Advertisement
[create | history | purge]Documentation
This module has no documentation. If you know how to use this module, please create it.
local VariablesLua = mw.ext.VariablesLua

local p = {}

local modeAliases = {
	["java pre-classic"] = "java pre-Classic",
	["java classic"] = "java Classic",
	["java indev"] = "java Indev",
	["java infdev"] = "java Infdev",
	["java alpha"] = "java Alpha",
	["java edition alpha"] = "java Alpha",
	["java beta"] = "java Beta",
	["java edition beta"] = "java Beta",

	["je"] = "java",
	["java"] = "java",
	["java edition"] = "java",

	["java edition upcoming"] = "java upcoming",
	["java upcoming"] = "java upcoming",
	["upcoming java"] = "java upcoming",
	["upcoming java edition"] = "java upcoming",

	["pe alpha"] = "pocket Alpha",
	["pocket alpha"] = "pocket Alpha",
	["pocket edition alpha"] = "pocket Alpha",

	["pe"] = "pocket",
	["pocket"] = "pocket",
	["pocket edition"] = "pocket",

	["ce"] = "console",
	["lce"] = "console",
	["console"] = "console",
	["legacy console"] = "console",
	["console edition"] = "console",
	["legacy console edition"] = "console",

	["be"] = "bedrock",
	["bedrock"] = "bedrock",
	["bedrock edition"] = "bedrock",

	["be upcoming"] = "bedrock upcoming",
	["bedrock upcoming"] = "bedrock upcoming",
	["bedrock edition upcoming"] = "bedrock upcoming",
	["upcoming bedrock"] = "bedrock upcoming",
	["upcoming bedrock edition"] = "bedrock upcoming",

	["3ds"] = "new3ds",
	["new3ds"] = "new3ds",
	["new 3ds"] = "new3ds",

	["realms"] = "realms",

	["pi"] = "pi",
	["raspberry pi"] = "pi",

	["edu"] = "minecraftedu",
	["minecraftedu"] = "minecraftedu",

	["education"] = "education",
	["education edition"] = "education",

	["education upcoming"] = "education upcoming",
	["education edition upcoming"] = "education upcoming",
	["upcoming education"] = "education upcoming",
	["upcoming education edition"] = "education upcoming",

	["ps4"] = "ps4",
	["playstation4"] = "ps4",
	["playstation 4"] = "ps4",

	["earth"] = "earth",
	["minecraft earth"] = "earth",

	["dungeons"] = "dungeons",
	["minecraft dungeons"] = "dungeons",

	["dungeons arcade"] = "dungeons arcade",
	["minecraft dungeons arcade"] = "dungeons arcade",

	["legends"] = "legends",
	["minecraft legends"] = "legends",

	["china"] = "china",

	["?"] = "unknown",
	["unknown"] = "unknown",

	["bs"] = "bedrock server",
	["bds"] = "bedrock server",
	["bedrock server"] = "bedrock server",
	["bedrock dedicated server"] = "bedrock server"
}

local headerText = {
	["java pre-Classic"] = "[[Java Edition pre-Classic]]",
	["java Classic"] = "[[Java Edition Classic]]",
	["java Indev"] = "[[Java Edition Indev]]",
	["java Infdev"] = "[[Java Edition Infdev]]",
	["java Alpha"] = "[[Java Edition Alpha]]",
	["java Beta"] = "[[Java Edition Beta]]",
	["java"] = "[[Java Edition version history|''Java Edition'']]",
	["java upcoming"] = "[[Planned versions#Java Edition|Upcoming Java Edition]]",
	["pocket Alpha"] = "[[Pocket Edition Alpha]]",
	["pocket"] = "[[Pocket Edition Alpha]]",
	["bedrock"] = "[[Bedrock Edition version history|''Bedrock Edition'']]",
	["bedrock upcoming"] = "[[Planned versions#Bedrock Edition|Upcoming Bedrock Edition]]",
	["minecraftedu"] = "[[MinecraftEdu#Versions|''MinecraftEdu'']]",
	["education"] = "[[Education Edition version history|''Education Edition'']]",
	["education upcoming"] = "[[Planned versions#Education Edition|Upcoming Education Edition]]",
	["china"] = "[[China Edition#History|''China Edition'']]",
	["bedrock server"] = "[[Bedrock Dedicated Server#History|Realms Plus & Bedrock Dedicated Server]]",
	["console"] = "[[Legacy Console Edition version history|Legacy Console Edition]]",
	["realms"] = "[[Realms#History|Realms]]",
	["new3ds"] = "[[New Nintendo 3DS Edition version history|''New Nintendo 3DS Edition'']]",
	["pi"] = "[[Pi Edition#Release|''Pi Edition'']]",
	["ps4"] = "[[Legacy Console Edition version history|''PlayStation 4 Edition'']]",
	["earth"] = "[[MCE:Version history|''Minecraft Earth'']]",
	["dungeons"] = "[[MCD:Version_history|''Minecraft Dungeons'']]",
	["dungeons arcade"] = "[[MCD:Arcade|''Minecraft Dungeons Arcade'']]",
	["legends"] = "[[MCL:Version_history|''Minecraft Legends'']]"
}

local function resetVariables()
    VariablesLua.vardefine("history-ver")
    VariablesLua.vardefine("history-xbox-ver")
    VariablesLua.vardefine("history-xbone-ver")
    VariablesLua.vardefine("history-ps-ver")
    VariablesLua.vardefine("history-wiiu-ver")
    VariablesLua.vardefine("history-switch-ver")
end

local function consoleColumn(edition, version, rows, row)
	local frame = mw.getCurrentFrame()
	local oldVersion = VariablesLua.var("history-"..edition.."-version")
	local id = VariablesLua.var("history-"..edition.."-id", 0)
	if version == oldVersion or oldVersion ~= "" then
		local oldValue = VariablesLua.var("history-"..edition.."rowspan-"..id, 0)
		VariablesLua.vardefine("history-"..edition.."rowspan-"..id, oldValue + rows)
	else
		local newId = id + 1
		VariablesLua.vardefine("history-"..edition.."-version", version)
		VariablesLua.vardefine("history-"..edition.."-id", newId)
		row:tag("th")
			:addClass("nowrap")
			:attr("rowspan", VariablesLua.var_final("history-"..edition.."-rowspan-"..id))
			:wikitext(frame:expandTemplate{title = "Version link", args = {version}})
	end
end

function p.main(frame)
	local args = require('Module:ProcessArgs').merge()
	local setMode = args[1] and (modeAliases[args[1]:lower()] or args[1]:lower())
	local html = VariablesLua.var("history-table")
	if setMode == "foot" then
		VariablesLua.vardefine("history-table")
		resetVariables()
		return mw.html.create("table"):addClass("wikitable"):attr("data-description", "History"):node(html)
	end
	local row = mw.html.create("tr")
	if setMode ~= "" then
		row:tag("th")
			:attr("colspan", "6")
			:wikitext(headerText[setMode])
		resetVariables()
		VariablesLua.vardefine("history-mode", setMode)
		VariablesLua.vardefine("history-table", html..tostring(row))
		return
	end
	local mode = VariablesLua.var("history-mode")
	local rows

	if mode == "console" then
		rows = #args - 1
		consoleColumn("xbox", args.xbox, rows, row)
		consoleColumn("xbone", args.xbone, rows, row)
		consoleColumn("ps", args.ps, rows, row)
		consoleColumn("wiiu", args.wiiu, rows, row)
		consoleColumn("switch", args.switch, rows, row)
		
		row:tag("td"):wikitext(frame:preprocess(args[2]))
	else
		rows = #args - 2
		local version = args[2]
		local devVersion = args.snap
		local oldVersion = VariablesLua.var("history-version")
		local id = VariablesLua.var("history-id", 0)
		local column
		if not devVersion or version ~= "" or version ~= oldVersion then
			VariablesLua.vardefine("history-version", version)
			VariablesLua.vardefine("history-id", id + 1)
			column = row:tag("th")
				:addClass("nowrap")
				:attr("rowspan", VariablesLua.var_final("history-rowspan-"..id, rows))
				:wikitext(frame:expandTemplate{title = "Version link", args = {version}})
		end
		if devVersion then
			column:attr("colspan", 2)
			row:tag("th")
				:addClass("nowrap")
				:attr{["rowspan"] = rows, ["colspan"] = 3}
				:wikitext(frame:expandTemplate{title = "Version link", args = {devVersion}})
			local oldValue = VariablesLua.var("history-rowspan-"..id, 0)
			VariablesLua.vardefine("history-rowspan-"..id, oldValue + rows)
		else
			column:attr("colspan", 5)
		end
		
		row:tag("td"):wikitext(frame:preprocess(args[3]))
	end
	
	--[[
	for i, text in ipairs(args) do
		if i > 3 then
			mw.html.create("tr"):tag("td"):wikitext(frame:preprocess(text))
		end
	end
	--]]
	
	VariablesLua.vardefine("history-table", html..tostring(row))
	return
end

return p
Advertisement