Jump to content

Module:ComplForColorModules/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Remove first usage of Module:SimpleArgs
Replace usage of Module:SimpleArgs, clean out confusing nested functions
Line 1: Line 1:
local p = {}
local p = {}


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


Line 37: Line 36:
end
end


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


Line 114: Line 109:
ColWidth = nil
ColWidth = nil
end
end
function NoDataFound (i)
if string.sub(Labels[i],1,2) == '--' then
return true
else
return false
end
end
local Show, Codes = {}, {}
local Show, Codes = {}, {}
local Text = ''
local Text = ''
local WithLabels = NLabels > 0
local WithLabels = NLabels > 0
if WithLabels then
if WithLabels then
function DelBegin (i)
Labels[i] = string.sub(Labels[i], 3, 1000)
end
local Gray = '#b3b3b3' -- A 40% gray
local Gray = '#b3b3b3' -- A 40% gray
if NoDataFound(1) then
if string.sub(Labels[1],1,2) == '--' then
table.insert(AColors, 1, Gray)
table.insert(AColors, 1, Gray)
Labels[1] = string.sub(Labels[1], 3, 1000)
DelBegin(1)
elseif NoDataFound(NLabels) then
elseif string.sub(Labels[NLabels],1,2) == '--' then
table.insert(AColors, Gray)
table.insert(AColors, Gray)
DelBegin(NLabels)
Labels[NLabels] = string.sub(Labels[NLabels], 3, 1000)
end
end
end
end

Revision as of 23:09, 9 December 2019

local p = {}

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.GetSTransWithParams (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 ColorName, IsInv, Params = p.ColorNameInvFromS0(args[1])
	return ColorName, IsInv			    	
end	

function p.GetLabels(Args, N, Pos)
    local Labels = {}
    local index = Pos
    while args[index] do
    	Labels[#Labels] = args[index]
    	index = index + 1
    end
    local NLabels = #Labels
    local OutlineColor = Args['outline'] or ''
    if (NLabels ~= 0) and (NLabels ~= N) then
    	local StartUnknown = (string.sub(Labels[1],1,2) == "--")
    	local EndUnknown = (string.sub(Labels[NLabels],1,2) == "--")
    	if StartUnknown and EndUnknown then
	    	error (I18nStr ('MoreOneNoData'))
    	elseif StartUnknown or EndUnknown then
    		N = N + 1
    	end	
		if (NLabels ~= 0) and (NLabels ~= N) then
	    	error (I18nStr ('FoundNLegendsExpectedN', tostring(NLabels), tostring(N)))
	    end
	end
    return Labels, NLabels, OutlineColor
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 = '<span style="background-color:'..Color..'; border:1px solid gray;" title="'..TNTT.GetSTransWithParams(I18n,'Color')..': '..SColor(Color)..'">&nbsp;&nbsp;&nbsp;</span>'	
	if WriteColor ~='' then 
		TheBox = TheBox..'&nbsp;'..WriteColor..' &nbsp;'
	end	
	return TheBox
end	

function p.TextWithTooltip (Text, Tooltip)
	if Tooltip ~= '' then
		return '<span title="'..Tooltip..'">'..Text..'</span>'
	else
		return Text
	end	
end	

function p.LegendColor(Color, Text, Tooltip)
	if Text == '' then
		Text = SColor(Color)
	end	
	return '<li style="list-style-type: none; list-style-image: none;"><span style="border:1px solid gray; background:'..Color..'; margin-right:0.3em; vertical-align: middle; webkit-print-color-adjust:exact; color-adjust:exact; display:inline-block; width:1.05em; height:1em;"></span>'..p.TextWithTooltip(Text,Tooltip)..'</li>'
end	

function LegendCode(Color, Text, OutlineColor)
	local SOutlineColor = ''
	if OutlineColor ~= '' then
		SOutlineColor = '|outline='..OutlineColor
	end	
	return '{{'..TNTT.GetSTransWithParams(I18n,'Legend')..'|'..Color..'|'..Text..SOutlineColor..'}}'
end	

function p.LegendText (AColors, Labels, NLabels, ColWidth, IsTemplate, OutlineColor)
	ColWidth = mw.text.trim(ColWidth)
	if ColWidth and #ColWidth == 0 then
		ColWidth = nil
	end
	local Show, Codes = {}, {}
	local Text = ''
	local WithLabels = NLabels > 0
	if WithLabels then
		local Gray = '#b3b3b3' -- A 40% gray
		if string.sub(Labels[1],1,2) == '--' then
			table.insert(AColors, 1, Gray) 
			Labels[1] = string.sub(Labels[1], 3, 1000)
		elseif string.sub(Labels[NLabels],1,2) == '--' then
			table.insert(AColors, Gray) 
			Labels[NLabels] = string.sub(Labels[NLabels], 3, 1000)
		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 = '<pre>\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{{div col end}}"
	end
	SCodes = SCodes .. "\n</pre>"
	return SShow..'\n'..SCodes
end	

return p