| Modul Lua ini digunakan pada sekitar 110.000 halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan harus diuji di subhalaman /bak pasir atau /kasus uji Modul:Format link, atau bak pasir modul Anda. Perubahan yang telah diuji kemudian dapat ditambahkan ke halaman ini dalam satu suntingan. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
| Modul ini dinilai siap digunakan secara umum. Modul ini sudah matang dan diperkirakan bebas dari bug dan siap digunakan pada tempat yang tepat di manapun. Modul ini siap disinggung di halaman-halaman bantuan dan sumber informasi Wikipedia lainnya sebagai pilihan untuk dipelajari para pengguna baru. Untuk mengurangi beban server dan output yang tidak diharapkan, modul ini harus diperlengkapi dengan halaman bak pasir dan kasus uji daripada harus melakukan suntingan coba-dan-salah berulang-ulang. |
| Modul ini menggunakan Lua: |
Dokumentasi di atas ditransklusikan dari Modul:Format link/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-------------------------------------------------------------------------------- -- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the {{format link}} template. -------------------------------------------------------------------------------- locallibraryUtil=require('libraryUtil') localcheckType=libraryUtil.checkType localcheckTypeForNamedArg=libraryUtil.checkTypeForNamedArg localmArguments-- lazily initialise [[Module:Arguments]] localmError-- lazily initialise [[Module:Error]] localyesno-- lazily initialise [[Module:Yesno]] localp={} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- localfunctiongetArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments=require('Modul:Arguments') returnmArguments.getArgs(frame,{parentOnly=true}) end localfunctionremoveInitialColon(s) -- Removes the initial colon from a string, if present. returns:match('^:?(.*)') end localfunctionmaybeItalicize(s,shouldItalicize) -- Italicize s if s is a string and the shouldItalicize parameter is true. ifsandshouldItalicizethen return'<i>'..s..'</i>' else returns end end localfunctionparseLink(link) -- Parse a link and return a table with the link's components. -- These components are: -- - link: the link, stripped of any initial colon (always present) -- - page: the page name (always present) -- - section: the page name (may be nil) -- - display: the display text, if manually entered after a pipe (may be nil) link=removeInitialColon(link) -- Find whether a faux display value has been added with the {{!}} magic -- word. localprePipe,display=link:match('^(.-)|(.*)$') link=prePipeorlink -- Find the page, if it exists. -- For links like [[#Bar]], the page will be nil. localpreHash,postHash=link:match('^(.-)#(.*)$') localpage ifnotpreHashthen -- We have a link like [[Foo]]. page=link elseifpreHash~=''then -- We have a link like [[Foo#Bar]]. page=preHash end -- Find the section, if it exists. localsection ifpostHashandpostHash~=''then section=postHash end return{ link=link, page=page, section=section, display=display, } end localfunctionformatDisplay(parsed,options) -- Formats a display string based on a parsed link table (matching the -- output of parseLink) and an options table (matching the input options for -- _formatLink). localpage=maybeItalicize(parsed.page,options.italicizePage) localsection=maybeItalicize(parsed.section,options.italicizeSection) if(notsection)then returnpage elseif(notpage)then returnmw.ustring.format('§ %s',section) else returnmw.ustring.format('%s § %s',page,section) end end localfunctionmissingArgError(target) mError=require('Module:Error') returnmError.error{message= 'Galat: tidak ada tautan atau target yang ditentukan! ([['..target..'#Galat|bantuan]])' } end -------------------------------------------------------------------------------- -- Main functions -------------------------------------------------------------------------------- functionp.formatLink(frame) -- The formatLink export function, for use in templates. yesno=require('Modul:Yesno') localargs=getArgs(frame) locallink=args[1]orargs.link localtarget=args[3]orargs.target ifnot(linkortarget)then returnmissingArgError('Templat:Format link') end returnp._formatLink{ link=link, display=args[2]orargs.display, target=target, italicizePage=yesno(args.italicizepage), italicizeSection=yesno(args.italicizesection), categorizeMissing=args.categorizemissing } end functionp._formatLink(options) -- The formatLink export function, for use in modules. checkType('_formatLink',1,options,'table') localfunctioncheck(key,expectedType)--for brevity checkTypeForNamedArg( '_formatLink',key,options[key],expectedTypeor'string',true ) end check('link') check('display') check('target') check('italicizePage','boolean') check('italicizeSection','boolean') check('categorizeMissing') -- Normalize link and target and check that at least one is present ifoptions.link==''thenoptions.link=nilend ifoptions.target==''thenoptions.target=nilend ifnot(options.linkoroptions.target)then returnmissingArgError('Modul:Format link') end localparsed=parseLink(options.link) localdisplay=options.displayorparsed.display localcatMissing=options.categorizeMissing localcategory='' -- Find the display text ifnotdisplaythendisplay=formatDisplay(parsed,options)end -- Handle the target option if present ifoptions.targetthen localparsedTarget=parseLink(options.target) parsed.link=parsedTarget.link parsed.page=parsedTarget.page end -- Test if page exists if a diagnostic category is specified ifcatMissingand(mw.ustring.len(catMissing)>0)then localtitle=nil ifparsed.pagethentitle=mw.title.new(parsed.page)end iftitleand(nottitle.isExternal)then localsuccess,exists=pcall(function()returntitle.existsend) ifsuccessandnotexiststhen category=mw.ustring.format('[[Kategori:%s]]',catMissing) end end end -- Prepend colon if appropriate localcolon=parsed.pageand":"or"" -- Format the result as a link ifparsed.link==displaythen returnmw.ustring.format('[[%s%s]]%s',colon,parsed.link,category) else returnmw.ustring.format('[[%s%s|%s]]%s',colon,parsed.link,display,category) end end -------------------------------------------------------------------------------- -- Derived convenience functions -------------------------------------------------------------------------------- functionp.formatPages(options,pages) -- Formats an array of pages using formatLink and the given options table, -- and returns it as an array. Nil values are not allowed. localret={} fori,pageinipairs(pages)do ret[i]=p._formatLink{ link=page, categorizeMissing=options.categorizeMissing, italicizePage=options.italicizePage, italicizeSection=options.italicizeSection } end returnret end returnp