Jump to content
Wikipedia The Free Encyclopedia

Module:URL/sandbox-samecase

From Wikipedia, the free encyclopedia
Module documentation[create] [purge]
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.
 --
 -- 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

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