Module:BrandSeries: Difference between revisions
Rewrite using HTML builder like CRTModel; fix count parsing (via update-page on MediaWiki MCP Server) |
Fix: use HTML links instead of wikitext; debug count query (via update-page on MediaWiki MCP Server) |
||
| Line 26: | Line 26: | ||
end | end | ||
-- | -- Query all CRTs for this brand with their series, then count in Lua | ||
local | local crtQuery = string.format( | ||
local | '{{#ask:[[Category:CRT models]][[Has brand::%s]][[Has series::+]]|?Has series|format=list|link=none|limit=1000|sep=@@|searchlabel=}}', | ||
brand | |||
) | |||
local crtResult = frame:preprocess(crtQuery) | |||
-- Count occurrences of each series | |||
local seriesCounts = {} | |||
if crtResult and crtResult ~= '' then | |||
for entry in crtResult:gmatch('[^@@]+') do | |||
-- | -- Each entry is "PageName (SeriesName)" - extract series | ||
local | local series = entry:match('%s*%((.-)%)%s*$') | ||
for | if series then | ||
series = trim(series) | |||
if series then | |||
seriesCounts[series] = (seriesCounts[series] or 0) + 1 | |||
end | |||
end | |||
end | end | ||
end | end | ||
-- | -- Convert to sorted array | ||
local rows = {} | local rows = {} | ||
for | for series, count in pairs(seriesCounts) do | ||
table.insert(rows, { | |||
series = series, | |||
count = count | |||
}) | |||
end | end | ||
-- Sort by series name | |||
table.sort(rows, function(a, b) return a.series < b.series end) | |||
-- If no series found for this brand | -- If no series found for this brand | ||
| Line 90: | Line 78: | ||
for _, row in ipairs(rows) do | for _, row in ipairs(rows) do | ||
local tr = tbl:tag('tr') | local tr = tbl:tag('tr') | ||
-- Series link - build as HTML anchor | |||
local seriesUrl = mw.uri.fullUrl(row.series) | |||
local seriesLink = mw.html.create('a') | |||
seriesLink:attr('href', '/wiki/' .. mw.uri.encode(row.series, 'WIKI')) | |||
seriesLink:attr('title', row.series) | |||
seriesLink:wikitext(row.series) | |||
tr:tag('td'):node(seriesLink) | |||
-- Count | |||
tr:tag('td'):wikitext(tostring(row.count)) | tr:tag('td'):wikitext(tostring(row.count)) | ||
tr:tag('td'):wikitext( | |||
-- Browse link | |||
local browseQuery = string.format( | |||
'{{#queryformlink:form=CRT query|query string=CRT query[brand]=%s&CRT query[series]=%s&_run|link text=Browse}}', | |||
brand, row.series | |||
) | |||
local browseHtml = frame:preprocess(browseQuery) | |||
tr:tag('td'):wikitext(browseHtml) | |||
end | end | ||