« Module:Monnaie » : différence entre les versions
De Nefald
Autres actions
Aucun résumé des modifications Balise : Révoqué |
m espace insécable |
||
| (8 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 12 : | Ligne 12 : | ||
local ICON_SIZE = "24px" | local ICON_SIZE = "24px" | ||
-- ============================================================ | |||
-- Aliases acceptés pour chaque monnaie | |||
-- ============================================================ | |||
local ALIASES = { | local ALIASES = { | ||
ecu = { "écu", "ecu", "écus", "ecus", "e" }, | ecu = { "écu", "ecu", "écus", "ecus", "e" }, | ||
| Ligne 18 : | Ligne 21 : | ||
} | } | ||
-- ============================================================ | |||
-- Construit le tooltip au survol | |||
-- ============================================================ | |||
local function buildTooltip(ecus, oboles, sols, total) | local function buildTooltip(ecus, oboles, sols, total) | ||
local parts = {} | local parts = {} | ||
| Ligne 27 : | Ligne 33 : | ||
end | end | ||
-- ============================================================ | |||
-- Construit une icône + valeur via wikilink parsé | |||
-- ============================================================ | |||
local function buildIcon(amount, imageFile, altText) | local function buildIcon(amount, imageFile, altText) | ||
local img = "[[Fichier:" .. imageFile .. "|24px|link=|alt=" .. altText .. "]]" | |||
local | |||
return '<span class="monnaie__groupe">' | return '<span class="monnaie__groupe">' | ||
.. '<span class="monnaie__valeur">' .. amount .. | .. '<span class="monnaie__valeur">' .. amount .. ' </span>' | ||
.. '<span class="monnaie__icone">' .. | .. '<span class="monnaie__icone">' .. img .. '</span>' | ||
.. | .. '</span>' | ||
end | end | ||
-- ============================================================ | |||
-- Parse une chaîne mixte ex: "1écu, 2 oboles, 5sols" | |||
-- Retourne le total en sols, ou nil si invalide | |||
-- ============================================================ | |||
local function parseString(input) | local function parseString(input) | ||
local n = tonumber(input) | local n = tonumber(input) | ||
| Ligne 68 : | Ligne 77 : | ||
end | end | ||
-- ============================================================ | |||
-- Fonction principale | |||
-- ============================================================ | |||
function p.afficher(frame) | function p.afficher(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
| Ligne 73 : | Ligne 85 : | ||
local total | local total | ||
-- Mode 3 paramètres : au moins args[2] ou args[3] est déclaré | |||
if args[2] ~= nil or args[3] ~= nil then | if args[2] ~= nil or args[3] ~= nil then | ||
local ecus = tonumber(mw.text.trim(args[1] or "")) or 0 | local ecus = tonumber(mw.text.trim(args[1] or "")) or 0 | ||
| Ligne 79 : | Ligne 92 : | ||
total = (ecus * ECU_VALUE) + (oboles * OBOLE_VALUE) + sols | total = (ecus * ECU_VALUE) + (oboles * OBOLE_VALUE) + sols | ||
-- Mode 1 paramètre : nombre brut (sols) ou chaîne texte libre | |||
elseif args[1] ~= nil then | elseif args[1] ~= nil then | ||
local arg1 = mw.text.trim(args[1]) | local arg1 = mw.text.trim(args[1]) | ||
| Ligne 94 : | Ligne 108 : | ||
end | end | ||
-- Décomposition en écus / oboles / sols | |||
local ecus = math.floor(total / ECU_VALUE) | local ecus = math.floor(total / ECU_VALUE) | ||
local reste = total % ECU_VALUE | local reste = total % ECU_VALUE | ||
| Ligne 99 : | Ligne 114 : | ||
local sols = reste % OBOLE_VALUE | local sols = reste % OBOLE_VALUE | ||
-- Tooltip | |||
local tooltip = buildTooltip(ecus, oboles, sols, total) | local tooltip = buildTooltip(ecus, oboles, sols, total) | ||
-- Construction du HTML | |||
local parts = {} | local parts = {} | ||
if ecus > 0 then parts[#parts+1] = buildIcon(ecus, IMAGES.ecu, "écu") end | if ecus > 0 then parts[#parts+1] = buildIcon(ecus, IMAGES.ecu, "écu") end | ||
| Ligne 109 : | Ligne 126 : | ||
end | end | ||
local html = '<span class="monnaie" title="' .. tooltip .. '">' | |||
local html = | |||
.. table.concat(parts) | .. table.concat(parts) | ||
.. | .. '</span>' | ||
return frame:preprocess(html) | return frame:preprocess(html) | ||
end | end | ||
return p | return p | ||
Dernière version du 1 mars 2026 à 14:10
La documentation pour ce module peut être créée à Module:Monnaie/doc
local p = {}
local ECU_VALUE = 4096
local OBOLE_VALUE = 64
local IMAGES = {
ecu = "Écu_pièce_or.png",
obole = "Obole_pièce_argent.png",
sol = "Sol_pièce_cuivre.png",
}
local ICON_SIZE = "24px"
-- ============================================================
-- Aliases acceptés pour chaque monnaie
-- ============================================================
local ALIASES = {
ecu = { "écu", "ecu", "écus", "ecus", "e" },
obole = { "obole", "oboles", "o" },
sol = { "sol", "sols", "s" },
}
-- ============================================================
-- Construit le tooltip au survol
-- ============================================================
local function buildTooltip(ecus, oboles, sols, total)
local parts = {}
if ecus > 0 then parts[#parts+1] = ecus .. " écu" .. (ecus > 1 and "s" or "") end
if oboles > 0 then parts[#parts+1] = oboles .. " obole" .. (oboles > 1 and "s" or "") end
if sols > 0 then parts[#parts+1] = sols .. " sol" .. (sols > 1 and "s" or "") end
if #parts == 0 then parts[#parts+1] = "0 sol" end
return table.concat(parts, ", ") .. " (" .. total .. " sols)"
end
-- ============================================================
-- Construit une icône + valeur via wikilink parsé
-- ============================================================
local function buildIcon(amount, imageFile, altText)
local img = "[[Fichier:" .. imageFile .. "|24px|link=|alt=" .. altText .. "]]"
return '<span class="monnaie__groupe">'
.. '<span class="monnaie__valeur">' .. amount .. ' </span>'
.. '<span class="monnaie__icone">' .. img .. '</span>'
.. '</span>'
end
-- ============================================================
-- Parse une chaîne mixte ex: "1écu, 2 oboles, 5sols"
-- Retourne le total en sols, ou nil si invalide
-- ============================================================
local function parseString(input)
local n = tonumber(input)
if n then return math.floor(n) end
local total = 0
local found = false
local s = mw.ustring.lower(input)
for amount_str, unit in mw.ustring.gmatch(s, "(%d+)%s*([%a]+)") do
local amount = tonumber(amount_str) or 0
unit = mw.text.trim(unit)
for monnaie, aliases in pairs(ALIASES) do
for _, alias in ipairs(aliases) do
if unit == alias then
if monnaie == "ecu" then total = total + amount * ECU_VALUE end
if monnaie == "obole" then total = total + amount * OBOLE_VALUE end
if monnaie == "sol" then total = total + amount end
found = true
break
end
end
end
end
if not found then return nil end
return total
end
-- ============================================================
-- Fonction principale
-- ============================================================
function p.afficher(frame)
local args = frame:getParent().args
local total
-- Mode 3 paramètres : au moins args[2] ou args[3] est déclaré
if args[2] ~= nil or args[3] ~= nil then
local ecus = tonumber(mw.text.trim(args[1] or "")) or 0
local oboles = tonumber(mw.text.trim(args[2] or "")) or 0
local sols = tonumber(mw.text.trim(args[3] or "")) or 0
total = (ecus * ECU_VALUE) + (oboles * OBOLE_VALUE) + sols
-- Mode 1 paramètre : nombre brut (sols) ou chaîne texte libre
elseif args[1] ~= nil then
local arg1 = mw.text.trim(args[1])
if arg1 == "" then
return '<span class="error">Paramètre manquant</span>'
end
total = parseString(arg1)
else
return '<span class="error">Paramètre manquant</span>'
end
if not total or total < 0 then
return '<span class="error">Montant invalide</span>'
end
-- Décomposition en écus / oboles / sols
local ecus = math.floor(total / ECU_VALUE)
local reste = total % ECU_VALUE
local oboles = math.floor(reste / OBOLE_VALUE)
local sols = reste % OBOLE_VALUE
-- Tooltip
local tooltip = buildTooltip(ecus, oboles, sols, total)
-- Construction du HTML
local parts = {}
if ecus > 0 then parts[#parts+1] = buildIcon(ecus, IMAGES.ecu, "écu") end
if oboles > 0 then parts[#parts+1] = buildIcon(oboles, IMAGES.obole, "obole") end
if sols > 0 then parts[#parts+1] = buildIcon(sols, IMAGES.sol, "sol") end
if #parts == 0 then
parts[#parts+1] = buildIcon(0, IMAGES.sol, "sol")
end
local html = '<span class="monnaie" title="' .. tooltip .. '">'
.. table.concat(parts)
.. '</span>'
return frame:preprocess(html)
end
return p