- 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:Seasonal"
Jump to navigation
Jump to search
m (47 revisions imported) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | local Utils = require('Module: | + | local U = require('Module:Core') |
− | local format = require('Module: | + | local Utils = require('Module:Core') |
+ | local format = require('Module:Core').format | ||
local getArgs = require('Module:GetArgs') | local getArgs = require('Module:GetArgs') | ||
Line 6: | Line 7: | ||
local seiyuus = require('Module:Collection/Seiyuus') | local seiyuus = require('Module:Collection/Seiyuus') | ||
local types = require('Module:Collection/ShipsByType') | local types = require('Module:Collection/ShipsByType') | ||
+ | |||
+ | local function requireSeasonModule(name) | ||
+ | local success, data = U.requireModule('Data/Season/' .. name) | ||
+ | if not success then | ||
+ | success, data = U.requireModule('Seasonal/' .. name) | ||
+ | end | ||
+ | if not success then | ||
+ | data = {index = {}, ships = {}} | ||
+ | end | ||
+ | return data | ||
+ | end | ||
function findType(ship) | function findType(ship) | ||
Line 80: | Line 92: | ||
string.format([=[!colspan="5"|From [[Seasonal/%s|%s]]]=], season, season) | string.format([=[!colspan="5"|From [[Seasonal/%s|%s]]]=], season, season) | ||
} | } | ||
− | local seasonal_data = | + | local seasonal_data = requireSeasonModule(season) |
for _, ship in ipairs(seasonal_data.index[type]) do | for _, ship in ipairs(seasonal_data.index[type]) do | ||
if only and Utils.find(args, ship) or not only and not Utils.find(args, ship) then | if only and Utils.find(args, ship) or not only and not Utils.find(args, ship) then |
Latest revision as of 12:41, 12 May 2021
Documentation for this module may be created at Module:Seasonal/doc
local U = require('Module:Core')
local Utils = require('Module:Core')
local format = require('Module:Core').format
local getArgs = require('Module:GetArgs')
local artists = require('Module:Collection/Artists')
local seiyuus = require('Module:Collection/Seiyuus')
local types = require('Module:Collection/ShipsByType')
local function requireSeasonModule(name)
local success, data = U.requireModule('Data/Season/' .. name)
if not success then
success, data = U.requireModule('Seasonal/' .. name)
end
if not success then
data = {index = {}, ships = {}}
end
return data
end
function findType(ship)
for type, data in pairs(types) do
if data.ships and Utils.find(data.ships, ship) then
return type
end
end
return "?"
end
function genToc(args, tbl, format)
local result = ""
local i = 0
local n = 0
for _, k in ipairs(tbl.index) do
local data = tbl[k]
local ships = Utils.filter(data.ships, function(ship) return Utils.find(args, ship) end)
if #ships > 0 then
i = i + 1
n = n + #ships
local ships_str = table.concat(Utils.map(ships, function(ship) return string.format("[[#%s|%s]]", args.art and (tbl.type == "types" and k or findType(ship)) or ship, ship) end), ", ")
if data.url then
result = result .. string.format("|-\n|[%s %s]\n|%s\n", data.url, k, ships_str)
elseif tbl.type == "types" then
result = result .. string.format("|-\n|[[#%s|%s]] (%s)\n|%s\n", args[k] and (k .. " 2") or k, k, #ships, ships_str)
else
result = result .. string.format("|-\n|%s\n|%s\n", k, ships_str)
end
end
end
return format(result, i, n)
end
local Seasonal = {}
-- Template:SeasonalTOC
function Seasonal.toc(frame)
local args = getArgs{frame = frame:getParent()}
return
genToc(args, types, function(r, i, n) return string.format([===[{| class="mw-collapsible mw-collapsed wikitable typography-xl-optout" style="width:100%%"
|-
!width=20%%|Class
!%s (%s)
]===], args.text or "Ship girls", n) .. r .. "|}" end)
.. "\n" ..
genToc(args, args.art and artists or seiyuus, function(r, i, n) return string.format([===[{| class="mw-collapsible mw-collapsed wikitable typography-xl-optout" style="width:100%%"
|-
!width=20%%|[[%s]] (%s)
!
]===], args.art and "Glossary#List_of_Vessels_by_Artist|Artist" or "Glossary#List_of_Vessels_by_Seiyuu|Seiyuu", i) .. r .. "|}" end)
end
-- Template:SeasonalQuotesInclude
function Seasonal.include(frame)
local ship_row_template = [=[|align="center" rowspan="${rowspan}"|[[${ship}]]
]=]
local id_string_template = [[id="${ship}"]]
local quote_template = [=[|- ${id_string}
${ship_row}|align="center"|<span class="audio-button click-parent">[[File:${ship}${form} ${season}${line}.ogg|Play]]</span>
|lang="ja"|${ja}
|${en}
|${note}]=]
local args = getArgs{frame = frame:getParent()}
local season, type = args[1], args[2]
local only = args.only
local result = {
"|-",
string.format([=[!colspan="5"|From [[Seasonal/%s|%s]]]=], season, season)
}
local seasonal_data = requireSeasonModule(season)
for _, ship in ipairs(seasonal_data.index[type]) do
if only and Utils.find(args, ship) or not only and not Utils.find(args, ship) then
local ship_data = seasonal_data.ships[ship]
local quotes = Utils.ifilter(ship_data, function(quote)
return not Utils.find(args, string.format("%s/%s", ship, quote.line or ""))
end)
for i, quote in ipairs(quotes) do
local note = args[ship .. "." .. "note"]
if note and note == "nil" then
note = ""
elseif note and note:sub(-1) == "+" then
note = note:sub(1, -2) .. (quote.note or "")
end
table.insert(result, format{
quote_template,
id_string = i > 1 and "" or format{
id_string_template,
ship = ship,
},
ship_row = i > 1 and "" or format{
ship_row_template,
rowspan = #quotes,
ship = ship,
},
ship = quote.ship or ship,
form = quote.form or "",
season = quote.season or season,
line = quote.line and " " .. quote.line or "",
ja = quote.ja or "",
en = quote.en or "",
note = (quote.ship and "''As " .. quote.ship .. "''<br>" or "") .. (quote.line and "''" .. quote.line .. "''<br>" or "") .. (note or quote.note or ""),
})
end
end
end
return table.concat(result, "\n")
end
return Seasonal