Module:Vertical header/sandbox: Difference between revisions
Appearance
Content deleted Content added
use "cellAttributes" instead of "thAttributes" |
sandybox |
||
Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
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") |
|||
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("\"", """) |
|||
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("\"", """) |
|||
'%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 |
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 = |
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
![]() | This is the module sandbox page for Module:Vertical header (diff). |
![]() | This module uses TemplateStyles: |
Implements {{Vertical header}}
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("\"", """)
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("\"", """)
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