Jump to content

Module:Old moves: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
simplify single entry evaluation, changed the argument used to check for multiple entries
VERY dirty hotfix to make sure the multiple entry version shows up when there both non-numbered and numbered result params, will rework this later
Line 162: Line 162:
-- This makes sure we don't show the single version when there's a log or manual list
-- This makes sure we don't show the single version when there's a log or manual list
if (args["result"]) then
if (args["result"]) then
if (args["title"] or args["title1"] or args["list"] or args["oldlist"]) then
if (args["title"] or args["title1"] or args["list"] or args["oldlist"] or args["result2"]) then
text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
else
else
Line 188: Line 188:
list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Discussions:")))
list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Discussions:")))
end
end
elseif (args["result"] and not args["result1"] and not args["list"] and not args["oldlist"]) then
list = singleText(args)
else
else
list = mw.ustring.format("%s%s", blurb, evaluate(args))
list = evaluate(args)

if (mw.ustring.find(list, "proposed that this") == nil) then
list = mw.ustring.format("%s%s", blurb, evaluate(args))
end
end
end

Revision as of 18:16, 10 August 2023

-- This module implements {{Old move}}.

local p = {}

local messageBox = require('Module:Message box')
local yesno = require('Module:Yesno')
local dateModule = require('Module:Date')._Date
local listModule = require('Module:List').horizontal

-- Create variable used in other functions
local pageType
if (mw.title.getCurrentTitle():inNamespace(1)) then
	pageType = "article"
else
	pageType = "page"
end

-- Build the HTML for collapsing lists
local function makeTable(list, text)
	local collapseTable = mw.html.create("table")
	collapseTable
		:attr({
			class = "mw-collapsible mw-collapsed",
			cellspacing = 0,
			cellpadding = 0
		})
		:css({
			width = "100%",
			background = "transparent",
			margin = 0,
			padding = "0.5em 0 0"
		})
		:tag("tr"):tag("th"):wikitext(text):cssText("text-align: left")
		:tag("tr"):tag("td"):wikitext(mw.ustring.format("\n%s", list))
	return collapseTable
end

local function singleText(args)
	local date = args["date"] or args["date1"] or ""
	local from = args["from"] or args["from1"] or ""
	local to = args["destination"] or args["destination1"] or args["to1"] or args["to"] or ""
	local result = args["result"] or args["result1"] or ""
	local link = args["link"] or args["link1"] or ""
	local dateformat = args["dateformat"] or "dmy"
	local text = ""
	if (date ~= "") then
		if dateModule(date) then
			date = dateModule(date):text(dateformat)
		end
		text = mw.ustring.format("On %s, it was proposed that this %s be [[Wikipedia:Requested moves|moved]]", date, pageType)
	else
		text = mw.ustring.format("It has previously been proposed that this %s be [[Wikipedia:Requested moves|moved]]", pageType)
	end
	if (from ~= "") then
		text = mw.ustring.format("%s from [%s %s]", text, tostring(mw.uri.fullUrl(from, {redirect = "no"} )), from)
	end
	if (to ~= "") then
		text = mw.ustring.format("%s to [[%s]]", text, to)
	end
	text = mw.ustring.format("%s.", text)
	if (result ~= "") then
		if (link ~= "") then
			text = mw.ustring.format("%s The result of [[%s|the discussion]] was '''%s'''.", text, link, result)
		else
			text = mw.ustring.format("%s The result of the discussion was '''%s'''.", text, result)
		end
	elseif (link ~= "") then
		text = mw.ustring.format("%s See [[%s|discussion]].", text, link)
	end
	return text
end

local function row(args, i)
	local date = args["date" .. i] or ""
	local from = args["from" .. i] or ""
	local dateformat = args["dateformat"] or "dmy"
	local to = args["destination" .. i] or args["to" .. i] or ""
	local result = mw.language.getContentLanguage():ucfirst(args["result" .. i]) or ""
	local link = args["link" .. i] or ""
	local rowText = mw.ustring.format("\n*'''%s'''", result)
	if (date ~= "") then
		if dateModule(date) then
			date = dateModule(date):text(dateformat)
		end
		rowText = mw.ustring.format("%s, %s", rowText, date)
	end
	if (from ~= "") then
		rowText = mw.ustring.format("%s, from [%s %s]", rowText, tostring(mw.uri.fullUrl(from, {redirect = "no"} )), from)
		if (to ~= "") then
			rowText = mw.ustring.format("%s to [[%s]]", rowText, to)
		end
	elseif (to ~= "") then
		rowText = mw.ustring.format("%s, to [[%s]]", rowText, to)
	end
	if (link ~= "") then
		rowText = mw.ustring.format("%s, see [[%s|discussion]]", rowText, link)
	end
	rowText = rowText .. "."
	return rowText
end

local function list(args)
	local text = ""
	if (args["result1"]) then -- Support to1 and to in case of multiple rows
		text = mw.ustring.format("%s%s", text, row(args, 1))
	else
		text = mw.ustring.format("%s%s", text, row(args, ""))
	end
	local i = 2
	while (args["result" .. i]) do
		text = mw.ustring.format("%s%s", text, row(args, i))
		i = i + 1 -- Check if to(i+1) exist
	end
	return text
end
	
local function manualList(args)
	local manualListText = ""
	if (args["list"]) then
		if (args["result"] or args["result1"]) then
			manualListText = mw.ustring.format("%s\n'''Other discussions: '''\n%s", manualListText, args["list"])
		elseif (yesno(args["collapse"]) or yesno(args["collapsed"])) then
			manualListText = mw.ustring.format("%s\n%s", manualListText, args["list"])
		else
			manualListText = mw.ustring.format("%s\n'''Discussions: '''\n%s", manualListText, args["list"])
		end
	end
	if (args["oldlist"]) then
		if (yesno(args["collapse"]) or yesno(args["collapsed"])) then
			manualListText = mw.ustring.format("%s\n'''Older discussions: '''\n%s", manualListText, tostring(args["oldlist"]))
		else
			manualListText = mw.ustring.format("%s\n%s", manualListText, tostring(makeTable(args["oldlist"], "Older discussions:")))
		end
	end
	return manualListText
end

local function showLogs(args)
	local logList, i = {}, 1
	while (args["title" .. i]) do
		local query = mw.uri.buildQueryString({
			["page"] = args["title" .. i],
			["type"] = "move"
		})
		if (i == 1) then -- Hacky way to make the hlist go after "move logs"
			table.insert(logList, mw.ustring.format("\n'''Move logs: '''[%s %s]", tostring(mw.uri.canonicalUrl("Special:Log", query)), args["title" .. i]))
		else
			table.insert(logList, mw.ustring.format("[%s %s]", tostring(mw.uri.canonicalUrl("Special:Log", query)), args["title" .. i]))
		end
		i = i + 1
	end
	logList["style"] = "padding-top: 0.5em;"
	return listModule(logList)
end

local function evaluate(args)
	local text = ""
	
	if (args["title"] or args["title1"]) then
		text = mw.ustring.format("%s%s", text, showLogs(args))
	end
	-- This makes sure we don't show the single version when there's a log or manual list
	if (args["result"]) then
		if (args["title"] or args["title1"] or args["list"] or args["oldlist"] or args["result2"]) then
			text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
		else
			text = singleText(args)
		end
	end
	if (args["result1"]) then -- Do we have multiple rows?
		text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
	end
	if (args["list"] or args["oldlist"]) then
		text = mw.ustring.format("%s%s", text, manualList(args))
	end

	return text
end

local function bannerText(args)
	local blurb = mw.ustring.format("This %s has previously been nominated to be moved.", pageType)
	local list = ""

	if (yesno(args["collapse"]) or yesno(args["collapsed"])) then
		if (args["title"] or args["title1"]) then
			list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Logs and discussions:")))
		else
			list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Discussions:")))
		end
	else
		list = evaluate(args)

		if (mw.ustring.find(list, "proposed that this") == nil) then
			list = mw.ustring.format("%s%s", blurb, evaluate(args))
		end
	end
	
	return list
end

local function renderBanner(args)
	return messageBox.main('tmbox', {
		small = yesno(args["small"]),
		type = 'move',
		text = bannerText(args)
	})
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
	return renderBanner(args)
end

return p