Mô đun:Political party/testtable

local p = {}
local contrastRatio = require('Module:Color contrast')._ratio
function __genOrderedIndex(t)
local orderedIndex = {}
for key in pairs(t) do
table.insert(orderedIndex, key)
end
table.sort(orderedIndex)
return orderedIndex
end
function orderedNext(t, state)
-- Equivalent of the next function, but returns the keys in the alphabetic
-- order. We use a temporary ordered key table that is stored in the
-- table being iterated.
local key = nil
if state == nil then
-- the first time, generate the index
t.__orderedIndex = __genOrderedIndex(t)
key = t.__orderedIndex1
else
-- fetch the next value
for i = 1, #(t.__orderedIndex) do
if t.__orderedIndexi == state then
key = t.__orderedIndexi + 1
end
end
end
if key then
return key, tkey
end
-- no more value to return, cleanup
t.__orderedIndex = nil
return
end
function orderedPairs(t)
-- Equivalent of the pairs() function on tables. Allows to iterate in order.
return orderedNext, t, nil
end
local function isContrastValid(text, background)
	if not background or background == "" then
		return 
	end
	local ratio = tonumber(contrastRatio({text, background}))
	if not ratio then
		return ""
	end
	if ratio > 4.5 and ratio  7.0 then
		return "AAA"
	else
		return "Failed"
	end
end
local function isColorValid(color)
	if not color or color == "" then
		return 
	end
	-- Convert to lowercase.
	color = color:lower()
	
	-- Check if color is using an HTML color name.
	local HTMLcolor = mw.loadData('Module:Color contrast/colors')
	if HTMLcolorcolor then
		return 
	end
	
	-- Added as a valid color in https://www.w3.org/TR/css-color-3/#transparent
	if color == "transparent" then
		return ""
	end
	-- Remove leading # if there is one.
	color = string.gsub(color, "^#", "")
	local cs = mw.text.split(color, )
	if #cs == 6 or #cs == 3 then
		return 
	end
	return false
end
-- Example of having all the data - color and names - in one table. Requires one page to be edited instead of two when adding a new party.
function p.tables(frame)
	-- Initialise and populate variables
	local args = frame.args
	local index = args.letter
	
	-- Load data from submodule
	local data = require('Module:Political party/' .. index)
	
	-- helper function
	local function table_row(party_name, party_info)
		local res = mw.html.create()
		res:tag('th')
			:attr('scope', 'row')
			:wikitext(party_name)
		res:tag('td')
			:css('background-color', party_info.color)
			:wikitext(party_info.color)
		res:tag('td')
			:wikitext(party_info.abbrev)
		res:tag('td')
			:wikitext(party_info.shortname)
		res:tag('td')
			:wikitext(tostring(isColorValid(party_info.color)))
		res:tag('td')
			:wikitext(isContrastValid("black", party_info.color))
		res:tag('td')
			:wikitext(isContrastValid("#0645AD", party_info.color))
		res:tag('td')
			:wikitext(isContrastValid("#0B0080", party_info.color))
		return tostring(res)
	end
	-- build table
	local root = mw.html.create('table')
	root:addClass('wikitable')
		:addClass('sortable')
		:addClass('plainrowheaders')
		:css('background-color', 'transparent')
		:css('font-size', '90%')
		:css('line-height', '100%')
		:cssText(style)
	local row = root:tag('tr')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Tên đảng chính trị')
	row:tag('th')
		:attr('scope', 'col')
		:addClass('unsortable')
		:wikitext('màu')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('viết tắt')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('tên ngắn')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Is color valid?')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Contrast normal text')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Contrast unvisted link')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Contrast visted link')
	for party_name, party_vals in orderedPairs(data.full) do
		row = root:tag('tr')
		row:wikitext(table_row(party_name, party_vals))
	end
	return tostring(root)
end
return p