Jump to content

Module:Vertical header/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
use "cellAttributes" instead of "thAttributes"
sandybox
Line 1: Line 1:
local p = {}
local p = {}


local function escapeQuotes(text)
function p._vertical_header(args)
if not text then
local text = args.text
return nil
local maxWidth = args.maxWidth
end
-- local stupidIEAlign = ""
return text:gsub('"', """)
local rows = 1
end
local width = 0

if maxWidth ~= "" then
local function getRowCount(text)
width = maxWidth
if not text then
return 0
end
local _, count = text:gsub("<[bB][rR] */? *>", "%0")
return count + 1
end

local function getAttributeData(options)
local cellClasses = {"vertical-header", "nowrap"}
local cellStyles = {}
local divClasses = {}
local divStyles = {}

if options.sortPadding then
table.insert(cellClasses, "vertical-header-sortable")
else
else
for eachMatch in text:gmatch("<[bB][rR] */? *>") do
table.insert(cellClasses, "unsortable")
rows = rows + 1
end
width = rows * 0.875
width = width .. "em"
end
end
local wikiText = "class = \"nowrap"
if options.vertAlign == "top" then
local sortPadding = args.sortPadding
table.insert(cellClasses, "vertical-header-align-top")
elseif options.vertAlign == "middle" then
if sortPadding == "" then
wikiText = wikiText .. " unsortable"
table.insert(cellClasses, "vertical-header-align-middle")
end
end

local vertAlign = args.vertAlign
if options.manualWidth then
wikiText = wikiText .. "\" style=\"line-height:99%;vertical-align:" .. vertAlign .. ";padding:"
table.insert(cellStyles, "width:" .. options.manualWidth)
if sortPadding == "" then
wikiText = wikiText .. ".4em"
else
else
wikiText = wikiText .. "21px"
local rowCount = getRowCount(options.text)
-- The styles for 1 row are in the default vertical-header class. For
-- 2, 3, or 4 rows, we add special classes to get the correct width.
-- In the rare event that there are more than 4 rows, use inline styles.
if rowCount >= 2 and rowCount <= 4 then
table.insert(cellClasses, string.format("vertical-header-%drows", rowCount))
elseif rowCount > 4 then
table.insert(cellStyles, string.format("width:%.3fem", rowCount * 0.875))
end
end
end
wikiText = wikiText .. " .4em .2em;background-position:50% .4em !important;"
local cellStyle = args.cellstyle:gsub("\"", "&quot;")
if options.noBold then
wikiText = wikiText .. "min-width:" .. width .. ";max-width:" .. width .. ";width:" .. width .. ";overflow:hidden;" .. cellStyle .. "\""
table.insert(divClasses, "vertical-header-nobold")
wikiText = wikiText .. " | <div style=\"vertical-rl=-webkit-writing-mode: vertical-rl; -o-writing-mode: vertical-rl; -ms-writing-mode: tb-rl;writing-mode: tb-rl; writing-mode: vertical-rl; layout-flow: vertical-ideographic;transform:rotate(180deg);display:inline-block;padding-left:1px;text-align:"
end
local normalAlign = ""
table.insert(cellStyles, options.extraCellStyles)
if vertAlign == "top" then
table.insert(divStyles, options.extraDivStyles)
normalAlign = "right"

-- stupidIEAlign = "left"
return cellClasses, cellStyles, divClasses, divStyles
elseif vertAlign == "middle" then
end
normalAlign = "center"

-- stupidIEAlign = "center"
local function formatAttribute(options)
else
if #options.attrs == 0 then
normalAlign = "left"
return nil
-- stupidIEAlign = "right"
end
end
wikiText = wikiText .. normalAlign .. ";" -- text-align:" .. stupidIEAlign .. " \ ;"
local separator = options.separator or ""
return string.format(
local style = args.style:gsub("\"", "&quot;")
'%s="%s"',
wikiText = wikiText .. style .. "\">"
options.attrName,
table.concat(options.attrs, separator)
)
end

local function formatOutput(text, cellClasses, cellStyles, divClasses, divStyles)
cellAttributes = {}
table.insert(cellAttributes, formatAttribute{attrName = "class", attrs = cellClasses, separator = " "})
table.insert(cellAttributes, formatAttribute{attrName = "style", attrs = cellStyles})
local div = mw.html.create("div")
local noBold = args.noBold
if noBold == "" then
for _, class in ipairs(divClasses) do
wikiText = wikiText .. text
div:addClass(class)
else
wikiText = wikiText .. mw.getCurrentFrame():preprocess("{{nobold|1=" .. text .. "}}")
end
end
wikiText = wikiText .. "</div>"
for _, cssText in ipairs(divStyles) do
return wikiText
div:cssText(cssText)
end
div:wikitext(text)

return string.format(
"%s | %s",
table.concat(cellAttributes, " "),
tostring(div)
)
end

function p._cell(args)
local text = args[1]
local cellClasses, cellStyles, divClasses, divStyles = getAttributeData{
text = text,
sortPadding = args.stp,
vertAlign = args.va,
manualWidth = args.mw,
noBold = args.nb,
extraCellStyles = escapeQuotes(args.cellstyle),
extraDivStyles = escapeQuotes(args.style)
}
return formatOutput(text, cellClasses, cellStyles, divClasses, divStyles)
end
end


function p.cell(frame)
function p.cell(frame)
local args = require("Module:Arguments").getArgs(frame, {
local args = frame.args
return p._vertical_header(args)
wrapper="Template:Vertical header"
})
return p._cell(args)
end
end



Revision as of 02:33, 4 November 2022

local p = {}

function p._vertical_header(args)
	
	local text = args.text
	local maxWidth = args.maxWidth
	-- local stupidIEAlign = ""
	local rows = 1
	local width = 0
	if maxWidth ~= "" then
		width = maxWidth
	else
		for eachMatch in text:gmatch("<[bB][rR] */? *>") do
			rows = rows + 1
		end
		width = rows * 0.875
		width = width .. "em"
	end
	
	local wikiText = "class = \"nowrap"
	local sortPadding = args.sortPadding
	if sortPadding == "" then
		wikiText = wikiText .. " unsortable"
	end
	
	local vertAlign = args.vertAlign
	wikiText = wikiText .. "\" style=\"line-height:99%;vertical-align:" .. vertAlign .. ";padding:"
	if sortPadding == "" then
		wikiText = wikiText .. ".4em"
	else
		wikiText = wikiText .. "21px"
	end
	wikiText = wikiText .. " .4em .2em;background-position:50% .4em !important;"
	
	local cellStyle = args.cellstyle:gsub("\"", "&quot;")
	wikiText = wikiText .. "min-width:" .. width .. ";max-width:" .. width .. ";width:" .. width .. ";overflow:hidden;" .. cellStyle .. "\""
	wikiText = wikiText .. " | <div style=\"vertical-rl=-webkit-writing-mode: vertical-rl; -o-writing-mode: vertical-rl; -ms-writing-mode: tb-rl;writing-mode: tb-rl; writing-mode: vertical-rl; layout-flow: vertical-ideographic;transform:rotate(180deg);display:inline-block;padding-left:1px;text-align:"
	
	local normalAlign = ""
	if vertAlign == "top" then
		normalAlign = "right"
		-- stupidIEAlign = "left"
	elseif vertAlign == "middle" then
		normalAlign = "center"
		-- stupidIEAlign = "center"
	else
		normalAlign = "left"
		-- stupidIEAlign = "right"
	end
	wikiText = wikiText .. normalAlign .. ";" -- text-align:" .. stupidIEAlign .. " \ ;"
	
	local style = args.style:gsub("\"", "&quot;")
	wikiText = wikiText .. style .. "\">"
	
	local noBold = args.noBold
	if noBold == "" then
		wikiText = wikiText .. text
	else
		wikiText = wikiText .. mw.getCurrentFrame():preprocess("{{nobold|1=" .. text .. "}}")
	end
	wikiText = wikiText .. "</div>"
	return wikiText
end

function p.cell(frame)
	local args = frame.args
	return p._vertical_header(args)
end

return p