Module:ComplForColorModules

local p = {}

local SA = require "Module:SimpleArgs" local TNTT = require "Module:TNTTools"

local I18n = 'ComplForColorModules'

--local MoreOneNoData = "Found 2 legends of \"Value not assigned\" or \"Data not available\"" --local FoundNLegendsExpectedN = "Found $1 legends, expected $2" --local Color = "Color" --local Legend = "legend"

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

function p.ColorNameInvFromS0 (S) local IsInv = false local ColorName = '' local Params = {} if S ~= '' then for w in S:gmatch("([^_]+)") do 	   	table.insert(Params, w)		end ColorName = Params[1] end local PN = table.getn(Params) if (PN == 2) and (Params[2]=='i') then IsInv = true end return ColorName, IsInv, Params end

function p.ColorNameInv (args) local S = SA.RStr_Par (args, 1) local ColorName, IsInv, Params = p.ColorNameInvFromS0 (S) return ColorName, IsInv end

function p.GetLabels(Args, NArgs, N, Pos) local Labels, NLabels = SA.StrTab_NPar (Args, NArgs, Pos) local OutlineColor = Args['outline'] or '' if (NLabels ~= 0) and (NLabels ~= N) then function NoDataFound (i) if string.sub(Labels[i],1,2) == '--' then return 1 else return 0 end end local NoDataFoundCount = NoDataFound (1) NoDataFoundCount = NoDataFoundCount + NoDataFound (NLabels) if NoDataFoundCount == 2 then error (I18nStr ('MoreOneNoData')) else N = N + NoDataFoundCount end if (NLabels ~= 0) and (NLabels ~= N) then error (I18nStr ('FoundNLegendsExpectedN', tostring(NLabels), tostring(N))) else return Labels, NLabels, OutlineColor end else return Labels, NLabels, OutlineColor end end

function SColor (Color) if string.sub(Color,1,1) == '#' then --the usual return string.sub(Color,2,100) else return Color end end

function p.Box(Color,WriteColor) if WriteColor == '-' then WriteColor = Color elseif WriteColor == 'a' then WriteColor = Color..'ff' --Alpha channel end local TheBox = '  ' if WriteColor ~='' then TheBox = TheBox..' '..WriteColor..' ' end return TheBox end

function p.TextWithTooltip (Text, Tooltip) if Tooltip ~= '' then return ' '..Text..' ' else return Text end end

function p.LegendColor(Color, Text, Tooltip) if Text == '' then Text = SColor(Color) end return ' '..p.TextWithTooltip(Text,Tooltip)..'' end

function LegendCode(Color, Text, OutlineColor) local SOutlineColor = '' if OutlineColor ~= '' then SOutlineColor = '|outline='..OutlineColor end return '' end

function p.LegendText (AColors, Labels, NLabels, ColWidth, IsTemplate, OutlineColor) ColWidth = mw.text.trim(ColWidth) if ColWidth and #ColWidth == 0 then ColWidth = nil end function NoDataFound (i) if string.sub(Labels[i],1,2) == '--' then return true else return false end end local Show, Codes = {}, {} local Text = '' local WithLabels = NLabels > 0 if WithLabels then function DelBegin (i) Labels[i] = string.sub(Labels[i], 3, 1000) end local Gray = '#b3b3b3' -- A 40% gray if NoDataFound(1) then table.insert(AColors, 1, Gray) DelBegin(1) elseif NoDataFound(NLabels) then table.insert(AColors, Gray) DelBegin(NLabels) end end for i=1, table.getn(AColors) do		if WithLabels then Text = Labels[i] end table.insert(Show, p.LegendColor(AColors[i],Text,'')) end SShow = table.concat(Show,"\n") if ColWidth then local frame = mw.getCurrentFrame SShow = frame:expandTemplate{title="div col",args={colwidth=ColWidth}} .. SShow SShow = SShow .. frame:expandTemplate{title="div col end"} end for i=1, table.getn(AColors) do		if WithLabels then Text = Labels[i] end table.insert(Codes, ' '..LegendCode(AColors[i],Text,OutlineColor)) end local SCodes = ' \n' if ColWidth then SCodes = SCodes .. require("Module:Template invocation").invocation("div col",{colwidth=ColWidth}) .. "\n" end SCodes = SCodes .. table.concat(Codes,"\n") if ColWidth and #ColWidth ~= 0 then SCodes = SCodes .. "\n" end SCodes = SCodes .. "\n " return SShow..'\n'..SCodes end

return p