Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« Module:Roadmap » : différence entre les versions

De Nefald
Hiob (discussion | contributions)
Aucun résumé des modifications
Hiob (discussion | contributions)
citizen
Ligne 2 : Ligne 2 :
-- Module:Roadmap
-- Module:Roadmap
-- Génère une roadmap visuelle pour wiki.nefald.fr
-- Génère une roadmap visuelle pour wiki.nefald.fr
-- Intégré au design system Citizen
-- ============================================================
-- ============================================================


Ligne 14 : Ligne 15 :
done = {
done = {
label = "Terminé",
label = "Terminé",
icon = "✓",
icon = "✓",
color = "#27ae60",
order = 1,
order = 1,
},
},
inprogress = {
inprogress = {
label = "En cours",
label = "En cours",
icon = "◉",
icon = "◉",
color = "#f39c12",
order = 2,
order = 2,
},
},
planned = {
planned = {
label = "Planifié",
label = "Planifié",
icon = "○",
icon = "○",
color = "#3498db",
order = 3,
order = 3,
},
},
idea = {
idea = {
label = "Idée",
label = "Idée",
icon = "✦",
icon = "✦",
color = "#9b59b6",
order = 4,
order = 4,
},
},
cancelled = {
cancelled = {
label = "Annulé",
label = "Annulé",
icon = "✕",
icon = "✕",
color = "#e74c3c",
order = 5,
order = 5,
},
},
},
tags = {
gameplay  = { bg = "#d5f5e3", fg = "#1e8449" },
technique = { bg = "#d6eaf8", fg = "#1a5276" },
contenu  = { bg = "#fdebd0", fg = "#784212" },
interface = { bg = "#f9ebea", fg = "#922b21" },
event    = { bg = "#f5eef8", fg = "#6c3483" },
wiki      = { bg = "#eafaf1", fg = "#1d6a39" },
discord  = { bg = "#eee8ff", fg = "#4527a0" },
},
},
done_statuts    = { done = true },
done_statuts    = { done = true },
Ligne 84 : Ligne 71 :


-- ------------------------------------------------------------
-- ------------------------------------------------------------
-- PARSEUR - adapté au nouveau format @section
-- PARSEUR
-- ------------------------------------------------------------
-- ------------------------------------------------------------


Ligne 92 : Ligne 79 :
line = trim(line)
line = trim(line)
if line == "" or line:match("^%-%-") then
if line == "" or line:match("^%-%-") then
-- skip
-- skip vide ou commentaire
elseif line:match("^@section%s+") then
elseif line:match("^@section%s+") then
local titre = line:match("^@section%s+(.+)$")
local titre = line:match("^@section%s+(.+)$")
Ligne 166 : Ligne 153 :
local s = CONFIG.statuts[statut] or CONFIG.statuts.planned
local s = CONFIG.statuts[statut] or CONFIG.statuts.planned
return string.format(
return string.format(
'<span class="roadmap-badge" style="background:%s" title="%s">%s</span>',
'<span class="roadmap-badge" title="%s">%s</span>',
s.color, escapeHtml(s.label), s.icon
escapeHtml(s.label), s.icon
)
)
end
end
Ligne 175 : Ligne 162 :
local parts = {}
local parts = {}
for _, tag in ipairs(tags) do
for _, tag in ipairs(tags) do
local cfg = CONFIG.tags[tag]
if cfg then
table.insert(parts, string.format(
'<span class="roadmap-tag" style="background:%s;color:%s">%s</span>',
cfg.bg, cfg.fg, escapeHtml(tag)
))
else
table.insert(parts, string.format(
table.insert(parts, string.format(
'<span class="roadmap-tag">%s</span>',
'<span class="roadmap-tag" data-tag="%s">%s</span>',
escapeHtml(tag)
escapeHtml(tag), escapeHtml(tag)
))
))
end
end
end
return '<div class="roadmap-tags">' .. table.concat(parts) .. '</div>'
return '<div class="roadmap-tags">' .. table.concat(parts) .. '</div>'
Ligne 202 : Ligne 181 :
local descHtml = ""
local descHtml = ""
if item.desc and item.desc ~= "" then
if item.desc and item.desc ~= "" then
descHtml = string.format('<div class="roadmap-item-desc">%s</div>', escapeHtml(item.desc))
descHtml = string.format(
'<div class="roadmap-item-desc">%s</div>',
escapeHtml(item.desc)
)
end
end
local dateHtml = ""
local dateHtml = ""
if item.date and item.date ~= "" then
if item.date and item.date ~= "" then
dateHtml = string.format('<div class="roadmap-date">%s</div>', escapeHtml(item.date))
dateHtml = string.format(
'<div class="roadmap-date">%s</div>',
escapeHtml(item.date)
)
end
end
return string.format(
return string.format(
Ligne 231 : Ligne 216 :
return string.format(
return string.format(
'<div class="roadmap-progress-wrap">'
'<div class="roadmap-progress-wrap">'
.. '<div class="roadmap-progress-label">Progression : <strong>%d%%</strong> — %d / %d fonctionnalités</div>'
.. '<div class="roadmap-progress-label">'
.. '<div class="roadmap-progress-bar"><div class="roadmap-progress-fill" style="width:%d%%"></div></div>'
.. 'Progression : <strong>%d%%</strong> — %d / %d fonctionnalités'
.. '</div>'
.. '<div class="roadmap-progress-bar">'
.. '<div class="roadmap-progress-fill" style="width:%d%%"></div>'
.. '</div>'
.. '</div>',
.. '</div>',
pct, done, total, pct
pct, done, total, pct
Ligne 246 : Ligne 235 :
table.insert(parts, string.format(
table.insert(parts, string.format(
'<span class="roadmap-legend-item">'
'<span class="roadmap-legend-item">'
.. '<span class="roadmap-badge" style="background:%s;width:18px;height:18px;font-size:0.75em">%s</span>'
.. '<span class="roadmap-badge" '
.. ' %s</span>',
.. 'style="width:16px;height:16px;min-width:16px;font-size:0.7em">'
s.color, s.icon, escapeHtml(s.label)
.. '%s</span> %s</span>',
s.icon, escapeHtml(s.label)
))
))
end
end
Ligne 269 : Ligne 259 :
local s = CONFIG.statuts[key]
local s = CONFIG.statuts[key]
table.insert(parts, string.format(
table.insert(parts, string.format(
'<span class="roadmap-stat" style="border-color:%s">'
'<span class="roadmap-stat">'
.. '<span class="roadmap-stat-count" style="color:%s">%d</span>'
.. '<span class="roadmap-stat-count">%d</span>'
.. '<span class="roadmap-stat-label">%s</span>'
.. '<span class="roadmap-stat-label">%s</span>'
.. '</span>',
.. '</span>',
s.color, s.color, counts[key], escapeHtml(s.label)
counts[key], escapeHtml(s.label)
))
))
end
end
Ligne 281 : Ligne 271 :


-- ------------------------------------------------------------
-- ------------------------------------------------------------
-- RENDER PRINCIPAL
-- RENDU PRINCIPAL
-- ------------------------------------------------------------
-- ------------------------------------------------------------


function p.render(frame)
function p.render(frame)
local args = frame:getParent().args
local args = frame:getParent().args
local titre = getParam(args, "titre") or "Roadmap"
local titre   = getParam(args, "titre") or "Roadmap"
local subtitle = getParam(args, "subtitle")
local subtitle = getParam(args, "subtitle")
local rawContenu = trim(args["contenu"] or args[1] or "")
local rawContenu = trim(args["contenu"] or args[1] or "")
local showStats = getParam(args, "stats") ~= "non"
local showStats   = getParam(args, "stats") ~= "non"
local showLegende = getParam(args, "legende") ~= "non"
local showLegende = getParam(args, "legende") ~= "non"
local elements = parseContenu(rawContenu)
local elements = parseContenu(rawContenu)
Ligne 297 : Ligne 287 :
-- Header
-- Header
table.insert(html, '<div class="roadmap-header">')
table.insert(html, '<div class="roadmap-header">')
table.insert(html, string.format('<div class="roadmap-header-title">%s</div>', escapeHtml(titre)))
table.insert(html, string.format(
'<div><div class="roadmap-header-title">%s</div>',
escapeHtml(titre)
))
if subtitle then
if subtitle then
table.insert(html, string.format('<div class="roadmap-subtitle">%s</div>', escapeHtml(subtitle)))
table.insert(html, string.format(
'<div class="roadmap-subtitle">%s</div>',
escapeHtml(subtitle)
))
end
end
table.insert(html, '</div>')
table.insert(html, '</div></div>')
-- Stats
-- Stats
if showStats and #elements > 0 then
if showStats and #elements > 0 then
Ligne 335 : Ligne 331 :


-- ------------------------------------------------------------
-- ------------------------------------------------------------
-- ITEM INLINE
-- ITEM INLINE (usage standalone)
-- ------------------------------------------------------------
-- ------------------------------------------------------------


Ligne 345 : Ligne 341 :
local item = {
local item = {
statut = statut,
statut = statut,
titre = titre,
titre = titre,
desc = getParam(args, "desc"),
desc   = getParam(args, "desc"),
date = getParam(args, "date"),
date   = getParam(args, "date"),
lien = getParam(args, "lien"),
lien   = getParam(args, "lien"),
tags = {},
tags   = {},
}
}
local tagStr = getParam(args, "tag", "tags")
local tagStr = getParam(args, "tag", "tags")
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.