Anonimo

Modulo:DTFunzioniComuni: differenze tra le versioni

Da Wikitrek.
Species category added
Nessun oggetto della modifica
(Species category added)
 
(44 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
ResultsArray[#ResultsArray + 1] = LabelOrLink(SnakValue.mainsnak.datavalue.value.id)
if SnakValue.mainsnak.datavalue.value.amount ~= nil then
--ResultsArray[#ResultsArray + 1] = SnakValue.mainsnak.datavalue.value.id
--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
end
if not Aggregate then
if not Aggregate then
return ResultsArray
return table.concat(ResultsArray)
end
end
end
end
Riga 136: 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