Module:URL/sandbox-samecase
Appearance
From Wikipedia, the free encyclopedia
You might want to create a documentation page for this Scribunto module.
Editors can experiment in this module's sandbox (create | mirror) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
Editors can experiment in this module's sandbox (create | mirror) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
-- -- This module implements {{URL}} but does not force the url into lowercase -- -- See unit tests at [[Module:URL/tests]] localp={} localfunctionsafeUri(s) localsuccess,uri=pcall(function() returnmw.uri.new(s) end) ifsuccessthen returnuri end end localfunctionextractUrl(args) forname,valinpairs(args)do 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 functionp._url(url,text,msg) url=mw.text.trim(urlor'') text=mw.text.trim(textor'') localnomsg=msg: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') -- Handle URLs from Wikidata of the format http:// url=mw.ustring.gsub(url,'^[Hh][Tt][Tt][Pp]([Ss]?)://','http%1://') 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=(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 caling from Template:URL. --]] functionp.url(frame) localtemplateArgs=frame.args localparentArgs=frame:getParent().args localurl=templateArgs[1]orparentArgs[1]or'' localtext=templateArgs[2]orparentArgs[2] localmsg=templateArgs.msgorparentArgs.msgor'' ifnottextthen url=urlorextractUrl(templateArgs)orextractUrl(parentArgs) end text=textor'' 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]or'' localtext=templateArgs[2]orparentArgs[2]or'' -- default to no message localmsg=templateArgs.msgorparentArgs.msgor'no' iftext==''then url=urlorextractUrl(templateArgs)orextractUrl(parentArgs) end -- strip out html tags and [ ] from url url=(urlor''):gsub("<[^>]*>",""):gsub("[%[%]]","") -- truncate anything after a space url=url:gsub("%%20"," "):gsub(" .*","") returnp._url(url,text,msg) end returnp