Line 4: |
Line 4: |
| -- Remi_Scarlet | | -- Remi_Scarlet |
| -- I fucking hate lua. | | -- I fucking hate lua. |
| + | |
| + | -- 10/24/15 Added colorful blue button thing |
| + | -- 5/5/16 Added multiple start location support |
| | | |
| local remiLib = require("Module:RemiLib") | | local remiLib = require("Module:RemiLib") |
| | | |
− | function p.renderBranchingTable(graph) | + | function p.renderBranchingTable(graph, collapsed) |
| + | |
| + | local uniqueID = remiLib.timeHash(graph) |
| + | local classString = "mw-customtoggle-" .. tostring(uniqueID) |
| + | local idString = "mw-customcollapsible-" .. tostring(uniqueID) |
| + | |
| + | local button = mw.html.create('div') |
| + | button |
| + | :addClass(classString) |
| + | :addClass("globalbutton") |
| + | :wikitext("Show/Hide Branching Rules") |
| + | |
| local body = mw.html.create("table") | | local body = mw.html.create("table") |
− | body:addClass("wikitable") | + | body |
| + | :addClass("mw-collapsible") |
| + | :addClass("wikitable") |
| + | :addClass("mw-collapsed") |
| + | :attr("id",idString) |
| + | :css("width","300px") |
| + | |
| local titleRow = mw.html.create("tr") | | local titleRow = mw.html.create("tr") |
| local th = mw.html.create("th") | | local th = mw.html.create("th") |
| th | | th |
| :attr("colspan",3) -- "from" node, "to" node, requirement text | | :attr("colspan",3) -- "from" node, "to" node, requirement text |
− | :wikitext("Branching Rules for Maps") | + | :wikitext("Branching Rules") |
| :css("font-weight","bold") | | :css("font-weight","bold") |
| :css("text-align","center") | | :css("text-align","center") |
Line 50: |
Line 70: |
| -- toTable is a table of all the to's | | -- toTable is a table of all the to's |
| -- | | -- |
− | local possibleStarts = remiLib.mergeArrays({"START"},remiLib.uppercase) | + | local possibleNodes = remiLib.mergeArrays({"START", "START-1", "START-2", |
− | for _,from in pairs(possibleStarts) do | + | "START-3", "START-4", "START-5"} |
| + | ,remiLib.uppercase) |
| + | -- 5/5/16 |
| + | -- Since multiple start paths are possible (Eg, starting from two different places) |
| + | -- adding the ability to specify multiple start points. Assuming no more than 5 start points ever lol. |
| + | -- Yeah yeah I get that it's bad code design. Shut up, I don't care enough to put more than 5 minutes of thought into this. |
| + | for _,from in pairs(possibleNodes) do |
| if graph[from] ~= nil then | | if graph[from] ~= nil then |
| local toTable = graph[from] | | local toTable = graph[from] |
Line 65: |
Line 91: |
| -- instance of the "to" node connecting to a "from" node | | -- instance of the "to" node connecting to a "from" node |
| local isFirstTo = true | | local isFirstTo = true |
− | for _,toNode in pairs(remiLib.uppercase) do | + | for _,toNode in pairs(possibleNodes) do |
| if toTable[toNode] ~= nil then | | if toTable[toNode] ~= nil then |
| if not isFirstTo then | | if not isFirstTo then |
Line 87: |
Line 113: |
| end | | end |
| end | | end |
− | return tostring(body) | + | return tostring(button) .. "\n" .. tostring(body) |
| end | | end |
| | | |
Line 93: |
Line 119: |
| -- implementing graph as an adjacency list | | -- implementing graph as an adjacency list |
| local mapGraph = {} | | local mapGraph = {} |
| + | local collapsed = true |
| + | if frame.args["collapsed"] ~= nil and string.lower(frame.args["collapsed"]) == "false" then |
| + | collapsed = false |
| + | end |
| | | |
| for param,value in pairs(frame.args) do | | for param,value in pairs(frame.args) do |
Line 99: |
Line 129: |
| -- second val in split is "to" as above | | -- second val in split is "to" as above |
| -- first and third should be length 1 cuz they should be singular letters | | -- first and third should be length 1 cuz they should be singular letters |
− | if #split == 3 and string.lower(split[2]) == "to" and (#split[1] == 1 or string.lower(split[1]) == "start") and #split[3] == 1 then | + | if #split == 3 and |
| + | string.lower(split[2]) == "to" and |
| + | (#split[1] == 1 or (string.find(string.lower(split[1]),"start") ~= nil)) and |
| + | (#split[3] == 1 or (string.find(string.lower(split[3]),"start") ~= nil))then |
| local from = string.upper(split[1]) | | local from = string.upper(split[1]) |
| local to = string.upper(split[3]) | | local to = string.upper(split[3]) |
− | if (remiLib.valid(from,remiLib.letters) or string.lower(from) == "start")and remiLib.valid(to,remiLib.letters) then | + | if (remiLib.valid(from,remiLib.letters) or (string.find(string.lower(split[1]),"start") ~= nil)) and |
| + | (remiLib.valid(to,remiLib.letters) or (string.find(string.lower(split[3]),"start") ~= nil))then |
| if mapGraph[from] == nil then | | if mapGraph[from] == nil then |
| mapGraph[from] = {} | | mapGraph[from] = {} |
Line 110: |
Line 144: |
| end | | end |
| end | | end |
− | local html = p.renderBranchingTable(mapGraph) | + | --local html = remiLib.dictConcat(table.getKeys(mapGraph["START-4"]),"|") |
| + | local html = p.renderBranchingTable(mapGraph,collapsed) |
| | | |
| return html | | return html |