Module:BrandSeries: Difference between revisions
Arclight changed the content model of the page Module:BrandSeries from "wikitext" to "Scribunto module" Tags: content model change Mobile edit Mobile web edit |
Fix: preprocess final wikitext output to render links and table (via update-page on MediaWiki MCP Server) |
||
| Line 57: | Line 57: | ||
if count > 0 then | if count > 0 then | ||
table.insert(rows, { | table.insert(rows, { | ||
series = series, | series = series, | ||
count = count | count = count | ||
}) | }) | ||
end | end | ||
| Line 77: | Line 69: | ||
end | end | ||
-- Build the table | -- Build the table as wikitext | ||
local output = {} | local output = {} | ||
table.insert(output, '{| class="wikitable"') | table.insert(output, '{| class="wikitable"') | ||
| Line 85: | Line 77: | ||
for _, row in ipairs(rows) do | for _, row in ipairs(rows) do | ||
table.insert(output, '|-') | table.insert(output, '|-') | ||
table.insert(output, string.format('| [[%s]] || %d || %s', row.series, row.count, | -- Build browse link inline | ||
local browseLink = string.format( | |||
'{{#queryformlink:form=CRT query|query string=CRT query[brand]=%s&CRT query[series]=%s&_run|link text=Browse}}', | |||
brand, row.series | |||
) | |||
table.insert(output, string.format('| [[%s]] || %d || %s', row.series, row.count, browseLink)) | |||
end | end | ||
table.insert(output, '|}') | table.insert(output, '|}') | ||
return table.concat(output, '\n') | -- Preprocess the entire output to render wikitext | ||
return frame:preprocess(table.concat(output, '\n')) | |||
end | end | ||
return p | return p | ||
Revision as of 16:14, 17 January 2026
Documentation for this module may be created at Module:BrandSeries/doc
-- Module:BrandSeries
-- Generates a series breakdown table for a brand's CRTs
-- Shows only series that have CRTs for the specified brand
local p = {}
local function trim(s)
if s == nil then return nil end
s = tostring(s)
s = s:gsub('^%s+', ''):gsub('%s+$', '')
if s == '' then return nil end
return s
end
function p.seriesTable(frame)
local args = frame.args
local parent = frame:getParent()
if parent then
args = parent.args
end
local brand = trim(args.brand) or trim(args[1])
if not brand then
return '<span class="error">Error: brand parameter required</span>'
end
-- First, get all series from Category:Series
local seriesQuery = '{{#ask:[[Category:Series]]|format=list|link=none|limit=500|sep=@@|searchlabel=}}'
local seriesResult = frame:preprocess(seriesQuery)
if not seriesResult or seriesResult == '' then
return "''No series found.''"
end
-- Parse series names
local seriesList = {}
for series in seriesResult:gmatch('[^@@]+') do
local s = trim(series)
if s then
table.insert(seriesList, s)
end
end
-- Sort alphabetically
table.sort(seriesList)
-- For each series, count how many CRTs belong to this brand
local rows = {}
for _, series in ipairs(seriesList) do
local countQuery = string.format(
'{{#ask:[[Category:CRT models]][[Has brand::%s]][[Has series::%s]]|format=count}}',
brand, series
)
local countResult = frame:preprocess(countQuery)
local count = tonumber(trim(countResult)) or 0
if count > 0 then
table.insert(rows, {
series = series,
count = count
})
end
end
-- If no series found for this brand
if #rows == 0 then
return "''No series-assigned models for this brand.''"
end
-- Build the table as wikitext
local output = {}
table.insert(output, '{| class="wikitable"')
table.insert(output, '|-')
table.insert(output, '! Series !! Count !! Browse')
for _, row in ipairs(rows) do
table.insert(output, '|-')
-- Build browse link inline
local browseLink = string.format(
'{{#queryformlink:form=CRT query|query string=CRT query[brand]=%s&CRT query[series]=%s&_run|link text=Browse}}',
brand, row.series
)
table.insert(output, string.format('| [[%s]] || %d || %s', row.series, row.count, browseLink))
end
table.insert(output, '|}')
-- Preprocess the entire output to render wikitext
return frame:preprocess(table.concat(output, '\n'))
end
return p