ll>Mr. Stradivarius |
|
(One intermediate revision by the same user not shown) |
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
| |