League of Legends Wiki

Want to contribute to this wiki?
Sign up for an account, and get started!
You can even turn off ads in your preferences.

Come join the LoL Wiki community Discord server!

READ MORE

League of Legends Wiki
Advertisement

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

-- <pre>
local p = {}
 
local eternalsData = mw.loadData('Module:EternalsData/data')
local lib          = require('Module:Feature')
local color        = require('Module:Color')
local FN           = require('Module:Filename')
local builder    = require("Module:SimpleHTMLBuilder")

-- wrapper template Template:List_of_eternals
function p.eternalList(frame)
    local args = lib.mergeArguments(frame)

    args["series"]    = tonumber(args["series"])
    local resultTable = builder.create('table')
    
    local temp = resultTable
        :addClass('sortable article-table sticky-header')
        :css('width','100%')
        :css('text-align','left')
        :newline()
        :tag('tr')
            :tag('th')
                :wikitext('Champion')
                :css('white-space','nowrap')
            :done()
            :newline()
    if args["series"] == nil and args["champion"] ~= nil then 
        temp
            :tag('th')
                :wikitext('Series')
                :css('white-space','nowrap')
            :done()
            :newline()
    end
        temp
            :tag('th')
                :wikitext('Name')
                :css('white-space','nowrap')
            :done()
            :newline()
            :tag('th')
                :wikitext('Type')
                :css('white-space','nowrap')
            :done()
            :newline()
            :tag('th')
                :wikitext('Description')
                :css('white-space','nowrap')
            :done()
        :done()
    :newline()
    
    local empressNode = builder.create('span')
    empressNode
        :css('color', 'violet')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "empress")
        :wikitext("EMP")

    local guideNode = builder.create('span')
    guideNode
        :css('color', 'green')
        :css('font-weight', '600')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "guide")
        :wikitext("GUI")

    local protectorNode = builder.create('span')
    protectorNode
        :css('color', 'yellow')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "protector")
        :wikitext("PRT")
        
    local tricksterNode = builder.create('span')
    tricksterNode
        :css('color', 'purple')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "trickster")
        :wikitext("TRK")
        
    local wardenNode = builder.create('span')
    wardenNode
        :css('color', 'blue')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "warden")
        :wikitext("WRD")
        
    local warriorNode = builder.create('span')
    warriorNode
        :css('color', 'red')
        :css('vertical-align', 'text-top')
        :attr('data-sort-value', "warrior")
        :wikitext("WAR")
    
    local function eternalsRow(eternalChampion, eternalSeries, eternalName, eternalType, eternalDescription, legacy)
        local eternalsTableRow = builder.create('tr')
        -- Champion
        if (eternalChampion == "Common") then
            eternalsTableRow
                :tag('td')
                    :attr('data-sort-value', 0)
                    :css('white-space', 'nowrap')
                    :wikitext('Common')
                :done()
        else 
            eternalsTableRow
                :tag('td')
                :addClass('champion-icon')
                :attr('data-sort-value', eternalChampion)
                :attr('data-champion', eternalChampion)
                :attr('data-skin', "Original")
                :attr('data-game', "lol")
                :css('text-align', 'left')
                :css('white-space', 'nowrap')
                :wikitext('[[File:' .. FN.championcircle({eternalChampion, "Original"}) .. '|26px|link=' .. eternalChampion .. '/LoL]] ' .. eternalChampion)
            :done()
        end
        -- Series
        if args["series"] == nil and args["champion"] ~= nil then 
            eternalsTableRow
                :tag('td')
                    :wikitext(eternalSeries)
                :done()
        end
        
        local temp = eternalsTableRow
            :tag('td')
        
        -- Legacy
        if legacy then
            temp
                :wikitext(mw.text.decode('[[File:Legacy skin.png|26px|link=|Legacy]]&nbsp;'))
        end
        
        -- Name
        temp
            :addClass('eternal-icon')
            :attr('data-eternal', eternalName)
            :css('text-align', 'left')
            :wikitext(eternalName)
            
        -- Eternal Type
        astring = '<span style="color: cornflowerblue;font-size: large;font-weight: 600;">?</span>'
        if     (eternalType == "Empress") then
            astring = tostring(empressNode)
        elseif (eternalType == "Guide") then
            astring = tostring(guideNode)
        elseif (eternalType == "Protector") then
            astring = tostring(protectorNode)
        elseif (eternalType == "Trickster") then
            astring = tostring(tricksterNode)
        elseif (eternalType == "Warden") then
            astring = tostring(wardenNode)
        elseif (eternalType == "Warrior") then
            astring = tostring(warriorNode)
        end
        eternalsTableRow
            :tag('td')
                :attr('data-sort-value', eternalType or "Missing")
                :tag('span')
                    :attr('title', eternalType or 'Missing')
                    :wikitext(astring)
            :done()
        
        -- Description
        eternalsTableRow
            :tag('td')
                    :wikitext(eternalDescription)
            :done()
        return eternalsTableRow
    end
    
    -- Common Eternals
    if args["champion"] == nil then
        local commonEternals = eternalsData['Common']
        if commonEternals ~= nil and commonEternals[args["series"]] ~= nil then
            local seriesEternals = commonEternals[args["series"]]
            if seriesEternals ~= nil then
                local eternalsTable = {}
                for x in pairs(seriesEternals) do
                    table.insert(eternalsTable, x)
                end
                table.sort(eternalsTable)
                for _, eternalName in pairs(eternalsTable) do
                    -- Add row to table
                    resultTable
                        :newline()
                        :node(eternalsRow('Common', args["series"], eternalName, seriesEternals[eternalName]['eternal'], seriesEternals[eternalName]['description'], seriesEternals[eternalName]['legacy']))
                end
            end
        end
    end
    
    -- Unique Eternals
    local uniqueEternals = eternalsData['Unique']
    if uniqueEternals ~= nil then
        local championsTable = {}
        if args["champion"] == nil then
            for x in pairs(uniqueEternals) do
                table.insert(championsTable, x)    
            end
            table.sort(championsTable)
        else
            table.insert(championsTable, args["champion"])
        end
        for _, eternalChampion in pairs(championsTable) do
            local seriesTable = {}
            if args["series"] == nil then
                for x in pairs(uniqueEternals[eternalChampion]) do
                    table.insert(seriesTable, x)
                end
                table.sort(seriesTable)
            else
                table.insert(seriesTable, args["series"])
            end
            for _, eternalSeries in pairs(seriesTable) do
                local seriesEternals = uniqueEternals[eternalChampion][eternalSeries]
                if seriesEternals ~= nil then
                    local eternalsTable = {}
                    for x in pairs(seriesEternals) do
                        table.insert(eternalsTable, x)
                    end
                    table.sort(eternalsTable)
                    for _, eternalName in pairs(eternalsTable) do
                        -- Add row to table
                        resultTable
                        :newline()
                        :node(eternalsRow(eternalChampion, eternalSeries, eternalName, seriesEternals[eternalName]['eternal'], seriesEternals[eternalName]['description'], seriesEternals[eternalName]['legacy']))
                    end
                end
            end
        end
    end
    
    -- END
    resultTable:allDone()
    return tostring(resultTable)
end

-- wrapper template Template:Champion_eternals
function p.eternalPage(frame)
    local args = lib.mergeArguments(frame)
    local _champion = args['champion'] or args[1]
    local _series = tonumber(args['series'])
    local s = ''
    
    local function eternalsRows(eternalSeries)
        local rows = {}
        local eternalsTable = {}
        for eternalName in pairs(eternalSeries) do
            table.insert(eternalsTable, eternalName)
        end
        table.sort(eternalsTable)
        for _, eternalName in ipairs(eternalsTable) do
            local eternalType = eternalSeries[eternalName]['eternal']
            local eternalDescription = eternalSeries[eternalName]['description']
            local eternalLegacy = eternalSeries[eternalName]['legacy']
            local eternalRow = builder.create('div')
                :cssText('position:relative; display:flex; align-items:center; width:100%; overflow:auto; border: 1px solid #404040; box-sizing: border-box; margin-bottom: 12px')
            if eternalType == 'Empress' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(196,102,255,0.1), rgba(196,102,255,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            elseif eternalType == 'Guide' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(3,252,119,0.1), rgba(3,252,119,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            elseif eternalType == 'Protector' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(255,251,31,0.1), rgba(255,251,31,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            elseif eternalType == 'Trickster' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(227,3,252,0.1), rgba(227,3,252,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            elseif eternalType == 'Warden' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(0,200,255,0.1), rgba(0,200,255,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            elseif eternalType == 'Warrior' then
                eternalRow
                    :cssText('background:linear-gradient(25deg, rgba(255,47,15,0.1), rgba(255,47,15,0.05), rgba(1,10,19,0.3), rgba(1,10,19,0.4), rgba(1, 10, 19, 0.5));')
            end
            eternalRow
                :tag('div')
                    :css('float', 'left')
                    :css('margin-right', '10px')
                    :wikitext('[[File:The ' .. eternalType .. ' Eternal unique icon.png|frameless|' .. eternalType .. '|link=Eternals#Types]]')
                :done()
            if eternalLegacy then
                eternalRow
                    :tag('div')
                        :cssText('position:absolute; top:82px; left:82px;')
                        :wikitext('[[File:Legacy skin.png|40px|Legacy|link=Eternals#Types]]')
                    :done()
            end
            eternalRow
                :tag('div')
                    :css('margin-right', '15px')
                    :wikitext('<span class="league-font" style="font-size:18px"><b>' .. eternalName .. '</b></span><br>' .. eternalDescription)
                :done()
            rows[#rows+1] = tostring(eternalRow)
        end
        return table.concat(rows)
    end
    if _series then
        local eternalSeries = eternalsData['Unique'][_champion][_series] or {}
	    s = eternalsRows(eternalSeries)
    else
        local allEternalSeries = eternalsData['Unique'][_champion] or {}
        local seriesTable = {}
        for series in pairs(allEternalSeries) do
            table.insert(seriesTable, series)
        end
        table.sort(seriesTable, function(a,b) return a > b end)
        local tabberargs = {}
        for series in ipairs(seriesTable) do
            tabberargs[#tabberargs+1] = 'Series '
            tabberargs[#tabberargs+1] = series
            tabberargs[#tabberargs+1] = '='
            tabberargs[#tabberargs+1] = eternalsRows(allEternalSeries[series])
            tabberargs[#tabberargs+1] = '|-|'
        end
        tabberargs = table.concat(tabberargs)
        s = frame:callParserFunction{ name = '#tag:tabber', args = tabberargs }
    end
    return s
end

return p
 
-- </pre>
-- [[Category:Lua]]
Advertisement