Revisi sejak 6 September 2022 01.18 oleh dw>Nihiltres(Reordered helper functions (first by export status, then alphabetically) and migrated p.quote upstream from Module:Redirect hatnote (includes contributions by Tamzin and Nihiltres))
Modul ini dilindungi. Modul ini sangat mencolok yang digunakan oleh banyak halaman, atau sangat sering disubstitusikan. Karena vandalisme atau kesalahan akan mempengaruhi banyak halaman, dan suntingan kecil dapat memberi beban besar pada server, modul ini dilindungi dari penyuntingan.
Fungsi dalam modul ini tidak dapat digunakan langsung dari #invoke, dan harus digunakan melalui template. Silakan lihat Templat:Hatnote dan Templat:Format link untuk dokumentasi.
Penggunaan di modul lain
localmHatnote=require('Module:Hatnote')
---------------------------------------------------------------------------------- Module:Hatnote ---- ---- This module produces hatnote links and links to related articles. It ---- implements the {{hatnote}} and {{format link}} meta-templates and includes ---- helper functions for other Lua hatnote modules. ----------------------------------------------------------------------------------locallibraryUtil=require('libraryUtil')localcheckType=libraryUtil.checkTypelocalcheckTypeForNamedArg=libraryUtil.checkTypeForNamedArglocalmArguments-- lazily initialise [[Module:Arguments]]localyesno-- lazily initialise [[Module:Yesno]]localformatLink-- lazily initialise [[Module:Format link]] ._formatLinklocalp={}---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------localfunctiongetArgs(frame)-- Fetches the arguments from the parent frame. Whitespace is trimmed and-- blanks are removed.mArguments=require('Module:Arguments')returnmArguments.getArgs(frame,{parentOnly=true})endlocalfunctionremoveInitialColon(s)-- Removes the initial colon from a string, if present.returns:match('^:?(.*)')endfunctionp.defaultClasses(inline)-- Provides the default hatnote classes as a space-separated string; useful-- for hatnote-manipulation modules like [[Module:Hatnote group]].return(inline==1and'hatnote-inline'or'hatnote')..' '..'navigation-not-searchable'endfunctionp.disambiguate(page,disambiguator)-- Formats a page title with a disambiguation parenthetical,-- i.e. "Example" → "Example (disambiguation)".checkType('disambiguate',1,page,'string')checkType('disambiguate',2,disambiguator,'string',true)disambiguator=disambiguatoror'disambiguation'returnmw.ustring.format('%s (%s)',page,disambiguator)endfunctionp.findNamespaceId(link,removeColon)-- Finds the namespace id (namespace number) of a link or a pagename. This-- function will not work if the link is enclosed in double brackets. Colons-- are trimmed from the start of the link by default. To skip colon-- trimming, set the removeColon parameter to false.checkType('findNamespaceId',1,link,'string')checkType('findNamespaceId',2,removeColon,'boolean',true)ifremoveColon~=falsethenlink=removeInitialColon(link)endlocalnamespace=link:match('^(.-):')ifnamespacethenlocalnsTable=mw.site.namespaces[namespace]ifnsTablethenreturnnsTable.idendendreturn0endfunctionp.makeWikitextError(msg,helpLink,addTrackingCategory,title)-- Formats an error message to be returned to wikitext. If-- addTrackingCategory is not false after being returned from-- [[Module:Yesno]], and if we are not on a talk page, a tracking category-- is added.checkType('makeWikitextError',1,msg,'string')checkType('makeWikitextError',2,helpLink,'string',true)yesno=require('Module:Yesno')title=titleormw.title.getCurrentTitle()-- Make the help link text.localhelpTextifhelpLinkthenhelpText=' ([['..helpLink..'|help]])'elsehelpText=''end-- Make the category text.localcategoryifnottitle.isTalkPage-- Don't categorise talk pagesandtitle.namespace~=2-- Don't categorise userspaceandyesno(addTrackingCategory)~=false-- Allow opting outthencategory='Hatnote templates with errors'category=mw.ustring.format('[[%s:%s]]',mw.site.namespaces[14].name,category)elsecategory=''endreturnmw.ustring.format('<strong class="error">Error: %s%s.</strong>%s',msg,helpText,category)endlocalcurNs=mw.title.getCurrentTitle().namespacep.missingTargetCat=--Default missing target category, exported for use in related modules((curNs==0)or(curNs==14))and'Articles with hatnote templates targeting a nonexistent page'ornilfunctionp.quote(title)--Wraps titles in quotation marks. If the title starts/ends with a quotation--mark, kerns that side as with {{-'}}localquotationMarks={["'"]=true,['"']=true,['“']=true,["‘"]=true,['”']=true,["’"]=true}localquoteLeft,quoteRight=-- Test if start/end are quotation marksquotationMarks[string.sub(title,1,1)],quotationMarks[string.sub(title,-1,-1)]ifquoteLeftorquoteRightthentitle=mw.html.create("span"):wikitext(title)endifquoteLeftthentitle:css("padding-left","0.15em")endifquoteRightthentitle:css("padding-right","0.15em")endreturn'"'..tostring(title)..'"'end---------------------------------------------------------------------------------- Hatnote---- Produces standard hatnote text. Implements the {{hatnote}} template.--------------------------------------------------------------------------------functionp.hatnote(frame)localargs=getArgs(frame)locals=args[1]ifnotsthenreturnp.makeWikitextError('no text specified','Template:Hatnote#Errors',args.category)endreturnp._hatnote(s,{extraclasses=args.extraclasses,selfref=args.selfref})endfunctionp._hatnote(s,options)checkType('_hatnote',1,s,'string')checkType('_hatnote',2,options,'table',true)options=optionsor{}localinline=options.inlinelocalhatnote=mw.html.create(inline==1and'span'or'div')localextraclassesiftype(options.extraclasses)=='string'thenextraclasses=options.extraclassesendhatnote:attr('role','note'):addClass(p.defaultClasses(inline)):addClass(extraclasses):addClass(options.selfrefand'selfref'ornil):wikitext(s)returnmw.getCurrentFrame():extensionTag{name='templatestyles',args={src='Module:Hatnote/styles.css'}}..tostring(hatnote)endreturnp