Module:MOS modes: Difference between revisions
m Added limit of 3 supplementary columns |
Update comments, code |
||
| Line 9: | Line 9: | ||
-- TODO: | -- TODO: | ||
-- - Add ability to autocollapse on large mos pages (say, more than 12 modes) | -- - Add ability to autocollapse on large mos pages (say, more than 12 modes) | ||
-- "Main" function | -- "Main" function | ||
| Line 15: | Line 14: | ||
function p._mos_modes(input_mos, mode_names, headers, entries, is_collapsed) | function p._mos_modes(input_mos, mode_names, headers, entries, is_collapsed) | ||
local is_collapsed = is_collapsed == true | local is_collapsed = is_collapsed == true | ||
local input_mos = input_mos or mos.new(5,2) | |||
local mode_names = mode_names or {} | |||
local headers = headers or {} | |||
local entries = entries or {} | |||
-- | -- Get UDPs and CPOs | ||
local | local udps = tamnams.mos_mode_udps(input_mos) | ||
local cpos = tamnams.mos_mode_cpos(input_mos) | |||
local | |||
-- Get the mos's modes | -- Get the mos's modes | ||
local mos_modes = mos.modes_by_brightness(input_mos) | local mos_modes = mos.modes_by_brightness(input_mos) | ||
-- | -- Check whether to add mode names | ||
local add_mode_names = #mode_names == #mos_modes | |||
local | |||
-- | -- Check whether the number of headers times the number of modes equals the | ||
-- | -- number of entries. Supplementary info can only be added if this condition | ||
-- is | -- is met. Limited to 3 columns of supplementary info. | ||
local add_columns = #headers > 0 and #entries > 0 | local add_columns = #headers > 0 and #entries > 0 | ||
if add_columns then | if add_columns then | ||
| Line 41: | Line 37: | ||
end | end | ||
-- | -- Headers | ||
local result = "{| class=\"wikitable sortable mw-collapsible" .. (is_collapsed and " mw-collapsed\"\n" or "\"\n") | local result = "{| class=\"wikitable sortable mw-collapsible" .. (is_collapsed and " mw-collapsed\"\n" or "\"\n") | ||
.. "|+ style=\"font-size: 105%;\" | Modes of " .. mos.as_string(input_mos) .. "\n" | .. "|+ style=\"font-size: 105%;\" | Modes of " .. mos.as_string(input_mos) .. "\n" | ||
.. "|-\n" | .. "|-\n" | ||
.. "! [[UDP]] !! Rotational order !! Step pattern" | .. "! [[UDP]] !! Rotational order !! Step pattern" | ||
-- | -- Add header for mode names, if provided. | ||
if | if add_mode_names then | ||
result = result .. " !! class=\"unsortable\" | Mode names" | result = result .. " !! class=\"unsortable\" | Mode names" | ||
end | end | ||
-- Add | -- Add column headers for supplementary info, if provided. | ||
if add_columns then | if add_columns then | ||
for i = 1, #headers do | for i = 1, #headers do | ||
| Line 68: | Line 58: | ||
-- Enter each row | -- Enter each row | ||
for i = 1, #mos_modes do | for i = 1, #mos_modes do | ||
result = result .. "|-\n" | result = result .. "|-\n" | ||
-- Add the UDP | -- Add the UDP and brightness order | ||
result = result .. "| " .. | result = result .. "| " .. udps[i] | ||
result = result .. " || " .. cpos[i] | |||
result = result .. " || " .. | |||
-- Add the mode's step pattern | -- Add the mode's step pattern | ||
| Line 86: | Line 69: | ||
-- Add the mode's name, if given | -- Add the mode's name, if given | ||
if | if add_mode_names then | ||
result = result .. " || " .. mode_names[i] | result = result .. " || " .. mode_names[i] | ||
end | end | ||
| Line 107: | Line 90: | ||
-- Wrapper function; to be called by template | -- Wrapper function; to be called by template | ||
function p.modes_table(frame) | function p.modes_table(frame) | ||
local scale_sig = frame.args["Scale Signature"] or "5L 2s" | local scale_sig = frame.args["Scale Signature"] or "5L 2s" | ||
local input_mos = mos.parse(scale_sig) | local input_mos = mos.parse(scale_sig) | ||
| Line 132: | Line 114: | ||
end | end | ||
-- | -- Get supplementary info | ||
local headers_unparsed = frame.args["Table Headers"] | local headers_unparsed = frame.args["Table Headers"] | ||
local headers = tip.parse_entries(headers_unparsed) | local headers = tip.parse_entries(headers_unparsed) | ||