17,273
edits
(accept 'hide' arg) |
(change how to exclude, from "exclude=true" to "group=exclude" - so we get it from 'extra' instead of parsing the page) |
||
Line 24: | Line 24: | ||
local groups = { default = {} } | local groups = { default = {} } | ||
for _, page in ipairs( pages ) do | for _, page in ipairs( pages ) do | ||
-- remove extra from sortkey | if page.extra ~= 'exclude' then | ||
-- remove extra from sortkey | |||
if page.extra then page.sortkey = string.sub( page.sortkey, 1, -string.len( page.extra ) - 2 ) end | |||
if getPageProps then | |||
local pageContent = mw.title.new( page.text ):getContent() | |||
page.args = Args.fromPageContent( pageContent, 'Cat%s*|%s*' .. categoryName ) | |||
else | |||
page.args = {} | |||
end | |||
-- add page to group | |||
page.args.group = page.extra or 'default' | |||
page.__index = page -- allow variants to fall back to page | |||
page.args.__index = page.args -- allow variants' args to fall back to page's args | |||
local variants = page.args.variant or {{}} -- that's a table containing a single table (variant) with no properties (overrides) | |||
for _, variant in ipairs( variants ) do | |||
setmetatable( variant, page.args ) | |||
groups[variant.group] = groups[variant.group] or {} | groups[variant.group] = groups[variant.group] or {} | ||
groups[variant.group][#groups[variant.group] + 1] = setmetatable( { args = variant }, page ) | groups[variant.group][#groups[variant.group] + 1] = setmetatable( { args = variant }, page ) |