Line 5: |
Line 5: |
| local templates = { | | local templates = { |
| | | |
| + | -- .branching-table is defined in MediaWiki:Common.css |
| table_header = [[{| class="wikitable typography-xl-optout branching-table" style="width:${width};" | | table_header = [[{| class="wikitable typography-xl-optout branching-table" style="width:${width};" |
| |- class="mw-customtoggle-${id}" style="cursor:pointer;" | | |- class="mw-customtoggle-${id}" style="cursor:pointer;" |
Line 16: |
Line 17: |
| |rowspan="${rowspan}" style="text-align:center;vertical-align:middle;width:10%"|${from}]], | | |rowspan="${rowspan}" style="text-align:center;vertical-align:middle;width:10%"|${from}]], |
| | | |
− | row_separator = [[|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-${id}" | + | table_row_separator = [[|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-${id}" |
| ]], | | ]], |
| | | |
Line 23: |
Line 24: |
| ${rules}]], | | ${rules}]], |
| | | |
− | battle_node_label = [[<div class="kcRoute" style="vertical-align:middle"><div class="kcRouteNode" style="background:${color};">${label}</div></div>]], | + | -- .kcRoute is defined in MediaWiki:Common.css |
| + | node = [[<div class="kcRoute" style="vertical-align:middle"><div class="kcRouteNode" style="background:${color};">${label}</div></div>]], |
| | | |
| } | | } |
Line 35: |
Line 37: |
| } | | } |
| | | |
− | local special_parameters = { "width", "id" }
| + | function formatNode(label, color) |
| + | return label == "0" and "'''Start'''" or format{ |
| + | templates.node, |
| + | label = label, |
| + | color = label:match("^%d$") and node_colors.grey or node_colors[color] or color or node_colors.battle |
| + | } |
| + | end |
| | | |
− | function formatNodeLabel(label, color) | + | -- not supporting unique ids for now |
− | if label == "0" then | + | function defaultId(args) |
− | return "'''Start'''"
| + | return "mapbranchingtable" |
− | elseif label:match("%d") then
| |
− | return format{templates.battle_node_label, label = label, color = node_colors.grey}
| |
− | else
| |
− | return format{templates.battle_node_label, label = label, color = node_colors[color] or color or node_colors.battle}
| |
− | end
| |
| end | | end |
| | | |
| function formatTable(args) | | function formatTable(args) |
− | local branching = { index = {}, } | + | local branching = { index = {} } |
| for route, rules in pairs(args) do | | for route, rules in pairs(args) do |
− | if not find(special_parameters, route) then | + | local from, to = route:match("^(%S+)%s*->%s*(%S+)$") |
− | local from, to = route:match("(%S+)%s*->%s*(%S+)")
| + | if from and to then |
− | local from_color = from:match("%S+/(%S+)") | + | local from_color = from:match("^%S+/(%S+)$") |
− | local to_color = to:match("%S+/(%S+)") | + | local to_color = to:match("^%S+/(%S+)$") |
− | from = from_color and from:match("(%S+)/") or from | + | from = from_color and from:match("^(%S+)/") or from |
− | to = to_color and to:match("(%S+)/") or to | + | to = to_color and to:match("^(%S+)/") or to |
| if not find(branching.index, from) then | | if not find(branching.index, from) then |
| table.insert(branching.index, from) | | table.insert(branching.index, from) |
Line 72: |
Line 75: |
| table.sort(branching[from].index) | | table.sort(branching[from].index) |
| end | | end |
− | local id = args.id or "mapbranchingtable" | + | local id = args.id or defaultId(args) |
| local rows = {} | | local rows = {} |
| table.insert(rows, format{ | | table.insert(rows, format{ |
| templates.table_header, | | templates.table_header, |
− | width = args.width or "100%", | + | width = args.width or "auto", |
| id = id, | | id = id, |
| }) | | }) |
Line 83: |
Line 86: |
| templates.table_row_start, | | templates.table_row_start, |
| rowspan = #branching[from].index, | | rowspan = #branching[from].index, |
− | from = formatNodeLabel(from, branching[from].color), | + | from = formatNode(from, branching[from].color), |
| id = id, | | id = id, |
| }) | | }) |
Line 90: |
Line 93: |
| table.insert(rows, format{ | | table.insert(rows, format{ |
| templates.table_row, | | templates.table_row, |
− | separator = first and "" or format{templates.row_separator, id = id}, | + | separator = first and "" or format{templates.table_row_separator, id = id}, |
− | to = formatNodeLabel(to, branching[from][to].color), | + | to = formatNode(to, branching[from][to].color), |
| rules = branching[from][to].rules, | | rules = branching[from][to].rules, |
| id = id, | | id = id, |