Module: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.__orderedIndex[1]
    else
        -- fetch the next value
        for i = 1, #(t.__orderedIndex) do
            if t.__orderedIndex[i] == state then
                key = t.__orderedIndex[i + 1]
            end
        end
    end

    if key then
        return key, t[key]
    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 "AA"
	elseif 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 HTMLcolor[color] 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('font-size', '90%')
		:css('line-height', '100%')
		:cssText(style)
	local row = root:tag('tr')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Political party name')
	row:tag('th')
		:attr('scope', 'col')
		:addClass('unsortable')
		:wikitext('color')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('abbrev')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('shortname')
	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 unvisited link')
	row:tag('th')
		:attr('scope', 'col')
		:wikitext('Contrast visited 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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.