Modulo:DTFunzioniComuni: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Species category added
Nessun oggetto della modifica
(Species category added)
 
(43 versioni intermedie di uno stesso utente non sono mostrate)
Riga 72: Riga 72:
return table.concat(results, ', ')
return table.concat(results, ', ')
end
end
--- Three dashes indicate the beginning of a function or field documented
 
-- using the LDoc format
--------------------------------------------------------------------------------
-- 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 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 Depth How far to go on the tree: 1 - item only,
-- @param Aggregate Wether to aggregate results or return the first found
--                                        2 - item and Instance,
-- @return Table withs strings or wikilinks
--                                        3 - item, Instance and
function p.PropertiesOnTree(Property, Depth, Aggregate)
--                                            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 CurrentItem = mw.wikibase.getEntity()
local InstanceItem = nil
local InstanceItem = nil
local InstanceInstanceItem = nil
local InstanceInstanceItem = nil
local ResultsArray = {}
local ResultsArray = nil
--local ItemQ = mw.wikibase.getEntityIdForCurrentPage()
if not CurrentItem then
if not CurrentItem then
CurrentItem = mw.wikibase.getEntity('Q1')
CurrentItem = mw.wikibase.getEntity('Q1')
Riga 94: Riga 105:
Depth = 3
Depth = 3
end
end
if SkipItem == nil then
SkipItem = false
end
ForceString = ForceString or false
if Depth > 1 and CurrentItem['claims']['P14'] then
if Depth > 1 and CurrentItem['claims']['P14'] then
--Set instance of
--Set instance of
--ResultsArray[#ResultsArray + 1] = ">1"
InstanceItem = mw.wikibase.getEntity(CurrentItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
InstanceItem = mw.wikibase.getEntity(CurrentItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
if Depth > 2 and InstanceItem['claims']['P14'] then
if Depth > 2 and InstanceItem['claims']['P14'] then
--Set instance of instance
--Set instance of instance
--ResultsArray[#ResultsArray + 1] = ">2"
InstanceInstanceItem = mw.wikibase.getEntity(InstanceItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
InstanceInstanceItem = mw.wikibase.getEntity(InstanceItem['claims']['P14'][1].mainsnak.datavalue.value['id'])
end
end
Riga 117: Riga 130:
end]=]
end]=]
for _, Item in pairs({CurrentItem, InstanceItem, InstanceInstanceItem}) do
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  
--ResultsArray[#ResultsArray + 1] = "For - " .. Item.id  
if Item ~= nil and Item.claims[Property] then
if Item ~= nil and Item.claims[Property] then
--ResultsArray[#ResultsArray + 1] = Item.id .. " - " .. Property
--ResultsArray[#ResultsArray + 1] = LabelOrLink(Item.claims[Property][1].mainsnak.datavalue.value.id)
local Values = Item.claims[Property]
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
for _, SnakValue in pairs(Values) do
if SnakValue.mainsnak.datavalue.value.id == nil then
if SnakValue.mainsnak.datavalue.value.amount ~= nil then
ResultsArray[#ResultsArray + 1] = SnakValue.mainsnak.datavalue.value
--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
else
ResultsArray[#ResultsArray + 1] = LabelOrLink(SnakValue.mainsnak.datavalue.value.id)
--ResultsArray[#ResultsArray + 1] = SnakValue.mainsnak.datavalue.value
table.insert(ResultsArray, SnakValue.mainsnak.datavalue.value)
end
end
end
end
if not Aggregate then
if not Aggregate then
return ResultsArray
return table.concat(ResultsArray)
end
end
end
end
Riga 139: Riga 167:
end
end
function p.SeriesTree(frame)
function p.SeriesTree(frame)
return table.concat(p.PropertiesOnTree("P16", 3, false), "</br>")
--return table.concat(p.PropertiesOnTree("P16", 3, false), "</br>")
return p.PropertiesOnTree("P16", 3, false)
end
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)
function p.CategoryTree(frame)
return table.concat(p.PropertiesOnTree("P68", 2, true), "</br>")
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
end
function p.IconTree(frame)
function p.IconTree(frame)
return table.concat(p.PropertiesOnTree("P3", 3, false), "</br>")
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
end
function p.IconSeries(frame)
function p.OperatorTree(frame)
return table.concat(p.PropertiesOnTree("P16", 3, false), "</br>")
--return table.concat(p.PropertiesOnTree("P41", 3, false), "</br>")
return p.PropertiesOnTree("P41", 3, false)
end
end
return p
return p

Menu di navigazione