Module:Sandbox/Abjiklam/sandbox

From English Wikipedia @ Freddythechick
local p = {}

local infobox = require('Module:Infobox').infobox
local infobox_image = require('Module:InfoboxImage').InfoboxImage
local br = require('Module:Separated entries').br

-- Add a book or category in the order it should appear in the infobox.
-- The first element of each section is the section name.
local books = {
	asoiaf = {
		"A Song of Ice and Fire",
		agot = "A Game of Thrones",
		acok = "A Clash of Kings",
		asos = "A Storm of Swords",
		affc = "A Feast for Crows",
		adwd = "A Dance with Dragon",
		twow = "The Winds of Winter",
		ados = "A Dream of Spring",
	},
	todae = {
		"Tales of Dunk and Egg",
		thk = "The Hedge Knight",
		tss = "The Sworn Sword",
		tmk = "The Mystery Knight",
	},
	other = {
		"Other Books",
		twoiaf = "The World of Ice and Fire",
		fab    = "Fire and Blood",
		tpatq  = "The Princess and the Queen",
		trp    = "The Rogue Prince",
		tsotd  = "The Sons of the Dragon",
	},
}

local function generate_arms(arms)
	--This function generates small coat of arms icons
	return infobox_image({
		args = {
			image  = arms,
			size   = '50x70px',
			border = 'no',
			suppressplaceholder = 'yes',
		}
	})
end

function p.main(frame)
	-- The main function cleans up and formats all the arguments before
	-- passing them to the Infobox module.
	
	local original_arguments = frame.args -- arguments passed to this module
	local infobox_arguments = {} -- arguments given to the Infobox module
	
	------
    -- above (arms+name)
    ------
    local above
    
    -- name
    local honorific_prefix = ""
    local honorific_suffix = ""
    if original_arguments.honorific_prefix and original_arguments.honorific_prefix ~= "" then
    	honorific_prefix = mw.html.create('span')
    	honorific_prefix:css('font-size', '80%')
	    				:css('font-weight', 'normal')
	    				:wikitext(original_arguments.honorific_prefix)
	end
    if original_arguments.honorific_suffix and original_arguments.honorific_suffix ~= "" then
    	honorific_suffix = mw.html.create('span')
    	honorific_suffix:css('font-size', '80%')
	    				:css('font-weight', 'normal')
	    				:wikitext(original_arguments.honorific_suffix)
	end
    local name = br({
		tostring(honorific_prefix),
		original_arguments.name,
		tostring(honorific_suffix),
	})

    -- arms
    -- more than 2 arms
    if original_arguments['arms3'] then
    	above = mw.html.create('div')
    	local coats_of_arms = above:tag('div')
    	coats_of_arms:css('text-align', 'justify')
    				 :css('text-justify', 'distribute-all-lines')
    				 :css('margin-bottom', '-1em')
    	for i=1,5 do
    		local arms
    		if i ~= 1 then
    			arms = original_arguments['arms' .. tostring(i)]
    		elseif original_arguments['arms1'] then
    			arms = original_arguments['arms' .. tostring(1)]
			else
    			arms = original_arguments['arms']
    		end
    		if arms then
    			coats_of_arms:wikitext(generate_arms(arms))
    			coats_of_arms:wikitext(" ")
			end
		end
		coats_of_arms:tag('span')
					 :css('display', 'inline-block')
					 :css('width', '100%')
					 :css('height', '0')
		above:wikitext(name)
	-- 1 or 2 arms
	elseif original_arguments['arms'] or original_arguments['arms1'] then
		above = mw.html.create('table')
		above:css('width', '100%')
		above_row = above:tag('tr')
		local arms1, arms2
		if original_arguments['arms1'] then
			arms1 = original_arguments['arms1']
		else
			arms1 = original_arguments['arms']
		end
		if original_arguments['arms2'] then
			arms2 = original_arguments['arms2']
		else
			arms2 = arms1
		end
		above_row:tag('td')
				 :css('vertical-align', 'top')
				 :css('text-align', 'left')
				 :css('width', '50px')
				 :wikitext(generate_arms(arms1))
		above_row:tag('td')
				 :css('vertical-align', 'middle')
				 :css('text-align', 'center')
				 :css('padding-bottom', '5px')
				 :wikitext(name)
		above_row:tag('td')
				 :css('vertical-align', 'top')
				 :css('text-align', 'right')
				 :css('width', '50px')
				 :wikitext(generate_arms(arms2))
	-- no arms
	else
		above = name
	end
    infobox_arguments.above = tostring(above)
    
    ------
    -- image, caption and copyright
    ------
    infobox_arguments.image = infobox_image({
		args = {
			image   = original_arguments.image,
			size    = original_arguments.image_size,
			maxsize = '300px',
			sizedefault = 'frameless',
			alt     = original_arguments.alt,
			border  = 'yes',
			suppressplaceholder = 'yes',
		}
    })
    
    infobox_arguments.headerstyle = "background-color:#f8e9d0;border:none;"
    return infobox(infobox_arguments)
end

return p