Jump to content

Module:Old moves: 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
use div instead of table
Line 1: Line 1:
-- This module implements {{Old move}}.

local p = {}
local p = {}


Line 17: Line 15:


-- Build the HTML for collapsing lists
-- Build the HTML for collapsing lists
local function makeTable(list, text)
local function makeCollapsible(list, text)
local collapseTable = mw.html.create("table")
local box = mw.html.create("div")
box
collapseTable
:addClass("mw-collapsible mw-collapsed")
:attr({
:css('padding', '0.5em 0 0')
class = "mw-collapsible mw-collapsed",
:tag('div'):css('font-weight', 'bold'):wikitext(text):done()
cellspacing = 0,
:tag("div"):addClass('mw-collapsible-content'):wikitext(mw.ustring.format("\n%s", list))
cellpadding = 0
return box
})
: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
end


Line 128: Line 117:
manualListText = mw.ustring.format("%s\n'''Older discussions: '''\n%s", manualListText, tostring(args["oldlist"]))
manualListText = mw.ustring.format("%s\n'''Older discussions: '''\n%s", manualListText, tostring(args["oldlist"]))
else
else
manualListText = mw.ustring.format("%s\n%s", manualListText, tostring(makeTable(args["oldlist"], "Older discussions:")))
manualListText = mw.ustring.format("%s\n%s", manualListText, tostring(makeCollapsible(args["oldlist"], "Older discussions:")))
end
end
end
end
Line 198: Line 187:
if (yesno(args["collapse"]) or yesno(args["collapsed"])) then
if (yesno(args["collapse"]) or yesno(args["collapsed"])) then
if (args["title"] or args["title1"]) then
if (args["title"] or args["title1"]) then
list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Logs and discussions:")))
list = mw.ustring.format("%s%s", blurb, tostring(makeCollapsible(evaluate(args), "Logs and discussions:")))
else
else
list = mw.ustring.format("%s%s", blurb, tostring(makeTable(evaluate(args), "Discussions:")))
list = mw.ustring.format("%s%s", blurb, tostring(makeCollapsible(evaluate(args), "Discussions:")))
end
end
else
else

Revision as of 02:38, 3 February 2025

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 makeCollapsible(list, text)
	local box = mw.html.create("div")
	box
		:addClass("mw-collapsible mw-collapsed")
		:css('padding', '0.5em 0 0')
		:tag('div'):css('font-weight', 'bold'):wikitext(text):done()
		:tag("div"):addClass('mw-collapsible-content'):wikitext(mw.ustring.format("\n%s", list))
	return box
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"])
		else
			manualListText = mw.ustring.format("%s\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(makeCollapsible(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 = ""
	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
		text = mw.ustring.format("%s%s", text, showLogs(args))
	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
	if (args["result"]) then
		if (has_log_args or has_manual_list or args["result2"]) then
			text = mw.ustring.format("%s%s", text, list(args))
		else
			text = singleText(args)
		end
	end
	if (has_multiple_rows) then
		text = mw.ustring.format("%s%s", text, list(args))
	end
	if (has_manual_list) then
		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

	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(makeCollapsible(evaluate(args), "Logs and discussions:")))
		else
			list = mw.ustring.format("%s%s", blurb, tostring(makeCollapsible(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