Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
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.
-- -- 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'') -- Check for pre-formatted url. Catches '{{url|{{url|google.com}}}}' that can occur via template if(mw.ustring.match(url,'^<span class="url">'))then returnurl,text,msg end 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,"(.*)( <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