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 header = {
	["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)
	local globalVersion = VariablesLua.var("history-"..edition.."-version")
	local id = VariablesLua.var("history-"..edition.."-id", 0)
	if version == globalVersion or globalVersion 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-"..newId))
			:wikitext(frame:expandTemplate{title = "Version link", args = {edition.." "..version, version}})
	end
end

function p.main(frame)
	local args = require('Module:ProcessArgs').norm()
	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"):node(html)
	end
	local row = mw.html.create("tr")
	if setMode then
		row:tag("th")
			:attr("colspan", "6")
			:wikitext(header[setMode])
		resetVariables()
		VariablesLua.vardefine("history-mode", setMode)
		VariablesLua.vardefine("history-table", html..tostring(row))
		return
	end
	local mode = VariablesLua.var("history-mode")
	local rows = #args - 2

	if mode == console then
		if args.xbox then consoleColumn(xbox, arg.xbox, rows) end
		if args.xbone then consoleColumn(xbone, arg.xbone, rows) end
		if args.ps then consoleColumn(ps, arg.ps, rows) end
		if args.wiiu then consoleColumn(wiiu, arg.wiiu, rows) end
		if args.switch then consoleColumn(switch, arg.switch, rows) end
	else
		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
			local newId = id + 1
			VariablesLua.vardefine("history-version", version)
			VariablesLua.vardefine("history-id", newId)
			column = row:tag("th")
				:addClass("nowrap")
				:attr("rowspan", VariablesLua.var_final("history-rowspan-"..newId))
				: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
	end
	
	row:tag("td"):wikitext(frame:preprocess(args[3]))
	
	--[[
	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