Module:Item
このモジュールはTemplate:Item、Template:アイテムに使用されています。
local utils = require('Module:Utils')
local p = {}
--valueをname,mat,skin,varietyに分離
function p.getItem(value)
local name = value
local mat
local skin
local variety
local element
if string.find(name, '@') then
name, mat = name:match("([^@]+)@([^@]+)")
end
if string.find(name, ':') then
name, skin = name:match("([^:]+):([^:]+)")
end
if string.find(name, '_') then
name, variety = name:match("([^_]+)_([^_]+)")
end
if string.find(name, '%+') then
name, element = name:match("([^%+]+)%+([^%+]+)")
end
return name, mat, skin, variety, element
end
function p.generateItem(itemArgs)
local lang = itemArgs['lang'] or 'JA'
local grid = utils.nilCheck(itemArgs['grid'])
local itemName = utils.nilCheck(itemArgs['name'])
local ext = utils.getDefaultIfEmpty(itemArgs['ext'], 'png')
local size = utils.getDefaultIfEmpty(itemArgs['size'], '32x32px')
local itemCount = utils.nilCheck(itemArgs['num'])
local image = utils.nilCheck(itemArgs['image'])
local link = utils.nilCheck(itemArgs['link'])
local variety = utils.nilCheck(itemArgs['variety'])
local element = utils.nilCheck(itemArgs['element'])
local skin = utils.nilCheck(itemArgs['skin'])
local itemMat = utils.nilCheck(itemArgs['itemMat'])
local id = utils.nilCheck(itemArgs['id'])
local icon = utils.nilCheck(itemArgs['icon'])
local ruby = utils.nilCheck(itemArgs['ruby'])
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
--mw.log('log: ',itemName,' マテリアル設定が重複しています。アイテム名に含まれるほうを優先します。')
itemName, itemMat = itemName:match('([^@]+)@([^@]+)')
end
if string.find(itemName, ':') then
itemName, skin = itemName:match("([^:]+):([^:]+)")
end
if string.find(itemName, '_') then
--mw.log('log: '..itemName.." アイテム名にヴァリエーション情報の'_'が含まれています。")
if 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 not variety and lang ~= 'EN' then
table.insert(imageNameParts, data[data2[itemName]] or data3[itemName])
elseif variety and lang ~= 'EN' then
table.insert(imageNameParts, data[data2[itemName..variety]] or data3[itemName..variety])
elseif variety then
table.insert(imageNameParts, ' '..variety)
end
if skin then
table.insert(imageNameParts, ' skin'..skin)
end
if 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 foundId then
table.insert(imageNameParts, ' '..foundId)
end
table.insert(imageNameParts, '.'..ext)
image = table.concat(imageNameParts)
if image == 'Elin Item Sprite .png' then
image = 'clear.png'
end
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 elementString = element and '≪'..element..'≫' or ''
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 skin and link == 'skin' then
linkString = '[[Elin:'..itemName..' skin'..skin..'|'..itemName..matString..elementString..']]'
elseif link and link == 'no' then
linkString = itemName..matString
linkPage = ''
elseif link then
if string.find(link, 'Elin:') then
linkString = '[['..link..'|'..itemName..matString..elementString..']]'
else
linkString = '[[Elin:'..link..'|'..itemName..matString..elementString..']]'
end
else
linkString = '[[Elin:'..itemName..varietyString..'|'..itemName..matString..elementString..']]'
end
if icon and icon == 'no' then
else
wt:wikitext(string.format('[[File:%s|%s|link=%s|alt=%s|class=itemimg]]', image, size, linkPage, alt))
end
wt:wikitext(linkString)
if ruby then
wt:wikitext(string.format('<small><sup>[%s]</sup></small>', ruby))
end
if 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.nilCheck(args['x'] or args[2]),
image = utils.nilCheck(args['img']),
link = utils.nilCheck(args['link']),
variety = utils.nilCheck(args['v']),
element = utils.nilCheck(args['e']),
skin = utils.nilCheck(args['s']),
itemMat = utils.nilCheck(args['itemMat']),
id = utils.nilCheck(args['id']),
icon = utils.nilCheck(args['icon']),
ruby = utils.nilCheck(args['ruby'])
}
return p.generateItem(itemData)
end
return p