Модуль используется в шаблоне }.
All tests passed.
test_formatUrl:
Text | Expected | Actual | |
---|---|---|---|
{{#invoke:URL | formatUrl | }} | |||
{{#invoke:URL | formatUrl | EXAMPLE.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | example.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | www.example.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | http://www.example.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | https://www.example.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | ftp://www.example.com }} | example.com | example.com | |
{{#invoke:URL | formatUrl | ftp://ftp.example.com }} | ftp.example.com | ftp.example.com | |
{{#invoke:URL | formatUrl | http://www.example.com/ }} | example.com | example.com | |
{{#invoke:URL | formatUrl | www.example.com/foo }} | example.com/foo | example.com/foo | |
{{#invoke:URL | formatUrl | http://www.example.com/foo }} | example.com/foo | example.com/foo | |
{{#invoke:URL | formatUrl | http://sub.example.com/foo/bar }} | sub.example.com/foo/bar | sub.example.com/foo/bar | |
{{#invoke:URL | formatUrl | example.com?a }} | example.com?a | example.com?a | |
{{#invoke:URL | formatUrl | http://sub.example.com/foo/bar?a }} | sub.example.com/foo/bar?a | sub.example.com/foo/bar?a | |
{{#invoke:URL | formatUrl | example.com | title }} | title | title | |
{{#invoke:URL | formatUrl | example.com?a | title }} | title | title | |
{{#invoke:URL | formatUrl | http://sub.example.com/foo/bar | title }} | title | title | |
{{#invoke:URL | formatUrl | http://sub.example.com/foo/bar?a | title }} | title | title |
function startsWith( source, substring ) if mw.ustring.len( substring ) > mw.ustring.len( source ) then return false end return mw.ustring.sub( source, 1, mw.ustring.len( substring ) ) == substring end p = {} function formatUrlImpl( source, title ) local scheme, host, path; local hostStartPosition local schemeDelimeterPosition = mw.ustring.find( source, "://", 1, true ) if schemeDelimeterPosition then scheme = mw.ustring.sub( source, 1, schemeDelimeterPosition + 2) hostStartPosition = schemeDelimeterPosition + 3 else scheme = "http://" source = scheme .. source hostStartPosition = 8 end if title then return '[' .. source .. ' ' .. title .. ']'; end local hostDelimeterPosition = mw.ustring.find( source, "/", hostStartPosition, true ) if hostDelimeterPosition then host = mw.ustring.sub( source, hostStartPosition, hostDelimeterPosition - 1 ) if hostDelimeterPosition == mw.ustring.len( source ) then path = nil else path = mw.ustring.sub( source, hostDelimeterPosition + 1 ) end else host = mw.ustring.sub( source, hostStartPosition ) end -- post-split format options if startsWith( host, 'www.' ) then host = mw.ustring.sub( host, 5 ) end host = mw.language.new( 'en' ):lc( host ) if path and path ~= '' and path ~= '/' then return '[' .. source .. ' ' .. host .. '/' .. path .. ']'; else return '[' .. source .. ' ' .. host .. ']'; end end function p.formatUrl( frame ) local url = frame.args[1] or ''; local title = frame.args[2] or ''; url = mw.text.trim( url ) title = mw.text.trim( title ) if url == '' then return nil end if title == '' then title = nil end return formatUrlImpl( url, title ) end function p.formatUrlSingle( url ) url = mw.text.trim( url ) if url == '' then return nil end return formatUrlImpl( url, nil ) end return p