Modulo:Wikidata2/lib
Aspekto
Dokumentado por ĉi tiu modulo povas esti kreata ĉe Modulo:Wikidata2/lib/dokumentado
require('strict')
local p = {
common = require "Modulo:Functions",
props = {
begin = { 'P569', 'P580' },
ending = { 'P570', 'P582' },
lang = { 'P364', 'P407' },
point = { 'P571', 'P577', 'P585' },
},
datatypeToValueType = {
['commonsMedia'] = 'string',
['external-id'] = 'string',
['geo-shape'] = 'string',
['globe-coordinate'] = 'globecoordinate',
['math'] = 'string',
['monolingualtext'] = 'monolingualtext',
['musical-notation'] = 'string',
['quantity'] = 'quantity',
['score'] = 'string',
['string'] = 'string',
['tabular-data'] = 'string',
['time'] = 'time',
['url'] = 'string',
['wikibase-item'] = 'wikibase-entityid',
['wikibase-property'] = 'wikibase-entityid',
['wikibase-lexeme'] = 'wikibase-entityid',
['wikibase-form'] = 'wikibase-entityid',
['wikibase-sense'] = 'wikibase-entityid',
},
}
local i18n = mw.loadData("Modulo:Wikidata2/i18n")
function p.addWdClass(str)
return '<span class="wd">' .. str .. '</span>'
end
function p.category(key, ...)
local Category = require 'Modulo:Kategorio'
local title = mw.title.getCurrentTitle()
if i18n.categories[key] ~= '-' then
return Category.makeCategory(mw.ustring.format(i18n.categories[key], ...), '0,14', title.text)
else
return ''
end
end
function p.getInterwikiPrefix(wiki)
local prefixMap = {
wiki = 'w:',
wikibooks = 'b:',
wikidata = 'd:',
wikinews = 'n:',
wikipedia = 'w:',
wikiquote = 'q:',
wikisource = 's:',
wikiversity = 'v:',
wikivoyage = 'voy:',
wiktionary = 'wikt:',
}
if prefixMap[wiki] then
return prefixMap[wiki]
end
local code, family = string.match(wiki, '^(.+)(wik.-)$')
if prefixMap[code] and family == 'wiki' then
return prefixMap[code]
end
if not code then
code = wiki
end
local prefix = string.gsub(code, '_', '-') .. ':'
return (prefixMap[family] or '') .. prefix
end
function p.formatDateRange(snaks, options)
local options = mw.clone(options)
local Y = require('Modulo:Time').PRECISION.YEAR
--if options.isQualifier == true then
options.precision = options.precision or Y
--end
local Formatters = require 'Modulo:Wikidata2/Formatters'
local begin, begin_raw, ending, ending_raw
if snaks.begin then
begin_raw = Formatters.getRawValue(snaks.begin, options)
end
if snaks.ending then
ending_raw = Formatters.getRawValue(snaks.ending, options)
end
if begin_raw and begin_raw ~= 'novalue' then
begin = Formatters.formatRawValue(begin_raw, 'time', options)
end
if ending_raw and ending_raw ~= 'novalue' then
ending = Formatters.formatRawValue(ending_raw, 'time', options)
end
if not begin then
if not ending then
return ''
end
return mw.ustring.format(i18n.date['end'], ending)
end
if not ending then
return mw.ustring.format(i18n.date['start'], begin)
end
local precision = options.precision or Y
local begin_precision = math.min(precision, begin_raw.precision or Y)
local ending_precision = math.min(precision, ending_raw.precision or Y)
local top = math.min(begin_raw.precision or Y, ending_raw.precision or Y)
while begin == ending and precision < top do
precision = precision + 1
options.precision = precision
begin = Formatters.formatRawValue(begin_raw, 'time', options)
begin_precision = precision
ending = Formatters.formatRawValue(ending_raw, 'time', options)
ending_precision = precision
end
if begin == ending then
return begin
end
local connector = ' – '
if begin_precision == Y and ending_precision == Y then
connector = '–'
end
return table.concat( { begin, ending }, connector )
end
function p.formatError(key, ...)
return mw.ustring.format(i18n.errors[key], ...)
end
function p.formatFromPattern(str, pattern)
local escaped = mw.ustring.gsub(str, '%%', '%%%%')
return mw.ustring.gsub(pattern, '$1', escaped) .. '' --Hack to get only the first result of the function
end
function p.formatTextInLanguage(text, language)
return mw.text.tag('span', { lang = language }, text)
end
-- @deprecated
function p.getEntityIdFromValue(value)
local entityType = value['entity-type']
if entityType == 'item' then
return 'Q' .. value['numeric-id']
elseif entityType == 'property' then
return 'P' .. value['numeric-id']
else
return error(p.formatError('unknown-entity-type', entityType))
end
end
function p.getItemIdFromURI(uri)
return mw.ustring.match(uri, '(Q%d+)')
end
function p.getLabelInLanguage(entityId, langs)
langs = p.textToTable(langs)
local label, lang = mw.wikibase.getLabelWithLang(entityId)
if label then
for _, lg in ipairs(langs) do
if lg == lang then
return label, lang
end
end
end
return nil, nil
end
function p.getLinkWhenNonexistingLabel(entityId)
local ImageFormatter = require 'Modulo:ImageFormatter'
return ImageFormatter.makeImage('Wikidata-edit.svg', {
description = i18n['missing-label'],
link = 'd:' .. entityId,
size = '27x17px'
}) .. '<code>[[d:' .. entityId .. '|' .. entityId .. ']]</code>' .. p.category('missing-label')
end
function p.IsOptionTrue(options, key)
if options[key] then
if tostring(options[key]) == 'true' or tostring(options[key]) == 'yes' or tostring(options[key]) == '1' then
return true
end
end
return false
end
function p.isPropertyId(value)
return mw.ustring.match(value, '^[Pp][1-9]%d-$') and true
end
function p.IsSnakValue(snak)
return snak.snaktype == 'value'
end
function p.raiseInvalidDatatype(method, allowed, provided)
if type(allowed) ~= 'table' then
allowed = { allowed }
end
return p.formatError('invalid-datatype2', method, mw.text.listToText(allowed, '“, „', '“ nebo „'), provided)
end
function p.simpleCompare(first, second)
if first == second then
return 0
end
if first < second then
return -1
else
return 1
end
end
function p.textToTable(something, options)
if type(something) ~= "table" then
local options = options or {}
local split_pattern = options.split_pattern or "%s*,%s*"
something = mw.text.split(something, split_pattern)
end
return p.common.cleanArgs(something)
end
return p