Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
Module documentation[view][edit][history][purge]
This documentation is transcluded from Module:TrainVariants/doc. Changes can be proposed in the talk page.
Function list
L 10 — TrainVariants.out
L 62 — TrainVariants.new

require( 'strict' )

local TrainVariants = {}

local MODULE_NAME = 'Module:TrainVariants'
local config = mw.loadJsonData( MODULE_NAME .. '/config.json' )

--- Generates wikitext needed for the template
--- @return string
function TrainVariants.out(data)
    local containerHtml = mw.html.create( 'div' ):addClass( 'template-trainVariants' )
    local placeholderImage = 'File:' .. config.placeholder_image
    for i, variant in ipairs( data ) do
    	
        if variant.name then
            local variantHtml = mw.html.create( 'div' ):addClass( 'template-trainVariant' )

            if variant.name == mw.title.getCurrentTitle().fullText then
                variantHtml:addClass( 'template-trainVariant--selected' )
            end

            local image
            if variant.image then
                image = string.format( 'File:%s', variant.image )
            else
                image = variant.image or placeholderImage
            end
            local link
            if variant.link then
            	link = string.format( '[[%s|%s]]', variant.link, variant.name )
            else
            	link = variant.name
            end
            variantHtml:tag( 'div' )
                :addClass( 'template-trainVariant-fakelink' )
                :wikitext(link)
            variantHtml:tag( 'div' )
                :addClass( 'template-trainVariant-image' )
                :wikitext( string.format( '[[%s|480px|link=]]', image ) )

            local variantTextHtml = mw.html.create( 'div' )
                :addClass( 'template-trainVariant-text' )
                :tag( 'div' )
                :addClass( 'template-trainVariant-title' )
                :wikitext( variant.name )
                :done()
            variantTextHtml:tag( 'div' )
                :addClass( 'template-trainVariant-subtitle' )
                :wikitext( variant.subname )
            variantHtml:node( variantTextHtml )

            containerHtml:node( variantHtml )
        end
    end

    return mw.getCurrentFrame():extensionTag {
        name = 'templatestyles', args = { src = MODULE_NAME .. '/styles.css' }
    } .. tostring( containerHtml )
end

--- Parser call for generating the table
function TrainVariants.new( frame )
    local args = require( 'Module:Arguments' ).getArgs( frame )
    local data = {}
    --[[
    {name,subname,image,link}
    --]]
	for i,v in pairs(args) do
		local n,var = string.match(tostring(i),"^(%d+)%_(%a*)")
		assert(n,"Args must have leading digits")
		local n = tonumber(n)
		if not data[n] then
			data[n] = {[var] = v}
		else
			data[n][var] = v
		end
	end
    return TrainVariants.out(data)
end

return TrainVariants
🍪 Yum Yum Yum! Cookies help us better deliver our services. By using our site, you agree to our use of cookies.