Editing
Module:Old XfD multi
From Thetacola Wiki
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local yesno = require('Module:Yesno') local mMessageBox = require('Module:Message box') local TEMPLATE_PAGE = 'Template:Old XfD multi' ------------------------------------------------------------------------------- -- Helper functions ------------------------------------------------------------------------------- local function exists(page) local success, exists = pcall(function () local title = mw.title.new(page) return title.exists end) return success and exists end local function getAfdPage(page) if page and mw.title.new(page) then if mw.title.new(page).namespace ~= 0 then return page else return 'Wikipedia:Articles for deletion/' .. page end else return nil end end local function getVfdPage(page) if page and mw.title.new(page) then if mw.title.new(page).rootPageTitle.fullText == 'Wikipedia:Votes for deletion' then return page else return 'Wikipedia:Votes for deletion/' .. page end else return nil end end local function makeWikilink(page, display) display = display or 'discussion' if page then return string.format('[[%s|%s]]', page, display) else return display --probably a bad title end end local function makeUrlLink(page, display) display = display or 'discussion' return string.format('[%s %s]', page, display) end local function pageTypeName(title) local display = mw.ustring.lower(title.subjectNsText) local pageTypes = { [''] = 'article', ['user'] = 'user page', ['wikipedia'] = 'project page', ['mediawiki'] = 'interface page', ['help'] = 'help page' } if pageTypes[display] then display = pageTypes[display] end return display end local function cleanupTitle(title) if not title then return title end title = mw.uri.decode(title, 'PATH') title = string.gsub(title, '|.*', '') title = string.gsub(title, '[%[%]{}]', '') return title end ------------------------------------------------------------------------------- -- OldAfdMulti class ------------------------------------------------------------------------------- local OldAfdMulti = {} OldAfdMulti.__index = OldAfdMulti function OldAfdMulti.new(args) local self = setmetatable({}, OldAfdMulti) self.currentTitle = mw.title.getCurrentTitle() -- Preprocess the row args for easier looping. self.rowData = {} for k, v in pairs(args) do if type(k) == 'string' then local prefix, num = k:match('^(.-)([1-9][0-9]*)$') if prefix and num then num = tonumber(num) if prefix == 'result' or prefix == 'date' or prefix == 'page' or prefix == 'link' or prefix == 'caption' or prefix == 'votepage' or prefix == 'merge' then self.rowData[num] = self.rowData[num] or {} self.rowData[num][prefix] = v if v and v ~= '' and prefix=='merge' then self.isMerge = true end end end end end -- Set aliases for parameters ending in "1". if self.rowData[1] then self.rowData[1].result = self.rowData[1].result or args.result self.rowData[1].date = self.rowData[1].date or args.date self.rowData[1].page = self.rowData[1].page or args.page self.rowData[1].votepage = self.rowData[1].votepage or args.votepage self.rowData[1].link = self.rowData[1].link or args.link self.rowData[1].caption = self.rowData[1].caption or args.caption self.rowData[1].merge = self.rowData[1].merge or args.merge elseif args.result or args.date or args.page or args.votepage or args.link or args.caption or args.merge then self.rowData[1] = { result = args.result, date = args.date, page = args.page, votepage = args.votepage, link = args.link, caption = args.caption, merge = args.merge } end -- Remove any gaps in the array we made. local function compressSparseArray(t) local ret, nums = {}, {} for num, data in pairs(t) do nums[#nums + 1] = num end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end self.rowData = compressSparseArray(self.rowData) -- Set aliases that apply to all of the data tables. for i, data in ipairs(self.rowData) do data.page = data.page or data.votepage data.page = cleanupTitle(data.page) data.votepage = nil end -- Set collapsedness self.collapse = tonumber(args.collapse) if not self.collapse then self.collapse = yesno(args.collapse) end -- Set other properties self.isNumbered = yesno(args.numbered) self.isSmall = yesno(args.small) self.pageType = args.type or pageTypeName(self.currentTitle) if args.merge and args.merge ~= '' then self.isMerge = true end self.deletion = args.deletion return self end function OldAfdMulti:renderResult(result) return result or "'''Keep'''" end function OldAfdMulti:renderDate(date) if date then return date else self.hasMissingDate = true return string.format( '<sup>%s[[%s|date missing]]%s</sup>', mw.text.nowiki('['), TEMPLATE_PAGE, mw.text.nowiki(']') ) end end function OldAfdMulti:renderPageText(linkFunc, page, caption) return string.format(', see %s.', linkFunc(page, caption)) end function OldAfdMulti:renderRow(result, date, link, merge) local result = self:renderResult(result) local date = self:renderDate(date) local mergeText = '' if merge and merge ~= '' then mergeText = string.format('Merge with [[:%s]]: ', merge) end if link then return string.format('%s%s, %s, see %s.', mergeText, result, date, link) else return string.format('%s%s, %s', mergeText, result, date) end end function OldAfdMulti:renderFirstRow(data) local link if data.link then link = makeUrlLink(data.link, data.caption) else local page = data.page or self.currentTitle.text link = makeWikilink(getAfdPage(page), data.caption) end return self:renderRow(data.result, data.date, link, data.merge) end function OldAfdMulti:renderSubsequentRow(data) local link if data.page then link = makeWikilink(getAfdPage(data.page), data.caption) elseif data.link then link = makeUrlLink(data.link, data.caption) end return self:renderRow(data.result, data.date, link, data.merge) end function OldAfdMulti:renderRows() local root = mw.html.create() local nRows = #self.rowData local i = nRows local nCollapsedRows if type(self.collapse) == 'number' then nCollapsedRows = self.collapse elseif self.collapse then nCollapsedRows = nRows else nCollapsedRows = 0 end local hasNormalRows = nRows - nCollapsedRows > 0 local function makeList(isCollapsed, header) local tableRoot = root:tag('table') tableRoot :addClass(isCollapsed and 'mw-collapsible mw-collapsed' or nil) :css('width', '100%') :css('background-color', '#f8eaba') if header then tableRoot :tag('tr') :tag('th') :wikitext(header) end return tableRoot :tag('tr') :tag('td') :tag(self.isNumbered and 'ol' or 'ul') end local function renderRow(html, method, data) html :tag('li') :attr('value', self.isNumbered and i or nil) :wikitext(self[method](self, data)) end -- Render normal rows if hasNormalRows then local normalList = makeList(false) while i > 1 and i > nCollapsedRows do renderRow(normalList, 'renderSubsequentRow', self.rowData[i]) i = i - 1 end if i == 1 and i > nCollapsedRows then renderRow(normalList, 'renderFirstRow', self.rowData[i]) i = i - 1 end end -- Render collapsed rows if nCollapsedRows > 0 then local header if hasNormalRows then header = 'Older deletion discussions:' elseif nRows > 1 then header = 'Deletion discussions:' else header = 'Deletion discussion:' end local collapsedList = makeList(true, header) while i > 1 do renderRow(collapsedList, 'renderSubsequentRow', self.rowData[i]) i = i - 1 end renderRow(collapsedList, 'renderFirstRow', self.rowData[i]) end return tostring(root) end function OldAfdMulti:renderFirstRowOnly() local data = self.rowData[1] or {} local caption = data.caption or 'the discussion' local link if data.link then link = makeUrlLink(data.link, caption) else local page = data.page or self.currentTitle.text if exists(getAfdPage(page)) then link = makeWikilink(getAfdPage(page), caption) elseif exists(getVfdPage(page)) then link = makeWikilink(getVfdPage(page), caption) else link = caption -- Make this an error? end end local result = self:renderResult(data.result or "'''keep'''") return string.format( 'The result of %s was %s.', link, result ) end function OldAfdMulti:renderBannerText() local nRows = #self.rowData local ret = {} if self.deletion then if nRows < 1 or not self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was previously nominated for %s.', self.pageType, self.deletion ) elseif nRows == 1 and self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was nominated for %s on %s.', self.pageType, self.deletion, self.rowData[1].date ) else ret[#ret + 1] = string.format( 'This %s was nominated for %s.', self.pageType, self.deletion ) end elseif self.isMerge then if nRows < 1 or not self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with %s.', self.pageType, self.rowData[1].merge ) elseif nRows == 1 and self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with [[:%s]] on %s.', self.pageType, self.rowData[1].merge, self.rowData[1].date ) else ret[#ret + 1] = string.format( 'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] or considered for [[Wikipedia:Deletion policy#Merging|merging]].', self.pageType ) end else if nRows < 1 or not self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was previously nominated for [[Wikipedia:Deletion policy|deletion]].', self.pageType ) elseif nRows == 1 and self.rowData[1].date then ret[#ret + 1] = string.format( 'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] on %s.', self.pageType, self.rowData[1].date ) else ret[#ret + 1] = string.format( 'This %s was nominated for [[Wikipedia:Deletion policy|deletion]].', self.pageType ) end end if nRows > 1 then ret[#ret + 1] = ' ' if self.isSmall then ret[#ret + 1] = 'Review prior discussions if considering re-nomination:' else ret[#ret + 1] = 'Please review the prior discussions if you are considering re-nomination:' end ret[#ret + 1] = '\n' ret[#ret + 1] = self:renderRows() else ret[#ret + 1] = ' ' ret[#ret + 1] = self:renderFirstRowOnly() end return table.concat(ret) end function OldAfdMulti:renderBanner() return mMessageBox.main('tmbox', { small = self.isSmall, type = 'notice', image = '[[File:Clipboard.svg|35px|Articles for deletion]]', smallimage = 'none', text = self:renderBannerText() }) end function OldAfdMulti:renderTrackingCategories() local ret = {} if self.hasMissingDate and self.currentTitle.isTalkPage then ret[#ret + 1] = '[[Category:Old XfD multi templates with errors]]' end return table.concat(ret) end function OldAfdMulti:__tostring() return self:renderBanner() .. self:renderTrackingCategories() end ------------------------------------------------------------------------------- -- Exports ------------------------------------------------------------------------------- local p = {} function p._main(args) local afd = OldAfdMulti.new(args) return tostring(afd) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = TEMPLATE_PAGE }) return p._main(args) end return p
Summary:
Please note that all contributions to Thetacola Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Project:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Module other
(
edit
)
Template:Module rating
(
edit
)
Template:Nowrap
(
edit
)
Template:Ombox
(
edit
)
Template:Template link
(
edit
)
Template:Tl
(
edit
)
Module:Arguments
(
edit
)
Module:Effective protection level
(
edit
)
Module:Message box
(
edit
)
Module:Message box/configuration
(
edit
)
Module:Message box/ombox.css
(
edit
)
Module:Old XfD multi/doc
(
edit
)
Module:Yesno
(
edit
)
Navigation menu
Page actions
Module
Discussion
Read
Edit source
History
Page actions
Module
Discussion
More
Tools
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Search
Tools
What links here
Related changes
Special pages
Page information