Modulu:Wikidata: berrikuspenen arteko aldeak

Ezabatutako edukia Gehitutako edukia
fix negative years
update from ca.wiki: alternative values of property, new format musical-notation
1. lerroa:
-- version 2019102320191116 from master @cawiki
 
local p = {}
89. lerroa:
loadI18n()
 
local function case(wordlocalcase, localcaselabel, lang...)
if wordlabel == nil or wordlabel == '' or cases[localcase] == nil then
return wordlabel
end
return cases[localcase](wordlabel, lang...)
end
 
263. lerroa:
local function printDatatypeMath(data)
return mw.getCurrentFrame():callParserFunction('#tag:math', data)
end
 
local function printDatatypeMusicalNot(data)
local amount_f = return mw.getCurrentFrame():callParserFunction('#exprtag:score', mw.ustring.gsub(factor, "$1", amount)data)
end
 
271 ⟶ 275 lerroa:
return expandBraces(mw.ustring.gsub(parameters.formatting, '$1', data), parameters.formatting)
elseif parameters.case then
return case(data, parameters.case, data, parameters.lang[1])
else
return data
346 ⟶ 350 lerroa:
if string.sub(parameters.formatting or '', 1, 4) == "unit" or parameters.convert then
-- example "unit": "http://www.wikidata.org/entity/Q174728"
local unitIDunit_id = data.unit
unitIDunit_id = mw.ustring.sub(unitIDunit_id, mw.ustring.find(unitIDunit_id, "Q"), -1)
if string.sub(unitIDunit_id, 1, 1) == "Q" then
if parameters.convert and parameters.convert ~= unit_id then
-- convert units
local conv_temp = { -- formulae for temperatures ºC, ºF, ªK: [from] = {[to] = 'formula'}
local factor, conv_unit
['Q25267'] = {['Q42289'] = '$1*1.8+32', ['Q11597'] = '$1+273.15'},
local conversion = mw.wikibase.getAllStatements(unitID, 'P2442') -- conversion to standard unit
['Q42289'] = {['Q25267'] = '($1-32)/1.8', ['Q11597'] = '($1+459.67)*5/9'},
table.insert(conversion, mw.wikibase.getBestStatements(unitID, 'P2370')[1]) -- conversion to SI unit
['Q11597'] = {['Q25267'] = '$1-273.15', ['Q42289'] = '($1-273.15)*1.8000+32.00'}
local conversion_string = mw.wikibase.getAllStatements(unitID, 'P370') -- Sandbox-String, i.e. Q42289
end}
for _, conv in ipairs(conversion_string) do
if conv_unitconv_temp[unit_id] ==and conv_temp[unit_id][parameters.convert] then
table.insert(conversion, conv)
local amount_f = mw.getCurrentFrame():callParserFunction('#expr', mw.ustring.gsub(conv_temp[unit_id][parameters.convert], "$1", amount))
end
amount = roundPrecisionmath.floor(amount, tonumber(amount_f) + 0.5)
for _, conv in ipairs(conversion) do
unit_id = parameters.convert
if conv.mainsnak.snaktype == 'value' then -- no somevalue nor novalue
else
if conv.mainsnak.datatype == 'string' then
local conversionconversions = mw.wikibase.getAllStatements(unitIDunit_id, 'P2442') -- conversion to standard unit
conv_unit = conv.qualifiers['P2210'][1].datavalue.value.id
table.insert(conversionconversions, mw.wikibase.getBestStatements(unitIDunit_id, 'P2370')[1]) -- conversion to SI unit
if conv_unit == parameters.convert then
factorfor =_, conv.mainsnak.datavalue.value in ipairs(conversions) do
if conv.mainsnak.snaktype == 'value' then -- no somevalue nor novalue
local amount_f = mw.getCurrentFrame():callParserFunction('#expr', mw.ustring.gsub(factor, "$1", amount))
if conv_unitconv.mainsnak.datavalue.value.unit == "http://www.wikidata.org/entity/" .. parameters.convert then
amount = roundPrecision(amount, tonumber(amount_f))
factoramount = roundPrecision(amount, amount * tonumber(conv.mainsnak.datavalue.value.amount))
unitId = conv_unit
breakunit_id = parameters.convert
end
else
conv_unit = conv.mainsnak.datavalue.value.unit
if conv_unit == "http://www.wikidata.org/entity/" .. parameters.convert then
factor = tonumber(conv.mainsnak.datavalue.value.amount)
amount = roundPrecision(amount, amount * factor)
unitID = mw.ustring.sub(conv_unit, mw.ustring.find(conv_unit, "Q"), -1)
break
end
385 ⟶ 382 lerroa:
local unit_symbol = ''
if parameters.lang[1] == wiki.langcode and pcall(require, wiki.module_title .. "/Units") then
unit_symbol = require(wiki.module_title .. "/Units").getUnit(amount, '', unitIDunit_id, true, '')
end
if unit_symbol == '' then
unit_symbol = unitSymbol(unitIDunit_id, parameters.lang)
end
if unit_symbol then
396 ⟶ 393 lerroa:
if suffix == '' then
-- get unit name
local unit_label, lang = getLabelByLangs(unitIDunit_id, parameters.lang)
if lang == wiki.langcode and pcall(require, wiki.module_title .. "/Units") then
suffix = " " .. require(wiki.module_title .. "/Units").getUnit(amount, unit_label, unitIDunit_id, false, '')
else
suffix = " " .. (unit_label or unitIDunit_id) .. addEditIcon(unitIDunit_id, lang, parameters.lang[1], parameters.editicon)
end
end
428 ⟶ 425 lerroa:
calendar_add = " <sup>(" .. mw.message.new('Wikibase-time-calendar-' .. calendar_model[calendar_id]):inLanguage(parameters.lang[1]):plain() .. ")</sup>"
end
end
local function d(f, t)
local ts = t or timestamp
local form = type(f) == "function" and f(ts) or f -- function in i18n.datetime[precision]
if string.sub(ts, 1, 1) == '-' then ts = '+' .. string.sub(ts, 2) end -- formatDate() only supports years from 0
return mw.language.new(parameters.lang[1]):formatDate(form, ts)
end
435 ⟶ 439 lerroa:
end
return t
end
local function d(f, t)
local ts = t or timestamp
local form = type(f) == "function" and f(ts) or f -- function in i18n.datetime[precision]
if string.sub(ts, 1, 1) == '-' then ts = '+' .. string.sub(ts, 2) end
return mw.language.new(parameters.lang[1]):formatDate(form, ts)
end
508 ⟶ 505 lerroa:
local parameter = parameters.formatting
local labelcase = label or sitelink
if parameters.gendercase == 'feminineformgender' and langparameters.gender ~== nil'feminineform' then -- case gender and item is female
labelcase = feminineForm(entityId, lang) or labelcase
if elseif parameters.case =~= "'gender" or idgender' then
end
if labelcase = case(parameters.case, thenlabelcase, lang, entityId, parameters.id)
labelcase = case(labelcase, parameters.case, lang)
end
local ret1, ret2
611 ⟶ 607 lerroa:
if snak.datatype == 'math' then
return printDatatypeMath(snak.datavalue.value)
elseif snak.datatype == 'musical-notation' then
return printDatatypeMusicalNot(snak.datavalue.value)
elseif snak.datatype == "url" then
return printDatavalueUrl(snak.datavalue.value, parameters)
777 ⟶ 775 lerroa:
function p.getSiteLink(frame)
require(wiki.module_title .. '/debug').track('getSiteLink')
local id = frame.args[1];
if id == ''nil thenor id == nil'' endthen
return mw.wikibase.getSitelink( id or= mw.wikibase.getEntityIdForCurrentPage(), frame.args[2])
if id == nil then
return
end
end
return mw.wikibase.getSitelink(id, frame.args[2])
end
 
799 ⟶ 803 lerroa:
end
 
local function tableParameters(args, parameters, column, gender)
local column_params = mw.clone(parameters)
column_params.formatting = args["colformat"..column]; if column_params.formatting == "" then column_params.formatting = nil end
column_params.convert = args["convert" .. column]
if args["case" .. column] then
ifcolumn_params.case = args["case" .. column] == "gender" then
column_params.gender = gender
else
column_params.case = args["case"..column]
end
end
return column_params
859 ⟶ 858 lerroa:
local showerrors = args["showerrors"]
local default = args["default"]
if default then showerrors = nil end
local editicon = not (args.editicon == "false" or args.editicon == "no")
local parameters = {["id"] = id, ["property"] = property, ["formatting"] = formatting, ["convert"] = convert,
["list"] = list, ["case"] = case, ["editicon"] = editicon,
["separator"] = separator, ["conjunction"] = conjunction, ["qseparator"] = separator, ["qconjunction"] = conjunction}
899. lerroa:
blacklist, blacklisted = setWhiteOrBlackList("blacklist", #qualifierId, args)
end
if default then showerrors = nil end
-- fetch property
local claims = findClaims(id, property)
for p in string.gmatch(property, 'P%d+') do
claims = findClaims(id, p)
if claims and claims[1] then
break
end
end
if not claims or not claims[1] then
if showerrors then return printError("property-not-found") else return default end
923 ⟶ 928 lerroa:
end
end
local gender_case
local gender_requested = false
if parameters.case == "gender" or idgender then
937 ⟶ 941 lerroa:
if gender_requested then
if feminineGender(idgender or id) then
gender_caseparameters.gender = "feminineform"
if parameters.case == "gender" or idgender then
parameters.gender = gender_case
end
end
end
983 ⟶ 984 lerroa:
end
if parameters.formatting == "table" then
local params = tableParameters(args, parameters, "0", gender_case)
value, sortkey, error = getValueOfClaim(claim, nil, params)
if value then
999 ⟶ 1.000 lerroa:
for i, qual in ipairs(qualifierId) do
local j = tostring(i)
params = tableParameters(args, parameters, j, gender_case)
local valueq, sortkeyq, valueraw
if qual == property then -- hack for getting the property with another formatting, i.e. colformat1=raw
1.243 ⟶ 1.244 lerroa:
if label then
label = case(label, "infoboxlabel", label, languages[1])
end