Projet:Scribunto

Une page de Wikipédia, l'encyclopédie libre.

Projet Scribunto Lua-Logo.svg
Bienvenue sur le Projet Scribunto !

Présentation

Ce projet coordonne les efforts des développeurs Lua pour créer de nouveaux modèles utilisant l'extension Scribunto déployée le 18 février 2013 sur la version francophone de Wikipédia.

Cette page n'est pas encore complète (ni esthétique), n'hésitez pas à l'améliorer ! C'est simple et facile.

Introduction à Scribunto et Lua
Que fait cette extension ?

Scribunto permet de générer du contenu automatisé (wikicode), en langage de programmation Lua, en remplacement ou au sein des modèles de MediaWiki.

Pourquoi l'utiliser ?

Les modèles actuels utilisent les fonctions du parseur pour effectuer des traitements complexes (gestion de paramètres, conditions, etc.). Cependant ces derniers posent de nombreux problèmes d'efficacité et de lisibilité, rendant plus difficile l'édition et la création de modèles. De plus les modèles complexes incluent des modèles qui incluent des modèles qui… ce qui a un impact très fort sur les performances.

Lua permet de rendre ces traitements plus lisibles, plus compacts, plus légers (au niveau des serveurs) et plus puissants.

Qu'est-ce que cela change pour l'édition des articles ?

En pratique rien du tout ! Le consensus actuel est de ne pas appeler directement des modules depuis l'espace encyclopédique. Ainsi dans les articles il n'y a que des appels de modèles − comme avant Scribunto − et ce sont des modèles qui font appel aux modules.

Certains modèles ont leur code modifié pour appeler des fonctions écrites en Lua, sans que leur syntaxe ne change. À plus long terme, la syntaxe des modèles pourra − éventuellement − évoluer pour profiter des nouvelles fonctionnalités d'autres modèles.

Attention ! Les documentations TemplateData devraient toujours être renseignées pour les modèles ayant des paramètres. Cela est encore plus vrai pour les modèles sollicitant des modules. En effet, contrairement à un modèle classique qui a des paramètres nommés ou numérotés (par exemple {{{1}}}) explicites, un modèle sollicitant un module peut lui passer des paramètres "implicites" n'apparaissant pas dans le wikicode du modèle. Renseigner le TemplateData du modèle est donc indispensable, tant pour indiquer au lecteur de la documentation les paramètres existants que pour permettre au formulaire d'insertion des modèles de l'Éditeur visuel de disposer de la liste exhaustive des paramètres valides.

Nouvelles

Note : un ✔️ indique que la fonctionnalité est présente sur fr:

  • ✔️ la méthode frame:argumentPairs() est maintenant obsolète. Les fonctions pairs() et ipairs() fonctionnent désormais sur les tables frame.args
  • ✔️ Ajout d'une méthode getContent() (dans mw.title) permettant d'obtenir une version non interprétée (raw) d'une page.
  • ✔️ Ajout d'une librairie mw.text. Voir cette modification. Non encore validé Validée mais non intégrée dans Mediawiki. Cette librairie semble avoir deux rôles : contenir des fonctions générales utiles (trim, *split, truncate…) et fournir un moyen de gérer les tags (nowiki, …). À suivre.
  • ✔️ Ajout de la possibilité d'avoir une sous-page de documentation pour les modules. Voir cette modification. Le nom de la sous-page de documentation est liée au message système scribunto-doc-subpage-name. Ceci est dans le git « master », ça sera sans doute disponible lors de la prochaine release.
    • addendum : il semble que suite à la demande de certains wikis qui n'utilisent pas de sous-page pour leurs documentations il soit prévu une transformation du système de docs. Ce ne serait plus une sous-page dont le nom est indiqué par scribunto-doc-subpage-name mais une page indiquée par scribunto-doc-page-name, cette dernière pouvant contenir éventuellement un "$1" (ou un Scribunto, ce n'est pas clair) afin que ceux préférant des sous-pages puissent utiliser "$1/documentation" par exemple.
    • ceci risque peut-être de retarder la mise à jour car il est demandé à ce que ce changement soit appliqué à scribunto avant le déploiement général (aujourd'hui et le 18 mars 2013) afin d'éviter d'imposer des renommages et changements de fonctionnement à tous les autres wikis… À suivre.
  • ✔️ Un développeur a créé l'objet mw.title. Celui-ci permettra d'accéder en Lua au titre et à l'espace du nom de l'article, ainsi que d'avoir la fonctionnalité #ifexist:. Ceci est dans le git « master », ça sera sans doute disponible lors de la prochaine release.
  • ✔️ La librairie ustring permet la manipulation correcte des chaînes en UTF-8. Elle est présente sur fr:, mais attention : contrairement à string qui s'utilise directement, ustring se trouve actuellement dans l'objet mw (il faut donc appeler mw.ustring pour y accéder).
Projets en cours
  • Création de nouvelles fonctions Lua. Si vous voulez voir un modèle réécrit avec Lua, laissez un message en page de discussion ;
  • Amélioration du guide de programmation Lua et de la page aide:Module ;
  • Tests de l'extension Scribunto et suggestion de nouvelles fonctionnalités.
Ce qui manque
  • les différentes variantes pour obtenir la date et l'heure sous diverses formes. Note : os.date("*t") retourne une table contenant la date. Il s'agit toutefois de la date et de l'heure du serveur et non la date et l'heure locale.
Modules existants

Les fonctions Lua sont regroupées par modules, de préférence thématiques.

  • Format, dédié à la mise en forme de textes
  • Date, dédié au calendrier républicain et au modèle {{Date}}
  • MagicDate, permet d'obtenir tous les retours de {{LOCALTIME}}, {{CURRENTYEAR}} et autres (sans utiliser preprocess), ainsi que quelques nouvelles valeurs.
  • Bandeau, dédié à la mise en forme de bandeaux
  • Test, dédié aux… tests
  • ControlArgs, pour lister des tables (mw, frame, args...), documenter les tests… La doc est incluse en entête du module (ou directement sur la page de doc associée : Module:ControlArgs/Documentation).
  • Documentation module module générant les entêtes de documentation pour les modules et leurs pages de documentation. Module appelé directement par mediawiki lors des affichages de page, donc à ne jamais inclure dans les pages de documentation.

Voir aussi la liste des pages de l'espace Module.

Ressources
Participants