Module:Bacasable
Apparence
La documentation de ce module est générée par le modèle {{Documentation module}}.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- Ce module implémente les modèles {{Albumchart}} et {{Singlechart}}.
local p = {}
local data = {
cfg = {
albumData = 'Module:Classement musical/Données/Album',
singleData = 'Module:Classement musical/Données/Single'
},
formats = {
}
}
-- Useful definitions.
local format = mw.ustring.format
local insert = table.insert
local isTrue = require('Module:Yesno')
local Chart = {}
Chart.__index = Chart
function Chart.new(args, cfg, chartType)
local cleanArgs = {}
for k, v in pairs(args) do
if type(k) == 'string' and v ~= '' then
cleanArgs[k] = mw.text.trim(v)
end
end
local chartName = mw.ustring.lower(cleanArgs[1] or '')
-- Loading the data module.
local data = data--mw.loadData('Module:Classement musical/Données')
local cfg = data.cfg
local moduleName = chartType == 'album' and cfg.albumData or cfg.singleData
local chartData = mw.loadData(moduleName)[chartName]
local root = mw.html.create()
-- To reproduce the behavior of the wikicode, the HTML code is deliberately
-- raw and does not use mw.html.
if isTrue(args.rowheader) then
root:wikitext('! scope="row" style="font-weight:normal;"')
end
root:wikitext('|')
local fields = {
args = cleanArgs,
isAlbumChart = chartType == 'album',
chartName = chartName,
chartData = chartData,
formatData = data.formats[chartData.format] or {},
cfg = cfg,
root = mw.html.create()
}
return setmetatable(fields, Chart)
end
function Chart:__tostring()
return tostring(self.root)
end
function Chart:checkFormat()
-- Fonction retournant la table des arguments manquants si existant.
local missingParams = {}
local requiredParams = self.formatData.params
for _, requiredParam in pairs(requiredParams) do
if not self.args[requiredParam] then
insert(missingParams, requiredParam)
end
end
return missingParams
end
local function refContent(chartData)
local res = mw.html.create()
local frame = mw.getCurrentFrame()
if chartData.langue then
res
:wikitext(frame:expandTemplate{title = chartData.langue})
:wikitext(' ')
end
res:wikitext(format('%s. %s. %s. ',
gestionLienUrl(chartData),
chartData.noteChart or chartData.chart,
chartData.editeur))
if args['en ligne le'] then
res:wikitext(format('Mis en ligne le %s. ', args['en ligne le']))
end
if args['consulté le'] then
res:wikitext(format('Consulté le %s.', args['consulté le']))
end
return tostring(res)
end
function Chart:buildChartRow()
local missingParams = self:checkFormat()
-- Gestion des exceptions des arguments du modèle.
if next(missingParams) then
node:wikitext(erreurArgs(missingParams))
return
end
local frame = mw.getCurrentFrame()
local flag = chartData.flag == ''
and frame:expandTemplate{title = chartData.flag}
or
node
:wikitext(frame:expandTemplate{title = chartData.flag})
:wikitext(format(' (%s)', chartData.name))
:wikitext(frame:extensionTag('ref', contenuReference(chartData), {
name = args.refname or chartType .. 'c_' .. chartName,
group = args.refgroup
}))
if args.note then
node
:tag('br')
:done()
:tag('span')
:css('font-style', 'italic')
:css('font-size', '89%')
:wikitext(args.note)
end
end
-- Access in the module space.
function p._main(args, chartType)
local chart = Chart.new(args, cfg, chartType)
return tostring(chart:buildHeader():buildContent():buildFooter())
end
-- Access outside the module space.
function p.main(frame)
local argsParent = frame:getParent().args
return p._main(argsParent, frame.args[1])
end
return p