Jump to content

Module:Name in various languages

From Wikipedia, the free encyclopedia

local lang_mod = require('Module:Lang');
local get_args = require('Module:Arguments').getArgs;
local yesno    = require('Module:Yesno');

local p = {};

-- Ensure that list of names is sorted by name of language.
local function sorted_pairs(t, f)
    local keys = {}
    for key in pairs(t) do table.insert(keys, key) end
    table.sort(keys, f)
    local i = 0
    local iter = function ()
    	i = i + 1; if keys[i] == nil then return nil else return keys[i], t[keys[i]] end end
    return iter
end

local function make_language_row(frame, lang_code, lang_text)
	local language_row = mw.html.create('tr')
	language_row:css{
		["text-align"] = "left"
	}

    local lang_link_wikilink = lang_mod.name_from_tag(
    	{lang_code, ['link'] = 'yes'}
    )

    local language_name = mw.html.create('td')
    local lang_name_wikitext = frame.args[lang_code .. '_display'] or lang_link_wikilink
    language_name:wikitext(lang_name_wikitext)
    language_name:addClass(frame.args[lang_code .. '_name_class'] or '')
    language_name:addClass(frame.args['langname_class'] or '')

    local language_data = mw.html.create('td')
    language_data:css{["padding-left"]="0.5em"}
    language_data:addClass(frame.args[lang_code .. '_text_class'] or '')
    language_data:addClass(frame.args['langtext_class'] or '')

    language_data:wikitext(frame:expandTemplate{
    	title='lang',args={lang_code, lang_text}
    })

    language_row:node(language_name)
    language_row:node(language_data)

    return language_row
end

function p._main(frame)
	local args = get_args(frame)
	
	local root = mw.html.create('table')
	root:addClass(args.class or 'mw-collapsible')
	if yesno(args.collapse or true) then root:addClass("mw-collapsed") end
	
	root:css{
		["width"] = args.width or '100%',
		["font_size"] = args.font_size or '88%',
		["border-collapse"] = "collapse"
	}
	
	local name_row = mw.html.create('tr')
	name_row:node(mw.html.create('td')
		:css{
			["text-align"] = "center",
			["border-top"] = "0px"
		}
		:attr{["colspan"] = 2}
		:wikitext(args.name or ''))
	root:node(name_row)

    for k,v in sorted_pairs(args) do
    	if lang_mod._is_ietf_tag(k) then
        	local out = make_language_row(frame,k,v)
        	root:node(out)
    	end
    end

    return tostring(root);
end

function p.main(frame)
	return p._main(frame:getParent())
end

return p