- Welcome to the Kancolle Wiki!
- If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord
Difference between revisions of "Module:MapBranching"
Remi Scarlet (talk | contribs) |
Remi Scarlet (talk | contribs) |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
− | + | ||
-- Module for map branching written by | -- Module for map branching written by | ||
-- Remi_Scarlet | -- Remi_Scarlet | ||
-- I fucking hate lua. | -- I fucking hate lua. | ||
− | + | ||
-- 10/24/15 Added colorful blue button thing | -- 10/24/15 Added colorful blue button thing | ||
− | + | ||
local remiLib = require("Module:RemiLib") | local remiLib = require("Module:RemiLib") | ||
− | + | ||
function p.renderBranchingTable(graph, collapsed) | function p.renderBranchingTable(graph, collapsed) | ||
− | + | ||
− | local uniqueID = remiLib.timeHash() | + | local uniqueID = remiLib.timeHash(graph) |
− | |||
local classString = "mw-customtoggle-" .. tostring(uniqueID) | local classString = "mw-customtoggle-" .. tostring(uniqueID) | ||
local idString = "mw-customcollapsible-" .. tostring(uniqueID) | local idString = "mw-customcollapsible-" .. tostring(uniqueID) | ||
− | + | ||
local button = mw.html.create('div') | local button = mw.html.create('div') | ||
button | button | ||
Line 21: | Line 20: | ||
:addClass("globalbutton") | :addClass("globalbutton") | ||
:wikitext("Show/Hide Branching Rules") | :wikitext("Show/Hide Branching Rules") | ||
− | + | ||
local body = mw.html.create("table") | local body = mw.html.create("table") | ||
body | body | ||
Line 29: | Line 28: | ||
:attr("id",idString) | :attr("id",idString) | ||
:css("width","300px") | :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") | ||
Line 91: | Line 90: | ||
end | end | ||
col = mw.html.create("td") | col = mw.html.create("td") | ||
− | + | ||
col | col | ||
:wikitext(toNode) | :wikitext(toNode) | ||
Line 109: | Line 108: | ||
return tostring(button) .. "\n" .. tostring(body) | return tostring(button) .. "\n" .. tostring(body) | ||
end | end | ||
− | + | ||
function p.branchingTemplate(frame) | function p.branchingTemplate(frame) | ||
-- implementing graph as an adjacency list | -- implementing graph as an adjacency list | ||
Line 117: | Line 116: | ||
collapsed = false | collapsed = false | ||
end | end | ||
− | + | ||
for param,value in pairs(frame.args) do | for param,value in pairs(frame.args) do | ||
local split = mw.text.split(param,"_") | local split = mw.text.split(param,"_") | ||
Line 135: | Line 134: | ||
end | end | ||
local html = p.renderBranchingTable(mapGraph,collapsed) | local html = p.renderBranchingTable(mapGraph,collapsed) | ||
− | + | ||
return html | return html | ||
− | + | ||
end | end | ||
− | + | ||
return p | return p |
Revision as of 05:33, 25 October 2015
Parameter Naming
Module invocation is done via passing parameters and arguments. These parameter names and argument values are all done in the following format
- <"From" Node>_to_<"To" Node> = <argument value>
except for assigning node labels which is shown below.
All parameters still need a pipe character, "|", before the parameter call. Eg, (replace '{' with '{{')
- {#invoke:MapBranching | branchingTemplate
|start_to_A = This is the branching info from the start node to node A
|start_to_start-1 = This is branching info for starting at the first start node. Eg, when CTF/STF determines your starting node
|A_to_B = This is branching info from node A to node B
|A_to_C = This is branching info from node A to node C
}
All parameters passed to the MapBranching module are named under a simple scheme as described in each subsequent section.
You may add span and css tags as you wish as they will be pasted in directly to the page. Examples are below.
Everything is Case-Insensitive'
Node Names
There are only two types of nodes that can be used in either the "From" node or "To" node
- Start => This indicates the starting node when you first load into a map. This is the starting node that comes before even node A.
- Start-# => Where # is 1 through 5 (because when are we really going to have more than 5 start points). This will simply indicate which start position. Refer to the Spring 2016 event page for examples.
- Any alphabet => These respectively reflect the node names.
Example Invocation
{{#invoke:MapBranching|branchingTemplate
|B_to_C = Active Branching
|B_to_D = Active Branching
|C_to_E = Change of E with 4 or more CL?<br>Failure on LoS check to H
|C_to_H = LoS check <br> Failure sends to E
|F_to_H = LoS check for H. <br>Failure sends to G
|F_to_G = 5 or more CL}}
Results in
Branching Rules | ||
---|---|---|
Node | Split | Condition |
B | C | Active Branching |
D | Active Branching | |
C | E | Change of E with 4 or more CL? Failure on LoS check to H |
H | LoS check Failure sends to E | |
F | G | 5 or more CL |
H | LoS check for H. Failure sends to G |
Credit
Module written by Remi_Scarlet
local p = {}
-- Module for map branching written by
-- Remi_Scarlet
-- I fucking hate lua.
-- 10/24/15 Added colorful blue button thing
local remiLib = require("Module:RemiLib")
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")
body
:addClass("mw-collapsible")
:addClass("wikitable")
:addClass("mw-collapsed")
:attr("id",idString)
:css("width","300px")
local titleRow = mw.html.create("tr")
local th = mw.html.create("th")
th
:attr("colspan",3) -- "from" node, "to" node, requirement text
:wikitext("Branching Rules")
:css("font-weight","bold")
:css("text-align","center")
titleRow:node(th)
body:node(titleRow)
local headerRow = mw.html.create("tr")
th = mw.html.create("th")
th
:wikitext("Node")
:css("font-size","15px")
:css("text-align","center")
headerRow:node(th)
th = mw.html.create("th")
th
:wikitext("Split")
:css("font-size","15px")
:css("text-align","center")
headerRow:node(th)
th = mw.html.create("th")
th
:wikitext("Condition")
:css("font-size","15px")
:css("text-align","center")
headerRow:node(th)
body:node(headerRow)
--
-- graph should be something like
-- graph = { ["A"] = {
-- ["B"] = "This is branching information from node A to node B",
-- ["C"] = "And this from A to C",}
-- ["B"] = {
-- ["D"] = "This one from B to D"}
-- }
--
-- toTable is a table of all the to's
--
local possibleStarts = remiLib.mergeArrays({"START"},remiLib.uppercase)
for _,from in pairs(possibleStarts) do
if graph[from] ~= nil then
local toTable = graph[from]
local tableRow = mw.html.create("tr")
local col = mw.html.create("td")
local rowHeight = remiLib.getTableSize(toTable)
col
:attr("rowspan",rowHeight)
:wikitext(from)
:css("text-align","center")
tableRow:node(col)
-- isFirstTo checks if we're on the first alphabetically sorted
-- instance of the "to" node connecting to a "from" node
local isFirstTo = true
for _,toNode in pairs(remiLib.uppercase) do
if toTable[toNode] ~= nil then
if not isFirstTo then
tableRow = mw.html.create("tr")
end
col = mw.html.create("td")
col
:wikitext(toNode)
:css("text-align","center")
tableRow:node(col)
col = mw.html.create("td")
col
:wikitext(toTable[toNode])
:css("text-align","center")
tableRow:node(col)
body:node(tableRow)
isFirstTo = false
end
end
end
end
return tostring(button) .. "\n" .. tostring(body)
end
function p.branchingTemplate(frame)
-- implementing graph as an adjacency list
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
local split = mw.text.split(param,"_")
-- length is 3, eg A_to_B or B_to_C
-- second val in split is "to" as above
-- 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
local from = string.upper(split[1])
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 mapGraph[from] == nil then
mapGraph[from] = {}
end
mapGraph[from][to] = value
end
end
end
local html = p.renderBranchingTable(mapGraph,collapsed)
return html
end
return p