League of Legends Wiki
League of Legends Wiki
Nie podano opisu zmian
Znacznik: sourceedit
mNie podano opisu zmian
Znacznik: sourceedit
Linia 279: Linia 279:
 
args['size'] = args['size'] or 18
 
args['size'] = args['size'] or 18
 
 
  +
local typ = nil
 
local base = nil
 
local base = nil
 
if args['rune'] then
 
if args['rune'] then

Wersja z 22:32, 3 wrz 2017

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:ImageLink/opis

local ImageLink = {}

-- Dependencies
local HF = require("Module:HF")
local FN = require("Module:Filename")

--[[-- 
{{#invoke: ImageLink | item
| item = 
| variant = 
| enchantment = 
...
}}

{{#invoke: ImageLink | rune
| rune = 
| multiply = 
| text = 
...
}}

{{#invoke: ImageLink | mastery
| mastery = 
| season = 
| text = 
...
}}

{{#invoke: ImageLink | ability
| champion = 
| ability = 
| text = 
...
}}

{{#invoke: ImageLink | effect
| effect = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | spell
| spell = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | group
| group = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | position
| position = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | character
| character = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | loading
| champion = 
| skin = 
| link = 
| text = 
...
}}

{{#invoke: ImageLink | basic
| link = 
| text = 
| image = 
| size = 
| width = 
| height = 
| border = 
| separator = 
| display = 
| label = 
| class = 
| style = 
| iconclass = 
| iconstyle = 
| labelclass = 
| labelstyle = 
}}
--]]--
function ImageLink.item(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    local variant
    args['item'], variant = deHash(args['item'] or '')
    args['enchantment'] = deHash(args['enchantment'], 1)
    args['variant'] = args['variant'] or variant or nil
    
    if args['enchantment'] then
        args['link'] = append(args['enchantment'], args['link']) or args['enchantment'] or ''
        args['image'] = args['image'] or FN.enchantment{args['item'], args['enchantment']}
        args['item'] = string.gsub(args['item'], '%s*%b()$', '')
        args['text'] = args['text'] or formatnil('%s - %s', args['item'], args['enchantment']) or args['text'] or ''
    else
        args['link'] = append(args['item'], args['link']) or args['item'] or ''
        args['image'] = args['image'] or FN.item{args['item'], variant = args['variant']}
        args['item'] = string.gsub(args['item'], '%s*%b()$', '')
        args['text'] = append(args['item'], args['text']) or args['item'] or ''
    end
    
    local link, icon = ImageLink._createLink(args)
    link:addClass('item-icon')
    if args['item'] then link:attr('data-item', args['item']) end
    if args['enchantment'] then link:attr('data-enchantment', enchantment):addClass('enchantment-icon') end
    if args['variant'] then link:attr('data-variant', args['variant']) end
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.rune(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    args['link'] = append(args['effect'], args['link']) or args['effect'] or ''
    args['text'] = append(args['rune'], args['text']) or args['rune'] or ''
    args['image'] = args['image'] or FN.rune{args['rune']}
    
    local link, icon = ImageLink._createLink(args)
    if args['effect'] then link:attr('data-rune', args['rune']) end
    link:addClass('rune-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.mastery(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    args['season'] = tonumber(args['season']) or nil
    
    local season = require('Moduł:Sezon').d
    local link = ''
    if args['season'] then
        link = formatnil('%s (specjalizacja %s)', args['mastery'], season{args['season']})
    else
        link = args['mastery'] or nil
    end
    args['link'] = args['link'] or link or ''
    args['text'] = append(args['mastery'], args['text']) or args['mastery'] or ''
    args['image'] = args['image'] or FN.mastery{args['mastery'], args['season']}
    
    local link, icon = ImageLink._createLink(args)
    if args['mastery'] then link:attr('data-mastery', args['mastery']) end
    if args['season'] then link:attr('data-season', tostring(args['season'])) end
    link:addClass('mastery-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.ability(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    args['link'] = args['link'] or formatnil('%s#%s', args['champion'], args['ability']) or args['champion'] or ''
    args['text'] = append(args['ability'], args['text']) or args['ability'] or ''
    args['image'] = args['image'] or FN.ability{args['champion'], args['ability']}
    
    local link, icon = ImageLink._createLink(args)
    if args['champion'] then link:attr('data-champion', args['champion']) end
    if args['ability'] then link:attr('data-ability', args['ability']) end
    link:addClass('ability-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.effect(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    args['link'] = append(args['effect'], args['link']) or args['effect'] or ''
    args['text'] = append(args['effect'], args['text']) or args['effect'] or ''
    args['image'] = args['image'] or FN.effect{args['effect']}
    
    local link, icon = ImageLink._createLink(args)
    if args['effect'] then link:attr('data-effect', args['effect']) end
    link:addClass('effect-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.spell(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    args['link'] = append(args['spell'], args['link']) or args['spell'] or ''
    args['text'] = append(args['spell'], args['text']) or args['spell'] or ''
    args['image'] = args['image'] or FN.spell{args['spell']}
    
    local link, icon = ImageLink._createLink(args)
    if args['spell'] then link:attr('data-spell', args['spell']) end
    link:addClass('spell-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.group(frame)
    local args = arguments(frame.args)
 
    args['size'] = args['size'] or 18
 
    args['link'] = append(args['group'], args['link']) or args['group'] or ''
    args['text'] = append(args['group'], args['text']) or args['group'] or ''
    args['image'] = args['image'] or FN.group{args['group']}
 
    local link, icon = ImageLink._createLink(args)
    if args['group'] then link:attr('data-group', args['group']) end
    link:addClass('group-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.position(frame)
    local args = arguments(frame.args)
 
    args['size'] = args['size'] or 18
 
    args['link'] = append(args['position'], args['link']) or args['position'] or ''
    args['text'] = append(args['position'], args['text']) or args['position'] or ''
    args['image'] = args['image'] or FN.position{args['position']}
 
    local link, icon = ImageLink._createLink(args)
    if args['position'] then link:attr('data-position', args['position']) end
    link:addClass('position-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.character(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    args['link'] = append(args['character'], args['link']) or args['character'] or ''
    args['text'] = append(args['character'], args['text']) or args['character'] or ''
    args['image'] = args['image'] or FN.character{args['character']}
    
    args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
    
    local link, icon = ImageLink._createLink(args)
    if args['character'] then link:attr('data-character', args['character']) end
    if args['skin'] then link:attr('data-skin', args['skin']) end
    link:addClass('character-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.loading(frame)
    local args = arguments(frame.args)
    
    args['width'] = args['width'] or 100
    args['height'] = args['height'] or nil
    args['display'] = args['display'] or 'inline-block'
    
    args['link'] = append(args['champion'], args['link']) or args['champion'] or ''
    args['text'] = append(args['champion'], args['text']) or args['skin'] or args['champion'] or ''
    args['image'] = args['image'] or FN.loading{args['champion'], args['skin']} or nil
    
    local link = ImageLink._createLink(args):addClass('character-icon')
    if args['champion'] then icon:attr('data-character', args['champion']) end
    return link
end
function ImageLink.oldrune(frame)
    local args = arguments(frame.args)
    
    args['size'] = args['size'] or 18
    
    local typ = nil
    local base = nil
    if args['rune'] then
        base = HF.firstToUpper(args['rune'])
        base = mw.ustring.gsub(base, 'Mniejsza ', '', 1)
        base = mw.ustring.gsub(base, 'Mniejszy ', '', 1)
        base = mw.ustring.gsub(base, 'Większa ', '', 1)
        base = mw.ustring.gsub(base, 'Większy ', '', 1)
        base = mw.text.trim(base)
        local rune = mw.ustring.lower(args['rune'])
        if mw.ustring.find(rune, 'znak') then typ = 1
        elseif mw.ustring.find(rune, 'glif') then typ = 2
        elseif mw.ustring.find(rune, 'pieczęć') then typ = 3
        elseif mw.ustring.find(rune, 'esencja') then typ = 4
        end
    end
    args['link'] = args['link'] or formatnil('%s#%s', ({'Znaki', 'Glify', 'Pieczęcie', 'Esencje'})[typ] or 'Runy', base) or 'Runy'
    args['text'] = append(args['rune'], args['text']) or args['rune'] or ''
    args['image'] = args['image'] or FN.oldrune{args['rune']}
    
    local link, icon = ImageLink._createLink(args)
    
    link:addClass('oldrune-icon')
    if(args['width']) then icon:addClass('icon-' .. args['width']) end
    return link
end
function ImageLink.basic(frame)
    local args = arguments(frame.args)
    local link, img, label = ImageLink._createLink(args)
    return link
end

function ImageLink._createLink(args)
    args['display'] = (({['inline-block'] = 'inline-block',['inlineblock'] = 'inline-block',['block'] = 'block',['inline'] = 'inline'})[args['display'] or 'inline']) or 'inline'
    args['label'] = args['label'] or 'after'
    
    args['image'] = args['image'] or ''
    args['border'] = ternary(args['border'], true, false)
    
    local width, height
    if(args['size']) then width, height = getSize(args['size']) end
    args['height'] = tonumber(args['height']) or height or nil
    args['width'] = tonumber(args['width']) or width or nil
    
    args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().prefixedText
    args['link'] = args['link'] or ''
    if args['link'] == '*none*' then args['link'] = '' end
    
    args['text'] = args['text'] or args['link'] or ''
    args['separator'] = args['separator'] or ''
    
    if args['text'] == '*none*' then args['text'] = '' end
    if args['text'] == '' then args['label'] = 'none' end
    
    local tag = ternary(args['display'] == 'inline', 'span', 'div')
    
    local link = mw.html.create(tag):css('display', args['display']):addClass(args['display'] .. '-image')
    if args['class'] then link:addClass(args['class']) end
    if args['style'] then link:cssText(args['style']) end
    
    local label = mw.html.create(tag):addClass('icon-label')
    if args['label'] == 'before' or args['label'] == 'after' then
        link:addClass('label-'..args['label'])
        if args['labelclass'] then label:addClass(args['labelclass']) end
        if args['labelstyle'] then label:cssText(args['labelstyle']) end
        if args['link'] == args['selflink'] then
            label:wikitext('<strong class="selflink">' .. args['text'] .. '</strong>'):done()
        elseif args['link'] == '' then
            label:wikitext(args['text']):done()
        else
            label:wikitext(formatnil('[[%s|%s]]', args['link'], args['text'])):done()
        end
    else
        label = nil
    end
    
    local img = mw.html.create(tag):addClass('icon')
    if args['image'] ~= '' then
        local size = ternary(args['height'], tostring(args['width'] or '')..'x'..tostring(args['height'] or '')..'px', tostring(args['width'] or '')..'px')
        if args['iconclass'] then img:addClass(args['iconclass']) end
        if args['width'] then img:attr('data-width', tostring(args['width'])) end
        if args['height'] then img:attr('data-height', tostring(args['height'])) end
        if args['border'] then img:addClass('border') end
        if args['iconstyle'] then img:cssText(args['iconstyle']) end
        img:wikitext(mw.ustring.format('[[File:%s|%s|%slink=%s|alt=%s|%s]]',
            args['image'],
            size,
            args['border'] and 'border|' or '',
            args['link'] == args['selflink'] and '' or args['link'],
            label and '&#32;' or args['text'],
            args['text']
        ))
    else
        img = nil
    end
    
    if args['label'] == 'before' then
        if label then link:node(label) end
        if args['separator'] and img and label then link:wikitext(args['separator']) end
        if img then link:node(img) end
    elseif args['label'] == 'after' then
        if img then link:node(img) end
        if args['separator'] and img and label then link:wikitext(args['separator']) end
        if label then link:node(label) end
    else
        if img then link:node(img) end
    end
    return link, img, label
end

function formatnil(text, ...)
    if select("#", ...) == 0 then return text end
    for i=1, select("#", ...) do
        if select(i, ...) == nil then return nil end
    end
    return mw.ustring.format(text, ...)
end

function append(orig, new)
    if new then
        if mw.ustring.sub(new, 1, 1) == '-' then
            if mw.ustring.sub(new, 2, 2) == '-' then
                return mw.ustring.sub(new, 2)
            else
                return orig .. mw.ustring.sub(new, 2)
            end
        else
            return new
        end
    else
        return nil
    end
end

function getSize(size)
    local fields = mw.text.split(mw.ustring.gsub(tostring(size or ''), 'px', '', 1), 'x')
    local width = tonumber(fields[1]) or nil
    local height = tonumber(fields[2]) or nil
    return width, height
end

function deHash(text, sel)
    if text == nil then return nil, nil end
    local res, hash, offset = nil, nil, nil
    text = tostring(text)
    offset = mw.ustring.find(text, '#', 1, true)
    if offset then
        res = mw.ustring.sub(text, 1, offset-1)
        hash = mw.ustring.sub(text, offset+1)
    else
        res = text
        hash = nil
    end
    if sel == nil then return res, hash else return select(sel, res, hash) end
end

function ternary(cond, T, F)
    if cond then return T else return F end
end

function arguments(origArgs)
    local args = {}
    for k, v in pairs(origArgs) do
        if type(v) == 'string' then v = mw.text.trim(v) end
        if v ~= '' then args[k] = v end
    end
    return args
end

return ImageLink

--[[
    return ImageLink._createIcon{
        display = args['display'],
        label = args['label',
        image = args['image'],
        border = args['border'],
        width = args['width'],
        height = args['height'],
        link = args['link'],
        text = args['text'],
        separator = args['separator'],
        class = args['class'],
        style = args['style'],
        iconclass = args['iconclass'],
        iconstyle = args['iconstyle'],
        labelclass = args['iconclass'],
        labelstyle = args['labelstyle'],
    }
 --]]