67 329
contributi
mNessun oggetto della modifica |
(External formatter uri) |
||
(75 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
-- <nowiki> | |||
-------------------------------------------------------------------------------- | |||
-- This module handles generic semantic functions to support modules | |||
-- Comments are compatible with LDoc https://github.com/lunarmodules/ldoc | |||
-- | |||
-- @module p | |||
-- @author Luca Mauri [[Utente:Lucamauri]] | |||
-- @keyword: wikitrek | |||
-- Keyword: wikitrek | -- Keyword: wikitrek | ||
-------------------------------------------------------------------------------- | |||
local p = {} | local p = {} | ||
Riga 52: | Riga 61: | ||
return string.char(10) .. AllLabels | return string.char(10) .. AllLabels | ||
end | end | ||
-------------------------------------------------------------------------------- | |||
-- Take parameters out of the frame and pass them to p._buildUniversalIncipit(). | |||
-- Return the result. | |||
-- | |||
-- @param {Frame} Info from MW session | |||
-- @return {string} The full incipit wikitext | |||
-------------------------------------------------------------------------------- | |||
function p.URIFromatterFromDT(frame) | |||
local Item | |||
local Type | |||
Item = mw.wikibase.getEntity() | |||
if not Item then | |||
Item = mw.wikibase.getEntity(frame.args['Item']) | |||
end | |||
if not Item then | |||
Item = mw.wikibase.getEntity('Q1') | |||
end | |||
if (not Item['claims']) or (not Item['claims']['P5']) then | |||
return "ERROR" | |||
else | |||
Type = Item['claims']['P5'][1].mainsnak.datavalue.value | |||
return "[[External formatter uri::" .. Type .. "|''" .. Type .. "'']]" | |||
end | |||
end | |||
-------------------------------------------------------------------------------- | |||
-- Generic value parser from arbitrary Item and Property | |||
-- Return the result. | |||
-- | |||
-- @param {Item} The Entity | |||
-- @param {Property} String containing the property identifier and number | |||
-- @return {string} Value of the mainsnak | |||
-------------------------------------------------------------------------------- | |||
function p.GenericFromDT(Item, Property) | |||
if (not Item['claims']) or (not Item['claims'][Property]) then | |||
return "ERROR" | |||
else | |||
return Item['claims'][Property][1].mainsnak.datavalue.value | |||
end | |||
end | |||
--- Function to calculate the number of seasons of a series | --- Function to calculate the number of seasons of a series | ||
-- | -- | ||
Riga 58: | Riga 111: | ||
function p.SeasonsQty(ShortName) | function p.SeasonsQty(ShortName) | ||
local QueryResult | local QueryResult | ||
local Max | local Max = 0 | ||
local PrefixText | local PrefixText | ||
Riga 72: | Riga 125: | ||
-- See https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.ask.md#result | -- See https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.ask.md#result | ||
-- for return value example | -- for return value example | ||
if QueryResult == nil or Max < 0 then | if QueryResult == nil or Max < 0 then | ||
return 0 | return 0 | ||
else | else | ||
Max = QueryResult[1]["Stagione"] | |||
return Max | return Max | ||
end | end | ||
Riga 102: | Riga 155: | ||
Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id) | Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id) | ||
if | if SeriesShort == "Serie Classica" or SeriesShort == "Serie Animata" then | ||
CategoryText = '[[Category:Personaggi della ' .. SeriesShort .. "]]" | CategoryText = '[[Category:Personaggi della ' .. SeriesShort .. "]]" | ||
else | else | ||
Riga 136: | Riga 189: | ||
local SeriesShort | local SeriesShort | ||
local Characters = {} | local Characters = {} | ||
local PagesList = {} | |||
if not Item then | if not Item then | ||
Riga 147: | Riga 201: | ||
Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id) | Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id) | ||
if | if SeriesShort == "Serie Classica" or SeriesShort == "Serie Originale" or SeriesShort == "Serie Animata" then | ||
InstanceText = '[[Istanza::Episodio della ' .. SeriesShort .. "]]" | InstanceText = '[[Istanza::Episodio della ' .. SeriesShort .. "]]" | ||
else | else | ||
InstanceText = '[[Istanza::Episodio di ' .. SeriesShort .. "]]" | InstanceText = '[[Istanza::Episodio di ' .. SeriesShort .. "]]" | ||
end | end | ||
--[==[ | |||
Pages = mw.smw.ask(InstanceText .. "|?Personaggio|order=asc|sort=Numero di produzione") | Pages = mw.smw.ask(InstanceText .. "|?Personaggio|order=asc|sort=Numero di produzione") | ||
if Pages == nil then | if Pages == nil then | ||
return "''Nessun risultato''" | return "''Nessun risultato'' (<code>" .. mw.text.nowiki(InstanceText) .. "</code>, )" | ||
else | else | ||
--local myResult = "" | --local myResult = "" | ||
Riga 166: | Riga 220: | ||
if type(data) == 'table' then | if type(data) == 'table' then | ||
for _, Character in pairs(data) do | for _, Character in pairs(data) do | ||
if Characters[ | if Characters[Character] == nil then | ||
table.insert(Characters, | --table.insert(Characters, Character) | ||
end | end | ||
end | end | ||
else | else | ||
-- This should never happens | |||
table.insert(Characters, "NEXT ONE ->") | |||
if Characters[data] == nil then | if Characters[data] == nil then | ||
table.insert(Characters, data) | table.insert(Characters, data) | ||
Riga 179: | Riga 235: | ||
end | end | ||
end | end | ||
]==] | |||
NewPages = mw.smw.getQueryResult(InstanceText .. "|?Personaggio|limit=500|order=asc|sort=Numero di produzione") | |||
for _, Episode in ipairs(NewPages.results) do | |||
for _, Character in ipairs(Episode.printouts.Personaggio) do | |||
local CharText = Character.fulltext | |||
if not Characters[CharText] then | |||
table.insert(Characters, CharText) | |||
Characters[CharText] = true | |||
end | |||
end | |||
end | |||
table.sort(Characters) | |||
if type(Characters) == 'table' and Characters ~= nil then | if type(Characters) == 'table' and Characters ~= nil then | ||
for _, Page in ipairs(Characters) do | |||
return #Characters | table.insert(PagesList, Page) | ||
end | |||
return p.RecurringList(PagesList, Series, 3) | |||
--return #Characters .. " - " .. #Characters .. " - " .. table.concat(PagesList, ", ") | |||
else | else | ||
return "No table" | return "No table" | ||
Riga 193: | Riga 268: | ||
-- @param Pages Table containing characters' pages names | -- @param Pages Table containing characters' pages names | ||
-- @param Series String with name of the Series | -- @param Series String with name of the Series | ||
-- @param[opt=1] MinOccurr Integer with minimum value of occurencies | |||
-- @return String Bullet list of characters and episodes | -- @return String Bullet list of characters and episodes | ||
function p.RecurringList(Pages, Series) | function p.RecurringList(Pages, Series, MinOccurr) | ||
local Results = {} | local Results = {} | ||
if not MinOccurr or MinOccurr < 1 then | |||
MinOccurr = 1 | |||
end | |||
if type(Pages) == "table" then | if type(Pages) == "table" then | ||
Riga 207: | Riga 286: | ||
--Count = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|format=count') | --Count = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|format=count') | ||
--Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc') | --Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc') | ||
Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page .. ']]|sort=Numero di produzione|order=asc') | Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page .. ']]|limit=100|sort=Numero di produzione|order=asc') | ||
if (Episodes ~= nil) and (#Episodes > | if (Episodes ~= nil) and (#Episodes > MinOccurr - 1) then | ||
--[=[ | --[=[ | ||
Episodes = mw.smw.getQueryResult('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc') | Episodes = mw.smw.getQueryResult('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc') | ||
Riga 230: | Riga 309: | ||
end | end | ||
table.insert(Results, "* '''[[" .. Page .. "]]''' (" .. #Episodes .. "): " .. table.concat(List, ", ")) | table.insert(Results, "* '''[[" .. Page .. "]]''' (" .. #Episodes .. "): " .. table.concat(List, ", ")) | ||
else | |||
-- Episode is NULL or number of episodes is LESS the set value | |||
--table.insert(Results, "* NULL or ZERO Episodes - " .. mw.text.nowiki('[[Serie::' .. Series .. ']][[Personaggio::' .. Page .. ']]|sort=Numero di produzione|order=asc')) | |||
end | end | ||
end | end |