| Line 29: |
Line 29: |
| | | | |
| | local args_grammar = { | | local args_grammar = { |
| − | node = '^%s*(%a)%s*$', | + | node = '^%s*(%a)%s*$', |
| − | comma_list = '[^,]+', | + | comma_list = '[^,]+', |
| − | ship_and_nodes = '^%s*(.-)%s*:%s*(.-)%s*$', | + | ship_and_nodes = '^%s*(.-)%s*:%s*(.-)%s*$', |
| − | just_node = '^%s*(%a)%s*$', | + | just_node = '^%s*(%a)%s*$', |
| − | node_and_diff = '^%s*(%a)%s*/%s*(%S-)%s*$', | + | node_and_diff = '^%s*(%a)%s*/%s*(%S-)%s*$', |
| | + | node_diff_tooltip = '^%s*(%a)%s*/%s*(%S-)%s*{(.-)}%s*$', |
| | -- TODO: | | -- TODO: |
| | -- * Add battle ranks: | | -- * Add battle ranks: |
| Line 140: |
Line 141: |
| | row.nodes[node.name] = nil | | row.nodes[node.name] = nil |
| | end | | end |
| − | for node_and_diff in string.gmatch(nodes, args_grammar.comma_list) do | + | for node_arg in string.gmatch(nodes, args_grammar.comma_list) do |
| − | local node, diff = node_and_diff:match(args_grammar.node_and_diff) | + | local node, diff, tooltip = node_arg:match(args_grammar.node_diff_tooltip) |
| − | if not node or not diff then | + | if not node then |
| − | node = node_and_diff:match(args_grammar.just_node) | + | node, diff = node_arg:match(args_grammar.node_and_diff) |
| − | diff = nil
| |
| | end | | end |
| − | if node then | + | if not node then |
| | + | node = node_arg:match(args_grammar.just_node) |
| | + | end |
| | + | diff = diff_names[diff] and diff or '?' |
| | + | if node and diff then |
| | local node = string.upper(node) | | local node = string.upper(node) |
| | if row.nodes[node] then | | if row.nodes[node] then |
| Line 154: |
Line 158: |
| | else | | else |
| | row.nodes[node] = { | | row.nodes[node] = { |
| − | color = diff and diff_colors[diff] or diff_colors['?'], | + | color = diff_colors[diff], |
| − | diff = diff and diff_names[diff] or '?' | + | diff = diff_names[diff], |
| | + | tooltip = tooltip, |
| | } | | } |
| | end | | end |
| | else | | else |
| − | log('ship node syntax error', string.format('%s for %s', node_and_diff, ship)) | + | log('ship node syntax error', string.format('%s for %s', node_arg, ship)) |
| | end | | end |
| | end | | end |
| Line 177: |
Line 182: |
| | | | |
| | local table_format = { | | local table_format = { |
| − | header = '{| class="article-table sortable" align="center" width="100%" style="text-align:center;"\n!Type\n!Ship <sup>[[Template:DropList/doc|?]]</sup>\n', | + | header = '{| class="article-table sortable" align="center" width="100%" style="text-align:center;"\n!Type\n!<span style="border-bottom:1px dotted;">Ship<sup>[[Template:DropList/doc|?]]</sup></span>\n', |
| | header_node = '!${node}\n', | | header_node = '!${node}\n', |
| | header_boss_node = '!style="background-color:pink;color:red;"|\'\'\'${node}\'\'\'\n', | | header_boss_node = '!style="background-color:pink;color:red;"|\'\'\'${node}\'\'\'\n', |
| Line 214: |
Line 219: |
| | local node = row.nodes[node.name] | | local node = row.nodes[node.name] |
| | add(node and format{ | | add(node and format{ |
| − | table_format.node_cell, color = node.color, diff = node.diff | + | table_format.node_cell, color = node.color, diff = node.tooltip and Formatting:tooltip(node.diff, node.tooltip) or node.diff |
| | } or table_format.empty_cell) | | } or table_format.empty_cell) |
| | end | | end |
| Line 257: |
Line 262: |
| | return showTable(parseArgs(args)) | | return showTable(parseArgs(args)) |
| | end | | end |
| − |
| |
| − | -- DropList.test = DropList.show(nil, {nodes = "A,B,C", boss="A,B"})
| |
| | | | |
| | return DropList | | return DropList |