Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:ChartColors/sandbox

From Wikipedia, the free encyclopedia
local p = {}

local ARG = require "Module:Arguments"
local CFCM = require "Module:ComplForColorModules/sandbox"
local TNTT = require "Module:TNTTools"
local SD = require "Module:SimpleDebug"

local I18n = 'ChartColors'

local function I18nStr (S, ...)
	return TNTT.GetMsgP (I18n, S, {...})
end

--local RS_ColorNameInvalid = 'El nom del color (%s) no és vàlid (ha de ser Categ20 o Plotter)'
--local RS_ColorNumInvalid = 'El nombre de colors hauria d’estar entre 1 i %d (ara és %d)'
--local RS_StartNumInvalid = 'El número del primer color hauria d’estar entre 1 i %d (ara és %d)'

local category20 = {
	'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5', 
	'#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5',
}
local plotter = {--from Module:Plotter/DefaultColors
	'red', 'blue', 'green', 'yellow', 'fuchsia', 'aqua', 'brown', 'orange', 'purple', 'sienna',
	'#F0A3FF', '#191919', '#005C31', 'honeydew', '#808080', 'khaki', 'lime', 'navy', 'pink', '#426600',
	'#5EF1F2', 'turquoise', '#E0FF66', 'violet', '#FFFF80', '#FF5005',
}

function p.GetColors (ColorName, IsInv, StartN, N, CallError)
	local SelColors = {}
	local ColorNameL = string.lower(ColorName)
	local Palet0 = {}
	if ColorNameL == 'categ20' then
		Palet0 = category20
	elseif ColorNameL == 'plotter' then
		Palet0 = plotter 
	elseif CallError then	
		error (I18nStr ('ColorNameInvalid',ColorName))
	end	
	MaxN = table.getn(Palet0)
	if (N < 0) or (N > MaxN) then
		error (I18nStr ('ColorNumInvalid',tostring(MaxN),tostring(N)))
	else
		Palet = {}
		if IsInv then
			for i=MaxN, 1, -1 do
				table.insert(Palet, Palet0[i])
			end	
		else
			Palet = Palet0
		end
		if StartN > MaxN then
			error (I18nStr ('StartNumInvalid',tostring(MaxN),tostring(StartN)))
		end	
		local Step = 1
		local NEnd = N
		if (ColorNameL == 'categ20') and (N<=10) then 
			Step = 2
			if StartN == 1 then
				NEnd = N*2
			end	
		end	
		if StartN == 1 then
			for i=1, NEnd, Step do
				table.insert(SelColors, Palet[i])
			end
		else
			Count = 0
			for i=StartN, MaxN, Step do
				table.insert(SelColors, Palet[i])
				Count = Count + 1
				if Count == NEnd then
					break
				end	
			end
			if Count < NEnd then
				for i=1, MaxN, Step do
					table.insert(SelColors, Palet[i])
					Count = Count + 1
					if Count == NEnd then
						break
					end	
				end
			end	
		end	
		return SelColors
	end	
end --GetColors

function p.ColorNameInvStartFromS (S)
	local StartN = 1
	local ParamsA = {}
	local ColorName, IsInv
    ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)
	local PN = table.getn(ParamsA)
	if PN > 1 then
		if ParamsA[2]=='i' then
			IsInv = true
		else
			StartN = tonumber (ParamsA[2])
		end
		if PN == 3 then
			StartN = tonumber (ParamsA[3])
		end	
	end	
	return ColorName, IsInv, StartN			    	
end --ColorNameInvStartFromS

function ColorNameInv (args)
	local S = args[1] or ''
    local ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)
    local StartN = 1
	ColorName, IsInv, StartN = p.ColorNameInvStartFromS (S)
	return ColorName, IsInv, StartN			    	
end --ColorNameInv	

function p.ShowColors(frame)
	local args = ARG.getArgs(frame,{
		removeBlanks = false
	});
	local ColorName, IsInv, StartN = ColorNameInv (args)
	local N = tonum(args[2])
	local WriteColor = args[3] or ""
	local ColorFound = {}
	ColorFound = p.GetColors (ColorName, IsInv, StartN, N, true)
	local boxes = {}
	for i=1, table.getn(ColorFound) do
		table.insert(boxes, CFCM.Box(ColorFound[i],WriteColor))
	end	
	return table.concat(boxes, " ")
end --ShowColors

function p.Legends(frame)
	local args = ARG.getArgs(frame,{
		removeBlanks = false
	})
	local ColorName, IsInv, StartN = ColorNameInv (args)
	local N = tonumber(args[2])
	local ColWidth = args[3]
	local ColorFound = {}
	local Labels = {}
	local NLabels = 0
	local IsTemplate = true
	ColorFound = p.GetColors (ColorName, IsInv, StartN, N, true)
	Labels, NLabels, OutlineColor = CFCM.GetLabels (args, N, 4)
	return CFCM.LegendText (ColorFound, Labels, NLabels, ColWidth, IsTemplate, OutlineColor)
end	

return p