local p = {}
function p.stack(str, vertAlign, noBold)
local t = {}
local breakPattern = "<[bB][rR] */? *>"
local function splitLines(line)
table.insert(t, line)
return ""
end
splitLines((str:gsub("(.-)(" .. breakPattern .. ")", splitLines)))
for k, v in pairs(t) do
t[k] = (v
:gsub("([^'%[%]])", "%1<br>")
:gsub("'([^'])", "'<br>%1")
:gsub("(''+)<br>", "%1")
:gsub("(%[%[+)<br>", "%1")
:gsub("<br>(%]+)", "%1<br>")
:gsub("%[%[([^%[%]]+)%]%]", function(n)
local inBrackets = n
local stripped = ""
if inBrackets:find("%|") == nil then
inBrackets = inBrackets:gsub("<br>", "") .. "|" .. inBrackets
stripped = inBrackets:match("^[^%|]+%|"):gsub("<br>", "")
inBrackets = stripped .. inBrackets:gsub("^[^%|]+%|<br>", "")
end
return "[[" .. inBrackets .. "]]"
end)
:gsub("<br>$", "")
)
end
if #t == 1 then return t[1] end
local dom1 = mw.html.create("tr")
if noBold ~= "" then dom1:css("font-weight", "normal") end
local dom2
for _, v in pairs(t) do
dom1:wikitext(
tostring(
mw.html.create("td")
:css({
["border"] = "none",
["padding"] = 0,
["vertical-align"] = vertAlign
})
:wikitext(v)
)
)
end
dom2 = mw.html.create("table")
:wikitext(tostring(dom1))
:css({
["margin"] = "auto",
["border-collapse"] = "collapse",
["vertical-align"] = "inherit"
})
:attr({cellspacing = 0, cellpadding = 0})
return tostring(dom2)
end
function p.cell(frame)
local noBold = frame.args.noBold
local style = frame.args.style
local cellStyle = frame.args.cellstyle:gsub("\"", """)
local wikiText = "class = \"nowrap"
local normalAlign = ""
-- local stupidIEAlign = ""
local stack = frame.args.stack
local breakPattern = "<[bB][rR] */? *>"
local rows = 1
local width = 0
width = maxWidth
else
for eachMatch in text:gmatch(breakPattern"<[bB][rR] */? *>") do
rows = rows + 1
end
wikiText = wikiText .. " unsortable"
end
wikiText = wikiText .. "\" style=\"line-height:99%;vertical-align:" .. vertAlign .. ";padding:"
vertAlign .. ";padding:"
if sortPadding == "" then
wikiText = wikiText .. ".4em"
end
wikiText = wikiText .. " .4em .2em;background-position:50% .4em !important;"
wikiText = wikiText .. "min-width:" .. width .. ";max-width:" .. width .. ";width:" .. width .. ";overflow:hidden;" .. cellStyle .. "\""
wikiText = wikiText .. "min-width: | <div style=\"" .. widthframe:preprocess("{{writing-mode|v1}}{{Transform-rotate|180}}") .. ";max-widthms-transform:" ..none width\ ..;padding-left:1px;text-align:"
▲ if stackvertAlign == " top" then
";width:" .. width .. ";overflow:hidden\""
-- stupidIEAlign = "left" ▼
elseif vertAlign == "middle" then ▼
-- stupidIEAlign = "center" ▼
-- stupidIEAlign = "right" ▼
end
wikiText = wikiText .. normalAlign .. ";" |-- <divtext-align:" .. stupidIEAlign .. style=\" \ ;"
if stack == "" then
wikiText = wikiText .. frame:preprocess("{{writing-mode|v1}}{{Transform-rotate|180}}") ..
"-ms-transform: none \ ;padding-left:1px;"
if vertAlign == "top" then
▲ -- stupidIEAlign = "left"
▲ elseif vertAlign == "middle" then
▲ -- stupidIEAlign = "center"
else
▲ -- stupidIEAlign = "right"
end
else normalAlign = "center"
end
wikiText = wikiText .. "text-align:" .. normalAlign .. ";" -- text-align:" .. stupidIEAlign .. " \ ;"
wikiText = wikiText .. style .. "\">"
local textToAdd = text
if stack ~= "" then
textToAdd = p.stack(text, vertAlign, noBold)
end
if noBold == "" then
wikiText = wikiText .. textToAddtext
else
wikiText = wikiText .. frame:preprocess("{{nobold|1=" .. textToAddtext .. "}}")
end
wikiText = wikiText .. "</div>"
|