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:Clade/labels

Permanently protected module
From Wikipedia, the free encyclopedia

local p = {}

--local args =frame:getParent().args  -- get parent arguments
--local args = {}

p.getArgs = function(frame) 
	--return frame.args              -- use frame arguments
	return frame:getParent().args  -- use parent arguments
end
p.main = function(frame)
     
    args = p.getArgs(frame) 
    
    local i = 1                     -- index for labels
    local output = ""
    --[[local groupStyle = args['style']
    local topStyle = args['top']
    local leftStyle = args['left']
    local rightStyle = args['right']
    local bottomStyle = args['bottom']
    ]]
    -- parameters for all labels
    local width = args['width'] -- or "5em;"
    --local style = args['style'] or ""
    --local color = args['width'] or ""
    
    local longestString = 0
    
    while  args['label'..i] do
    	
	    local label = args['label'..i]     or ""
	    if #label > longestString then longestString = #label end
	    
	    local style  = args['style'..i]  or args['style']  or ""  
	    local color  = args['color'..i]  or args['color']  or ""  
	    local top    = args['top'..i]    or args['top']    or ""
	    local left   = args['left'..i]   or args['left']   or ""
	    local right  = args['right'..i]  or args['right']  or ""
	    local bottom = args['bottom'..i] or args['bottom'] or ""
	    if top ~= ""    then top    = 'top:'     .. top    .. ';' end  
	    if left ~= ""   then left   = 'left:'    .. left   .. ';' end  
	    if right ~= ""  then right  = 'right:'   .. right  .. ';' end  
	    if bottom ~= "" then bottom = 'bottom:'  .. bottom .. ';' end 
	    if color ~= ""  then color  = 'color:'   .. color .. ';' end
	    --if no color:find(";", -1, true)  then color = color .. ';' end
	   
	    
	    --local position = top .. left .. right .. bottom
	    
		output = output .. '<div style="position:absolute;white-space:nowrap;' 
		                .. style .. color                                       -- CSS styling
		                .. top .. left .. right .. bottom .. '">'               -- position of label
		                .. label                                                -- content of label
		                .. '</div>'
		i=i+1
	end
	if output ~= "" then
		local styleStr = ""
		--widthStr = 'width:' .. (longestString*0.5)..'em;' -- can't take account of formatting or <br/>
		if width then styleStr = 'style="width:' .. width .. '"' end
 		
		output = '<div ' .. styleStr ..'>' .. output .. '</div>'
	end
	return output
end

p.label = function(frame)
      
    args = p.getArgs(frame) 
    
    local i = 1                     -- index for labels
    local output = ""
    local label = args['label'..i] or  args['label'] or args[1]   or ""
    local width = args['width']
    
	    local style  = args['style'..i]  or args['style']  or ""  
	    local color  = args['color'..i]  or args['color']  or ""  
	    local top    = args['top'..i]    or args['top']    or "-1em"  --  to compensate for CSS :before {content:"\2060";} on the sublabel
	    local left   = args['left'..i]   or args['left']   or ""
	    local right  = args['right'..i]  or args['right']  or "0px"
	    local bottom = args['bottom'..i] or args['bottom'] or ""
	    if top ~= ""    then top    = 'top:'     .. top    .. ';' end  
	    if left ~= ""   then left   = 'left:'    .. left   .. ';' end  
	    if right ~= ""  then right  = 'right:'   .. right  .. ';' end  
	    if bottom ~= "" then bottom = 'bottom:'  .. bottom .. ';' end 
	    if color ~= ""  then color  = 'color:'   .. color .. ';' end
 
		output = output .. '<div style="position:absolute;white-space:nowrap;' 
		                .. style .. color                                       -- CSS styling
		                .. top .. left .. right .. bottom .. '">'               -- position of label
		                .. label                                                -- content of label
		                .. '</div>'


	if output ~= "" then
		local widthStr = ''
		if width then widthStr = 'width:' .. width .. ';' end
 		
		output = '<div style="position:relative;' .. widthStr .. '">' .. output .. '</div>' -- <br/> removed now using CSS :before {content:"\2060";} for the sublabel
	end
        
    return output
    
end


return p