Module:Wikidata/Outils : Différence entre versions
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