Aller au contenu

Module:Interface Wikidata

Depi Wikipedya, ansiklopedi lib

La documentation pour ce module peut être créée à Module:Interface Wikidata/doc

local p = {}
local d = require 'Module:Wikidata'

-- fonctions ne pouvant être appelées que depuis un autre module
p.fromLua = {
	
	-- manipulation d'une liste d'affirmations
	getClaims = d.getClaims,
	stringTable = d.stringTable,
	tableToText = d.tableToText,
	formatStatements = d.formatStatements,
	formatQualifiers = d.showQualifier,
	formatAndCat = d.formatAndCat,
	wikidataDate = d.wikidataDate,
	addLinkback = d.addLinkBack,
	addtrackingcat = d.addTrackingCat,
	
	-- manipulation d'une affirmation individelle
	getmainid = d.getMainId,
	formatStatement = d.formatStatement,
	statementDate = d.getFormattedDate, -- récupère la date des qualificatifs
	getFormattedQualifiers = d.getFormattedQualifiers,
	getQualifiers = d.getQualifiers,
	getReferences = d.getReferences,

	-- manipulation de snaks	
	getid = d.getId,
	formatSnak = d.formatSnak,
	
	-- utilisation de qids
	getEntity = d.getEntity,
	formatEntity = d.formatEntity,
	getLink = d.siteLink,
	getLabel = d.getLabel, --getLabel est plus simple que formatEntity

	-- utilisation des propriétés transitives
	isInstance = d.isInstance,
	isSubclass = d.isSubclass,
	addVals = d.addVals,
	transitiveVals = d.transitiveVals,
	inTransitiveVals = d.inTransitiveVals,
	findVal = d.findVal,

	-- gestion des dates
	mainDate = d.mainDate,
	getDate = d.getTheDate,
	keyDate = d.keyDate,

	-- Fonctions diverses
	translate = d.translate,
	Dump = d.Dump,
}

-- Fonctions frame pour usage depuis le Wikitexte (avec parfois des options pour gérer des données moins propres
local function cleanargs(args)
	local newargs = {}
	for k, v in pairs(args) do
		if v ~= '' then
			--[[ possibilité de passer des booléen, convertion des valeur "true", "false" en booleen lua
			     (sinon le module lua ne prend pas en compte "excludespecial" 
			      qui est "true" par défaut et considère toute chaîne comme vraie)
			 --]]
			if v == "true" then
				newargs[k] = true
			elseif v == "false" then
				newargs[k] = false
			else
				newargs[k] = v
			end
		end
	end
	return newargs
end


function p.formatStatements( frame ) -- pour Modèle:Wikidata
	local args = {}
	if frame == mw.getCurrentFrame() then
		args = cleanargs(frame.args) -- paramètres en dur du code de Modèle:Wikidata
		for k, v in pairs(cleanargs(frame:getParent().args)) do
			-- chargement des paramètres de l'appel au modèle, 
			-- pour permettre la surcharge des paramètres par défaut dans "Modèle:Wikidata"
			args[k] = v
		end
	else
		args = frame
	end
	if args.blockers and args.blockers ~= '' then return args.value end
	return p.fromLua.formatStatements( args )
end

function p.addLinkBack( frame )
	local args = cleanargs(frame.args)
	if args[1] and args[1]:match"%S" then
		return d.addLinkBack( '', args.entity, mw.text.trim( args[1] ) )
	end
end

function p.formatEntity(frame)
	local args = cleanargs(frame.args)
	local entity = args.entity or args[1]
	return d.formatEntity(entity, args)
end

function p.formatAndCat(frame)
	local args = cleanargs(frame.args)
	return d.formatAndCat(args)
end

function p.getLabel(frame)
	local args = cleanargs(frame.args)
	local item = args[1]
	local lang = args[2] or "fr"
	return d.getLabel(item, lang)
end


function p.mainDate(frame)
	return d.mainDate(frame.args['entity'])	
end

function p.Dump(frame)
	return d.Dump(frame.args[1])
end

function p.formatQualifiers(frame)
	local args = frame.args
	return d.formatQualifiers(args)
end

function p.getDescription(frame) -- fonction simpliste, mais bon, les descriptions Wikidata, c'est pas non plus super utile
	return  mw.wikibase.description(frame.args[1])
end

function p.getLink(frame)
	local args = frame.args
	local link, proj, lang = p.fromLua.getLink(args[1], args[2], args[3])
	return link
end

function p.translate(frame)
	return d.translate(frame.args[1])
end

function p.findVal(frame)
	local args = frame.args
	return d.findVal(args.source, args.target, args.property, args.recursion, args.instancedepth)
end

function p.transitiveVals(frame)
	local args = frame.args
	return d.transitiveVals(args.item, args, args.maxdepth, args.maxnodes, args.stopval, true)
end

return p