Module:Testing: Difference between revisions

From RuneTails
NES (talk | contribs)
No edit summary
NES (talk | contribs)
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.getDbData({
   
    -- 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]
   
    -- Set values to global frame storage so templates can access them
    frame:extensionTag("var", {name = "dbItemRarityName", value = item.dbItemRarityName or ""})
    frame:extensionTag("var", {name = "dbItemTypeName", value = item.dbItemTypeName or ""})
    frame:extensionTag("var", {name = "dbDescr", value = item.dbDescr or ""})
    frame:extensionTag("var", {name = "dbSpriteURL", value = item.dbSpriteURL or ""})
    frame:extensionTag("var", {name = "dbIngredientTypeName", value = item.dbIngredientTypeName or ""})
    frame:extensionTag("var", {name = "dbMinPointsSell", value = item.dbMinPointsSell or ""})
    frame:extensionTag("var", {name = "dbHP", value = p.formatStat(item.dbHP)})
    frame:extensionTag("var", {name = "dbHunger", value = p.formatStat(item.dbHunger, true)})


     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