Jump to content
Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Documentation for this module may be created at Module:Navcards/doc

local mArguments --initialize lazily
local getArgNums = require('Module:Common').getArgNums
local p = {}


--Implements {{navcards}} from the frame
function p.navcards(frame)
	mArguments = require('Module:Arguments')
	return p._navcards(mArguments.getArgs(frame), frame)
end

function p._navcards(args, frame)
	if not args then
		return 'Missing arguments'
	end

	local html = mw.html.create('div'):addClass('template-navcards')
	local content = mw.html.create('div'):addClass('template-navcards-content')

	local thumbWidth = args['thumbwidth'] or 240
	html:css('--tg-navcards-aspect-ratio', args['aspectratio'] or '1')
	content:css('grid-template-columns', string.format('repeat(auto-fit, minmax(%spx, 1fr))', thumbWidth * 2 / 3))

	if args['header'] then
		local divider = frame:expandTemplate { title = 'Section divider', args = { args['header'] } }
		html:tag('div'):addClass('template-navcards-header')
			:wikitext(divider)
			:done()
	end

	local cardCount = 0
	for i, _ in ipairs(getArgNums('page', args)) do
		local num = tostring(i)
		if not args['page' .. num] then return end

		local navcard = mw.html.create('div'):addClass('template-navcard')

		local image = mw.html.create('div'):addClass('template-navcard-image')
		if args['image' .. num] then
			image:wikitext(string.format('[[File:%s|%spx|link=]]', args['image' .. num], thumbWidth))
		end

		local text = mw.html.create('div'):addClass('template-navcard-text')
		text:tag('div'):addClass('template-navcard-title')
			:wikitext(args['title' .. num] or args['page' .. num])
			:done()
		if args['caption' .. num] then
			text:tag('div'):addClass('template-navcard-caption')
				:wikitext(args['caption' .. num])
		end

		navcard:node(image)
		navcard:node(text)
		navcard:tag('div'):addClass('template-navcard-link')
			:wikitext(string.format('[[%s]]', args['page' .. num]))
		content:node(navcard)
		cardCount = cardCount + 1
	end

	html:addClass('template-navcards--count-' .. cardCount)

	html:node(content)

	return frame:extensionTag {
		name = 'templatestyles', args = { src = 'Module:Navcards/styles.css' }
	} .. tostring(html)
end

return p
Last modified