|
|
Строка 15: |
Строка 15: |
| args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText | | args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText |
| | | |
| local link, img = "" | | local link, img = ImageLink._createLink(args) |
| | link:addClass('tooltip-link') |
| if args['hero'] then link:attr('data-tooltip', "hero") end | | if args['hero'] then link:attr('data-tooltip', "hero") end |
| if args['width'] and img ~= nil then img:addClass('icon-' .. args['width']) end | | if args['width'] and img ~= nil then img:addClass('icon-' .. args['width']) end |
Строка 22: |
Строка 23: |
|
| |
|
| function ImageLink._createLink(args) | | function ImageLink._createLink(args) |
| -- define args.display (default: inline)
| |
| args['display'] = (({['inlineblock'] = 'inline-block'})[args['display']]) or args['display'] or 'inline'
| |
|
| |
| -- define args.image (default: '')
| |
| args['image'] = args['image'] or ''
| |
| if args['image'] == '*none*' then args['image'] = '' end
| |
|
| |
| -- define args.border (true or false; default: true)
| |
| args['border'] = args['border'] or true
| |
| if args['border'] == 'false' or args['border'] == '0' then args['border'] = false end
| |
|
| |
| -- define args.edit (true or false; default: false)
| |
| args['edit'] = args['edit'] or false
| |
| if args['edit'] == 'true' or args['edit'] == '1' then args['edit'] = true end
| |
|
| |
| -- define args.style (default: 'white-space:pre')
| |
| args['style'] = args['style'] or 'white-space:pre'
| |
| if args['style'] == '*none*' then args['style'] = nil end
| |
|
| |
| -- define args.labelstyle (default: 'white-space:normal')
| |
| args['labelstyle'] = args['labelstyle'] or 'white-space:normal'
| |
| if args['labelstyle'] == '*none*' then args['labelstyle'] = nil end
| |
|
| |
| -- define args.width, args.height (%%x%%px or %%x%% or %%px or %%; default: 20px)
| |
| local width, height
| |
| if(args['size']) then width, height = getSize(args['size']) end
| |
| args['size'] = args['size'] or 20
| |
| args['width'] = tonumber(mw.ustring.match(args['width'] or width or '', '%d*'))
| |
| args['height'] = tonumber(mw.ustring.match(args['height'] or height or '', '%d*'))
| |
| if(not args['height']) then args['width'] = args['width'] or args['size'] end
| |
| if args['style'] ~= '*none*' then args['style'] = args['style'] .. ';' .. 'line-height:' .. args['size'] .. 'px' end
| |
|
| |
| -- define args.selflink (default: articlename)
| |
| args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().prefixedText
| |
|
| |
| -- define args.link (default: '')
| |
| args['link'] = args['link'] or ''
| |
| if args['link'] == '*none*' then args['link'] = '' end
| |
|
| |
| -- define args.possessive (default: '')
| |
| args['possessive'] = args['possessive'] or ''
| |
| if args['possessive'] == 'true' or args['possessive'] == '1' then args['possessive'] = true end
| |
|
| |
| -- define args.text (default: '')
| |
| args['text'] = args['text'] or args['link'] or ''
| |
| if args['text'] == '*none*' then args['text'] = '' end
| |
| if args['possessive'] == true then
| |
| if mw.ustring.sub(args['text'], -1) == 's' then
| |
| args['text'] = args['text'] .. '\''
| |
| else
| |
| args['text'] = args['text'] .. '\'s'
| |
| end
| |
| end
| |
|
| |
| -- define args.alttext (default: '')
| |
| args['alttext'] = args['alttext'] or ''
| |
|
| |
| -- define args.label (before or after; default: after)
| |
| args['label'] = (({['after'] = 'after', ['before'] = 'before'})[args['label']]) or 'after'
| |
| if args['image'] == '' then args['label'] = 'only' end
| |
| if args['text'] == '' then args['label'] = 'none' end
| |
|
| |
| -- define args.labellink (true or false; default: true)
| |
| args['labellink'] = args['labellink'] or true
| |
| if args['labellink'] == 'false' or args['labellink'] == '0' then args['labellink'] = false end
| |
|
| |
| -- define args.separator (default: ' ')
| |
| args['separator'] = args['separator'] or ' '
| |
|
| |
| local tag = lib.ternary(args['display'] == 'inline', 'span', 'div') | | local tag = lib.ternary(args['display'] == 'inline', 'span', 'div') |
| | | |
Строка 118: |
Строка 50: |
| ) | | ) |
| )) | | )) |
| if args['image2'] then
| |
| img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
| |
| args['image2'],
| |
| lib.ternary(size == 'px', '', '|'..size),
| |
| lib.ternary(args['border'], '|border', ''),
| |
| lib.ternary(args['link'] == args['selflink'], '', args['link']),
| |
| lib.ternary(args['alttext'] == '',
| |
| lib.ternary(args['text'] == '', '', '|' .. args['text']),
| |
| '|' .. args['alttext']
| |
| )
| |
| ))
| |
| end
| |
| if args['image3'] then
| |
| img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
| |
| args['image3'],
| |
| lib.ternary(size == 'px', '', '|'..size),
| |
| lib.ternary(args['border'], '|border', ''),
| |
| lib.ternary(args['link'] == args['selflink'], '', args['link']),
| |
| lib.ternary(args['alttext'] == '',
| |
| lib.ternary(args['text'] == '', '', '|' .. args['text']),
| |
| '|' .. args['alttext']
| |
| )
| |
| ))
| |
| end
| |
| -- //bottom right number start
| |
| if args['number'] and args['number'] ~= '' then
| |
| local number = mw.html.create('span')
| |
| local t = {
| |
| ['position'] = 'absolute',
| |
| ['font-size'] = string.gsub(math.min(args['width'] or 1e309, args['height'] or 1e309), 'px', '')/2 ..'px',
| |
| ['line-height'] = '1em',
| |
| ['bottom'] = '0.08em',
| |
| ['right'] = '0.1em',
| |
| ['font-weight'] = 'bold',
| |
| ['pointer-events'] = 'none',
| |
| ['color'] = lib.ternary(args['blacknum'] == 'true', '#111', '#EEE'),
| |
| ['text-shadow'] = lib.ternary(args['blacknum'] == 'true', '-1px 0 1px #fff, 0 1px 1px #fff, 1px 0 1px #fff, 0 -1px 1px #fff', '-1px 0 1px #000, 0 1px 1px #000, 1px 0 1px #000, 0 -1px 1px #000')
| |
| }
| |
| number:css(t)
| |
| number:wikitext(args['number'])
| |
| number:done()
| |
| img:node(number)
| |
| end
| |
| -- //bottom right number end
| |
| img:done()
| |
| else
| |
| img = nil
| |
| end | | end |
| -- //img end | | |
|
| | return link, img |
| -- //label start
| |
| local label = mw.html.create(tag)
| |
| if args['text'] ~= '' 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'] == '' or args['labellink'] == false then
| |
| label:wikitext(args['text'])
| |
| elseif args['link'] == args['selflink'] then
| |
| label:wikitext('<strong class="selflink">' .. args['text'] .. '</strong>')
| |
| else
| |
| label:wikitext(formatnil('[[%s|%s]]', args['link'], args['text']))
| |
| end
| |
| if args['edit'] == true and args['editlink'] ~= nil then
| |
| label:wikitext(' <sup>[' .. tostring(mw.uri.fullUrl(args['editlink'], 'action=edit')) .. ' e]</sup>')
| |
| end
| |
| label:done()
| |
| else
| |
| label = nil
| |
| end
| |
| -- //label 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
| |
| else
| |
| 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
| |
| end
| |
|
| |
| return link, img, label | |
| end | | end |
|
| |
|
local ImageLink = {}
local FN = require("Module:Filename")
local lib = require('Module:Feature')
function ImageLink.hero(frame)
local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
args['link'] = args['link'] or args['hero'] or ''
args['text'] = args['text'] or args['hero'] or ''
args['image'] = args['image'] or FN.herosquare(args)
args['editlink'] = args['editlink'] or "Модуль:HeroData/data"
args['selflink'] = args['selflink'] or mw.title.getCurrentTitle().rootText
local link, img = ImageLink._createLink(args)
link:addClass('tooltip-link')
if args['hero'] then link:attr('data-tooltip', "hero") end
if args['width'] and img ~= nil then img:addClass('icon-' .. args['width']) end
return link
end
function ImageLink._createLink(args)
local tag = lib.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
-- //img start
local img = mw.html.create(tag)
if args['image'] ~= '' then
img:css({position = 'relative', display = 'inline-block'})
local size = tostring(args['width'] or '') .. 'x' .. tostring(args['height'] 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'] == true then img:addClass('hero-icon-border') end
if args['iconstyle'] then img:cssText(args['iconstyle']) end
-- [[File:test.jpg|24px|border|link=test|testing]]
img:wikitext(mw.ustring.format('[[File:%s%s%s|link=%s%s]]',
args['image'],
lib.ternary(size == 'px', '', '|'..size),
lib.ternary(args['border'], '|border', ''),
lib.ternary(args['link'] == args['selflink'], '', args['link']),
lib.ternary(args['alttext'] == '',
lib.ternary(args['text'] == '', '', '|' .. args['text']),
'|' .. args['alttext']
)
))
end
return link, img
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 getSize(size)
local fields = HF.explode('x', mw.ustring.gsub(tostring(size or ''), 'px', '', 1))
local width = tonumber(fields[1]) or nil
local height = tonumber(fields[2]) or nil
return width, height
end
return ImageLink