Module:Animated

From Minetest Wiki
Jump to navigation Jump to search

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder') local TextUtil = require('Module:TextUtil') local makeInvokeFunc = require('Module:Arguments').makeInvokeFunc

local function createAnimatedDiv(args)

   local size = args.size
   local background = args.background
   local border = args.border
   local padding = args.padding
   local div = HtmlBuilder.create('div'):addClass('animated')
   if size then
       div:css('width', size)
       div:css('height', size)
   end
   if background then
       div:css('background-color', background)
   end
   if border then
       div:css('border', border)
   end
   if padding then
       div:css('padding', padding)
   end
   return div

end

local function createImageDiv()

   return HtmlBuilder.create('div'):addClass('image')

end

function p._images(args)

   local size = args.size or args[2]
   local animatedDiv = createAnimatedDiv({
       size = size,
       background = args.background,
       border = args.border,
       padding = args.padding
   })
   local input = args[1]
   for name in TextUtil.gsplit(input, '%s*,%s*') do
       local div = createImageDiv()
       animatedDiv:node(div)
       name = TextUtil.trim(name)
       if name ~=  then
           div:wikitext('[[File:', name)
           if size then
               div:wikitext('|', size)
           end
           div:wikitext('|link=File:', name, ']]')
       end
   end
   return tostring(animatedDiv)

end

function p._grid(args)

   local animatedDiv = createAnimatedDiv({
       size = '32px',
       background = '#888',
       border = '1px solid #333',
       padding = args.padded and '10px' or nil
   })
   local names = args[1] and TextUtil.split(args[1], '%s*,%s*') or {}
   local counts = args[2] and TextUtil.split(args[2], '%s*,%s*') or {}
   for i, name in ipairs(names) do
       local div = createImageDiv()
       animatedDiv:node(div)
       name = TextUtil.trim(name)
       if name ~=  then
           div:wikitext('32px')
           local count = counts[i]
           if count then
               count = string.match(count, '^%s*(.-)%s*$')
               div:tag('br')
               div:tag('span')
                   :css('position', 'relative')
                   :css('top', '-11px')
                   :css('left', '25px')
                   :css('font-weight', 'bold')
                   :css('color', 'white')
                   :css('text-shadow', '1px 1px black')
                   :wikitext(count)
           end
       end
   end
   return tostring(animatedDiv)

end

p.images = makeInvokeFunc(p._images, {inherited = true}) p.grid = makeInvokeFunc(p._grid, {inherited = true})

return p