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
Eustass Kid có tiền thưởng 3 tỷ Berries và toàn bộ thủy thủ đoàn đã bị tiêu diệt hoàn toàn
Eustass Kid có tiền thưởng 3 tỷ Berries và toàn bộ thủy thủ đoàn đã bị tiêu diệt hoàn toàn
Kid phá hủy toàn bộ tàu của hạm đội hải tặc Tóc Đỏ và đánh bại tất cả các thuyền trưởng của hạm đội đó
Nhân vật Tira - Thủ Lĩnh hội sát thủ Ijaniya trong Overlord
Nhân vật Tira - Thủ Lĩnh hội sát thủ Ijaniya trong Overlord
Tira chị em sinh 3 của Tina Tia , khác vs 2 chị em bị rung động bởi người khác thì Tira luôn giữ vững lập trường và trung thành tuyệt đối đối vs tổ chức sát thủ của mình
Tại sao bạn không cắt lỗ (theo tâm lý học)
Tại sao bạn không cắt lỗ (theo tâm lý học)
Đưa ra quyết định mua cổ phiếu là bạn đang bước vào 1 cuộc đặt cược, nếu đúng bạn sẽ có lời và nếu sai thì bạn chịu lỗ
Công thức tính sát thương của Shenhe và Yunjin
Công thức tính sát thương của Shenhe và Yunjin
Shenhe và Yunjin có cơ chế gây sát thương theo flat DMG dựa trên stack cấp cho đồng đội, nên sát thương mà cả 2 gây ra lại phần lớn tính theo DMG bonus và crit của nhân vật khác