Module:Testing: Difference between revisions
From RuneTails
No edit summary |
No edit summary |
||
| Line 3: | Line 3: | ||
function p.getItemData(frame) | function p.getItemData(frame) | ||
local itemName = frame.args[1] or mw.title.getCurrentTitle().text | local itemName = frame.args[1] or mw.title.getCurrentTitle().text | ||
local result = mw.ext. | |||
-- Check if ExternalData extension exists | |||
if not mw.ext.ExternalData then | |||
return "Error: ExternalData extension is missing." | |||
end | |||
-- Retrieve database data | |||
local result = mw.ext.ExternalData.getDBData{ | |||
db = "WikiDB", | db = "WikiDB", | ||
from = "Items", | from = "Items", | ||
| Line 18: | Line 25: | ||
dbHunger = "Hunger" | dbHunger = "Hunger" | ||
} | } | ||
} | } | ||
-- If no results found, return a message | |||
if not result or #result == 0 then | if not result or #result == 0 then | ||
return "No data found for " .. itemName | return "Error: No data found for " .. itemName | ||
end | end | ||
local item = result[1] | local item = result[1] | ||
return "" | -- Store data using frame args so it can be accessed in templates | ||
return string.format('<div style="display:none;" id="dbItemRarityName">%s</div>' .. | |||
'<div style="display:none;" id="dbItemTypeName">%s</div>' .. | |||
'<div style="display:none;" id="dbDescr">%s</div>' .. | |||
'<div style="display:none;" id="dbSpriteURL">%s</div>' .. | |||
'<div style="display:none;" id="dbIngredientTypeName">%s</div>' .. | |||
'<div style="display:none;" id="dbMinPointsSell">%s</div>' .. | |||
'<div style="display:none;" id="dbHP">%s</div>' .. | |||
'<div style="display:none;" id="dbHunger">%s</div>', | |||
item.dbItemRarityName or "", | |||
item.dbItemTypeName or "", | |||
item.dbDescr or "", | |||
item.dbSpriteURL or "", | |||
item.dbIngredientTypeName or "", | |||
item.dbMinPointsSell or "", | |||
p.formatStat(item.dbHP), | |||
p.formatStat(item.dbHunger, true) | |||
) | |||
end | end | ||
-- Helper function for formatting stats | |||
function p.formatStat(value, isPercentage) | function p.formatStat(value, isPercentage) | ||
if not value or tonumber(value) == 0 then | if not value or tonumber(value) == 0 then | ||
Revision as of 15:01, 13 February 2025
Documentation for this module may be created at Module:Testing/doc
local p = {}
function p.getItemData(frame)
local itemName = frame.args[1] or mw.title.getCurrentTitle().text
-- Check if ExternalData extension exists
if not mw.ext.ExternalData then
return "Error: ExternalData extension is missing."
end
-- Retrieve database data
local result = mw.ext.ExternalData.getDBData{
db = "WikiDB",
from = "Items",
where = "ItemName = ?",
values = {itemName},
data = {
dbItemRarityName = "ItemRarityName",
dbItemTypeName = "ItemTypeName",
dbDescr = "Descr",
dbSpriteURL = "SpriteURL",
dbIngredientTypeName = "IngredientTypeName",
dbMinPointsSell = "MinPointsSell",
dbHP = "HP",
dbHunger = "Hunger"
}
}
-- If no results found, return a message
if not result or #result == 0 then
return "Error: No data found for " .. itemName
end
local item = result[1]
-- Store data using frame args so it can be accessed in templates
return string.format('<div style="display:none;" id="dbItemRarityName">%s</div>' ..
'<div style="display:none;" id="dbItemTypeName">%s</div>' ..
'<div style="display:none;" id="dbDescr">%s</div>' ..
'<div style="display:none;" id="dbSpriteURL">%s</div>' ..
'<div style="display:none;" id="dbIngredientTypeName">%s</div>' ..
'<div style="display:none;" id="dbMinPointsSell">%s</div>' ..
'<div style="display:none;" id="dbHP">%s</div>' ..
'<div style="display:none;" id="dbHunger">%s</div>',
item.dbItemRarityName or "",
item.dbItemTypeName or "",
item.dbDescr or "",
item.dbSpriteURL or "",
item.dbIngredientTypeName or "",
item.dbMinPointsSell or "",
p.formatStat(item.dbHP),
p.formatStat(item.dbHunger, true)
)
end
-- Helper function for formatting stats
function p.formatStat(value, isPercentage)
if not value or tonumber(value) == 0 then
return isPercentage and "0%" or "0"
end
local num = tonumber(value)
if num > 0 then
return isPercentage and ("+" .. num .. "%") or ("+" .. num)
else
return isPercentage and (num .. "%") or tostring(num)
end
end
return p