League of Legends Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 274: Zeile 274:
 
end
 
end
 
 
if luaname ~= (jsonname:match'^%s*(.*%S)' or '') then
+
if luaname ~= (string.match(jsonname, '^%s*(.*%S)') or '') then
 
s = s .. "\n* " .. skinid .. " " .. luaname .. " ----> "
 
s = s .. "\n* " .. skinid .. " " .. luaname .. " ----> "
 
 

Version vom 9. Mai 2020, 13:54 Uhr

Die Dokumentation für dieses Modul kann unter Modul:SkinThemes/Doku erstellt werden

-- <pre>
local p    = {}

local luaskinData  = mw.loadData('Module:SkinData/data') 
local lib          = require('Module:Feature')
local json         = require('Module:JSON')
local userError    = require('Dev:User error')
local IL           = require('Module:ImageLink')

-- TEST FUNCTIONS:

function oldestskins(frame)
    
end

function p.test(frame)
    local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
    local titleobject  = mw.title.new(args[1])
    local s = titleobject:getContent()
    return s
end

-- EXTRACTING LUA FUNCTIONS:

function p.get(frame)
    local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
        
    local luauniverseData = mw.loadData('Module:SkinData/universes')
    local lualinkData     = mw.loadData('Module:SkinData/setlinks')
    
    local exclude         = lib.validateName(args["exclude"] or args[2] or nil)
    local link            
    local inputskinname   
    local themeexists     
    
    local skintable       = {}
    local resulttable     = {}
    local set_to_universe = {}
    local theme           = {}; theme[1] = args['theme'] or args[1]
    
    local s               = "\n<ul>"
    local s2
    local skincount
    
    for universename, universedata in pairs(luauniverseData) do
        for _, universeset in pairs(universedata) do
            set_to_universe[universeset] = universename
        end
    end
    
    if theme[1] ~= nil and luaskinData[exclude] ~= nil then
        local t = luaskinData[exclude]["skins"]
        
        for skinname, sdata in pairs(t) do
            if sdata["id"] ~= nil then
                if theme[1] == skinname then
                    local luatheme = sdata["set"]
                    
                    if luatheme ~= nil then
                        inputskinname = theme[1]
                        theme[1]      = nil
                        
                        for _, skintheme in pairs(luatheme) do
                            themeexists = 1
                            
                            for _,tabletheme in pairs (theme) do
                                if skintheme == tabletheme or set_to_universe[skintheme] == tabletheme then
                                   themeexists = 0
                                end
                            end
                            
                            if themeexists == 1 then
                                table.insert(theme,set_to_universe[skintheme] or skintheme)
                            end
                        end
                    else
                        theme = nil
                    end
                    break
                end
            else
                return ""
            end
        end
    end
    
    if theme == nil then
        return ""
    end
    
    for tableindex, tabletheme in pairs (theme) do
        for championname, cdata in pairs(luaskinData) do
            local t = cdata["skins"]
            
            for skinname,sdata in pairs(t) do
                if sdata["id"] ~= nil and (inputskinname == nil or (inputskinname ~= nil and (skinname) ~= (inputskinname .. " " .. exclude))) then
                    local luatheme = sdata["set"]
                    
                    if luatheme ~= nil then
                        for _, subtheme in pairs(luatheme) do
                            if subtheme == tabletheme or set_to_universe[subtheme] == tabletheme then
                                if resulttable[skinname] == nil then
                                    resulttable[skinname] = {}
                                    table.insert(skintable, skinname)
                                end
                                
                                table.insert(resulttable[skinname], championname)
                                break
                            end
                        end
                    end
                end
            end
        end
        
        table.sort(skintable,orderup)

        s2 = "<ul>"
        skincount = 0
        
        for _, skinname in pairs(skintable) do
            table.sort(resulttable[skinname],orderup)
            skincount = skincount + #resulttable[skinname]
            
            for _, championname in pairs(resulttable[skinname]) do
                s2 = s2 .. "<li>" .. csl(championname, skinname) .. "</li>"
            end
        end
        
        s2 = s2 .. "</ul>"
        
        if s2 ~= "" then
            if set_to_universe[tabletheme] ~= nil then
                link = lualinkData[tabletheme] or lualinkData[set_to_universe[tabletheme]]
            else
                link = lualinkData[tabletheme]
            end
            
            if tableindex == 1 then
                s = s .. "<li>Dieser Skin teilt sich das "
            else
                s = s .. "<li>Er teilt sich außerdem das "
            end
            
            if link ~= "false" then
                s = s .. "[[" .. (link or string.gsub(set_to_universe[tabletheme] or tabletheme, ": ", "/")) .. "|" .. (set_to_universe[tabletheme] or tabletheme) .. "]]"
            else
                s = s .. "'" .. tabletheme .. "' "
            end
            
            s = s .. '-Thema mit: '
            
            if skincount > 5 then
                s = s .. '<div class="columntemplate" style="-moz-column-count:2; -webkit-column-count:2; column-count:2;">' .. s2 .. '</div>'
            else
               s = s .. s2
            end
            
            s = s .. "</li>"
        end
        skintable       = {}
        resulttable     = {}
    end
    s = s .. "</ul>"
    return s
end

function p.unofficialtable(frame)
    local luauniverseData = mw.loadData('Module:SkinData/universes')
    local setnames      = {}
    local resulttable   = {}
    local skintable     = {}
    local setids        = {}
    local universenames = {}
    local universeids   = {}
    local s             = ""
    
    s = s .. '<table class="wikitable">\n'
    s = s .. '<tr><th width="20%">Name des Universums</th><th width="20%">Name des Sets</th><th>Skins</th></tr>\n'
    
    for universename, universedata in pairs(luauniverseData) do
        for _, setname in pairs(universedata) do
            if universeids[setname] == nil then
                universeids[setname] = {}
            end
            table.insert(universeids[setname],universename or "nil")
        end
    end
    
    for championname,cdata in pairs(luaskinData) do
        for skinname,sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                if sdata["set"] ~= nil then
                    for _,set in pairs(sdata["set"]) do 
                        if universeids[set] == nil then
                            universeids[set] = {}
                            table.insert(universeids[set],"N/A")
                        end
                        for _,universe in pairs(universeids[set]) do
                            if resulttable[universe] == nil then
                                resulttable[universe] = {}
                                setnames[universe]    = {}
                                skintable[universe]   = {}
                                table.insert(universenames, universe)
                            end
                            
                            if resulttable[universe][set] == nil then
                                resulttable[universe][set] = {}
                                skintable[universe][set]   = {}
                                table.insert(setnames[universe], set)
                            end
                            
                            if resulttable[universe][set][skinname] == nil then
                                resulttable[universe][set][skinname] = {}
                                table.insert(skintable[universe][set], skinname)
                            end
                            
                            table.insert(resulttable[universe][set][skinname], championname)
                        end
                    end
                end
            end
        end
    end
    
    table.sort(universenames, orderup)
    
    for _, universe in pairs(universenames) do
        table.sort(setnames[universe], orderup)
        s = s .. '<tr><th rowspan="' .. #setnames[universe] .. '">' .. universe .. '</th>'
        
        for index, set in pairs(setnames[universe]) do
            table.sort(skintable[universe][set], orderup)

            if index ~= 1 then
                s = s .. '<tr>'
            end
            
            s = s .. '<th>' .. set .. '</th><td><ul>'
            
            for _, skin in pairs(skintable[universe][set]) do
                table.sort(resulttable[universe][set][skin], orderup)
                
                for _, champion in pairs(resulttable[universe][set][skin]) do
                    s = s .. '<li>' .. csl(champion, skin) .. '</li>'
                end
            end
                s = s .. '</ul></td></tr>\n'
        end
    end
    
    return s .. '</table>'
end

-- COMPARING LUA / JSON FUNCTIONS:

function p.synchronize(frame)
    local jsonskins     = jsontolua("Template:Set/skins.json")
    local s             = ""

    for championname, cdata in pairs(luaskinData) do
        for skinname, sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                local luaname  = sdata["formatname"] or lib.ternary(skinname == "Standard "..championname, championname, skinname)
                local skinid   = cdata["id"] * 1000 + sdata["id"]
                local jsonname = jsonskins[tostring(skinid)]
                
                if jsonname ~= nil then
                    jsonname = jsonname.name
                end
                
                if championname == "Nunu" and skinname == "Standard Nunu" then
                    luaname = "Nunu & Willump"
                end        
                
                if luaname ~= (string.match(jsonname, '^%s*(.*%S)') or '') then
                    s = s .. "\n* " .. skinid .. " " .. luaname .. " ----> " 
                    
                    if jsonname == nil then
                        s = s .. "SkinID nicht gefunden"
                    else
                        s = s .. jsonname
                    end
                end
            end
        end
    end
    
    if s == "" then
        return "Alle Championskin-IDs und -Namen sind synchronisiert."
    else
        return "Die folgenden Championskins sind nicht synchronisiert:" .. s
    end
end

function p.lore(frame)
    local jsonskins     = jsontolua("Template:Set/skins.json")
    local s             = ""

    for championname, cdata in pairs(luaskinData) do
        for skinname, sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                if skinname ~= "Standard "..championname then
                    local skinid   = cdata["id"] * 1000 + sdata["id"]
                    
                    if jsonskins[tostring(skinid)] ~= nil and (sdata["lore"] or "") ~= (jsonskins[tostring(skinid)]["description"] or "") then
                       s = s .. "\n* " .. skinid .. " " .. csl(championname,skinname)
                    end
                end
            end
        end
    end
    
    if s == "" then
        return "Alle Hintergrundgeschichten sind synchronisiert."
    else
        return "Die folgenden Hintergrundgeschichten sind nicht synchronisiert:" .. s
    end
end

function p.missing(frame)
    local luauniverseData = mw.loadData('Module:SkinData/universes')
    local jsonskins       = jsontolua("Template:Set/skins.json")
    local jsonsets        = jsontolua("Template:Set/sets.json")
    local jsonuniverses   = jsontolua("Template:Set/universes.json")
    local setids          = {}
    local setdata         = {}
    local s               = ""
    
    for _, setdata in pairs(jsonsets) do
        setids[setdata.id] = setdata.name or "nil"
    end
    
    for _, universedata in pairs(jsonuniverses) do
        for _, setid in pairs(universedata.skinSets) do
            if setdata[universedata.name] == nil then
                setdata[universedata.name] = {}
            end
            
            table.insert (setdata[universedata.name],setids[setid])
        end
    end
    
    for jsonuniversename,jsonuniverse in pairs (setdata) do
        if luauniverseData[jsonuniversename] ~= nil then
            for _,jsonsetname in pairs (jsonuniverse) do
                local count = 0
                
                for _,luasetname in pairs (luauniverseData[jsonuniversename]) do
                    if jsonsetname == luasetname then
                        count = 1
                        break
                    end
                end
                
                if count == 0 then
                    s = s .. "\n* Missing " .. jsonsetname .. " Set In " .. jsonuniversename .. " Universe" 
                end
            end
        else
            s = s .. "\n* " .. jsonuniversename .. " Universum fehlt" 
        end
    end
    
    for championname, cdata in pairs(luaskinData) do
        for skinname, sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                local setid
                local skinid   = cdata["id"] * 1000 + sdata["id"]
                local jsonname = jsonskins[tostring(skinid)]
                
                if jsonname ~= nil then
                    setid = jsonname.skinLines
                end
                
                local luaset = sdata["set"]
                    
                if luaset ~= nil then
                    if setid ~= nil and setid ~= "null" then
                        for _,champsetid in pairs(setid) do
                            local jsonset      = setids[champsetid.id] or "nil"
                            local count2 = 0
                            
                            for _, subtheme in pairs(luaset) do
                                if subtheme == jsonset then
                                    count2 = 1
                                end
                            end
                            
                            if count2 == 0 then
                                s = s .. "\n* " .. skinid .. " " .. csl(championname,skinname) .. " ----> " .. jsonset .. " Set Missing" 
                            end
                        end
                    end
                else
                    if setid ~= nil and setid ~= "null" then
                        for _,champsetid in pairs(setid) do
                            local jsonset      = setids[champsetid.id] or "nil"
                            s = s .. "\n* " .. skinid .. " " .. csl(championname,skinname) .. " ----> " .. jsonset .. " Set Missing" 
                        end
                    end
                end
            end
        end
    end
    
    if s == "" then
        return "Nichts fehlt."
    else
        return "Der folgende Kram fehlt:" .. s
    end
end

function p.added(frame)
    local luauniverseData = mw.loadData('Module:SkinData/universes')
    local jsonskins       = jsontolua("Template:Set/skins.json")
    local jsonsets        = jsontolua("Template:Set/sets.json")
    local jsonuniverses   = jsontolua("Template:Set/universes.json")
    local setids          = {}
    local setdata         = {}
    local s               = ""
    
    for _, setdata in pairs(jsonsets) do
        setids[setdata.id] = setdata.name or "nil"
    end
    
    for _, universedata in pairs(jsonuniverses) do
        for _, setid in pairs(universedata.skinSets) do
            if setdata[universedata.name] == nil then
                setdata[universedata.name] = {}
            end
            
            table.insert (setdata[universedata.name],setids[setid])
        end
    end
    
    for luauniversename,luauniverse in pairs (luauniverseData) do
        if setdata[luauniversename] ~= nil then
            for _,luasetname in pairs (luauniverse) do
                local count = 0
                
                for _,jsonsetname in pairs (setdata[luauniversename]) do
                    if jsonsetname == luasetname then
                        count = 1
                        break
                    end
                end
                
                if count == 0 then
                    s = s .. "\n* " .. luasetname .. " Inoffizielles Set hinzugefügt in " .. luauniversename .. "-Universum" 
                end
            end
        else
            s = s .. "\n* " .. luauniversename .. " Inoffizielles Universum Hinzugefügt" 
        end
    end
    
    for championname, cdata in pairs(luaskinData) do
        for skinname, sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                local skinid   = cdata["id"] * 1000 + sdata["id"]
                local jsonname = jsonskins[tostring(skinid)]
                
                if jsonname ~= nil then
                    setid = jsonname.skinLines
                end
                
                local luaset = sdata["set"]
                    
                if luaset ~= nil then
                    if setid ~= nil and setid ~= "null" then
                        for _, subtheme in pairs(luaset) do
                            local count2 = 0
                            
                            for _,champsetid in pairs(setid) do
                                local jsonset = setids[champsetid.id] or "nil"
                                
                                if subtheme == jsonset then
                                    count2 = 1
                                end
                            end
                            
                            if count2 == 0 then
                                s = s .. "\n* " .. skinid .. " " .. csl(championname,skinname) .. " ----> " .. subtheme .. " Inoffizielles Set Hinzugefügt" 
                            end
                        end
                    else
                        for _, subtheme in pairs(luaset) do
                            s = s .. "\n* " .. skinid .. " " .. csl(championname,skinname) .. " ----> " .. subtheme .. " Inoffizielles Set Hinzugefügt"
                        end
                    end
                end
            end
        end
    end
    
    if s == "" then
        return "Nichts Inoffizielles wurde hinzugefügt."
    else
        return "Der folgende Inoffizielle Kram wurde hinzugefügt:" .. s
    end
end    
    
-- EXTRACTING JSON FUNCTIONS:
    
function p.officialtable(frame)
    local jsonskins     = jsontolua("Template:Set/skins.json")
    local jsonsets      = jsontolua("Template:Set/sets.json")
    local jsonuniverses = jsontolua("Template:Set/universes.json")
    local setnames      = {}
    local resulttable   = {}
    local skintable     = {}
    local setids        = {}
    local universenames = {}
    local universeids   = {}
    local s             = ""
    
    s = s .. '<table class="wikitable">\n'
    s = s .. '<tr><th width="20%">Name des Universums</th><th width="20%">Name des Sets</th><th>Skins</th></tr>\n'
    
    for _, setdata in pairs(jsonsets) do
        setids[setdata.id] = setdata.name or "nil"
    end
    
    for _, universedata in pairs(jsonuniverses) do
        for _, setid in pairs(universedata.skinSets) do
            if universeids[setid] == nil then
                universeids[setid] = {}
            end
            table.insert(universeids[setid],universedata.name or "nil")
        end
    end
    
    for championname,cdata in pairs(luaskinData) do
        for skinname,sdata in pairs(cdata["skins"]) do
            if sdata["id"] ~= nil then
                local skinid     = cdata["id"] * 1000 + sdata["id"]
                local setid = jsonskins[tostring(skinid)]
                
                if setid ~= nil then
                    setid = setid.skinLines
                end
                
                if setid ~= nil and setid ~= "null" then
                    for _,champsetid in pairs(setid) do 
                        if universeids[champsetid.id] == nil then
                            universeids[champsetid.id] = {}
                            table.insert(universeids[champsetid.id],"N/A")
                        end
                        for _,universe in pairs(universeids[champsetid.id]) do
                            local set      = setids[champsetid.id] or "nil"
                            
                            if resulttable[universe] == nil then
                                resulttable[universe] = {}
                                setnames[universe]    = {}
                                skintable[universe]   = {}
                                table.insert(universenames, universe)
                            end
                            
                            if resulttable[universe][set] == nil then
                                resulttable[universe][set] = {}
                                skintable[universe][set]   = {}
                                table.insert(setnames[universe], set)
                            end
                            
                            if resulttable[universe][set][skinname] == nil then
                                resulttable[universe][set][skinname] = {}
                                table.insert(skintable[universe][set], skinname)
                            end
                            
                            table.insert(resulttable[universe][set][skinname], championname)
                        end
                    end
                end
            end
        end
    end
    
    table.sort(universenames, orderup)
    
    for _, universe in pairs(universenames) do
        table.sort(setnames[universe], orderup)
        s = s .. '<tr><th rowspan="' .. #setnames[universe] .. '">' .. universe .. '</th>'
        
        for index, set in pairs(setnames[universe]) do
            table.sort(skintable[universe][set], orderup)

            if index ~= 1 then
                s = s .. '<tr>'
            end
            
            s = s .. '<th>' .. set .. '</th><td><ul>'
            
            for _, skin in pairs(skintable[universe][set]) do
                table.sort(resulttable[universe][set][skin], orderup)
                
                for _, champion in pairs(resulttable[universe][set][skin]) do
                    s = s .. '<li>' .. csl(champion, skin) .. '</li>'
                end
            end
                s = s .. '</ul></td></tr>\n'
        end
    end
    
    return s .. '</table>'
end

-- HELPER FUNCTIONS:

function csl(champion, skin)
    return tostring(IL.skin{
            ["champion"] = champion,
            ["skin"] = skin,
            ["link"] = champion .. "#tab-Skins",
            ["text"] = skin,
            ["circle"] = "true"
        })
end

function jsontolua(pagename)
    local titleobject  = mw.title.new(pagename)
    local o            = json.decode(titleobject:getContent())
    
    return o
end

function orderup(a,b)
    a = string.lower(a)
    b = string.lower(b)
    if a == 'n/a' then 
        return false 
    end
    if b == 'n/a' then 
        return true 
    end
    return b > a
end

return p
-- </pre>

-- [[Category:Module]]