FANDOM


-- [[Category:Lua Modules]]
-- <nowiki/>
 
--[=[
 
-- LUA script to get Collection Icon for Character or Collection Name
--
----------------------------
-- Function:
-- getCollection
-- 
-- Parameters:
-- 1: Character Name (or Collection short Name)
--      Separate multiple characters with a dollar sign "$"
-- 2: Icon Size in pixels
--      "T" = include Text name/link, size = 25
--      "A" = link to section/anchor on current page
-- 3: Filtered list
--      if present, then filtered list of collections is displayed
--      filtering out collections with item [2] not nil
--
----------------------------
-- Function:
-- getGallery
--
-- Parameters:
-- None.
--]=]
 
local p = {}
 
local collectionData = mw.loadData( 'Module:CharacterCollection/data' )
 
function oneCollection(collection, size, outType, pageName)
    local fileLink = ""
 
    if collection then
        local collName = collection[1]
        local file = mw.ustring.gsub(collName, "[\,\.']", "")
        file = mw.ustring.gsub(file, " ", "_")
        file = mw.ustring.lower(file)
 
        if outType == 1 then
            fileLink = "[[:Category:"
                .. collName
                .. "|"
                .. collName
                .. "]] ("
        end
 
        fileLink = fileLink
            .. "[[File:cc-"
            .. file
            .. "-l.png|x"
            .. size
            .. "px|"
            .. collName
            .. "|link="
 
        if outType == 2 then
            fileLink = fileLink 
                        .. pageName 
                        .. "#"
                        .. mw.uri.anchorEncode(collection[3] or collName)
                        .. "]]"
        else
            fileLink = fileLink 
                        .. "Category:"
                        .. collName
                        .. "]]"
        end
 
        if outType == 1 then
            fileLink = fileLink .. ")"
        end
    end
    return fileLink
end
 
function oneImage(collection)
    local fileLink = ""
 
    if collection then
        local collName = collection[1]
        local file = mw.ustring.gsub(collName, "[\,\.']", "")
        file = mw.ustring.gsub(file, " ", "_")
        file = mw.ustring.lower(file)
 
        fileLink = fileLink
            .. "cc-"
            .. file
            .. "-l.png|'''[[:Category:"
            .. collName
            .. "|"
            .. collName
            .. "]]'''|link=Category:"
            .. collName
    end
    return fileLink
end
 
function p.getCollection(frame)
 
    local tArgs
 
    if frame == mw.getCurrentFrame() then
        fParent = frame:getParent()
        tArgs = fParent.args
 
        if (fParent.args[1]) then
            tArgs = fParent.args
        else
            tArgs = frame.args
        end
    else
        tArgs = frame
    end
 
    local character = tArgs[1] or ""
    local size = tArgs[2]
    local filter = tArgs[3] or ""
 
    local outType = 0
 
    if not size or size == "" then 
        size =  "50"
    elseif not tonumber(size) then
        if size == "A" then
            outType = 2
            size = "40"
        else
            outType = 1
            size = "25"
        end
    end
 
    local collectionFile = ""
    local space = ""
    local pageName = mw.title.getCurrentTitle().prefixedText
 
    local collections = {}
 
    character = mw.ustring.gsub(character, "^%s*(.-)%s*$", "%1") or ''
    character = mw.ustring.lower(character)
 
    if character == "all" then
        for k, v in pairs(collectionData["Collections"]) do
            if filter == "" or v[4] == nil then
                table.insert(collections, v)
            end
        end
 
        table.sort(collections, function(a,b) return a[2] < b[2] end)
 
        for _, coll in ipairs(collections) do
            collectionFile = collectionFile
                            .. space
                            .. oneCollection(coll, size, outType, pageName)
 
            if outType == 1 then
                space = ", "
            else
                space = " "
            end
        end
    else
        for cName in mw.text.gsplit(character, "%s*%$%s*") do
            cName = mw.text.decode(cName)
 
            if collectionData[cName] then
                local collNo = collectionData[cName]
 
                if not collections[collNo] then
                    local collVal = collectionData["Collections"][collNo]
                    collectionFile = collectionFile
                                    .. space
                                    .. oneCollection(collVal, size, outType, pageName)
 
                    if outType == 1 then
                        space = ", "
                    else
                        space = " "
                    end
 
                	collections[collNo] = 1
                end
            end
        end
    end
 
    return collectionFile
end
 
function p.getGallery(frame)
    local collectionFile = '<gallery spacing="small" '
                        .. 'widths="100" '
                        .. 'captionalign="center" '
                        .. 'bordercolor="#000000" '
                        .. 'position="center" '
                        .. 'hideaddbutton="true" '
                        .. 'captionposition="below" '
                        .. 'navigation="true">\n'
    local space = ""
 
    local collections = {}
 
    for k, v in pairs(collectionData["Collections"]) do
        table.insert(collections, v)
    end
 
    table.sort(collections, function(a,b) return a[2] < b[2] end)
 
    for _, coll in ipairs(collections) do
        collectionFile = collectionFile
                        .. space
                        .. oneImage(coll)
 
        space = "\n"
    end
    collectionFile = collectionFile .. '\n</gallery>'
 
    collectionFile = frame:preprocess(collectionFile)
 
    return collectionFile
end
 
return p
Community content is available under CC-BY-SA unless otherwise noted.