Changes

no edit summary
Line 10: Line 10:  
         comma_list = "[^,]+",
 
         comma_list = "[^,]+",
 
         node_and_color = "^%s*(%a)%s*/%s*(%S+)%s*$",
 
         node_and_color = "^%s*(%a)%s*/%s*(%S+)%s*$",
 +
        node_and_color2 = "^%s*(%a)%s*/%s*(%S+)%s*/%s*(%S+)%s*$",
 
         node = "^%s*([%a%d])%s*$",
 
         node = "^%s*([%a%d])%s*$",
 
         digit_node = "^%s*%d%s*$",
 
         digit_node = "^%s*%d%s*$",
Line 40: Line 41:  
     -- .kcRoute is defined in MediaWiki:Common.css
 
     -- .kcRoute is defined in MediaWiki:Common.css
 
     _node_template = [[<div class="kcRoute" style="vertical-align:middle"><div class="kcRouteNode" style="background:${color};">${label}</div></div>]],
 
     _node_template = [[<div class="kcRoute" style="vertical-align:middle"><div class="kcRouteNode" style="background:${color};">${label}</div></div>]],
 +
 +
    _node_color2 = [[linear-gradient(90deg, ${color1} 50%, ${color2} 50%)]],
    
     _node_colors = {
 
     _node_colors = {
Line 60: Line 63:  
     end
 
     end
 
     self._vars.log = self._vars.log .. str .. "\n"
 
     self._vars.log = self._vars.log .. str .. "\n"
 +
end
 +
 +
function MapBranchingTable:parse_node(node_string)
 +
    local node, color1, color2 = node_string:match(self._grammar.node_and_color2)
 +
    if not node then
 +
        node, color1 = node_string:match(self._grammar.node_and_color)
 +
    end
 +
    if not node then
 +
        node = node_string:match(self._grammar.node)
 +
    end
 +
    return node, color1, color2
 
end
 
end
   Line 75: Line 89:  
             local from_node, to_nodes = route:match(self._grammar.split)
 
             local from_node, to_nodes = route:match(self._grammar.split)
 
             if from_node and to_nodes then
 
             if from_node and to_nodes then
                 local from_node_, from_node_color = from_node:match(self._grammar.node_and_color)
+
                 local from_node_color1, from_node_color2
                 from_node = from_node_color and from_node_ or from_node:match(self._grammar.node)
+
                 from_node, from_node_color1, from_node_color2 = self:parse_node(from_node)
 
                 local first_node = nil
 
                 local first_node = nil
 
                 for to_node in string.gmatch(to_nodes, self._grammar.comma_list) do
 
                 for to_node in string.gmatch(to_nodes, self._grammar.comma_list) do
                     local to_node_, to_node_color = to_node:match(self._grammar.node_and_color)
+
                     local to_node_color1, to_node_colo2
                     to_node = to_node_color and to_node_ or to_node:match(self._grammar.node)
+
                     to_node, to_node_color1, to_node_color2 = self:parse_node(to_node)
 
                     if from_node and to_node then
 
                     if from_node and to_node then
 
                         if not Utils.find(branching.index, from_node) then
 
                         if not Utils.find(branching.index, from_node) then
Line 86: Line 100:  
                         end
 
                         end
 
                         if not branching[from_node] then
 
                         if not branching[from_node] then
                             branching[from_node] = { color = from_node_color, index = {} }
+
                             branching[from_node] = { color = from_node_color1, color2 = from_node_color2, index = {} }
 
                         end
 
                         end
 
                         if not first_node then
 
                         if not first_node then
 
                         first_node = to_node
 
                         first_node = to_node
                         branching[from_node][to_node] = { color = to_node_color, rules = rules, span = 1 }
+
                         branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2, rules = rules, span = 1 }
 
                         else
 
                         else
 
                         branching[from_node][first_node].span = branching[from_node][first_node].span + 1
 
                         branching[from_node][first_node].span = branching[from_node][first_node].span + 1
                         branching[from_node][to_node] = { color = to_node_color }
+
                         branching[from_node][to_node] = { color = to_node_color1, color2 = to_node_color2 }
 
                         end
 
                         end
 
                         if not Utils.find(branching[from_node].index, to_node) then
 
                         if not Utils.find(branching[from_node].index, to_node) then
Line 126: Line 140:  
end
 
end
   −
function MapBranchingTable:format_node(label, color)
+
function MapBranchingTable:format_node(label, color, color2)
 
     return label == "0" and self._start or format{
 
     return label == "0" and self._start or format{
 
         self._node_template,
 
         self._node_template,
Line 132: Line 146:  
         color = label:match(self._grammar.digit_node)
 
         color = label:match(self._grammar.digit_node)
 
             and self._node_colors.grey
 
             and self._node_colors.grey
 +
            or color2
 +
            and (format {
 +
                self._node_color2,
 +
                color1 = self._node_colors[color] or color or self._node_colors.battle,
 +
                color2 = self._node_colors[color2] or color2 or self._node_colors.battle,
 +
            })
 
             or self._node_colors[color]
 
             or self._node_colors[color]
 
             or color
 
             or color
Line 145: Line 165:  
             self._row_start_template,
 
             self._row_start_template,
 
             rowspan = #branching[from_node].index,
 
             rowspan = #branching[from_node].index,
             from = self:format_node(from_node, branching[from_node].color),
+
             from = self:format_node(from_node, branching[from_node].color, branching[from_node].color2),
 
             id = self._vars.id,
 
             id = self._vars.id,
 
         })
 
         })
Line 153: Line 173:  
                 self._row_template,
 
                 self._row_template,
 
                 separator = first and "" or format{self._row_separator_template, id = self._vars.id},
 
                 separator = first and "" or format{self._row_separator_template, id = self._vars.id},
                 to = self:format_node(to_node, branching[from_node][to_node].color),
+
                 to = self:format_node(to_node, branching[from_node][to_node].color, branching[from_node][to_node].color2),
 
                 rules = branching[from_node][to_node].rules and format{
 
                 rules = branching[from_node][to_node].rules and format{
 
                     self._rules,
 
                     self._rules,
Line 177: Line 197:  
end
 
end
   −
--[[
+
-- [[Category:Todo]]: make Module:Test maybe
MapBranchingTable.t = MapBranchingTable.Table(nil, {
+
function MapBranchingTable:tests()
    ["0 -> 1"] = "Fixed route",
+
    return MapBranchingTable.Table(nil, {
    ["1 -> A, B/battle, C/empty"] = "Random",
+
        ["0 -> 1"] = "Fixed route",
    ["C -> F, G"] = "...",
+
        ["1 -> A, B/battle, C/empty"] = "Random",
    ["B -> D, E"] = "...",
+
        ["C -> F, G/battle/empty"] = "...",
    ["title"] = "A Custom Title",
+
        ["B -> D, E"] = "...",
    ["order"] = "C, B",
+
        ["title"] = "A Custom Title",
    "?",
+
        ["order"] = "C, B",
})
+
        "?",
--print(p.t)
+
    }) .. "\n" .. (self._vars.log or "")
--print(p._vars.log)
+
end
]]--
+
-- print(p:tests())
    
return MapBranchingTable
 
return MapBranchingTable
cssedit, gkautomate
7,064

edits