Module:Ns has subpages
Appearance
This Lua module is used in system messages,and onapproximately 2,920,000 pages, or roughly 5% of all pages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption and server load, any changes should be tested in the module's/sandboxor/testcasessubpages, or in your ownmodule sandbox.The tested changes can be added to this page in a single edit. Please discuss changes on thetalk pagebefore implementing them. |
This module issubject to page protection.It is ahighly visible modulein use by a very large number of pages, or issubstitutedvery frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it isprotectedfrom editing. |
This module finds whether a givennamespacecan have subpages.
Usage
From wikitext
From wikitext this module must be used via the{{ns has subpages}}template. Please see the template page for documentation.
From Lua
Usually Lua modules should usemw.site.namespaces[namespace].hasSubpages
rather than this module. But if you have a good reason, it can be accessed like this:
Load the module:
localmNsHasSubpages=require('Module:Ns has subpages')
The subpage information can be found with the._main function:
mNsHasSubpages._main(ns,frame)
- nsis the namespace name, number, or a page name. It defaults to the current namespace.
- frameis a frame object with which we can call frame:callParserFunction if necessary. This is optional, and intended for internal use.
-- 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.
localp={}
functionp._main(ns,frame)
-- Get the current namespace if we were not passed one.
ifnotnsthen
ns=mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
localnsTable=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.
ifnotnsTableandtype(ns)=='string'andnotns:find('[<>|%[%]{}]')then
localnsStripped=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.
ifnotnsTablethen
frame=frameormw.getCurrentFrame()
localnsProcessed=frame:callParserFunction('NAMESPACE',ns)
nsTable=nsProcessedandmw.site.namespaces[nsProcessed]
end
returnnsTableandnsTable.hasSubpages
end
functionp.main(frame)
localns=frame:getParent().args[1]
ifnsthen
ns=ns:match('^%s*(.-)%s*$')-- trim whitespace
ns=tonumber(ns)orns
end
localhasSubpages=p._main(ns,frame)
returnhasSubpagesand'yes'or''
end
returnp