Modulo:DTFunzioniComuni
Vai alla navigazione
Vai alla ricerca
La documentazione per questo modulo può essere creata in Modulo:DTFunzioniComuni/man
-- Keyword: wikitrek
local LabelOrLink = require('Modulo:DTBase').LabelOrLink
local p = {}
function p.ImmagineDaFile(Frame)
local item = mw.wikibase.getEntityIdForCurrentPage()
if not item then return '' end
local results = {}
local statements = mw.wikibase.getBestStatements(item, 'P3')
for _, statement in pairs(statements) do
if statement.mainsnak.snaktype == 'value' then
local Immagine = statement.mainsnak.datavalue.value
if Immagine then
results[#results + 1] = '[[File:' .. Immagine .. '|' .. Frame.args.OpzioniImmagine .. ']]'
else
results[#results + 1] = 'VUOTO'
end
else
results[#results + 1] = 'ERRORE'
end
end
return table.concat(results, ', ')
end
function p.Date(frame)
local entity = mw.wikibase.getEntity()
-- local snak = entity['claims']['P2'][1]
-- return entity['claims']['P2'][1].value
return entity.claims['P2'].value
end
function p.Network(frame)
local entity = mw.wikibase.getEntity()
local snak = entity['claims']['P2'][1]['qualifiers']['P4'][1]
return mw.wikibase.renderSnak( snak )
end
function p.URL(frame)
return mw.wikibase.getEntityUrl()
end
function p.List(frame)
local entity = mw.wikibase.getEntity()
local snak = entity['claims']['P2']
local result = ''
for index, value in next, snak do
result = result .. mw.wikibase.renderSnak(value)
end
end
function p.LinkFromPage(frame)
local item = mw.wikibase.getEntityIdForCurrentPage()
if not item then return '' end
local results = {}
local statements = mw.wikibase.getBestStatements(item, 'P7')
for _, statement in pairs(statements) do
if statement.mainsnak.snaktype == 'value' then
local value = statement.mainsnak.datavalue.value
local sitelink = value
local label = null
if sitelink then
if label then
results[#results + 1] = '[[' .. sitelink .. '|' .. label .. ']]'
else
results[#results + 1] = '[[' .. sitelink .. ']]'
end
elseif label then
results[#results + 1] = label
end
end
end
return table.concat(results, ', ')
end
--------------------------------------------------------------------------------
-- Function to convert ISO code to language name in Italian
--
-- @param isoCode The two-letters anguage code according to ISO 639-1
-- @return String with language full name
--------------------------------------------------------------------------------
function p.getLanguageName(isoCode)
-- Define the lookup table
local language_codes = {
["en"] = "inglese",
["fr"] = "francese",
["es"] = "spagnolo",
["de"] = "tedesco",
["it"] = "italiano",
["pt"] = "portoghese",
["ru"] = "russo",
["zh"] = "cinese",
["ar"] = "arabo",
["ja"] = "giapponese",
["ko"] = "coreano",
["hi"] = "hindi",
["nl"] = "olandese",
["pl"] = "polacco",
["sv"] = "svedese",
["da"] = "danese",
["no"] = "norvegese",
["fi"] = "finlandese",
["el"] = "greco",
["he"] = "ebraico",
["vi"] = "vietnamita",
["th"] = "tailandese",
["id"] = "indonesiano",
["tr"] = "turco",
["cs"] = "ceco",
["sk"] = "slovacco",
["hu"] = "ungherese",
["ro"] = "rumeno",
["bg"] = "bulgaro",
["hr"] = "croatiano",
["sl"] = "sloveno",
["et"] = "estoniano",
["lt"] = "lituano",
["lv"] = "lettone",
["fa"] = "persiano",
["ms"] = "malese",
["ca"] = "catalano",
["gl"] = "galiziano",
["oc"] = "occitano",
["br"] = "bretone",
["ga"] = "irlandese",
["cy"] = "gallese",
["mt"] = "maltese",
["sq"] = "albanese",
["mk"] = "macedone",
["sr"] = "serbo",
["bs"] = "bosniaco",
["hr"] = "croatiano",
["sh"] = "serbo-Croato",
["uk"] = "ucraino",
["be"] = "bielorusso",
["kk"] = "kazako",
["ky"] = "kirghiso",
["uz"] = "uzbeko",
["az"] = "azerbaigiano",
["tk"] = "turkmeno",
["mn"] = "mongolo",
["tt"] = "tataro",
["ba"] = "bashkir",
["ce"] = "ceceno",
["cr"] = "croatiano",
["cs"] = "ceco",
["da"] = "danese",
["de"] = "tedesco",
["el"] = "greco",
["en"] = "inglese",
["es"] = "spagnolo",
["et"] = "estoniano",
["fa"] = "persiano",
["fi"] = "finlandese",
["fr"] = "francese",
["gl"] = "galiziano",
["he"] = "ebraico",
["hi"] = "hindi",
["hr"] = "croatiano",
["hu"] = "ungherese",
["id"] = "indonesiano",
["it"] = "italiano",
["ja"] = "giapponese",
["ka"] = "georgiano",
["kk"] = "kazako",
["ko"] = "coreano",
["ky"] = "kirghiso",
["lt"] = "lituano",
["lv"] = "lettone",
["mk"] = "macedone",
["ms"] = "malese",
["nl"] = "olandese",
["no"] = "norvegese",
["pl"] = "polacco",
["pt"] = "portoghese",
["ro"] = "rumeno",
["ru"] = "russo",
["sk"] = "slovacco",
["sl"] = "sloveno",
["sq"] = "albanese",
["sr"] = "serbo",
["sv"] = "svedese",
["th"] = "tailandese",
["tr"] = "turco",
["tt"] = "tataro",
["uz"] = "uzbeko",
["vi"] = "vietnamita",
["zh"] = "cinese"
}
local languageName = language_codes[isoCode]
if languageName then
return languageName
else
return isoCode
end
end
--------------------------------------------------------------------------------
-- Return a specific Property from Item and/or Instance and/or
-- Instance of Instance.
-- Return the single or multiple values of the Property
--
-- @param Property The property whose values are returned
-- @param Depth How far to go on the tree: 1 - item only,
-- 2 - item and Instance,
-- 3 - item, Instance and
-- Instance of Instance
-- @param Aggregate Wether to aggregate results or return upon first match
-- @param[opt=false] SkipItem Don't return value for current item,
-- return Instance and Instance of Instance only
-- @param[opt=false] ForceString Force to return string even in case of Page
-- that should return link
-- @return Table with single value or array of values
--------------------------------------------------------------------------------
function p.PropertiesOnTree(Property, Depth, Aggregate, SkipItem, ForceString)
local CurrentItem = mw.wikibase.getEntity()
local InstanceItem = nil
local InstanceInstanceItem = nil
local ResultsArray = nil
if not CurrentItem then
CurrentItem = mw.wikibase.getEntity('Q1')
end
if Depth == nil or Depth < 1 then
Depth = 1
end
if Depth > 3 then
Depth = 3
end
if SkipItem == nil then
SkipItem = false
end
ForceString = ForceString or false
if Depth > 1 and CurrentItem['claims']['P14'] then
--Set instance of
InstanceItem = mw.wikibase.getEntity(CurrentItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
if Depth > 2 and InstanceItem['claims']['P14'] then
--Set instance of instance
InstanceInstanceItem = mw.wikibase.getEntity(InstanceItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
end
end
--[=[
ResultsArray[#ResultsArray + 1] = Property .. " - " .. Depth .. " - " .. tostring(Aggregate)
ResultsArray[#ResultsArray + 1] = Property .. " - " .. Depth .. " - " .. tostring(InstanceInstanceItem)
if CurrentItem.claims[Property] then
ResultsArray[#ResultsArray + 1] = LabelOrLink(CurrentItem.claims[Property][1].mainsnak.datavalue.value.id)
if not Aggregate then
return resultsArray
end
end]=]
local QList = {}
if SkipItem then
QList = {InstanceItem, InstanceInstanceItem}
else
QList = {CurrentItem, InstanceItem, InstanceInstanceItem}
end
for _, Item in pairs(QList) do
--ResultsArray[#ResultsArray + 1] = "For - " .. Item.id
if Item ~= nil and Item.claims[Property] then
local Values = Item.claims[Property]
-- Only initialize ResultsArray if the Property exist at least once along the tree
if ResultsArray == nil then
ResultsArray = {}
end
for _, SnakValue in pairs(Values) do
if SnakValue.mainsnak.datavalue.value.amount ~= nil then
--ResultsArray[#ResultsArray + 1] = string.format('%u', SnakValue.mainsnak.datavalue.value.amount)
table.insert(ResultsArray, string.format('%u', SnakValue.mainsnak.datavalue.value.amount))
elseif SnakValue.mainsnak.datavalue.value.id ~= nil then
--ResultsArray[#ResultsArray + 1] = LabelOrLink(SnakValue.mainsnak.datavalue.value.id)
table.insert(ResultsArray, LabelOrLink(SnakValue.mainsnak.datavalue.value.id, nil, nil, nil, ForceString))
else
--ResultsArray[#ResultsArray + 1] = SnakValue.mainsnak.datavalue.value
table.insert(ResultsArray, SnakValue.mainsnak.datavalue.value)
end
end
if not Aggregate then
return table.concat(ResultsArray)
end
end
end
return ResultsArray
end
function p.SeriesTree(frame)
--return table.concat(p.PropertiesOnTree("P16", 3, false), "</br>")
return p.PropertiesOnTree("P16", 3, false)
end
--------------------------------------------------------------------------------
-- Build and return the list of categories for a specific page
--
-- @param {Frame} Info from MW session
-- @return {string} List of properties in Wikitext
--------------------------------------------------------------------------------
function p.CategoryTree(frame)
local AZInstancesMember = {Q23 = "Personaggi", Q18 = "Specie", Q95 = "Pianeti", Q19 = "Cast", Q52 = "Cast"}
--local CurrentItem = mw.wikibase.getEntity()
local CurrentQ
local UpperCategories
local AZCategory = ''
local SpeciesCategory = ''
if mw.wikibase.getEntity() then
CurrentQ = mw.wikibase.getEntity().claims['P14'][1].mainsnak.datavalue.value.id
else
return ""
end
if AZInstancesMember[CurrentQ] ~= nil then
local FirstLetter
if mw.wikibase.getEntity().claims['P8'] ~= nil then
--Manual criteria has precedence
FirstLetter = string.upper(string.sub(mw.wikibase.getEntity().claims['P8'][1].mainsnak.datavalue.value, 1, 1))
else
local Label = mw.wikibase.getLabel()
if AZInstancesMember[CurrentQ] == "Personaggi" or AZInstancesMember[CurrentQ] == "Cast" then
--Person or character: process surname
local Match = string.match(Label, "[^%s]+$")
FirstLetter = string.upper(string.sub(Match, 1, 1))
else
--No person: take first letter
FirstLetter = string.upper(string.sub(mw.wikibase.getLabel(), 1, 1))
end
end
if string.find(FirstLetter, "%d") ~= nil then
FirstLetter = "0-9"
end
AZCategory = "[[Category:" .. AZInstancesMember[CurrentQ] .. " - " .. FirstLetter .. "]]"
-- Check if item has Species (P65) property
if mw.wikibase.getEntity().claims['P65'] ~= nil then
SpeciesCategory = "[[Category:" .. AZInstancesMember[CurrentQ] .. " - " .. mw.wikibase.getLabelByLang(mw.wikibase.getEntity().claims['P65'][1].mainsnak.datavalue.value.id, "it") .. "]]"
end
return (p.PropertiesOnTree("P68", 1, false) or "") .. AZCategory .. SpeciesCategory
else
UpperCategories = p.PropertiesOnTree("P68", 2, true)
if type(UpperCategories) == "table" then
return table.concat(UpperCategories)
else
return UpperCategories
end
end
end
function p.UpperCategoryTree(frame)
return p.PropertiesOnTree("P69", 1, false)
end
function p.IconTree(frame)
local ImageName
--return table.concat(p.PropertiesOnTree("P3", 3, false), "</br>")
--ImageName = p.PropertiesOnTree("P3", 3, false)[1]
ImageName = p.PropertiesOnTree("P3", 3, false)
if ImageName == nil or ImageName == '' then
local CurrentItem
CurrentItem = mw.wikibase.getEntity()
-- Takes icon from SERIES P16
if CurrentItem.claims['P16'] ~= nil then
ImageName = mw.wikibase.getEntity(CurrentItem.claims['P16'][1].mainsnak.datavalue.value.id).claims['P3'][1].mainsnak.datavalue.value
end
end
return ImageName
end
function p.SeasonTree(frame)
--return table.concat(p.PropertiesOnTree("P18", 3, false), "</br>")
return p.PropertiesOnTree("P18", 3, false)
end
function p.AffiliationTree(frame)
--return table.concat(p.PropertiesOnTree("P40", 3, false), "</br>")
return p.PropertiesOnTree("P40", 3, false)
end
function p.OperatorTree(frame)
--return table.concat(p.PropertiesOnTree("P41", 3, false), "</br>")
return p.PropertiesOnTree("P41", 3, false)
end
return p