« Module:Roadmap » : différence entre les versions
De Nefald
Autres actions
Aucun résumé des modifications |
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 = "✓", | ||
order = 1, | order = 1, | ||
}, | }, | ||
inprogress = { | inprogress = { | ||
label = "En cours", | label = "En cours", | ||
icon = "◉ | icon = "◉", | ||
order = 2, | order = 2, | ||
}, | }, | ||
planned = { | planned = { | ||
label = "Planifié", | label = "Planifié", | ||
icon = "○ | icon = "○", | ||
order = 3, | order = 3, | ||
}, | }, | ||
idea = { | idea = { | ||
label = "Idée", | label = "Idée", | ||
icon = "✦ | icon = "✦", | ||
order = 4, | order = 4, | ||
}, | }, | ||
cancelled = { | cancelled = { | ||
label = "Annulé", | label = "Annulé", | ||
icon = "✕ | icon = "✕", | ||
order = 5, | order = 5, | ||
}, | }, | ||
}, | }, | ||
done_statuts = { done = true }, | done_statuts = { done = true }, | ||
| Ligne 84 : | Ligne 71 : | ||
-- ------------------------------------------------------------ | -- ------------------------------------------------------------ | ||
-- PARSEUR | -- 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 | '<span class="roadmap-badge" title="%s">%s</span>', | ||
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 | ||
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 | ||
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=" | .. '<span class="roadmap-badge" ' | ||
.. 'style="width:16px;height:16px;min-width:16px;font-size:0.7em">' | |||
.. '%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 | '<span class="roadmap-stat">' | ||
.. '<span class="roadmap-stat-count | .. '<span class="roadmap-stat-count">%d</span>' | ||
.. '<span class="roadmap-stat-label">%s</span>' | .. '<span class="roadmap-stat-label">%s</span>' | ||
.. '</span>', | .. '</span>', | ||
counts[key], escapeHtml(s.label) | |||
)) | )) | ||
end | end | ||
| Ligne 281 : | Ligne 271 : | ||
-- ------------------------------------------------------------ | -- ------------------------------------------------------------ | ||
-- | -- 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") | ||