Editing Module:Navbox Automatic Groups

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision Your text
Line 3: Line 3:
local PREFIX = '__NAVBOX_AUTO_GROUPS__'
local PREFIX = '__NAVBOX_AUTO_GROUPS__'
local NOGROUP = '[nogroup]'
local NOGROUP = '[nogroup]'
local CONTROL_ARGS = {
local CONTROL_ARGS = { groups = true, base = true, list = true, list_type = true, start = true }
groups = true,
base = true,
list = true,
list_type = true,
not_format = true,
start = true
}


-- Trim a value
-- Trim a value
Line 20: Line 13:
local function splitGroups(value)
local function splitGroups(value)
local result = {}
local result = {}
for _, group in ipairs(mw.text.split(value, ';', true)) do
for _, group in ipairs(mw.text.split(value, ';', true)) do
group = trim(group)
group = trim(group)
if group ~= '' then
if group ~= '' then
result[#result + 1] = group
result[#result + 1] = group
end
end
end
end
return result
return result
end
end
Line 43: Line 33:
return group
return group
end)
end)
end
-- Link a group name if the page exists
local function linkGroup(group)
local page = mw.text.decode(group or '')
local frame = mw.getCurrentFrame()
if page ~= ''
and not page:match('[#<>%[%]{}]+')
and frame:callParserFunction('PROTECTIONEXPIRY:edit', page) ~= '' then
return '[[' .. group .. '|' .. group .. ']]'
end
return group
end
end


Line 62: Line 38:
local function getListOverrides(args)
local function getListOverrides(args)
local overrides = {}
local overrides = {}
for key, value in pairs(args) do
for key, value in pairs(args) do
local groupName = tostring(key):match('^list_(.+)$')
local groupName = tostring(key):match('^list_(.+)$')
if groupName then
if groupName then
overrides[normalizeGroupName(groupName)] = tostring(value)
overrides[normalizeGroupName(groupName)] = tostring(value)
end
end
end
end
return overrides
return overrides
end
end


-- Build DPL arguments
-- Build DPL arguments from all non-control parameters
local function getDplArgs(args, group, exclusions)
local function getDplArgs(args, group, exclusions)
local dplArgs = {}
local dplArgs = {}
local notFormat = tostring(args.not_format or '%%group%%')
for key, value in pairs(args) do
for key, value in pairs(args) do
key = tostring(key)
key = tostring(key)
if not CONTROL_ARGS[key] and not key:match('^list_.+$') then
if not CONTROL_ARGS[key] and not key:match('^list_.+$') then
if type(value) == 'string' then
if type(value) == 'string' then
Line 90: Line 60:
end
end
end
end
 
if #exclusions > 0 then
-- Add automatically generated DPL exclusions
for i, exclusion in ipairs(exclusions) do
for i, exclusion in ipairs(exclusions) do
dplArgs['not' .. i] = exclusion
dplArgs['not' .. i] = substituteGroup(notFormat, exclusion)
end
end
end
return dplArgs
return dplArgs
end
end


-- Expand Navbox DPL
-- Expand Navbox DPL after placeholders and automatic exclusions are known
local function expandDpl(frame, args, group, exclusions)
local function expandDpl(frame, args, group, exclusions)
local dplArgs = getDplArgs(args, group, exclusions)
local dplArgs = getDplArgs(args, group, exclusions)
 
return frame:expandTemplate{ title = 'Navbox DPL', args = dplArgs }
return frame:expandTemplate{
title = 'Navbox DPL',
args = dplArgs
}
end
 
-- Check whether expanded content actually contains anything
local function hasContent(value)
return mw.text.trim(tostring(value or '')) ~= ''
end
end


Line 117: Line 77:
function p.main(frame)
function p.main(frame)
local args = {}
local args = {}
-- Get arguments passed directly to the module
for key, value in pairs(frame.args) do
for key, value in pairs(frame.args) do
args[key] = value
args[key] = value
end
end


-- Get arguments passed through Template:Navbox Automatic Groups
local parent = frame:getParent()
local parent = frame:getParent()
if parent then
if parent then
for key, value in pairs(parent.args) do
for key, value in pairs(parent.args) do
Line 152: Line 108:
local exclusions = {}
local exclusions = {}


-- Build the list of named groups used for [nogroup] exclusions
for _, group in ipairs(groups) do
for _, group in ipairs(groups) do
if normalizeGroupName(group) ~= normalizeGroupName(NOGROUP) then
if normalizeGroupName(group) ~= normalizeGroupName(NOGROUP) then
Line 174: Line 129:
if list == nil then
if list == nil then
if listType == 'dpl' then
if listType == 'dpl' then
list = expandDpl(
list = expandDpl(frame, args, targetGroup, isNoGroup and exclusions or {})
frame,
args,
targetGroup,
isNoGroup and exclusions or {}
)
else
else
list = substituteGroup(defaultList, targetGroup)
list = substituteGroup(defaultList, targetGroup)
Line 189: Line 139:
end
end


-- Do not create a row when the generated list is empty
local row = { list = list }
if hasContent(list) then
if not isNoGroup then
local row = {
row.group = group
list = list
}
 
-- Link normal group names when the corresponding page exists
if not isNoGroup then
row.group = linkGroup(group)
end
 
rows[#rows + 1] = row
end
end
rows[#rows + 1] = row
end
end


return PREFIX .. mw.text.jsonEncode({
return PREFIX .. mw.text.jsonEncode({ start = start, rows = rows })
start = start,
rows = rows
})
end
end


return p
return p
Please note that all contributions to The Petit Planet Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Petit Planet Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template
Below are commonly used wikitext from MediaWiki:Edittools. Click on any to insert them in the edit box.
File Pages==Summary====Licensing=={{Fairuse}}{{File|}}
Dynamic Page List¦²«»²{¦}²«»«/»«!----»
Array in DPL¹^2{}^2^2{¹}^2
Parser Functions{{#if:||}}
{{#ifeq:|||}}
{{#expr:}}
{{#switch:||#default=}}
{{#replace:||}}
{{#titleparts:}}
{{#tag:|}}
Markup{{}}|[][[]][[Category:]]#REDIRECT [[]] [[Category:Redirect Pages]]<code></code><includeonly></includeonly><noinclude></noinclude><nowiki></nowiki><!----><br>§
Notices{{Stub|}}{{Stub Dialogue}}{{Upcoming}}{{Under Construction}}{{Placeholder|}}
Magic Words{{!}}{{formatnum:}}{{lc:}}{{uc:}}{{PAGENAME}}{{FULLPAGENAME}}{{ROOTPAGENAME}}{{BASEPAGENAME}}{{SUBPAGENAME}}{{DISPLAYTITLE:|noreplace}}__TOC____NOTOC____EXPECTUNUSEDCATEGORY____HIDDENCAT__
HTML Entities&mdash;&nbsp;&comma;&shy;