Mô đun:URL

Tài liệu mô đun[tạo]
---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
Nhân vật Kanroji Mitsuri (Luyến Trụ) - Kimetsu No Yaiba
Nhân vật Kanroji Mitsuri (Luyến Trụ) - Kimetsu No Yaiba
Kanroji Mitsuri「甘露寺 蜜璃 Kanroji Mitsuri」là Luyến Trụ của Sát Quỷ Đội.
Tóm tắt chương 226 Jujutsu Kaisen
Tóm tắt chương 226 Jujutsu Kaisen
Đột nhiên, Hiruguma nói rằng nếu tiếp tục ở trong lãnh địa, Gojo vẫn phải nhận đòn tất trúng
Cảm nhận của cư dân mạng Nhật Bản về Conan movie 26: Tàu Ngầm Sắt Đen
Cảm nhận của cư dân mạng Nhật Bản về Conan movie 26: Tàu Ngầm Sắt Đen
Movie đợt này Ran đóng vai trò rất tích cực đó. Không còn ngáng chân đội thám tử nhí, đã thế còn giúp được cho Conan nữa, bao ngầu
Giới thiệu Kiseijuu - bộ anime/manga kinh dị hay nhức nách
Giới thiệu Kiseijuu - bộ anime/manga kinh dị hay nhức nách
Được xem là một trong những siêu phẩm kinh dị khoa học viễn tưởng và giành được vô số giải thưởng của thế giới M-A, Parasyte chủ yếu nhắm tới độc giả là nam giới trẻ và trưởng thành