Module:Item: Difference between revisions
Neko Knight (talk | contribs) mNo edit summary Tag: Manual revert |
Neko Knight (talk | contribs) 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 p.generateItem(itemArgs) | ||
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 | |||
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 | end | ||
return p | return p |
Latest revision as of 12:12, 20 April 2025
このモジュールはTemplate:Item、Template:アイテムに使用されています。
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