Module:Old moves

-- This module implements.

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 moved", date, pageType) else text = mw.ustring.format("It has previously been proposed that this %s be 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 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 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 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\nOther 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\nOlder 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("\nMove 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\nDiscussions: \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(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