FANDOM


-- <nowiki>
--
-- Ce module est utilisé par Modèle:Dialogue
 
local p = {}
 
local function makeCategoryLink(cat)
	return string.format('[[Catégorie:%s]]', cat)
end
 
local function makeWikitextError(msg)
	local ret = ''
	ret = ret .. string.format(
		'<strong class="error">Erreur de [[Modèle:Dialogue]] : %s.</strong>',
		msg
	)
	if mw.title.getCurrentTitle().namespace == 0 then
		ret = ret .. makeCategoryLink('Pages avec des erreurs de script')
	end
	return ret
end
 
function p._main(lines, options)
	-- validation des données lignes
	if #lines < 2 then
		return makeWikitextError('les dialogues doivent comptabiliser au moins deux lignes')
	elseif #lines > 10 then
		return makeWikitextError('les dialogues ne doivent pas comptabiliser plus de 10 lignes')
	end
	for i, t in ipairs(lines) do
		if not t.speaker then
			return makeWikitextError(string.format(
				'aucun interlocuteur indiqué pour la ligne %d du dialogue',
				i
			))
		elseif not t.text then
			return makeWikitextError(string.format(
				'aucun texte indiqué pour la ligne %d du dialogue',
				i
			))
		end
	end
 
	-- récupération des textes du dialogue
	local dialogue = {}
	for i, t in ipairs(lines) do
		table.insert(dialogue, string.format(
			"<dt>'''%s''' : <q>%s</q></dt>", t.speaker, t.text
		))
	end
	dialogue = table.concat(dialogue, '\n')
 
	-- pied de la citation
	local footnote = {}
	table.insert(footnote, '<dd>&mdash; ')
 
        if not (options.attr or options.src) then
            return makeWikitextError("au moins un des deux paramètres <code>attr</code> et <code>src</code> doit être renseigné")
        end
 
	if options.attr then
		table.insert(footnote, options.attr)
	end
	if options.src then
 
          if options.attr then
            table.insert(footnote, ", ")
          end
 
          table.insert(footnote, string.format("''<cite>%s</cite>''", options.src))
 
	end
        table.insert(footnote, "</dd>")
	footnote = table.concat(footnote)
 
	-- retourne la chaîne finale
	return string.format(
		'<dl class="quote">\n%s\n%s</dl>',
		dialogue,
		footnote
	)
end
 
function p.main(frame)
	-- traite les arguments de l'objet frame
	local args = {}
	for k, v in pairs(frame:getParent().args) do
		v = v:match('^%s*(.-)%s*$') -- retire les espaces
		if v ~= '' then
			args[k] = v
		end
	end
 
	-- trie les arguments dans un format utilisable
	local lines, options = {}, {}
	local function addLineData(line, lineKey, value)
		lines[line] = lines[line] or {}
		lines[line][lineKey] = value
	end
	for k, v in pairs(args) do
		if type(k) == 'number' then
			local line = math.ceil(k / 2)
			local lineKey = k % 2 == 1 and 'speaker' or 'text' --si argument pair, interlocuteur (speaker), sinon citation (text)
			addLineData(line, lineKey, v)
		else
			-- on suppose que k est une chaîne
			local line = k:match('^line([1-9][0-9]*)$')
			if line then
				addLineData(tonumber(line), 'format', v)
			else
				options[k] = v
			end
		end
	end
 
	-- on retire les espaces des données lignes
	local function removeBlanks(t)
		local ret, nums = {}, {}
		for num in pairs(t) do
			nums[#nums + 1] = num
		end
		for i, num in ipairs(nums) do
			ret[i] = t[num]
		end
		return ret
	end
	lines = removeBlanks(lines)
 
	return p._main(lines, options)
end
 
return p
-- </nowiki>

Interférence d'un bloqueur de publicité détectée !


Wikia est un site gratuit qui compte sur les revenus de la publicité. L'expérience des lecteurs utilisant des bloqueurs de publicité est différente

Wikia n'est pas accessible si vous avez fait d'autres modifications. Supprimez les règles personnalisées de votre bloqueur de publicité, et la page se chargera comme prévu.

Sur le réseau FANDOM

Wiki au hasard