Jump to content

Module:TOCyears: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Rm code implementing deleted Template:List ToC
Inline functions used only oncwe
Tag: Reverted
Line 7: Line 7:


local p = {}
local p = {}

local function makeTocLink(page, display)
display = display or page
return string.format('[[#%s|%s]]', page, display)
end

local function makeToc(s, args)
-- Make a TOC box from a string and from the given table of arguments.
checkType('makeToc', 1, s, 'string')
checkType('makeToc', 2, args, 'table', true)
args = args or {}

-- Root
local root = mw.html.create()
local isPrimary = yesno(args.primary) ~= false
if isPrimary then
root:wikitext('__NOTOC__')
end

-- Top div tag
local top = root:tag('div')
top:addClass('toc plainlinks hlist')
if isPrimary then
top
:attr('id', 'toc')
:attr('class', 'toc')
end
local align = args.align and args.align:lower()
if align == 'left' then
top
:css('float', 'left')
:css('clear', args.clear or 'left')
elseif align == 'right' then
top
:css('float', 'right')
:css('clear', args.clear or 'right')
elseif align == 'center' then
top
:css('margin', 'auto')
:css('clear', args.clear or 'none')
else
top
:css('clear', args.clear or 'left')
end
top:newline()

-- Title div tag
local title = args.title or mw.message.new('Toc'):plain()
local titleDiv = top:tag('div')
titleDiv:attr('id', 'toctitle')
titleDiv:attr('class', 'toctitle')
if isPrimary then
titleDiv:wikitext('<h2>' .. title .. '</h2>')
else
titleDiv:tag('strong'):wikitext(title)
end
-- Content
top
:newline()
:wikitext(s)
:newline()
return tostring(root)
end


function p._years(args)
function p._years(args)
Line 84: Line 19:
year = year .. '-' .. tostring(i + range)
year = year .. '-' .. tostring(i + range)
end
end
links[#links + 1] = makeTocLink(year)
links[#links + 1] = string.format('[[#%s|%s]]', year, year)
i = i + step
i = i + step
end
end
if #links > 0 then
if #links > 0 then
links = '* ' .. table.concat(links, ' ')
links = '* ' .. table.concat(links, ' ')
-- Root
return makeToc(links, args)
local root = mw.html.create()
local isPrimary = yesno(args.primary) ~= false
if isPrimary then
root:wikitext('__NOTOC__')
end

-- Top div tag
local top = root:tag('div')
top:addClass('toc plainlinks hlist')
if isPrimary then
top
:attr('id', 'toc')
:attr('class', 'toc')
end
local align = args.align and args.align:lower()
if align == 'left' then
top
:css('float', 'left')
:css('clear', args.clear or 'left')
elseif align == 'right' then
top
:css('float', 'right')
:css('clear', args.clear or 'right')
elseif align == 'center' then
top
:css('margin', 'auto')
:css('clear', args.clear or 'none')
else
top
:css('clear', args.clear or 'left')
end
top:newline()

-- Title div tag
local title = args.title or mw.message.new('Toc'):plain()
local titleDiv = top:tag('div')
titleDiv:attr('id', 'toctitle')
titleDiv:attr('class', 'toctitle')
if isPrimary then
titleDiv:wikitext('<h2>' .. title .. '</h2>')
else
titleDiv:tag('strong'):wikitext(title)
end
-- Content
top
:newline()
:wikitext(s)
:newline()
return tostring(root)
else
else
return ''
return ''
Line 95: Line 80:
end
end


function p.years(frame)
setmetatable(p, {__index = function(t, k)
local args = require('Module:Arguments').getArgs(frame, {
return function (frame)
wrappers = {
local args = require('Module:Arguments').getArgs(frame, {
'Template:TOCyears',
wrappers = {
}
'Template:TOCyears',
})
}
return p._years(args)
})
end
return p['_' .. k](args)
end
end})


return p
return p

Revision as of 16:51, 4 October 2020

-- This module implements various templates that create custom tables of
-- contents.

-- Load necessary modules
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType

local p = {}

function p._years(args)
	local i = tonumber(args.startyear) or 1900
	local endYear = tonumber(args.endyear) or tonumber(os.date('%Y'))
	local range = tonumber(args.range)
	local step = tonumber(args.step) or 1
	local links = {}
	while i <= endYear do
		local year = tostring(i)
		if range then
			year = year .. '-' .. tostring(i + range)
		end
		links[#links + 1] = string.format('[[#%s|%s]]', year, year)
		i = i + step
	end
	if #links > 0 then
		links = '* ' .. table.concat(links, ' ')
		-- Root
		local root = mw.html.create()
		local isPrimary = yesno(args.primary) ~= false
		if isPrimary then
			root:wikitext('__NOTOC__')
		end

		-- Top div tag
		local top = root:tag('div')
		top:addClass('toc plainlinks hlist')
		if isPrimary then
			top
				:attr('id', 'toc')
				:attr('class', 'toc')
		end
		local align = args.align and args.align:lower()
		if align == 'left' then
			top
				:css('float', 'left')
				:css('clear', args.clear or 'left')
		elseif align == 'right' then
			top
				:css('float', 'right')
				:css('clear', args.clear or 'right')
		elseif align == 'center' then
			top
				:css('margin', 'auto')
				:css('clear', args.clear or 'none')
		else
			top
				:css('clear', args.clear or 'left')
		end
		top:newline()

		-- Title div tag
		local title = args.title or mw.message.new('Toc'):plain()
		local titleDiv = top:tag('div')
		titleDiv:attr('id', 'toctitle')
		titleDiv:attr('class', 'toctitle')
		if isPrimary then
			titleDiv:wikitext('<h2>' .. title .. '</h2>')
		else
			titleDiv:tag('strong'):wikitext(title)
		end
	
		-- Content
		top
			:newline()
			:wikitext(s)
		:newline()
		return tostring(root)
	else
		return ''
	end
end

function p.years(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = {
			'Template:TOCyears',
		}
	})
	return p._years(args)
end

return p