
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:StatsArticoli/man (modifica · cronologia)
Sandbox: Modulo:StatsArticoli/sandbox (modifica · cronologia) · Test: Modulo:StatsArticoli/test (modifica · cronologia · Esegui)
Questo modulo è stato creato per semplificare ( o evitare del tutto) la gestione delle lunghe concatenazioni di {{PAGESINCATEGORY}}
, {{#expr:}}
e {{formatNum:}}
nelle tabelle che riassumono gli articoli e i loro livelli su Wikivoyage. Un esempio lo trovate su questa pagina.
Funzioni
- totalDestinations
- Scopo: Calcola il numero totale di articoli relativi alle destinazioni (vedi Modelli articoli e gerarchia geografica) , considerando tutti i livelli.
- Utilizzo:
{{#invoke:StatsArticoli|totalDestinations}}
: 8 909 - Ritorna: Il numero totale di articoli sulle destinazioni, formattato come numero.
- totalDestinationsByLevel
- Scopo: Calcola il numero totale di articoli relativi alle destinazioni per un specifico livello.
- Parametri:
- livello (stringa): Il livello degli articoli da contare (es. "Abbozzi", "Articoli usabili").
- Utilizzo:
{{#invoke:StatsArticoli|totalDestinationsByLevel|livello=Guide}}
: 437 - Ritorna: Il numero totale di articoli sulle destinazioni per il livello specificato, formattato come numero.
- totalThematicArticles
- Scopo: Calcola il numero totale di articoli tematici, con trattamento speciale per "Frasari" e "Tematiche turistiche" a causa della nomenclatura delle categorie non consistente.
- Utilizzo:
{{#invoke:StatsArticoli|totalThematicArticles}}
: 1 040 - Ritorna: Il numero totale di articoli tematici, formattato come numero.
- totalThematicArticlesByLevel
- Scopo: Calcola il numero totale di articoli tematici per un specifico livello.
- Parametri:
- livello (stringa): Il livello degli articoli da contare.
- Utilizzo:
{{#invoke:StatsArticoli|totalThematicArticlesByLevel|livello=Guide}}
: 42 - Ritorna: Il numero totale di articoli tematici per il livello specificato, formattato come numero.
- percentagePerArticleType
- Scopo: Calcola la percentuale di articoli di un determinato tipo e livello all'interno della loro categoria principale. Può essere usato in combinazine con template come {{BarraMultiCol}}.
- Parametri:
- tipo (stringa): Il tipo degli articoli (es. "Città").
- livello (stringa): Il livello degli articoli (es. "Abbozzi").
- parent (stringa, opzionale): La categoria principale, se diversa dal tipo di articolo.
- Utilizzo:
{{#invoke:StatsArticoli|percentagePerArticleType|tipo=Città|livello=Abbozzi}}
: 70.491 - Ritorna: La percentuale di articoli del tipo e livello specificati all'interno della loro categoria principale, formattata come numero decimale.
- percentageByTypeAndLevel
- Scopo: Calcola la percentuale di articoli di un determinato tipo e livello rispetto al totale degli articoli, sia per le destinazioni che per gli articoli tematici.
- Parametri:
- tipo (stringa): Specifica il tipo di articoli per cui calcolare la percentuale. Deve essere "destinazioni" per gli articoli relativi a luoghi geografici o "tematiche" per gli articoli tematici.
- livello (stringa): Il livello degli articoli per cui calcolare la percentuale (es. "Abbozzi", "Articoli usabili").
- Utilizzo:
{{#invoke:StatsArticoli|percentageByTypeAndLevel|tipo=destinazioni|livello=Abbozzi}}
per calcolare la percentuale di articoli di tipo "destinazioni" al livello "Abbozzi" (74.318%). - Ritorna: La percentuale di articoli del tipo e livello specificati, formattata come numero decimale con tre cifre dopo il punto.
- Note: È importante specificare correttamente i parametri 'tipo' e 'livello' per evitare errori. La funzione restituirà un messaggio di errore se i parametri non sono validi o se il tipo specificato non è tra quelli ammessi ("destinazioni" o "tematiche").
- totalDisambiguation
- Scopo: Calcola il numero totale di pagine di disambiguazione.
- Utilizzo:
{{#invoke:StatsArticoli|totalDisambiguation}}
(2 566) - Ritorna: Il numero totale di pagine di disambiguazione, formattato come numero.
- totalPortals
- Scopo: Calcola il numero totale di portali.
- Utilizzo:
{{#invoke:StatsArticoli|totalPortals}}
(22) - Ritorna: Il numero totale di portali, formattato come numero.
- totalUNESCO
- Scopo: Calcola il numero totale di pagine nella categoria "Liste dei patrimoni mondiali dell'umanità".
- Utilizzo:
{{#invoke:StatsArticoli|totalUNESCO}}
(169) - Ritorna: Il numero totale di pagine nella categoria specificata, formattato come numero.
- grandTotal
- Scopo: Calcola il numero totale di articoli, includendo destinazioni, articoli tematici, pagine di disambiguazione, portali e liste UNESCO.
- Utilizzo:
{{#invoke:StatsArticoli|grandTotal}}
(12 706) - Ritorna: Il numero totale di articoli calcolato, formattato come numero.
- totalUncategorized
- Scopo: Calcola il numero totale di articoli non categorizzati, sottraendo il totale calcolato da `grandTotal` dal numero totale di articoli nel sito.
- Utilizzo:
{{#invoke:StatsArticoli|totalUncategorized}}
(7) - Ritorna: Il numero totale di articoli non categorizzati, formattato come numero.
Esempi per il Debug
Mentre si lavora ai Moduli Lua è possible fare dei test senza dover salvare o utilizzare il modulo su altre pagine del progetto. Lo strumento da usare in questi casi è l'estensione di debug. Qui alcuni esempi:
- Articoli tematici totali per tipo:
=p.totalThematicArticlesByLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili"}})
- Percentuale per tipo di articolo:
=p.percentagePerArticleType(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={tipo="Città", livello="Abbozzi"}})
- Percentuale per tipo e livello:
=p.percentageByTypeAndLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili", tipo="tematiche"}})
Vedi anche
--[[ Module to avoid too long concatentaions of {{PAGESINCATEGORY}}, #expr and formatnum in the table summarizing the articles and their levels in Wikivoyage. Maintainers: User:Nastoshka Version: 1.0.0 Last updated: 2024-02-17 -- Debugging examples: =p.totalDestinations(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={}}) -- ==p.totalDestinationsByLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili"}}) -- =p.percentagePerArticleType(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={tipo="Città", livello="Abbozzi"}}) ]] local p = {} -- -------------------------------- SETUP VARIABLES ------------------------------------ -- Setup variables local destinations = {"Distretto", "Città", "Regione nazionale", "Regione continentale", "Stato", "Continente", "Parco", "Monte", "Sito archeologico", "Massa d'acqua"} local thematicTypes = {"Aeroporto", "Frasario", "Itinerario", "Sentiero", "Tematica"} local levels = {'Abbozzi', 'Articoli usabili', 'Guide', 'Articoli in vetrina', 'Articoli senza livello'} -- -------------------------------- AUX FUNCTIONS ------------------------------------ local function _categoryExists(catName) local title = mw.title.new('Category:' .. catName) return title and title.exists or false end local function getCategoryCount(categoryName, flag) return mw.site.stats.pagesInCategory(categoryName, flag or 'pages') end -- -------------------------------- CALC SUM AND ARTICLE COUNTS ------------------------------------ -- ----------- TOTALS AND SUBTOTALS ------------------------- local function calcSummary(articleTypes, level) local sum = 0 for _, articleType in ipairs(articleTypes) do local catName = articleType .. (level and " - " .. level or "") if _categoryExists(catName) then sum = sum + getCategoryCount(catName, "pages") end end return sum end function p.totalDestinations() local sum = calcSummary(destinations,nil) -- all levels return mw.language.getContentLanguage():formatNum(sum) end function p.totalDestinationsByLevel(frame) local level = frame.args["livello"] if not level or level == '' then error("Per il calcolo delle somme per livello è necessario inserire il parametro con il livello desiderato.") end local sum = calcSummary(destinations,level) return mw.language.getContentLanguage():formatNum(sum) end function p.totalThematicArticles() -- Handling Frasari e Tematiche (purtroppo il nome delle categorie non è consistente qui -- Per i livelli abbiamo come dapertutto "Tematica - Abbozzi", "Tematica - Guide"... -- ma per la categoria generale i nomi sono "Frasari" e "Tematiche turistiche" local sum = calcSummary(thematicTypes,nil) + getCategoryCount("Frasari", "pages") + getCategoryCount("Tematiche turistiche", "pages") return mw.language.getContentLanguage():formatNum(sum) end function p.totalThematicArticlesByLevel(frame) local level = frame.args["livello"] if not level or level == '' then error("Per il calcolo delle somme per livello è necessario inserire il parametro con il livello desiderato.") end local sum = calcSummary(thematicTypes,level) return mw.language.getContentLanguage():formatNum(sum) end function p.totalDisambiguation() local pages = getCategoryCount("Disambigue", "pages") return mw.language.getContentLanguage():formatNum(pages) end function p.totalPortals() local portals = getCategoryCount("Portali", "pages") return mw.language.getContentLanguage():formatNum(portals) end function p.totalUNESCO() local unesco = getCategoryCount("Liste dei patrimoni mondiali dell'umanità", "pages") return mw.language.getContentLanguage():formatNum(unesco) end function p._grandTotal() local total_destinations = calcSummary(destinations,nil) local total_thematic = calcSummary(thematicTypes,nil) + getCategoryCount("Frasari", "pages") + getCategoryCount("Tematiche turistiche", "pages") local total_disambiguation = getCategoryCount("Disambigue", "pages") local total_portals = getCategoryCount("Portali", "pages") local total_unesco = getCategoryCount("Liste dei patrimoni mondiali dell'umanità", "pages") local sum = total_destinations + total_thematic + total_disambiguation + total_portals + total_unesco return sum end function p.grandTotal() local sum = p._grandTotal() return mw.language.getContentLanguage():formatNum(sum) end function p.totalUncategorized() local uncategorized = mw.site.stats.articles - p._grandTotal() return mw.language.getContentLanguage():formatNum(uncategorized) end -- ----------- PERCENTAGES FOR THE COLORED BARS ------------------------- function p.percentagePerArticleType(frame) local articleType = frame.args["tipo"] local level = frame.args["livello"] local parentCat = frame.args["parent"] or articleType -- per i casi in cui la categoria senza livello differisca nel nome da quelle con i livelli local percentage = "0" if not level or not articleType or level == '' or articleType == '' then error("I parametri 'tipo' e 'livello' sono obbligatori.") return percentage end if not _categoryExists(parentCat) then error("La categoria " .. parentCat .. " non esiste.") return percentage end local total = getCategoryCount(parentCat, "pages") local catName = articleType .. " - " .. level if _categoryExists(catName) then local count = getCategoryCount(catName,"pages") percentage = count/total*100 percentage = string.format("%.3f", percentage) end return percentage end function p.percentageByTypeAndLevel(frame) local type = frame.args["tipo"] -- "destinazioni" o "tematiche" local level = frame.args["livello"] local total = 0 local subtotal = 0 local percentage = "0" if not level or not type or level == '' or type == '' then error("I parametri 'tipo' e 'livello' sono obbligatori.") return percentage end if type == "destinazioni" then total = calcSummary(destinations,nil) subtotal = calcSummary(destinations,level) elseif type == "tematiche" then total = calcSummary(thematicTypes,nil) subtotal = calcSummary(thematicTypes,level) else error("Il parametro 'tipo' deve essere 'destinazioni' o 'tematiche'.") return percentage end if total > 0 then percentage = string.format("%.3f", subtotal/total*100) end return percentage end return p