Jump to content
Wikipedia The Free Encyclopedia

Module:URL

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
[画像:Warning] This Lua module is used in MediaWiki:Titleblacklist-custom-URL , and on approximately 644,000 pages, or roughly 1% 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 own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them.
This module is rated as ready 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 on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Page template-protected This module is currently protected from editing.
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.

This module implements {{URL }} and {{URL2 }}. Please see the template page for documentation.

Lua interface

The p._url(url, text, msg) function may be used by other Lua modules. It returns a formatted Wikitext for the given URL, made suitable for line wrapping using . It takes the following parameters:

url
REQUIRED. The URL to format.
text
OPTIONAL. Display text to put in the Wikitext link. Defaults to a pretty version of the URL.
msg
OPTIONAL. String. If content is false, n or N, do not emit a help message (using {{tlx}}) when URL is not given.

Example

The following module emits a prettified link to log the user out. It will wrap correctly to most widths.

localurl=require('Module:URL')._url
localp={}
p.main=function(frame)
returnurl("https://en.wikipedia.org/wiki/Special:UserLogout")
end
returnp

See also

The above documentation is transcluded from Module:URL/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (edit | run) pages.
Subpages of this module.

 --
 -- This module implements {{URL}}
 --
 -- See unit tests at [[Module:URL/testcases]]

 localp={}

 localfunctionsafeUri(s)
 localsuccess,uri=pcall(function()
 returnmw.uri.new(s)
 end)
 ifsuccessthen
 returnuri
 end
 end

 localfunctionextractUrl(args)
 forname,valinpairs(args)do
 ifname~=2andname~="msg"then
 localurl=name.."="..val;
 url=mw.ustring.gsub(url,'^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])','http%1://%3')
 localuri=safeUri(url);
 ifurianduri.hostthen
 returnurl
 end
 end
 end
 end

 functionp._url(url,text,msg)
 url=mw.text.trim(urlor'')
 text=mw.text.trim(textor'')
 localnomsg=(msgor''):sub(1,1):lower()=="n"ormsg=='false'-- boolean: true if msg is "false" or starts with n or N

 ifurl==''then
 iftext==''then
 ifnomsgthen
 returnnil
 else
 returnmw.getCurrentFrame():expandTemplate{title='tlx',args={'URL',"''example.com''","''optional display text''"}}
 end
 else
 returntext
 end
 end

 -- If the URL contains any unencoded spaces, encode them, because MediaWiki will otherwise interpret a space as the end of the URL.
 url=mw.ustring.gsub(url,'%s',function(s)returnmw.uri.encode(s,'PATH')end)

 -- If there is an empty query string or fragment id, remove it as it will cause mw.uri.new to throw an error
 url=mw.ustring.gsub(url,'#$','')
 url=mw.ustring.gsub(url,'%?$','')

 -- If it's an HTTP[S] URL without the double slash, fix it.
 url=mw.ustring.gsub(url,'^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])','http%1://%3')

 localuri=safeUri(url)

 -- Handle URL's without a protocol and URL's that are protocol-relative, 
 -- e.g. www.example.com/foo or www.example.com:8080/foo, and //www.example.com/foo
 ifuriand(noturi.protocolor(uri.protocolandnoturi.host))andurl:sub(1,2)~='//'then
 url='http://'..url
 uri=safeUri(url)
 end

 iftext==''then
 ifurithen
 ifuri.path=='/'thenuri.path=''end

 localport=''
 ifuri.portthenport=':'..uri.portend

 text=mw.ustring.lower(uri.hostor'')..port..(uri.relativePathor'')

 -- Add <wbr> before _/.-# sequences
 text=mw.ustring.gsub(text,"(/+)","<wbr/>%1")-- This entry MUST be the first. "<wbr/>" has a "/" in it, you know.
 text=mw.ustring.gsub(text,"(%.+)","<wbr/>%1")
 -- text = mw.ustring.gsub(text,"(%-+)","<wbr/>%1") 	-- DISABLED for now
 text=mw.ustring.gsub(text,"(%#+)","<wbr/>%1")
 text=mw.ustring.gsub(text,"(_+)","<wbr/>%1")
 else-- URL is badly-formed, so just display whatever was passed in
 text=url
 end
 end

 returnmw.ustring.format('<span class="url">[%s %s]</span>',url,text)
 end

 --[[
 The main entry point for calling from Template:URL.
 --]]
 functionp.url(frame)
 localtemplateArgs=frame.args
 localparentArgs=frame:getParent().args
 localurl=templateArgs[1]orparentArgs[1]
 localtext=templateArgs[2]orparentArgs[2]or''
 localmsg=templateArgs.msgorparentArgs.msgor''
 url=urlorextractUrl(templateArgs)orextractUrl(parentArgs)or''
 returnp._url(url,text,msg)
 end

 --[[
 The entry point for calling from the forked Template:URL2.
 This function returns no message by default.
 It strips out wiki-link markup, html tags, and everything after a space.
 --]]
 functionp.url2(frame)
 localtemplateArgs=frame.args
 localparentArgs=frame:getParent().args
 localurl=templateArgs[1]orparentArgs[1]
 localtext=templateArgs[2]orparentArgs[2]or''
 -- default to no message
 localmsg=templateArgs.msgorparentArgs.msgor'no'
 url=urlorextractUrl(templateArgs)orextractUrl(parentArgs)or''
 -- if the url came from a Wikidata call, it might have a pen icon appended
 -- we want to keep that and add it back at the end.
 localu1,penicon=mw.ustring.match(url,"(.*)(&nbsp;<span class='penicon.*)")
 ifpeniconthenurl=u1end
 -- strip out html tags and [ ] from url
 url=(urlor''):gsub("<[^>]*>",""):gsub("[%[%]]","")
 -- truncate anything after a space
 url=url:gsub("%%20"," "):gsub(" .*","")
 return(p._url(url,text,msg)or"")..(peniconor"")
 end

 returnp

AltStyle によって変換されたページ (->オリジナル) /