This Lua module is used on ೨,೨೮,೦೦೦+ pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them.
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing.
This module produces a link to a main article or articles. It implements the {{Main}} template. Normally, it produces a link like "Main article: A". If used in the category namespace, it produces a link like "The main article for this category is A". It is possible to specify multiple articles, and in this case plural wording is used automatically. If the first link is not an article, the module uses the wording "Main page" instead of "Main article".
--[[-- This module produces a link to a main article or articles. It implements the-- template {{main}}.-- -- If the module is used in category or category talk space, it produces "The-- main article for this category is xxx." Otherwise, it produces-- "Main article: xxx".--]]localmHatnote=require('Module:Hatnote')localmHatlist=require('Module:Hatnote list')localmArguments-- lazily initialiselocalp={}functionp.main(frame)mArguments=require('Module:Arguments')localargs=mArguments.getArgs(frame,{parentOnly=true})localpages={}fork,vinpairs(args)doiftype(k)=='number'thenlocaldisplay=args['label '..k]orargs['l'..k]localpage=displayandstring.format('%s|%s',string.gsub(v,'|.*$',''),display)orvpages[#pages+1]=pageendendif#pages==0andmw.title.getCurrentTitle().namespace==0thenreturnmHatnote.makeWikitextError('no page names specified','Template:Main#Errors',args.category)endlocaloptions={selfref=args.selfref}returnp._main(pages,options)endfunctionp._main(args,options)-- Get the list of pages. If no first page was specified we use the current-- page name.localcurrentTitle=mw.title.getCurrentTitle()if#args==0thenargs={currentTitle.text}endlocalfirstPage=string.gsub(args[1],'|.*$','')-- Find the pagetype.localpageType=mHatnote.findNamespaceId(firstPage)==0and'article'or'page'-- Make the formatted link textlist=mHatlist.andList(args,true)-- Build the text.localisPlural=#args>1localmainFormlocalcurNs=currentTitle.namespaceif(curNs==14)or(curNs==15)then--category/talk namespacesmainForm=isPluraland'The main %ss for this [[Help:Categories|category]] are %s.'or'The main %s for this [[Help:Categories|category]] is %s.'elsemainForm=isPluraland'Main %ss: %s'or'Main %s: %s'endlocaltext=string.format(mainForm,pageType,list)-- Process the options and pass the text to the _rellink function in-- [[Module:Hatnote]].options=optionsor{}localhnOptions={selfref=options.selfref}returnmHatnote._hatnote(text,hnOptions)endreturnp