Módulo:URL
Ir para navegação
Ir para pesquisar
40x40px | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
40x40px | Este módulo é usado em mais de 20 000 páginas. (Ver Wikihelp:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na predefinição de testes ou em Módulo:URL/Testes (ou ainda em sua página de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
Este módulo implementa a predefinição {{URL}}
.
-- -- Este módulo implementa a {{URL}} -- -- Veja unidade de testes em [[Módulo:URL/testes]] 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', "''exemplo.com''", "''texto de exibição opicional''" } } else return text end end -- Se a URL contiver espaços descodificados, codificá-los, porque o MediaWiki, caso contrário, pode interpretar um espaço como o fim da URL url = mw.ustring.gsub(url, '%s', function(s) return mw.uri.encode(s, 'PATH') end) -- Se houver uma string de consulta vazia ou fragmento id, removê-lo, uma vez que irá fazer com que mw.uri.new lançe um erro 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') -- Lidar com URLs da Wikidata do formato http:// url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?)://', 'http%1://') local uri = safeUri(url) -- Lidar com URLs sem protocolo e com URLs que são relativo a protocolo, -- ex.: www.exemplo.com/foo or www.exemplo.com:8080/foo, e //www.exemplo.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 -- A URL é mal-formado, então apenas mostrar o que quer que foi aprovada em text = url end end -- Adicionar <wbr> depois da sequências _/.-# text = mw.ustring.gsub(text,"(/+)","<wbr/>%1") -- Esta entrada DEVE ser a primeira. "<wbr/>" tem uma "/" nele, você sabe. text = mw.ustring.gsub(text,"(%.+)","<wbr/>%1") -- texto = mw.ustring.gsub(text,"(%-+)","<wbr/>%1") -- DISATIVADO por agora 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 return p