Difference between revisions of "Module:Ns has subpages/sandbox"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius (try simplifying this by using title objects) |
blackwiki>Mr. Stradivarius (undo - we would need to add colon-stripping logic, and it's probably not worth it) |
||
| Line 7: | Line 7: | ||
function p._main(ns, frame) | 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 | + | if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then |
| − | local | + | local nsStripped = ns:gsub('^[_%s]*:', '') |
| − | + | nsStripped = nsStripped:gsub(':.*$', '') | |
| − | + | nsTable = mw.site.namespaces[nsStripped] | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | -- If we | + | -- If we still have no match then try the {{NAMESPACE}} parser function, |
| − | if | + | -- 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 | end | ||
| + | |||
| + | return nsTable and nsTable.hasSubpages | ||
end | end | ||
Revision as of 00:51, 17 June 2016
Documentation for this module may be created at Module:Ns has subpages/sandbox/doc
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
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