Module : Asbox

Un article de Wikipédia, l'encyclopédie libre
Aller à la navigation Aller à la recherche
Documentation du module [ voir ] [ modifier ] [ historique ] [ purger ]

Usage

Ce module implémente le modèle {{ Asbox }}. Veuillez consulter la page du modèle pour les instructions d'utilisation.


Remerciements

En plus des contributeurs répertoriés dans les historiques de contribution de Template:Asbox et Module:Asbox , ce module implémente également des idées de la Template:Asbox/templatepage supprimée , dont l'auteur principal est User:MSGJ et inclut des contributions de code de User:WOSlinker , et Utilisateur : Od_Mishehu .

Catégorie de suivi

--[[
Ce module a été créé par User:CodeHydro (Alexander Zhikun He).
User:Jackmcbarn et User:Mr._Stradivarius m'ont beaucoup aidé à écrire p.main()

p.main() s'inspire largement de la version suivante de Template:Asbox de Wikipedia anglais, rédigé principalement par User:Rich_Farmbrough
https://en.wikipedia.org/w/index.php?title=Template:Asbox&oldid=619510287

p.templatepage() est dérivé de la révision suivante de Template:Asbox/templatepage, rédigé principalement par User:MSGJ
https://en.wikipedia.org/w/index.php?title=Template:Asbox/templatepage&oldid=632914791

Les deux modèles ont reçu des contributions importantes de nombreux autres modèles répertoriés dans l'onglet Historique des révisions de leurs pages respectives.
--]]
local  WRAPPER_TEMPLATE ,  args  =  'Template:Asbox'
 templatestyles  local =  'Asbox/styles.css'
local  p ,  Buffer ,  stubCats  =  {
	--Empêche les duplicats... compris ? Peut être pas?
	chats  =  setmetatable ({},  { __newindex  =  function ( t ,  i ,  v )
		si  pas  rawget ( t ,  i )  alors
			ensemble brut ( t ,  i ,  v )
			table.insert ( t ,  i )
		finir
	fin }),
	--initialise les variables requises par p.main et p.templatepage
	init  =  fonction ( self ,  frame ,  page )
		args ,  page  =  args  ou  require ( 'Module:Arguments' ). getArgs ( cadre ,  {
			wrappers  =  WRAPPER_TEMPLATE
		}),  page  ou  mw . titre . obtenirTitreActuel ()
		--Assure que le paramètre de démonstration n'affectera jamais la sortie de category() pour les articles
		soi . démo  =  soi . démo  ou  page . espace de noms  ~=  0  et  args . démo
		 arguments de retour ,  page
	finir
},  require ( 'Module:Buffer' )

--[[
Formate les liens de catégorie. Les stocke jusqu'à ce qu'ils soient appelés avec cat.done=true
Prend plusieurs ou une seule catégorie sous la forme de « chat »
ou une table de chaînes et/ou de tables contenant des parties. (Voir ci-dessous)
]]
 attention locale ,  catTag ,  catKey  =  Buffer 'Modèles de messages de stub nécessitant une attention' ,  '[[Category:%s]]' ,  '%s|%s%s'
 catégorie de fonction  locale ( cat )
	pour  _ ,  v  en  ipairs (( tostring ( cat )  ==  cat  ou  cat . t )  et  { cat }  ou  cat )  do
		--[[
		Si v est une table :
			[1] = nom complet de la catégorie ; par défaut à l'attention locale si vide
			k = clé de tri par catégorie. Préfixe avant vt
			t = page.text ou args.tempsort#; ajouté après k (ou à sa place si omis). Obligatoire si v n'est pas une chaîne
		Fondamentalement identique à v = (v[1] ou attention) .. ' | ' .. (vk ou '') .. vt
		]]
		si  v  et  v  ~=  vrai  alors --reject v = nil, faux ou vrai
			p . cats [ catTag : format ( tostring ( v )  ==  v  et
				v
				ou  ( v [ 1 ]  et  Buffer ( v [ 1 ])  ou  attention ): _in ( v . k ): _ ( v . t ): _str ( 2 ,  nil ,  nil ,  '|' )
			)]  =  vrai
		finir
	finir
	 chat de retour . done  et  table.concat ( p . cats ,  p . demo  et  ' | '  ou  nil )  ou  ''
finir

--[[
Fait un avertissement d'ombox ;
Prend la table {ifNot = Boolean, text, {cat. clé de tri, chat. nom de tri}}
Renvoie une chaîne vide à la place lorsque ifNot est évalué à true 
]]
locale  fonction  ombox ( v )
	si  v . ifNot  alors  retour  fin
	p . ombbox  =  p . mbox  ou  require ( 'Module:Message box' ). ombbox
	catégorie { v [ 2 ]}
	retour  p . ombbox {
		type  =  'contenu' ,
		texte  =  v [ 1 ]
	}
finir

--[[
Contrairement au modèle d'origine, le module prend désormais un nombre illimité de chats ! Cette fonction remplit également
la plupart des vérifications d'erreur de catégorie de stub, à l'exception de l'ombox lorsque le |category= principal est omis (voir p.template())
]]
 fonction  locale catStub ( page ,  pageDoc )
	stubCats  =  { manquant  =  {},  v  =  {}}
	-- zwj et zwnj ont une utilisation sémantique dans d'autres wikis, ne les supprimez pas
	local  zwj  =  ' \226\128\141 '   -- U+200D, E2 80 8D
	local  zwnj  =  ' \226\128\140 '  -- U+200C, E2 80 8C
	local  disallowedUnicodeChars  =  '[^%w%p%s'  ..  zwj  ..  zwnj  ..  ']'  -- pour i18n, nous en faisons une chaîne séparée
	 code local
	pour  k ,  _  par  paires ( args )  faire
		--Rechercher les paramètres de catégorie et stocker le numéro (cat principal = '')
		table.insert ( stubCats ,  string.match ( k ,  '^category(%d*)$' ))
	finir
	table.sort ( stubCats )
	pour  k ,  v  en  paires ( stubCats )  faire
		--Obtenir les noms de catégorie et, si appelé par p.templatepage, la clé de tri facultative
		local  tsort ,  cat  =  args [ 'tempsort'  ..  v ],  mw . ustring . gsub ( args [ 'category'  ..  v ],  disallowedUnicodeChars ,  '' ) --remove tous les caractères unicode cachés
		--Ne placez pas le modèle dans la catégorie principale si |tempsort = 'no'. Cependant, placez les articles de ce modèle dans la catégorie principale.
		table.insert ( stubCats . v ,
			 page  et  ( --p.templatepage transmet la page ; p.main ne le fait pas, c'est-à-dire que les articles sont classés sans clé de tri.
				v == ''  et  tsort  ==  'no' --si vrai, insère 'true' dans le tableau, quelle catégorie () rejettera
				ou  tsort  et  { chat ,  k  =  ' ' ,  t  =  tsort }
				ou  { chat ,  k  =  ' *' ,  t  =  page . text } --note espace devant la clé de tri
			)
			ou  chat
		)
		--Vérifier l'existence de la catégorie uniquement si sur la page du modèle (c'est-à-dire la documentation du talon)
		si  page  alors
			si  pas  mw . titre . nouveau ( 'Catégorie :'  ..  cat ). existe  alors
				code  =  code  ou  mw . html . créer 'code' : wikitext '|catégorie'
				table.insert ( stubCats . missing ,  tostring ( mw . clone ( code ): wikitext ( v )))
			finir
			--[[
			Vérifie le modèle de talon non-démo pour la documentation et les drapeaux si doc est présent.
			Tous les noms de chats stub sont vérifiés et signalés s'ils ne correspondent pas à la « Catégorie : [] stub ».
			Le chat de stub principal est exempté de la vérification du nom si le modèle de stub a son propre doc
			(vraisemblablement, ce document aurait une explication sur la raison pour laquelle le chat principal n'est pas conforme).
			]]
			table.insert ( stubCats . v ,  v  ==  ''  et  non  p . demo  et  pageDoc . existe  et
				'Modèles de message de talon avec sous-pages de documentation'
				ou  non  cat : match ' stubs$'  et  { k  =  'S' ,  t  =  page . texte }
			)
		finir
	finir
	--Ajouter des noms de catégorie une fois la boucle terminée
	catégorie ( stubCats . v )
	return  # stubCats . manquant  >  0  et  ombox {
		--Modifié, message d'origine :
		--Une ou plusieurs des catégories de stub définies dans ce modèle ne semblent pas exister !
		--Veuillez vérifier les paramètres {{para|category}}, {{para|category1}} et {{para|category2}}.
		'Le paramètre suivant'
			..  ( # stubCats . missing  ==  1  et  'définit une catégorie de stub qui fait'  ou  'définit des catégories de stub qui font' )
			..  ' n'existe pas : '  ..  mw . texte . listToText ( stubCats . missing ),
		{ k  =  'N' ,  t  =  page . texte }
	}
finir

--Affiche la population des catégories trouvées par catStub(). Affiche des valeurs de démonstration si aucune
 fonction  locale population ()
	 wikitexte local ,  base  =  {},  '* [[:Category:%s]] (population : %s) \n '
	si  pas  args . catégorie  et  stubCats [ 1 ]  ~=  false  then
		table.insert ( stubCats ,  1 ,  false )
	finir
	pour  _ ,  v  en  ipairs ( stubCats )  faire
		table.insert ( wikitexte ,  base : format (
			v  et  args [ 'catégorie'  ..  v ]  ou  '{{{catégorie}}}' ,
			v  et  mw . site . statistiques . pagesDansCatégorie ( args [ 'catégorie'  ..  v ],  'all' )  ou  0
		))
	finir
	return  table.concat ( wikitexte )
finir

--Inclut la documentation de stub standard et signale les modèles de stub avec de mauvaises valeurs de paramètre.
fonction  p . templatepage ( cadre ,  page )
	args ,  page  =  p : init ( cadre ,  page )
	 tStubDoc  local =  mw . titre . nouveau « Modèle : documentation du talon »
	local  pageDoc  =  page : subPageTitle ( 'doc' )
	--Note de réorganisation : l'Asbox d'origine alterne entre la sortie des catégories et la vérification des paramètres |category#=.
	--Plutôt que de vérifier plusieurs fois et de changer de tâche, toutes les opérations de paramètre de catégorie de stub ont été intégrées dans catStub()
	 tampon de retour (
		ombox { --Afficher les avertissements d'ombox pour les arguments manquants.
			ifNot  =  args . catégorie ,
			'Le paramètre <code>|category</code> n'est pas défini. Veuillez ajouter une catégorie de talon appropriée.' ,
			{ k  =  'C' ,  t  =  page . texte }
		})
		: _ ( ombox {
			ifNot  =  args . sujet  ou  arguments . article  ou  arguments . qualificatif ,
			« Ce modèle de talon ne contient aucune description ! Au moins un des paramètres <code>|subject</code>, <code>|article</code> ou <code>|qualifier</code> doit être défini.' ,
			{ k  =  'D' ,  t  =  page . texte }
		})
		: _ ( catStub ( page ,  pageDoc )) --catStub() peut également renvoyer un ombbox s'il n'y a pas de catégories existantes
		: _ ( catégorie {
			fait  =  p . demo  ~=  'doc' , --Catégories de sortie sinon démo doc
			'Modèles de message de talon' ,
			args . icône  et
				'Modèles de message de stub utilisant le paramètre d'icône'
				ou  arg . image  et  (
					mw . titre . new ( 'Media:'  ..  mw . text . split ( args . image ,  '|' )[ 1 ]). existe --ne rien faire s'il existe. category() rejettera true
					ou  { k  =  'B' ,  t  =  page . texte }
				)
				ou  'Modèles de message de talon sans images' ,
			args . imagealt  et  { k  =  'I' ,  t  =  page . texte },
		})
		: _ (( pas  p . demo  ou  p . demo  ==  'doc' )  et --Ajouter la documentation du modèle de stub standard
			exiger ( 'Module:Documentation' ). principal {
				content  =  Buffer ( page . text  ~=  'Stub'  et --Cette comparaison effectuée dans {{Asbox/stubtree}} avant d'appeler Module:Asbox stubtree
						require ( 'Module:Asbox stubtree' ). subtree { args  =  { pagename  =  page . texte }}
					)
					: _in ' \n == À propos de ce modèle == \n Ce modèle est utilisé pour identifier un' : _ ( args . subject ): _ 'stub' : _ ( args . qualificateur ): _out ' ' --space
					: _ '. Il utilise {{[[Template:Asbox|asbox]]}}, qui est un méta-modèle conçu pour faciliter le processus de création et de maintenance des modèles de stub. \n === Utilisation === \n Saisie '
					: _ ( mw . html . créer 'code'
						: wikitext ( '{{' ,  page . text  ==  'Stub'  et  'stub'  ou  page . text ,  '}}' )
					)
					: _ ' produit le message affiché au début, et ajoute l'article à la catégorie suivante'
					: _ ( # stubCats  >  1  et  'ies'  ou  'y' )
					: _ ': \n '
					: _ ( population ())
					: _ ( pageDoc . existe  et --transclusion de /doc s'il existe
						frame : expandTemplate { title  =  pageDoc . texte }
					)
					: _ ' \n == Informations générales == \n '
					: _ ( frame : expandTemplate { title  =  tStubDoc . text })
					: _ ' \n\n ' (),
				[ 'link box' ]  =  Buffer 'Cette documentation est générée automatiquement par [[Module:Asbox]].'
					: _in 'Les informations générales sont transcluses de [[Template:Stub documentation]]. '
						: _ ( mw . html . create 'span'
							: cssText 'font-size:smaller;font-style:normal;line-height:130%'
							: nœud (( '([%s edit] | [%s history])' ): format (
								tStubDoc : fullUrl ( 'action=edit' ,  'relative' ),
								tStubDoc : fullUrl ( 'action=history' ,  'relative' )
							))
						)
						: _out ()
					: _ ( page . protectionLevels . edit  et  page . protectionLevels . edit [ 1 ]  ==  'sysop'  et
						"Ce modèle est [[WP:PROTECT|entièrement protégé]] et toutes les [[WP:CAT|catégories]] doivent être ajoutées au [" du modèle
						..  pageDoc : fullUrl ( 'action=edit&preload=Template:Category_interwiki/preload' ,  'relative' )
						..  '| /doc] sous-page, qui n'est pas protégée.'
					) '<br/>'
			}
		)()
finir

fonction  p . principal ( cadre ,  page )
	args ,  page  =  p : init ( cadre ,  page )
	 sortie  locale =  mw . html . créer 'div'
		: attr { rôle  =  'note' }
		: addClass 'metadata plainlinks asbox stub'
		: balise 'table'
			: attr { rôle  =  'présentation' }
			: balise 'tr'
				: addClass 'noresize'
				: nœud (( args . icon  ou  args . image )  et
					mw . html . créer 'td'
						: wikitext ( args . icon  ou  ( '[[File:%s|%spx|alt=%s]]' ): format (
							args . image  ou  '' ,
							args . pix  ou  '40x30' ,
							args . imagealt  ou  'icône de stub'
						))
				)
				: balise 'td'
					: balise 'p'
						: addClass 'asbox-body'
						: wikitexte (
							Buffer 'This' : _ ( args . subject ): _ ( args . article  ou  'article' ): _ ( args . qualificateur ) ' ' , --space
							' est un [[Wikipedia:stub|stub]]. Vous pouvez aider Wikipedia en [' ,
							page : fullUrl ( 'action=edit' ,  'relative' ),
							' l'étendre].'
						)
					: fait ()
					: node ( args . note  et
						mw . html . créer ()
							: balise 'p'
								: addClass 'asbox-note'
								: wikitext ( args . note )
							: fait ()
					)
		: toutTerminé ()
		: node ( args . nom  et
			nécessite 'Module:Navbar' . _barre de navigation {
				args . nom ,
				mini  =  'oui' ,
			}
			)
	--[[
	Les catégories de stub pour les modèles incluent une clé de tri ; cela garantit que toutes les balises stub apparaissent au début de leurs catégories respectives.
	Les articles utilisant le modèle n'ont pas besoin de clé de tri car ils ont des noms uniques.
	Lorsque p.demo est égal à 'doc', les catégories de stub de démonstration apparaîtront comme celles d'un modèle de stub.
	Sinon, toute p.demo non nulle émulera les catégories d'espace d'article (plus tout chat d'erreur à moins qu'il ne soit défini sur 'art')
	]]
	si  page . namespace  ==  0  then  -- Main namespace
		catégorie 'Tous les articles de bout'
		chatStub ()
	sinon  p . démo  alors
		si  p . démo  ~=  'doc'  puis  catStub ()  fin
		--À moins que p.demo ne soit défini sur 'art', il inclura également les catégories d'erreur normalement affichées uniquement sur
		--le modèle mais pas dans l'article. Le elseif après l'espace de nom == 0 signifie que les chats de démonstration ne s'afficheront jamais dans l'espace d'article.
		p . démodoc  =  p . démo  ~=  'art'  et  p . templatepage ( cadre ,  page )
		sortie  =  mw . html . créer ()
			: nœud ( sortie )
			: tag 'petit' : wikitext (
				« Catégories de démonstration : » ,
				( catégorie { fait  =  vrai } : gsub ( '(%[%[)(Catégorie :)([^|%]]-)(%|)' ,  '%1%2%3|%2%3%4 ' ): gsub ( '(%[%[)(Catégorie :)' ,  '%1:%2' ))
			): terminé ()
			: wikitext ( p . demo  ==  'doc'  et  p . demodoc  ou  nil )
	autre
		--Vérifie le nom valide ; émule la vérification du modèle d'origine en utilisant {{FULLPAGENAME:{{{name|}}}}}
		nom  normalisé  local =  mw . titre . nouveau ( args . nom  ou  '' )
		if  normalizedName  et  normalizedName . texte intégral  ==  page . fulltext  puis
			sortie  =  mw . html . create (): node ( output ): wikitext ( p . templatepage ( frame ,  page ))
		elseif  pas la  page . isSubpage  et  page . namespace  ==  10  then -- Template namespace et non une sous-page
			catégorie {{ k  =  args . nom  et  'E'  ou  'W' ,  t  =  page . texte }}
		finir
	finir
	return  frame : extensionTag {  name  =  'templatestyles' ,  args  =  {  src  =  templatestyles }  }  ..  tostring ( sortie : wikitext ( pas  p . demo  and  category { done  =  true }  ou  nil ))
finir

retour  p