Jump to content

Module:Portal toolbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m rename function parameter for clarity
rename functions for clarity; rename local variables for clarity; clean up
Line 3: Line 3:
p = {}
p = {}


local function toolbox_header_row(frame, tbl, text)
local function add_header_row(frame, tbl, text)
local row = tbl:tag('tr')
local row = tbl:tag('tr')
row:tag('th')
row:tag('th')
Line 14: Line 14:
end
end


local function toolbox_template_row(frame, tbl, pagename)
local function add_template_row(frame, tbl, pagename)
local row = tbl:tag('tr')
local row = tbl:tag('tr')
row:tag('td')
row:tag('td')
Line 22: Line 22:
end
end


local function toolbox_row(frame, tbl, pagename, text, right)
local function add_wikilink_row(frame, tbl, pagename, text, right)
local row = tbl:tag('tr')
local row = tbl:tag('tr')
row:tag('td')
row:tag('td')
Line 30: Line 30:
end
end


local function toolbox_section(frame, args, tbl, section_header, arg_prefix, page_prefix, row_function)
local function add_section(frame, args, tbl, add_section_header, arg_prefix, page_prefix, row_function)
if row_function == nil then
if row_function == nil then
row_function = toolbox_row
row_function = add_wikilink_row
end
end
local nums = {}
local nums = {}
Line 47: Line 47:
end
end
table.sort(nums)
table.sort(nums)
toolbox_header_row(frame, tbl, section_header)
add_header_row(frame, tbl, add_section_header)
for _, num in ipairs(nums) do
for _, num in ipairs(nums) do
local arg_name = arg_prefix .. num
local arg_name = arg_prefix .. num
local a = args[arg_name]
local arg = args[arg_name]
local pagename = page_prefix .. a
local pagename = page_prefix .. arg
local text = args[arg_name .. 'text']
local text = args[arg_name .. 'text']
local right = args[arg_name .. 'right']
local right = args[arg_name .. 'right']
row_function(frame, tbl, pagename, text or arg, right)
if text == nil then
text = a
end
row_function(frame, tbl, pagename, text, right)
end
end
end
end
Line 67: Line 64:
tbl:tag('caption')
tbl:tag('caption')
:wikitext('Portal toolbox')
:wikitext('Portal toolbox')
toolbox_header_row(frame, tbl, 'Main portal page')
add_header_row(frame, tbl, 'Main portal page')
local rootTitle = mw.title.getCurrentTitle().rootPageTitle.subjectPageTitle
local rootTitle = mw.title.getCurrentTitle().rootPageTitle.subjectPageTitle
toolbox_row(frame, tbl, rootTitle.fullText, nil, edit(frame, rootTitle.fullText))
add_wikilink_row(frame, tbl, rootTitle.fullText)
toolbox_section(frame, args, tbl, 'Static subpages', 'static', rootTitle.fullText .. '/')
add_section(frame, args, tbl, 'Static subpages', 'static', rootTitle.fullText .. '/')
toolbox_section(frame, args, tbl, 'Dynamic subpages', 'dynamic', rootTitle.fullText .. '/')
add_section(frame, args, tbl, 'Dynamic subpages', 'dynamic', rootTitle.fullText .. '/')
toolbox_section(frame, args, tbl, 'Templates', 'template', '', toolbox_template_row)
add_section(frame, args, tbl, 'Templates', 'template', '', add_template_row)
toolbox_section(frame, args, tbl, 'Other', 'other', '')
add_section(frame, args, tbl, 'Other', 'other', '')
return tbl
return tbl
end
end

Revision as of 19:24, 13 June 2020

local getArgs = require('Module:Arguments').getArgs

p = {}

local function add_header_row(frame, tbl, text)
	local row = tbl:tag('tr')
	row:tag('th')
		:attr('colspan', '2')
		:wikitext(text)
end

local function edit(frame, pagename)
	return frame:expandTemplate{ title='edit', args={ pagename } }
end

local function add_template_row(frame, tbl, pagename)
	local row = tbl:tag('tr')
	row:tag('td')
		:wikitext(frame:expandTemplate{ title='tl', args={ pagename } })
	row:tag('td')
		:wikitext(edit(frame, 'Template:' .. pagename))
end

local function add_wikilink_row(frame, tbl, pagename, text, right)
	local row = tbl:tag('tr')
	row:tag('td')
		:wikitext('[[' .. pagename .. '|' .. (text or pagename) .. ']]')
	row:tag('td')
		:wikitext(right or edit(frame, pagename))
end

local function add_section(frame, args, tbl, add_section_header, arg_prefix, page_prefix, row_function)
	if row_function == nil then
		row_function = add_wikilink_row
	end
	local nums = {}
	for k, _ in pairs(args) do
		if type(k) == 'string' then
			local num = k:match('^' .. arg_prefix .. '(%d+)$')
			if num then
				table.insert(nums, tonumber(num))
			end
		end
	end
	if #nums == 0 then
		return
	end
	table.sort(nums)
	add_header_row(frame, tbl, add_section_header)
	for _, num in ipairs(nums) do
		local arg_name = arg_prefix .. num
		local arg = args[arg_name]
		local pagename = page_prefix .. arg
		local text = args[arg_name .. 'text']
		local right = args[arg_name .. 'right']
		row_function(frame, tbl, pagename, text or arg, right)
	end
end

local function main(frame)
	local args = getArgs(frame)
	local tbl = mw.html.create('table')
		:cssText('float:right; border:1px navy solid;')
	tbl:tag('caption')
		:wikitext('Portal toolbox')
	add_header_row(frame, tbl, 'Main portal page')
	local rootTitle = mw.title.getCurrentTitle().rootPageTitle.subjectPageTitle
	add_wikilink_row(frame, tbl, rootTitle.fullText)
	
	add_section(frame, args, tbl, 'Static subpages', 'static', rootTitle.fullText .. '/')
	add_section(frame, args, tbl, 'Dynamic subpages', 'dynamic', rootTitle.fullText .. '/')
	add_section(frame, args, tbl, 'Templates', 'template', '', add_template_row)
	add_section(frame, args, tbl, 'Other', 'other', '')
	return tbl
end

p.main = main

return p