|
|
| (7 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| local p = {} | | local p = {} |
| local lib = require('Module:Feature') | | local getArgs = require('Module:Arguments').getArgs |
|
| |
|
| function p.main(frame) | | function p.show(frame) |
| local args = require('Module:Arguments').getArgs(frame, { | | local args = getArgs(frame) |
| parentFirst = true,
| | local bucket_name = mw.text.trim(args[1] or '') |
| removeBlanks = false
| | local select_field = mw.text.trim(args[2] or '') |
| })
| |
| return p._main(args)
| |
| end
| |
| | |
| function p._main(args)
| |
| local item = lib.nilIfEmpty(args[1]) or lib.nilIfEmpty(args.name) or 'Unknown' | |
| local size = lib.nilIfEmpty(args[2]) or lib.nilIfEmpty(args.size) or 30
| |
| local count = lib.nilIfEmpty(args.count) or lib.nilIfEmpty(args.x) or nil | |
| local note = lib.nilIfEmpty(args.note) or nil
| |
| local ref = lib.nilIfEmpty(args.ref) or nil
| |
| local typeInput = lib.nilIfEmpty(args['type']) or 'Item'
| |
| local text = lib.nilIfEmpty(args.text) or item
| |
| local link = args.link or lib.ternary(item == 'Unknown', '', item)
| |
| local invert = lib.nilIfEmpty(args.invert)
| |
| local newline = tostring(args.newline) == '1'
| |
| local no_text = tostring(args.no_text or args.notext) == '1'
| |
| local white = tostring(args.white) == '1'
| |
| | |
| local prefix = ''
| |
| local suffix = ' Icon'
| |
| | | |
| if (typeInput ~= 'Neighbor' and item == 'Unknown') then | | local b = mw.bucket(bucket_name).select(select_field) |
| prefix = ''
| |
| suffix = ' Icon'
| |
| end
| |
| | | |
| local invertClass = nil | | for k, v in pairs(args) do |
| if invert then
| | if k ~= 1 and k ~= 2 then |
| invert = invert:lower()
| | b.where(k, v) |
| if invert == 'day' or invert == 'light' then | |
| invertClass = 'day-invert-image' | |
| elseif invert == 'night' or invert == 'dark' then
| |
| invertClass = 'night-invert-image'
| |
| end | | end |
| end | | end |
| | | |
| if (white) then suffix = suffix .. ' White' end | | return b.run() |
|
| |
| local filename = 'File:' .. prefix .. item .. suffix .. '.png'
| |
|
| |
| local file = '[[' .. filename .. '|' .. size .. 'x' .. size .. 'px|alt=' .. item .. '|link=' .. link .. '|class=' .. invertClass .. ']]'
| |
| | |
| local icon = nil
| |
| local corner_size = math.floor(tonumber(size) / 2.5)
| |
| local offset = 0
| |
| if (corner_size > 21) then
| |
| offset = 0
| |
| elseif (corner_size > 8) then
| |
| offset = math.floor((corner_size - 22) / 2)
| |
| else
| |
| offset = -6
| |
| end
| |
| | |
| if (lib.isEmpty(item)) then
| |
| return ''
| |
| end
| |
| | |
| local outerClass = lib.ternary(typeInput:lower() == 'item', 'item', 'item ' .. typeInput:lower())
| |
| local result = mw.html.create():tag('span'):addClass(outerClass)
| |
| | |
| local item_image = result:tag('span')
| |
| :addClass('item-image')
| |
| :tag('span')
| |
| :css({
| |
| width = size .. 'px',
| |
| height = size .. 'px',
| |
| })
| |
| :attr('data-size', size)
| |
| :wikitext(file)
| |
| :done()
| |
| | |
| if (icon ~= nil) then
| |
| item_image:tag('span'):addClass('item-icon')
| |
| :css({
| |
| top = offset .. 'px',
| |
| width = corner_size .. 'px',
| |
| height = corner_size .. 'px'
| |
| })
| |
| :attr('data-offset', offset)
| |
| :attr('data-corner-size', corner_size)
| |
| :wikitext(icon)
| |
| end
| |
|
| |
| if (newline) then
| |
| result:addClass('newline')
| |
| result:tag('br'):addClass('hidden')
| |
| end
| |
|
| |
| function parseAmE(a, b)
| |
| local a = a or ''
| |
| local b = b or ''
| |
|
| |
| function addPunct(var)
| |
| if args.comma or args.comma_spc then var = var .. ','
| |
| elseif args.dot or args.dot_spc then var = var .. '.'
| |
| end
| |
| var = var
| |
| :gsub('%.%.%."%s-[%.%,]$', '..."') -- no punctuation if quote ends in elipses
| |
| :gsub('([%?%!])"%s-[%.%,]$', '%1"') -- no punctuation if quote ends in question or exclamation
| |
| :gsub('"%s-([%.%,])$', '%1"') -- move punctuation inside quote for anything else bc AmE
| |
| return var
| |
| end
| |
|
| |
| -- needs to append to the last one with text
| |
| if lib.isEmpty(b) then a = addPunct(a)
| |
| else b = addPunct(b)
| |
| end
| |
|
| |
| if args.comma_spc or args.dot_spc then b = b .. ' ' end -- space always on the very end
| |
|
| |
| return {a, b}
| |
| end
| |
| | |
| local item_text = result:tag('span'):addClass('item-text')
| |
| if (not no_text) then
| |
| local before = newline and '' or ' '
| |
| local ame = ((count or note) and {text, ''} or parseAmE(text, ''))
| |
| local label = ame[1]
| |
| local after = ame[2]
| |
| if (ref and not(count or note)) then after:gsub('%s*$', '') end
| |
|
| |
| if (lib.isEmpty(link)) then
| |
| item_text:wikitext(before, label, after)
| |
| else
| |
| item_text:wikitext(before, '[[', link, '|', label, ']]', after)
| |
| end
| |
| end
| |
| | |
| if (count) then
| |
| count = (count:gsub(',', ''))
| |
| if tonumber(count)~=nil then count = lib.thousandsSeparator(count) end
| |
| count = table.concat(note and {count, ''} or parseAmE(count, ''), '')
| |
| if (ref and not note) then count:gsub('%s*$', '') end
| |
| item_text:wikitext((no_text and '' or ' ') .. '×' .. count)
| |
| end
| |
|
| |
| if (note) then
| |
| local after = table.concat(parseAmE('', ''), '')
| |
| if (ref) then after:gsub('%s*$', '') end
| |
| item_text:tag('small'):wikitext(((no_text and not count) and '' or ' '),'(', note, ')', after)
| |
| end
| |
|
| |
| if (ref) then
| |
| local after = (args.comma_spc or args.dot_spc) and ' ' or '' -- avoid space between ref and punctuation
| |
| item_text:wikitext(ref, after)
| |
| end
| |
|
| |
| return tostring(result);
| |
| end | | end |
|
| |
|
| return p | | return p |