Module:Infobox/Fonctions/Logiciel
Cette page réunit des fonctions qui peuvent être réutilisées pour construire des modules d'infobox visant à décrire un logiciel. Sauf mention contraire, les fonctions utilisent des données fournies en paramètre dans l'article, ou alors, lorsque celles-ci sont absentes, des données issues de Wikidata.
Qualificatifs temporels
Certaines valeurs ne sont valables qu'à une certaine date ou pour une période donnée. Ces informations sont ajoutées aux propriétés de l'élément en tant que qualificateurs. Ces informations :
- apparaîtrons, éventuellement, entre parenthèse après la valeur de la propriété,
- permettront de trier chronologiquement les valeurs affichées,
- de n'afficher que la valeur actuelle d'une propriété.
Les qualificatifs temporels sont : P585 (« date »), P580 (« date de début ») et P582 (« date de fin »).
Fonctions exportables
p.programmingLanguage(disableCat)
p.programmingLanguagesSupported()
p.internationalisation(nbmax)
p.developmentStart()
p.versionsNavigator()
p.firstVersion()
p.lastStableVersion()
p.advancedVersion()
p.softwareType()
p.creator()
p.developer()
p.license()
Affiche la ou les licences du logiciel. Si la licence dispose d’un identifiant SPDX, c’est celui-ci qui est affiché plutôt que le libellé de l’élément Wikidata de la licence.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Licence Licences
|
licence licences
|
P275 (« licence »)P582 (« date de fin ») |
Licences du logiciel. Une erreur fréquente est d’utiliser un nom générique de licence plutôt que de préciser sa version précise (par exemple « GPL » au lieu de « GPL-2.0 ») : il faut bien préciser la version de la licence utilisée. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Lorsque la licence utilisée dispose d’un identifiant SPDX, c’est ce dernier qui est affiché plutôt que le libellé de la licence. |
p.repository()
Affiche le lien vers le dépôt de code source de ce logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Dépôt Dépôts
|
dépôt
|
P1324 (« dépôt du code source »)P582 (« date de fin ») |
Lien vers le dépôt de code source de ce logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.qualityAssurance()
Affiche l’assurance qualité de ce logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Assurance qualité
|
assurance qualité
|
P2992 (« assurance qualité logicielle »)P582 (« date de fin ») |
Assurance qualité pour ce logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.graphicalInterface()
Affiche l’interface graphique utilisée par le logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Interface Interfaces
|
interface interfaces
|
P1414 (« bibliothèque d'interface utilisateur »)P582 (« date de fin ») |
Interface graphique utilisée par le logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.operatingSystem()
Affiche le ou les systèmes d’exploitation sur lesquels peut fonctionner le logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Système d’exploitation Systèmes d’exploitation
|
système d'exploitation systèmes d'exploitation environnement environnements
|
P306 (« système d'exploitation »)P582 (« date de fin ») |
Systèmes d’exploitation sur lesquels peut fonctionner le logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.platform()
Affiche la ou les plateformes sur lesquelles peut fonctionner le logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Plate-forme Plate-formes
|
plateforme plateformes plate-forme plate-formes
|
P400 (« plateforme »)P582 (« date de fin ») |
Plateformes sur lesquelles peut fonctionner le logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.dataSize()
Affiche la taille d’un logiciel, d’un jeu de données, d’un réseau de neurones, ou d’un fichier individuel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Taille des données
|
taille des données
|
P3575 (« taille des données »)P582 (« date de fin ») |
Taille d’un logiciel, d’un jeu de données, d’un réseau de neurones, ou d’un fichier individuel. Lorsque des propriétés de Wikidata sont utilisées la taille s'affiche en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.readFormats()
Affiche les formats de fichiers ou de flux de données lus ou importés par le logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Formats lus
|
importe
|
P1072 (« format de fichier pouvant être lu »)P582 (« date de fin ») |
Formats de fichiers ou de flux de données lus ou importés par le logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.writtenFormats()
Affiche les formats de fichiers ou de flux de données écrits ou exportés par le logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Formats écrits
|
exporte
|
P1073 (« format de fichier pouvant être écrit »)P582 (« date de fin ») |
Formats de fichiers ou de flux de données écrits ou exportés par le logiciel. Lorsque des propriétés de Wikidata sont utilisées le ou les formats s'affichent en respectant les règles suivantes, dans l'ordre, jusqu'à ce qu'il soit possible de renvoyer quelque chose à afficher :
Exemples : |
p.documentation()
Affiche le lien vers la documentation du logiciel.
Libellé | Paramètres | Wikidata | Description |
---|---|---|---|
Documentation
|
documentation
|
P2078 (« lien vers le mode d'emploi »)P582 (« date de fin ») |
URL de la documentation du logiciel. L'adresse doit être complète en commençant par http:// ou https://.
Exemples : |
p.mainimage(cat, defaultimage)
Affiche une illustration du logiciel. Généralement, il s’agit d’une capture d’écran.
Libellé | Paramètre | Wikidata | Description |
---|---|---|---|
|
Fichier de l'image ou de la photographie à afficher dans l'infobox. Exemples : | ||
|
Qualificatif de l'image affichée : |
Légende de l'image. Exemples : | |
|
Facteur de redimensionnement de l'image. Utile en particulier lorsque l'image est en mode portrait[2]. Exemples : | ||
|
Largeur de l'image, en pixels. Exemples : | ||
|
Voir la proposition de propriété alt text |
Texte à afficher quand l'image ne peut l'être. Exemples : |
- Légende en français de l'image si elle existe.
- Image dont la hauteur est supérieur à la largeur.
p.logo(upright)
Affiche le logo du logiciel.
Argument | Type | Description |
---|---|---|
upright |
nombre | Valeur par défaut du facteur de redimensionnement du logo. |
Libellé | Paramètre | Wikidata | Description |
---|---|---|---|
|
Fichier du logo à afficher dans l'infobox. Exemples : | ||
|
Légende du logo. Exemples : | ||
|
Facteur de redimensionnement du logo. Utile en particulier lorsque le logo est en mode portrait[2]. Exemples : | ||
|
Largeur du logo, en pixels. Exemples : | ||
|
Voir la proposition de propriété alt text |
Texte à afficher quand l'image ne peut l'être. Exemples : Alternative textuelle à un logo |
- Légende en français de l'image si elle existe.
- Image dont la hauteur est supérieur à la largeur.
p.title()
Retourne le titre de l’infobox.
Libellé | Paramètre | Wikidata | Description |
---|---|---|---|
|
Texte à afficher dans la barre de titre de l'infobox.
Par défaut c'est le libellé en français de l'élément wikidata lié à la page. En son absence, c'est le nom de la page Wikipédia. Exemples : |
p.website(localparam)
Retourne le site web du logiciel.
Argument | Type | Description |
---|---|---|
localparam |
chaîne | Nom du paramètre à ajouter aux paramètres de l'infobox existants (site web , site_web , site officiel , site internet , web ).
|
Libellé | Paramètre | Wikidata | Description |
---|---|---|---|
|
|
P856 (« site officiel ») |
URL du site internet.
Remarques :
Exemples : |
|
Texte affiché pour le lien du site. Ce paramètre ne fonctionne que lorsque l'adresse est spécifiée par un paramètre. Exemples : |
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
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.
--[[
Avant de mettre en production une nouvelle version avez-vous :
- mis en place des tests dans au moins une des pages de test d'un des modèles utilisant la fonction ?
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
-- Fonctions utilisées par les infobox de logiciel
local p = {}
local localdata = require 'Module:Infobox/Localdata'
local general = require 'Module:Infobox/Fonctions'
local item = localdata.item
local wikidata = require 'Module:Wikidata'
local date = require "Module:Date"
local page = mw.title.getCurrentTitle()
-- Liste locale de la fin des noms de catégories par langage de programmation
local programmingLanguageCat = {
Q234657 = 'ActionScript',
Q154755 = 'Ada',
Q165436 = 'Assembleur',
Q297868 = 'Assembleur', -- Assembleur x86
Q15777 = 'C',
Q2407 = 'C++',
Q2370 = 'C sharp',
Q4037189 = 'Delphi',
Q5362035 = 'Elixir',
Q334879 = 'Erlang',
Q83303 = 'Fortran',
Q189248 = 'GNU Bash',
Q37227 = 'Go',
Q34010 = 'Haskell',
Q776372 = 'Information Processing Language',
Q251 = 'Java',
Q2005 = 'JavaScript',
Q3816639 = 'Kotlin',
Q132874 = 'Lisp',
Q849146 = 'Common Lisp',
Q1334586 = 'Emacs Lisp',
Q207316 = 'Lua',
Q633894 = 'Object Pascal',
Q188531 = 'Objective-C',
Q212587 = 'OCaml',
Q81571 = 'Pascal',
Q42478 = 'Perl',
Q59 = 'PHP',
Q28865 = 'Python',
Q99513286 = 'Python', -- python 2
Q31205855 = 'Python', -- python 3
Q161053 = 'Ruby',
Q575650 = 'Rust',
Q460584 = 'Scala',
Q959549 = 'Script shell',
Q235086 = 'Smalltalk',
Q17118377 = 'Swift',
Q5288 = 'Tcl',
Q978185 = 'TypeScript',
Q1138939 = 'Vala',
Q2378 = 'Visual Basic',
-- catégorisation désactivée pour les langages qui suivent:
Q726218 = '-', -- XML-based User interface Language (pas un langage de programmation)
Q187432 = '-', -- langage de script (trop générique)
Q840410 = '-', -- PowerShell (pas assez d’articles pour une catégorie en avril 2023)
Q2053 = '-', -- HTML5 (pas pertinent)
Q8811 = '-', -- HTML(pas pertinent)
Q11707176 = '-', -- CSS3 (pas pertinent)
Q46441 = '-', -- CSS (pas pertinent)
Q47607 = '-', -- SQL (généralement pas pertinent)
}
-- Types de versions qui sont considérés comme « version avancée » (ou non-stable)
local nonStableVersionTypes = {
'Q3295609', -- version beta
'Q2122918', -- version alpha
'Q1072356', -- version RC
'Q23356219', -- version pre-alpha
'Q51930650', -- version pré-release
'Q21727724', -- version non-stable
'Q5209391', -- daily build
}
-- Valeur de P31 qui ne doivent pas être affichées dans le champ 'Type'
-- Il vaut mieux utiliser une propriété dédiée (P366) et de faire en sorte que l’unique valeur P31 pour les logiciels soit Q7397.
-- Idem pour 'Politique de prix' (freeware, donationware, logiciel commercial, etc.), qui reste à remplir manuellement,
-- mais qu’il vaudrait mieux remplir par une propriété dédiée (à créer) que par P31.
-- Les valeurs relatives à la propriété intellectuelle du logiciel et la licence ne devraient pas être ajoutées dans P31 idéalement,
-- puisqu’il existe des propriétés qui permettent de préciser la licence exacte et donc de déduire ces informations.
local softwareTypesExcluded = {
'Q166142', -- application
'Q341', -- logiciel libre
'Q7397', -- logiciel
'Q218616', -- logiciel propriétaire
'Q506883', -- logiciel libre et open-source
'Q1130645', -- logiciel open-source
'Q178285', -- freeware
'Q10267', -- donationware
'Q1340793', -- logiciel commercial
}
--[[
-- Catégorise le logiciel en fonction du langage de programmation dans lequel il est écrit
-- (cette fonction était initialement implémentée dans Modèle:Infobox Logiciel en wikicode).
-- Lorsque la fonction parvient à catégoriser le logiciel, la catégorie
-- « Logiciel catégorisé automatiquement par langage d'écriture » est également ajoutée.
-- Lorsque la fonction ne parvient pas à catégoriser le logiciel car aucune catégorie n’est définie
-- pour ce langage, la catégorie « Logiciel écrit en un langage sans catégorie associée »
-- est ajoutée. On peut désactiver la catégorisation pour un langage en utilisant '-' dans
-- la liste des noms de langages (programmingLanguageCat).
--]]
function p.catByProgrammingLanguage()
-- On vérifie qu’on est dans l’espace principal et que l’on a pas le paramètre nocat
if page.namespace ~= 0 or localdata['nocat'] then
return ''
end
-- S’il y a des données locales, on abandonne pour éviter toute confusion,
-- vu qu’on ne va pas utiliser les données locales (pas structurées, et avec des wikiliens)
-- et qu’on ne veut pas que la catégorisation diverge de l’affichage dans l’infobox
if localdata['langage de programmation'] then
return ''
end
local plang = wikidata.getIds(localdata.item, {
property = 'P277',
atdate = "today",
})
if #plang == 0 then
return ''
end
local ret = ''
local isCat = false
for i=1, #plang do
local cat = programmingLanguageCat[plang[i]]
if cat and cat ~= '-' then
-- on peut désactiver la tentative d’ajout dans une catégorie en renseignant '-'
-- à la place du nom d’un langage, afin d’éviter de remplir la catégorie
-- « Logiciel écrit dans un langage sans catégorie associée »
-- si on sait que la catégorie ne sera pas créée.
ret = ret .. '[['..'Category:Logiciel écrit en ' .. cat .. ']]'
isCat = true
elseif cat ~= '-' then
-- Catégorie de maintenance
ret = ret .. '[[' .. 'Category:Logiciel écrit en un langage sans catégorie associée' .. ']]'
end
end
if isCat then
-- Catégorie de maintenance
ret = ret .. '[[' .. "Category:Logiciel catégorisé automatiquement par langage d'écriture" .. ']]'
end
return ret
end
--[[
-- Retourne les langages de programmation dans lesquels est écrit le logiciel.
-- Par défaut, catégorise le logiciel par langages d’écriture (désactivable en mettant disableCat à true).
--]]
function p.programmingLanguage(disableCat)
local catEnabled = not disableCat -- par défaut on active la catégorisation
return {
type = 'row',
label = '[[Langage de programmation|Écrit en]]',
value = 'langage de programmation',
wikidata = function()
local value, num = wikidata.formatAndCat {
entity = localdata.item,
property = 'P277',
atdate= "today", -- le logiciel peut avoir été ré-écrit en un autre langage
returnnumberofvalues = true,
}
return value and (value .. (catEnabled and p.catByProgrammingLanguage())), num
end,
}
end
--[[
-- Retourne les langages de programmation supportés.
-- Attention: ne pas confondre avec le langage de programmation dans lequel le logiciel est écrit.
--]]
function p.programmingLanguagesSupported()
return {
type = 'row',
label = '[[Langage de programmation|Supporte le langage]]',
plurallabel = '[[Langage de programmation|Supporte les langages]]',
value = 'langages supportés',
wikidata = {
property = 'P3985',
atdate = "today",
},
}
end
--[[
-- Retourne les langues supportées par le logiciel.
-- Si il y en a au moins autant que "nbmax", affiche « Multilingue ».
-- Dans ce cas, si le français fait parti de ces langues, il est précisé « dont français ».
--]]
function p.internationalisation(nbmax)
return {
type = 'row',
label = '[[Internationalisation (informatique)|Langue]]',
plurallabel = '[[Internationalisation (informatique)|Langues]]',
value = 'langues',
wikidata = function()
local values, num = wikidata.formatAndCat {
entity = localdata.item,
conjtype = 'new line',
property = 'P407',
atdate = 'today',
returnnumberofvalues = true,
}
if num and (num >= nbmax) then
local fr = wikidata.getIds(localdata.item, {
property = 'P407',
targetvalue = 'Q150', -- français
atdate = 'today',
numval = 1,
})
values, num = wikidata.addLinkBack('[[Multilinguisme|Multilingue]]' .. (#fr ~= 0 and ' dont [[français]]' or ''), localdata.item, 'P407').. wikidata.addTrackingCat('P407'), 1
elseif num == 1 then
local multilingue = wikidata.getIds(localdata.item, {
property = 'P407',
targetvalue = 'Q20923490', -- multilingue
atdate = 'today',
numval = 1,
})
if #multilingue ~= 0 then
-- on regarde si le français fait parti des langues qui ne sont pas en rang préféré
local fr = wikidata.getIds(localdata.item, {
property = 'P407',
targetvalue = 'Q150', -- français
atdate = 'today',
numval = 1,
rank = 'valid',
})
if #fr ~= 0 then
values, num = wikidata.addLinkBack('[[Multilinguisme|Multilingue]]' .. (#fr ~= 0 and ' dont [[français]]' or ''), localdata.item, 'P407').. wikidata.addTrackingCat('P407'), 1
end
end
end
return values, num
end,
}
end
--[[
-- Retourne la date de début du développement
--]]
function p.developmentStart()
return {
type = 'row',
label = 'Début du [[Développement de logiciel|développement]]',
value = 'début du développement',
wikidata = {
property = 'P571',
linktopic = '-',
-- on peut séparer les dates de début du développement par OS/plateforme
showqualifiers = {'P400','P306'},
},
}
end
--[[
-- Retourne la boite de navigation vers les versions précédentes et suivantes, si elles font l’objet
-- d’un article séparé.
--]]
function p.versionsNavigator()
return {
type = 'table',
title = 'Chronologie des versions',
rows = {
{
type = 'navigator',
previousLabel = 'Version précédente',
previousval = 'version précédente',
previousproperty= 'P155',
nextLabel = 'Version suivante',
nextval = 'version suivante',
nextproperty = 'P156',
separated = true,
},
}
}
end
--[[
-- Retourne la ligne avec la première version connue du logiciel
--]]
function p.firstVersion()
return {
type = 'row',
label = 'Première version',
--[[
-- On cherche les identifiants de version (P348) avec un qualificatif type de version (P548) égal à
-- Q56514665 (première version).
-- On ajoute les qualificatifs:
-- * P1476 (titre),
-- * P400 (plateforme),
-- * P306 (système d’exploitation),
-- * P577 (date de publication)
-- Les paramètres locaux sont "date de première version" et "première version".
--]]
wikidata = {
conjtype = 'new line',
property = 'P348',
qualifier = 'P548',
qualifiervalue = 'Q56514665',
qualifconjtype = 'comma',
showqualifiers = {'P1476','P400','P306','P577'},
showsource = true,
qualiflinktopic = '-',
rank = 'valid', -- La première version est généralement en rang normal, mais peut également être en rang préféré
},
value = function()
--[[
-- Si les paramètres "date de première version" ou "première version" sont renseignés,
-- on ne cherche pas sur Wikidata
-- (les deux valeurs étant liées, par cohérence il faut qu’elles soient renseignées au même endroit)
--]]
-- Désactivation de l’affichage du paramètre en utilisant '-'
local versionNum = localdata['première version'] or ''
local versionDate = localdata['date de première version'] or ''
if (versionNum == '-') or (versionDate == '-') then
return '-'
end
local r = versionNum ..
((versionNum ~= '' and versionDate ~= '') and ' (' or '') ..
(date.dateInfobox{args={'date', versionDate, nolinks=true}} or '') ..
((versionNum ~= '' and versionDate ~= '') and ')' or '')
if r ~= '' then
return r
else
return nil
end
end,
}
end
--[[
-- Retourne la ligne de la dernière version stable
--]]
function p.lastStableVersion()
return {
type = 'row',
label = "[[Version d'un logiciel|Dernière version]]",
wikidata = function()
--[[
-- On cherche la valeur de P348 (identifiant de version) la plus récente,
-- dont la valeur de P548 (type de version) n’est pas une version avancée.
-- Idéalement, il faudrait juste regarder si c’est une version de type version stable (Q2804309)
-- ou une version avec support étendu (Q104243413) mais ce n’est souvent pas renseigné.
--
-- On ajoute les qualificatifs:
-- * P1476 (titre),
-- * P400 (plateforme),
-- * P306 (système d’exploitation),
-- * P577 (date de publication)
--
-- Les paramètres locaux sont "date de dernière version" et "dernière version".
--
-- Si les paramètres "date de dernière version","dernière version", "date de version avancée", ou
-- "version avancée" sont renseignés, on ne cherche pas sur Wikidata
-- (ces valeurs étant liées, par cohérence il faut qu’elles soient renseignées au même endroit)
--
-- Dans cette fonction on suppose que les toutes les versions stables
-- à ne pas afficher ne feront jamais parti du "best rank",
-- c’est-à-dire qu’on affiche l’intégralité du "best rank" (à l’exception des versions non-stables)
-- et on ne filtre pas par date : il peut y avoir différentes valeurs pertinentes pour la version stable (une par plateforme/os),
-- indépendamment de la date de publication.
--]]
if localdata['date de dernière version'] or localdata['dernière version'] then
-- valeur locale de la date de dernière version
return nil, 0
end
if (localdata['version avancée'] or localdata['date de version avancée']) and (localdata['version avancée'] ~= '-' and localdata['date de version avancée'] ~= '-') then
-- valeur locale de la date de version avancée
return nil, 0
end
return wikidata.formatAndCat {
entity = localdata.item,
conjtype = 'new line',
property = 'P348',
excludequalifier = 'P548',
qualifier = 'P577',
showqualifiers = {'P1476','P400','P306','P577'},
excludequalifiervalue = nonStableVersionTypes,
showsource = true,
qualiflinktopic = '-',
qualifconjtype = 'comma',
returnnumberofvalues = true,
rank = 'best',
}
end,
value = function()
-- Désactivation de l’affichage du paramètre en utilisant '-'
local versionNum = localdata['dernière version'] or ''
local versionDate = localdata['date de dernière version'] or ''
if (versionNum == '-') or (versionDate == '-') then
return '-'
end
local r = versionNum ..
((versionNum ~= '' and versionDate ~= '') and ' (' or '') ..
(date.dateInfobox{args={'date', versionDate, nolinks=true}} or '') ..
((versionNum ~= '' and versionDate ~= '') and ')' or '')
if r ~= '' then
return r
else
return nil
end
end,
}
end
--[[
-- Retourne la ligne de la version avancée.
--]]
function p.advancedVersion()
return {
type = 'row',
label = "[[Version d'un logiciel|Version avancée]]",
wikidata = function()
--[[
-- On cherche la valeur de P348 (identifiant de version) la plus récente,
-- dont la valeur de P548 (type de version) est une version avancée.
--
-- Si la version avancée est affichée, on affiche le qualificatif date de publication (P548).
--
-- On ajoute les qualificatifs:
-- * P1476 (titre),
-- * P400 (plateforme),
-- * P306 (système d’exploitation),
-- * P577 (date de publication)
--
-- Les paramètres locaux sont "date de version avancée" et "version avancée".
--
-- Si les paramètres "date de dernière version", "dernière version", "date de version avancée", ou
-- "version avancée" sont renseignés, on ne cherche pas sur Wikidata
-- (ces valeurs étant liées, par cohérence il faut qu’elles soient renseignées au même endroit)
--
-- Dans cette fonction on suppose que les toutesles versions avancées
-- à afficher feront toujours parti du "preferred rank",
-- c’est-à-dire qu’on affiche l’intégralité du "preferred rank" (à l’exception des versions stables)
-- Justification:
-- * une version avancée qui est réellement avancée
-- par rapport à la dernière version stable disponible, et qui est la plus récente disponible
-- devrait toujours avoir le rang « préféré »
-- * une version avancée qui n’est pas plus récente que la dernière version stable
-- devrait toujours avoir le rang « normal »
-- * une version avancée qui n’est pas la plus récente devrait toujours avoir le rang « normal ».
-- * baser l’affichage sur les date de publication des différentes versions ne fonctionne pas bien
-- lorsqu’il y a plusieurs branches qui ont un rythme de
-- publication indépendants et plusieurs versions d’écart (par exemple pour firefox)
-- * on ne peut pas se fier aux numéros de versions car ils ne sont pas toujours sémantiques
--
--]]
if localdata['date de dernière version'] or localdata['dernière version'] or localdata['version avancée'] or localdata['date de version avancée'] then
return nil, 0
end
return wikidata.formatAndCat {
entity = localdata.item,
conjtype = 'new line',
property = 'P348',
qualifier = 'P548',
qualifiervalue = nonStableVersionTypes,
showqualifiers = {'P1476','P400','P306','P577'},
showsource = true,
qualiflinktopic = '-',
qualifconjtype = 'comma',
returnnumberofvalues = true,
rank = 'preferred',
}
end,
value = function()
-- Désactivation de l’affichage du paramètre en utilisant '-'
local versionNum = localdata['version avancée'] or ''
local versionDate = localdata['date de version avancée'] or ''
if (versionNum == '-') or (versionDate == '-') then
return '-'
end
local r = versionNum ..
((versionNum ~= '' and versionDate ~= '') and ' (' or '') ..
(date.dateInfobox{args={'date', versionDate, nolinks=true}} or '') ..
((versionNum ~= '' and versionDate ~= '') and ')' or '')
if r ~= '' then
return r
else
return nil
end
end,
}
end
--[[
-- Retourne le type de logiciel. Certains types sont exclus car non pertinents.
-- TODO: Update avril 2023: Il faudrait utiliser P366 comme modifié également sur la version Wikicode.
--]]
function p.softwareType()
return {
type = 'row',
label = 'Type',
value = 'type',
wikidata = {
conjtype = 'new line',
property = 'P31',
excludevalues = softwareTypesExcluded,
atdate = "today",
},
}
end
--[[
-- Retourne le créateur du logiciel.
--]]
function p.creator()
return {
type = 'row',
label = 'Créateur',
plurallabel ='Créateurs',
value = 'créateur',
wikidata = function()
-- Si le "développeur" est une donnée locale, on ne cherche pas le créateur sur Wikidata
-- pour ne pas risquer de faire un doublon avec la ligne "développeur"
if localdata['développeur'] or localdata['développeurs'] then
return nil, 0
end
return wikidata.formatAndCat {
entity = localdata.item,
property = {'P170', 'P112'},
returnnumberofvalues = true,
}
end,
}
end
--[[
-- Retourne le développeur du logiciel, uniquement si il est différent du créateur du logiciel.
--]]
function p.developer()
return {
type = 'row',
label = '[[Développeur|Développé par]]',
plurallabel ='[[Développeur|Développé par]]',
value = {'développeur', 'développeurs'},
wikidata = function()
-- Si le "créateur" est une donnée locale, on ne cherche pas les devs sur Wikidata
-- pour ne pas risquer de faire un doublon avec la ligne "créateur"
if localdata['créateur'] then
return nil, 0
end
local creators, creatornum = wikidata.formatAndCat {
entity = localdata.item,
property = {'P170', 'P112'},
returnnumberofvalues = true,
}
local devs, devnum = wikidata.formatAndCat {
entity = localdata.item,
property = 'P178',
atdate = "today",
returnnumberofvalues = true,
}
-- On affiche cette ligne que si le créateur est différent du développeur
if (creatornum == devnum) and (creators == devs) then
return nil, 0
end
return devs, devnum
end,
}
end
--[[
-- Retourne les licences du logiciel.
--]]
function p.license()
return {
type = 'row',
label = '[[Licence de logiciel|Licence]]',
plurallabel ='[[Licence de logiciel|Licences]]',
value = {'licence','licences'},
wikidata = function()
return wikidata.formatAndCat {
entity = localdata.item,
conjtype = 'comma',
property = 'P275',
atdate = 'today',
returnnumberofvalues = true,
labelformat = function(qid)
-- affichage de l’identifiant SPDX qui a l’avantage
-- d’être court et explicite
local label, isset = wikidata.formatStatements {
entity = qid,
numval = 1,
property = 'P2479',
returnnumberofvalues = true,
atdate = 'today', -- les identifiants SPDX ont changé en avril 2015
}
-- fallback sur le label de la licence
if not isset then
label = nil
end
return label
end,
}
end,
}
end
--[[
-- Retourne le dépôt logiciel utilisé.
--]]
function p.repository()
return {
type = 'row',
label = '[[Dépôt (informatique)|Dépôt]]',
plurallabel = '[[Dépôt (informatique)|Dépôts]]',
value = 'dépôt',
wikidata = {
property = 'P1324',
atdate = "today", -- ça ne sert à rien d’afficher une adresse qui n’est plus la bonne
},
}
end
--[[
-- Retourne l’assurance qualité du projet.
--]]
function p.qualityAssurance()
return {
type = 'row',
label = '[[Assurance qualité]]',
value = 'assurance qualité',
wikdata = {
property = 'P2992',
atdate = "today",
}
}
end
--[[
-- Retourne l’interface graphique du logiciel.
--]]
function p.graphicalInterface()
return {
type = 'row',
label = '[[Interface graphique|Interface]]',
plurallabel = '[[Interface graphique|Interfaces]]',
value = 'interface',
wikidata = {
property = 'P1414',
atdate = "today",
},
}
end
--[[
-- Retourne les systèmes d’exploitation supportés.
--]]
function p.operatingSystem()
return {
type = 'row',
label = "[[Système d'exploitation|Système d’exploitation]]",
plurallabel ="[[Système d'exploitation|Systèmes d’exploitation]]",
value = {"système d'exploitation", "systèmes d'exploitation", "environnement", "environnements"},
wikidata = {
property = 'P306',
atdate = "today",
},
}
end
--[[
-- Retourne la plateforme informatique utilisée.
--]]
function p.platform()
return {
type = 'row',
label = '[[Plate-forme (informatique)|Plate-forme]]',
label = '[[Plate-forme (informatique)|Plate-formes]]',
value = {'plate-forme','plate-formes', 'plateforme', 'plateformes'},
wikidata = {
property = 'P400',
atdate = "today",
},
}
end
--[[
-- Retourne la taille du logiciel.
--]]
function p.dataSize()
return {
type = 'row',
label = '[[Taille de fichier|Taille des données]]',
value = 'taille des données',
wikidata = {
property = 'P3575',
atdate = "today",
},
}
end
--[[
-- Retourne les formats de fichiers lus par le logiciel.
--]]
function p.readFormats()
return {
type = 'row',
label = '[[Format de données|Format]] lu',
plurallabel = '[[Format de données|Formats]] lus',
value = 'importe',
wikidata = {
property = 'P1072',
atdate = "today",
},
}
end
--[[
-- Retourne les formats de fichiers écrits par le logiciel.
--]]
function p.writtenFormats()
return {
type = 'row',
label = '[[Format de données|Format]] écrit',
plurallabel = '[[Format de données|Formats]] écrits',
value = 'exporte',
wikidata = {
property = 'P1073',
atdate = "today",
},
}
end
--[[
-- Retourne le lien vers la documentation du logiciel, de préférence en français, sinon dans d’autres langues.
--
-- TODO: mettre à jour la documentation de cette fonction pour préciser le comportement en fonction de la langue.
--]]
function p.documentation()
return {
type = 'row',
label = '[[Documentation logicielle|Documentation]]',
value = 'documentation',
wikidata = function()
local values, num = wikidata.formatAndCat {
entity = localdata.item,
displayformat = 'weblink',
conjtype = 'new line',
property = 'P2078',
atdate = 'today',
isinlang = 'fr',
--[[
-- excludespecial car il peut y avoir marqué "aucune valeur"
-- pour le français, mais y avoir une documentation en anglais
--]]
excludespecial = true,
returnnumberofvalues = true,
}
if not values then
values, num = wikidata.formatAndCat {
entity = localdata.item,
displayformat = 'weblink',
conjtype = 'new line',
property = 'P2078',
showlang = true,
atdate = 'today',
excludespecial = true,
returnnumberofvalues = true,
}
end
return values, num
end,
}
end
--[[
-- Retourne l’image principale
--]]
function p.mainimage(cat, defaultimage)
if not cat then
cat = 'Article à illustrer Logiciel'
end
return general.mainimage(cat, defaultimage)
end
--[[
-- Retourne le logo
--]]
function p.logo(upright)
return general.logo(upright)
end
--[[
-- Retourne le titre
--]]
function p.title()
return general.title('informatique')
end
--[[
-- Retourne le site web
--]]
function p.website(localparam)
return general.website(localparam)
end
return p