Module:Wikidata/Outils : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
Ligne 2 : Ligne 2 :
 
local p = {}
 
local p = {}
 
p.i18n = require "Module:Wikidata/I18n"
 
p.i18n = require "Module:Wikidata/I18n"
 +
local defaultlang = mw.getContentLanguage():getCode()
  
 
function p.snaktype(snak)
 
function p.snaktype(snak)
Ligne 50 : Ligne 51 :
 
if type(val) == 'table' then
 
if type(val) == 'table' then
 
return val
 
return val
 +
end
 +
if val == '-' then
 +
return nil
 
end
 
end
 
return mw.wikibase.getEntityObject(val)
 
return mw.wikibase.getEntityObject(val)
Ligne 61 : Ligne 65 :
 
end
 
end
 
return false
 
return false
 +
end
 +
 +
local function wikipediaLink(entity, lang)
 +
lang = lang or defaultlang
 +
if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
 +
return mw.wikibase.sitelink(entity)
 +
end
 +
if type(entity) == 'string' then
 +
entity = mw.wikibase.getEntityObject(entity)
 +
end
 +
if (not entity) or type(entity) ~= 'table' then
 +
return formatError('entity-not-found')
 +
end
 +
local link = entity:getSitelink(lang .. 'wiki')
 +
if link then
 +
return ':' .. lang .. ':' .. link
 +
end
 +
end
 +
 +
local function wikidataLink(entity)
 +
if type(entity) == 'string' then
 +
return ':d:' .. entity
 +
elseif type(entity) == 'table' then
 +
return ':d:' .. entity.id
 +
elseif type(entity) == nil then
 +
return formatError('entity-not-found')
 +
end
 +
end
 +
 +
function p.getLink(entity, linktype, lang)
 +
lang = lang or defaultlang
 +
linktype = linktype or 'wikipedia'
 +
if linktype == '-' then
 +
return nil
 +
end
 +
if linktype == 'wikipedia' then
 +
return wikipediaLink(entity, lang)
 +
elseif linktype == 'wikidata' then
 +
return wikidataLink(entity)
 +
end
 +
 +
-- analyse les valeurs du type 'enwiki' pour linktype = 'wikipedia', lang = 'en'
 +
local endstr = string.sub(linktype, #linktype - 3, #linktype)
 +
if endstr == 'wiki' then
 +
lang = string.sub(linktype, 1, #linktype - 4)
 +
return wikipediaLink(entity, lang)
 +
end
 +
--[[
 +
local errormsg = i18n['invalid-linktype']
 +
if type(linktype) ~= 'string' then
 +
errormsg = errormsg .. ': ' .. linktype
 +
else
 +
errormsg = errormsg .. ':' .. type(linktype)
 +
end
 +
return formatError(errormsg)
 +
]]--
 
end
 
end
  

Version du 25 septembre 2015 à 07:02

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

--Fonctions élémentaires de gestion des snaks Wikidata
local p = {}
p.i18n = require "Module:Wikidata/I18n"
local defaultlang = mw.getContentLanguage():getCode()

function p.snaktype(snak)
	return snak.snaktype
end
	
function p.isSpecial(snak)
	return (snak.snaktype ~= 'value')
end

function p.isValue(snak)
	return (snak.snaktype == 'value')
end

function p.getId(snak)
	if p.isValue(snak) then
		return 'Q' .. snak.datavalue.value['numeric-id']
	end
end

function p.getMainId(claim)
	return p.getId(claim.mainsnak)
end

function p.EntityId(entity)
	if type(entity) == 'string' then
		return entity
	end
	return entity.id
end

function p.getValue(snak)
	return snak.datavalue.value
end

function p.formatError( key )
    return error(p.i18n[key] or key)
end

function p.addcat(cat, sortkey)
	if sortkey then
		return  '[[Category:' .. cat .. '|' .. (sortkey or '') .. ']]'
	end
	return '[[Category:' .. cat  .. ']]'
end

function p.getEntity( val ) 
	if type(val) == 'table' then
		return val
	end
	if val == '-' then
		return nil
	end
	return mw.wikibase.getEntityObject(val)
end

function p.alreadyHere(searchset, val)
	for i, j in pairs(searchset) do
		if val == j then
			return true
		end
	end
return false
end

local function wikipediaLink(entity, lang)
	lang = lang or defaultlang
	if (type(entity) == 'string') and (lang == defaultlang) then -- le plus économique
		return mw.wikibase.sitelink(entity)
	end
	if type(entity) == 'string' then
		entity = mw.wikibase.getEntityObject(entity)
	end
	if (not entity) or type(entity) ~= 'table' then
		return formatError('entity-not-found')
	end
	local link = entity:getSitelink(lang .. 'wiki')
	if link then
		return ':' .. lang .. ':' .. link
	end
end

local function wikidataLink(entity)
	if type(entity) == 'string' then
		return ':d:' .. entity
	elseif type(entity) == 'table' then
		return ':d:' .. entity.id
	elseif type(entity) == nil then
		return formatError('entity-not-found')
	end
end

function p.getLink(entity, linktype, lang)
	lang = lang or defaultlang
	linktype = linktype or 'wikipedia'
	if linktype == '-' then
		return nil
	end
	if linktype == 'wikipedia' then
		return wikipediaLink(entity, lang)
	elseif linktype == 'wikidata' then
		return wikidataLink(entity)
	end
	
	-- analyse les valeurs du type 'enwiki' pour linktype = 'wikipedia', lang = 'en'
	local endstr = string.sub(linktype, #linktype - 3, #linktype)
	if endstr == 'wiki' then
		lang = string.sub(linktype, 1, #linktype - 4)
		return wikipediaLink(entity, lang)
	end
	--[[
	local errormsg = i18n['invalid-linktype']
	if type(linktype) ~= 'string' then
		errormsg = errormsg .. ': ' .. linktype
	else
		errormsg = errormsg .. ':' .. type(linktype) 
	end
	return formatError(errormsg) 
	]]--
end

-- add new values to a list, avoiding duplicates
function p.addnewvalues(old, new)
	if not new then
		return old
	end
	for _, j in pairs(new) do
		if not p.alreadyHere(old, j) then
			table.insert(old, j)
		end
	end
	return old
end

return p