Module:CharTree: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(50 intermediate revisions by 2 users not shown)
Line 2: Line 2:
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local p = {}
local p = {}
local get_char_list = require('Module:CharList').main


-- Main process
-- Main process
function p.main(frame)
function p.main(frame)
     local args = getArgs(frame);
     local args = getArgs(frame);
     local char_tree = mw.html.create('div'):addClass('char-banner-tree'):attr('data-base', args[1])
     local char_outer = mw.html.create('div'):addClass('character-banner-outer'):attr('data-lang', args.lang)
     local out = {};
     local char_banner = mw.html.create('div'):addClass('character-banner-wrap border-color tone-2')
     local char, file_name, link, nopath, nopathnojob, entry, image_arg;
     local char_list = get_char_list(frame, args.lang)
     for job_iter=1,3,1 do
     local lang = '';
        for path_iter=1,4,1 do
    if args.lang then lang = '/' .. args.lang end
            char = args[path_iter .. 'x' .. job_iter] or 'Unreleased';
    local is_localized = lang and lang ~= ''
    local char_order = char_list[1]
    local not_exist = char_list[3]
    local char_list = char_list[2]


            if args[nopath] ~= nil and args[nopath] ~= 'true' then
    function split_lang(str)
                char = args[nopath]
        local lang_l = is_localized and lang or ''
            end
        return is_localized and split(str, lang_l .. '|') or str
    end
 
    function str_localized(str)
        return string.find(str, (lang or '') .. '|')
    end


            nopath = 'no' .. path_iter .. 'path';
    local base_arg = args[1] or 'Elsword'
            nopathnojob = 'no' .. path_iter .. 'x' .. job_iter;
    local base_name = str_localized(base_arg) and split_lang(base_arg)[1] or base_arg
            entry = char_tree:tag('div'):addClass('char-banner-tree-image')
    local char_tree = mw.html.create('div'):addClass('char-banner-tree')
    local out = ''
    local char, file_name, link, nopath, nopathnojob, entry, image_arg, icon_str;
    for char_iter=1, #char_order, 1 do
        local base, jobs = char_order[char_iter], {{}, {}, {}}
        local base_name = split_lang(base)[1] or base
        local tree = mw.html.create('div'):addClass('char-banner-tree'):attr('data-base', base_name:gsub('/', '')):attr('data-display-base', split_lang(base)[2] or base)


             if char ~= 'Unreleased' then
        for path_iter=1, 4, 1 do
                 file_name = char:gsub(':', '');
             local path = char_list[base][path_iter]
                 link = '|link=' .. char
            for job_iter=1, 3, 1 do
                local job = path[job_iter]
                local out_table = jobs[job_iter]
                if job == nil and jobs[1][path_iter] ~= nil then
                    job = jobs[1][path_iter]
                end
                 if job ~= nil then
                    table.insert(out_table, job)
                 end
             end
             end
              
              
             if (args[nopath] ~= nil or args[nopathnojob] ~= nil) then
        end
                 file_name = 'Dunno';
       
                 link = '|link=' .. char;
        for job_iter, job_name in ipairs(jobs) do
            end
             for path_iter, path_name in ipairs(job_name) do
                -- Foreign languages
                local icon_link_char_name = path_name;
                local normal_link_char_name = path_name;
                if str_localized(path_name) then
                    local name_split = split_lang(path_name)
                    icon_link_char_name = name_split[1]:gsub(':', '')
                    path_name = name_split[2]
                    normal_link_char_name = name_split[1] .. lang
                end
                icon_link_char_name = icon_link_char_name:gsub(':', '')
                 local icon_str = 'Icon - '
                 local link = '|link=' .. normal_link_char_name
                local unreleased = indexOf(normal_link_char_name, not_exist)
 
                if unreleased then
                    icon_str = ''
                    icon_link_char_name = 'Dunno'
                    link = '|link=#!'
                end


            image_arg = args['image' .. path_iter .. 'x' .. job_iter]
                local icon_with_link = '[[File:' .. icon_str .. icon_link_char_name .. '.png' .. link .. ']]'
                local img = tree:tag('div'):addClass('char-banner-tree-image'):attr('data-class-name', path_name):wikitext(icon_with_link)


            if image_arg ~= nil then
                if unreleased then
                 file_name = image_arg
                    img:attr('data-unreleased', 'true')
                 end
             end
             end
        end


            entry:attr('data-class-name', char):wikitext('[[File:Icon - ' .. file_name .. '.png' .. link .. ']]');
        char_banner:node(tree)
        out = not_exist
    end


            if (args[nopath] ~= nil) then
    local styles = frame:preprocess('{{#css:MediaWiki:Character-Banner.css}}')
                entry:attr('data-unreleased', 'true');
    local header = frame:expandTemplate{
            end
        title = 'CharHeader',
        args = {
            'Elsword',
            'Elsword' .. lang,
            'tone-8',
            force_title = split_lang(char_order[1])[2]
        }
    }


            if (args[nopathnojob] ~= nil) then
    local select_banner = mw.html.create('div'):addClass('character-banner-select tone-8 border-color')
                entry:addClass('disable-image-link');
    for k, v in ipairs(char_order) do
                entry:attr('data-unreleased', 'true');
        local display_name = v;
            end
        local actual_name = v;
         end
        if str_localized(v) then actual_name = split_lang(v)[1]; display_name = split_lang(v)[2] end
        if actual_name == 'Lu/Ciel' then actual_name = 'LuCiel (Lu)' end
        local base_icon = mw.html.create('div'):attr('data-base', actual_name):attr('data-display-base', display_name or actual_name):wikitext('[[File: Icon - ' .. actual_name .. '.png]]')
         select_banner:node(base_icon)
     end
     end
    char_outer:wikitext(header):node(char_banner:node(select_banner))
      
      
     return tostring(char_tree);
     return styles .. tostring(char_outer)


end
end


return p
return p