Documentation[voir] [modifier] [historique] [purger]
warning Attention:Ne pas modifier. Cette page est maintenue par un bot. Toutes les modifications doivent être effectuées sur mediawiki.org. (traduisez cet avertissement)

Utilisation modifier

Ce module fournit les fonction Navbar.navbar(frame) et Navbar._navbar(args) servant à la création, respectivement depuis un modèle et un module, de trois liens internes « voir », « discussion » et « éditer », pour permettre par exemple de mettre un lien direct dans un article vers la modification d'un modèle et ne pas avoir besoin de chercher le nom de ce modèle dans le wikicode.

Le module Navbar est initialement utilisé pour l'implémentation de en:Template:Navbar sur la Wikipédia en anglais. Le module ayant été copié tel quel, les boutons générés sont restés sous leurs noms anglais (« view », « talk », « edit », etc.) Sur Wikipédia en français, ce module n'est pas utilisé par Modèle:Tnavbar qui est codé entièrement en wikicode. La seule utilisation significative actuelle est dans Module:Medical cases chart, pour la génération de graphiques liés à la pandémie de Covid-19.

Pour son implémentation, ce modèle utilise la feuille de styles Module:Navbar/styles.css, ainsi que la sous-page contenant les paramètres : Module:Navbar/configuration.

Fonctions exportables modifier

  • navbar(frame) – Même fonction que _navbar(args) ci-dessous, mais pour une invocation directement depuis un modèle.
  • _navbar(args) – Prend en argument un tableau contenant les paramètres (tous facultatifs) :
    • style : paramètre libre de style css à appliquer à la navbar. Exemple : float:right; padding:5px; border:1px solid; ;
    • fontstyle : paramètre libre de style css à appliquer au texte. Exemple : color: green; font-style: italic; ;
    • fontcolor : valeur du style css à appliquer au texte pour color: uniquement. Incompatible avec le paramètre fontstyle. Exemple : green
    • collapsible : booléen[a] Lorsque true, le texte est placé sur la gauche de façon à être adapté pour une disposition sur une palette.
    • mini : booléen[a], forcé à 1 lorsque plain vaut false. Lorsque true, les noms sur les boutons sont remplacés par leurs initiales « v », « t », « e », etc.
    • plain : booléen[a] pour enlever le texte qui précède les boutons.
    • brackets : booléen[a] ajoutant des crochets [ ] autour des boutons lorsque true.
    • text : texte à afficher avant les liens. Par défaut : Cette boîte : . N'est pas pris en compte si plain vaut true.
    • template : nom du modèle sans l'espace de nom. Par défaut, le nom du modèle contenant l'appel de module.
    • talk / t / d, edit / e, hist / h, move / m, watch / w : arguments associés à des paramètres numériques quelconques (1, 2, 3, etc.) Lorsque présents, activent les boutons associés. (« view » est toujours activé, « talk » et « edit » sont activés par défaut sauf quand le paramètre template est défini.
    • noedit : booléen[a] servant à retirer le lien pour éditer le modèle.

Retourne le wikitexte pour une navbar.

  1. a b c d et e Lorsque ce module est appelé depuis un modèle, un booléen est défini comme valant true lorsqu'il est non vide, et false lorsqu'il est vide. Lorsqu'il est appelé depuis un autre module, il est préférable d'utiliser les vraies valeurs booléennes true et false pour une meilleure clarté du code.

Modules externes et autres éléments dont ce module a besoin pour fonctionner modifier

  • Module:Arguments – Module simplifiant l'utilisation des arguments de #invoke ;
  • Module:TableTools – Module fournissant diverses fonctions de manipulation des tables lua ;

Exemples modifier

Appel depuis un modèle modifier

Ce module peut être appelé depuis un modèle de la manière suivante :

{{#invoke:Navbar|navbar|params}}

Appel depuis un module modifier

local navbar = require('Module:Navbar')

local p={}

function p.main(param1, param2, args)
    local wikitexte = ''
    -- code pour la génération d'un modèle visuel en wikitexte
    return wikitexte .. navbar._navbar(args)
end

return p

Exemple concret modifier

{{#invoke:Navbar|navbar|template=Navbar|brackets=oui|fontstyle=color: green; font-style: italic;|m}}

ou le code équivalent en lua

local navbar = require('Module:Navbar')

navbar._navbar({template="Navbar", brackets=true, fontstyle="color: green; font-style: italic;", m})

donnent tous les deux :

Comme vous pouvez le constater, le module n'est pas entièrement fonctionnel en l'état car certaines classes css utilisées par la version anglaise ne sont pas présentes sur Wikipédia en français.

local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')

local function get_title_arg(is_collapsible, template)
	local title_arg = 1
	if is_collapsible then title_arg = 2 end
	if template then title_arg = 'template' end
	return title_arg
end

local function choose_links(template, args)
	-- The show table indicates the default displayed items.
	-- view, talk, edit, hist, move, watch
	-- TODO: Move to configuration.
	local show = {true, true, true, false, false, false}
	if template then
		show[2] = false
		show[3] = false
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
			talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
		-- TODO: Consider removing TableTools dependency.
		for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
			local num = index[v]
			if num then show[num] = true end
		end
	end

	local remove_edit_link = args.noedit
	if remove_edit_link then show[3] = false end
	
	return show
	
end

local function add_link(link_description, ul, is_mini, font_style)
	local l
	if link_description.url then
		l = {'[', '', ']'}
	else
		l = {'[[', '|', ']]'}
	end
	ul:tag('li')
		:addClass('nv-' .. link_description.full)
		:wikitext(l[1] .. link_description.link .. l[2])
		:tag(is_mini and 'abbr' or 'span')
			:attr('title', link_description.html_title)
			:cssText(font_style)
			:wikitext(is_mini and link_description.mini or link_description.full)
			:done()
		:wikitext(l[3])
		:done()
end

local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
	
	local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
	if not title then
		error(cfg.invalid_title .. title_text)
	end
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
	
	-- TODO: Get link_descriptions and show into the configuration module.
	-- link_descriptions should be easier...
	local link_descriptions = {
		{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
			['link'] = title.fullText, ['url'] = false },
		{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
			['link'] = talkpage, ['url'] = false },
		{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
			['link'] = title:fullUrl('action=edit'), ['url'] = true },
		{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
			['link'] = title:fullUrl('action=history'), ['url'] = true },
		{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
			['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
		{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template', 
			['link'] = title:fullUrl('action=watch'), ['url'] = true }
	}

	local ul = mw.html.create('ul')
	if has_brackets then
		ul:addClass(cfg.classes.brackets)
			:cssText(font_style)
	end
	
	for i, _ in ipairs(displayed_links) do
		if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
	end
	return ul:done()
	
end

function p._navbar(args)
	
	-- TODO: We probably don't need both fontstyle and fontcolor...
	local font_style = args.fontstyle
	local font_color = args.fontcolor
	local is_collapsible = args.collapsible
	local is_mini = args.mini
	local is_plain = args.plain
	
	local collapsible_class = nil
	if is_collapsible then
		collapsible_class = cfg.classes.collapsible
		if not is_plain then is_mini = 1 end
		if font_color then
			font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
		end
	end
	
	local navbar_style = args.style
	local div = mw.html.create():tag('div')
	div
		:addClass(cfg.classes.navbar)
		:addClass(cfg.classes.plainlinks)
		:addClass(cfg.classes.horizontal_list)
		:addClass(collapsible_class) -- we made the determination earlier
		:cssText(navbar_style)

	if is_mini then div:addClass(cfg.classes.mini) end

	local box_text = (args.text or cfg.box_text) .. ' '
	 -- the concatenated space guarantees the box text is separated
	if not (is_mini or is_plain) then
		div
			:tag('span')
				:addClass(cfg.classes.box_text)
				:cssText(font_style)
				:wikitext(box_text)
	end
	
	local template = args.template
	local displayed_links = choose_links(template, args)
	local has_brackets = args.brackets
	local title_arg = get_title_arg(is_collapsible, template)
	local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
	local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
	div:node(list)

	if is_collapsible then
		local title_text_class
		if is_mini then
			title_text_class = cfg.classes.collapsible_title_mini
		else
			title_text_class = cfg.classes.collapsible_title_full
		end
		div:done()
			:tag('div')
			:addClass(title_text_class)
			:cssText(font_style)
			:wikitext(args[1])
	end
	
	return mw.getCurrentFrame():extensionTag{
		name = 'templatestyles', args = { src = cfg.templatestyles }
	} .. tostring(div:done())
end

function p.navbar(frame)
	return p._navbar(require('Module:Arguments').getArgs(frame))
end

return p