Moduulin Fr:Wikidata/Outils käyttöohje
Tämä sivu on kopio. Tätä ohjetta muokataan muokkaamalla suomenkielisessä Wikipediassa olevaa alkuperäistä versiota jonka muutokset kopioituvat automaattisesti tälle sivulle. Tämä moduuli on osa ranskankielisestä Wikipediasta kopioitua Wikidata ja Interface Wikidata -moduulikokonaisuutta (ks. ohjeet ja esimerkit). Listauksen kaikista tähän liittyvistä moduuleista löydät Ranskankielisen Wikipedian Wikidata-moduulit -sivulta.
|
--Fonctions élémentaires de gestion des snaks Wikidata
local p = {}
p.i18n = require "Module:Fr:Wikidata/I18n"
local defaultlang = mw.getContentLanguage():getCode()
function p.translate(str, rep1, rep2)
str = p.i18n or str
if rep1 then
str = str:gsub('$1', rep1)
end
if rep2 then
str = str:gsub('$2', rep2)
end
return str
end
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
end
end
function p.getNumericId(snak)
if p.isValue(snak) then
return snak.datavalue.value
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 that returns true if the "qid" parameter is the qid
-- of the item that is linked to the calling page
function p.is_page_of_qid(qid)
local entity_on_its_page = false
local self_entity = mw.wikibase.getEntity()
if self_entity ~= nil and qid == p.EntityId(self_entity) then
entity_on_its_page = true
end
return entity_on_its_page
end
function p.formatError( key , category, debug)
if debug then
return error(p.i18n or key)
end
if category then
return "]"
else
return "]"
end
end
function p.addcat(cat, sortkey)
if sortkey then
return ']'
end
return ']'
end
function p.getEntity( val )
if (mw.wikibase == nil) then
return nil
end
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
if val == '' then
val = nil
end
return mw.wikibase.getEntityObject(val)
end
function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function p.isHere(searchset, val)
for i, j in pairs(searchset) do
if val == j then
return true
end
end
return false
end
function p.alreadyHere(searchset, val) -- obsolète
return p.isHere(searchset, val)
end
function p.getEntityPagename(entity)
if (not entity) then
return nil -- ou option de gestion des erreurs ?
end
local name ="d:"
if entity == "property" then
name = "d:Property:"
end
return name .. entity.id
end
function p.getEntityPagename(entity)
if (not entity) then
return nil -- ou option de gestion des erreurs ?
end
local name ="d:"
if entity == "property" then
name = "d:Property:"
end
return name .. entity.id
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function p.siteLink(entity, project, lang)
-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language
lang = lang or defaultlang
if (type(project) ~= 'string') then
project = 'wiki'
end
project = project:lower()
if project == 'wikipedia' then
project = 'wiki'
end
if type(entity) == 'string' and (project == 'wiki') and ( (not lang or lang == defaultlang) ) then -- évite de charger l'élément entier
return mw.wikibase.sitelink(entity), 'wiki', defaultlang
end
if project == 'wikidata' then
return wikidataLink(entity), 'wikidata'
end
local projects = {
-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}
wiki = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'commons', false},
commonswiki = {'commonswiki', 'commons', false},
wikiquote = {'wikiquote', 'q', true},
wikivoyage = {'wikivoyage', 'voy', true},
wikibooks = {'wikibooks', 'b', true},
wikinews = {'wikinews', 'n', true},
wikiversity = {'wikiversity', 'v', true},
wikisource = {'wikisource', 's', true},
-- meta
-- mediawiki
}
entity = p.getEntity(entity)
if not entity then
return nil
end
local projectdata = projects
if not projectdata then -- sinon, on peut avoir des liens du type "enwiki" plutôt que "en" et lang = "wikipedia'
for k, v in pairs(projects) do
if project:match( k .. '$' )
and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))
then
lang = project:sub(1, #project-#k)
projectdata = k
break
end
end
if not mw.language.isKnownLanguageTag(lang) then
return p.formatError('invalid project code: ' .. (project or '?'))
end
end
if not projectdata then
return p.formatError('invalid project code: ' .. (project or '?'))
end
local linkcode = projectdata
local prefix = projectdata
local multiversion = projectdata
if multiversion then
linkcode = lang .. linkcode
end
local link = entity:getSitelink(linkcode)
if not link then
return nil
end
if prefix then
link = prefix .. ':' .. link
end
if multiversion then
link = ':' .. lang .. ':' .. link
end
return link, project, lang
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.isHere(old, j) then
table.insert(old, j)
end
end
return old
end
return p