Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Module:Format link

Permanently protected module
From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
WarningThis Lua module is used inMediaWiki:Perfcachedts, and onapproximately 1,470,000 pages, or roughly 2% 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.
Page template-protectedThis module is currentlyprotected from editing.
See theprotection policy andprotection log for more details. Please discuss any changes on thetalk page; you maysubmit an edit request to ask anadministrator to make an edit if it isuncontroversial or supported byconsensus. You may alsorequest that this page be unprotected.
This module depends on the following other modules:

This module, migrated from origins inModule:Hatnote, provides functionality for formatting links for display, including that powering the{{format link}} template.

It can pretty-format section links with the section symbol ("§") and appropriate whitespace, it automatically escapes category and file names with thecolon trick, and includes functionality for italicizing the page or section name, and for detecting and categorizing results that producered links.

Use from wikitext

The functions in this module cannot be used directly from #invoke, and must be used through templates instead. Please seeTemplate:Format link for documentation on usage of that template.

Use from other Lua modules

To load this module from another Lua module, use the following code:

localmFormatLink=require('Module:Format link')

You can then use the functions as documented below.

_formatLink

mFormatLink._formatLink{link='Link',display='Display',target='Target',italicizePage=true,italicizeSection=true,categorizeMissing='Pages using formatted red links'}

Formatslink as a wikilink. Categories and files are automatically escaped with thecolon trick, and links to sections are automatically formatted aspage § section, rather than the MediaWiki default ofpage#section.

Several options modify the output:

  • If thedisplay value is present, then it will be used as a display value. Any manual piping (using the{{!}} magic word or similar) present inlink will be overridden by thedisplay value if present.
  • If thetarget value is present, then it will overridelink as a target, but the result will still bedisplayed using either the value fromdisplay, or the result of formattinglink.
  • IfitalicizePage is true, then the page portion of the link is italicized if present.
  • IfitalicizeSection is true, then the section portion of the link is italicized if present.
  • IfcategorizeMissing is a non-empty string, then that value is used as a category name, and that category will be applied if the resulting target of the link (no matter whether throughlink or throughtarget) doesn't exist.
Examples
mFormatLink._formatLink{link='Foo#Bar'} → [[:Foo#Bar|Foo § Bar]] →Foo § Bar
mFormatLink._formatLink{link='Baz',display='Qux'} → [[:Baz|Qux]] →Qux
mFormatLink._formatLink{link='Foo|Bar',display='Baz'} → [[:Foo|Baz]] →Baz
mFormatLink._formatLink{link='#Foo',target='Example#Foo'} → [[:Example#Foo|§ Foo]] →§ Foo
mFormatLink._formatLink{link='The Lord of the Rings#Plot',italicizePage=true} → [[:The Lord of the Rings#Plot|''The Lord of the Rings'' § Plot]] →The Lord of the Rings § Plot
mFormatLink._formatLink{link='Cybercrime Prevention Act of 2012#Disini v. Secretary of Justice',italicizeSection=true} → [[:Cybercrime Prevention Act of 2012#Disini v. Secretary of Justice|Cybercrime Prevention Act of 2012 § ''Disini v. Secretary of Justice'']] →Cybercrime Prevention Act of 2012 § Disini v. Secretary of Justice
mFormatLink._formatLink{link='Nonexistent page',categorizeMissing='Example'} → [[:Nonexistent page]][[Category:Example]] →Nonexistent page
mFormatLink._formatLink{link='Existing',categorizeMissing='Example'} → [[:Existing]] →Existing

formatPages

mFormatLink.formatPages(options,pages)

This derived function is useful for lists that format many links. It formats an array of pages using the_formatLink function, and returns the result as an array. Options in theoptions table are applied, and use the same names as the options for_formatLink.

Example
mFormatLink.formatPages({categorizeMissing='Example'},{'Foo#Bar','Nonexistent page'}){'[[:Foo#Bar|Foo § Bar]]','[[:Nonexistent page]][[Category:Example]]'}

Errors

If_formatLink is used and neither alink nor atarget argument is provided, then the module will produce an error message instead of its usual output, as itcannot then produce valid output.

You can solve this error by providing appropriate parameters to_formatLink, or you may want to ensure that a more descriptive error is provided by a downstream template or module when it would otherwise call_formatLink with inadequate arguments.

The abovedocumentation istranscluded fromModule:Format link/doc.(edit |history)
Editors can experiment in this module'ssandbox(edit |diff) andtestcases(edit |run) pages.
Subpages of this module.

---------------------------------------------------------------------------------- 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.checkTypelocalcheckTypeForNamedArg=libraryUtil.checkTypeForNamedArglocalmArguments-- 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('Module:Arguments')returnmArguments.getArgs(frame,{parentOnly=true})endlocalfunctionremoveInitialColon(s)-- Removes the initial colon from a string, if present.returns:match('^:?(.*)')endlocalfunctionmaybeItalicize(s,shouldItalicize)-- Italicize s if s is a string and the shouldItalicize parameter is true.ifsandshouldItalicizethenreturn'<i>'..s..'</i>'elsereturnsendendlocalfunctionparseLink(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('^(.-)#(.*)$')localpageifnotpreHashthen-- We have a link like [[Foo]].page=linkelseifpreHash~=''then-- We have a link like [[Foo#Bar]].page=preHashend-- Find the section, if it exists.localsectionifpostHashandpostHash~=''thensection=postHashendreturn{link=link,page=page,section=section,display=display,}endlocalfunctionformatDisplay(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)thenreturnpageelseif(notpage)thenreturnmw.ustring.format('§&nbsp;%s',section)elsereturnmw.ustring.format('%s §&nbsp;%s',page,section)endendlocalfunctionmissingArgError(target)mError=require('Module:Error')returnmError.error{message='Error: no link or target specified! ([['..target..'#Errors|help]])'}end---------------------------------------------------------------------------------- Main functions--------------------------------------------------------------------------------functionp.formatLink(frame)-- The formatLink export function, for use in templates.yesno=require('Module:Yesno')localargs=getArgs(frame)locallink=args[1]orargs.linklocaltarget=args[3]orargs.targetifnot(linkortarget)thenreturnmissingArgError('Template:Format link')endreturnp._formatLink{link=link,display=args[2]orargs.display,target=target,italicizePage=yesno(args.italicizepage),italicizeSection=yesno(args.italicizesection),categorizeMissing=args.categorizemissing}endfunctionp._formatLink(options)-- The formatLink export function, for use in modules.checkType('_formatLink',1,options,'table')localfunctioncheck(key,expectedType)--for brevitycheckTypeForNamedArg('_formatLink',key,options[key],expectedTypeor'string',true)endcheck('link')check('display')check('target')check('italicizePage','boolean')check('italicizeSection','boolean')check('categorizeMissing')-- Normalize link and target and check that at least one is presentifoptions.link==''thenoptions.link=nilendifoptions.target==''thenoptions.target=nilendifnot(options.linkoroptions.target)thenreturnmissingArgError('Module:Format link')endlocalparsed=parseLink(options.link)localdisplay=options.displayorparsed.displaylocalcatMissing=options.categorizeMissinglocalcategory=''-- Find the display textifnotdisplaythendisplay=formatDisplay(parsed,options)end-- Handle the target option if presentifoptions.targetthenlocalparsedTarget=parseLink(options.target)parsed.link=parsedTarget.linkparsed.page=parsedTarget.pageend-- Test if page exists if a diagnostic category is specifiedifcatMissingand(mw.ustring.len(catMissing)>0)thenlocaltitle=nilifparsed.pagethentitle=mw.title.new(parsed.page)endiftitleand(nottitle.isExternal)thenlocalsuccess,exists=pcall(function()returntitle.existsend)ifsuccessandnotexiststhencategory=mw.ustring.format('[[Category:%s]]',catMissing)endendend-- Format the result as a linkifparsed.link==displaythenreturnmw.ustring.format('[[:%s]]%s',parsed.link,category)elsereturnmw.ustring.format('[[:%s|%s]]%s',parsed.link,display,category)endend---------------------------------------------------------------------------------- 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)doret[i]=p._formatLink{link=page,categorizeMissing=options.categorizeMissing,italicizePage=options.italicizePage,italicizeSection=options.italicizeSection}endreturnretendreturnp
Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Format_link&oldid=1114037571"
Categories:
Hidden category:

[8]ページ先頭

©2009-2025 Movatter.jp