| Latest revision |
Your text |
| Line 136: |
Line 136: |
| args = h.parseArgs(args) | | args = h.parseArgs(args) |
| end | | end |
|
| |
| args = h.expandAutomaticGroups(args)
| |
|
| |
|
| h.runHook('onLoadConfig', config, args) | | h.runHook('onLoadConfig', config, args) |
| Line 296: |
Line 294: |
|
| |
|
| -- parse arguments, convert them to structured data tree | | -- parse arguments, convert them to structured data tree |
| -- Expand automatic group markers
| |
| function h.expandAutomaticGroups(args)
| |
| local PREFIX = '__NAVBOX_AUTO_GROUPS__'
| |
| local value = args.automatic_groups
| |
|
| |
| if type(value) ~= 'string' or value:sub(1, #PREFIX) ~= PREFIX then
| |
| return args
| |
| end
| |
|
| |
| local payload = value:sub(#PREFIX + 1)
| |
| local ok, data = pcall(mw.text.jsonDecode, payload)
| |
|
| |
| if not ok or type(data) ~= 'table' or type(data.rows) ~= 'table' then
| |
| error('Invalid Navbox Automatic Groups data.')
| |
| end
| |
|
| |
| local index = tonumber(data.start) or 1
| |
|
| |
| if index < 1 or index % 1 ~= 0 then
| |
| error('Invalid Navbox Automatic Groups start index.')
| |
| end
| |
|
| |
| for _, row in ipairs(data.rows) do
| |
| local groupKey = index .. ':group'
| |
| local listKey = index .. ':list'
| |
|
| |
| if args[groupKey] ~= nil or args[listKey] ~= nil then
| |
| error('Navbox Automatic Groups overlaps an existing row at index ' .. index .. '.')
| |
| end
| |
|
| |
| if row.group ~= nil and row.group ~= '' then
| |
| args[groupKey] = row.group
| |
| end
| |
|
| |
| if row.list ~= nil then
| |
| args[listKey] = row.list
| |
| end
| |
|
| |
| index = index + 1
| |
| end
| |
|
| |
| args.automatic_groups = nil
| |
| return args
| |
| end
| |
|
| |
| function h.buildDataTree(args) | | function h.buildDataTree(args) |
| -- parse args to a tree | | -- parse args to a tree |