Line 1: |
Line 1: |
− | -- This module implements [[Template:Ns has subpages]].
| + | {{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude> |
− | -- While the template is fairly simple, this information is made available to
| + | {{documentation}} |
− | -- Lua directly, so using a module means that we don't have to update the
| + | <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> |
− | -- template as new namespaces are added.
| + | </noinclude> |
− | | |
− | local p = {}
| |
− | | |
− | function p._main(ns, frame)
| |
− | -- Get the current namespace if we were not passed one.
| |
− | if not ns then
| |
− | ns = mw.title.getCurrentTitle().namespace
| |
− | end
| |
− | | |
− | -- Look up the namespace table from mw.site.namespaces. This should work
| |
− | -- for a majority of cases.
| |
− | local nsTable = mw.site.namespaces[ns]
| |
− | | |
− | -- Try using string matching to get the namespace from page names.
| |
− | -- Do a quick and dirty bad title check to try and make sure we do the same
| |
− | -- thing as {{NAMESPACE}} in most cases.
| |
− | if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
| |
− | local nsStripped = ns:gsub('^[_%s]*:', '')
| |
− | nsStripped = nsStripped:gsub(':.*$', '')
| |
− | nsTable = mw.site.namespaces[nsStripped]
| |
− | end
| |
− | | |
− | -- If we still have no match then try the {{NAMESPACE}} parser function,
| |
− | -- which should catch the remainder of cases. Don't use a mw.title object,
| |
− | -- as this would increment the expensive function count for each new page
| |
− | -- tested.
| |
− | if not nsTable then
| |
− | frame = frame or mw.getCurrentFrame()
| |
− | local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
| |
− | nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
| |
− | end
| |
− |
| |
− | return nsTable and nsTable.hasSubpages
| |
− | end
| |
− | | |
− | function p.main(frame)
| |
− | local ns = frame:getParent().args[1]
| |
− | if ns then
| |
− | ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
| |
− | ns = tonumber(ns) or ns
| |
− | end
| |
− | local hasSubpages = p._main(ns, frame)
| |
− | return hasSubpages and 'yes' or ''
| |
− | end
| |
− | | |
− | return p
| |