Module:ItemCollection

-- --

--[=[

-- 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(collection[3] or collName, "[\,\.']", "") file = mw.ustring.gsub(file, " ", "_") file = mw.ustring.lower(file)

if outType == 1 then fileLink = ""               .. (collection[3] or collName)                .. " ("        end

fileLink = fileLink .. "[[File:cc-"           .. file            .. "-l.png|x"            .. size            .. "px|"            .. (collection[3] or collName)            .. "|link="

if outType == 2 then fileLink = fileLink .. pageName .. "#"                       .. mw.uri.anchorEncode(collection[4] 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(collection[3] or collName, "[\,\.']", "") file = mw.ustring.gsub(file, " ", "_") file = mw.ustring.lower(file)

fileLink = fileLink .. "cc-" .. file .. "-l.png|"           .. (collection[3] or 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[5] == 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 = '' collectionFile = frame:preprocess(collectionFile)

return collectionFile end

return p