This Lua module is used on approximately 17,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This module depends on the following other modules: |
This module implements Template:Old move.
Test cases: Template:Old move/testcases
-- 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"])
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(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 = ""
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(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