Module:Split article: Difference between revisions
Appearance
Content deleted Content added
fixes |
fixing misnested tag (td without tr), rm logObject |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
local MessageBox = require( |
local MessageBox = require("Module:Message box") |
||
local yesno = require("Module:Yesno") |
local yesno = require("Module:Yesno") |
||
Line 11: | Line 11: | ||
mw.addWarning(text) |
mw.addWarning(text) |
||
return nocat and "" or "[[Category:Pages with split article warnings]]" |
return nocat and "" or "[[Category:Pages with split article warnings]]" |
||
end |
|||
local function delink(text) |
|||
if text == nil then |
|||
return nil |
|||
end |
|||
return string.gsub(string.gsub(require("Module:Delink")._delink{text}, "%[%[", ""), "%]%]", "") |
|||
end |
end |
||
Line 30: | Line 37: | ||
local text = "" |
local text = "" |
||
-- from1 also included in case someone filed the template improperly |
-- from1 also included in case someone filed the template improperly |
||
local from = args["from"] or args["from1"] or mw.title.getCurrentTitle().subjectPageTitle.prefixedText |
local from = delink(args["from"] or args["from1"]) or mw.title.getCurrentTitle().subjectPageTitle.prefixedText |
||
local fromTalk = mw.title.new(from).talkPageTitle.prefixedText |
local fromTalk = mw.title.new(from).talkPageTitle.prefixedText |
||
Line 41: | Line 48: | ||
-- Row-based parameters |
-- Row-based parameters |
||
local to = args["to"] or args["to1"] |
local to = delink(args["to"] or args["to1"]) |
||
local diff = args["diff"] or args["diff1"] |
local diff = args["diff"] or args["diff1"] |
||
local date = args["date"] or args["date1"] |
local date = args["date"] or args["date1"] |
||
Line 49: | Line 56: | ||
end |
end |
||
if date == nil then |
if date == nil then |
||
text = text .. showWarning("Split date was not specified with <code>date</code>. This may cause an error in the future.", demoCheck(args)) |
|||
end |
end |
||
text = string.format("Material from [[%s]] was split to [[%s]]", from, to, date) |
text = string.format("Material from [[%s]] was split to [[%s]]", from, to, date) |
||
if diff ~= nil then |
if diff ~= nil and date ~= nil then |
||
if |
if diff:match("^[0123456789/]+$") then |
||
text = string.format("%s on [[Special:Diff/%s|%s]]", text, diff, date) |
text = string.format("%s on [[Special:Diff/%s|%s]]", text, diff, date) |
||
else |
else |
||
text = string.format("%s on [%s %s]", text, diff, date) |
text = string.format("%s on [%s %s]", text, diff, date) |
||
end |
end |
||
elseif date ~= nil then |
|||
else |
|||
text = string.format("%s on %s", text, date) |
text = string.format("%s on %s", text, date) |
||
end |
end |
||
Line 90: | Line 97: | ||
local function row(args, i) |
local function row(args, i) |
||
local to = args["to" .. i] or (i == 1 and args["to"] or nil) |
local to = delink(args["to" .. i] or (i == 1 and args["to"] or nil)) |
||
local toTalk = mw.title.new(to).subjectPageTitle.prefixedText |
local toTalk = mw.title.new(delink(to)).subjectPageTitle.prefixedText |
||
local diff = args["diff" .. i] or (i == 1 and args["diff"] or nil) |
local diff = args["diff" .. i] or (i == 1 and args["diff"] or nil) |
||
local date = args["date" .. i] or (i == 1 and args["date"] or nil) |
local date = args["date" .. i] or (i == 1 and args["date"] or nil) |
||
local from_oldid = args["from_oldid" .. i] or (i == 1 and args["from_oldid"] or nil) |
local from_oldid = args["from_oldid" .. i] or (i == 1 and args["from_oldid"] or nil) |
||
if date == nil then |
if date == nil then |
||
text = text .. showWarning(string.format( |
|||
"Split date for \"%s\" (<code>to%s</code>) was not specified with <code>date</code>.", |
"Split date for \"%s\" (<code>to%s</code>) was not specified with <code>date</code>. This may cause an error in the future.", |
||
to, i |
to, i |
||
), demoCheck(args)) |
), demoCheck(args)) |
||
Line 106: | Line 113: | ||
to, toTalk, to, date, diff |
to, toTalk, to, date, diff |
||
) |
) |
||
if diff ~= nil then |
if diff ~= nil and date ~= nil then |
||
if |
if diff:match("^[0123456789/]+$") then |
||
rowText = string.format("%s on [[Special:Diff/%s|%s]]", rowText, diff, date) |
rowText = string.format("%s on [[Special:Diff/%s|%s]]", rowText, diff, date) |
||
else |
else |
||
rowText = string.format("%s on [%s %s]", rowText, diff, date) |
rowText = string.format("%s on [%s %s]", rowText, diff, date) |
||
end |
end |
||
elseif date ~= nil then |
|||
else |
|||
rowText = string.format("%s on %s", rowText, date) |
rowText = string.format("%s on %s", rowText, date) |
||
end |
end |
||
Line 129: | Line 136: | ||
local text = "" |
local text = "" |
||
-- from1 also included in case someone filed the template improperly |
-- from1 also included in case someone filed the template improperly |
||
local from = args["from"] or args["from1"] or mw.title.getCurrentTitle().subjectPageTitle.prefixedText |
local from = delink(args["from"] or args["from1"]) or mw.title.getCurrentTitle().subjectPageTitle.prefixedText |
||
local fromTalk = mw.title.new(from).talkPageTitle.prefixedText |
local fromTalk = mw.title.new(delink(from)).talkPageTitle.prefixedText |
||
local collapse = tonumber(args["collapse"]) or yesno(args["collapse"]) |
|||
if args["from1"] then |
if args["from1"] then |
||
text = text .. showWarning( |
text = text .. showWarning( |
||
Line 153: | Line 161: | ||
) |
) |
||
local |
local ul = mw.html.create("ul") |
||
local ul2 |
|||
local target = ul |
|||
-- Row-based parameters |
-- Row-based parameters |
||
local i = 1 |
local i = 1 |
||
while args["to" .. i] or (i == 1 and args["to"]) do |
while args["to" .. i] or (i == 1 and args["to"]) do |
||
-- Swap out ul with collapsible table if collapsible |
|||
⚫ | |||
if collapse == true and i == 1 then |
|||
-- Only on first run |
|||
target = mw.html.create("table") |
|||
:attr("class", "mw-collapsible mw-collapsed") |
|||
:attr("style", "width:100%; background-color: #f8eaba;") |
|||
:node(mw.html.create("tr") |
|||
:node(mw.html.create("th") |
|||
:wikitext("Page splits") |
|||
) |
|||
) |
|||
:node(mw.html.create("td"):node(ul)) |
|||
elseif collapse == (i - 1) then |
|||
ul2 = ul |
|||
ul = mw.html.create("ul") |
|||
-- Only once threshold has been reached |
|||
target = mw.html.create("table") |
|||
:attr("class", "mw-collapsible mw-collapsed") |
|||
:attr("style", "width:100%; background-color: #f8eaba;") |
|||
:node(mw.html.create("tr") |
|||
:node(mw.html.create("th") |
|||
:wikitext("Other page splits") |
|||
) |
|||
) |
|||
:node(mw.html.create("tr") |
|||
:node(mw.html.create("td"):node(ul)) |
|||
) |
|||
end |
|||
⚫ | |||
i = i + 1 |
i = i + 1 |
||
end |
end |
||
Line 169: | Line 208: | ||
end |
end |
||
text = text .. " " .. tostring( |
text = text .. " " .. tostring(ul2 or "") .. tostring(target) |
||
return text |
return text |
Latest revision as of 03:06, 18 August 2022
Implements {{split article}}
local MessageBox = require("Module:Message box")
local yesno = require("Module:Yesno")
local p = {}
local function demoCheck(args)
return yesno(args["demo"]) or yesno(args["nocat"])
end
local function showWarning(text, nocat)
mw.addWarning(text)
return nocat and "" or "[[Category:Pages with split article warnings]]"
end
local function delink(text)
if text == nil then
return nil
end
return string.gsub(string.gsub(require("Module:Delink")._delink{text}, "%[%[", ""), "%]%]", "")
end
local function showError(text, nocat)
return string.format(
"%s%s %s",
nocat and "" or "[[Category:Pages with split article errors]] ",
tostring(
mw.html.create("span")
:css("color", "red")
:css("font-weight", "bold")
:wikitext("Error:")
),
text
)
end
local function singleText(args)
local text = ""
-- from1 also included in case someone filed the template improperly
local from = delink(args["from"] or args["from1"]) or mw.title.getCurrentTitle().subjectPageTitle.prefixedText
local fromTalk = mw.title.new(from).talkPageTitle.prefixedText
if args["from1"] then
text = text .. showWarning(
"<code>from</code> is not a row-based parameter. Use <code>from</code> instead of <code>from1</code>.",
demoCheck(args)
)
end
-- Row-based parameters
local to = delink(args["to"] or args["to1"])
local diff = args["diff"] or args["diff1"]
local date = args["date"] or args["date1"]
local from_oldid = args["from_oldid"] or args["from_oldid1"]
if to == nil then
return showError("Target page was not specified with <code>to</code>.", demoCheck(args))
end
if date == nil then
text = text .. showWarning("Split date was not specified with <code>date</code>. This may cause an error in the future.", demoCheck(args))
end
text = string.format("Material from [[%s]] was split to [[%s]]", from, to, date)
if diff ~= nil and date ~= nil then
if diff:match("^[0123456789/]+$") then
text = string.format("%s on [[Special:Diff/%s|%s]]", text, diff, date)
else
text = string.format("%s on [%s %s]", text, diff, date)
end
elseif date ~= nil then
text = string.format("%s on %s", text, date)
end
if from_oldid ~= nil then
if from_oldid:match("^[0123456789/]+$") then
text = string.format("%s from [[Special:Diff/%s|this version]]", text, from_oldid)
else
text = string.format("%s from [%s this version]", text, from_oldid)
end
end
text = string.format(
"%s. The former page's [[Special:PageHistory/%s|history]] now serves to "..
"[[Wikipedia:Copying within Wikipedia|provide attribution]] for that content "..
"in the latter page, and it must not be deleted so long as the latter page "..
"exists. Please leave this template in place to link the article histories "..
"and preserve this attribution.",
text, from
)
if fromTalk ~= mw.title.getCurrentTitle().prefixedText then
text = string.format(
"%s The former page's talk page can be accessed at [[%s]].",
text, fromTalk
)
end
return text
end
local function row(args, i)
local to = delink(args["to" .. i] or (i == 1 and args["to"] or nil))
local toTalk = mw.title.new(delink(to)).subjectPageTitle.prefixedText
local diff = args["diff" .. i] or (i == 1 and args["diff"] or nil)
local date = args["date" .. i] or (i == 1 and args["date"] or nil)
local from_oldid = args["from_oldid" .. i] or (i == 1 and args["from_oldid"] or nil)
if date == nil then
text = text .. showWarning(string.format(
"Split date for \"%s\" (<code>to%s</code>) was not specified with <code>date</code>. This may cause an error in the future.",
to, i
), demoCheck(args))
end
local rowText = string.format(
"[[%s]] ([[%s|talk]] | [[Special:PageHistory/%s|history]])",
to, toTalk, to, date, diff
)
if diff ~= nil and date ~= nil then
if diff:match("^[0123456789/]+$") then
rowText = string.format("%s on [[Special:Diff/%s|%s]]", rowText, diff, date)
else
rowText = string.format("%s on [%s %s]", rowText, diff, date)
end
elseif date ~= nil then
rowText = string.format("%s on %s", rowText, date)
end
if from_oldid ~= nil then
if from_oldid:match("^%d+$") then
rowText = string.format("%s from [[Special:Diff/%s|this version]]", rowText, from_oldid)
else
rowText = string.format("%s from [%s this version]", rowText, from_oldid)
end
end
return mw.html.create("li"):wikitext(rowText)
end
local function multiText(args)
local text = ""
-- from1 also included in case someone filed the template improperly
local from = delink(args["from"] or args["from1"]) or mw.title.getCurrentTitle().subjectPageTitle.prefixedText
local fromTalk = mw.title.new(delink(from)).talkPageTitle.prefixedText
local collapse = tonumber(args["collapse"]) or yesno(args["collapse"])
if args["from1"] then
text = text .. showWarning(
"<code>from</code> is not a row-based parameter. Use <code>from</code> instead of <code>from1</code>.",
demoCheck(args)
)
end
if args["from_oldid1"] then
text = text .. showWarning(
"<code>from_oldid</code> is not a row-based parameter. Use <code>from_oldid</code> instead of <code>from_oldid1</code>.",
demoCheck(args)
)
end
text = string.format(
"Material from [[%s]] was split to other pages. The former page's "..
"[[Special:PageHistory/%s|history]] now serves to "..
"[[Wikipedia:Copying within Wikipedia|provide attribution]] for that content "..
"in the latter pages, and it must not be deleted so long as the latter pages "..
"exist. Please leave this template in place to link the article histories "..
"and preserve this attribution.", from, from
)
local ul = mw.html.create("ul")
local ul2
local target = ul
-- Row-based parameters
local i = 1
while args["to" .. i] or (i == 1 and args["to"]) do
-- Swap out ul with collapsible table if collapsible
if collapse == true and i == 1 then
-- Only on first run
target = mw.html.create("table")
:attr("class", "mw-collapsible mw-collapsed")
:attr("style", "width:100%; background-color: #f8eaba;")
:node(mw.html.create("tr")
:node(mw.html.create("th")
:wikitext("Page splits")
)
)
:node(mw.html.create("td"):node(ul))
elseif collapse == (i - 1) then
ul2 = ul
ul = mw.html.create("ul")
-- Only once threshold has been reached
target = mw.html.create("table")
:attr("class", "mw-collapsible mw-collapsed")
:attr("style", "width:100%; background-color: #f8eaba;")
:node(mw.html.create("tr")
:node(mw.html.create("th")
:wikitext("Other page splits")
)
)
:node(mw.html.create("tr")
:node(mw.html.create("td"):node(ul))
)
end
ul:node(row(args, i))
i = i + 1
end
if fromTalk ~= mw.title.getCurrentTitle().prefixedText then
text = string.format(
"%s The former page's talk page can be accessed at [[%s]].",
text, fromTalk
)
end
text = text .. " " .. tostring(ul2 or "") .. tostring(target)
return text
end
local function bannerText(args)
-- Checks if there are multiple rows
local text
if args["to2"] ~= nil and ((args["to1"] or args["to"]) ~= nil) then
text = multiText(args) --.. categories(args,true)
else
text = singleText(args) --.. categories(args,false)
end
return text
end
function p.renderBanner(args)
return MessageBox.main('tmbox', {
name = "split-article",
small = args["small"],
image = '[[File:Split-arrows.svg|50px]]',
text = bannerText(args)
})
end
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame, {
trim = true,
removeBlanks = true
})
return p.renderBanner(args)
end
return p