Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Link: Difference between revisions

From Teriock
Content deleted Content added
// via Wikitext Extension for VSCode
// via Wikitext Extension for VSCode
Line 41: Line 41:
'AP',
'AP',
'AV0',
'AV0',
'AV',
'BV',
'AC',
'DC',
}
}



Revision as of 00:58, 31 January 2025

Documentation for this module may be created at Module:Link/doc

local p = {}

local namespaces = {
    '',
    'Core',
    'Keyword',
    'Category',
    'Condition',
    'Damage',
    'Drain',
    'Property',
    'Ability',
}

local upperCaseNS = {
    'Ability',
    'Class',
}

local upperCaseText = {
    'Ethereal',
    'Ethereal Realm',
    'HP',
    'MP',
    'STR',
    'INT',
    'MOV',
    'SNK',
    'PER',
    'SIZE',
    'P',
    'L',
    'M',
    'R',
    'S',
    'W',
    'Material',
    'Material Realm',
    'GM',
    'UB',
    'AP',
    'AV0',
    'AV',
    'BV',
    'AC',
    'DC',
}

function contains(tbl, value)
    for _, v in ipairs(tbl) do
        if v == value then
            return true
        end
    end
    return false
end

function findNamespace ( title )
    for _, namespace in ipairs(namespaces) do
        local fullTitle = namespace == '' and title or (namespace .. ':' .. title)
        local page = mw.title.new(fullTitle)
        if page and page.exists then
            return namespace
        end
    end
    return ''
end

function p.l ( frame )
    local args = frame.args
    local title = args[1]
    for _, namespace in ipairs(namespaces) do
        local fullTitle = namespace == '' and title or (namespace .. ':' .. title)
        local page = mw.title.new(fullTitle)
        if page and page.exists then
            if namespace == 'Category' then
                return ' :' .. fullTitle
            else
                return fullTitle
            end
        end
    end
    return title
end

function p.m ( frame )
    local args = frame.args
    local a1 = args['i']
    local a2 = args['ii']
    local a3 = args['iii']
    if a1 == '0' then
        a1 = nil
    end
    if a2 == '0' then
        a2 = nil
    end
    if a3 == '0' then
        a3 = nil
    end
    local alc = args['lc']
    local auc = args['uc']
    if alc == '0' then
        alc = nil
    end
    if auc == '0' then
        auc = nil
    end
    local ns = ''
    local page = ''
    local text = ''
    local lc = true
    local textPre = ''
    local textPost = ''
    if args['pre'] then
        textPre = args['pre']
    end
    if args['post'] then
        textPost = args['post']
    end
    if a3 then
        ns = a1
        page = a2
        text = a3
    elseif a2 then
        if contains(namespaces, a1) then
            ns = a1
            page = a2
            text = a2
        else
            ns = findNamespace(a1)
            page = a1
            text = a2
        end
    else
        ns = findNamespace(a1)
        page = a1
        text = a1
    end
    if contains(upperCaseNS, ns) or contains(upperCaseText, text) then
        lc = false
    end
    if auc then
        lc = false
    end
    if alc then
        lc = true
    end
    text = textPre .. text .. textPost
    if lc then
        text = frame:preprocess( string.lower(text) )
    end
    if ns == '' then
        return frame:preprocess( '[[' .. page .. '|' .. text .. ']]' )
    else
        return frame:preprocess( '[[:' .. ns .. ':' .. page .. '|' .. text .. ']]' )
    end
end

function p.n ( frame )
    local args = frame.args
    local ns = args[1]
    for _, namespace in ipairs(namespaces) do
        if ns == namespace then
            return 'true'
        end
    end
    return ''
end

return p