Module:Item: Difference between revisions

From Ylvapedia
mNo edit summary
Tag: Manual revert
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
local utils = require('Module:Utils')
local p = {}
local p = {}


local function isBlank(value)
function p.generateItem(itemArgs)
return value == nil or not value or value == ''
  local lang = itemArgs['lang'] or 'JA'
end
  local grid = itemArgs['grid']
  local itemName = itemArgs['name']
  local ext = itemArgs['ext'] or 'png'
  local size = itemArgs['size'] or '32x32px'
  local itemCount = itemArgs['num']
  local image = itemArgs['image']
  local link = itemArgs['link']
  local variety = itemArgs['variety']
  local itemMat = itemArgs['itemMat']
  local id = itemArgs['id']
  local icon = itemArgs['icon']
 
  local data = mw.loadData('Module:Item/IDAliases')
  local data4 = mw.loadData('Module:Item/Materials')
  local data2, data3
  local foundId
 
  itemName = mw.text.trim(itemName)
 
  if string.find(itemName, '@') then
    if itemMat then
      mw.log('log: '..itemName..' マテリアル設定が重複しています。アイテム名に含まれるほうを優先します。')
    end
    itemName, itemMat = itemName:match('([^@]+)@([^@]+)')
  end
 
  if string.find(itemName, '_') then
    mw.log('log:  '..itemName.." アイテム名にヴァリエーション情報の'_'が含まれています。")
    if utils.isNilEmptyOrFalse(variety) then
      itemName, variety = itemName:match('([^_]+)_([^_]+)')
    else
      mw.log('log:  '..itemName.." ヴァリエーション設定が重複しています。アイテム名の処理をします。")
      itemName = string.gsub(itemName, '_', ' ')
    end
  end
 
  if not image then
    if not id then
      local imageNameParts = { 'Elin Item Sprite ' }
 
      if lang == 'EN' then
        table.insert(imageNameParts, itemName)
      elseif lang == 'JA' then
        data2 = mw.loadData('Module:Item/JaAliases')
        data3 = mw.loadData('Module:Item/JaAliases2')
      --elseif lang == 'add lang' then
      end
 
      if utils.isNilEmptyOrFalse(variety) and lang ~= 'EN' then
        table.insert(imageNameParts, data[data2[itemName]] or data3[itemName])
      elseif not utils.isNilEmptyOrFalse(variety) and lang ~= 'EN' then
        table.insert(imageNameParts, data[data2[itemName..variety]] or data3[itemName..variety])
      elseif not utils.isNilEmptyOrFalse(variety) then
        table.insert(imageNameParts, ' ')
        table.insert(imageNameParts, variety)
      end
 
      if not utils.isNilEmptyOrFalse(itemMat) then
        for _, matData in pairs(data4) do
          if lang == 'EN' and matData and matData.name == itemMat or
            lang == 'JA' and matData and matData.name_JP == itemMat then
            foundId = matData.id
            break
          end
        end
      end
 
      if not utils.isNilEmptyOrFalse(foundId) then
        table.insert(imageNameParts, ' ')
        table.insert(imageNameParts, foundId)
      end
 
      table.insert(imageNameParts, '.')
      table.insert(imageNameParts, ext)
 
      image = table.concat(imageNameParts)
    else
      image = data[id] and 'Elin Item Sprite '..data[id]..'.'..ext or 'clear.png'
    end
  else
    if not string.find(image, '%.') then
      image = image..'.'..ext
    end
  end
 
  local wt = mw.html.create('span'):addClass('item')
  if utils.checkOnOff(grid) then
    wt:cssText('display: inline-grid; text-align: center;')
  elseif string.len(itemName) >= 36 then
    wt:cssText('font-size: smaller; white-space: pre-wrap; letter-spacing: -0.1em;')
  else
    wt:cssText('white-space: nowrap;')
  end
 
  local matString = itemMat and ' '..itemMat or ''
  local varietyString = variety and ' '..variety or ''
  local alt = itemName..varietyString..matString
  local linkPage = 'Elin:'..itemName..varietyString
  local linkString


function p.itemparameters(f)
  if utils.checkOnOff(link) then
    linkString = itemName..matString
local args = f:getParent().args
  elseif utils.isNilEmptyOrFalse(link) then
local lang = f.args[2]
    linkString = '[[Elin:'..itemName..varietyString..'|'..itemName..matString..']]'
local name = args[1] or f.args[1]
  else
local namelen = string.len(name)
    if string.find(link, 'Elin:') then
local ext = args['ext'] or 'png'
      linkString = '[['..link..'|'..itemName..matString..']]'
local size = args['size'] or '32x32px'
    else
local num = args['x'] or args[2]
      linkString = '[[Elin:'..link..'|'..itemName..matString..']]'
local image = args['img']
    end
local link = args['link']
  end
local variety = args['v']
local id = args['id']
local data = mw.loadData('Module:Item/IDAliases')
local result
local data2
local data3


if lang == nil then
  if icon ~= 'no' then
mw.log("error: Language code not specified")
    wt:wikitext(string.format('[[File:%s|%s|link=%s|alt=%s|class=itemimg]]', image, size, linkPage, alt))
return "error: Language code not specified"
  end
end
  wt:wikitext(linkString)


if image == nil then
  if not utils.isNilEmptyOrFalse(itemCount) then
if id == nil then
    wt:wikitext(string.format('<span class="itemCount">%s</span>', itemCount))
if lang == 'EN' then
  end
if isBlank(variety) then
image = 'Elin Item Sprite ' ..name..'.'..ext
else
image = 'Elin Item Sprite ' ..name..' '..variety..'.'..ext
end
else
if lang == 'JA' then
data2 = mw.loadData('Module:Item/JaAliases') or {}
data3 = mw.loadData('Module:Item/JaAliases2') or {}
end


if isBlank(variety) then
  return tostring(wt)
result = data[data2[name]] or data3[name]
end
else
result = data[data2[name..variety]] or data3[name..variety]
end
if isBlank(result) then
image = 'clear.png'
else
image = 'Elin Item Sprite ' ..result..'.'..ext
end
end
else
if data[id] then
image = 'Elin Item Sprite ' ..data[id]..'.'..ext
else
image = 'clear.png'
end
end
else
local v = string.find(image,'%.')
if v then
else
image = image..'.'..ext
end
end


local wt = mw.html.create('span'):addClass('item')
function p.itemparameters(f)
if args['grid'] == 'true' or args['grid'] == 'on' or args['grid'] == '1' or args['grid'] == 'Y' then
  local args = f:getParent().args
wt:cssText('display: inline-grid; text-align: center;')
  local itemData = {
else
    lang = utils.getDefaultIfEmpty(f.args['lang'], 'JA'),
if namelen >=36 then
    grid = args['grid'],
wt:cssText('font-size: smaller; white-space: pre-wrap; letter-spacing: -0.1em;')
    name = args[1] or f.args[1],
else
    ext = utils.getDefaultIfEmpty(args['ext'], 'png'),
wt:cssText('white-space: nowrap;')
    size = utils.getDefaultIfEmpty(args['size'], '32x32px'),
end
    num = utils.nilIfEmpty(args['x'] or args[2]),
end
    image = utils.nilIfEmpty(args['img']),
    link = utils.nilIfEmpty(args['link']),
    variety = utils.nilIfEmpty(args['v']),
    itemMat = utils.nilIfEmpty(args['itemMat']),
    id = utils.nilIfEmpty(args['id']),
    icon = utils.nilIfEmpty(args['icon'])
  }


if link == 'false' or link == 'no' or link == '0' or link == 'N' then
  return p.generateItem(itemData)
wt:wikitext(string.format('[[File:%s|%s|link=|alt=%s|class=itemimg]]',image,size,name))
wt:wikitext(string.format('%s',name))
else
if isBlank(link) then
link =  'Elin:'..name..'|'..name
else
link =  link..'|'..name
end
wt:wikitext(string.format('[[File:%s|%s|link=%s|alt=%s|class=itemimg]]',image,size,link,name))
wt:wikitext(string.format('[[%s]]',link))
end
if isBlank(num) then
else
wt:wikitext(string.format('(%s)',num))
end
return tostring(wt)
end
end


return p
return p

Latest revision as of 12:12, 20 April 2025

このモジュールはTemplate:ItemTemplate:アイテムに使用されています。


local utils = require('Module:Utils')
local p = {}

function p.generateItem(itemArgs)
  local lang = itemArgs['lang'] or 'JA'
  local grid = itemArgs['grid']
  local itemName = itemArgs['name']
  local ext = itemArgs['ext'] or 'png'
  local size = itemArgs['size'] or '32x32px'
  local itemCount = itemArgs['num']
  local image = itemArgs['image']
  local link = itemArgs['link']
  local variety = itemArgs['variety']
  local itemMat = itemArgs['itemMat']
  local id = itemArgs['id']
  local icon = itemArgs['icon']

  local data = mw.loadData('Module:Item/IDAliases')
  local data4 = mw.loadData('Module:Item/Materials')
  local data2, data3
  local foundId
  
  itemName = mw.text.trim(itemName)

  if string.find(itemName, '@') then
    if itemMat then
      mw.log('log: '..itemName..' マテリアル設定が重複しています。アイテム名に含まれるほうを優先します。')
    end
    itemName, itemMat = itemName:match('([^@]+)@([^@]+)')
  end

  if string.find(itemName, '_') then
    mw.log('log:  '..itemName.." アイテム名にヴァリエーション情報の'_'が含まれています。")
    if utils.isNilEmptyOrFalse(variety) then
      itemName, variety = itemName:match('([^_]+)_([^_]+)')
    else
      mw.log('log:  '..itemName.." ヴァリエーション設定が重複しています。アイテム名の処理をします。")
      itemName = string.gsub(itemName, '_', ' ')
    end
  end

  if not image then
    if not id then
      local imageNameParts = { 'Elin Item Sprite ' }

      if lang == 'EN' then
        table.insert(imageNameParts, itemName)
      elseif lang == 'JA' then
        data2 = mw.loadData('Module:Item/JaAliases')
        data3 = mw.loadData('Module:Item/JaAliases2')
      --elseif lang == 'add lang' then
      end

      if utils.isNilEmptyOrFalse(variety) and lang ~= 'EN' then
        table.insert(imageNameParts, data[data2[itemName]] or data3[itemName])
      elseif not utils.isNilEmptyOrFalse(variety) and lang ~= 'EN' then
        table.insert(imageNameParts, data[data2[itemName..variety]] or data3[itemName..variety])
      elseif not utils.isNilEmptyOrFalse(variety) then
        table.insert(imageNameParts, ' ')
        table.insert(imageNameParts, variety)
      end

      if not utils.isNilEmptyOrFalse(itemMat) then
        for _, matData in pairs(data4) do
          if lang == 'EN' and matData and matData.name == itemMat or
             lang == 'JA' and matData and matData.name_JP == itemMat then
            foundId = matData.id
            break
          end
        end
      end

      if not utils.isNilEmptyOrFalse(foundId) then
        table.insert(imageNameParts, ' ')
        table.insert(imageNameParts, foundId)
      end

      table.insert(imageNameParts, '.')
      table.insert(imageNameParts, ext)

      image = table.concat(imageNameParts)
    else
      image = data[id] and 'Elin Item Sprite '..data[id]..'.'..ext or 'clear.png'
    end
  else
    if not string.find(image, '%.') then
      image = image..'.'..ext
    end
  end

  local wt = mw.html.create('span'):addClass('item')
  if utils.checkOnOff(grid) then
    wt:cssText('display: inline-grid; text-align: center;')
  elseif string.len(itemName) >= 36 then
    wt:cssText('font-size: smaller; white-space: pre-wrap; letter-spacing: -0.1em;')
  else
    wt:cssText('white-space: nowrap;')
  end

  local matString = itemMat and ' '..itemMat or ''
  local varietyString = variety and ' '..variety or ''
  local alt = itemName..varietyString..matString
  local linkPage = 'Elin:'..itemName..varietyString
  local linkString

  if utils.checkOnOff(link) then
    linkString = itemName..matString
  elseif utils.isNilEmptyOrFalse(link) then
    linkString = '[[Elin:'..itemName..varietyString..'|'..itemName..matString..']]'
  else
    if string.find(link, 'Elin:') then
      linkString = '[['..link..'|'..itemName..matString..']]'
    else
      linkString = '[[Elin:'..link..'|'..itemName..matString..']]'
    end
  end

  if icon ~= 'no' then
    wt:wikitext(string.format('[[File:%s|%s|link=%s|alt=%s|class=itemimg]]', image, size, linkPage, alt))
  end
  wt:wikitext(linkString)

  if not utils.isNilEmptyOrFalse(itemCount) then
    wt:wikitext(string.format('<span class="itemCount">%s</span>', itemCount))
  end

  return tostring(wt)
end

function p.itemparameters(f)
  local args = f:getParent().args
  local itemData = {
    lang = utils.getDefaultIfEmpty(f.args['lang'], 'JA'),
    grid = args['grid'],
    name = args[1] or f.args[1],
    ext = utils.getDefaultIfEmpty(args['ext'], 'png'),
    size = utils.getDefaultIfEmpty(args['size'], '32x32px'),
    num = utils.nilIfEmpty(args['x'] or args[2]),
    image = utils.nilIfEmpty(args['img']),
    link = utils.nilIfEmpty(args['link']),
    variety = utils.nilIfEmpty(args['v']),
    itemMat = utils.nilIfEmpty(args['itemMat']),
    id = utils.nilIfEmpty(args['id']),
    icon = utils.nilIfEmpty(args['icon'])
  }

  return p.generateItem(itemData)
end

return p