Module:Sandbox/Trappist the monk/Competition word count table

From Wikipedia, the free encyclopedia
require ('strict');

local default_caption = 'যোগকৃত শব্দ';
local words_header = 'ভুক্তির শিরোনাম';
local counts_header = 'শব্দসংখ্যা';
local total_header = 'মোট শব্দসংখ্যা';

local lang_obj = mw.language.getContentLanguage();


--[[--------------------------< M A I N >----------------------------------------------------------------------

created per User_talk:Trappist_the_monk#Module_help

]]

local function main (frame)
	local args_t = require ('Module:Arguments').getArgs (frame);

	local word_table = mw.html.create ("table")									-- create a wikitable of competition words
		:addClass ('wikitable sortable')

	word_table:node (mw.html.create ('caption'):wikitext (args_t.caption or default_caption));		-- add a table caption for accessability

	word_table:node (mw.html.create ("tr")										-- create a header row
		:node (mw.html.create ("th"):attr ('style', 'width: 10em;'):wikitext (words_header))
		:node (mw.html.create ("th"):attr ('style', 'width: 10em;'):wikitext (counts_header))
		);
		
	local word = nil;
	local count = nil;
	local total_count = 0;

	for i, identifier in ipairs (args_t) do										-- spin through the template-supplied parameters in order
		if 0 ~= i % 2 then
			word = args_t[i];													-- odd numbered parameters are words
		else
			count = lang_obj:parseFormattedNumber (args_t[i]);					-- even numbered parameters are counts; unformat and convert to number
		end

		if word and count then
			word_table:node (mw.html.create ("tr")								-- create a new table row
				:node (mw.html.create ("td"):wikitext ('[[' .. word .. ']]'))	-- add wikilinked 'word'
				:node (mw.html.create ("td"):wikitext (lang_obj:formatNum (count)))	-- add fomatted 'count'
				);
			total_count = total_count + count;
			word = nil;															-- unset for the next word/count pair
			count = nil;
		end
	end

	word_table:node (mw.html.create ("tr"):attr ('class', 'sortbottom')			-- create the bottom-sorted totals row
		:node (mw.html.create ("th"):attr ('scope', 'row'):wikitext (total_header))
		:node (mw.html.create ("td"):wikitext (lang_obj:formatNum (tonumber(total_count))))
		);

	return word_table:allDone();												-- and done
end


--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]

return {
	main = main
	}