FANDOM


--<pre> Creates links and changes wikitext when it detects external links
-- Syntax
-- {{#invoke:links|main|page/url|label|type=ext/local}}
local p = {}
 
function p.link(url,desc,typ)
    local url = url or ""
    local lenUrl = mw.ustring.len(url)
    local uMatch = mw.ustring.match
 
    if typ == "ext" and (not uMatch(url, "%.") or  lenUrl < 3)
            or lenUrl < 1 then
        return
    end
 
    local prefix = "[["
    local suffix = "]]"
    local separator = "|"
 
    if url:match("^[Cc]ategory:") and typ ~= "ext" then
        prefix = "[[:"
    end
 
    -- Adapt if url is external
    if typ ~= "local"  and (uMatch(url, "www%.") or uMatch(url, "^http"))
            or typ == "ext" then
        prefix = "[//"
 
        if uMatch(url, "^http") then
            prefix = "["
        end
 
        suffix = "]"
        separator = " "
    end
 
    local desc = desc or ""
 
    if mw.ustring.len(desc) < 1 then
        separator = ""
    end
 
    return prefix .. url .. separator .. desc .. suffix
end
 
function p.main(frame)
    local args = require("Dev:Arguments").getArgs(frame)
 
    return p.link(args[1] or args.page , args[2] or args.desc,args.type)
end
 
-- This creates and format many links
function p.batch(frame)
    local args = require("Dev:Arguments").getArgs(frame)
    local separator = args.separator
    local delimiter = args.delimiter
 
    return  p.createLinkBatch(args, separator, delimiter)
end
 
--@links : a table containg links, e.g. {'Lua label1 type','www.google.com google ext'}
--@separator: a separator between each link
--@delimiter : an optional delimiter that will separate the label, link & type
function p.createLinkBatch(links, separator, delimiter)
    local linkTable = {}
    local linkBatch,linkUrl,linkLabel,linkType = "","","",""
    local delimiter = delimiter or "%s"
    local separator = separator or " • "
    local linkLen = 0
 
    for _, linkData in ipairs(links) do
        linkLen = linkData:len()
        linkType = linkData:sub(linkLen-2)
 
        if linkType ~="ext" and linkType ~= "int" then
            linkType = ""
        else 
            linkData = linkData:sub(1, linkLen-4)
        end
 
        linkTable = mw.text.split(linkData, delimiter)
 
        linkUrl = linkTable[1]
        linkLabel = linkTable[2]
        linkBatch = linkBatch .. p.link(linkUrl,linkLabel,linkType) .. separator
    end
 
    return linkBatch
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.