Jump to content

Module:Old moves/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
in the rare case where we don't have anything at all to list, then we can suppress the "Discussions:" text
Tag: Reverted
temporarily sandbox before my change
Line 120: Line 120:
if (args["result"] or args["result1"]) then
if (args["result"] or args["result1"]) then
manualListText = mw.ustring.format("%s\n'''Other discussions: '''\n%s", manualListText, args["list"])
manualListText = mw.ustring.format("%s\n'''Other discussions: '''\n%s", manualListText, args["list"])
elseif (yesno(args["collapse"]) or yesno(args["collapsed"])) then
else
manualListText = mw.ustring.format("%s\n%s", manualListText, args["list"])
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
end
end
Line 154: Line 156:
local function evaluate(args)
local function evaluate(args)
local text = ""
local text = ""
local is_collapsed = yesno(args["collapse"]) or yesno(args["collapsed"])
local has_log_args = args["title"] or args["title1"]
local has_manual_list = args["list"] or args["oldlist"]
local has_multiple_rows = args["result1"]
if (has_log_args) then
if (args["title"] or args["title1"]) then
text = mw.ustring.format("%s%s", text, showLogs(args))
text = mw.ustring.format("%s%s", text, showLogs(args))
end
end
if (not is_collapsed or has_log_args) then
-- if the template is collapsed and there are no log arguments,
-- then we already have "Discussions:" in bold text in bannerText(),
-- so we don't need to repeat it here
text = mw.ustring.format("%s\n'''Discussions: '''\n", text)
end
-- 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 (has_log_args or has_manual_list or args["result2"]) then
if (args["title"] or args["title1"] or args["list"] or args["oldlist"] or args["result2"]) then
text = mw.ustring.format("%s%s", text, list(args))
text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
else
else
text = singleText(args)
text = singleText(args)
end
end
end
end
if (args["result1"]) then -- Do we have multiple rows?
if (has_multiple_rows) then
text = mw.ustring.format("%s%s", text, list(args))
text = mw.ustring.format("%s\n'''Discussions: '''\n%s", text, list(args))
end
end
if (has_manual_list) then
if (args["list"] or args["oldlist"]) then
text = mw.ustring.format("%s%s", text, manualList(args))
text = mw.ustring.format("%s%s", text, manualList(args))
end
if (not args["result"] and not has_multiple_rows and not has_manual_list and not has_log_args) then
return ""
end
end



Revision as of 07:05, 17 July 2024

-- 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." ..
		" Please review the prior discussions if you are considering re-nomination.", 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