Mô đun:URL

---Mô đun này hỗ trợ {{URL}}.
--
-- Xem các trường hợp kiểm thử đơn vị tại [[Module:URL/tests]].

local p = {}
 
function trim(s)
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
end

function safeUri(s)
    local success, uri = pcall(function()
        return mw.uri.new(s)
    end)
    if success then
        return uri
    end
end

function p._url(url, text)
    url = trim(url or '')
    text = trim(text or '')
    
    if url == '' then
        if text == '' then
            return mw.getCurrentFrame():expandTemplate{ title = 'tlx', args = { 'URL', "''example.com''", "''văn bản hiển thị tùy chọn''" } }
        else
            return text
        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) return mw.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://')
    local uri = 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
    if uri and (not uri.protocol or (uri.protocol and not uri.host)) and url:sub(1, 2) ~= '//' then
        url = 'http://' .. url
        uri = safeUri(url)
    end
    
    if text == '' then
        if uri then
            if uri.path == '/' then uri.path = '' end
            
            local port = ''
            if uri.port then port = ':' .. uri.port end
            
            text = mw.ustring.lower(uri.host or '') .. port .. (uri.relativePath or '')
        else -- URL is badly-formed, so just display whatever was passed in
            text = url
        end
    end
-- 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")
    return mw.ustring.format('<span class="url">[%s %s]</span>', url, text)
end

function p.url(frame)
    local templateArgs = frame.args
    local url = templateArgs[1] or ''
    local text = templateArgs[2] or ''
    return p._url(url, text)
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.
--]]
function p.url2(frame)
	local templateArgs = frame.args
	local parentArgs = frame:getParent().args
	local url = templateArgs[1] or parentArgs[1]
	local text = templateArgs[2] or parentArgs[2] or ''
	-- default to no message
	local msg = templateArgs.msg or parentArgs.msg or 'no'
	url = url or extractUrl(templateArgs) or extractUrl(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.
	local u1, penicon = mw.ustring.match( url, "(.*)(&nbsp;<span class='penicon.*)" )
	if penicon then url = u1 end
	-- strip out html tags and [ ] from url
	url = (url or ''):gsub("<[^>]*>", ""):gsub("[%[%]]", "")
	-- truncate anything after a space
	url = url:gsub("%%20", " "):gsub(" .*", "")
	return (p._url(url, text, msg) or "") .. (penicon or "")
end

return p
Chúng tôi bán
Bài viết liên quan
Sự khác biệt về mặt
Sự khác biệt về mặt "thông số" của Rimuru giữa hai phiên bản WN và LN
Những thông số khác nhau giữa 2 phiên bản Rimuru bản Web Novel và Light Novel
Có những chuyện chẳng thể nói ra trong Another Country (1984)
Có những chuyện chẳng thể nói ra trong Another Country (1984)
Bộ phim được chuyển thể từ vở kịch cùng tên của Julian Mitchell về một gián điệp điệp viên hai mang Guy Burgess
[X-Men] Nhân vật Apocalypse - The First One
[X-Men] Nhân vật Apocalypse - The First One
Câu chuyện của Apocalypse (En Sabah Nur) bắt đầu khi anh ta sinh ra vào khoảng 5000 năm trước công nguyên ở Ai Cập
Cha Hae-In: Cô Thợ Săn S-Class Mạnh Mẽ và Bí Ẩn Trong Solo Leveling
Cha Hae-In: Cô Thợ Săn S-Class Mạnh Mẽ và Bí Ẩn Trong Solo Leveling
Cha Hae-In là một nhân vật phụ trong bộ truyện Solo Leveling (Cấp độ cô đơn), một tác phẩm nổi tiếng trong thể loại truyện tranh webtoon của Hàn Quốc