This Lua module is used in system messages, and onapproximately 3,590,000 pages, or roughly 6% 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/sandbox or/testcases subpages, or in your ownmodule sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on thetalk page before implementing them.
Thismodule is rated asready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned onhelp pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed throughsandbox testing rather than repeated trial-and-error editing.
This module finds whether a givennamespace can 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)
ns is the namespace name, number, or a page name. It defaults to the current namespace.
frame is 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.ifnotnsthenns=mw.title.getCurrentTitle().namespaceend-- 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('[<>|%[%]{}]')thenlocalnsStripped=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.ifnotnsTablethenframe=frameormw.getCurrentFrame()localnsProcessed=frame:callParserFunction('NAMESPACE',ns)nsTable=nsProcessedandmw.site.namespaces[nsProcessed]endreturnnsTableandnsTable.hasSubpagesendfunctionp.main(frame)localns=frame:getParent().args[1]ifnsthenns=ns:match('^%s*(.-)%s*$')-- trim whitespacens=tonumber(ns)ornsendlocalhasSubpages=p._main(ns,frame)returnhasSubpagesand'yes'or''endreturnp