Moduli:CS1 charts
Pamja
--[[--------------------------< G R A P H E X P E R I M E N T >----------------------------------------------
TODO: when a category is empty, is there any need to graph it?
TODO: provide a switch between miant cat charting and error cat charting
]]
local cfg = mw.loadData ('Moduli:Citation/CS1/Configuration');
--[[--------------------------< M A I N T _ C A T S _ T >------------------------------------------------------
sequence table of maint cats. Each value is the maint cat's key in Module:Citation/CS1/Configuration <error_conditions>
k/v table.
some cats have subcategories so those categories aren't listed in <error_conditions>. For those categories not listed
in <error_conditions>, provide the category name without namespace prefix, and include a matching entry in subcats_t
that holds a sequence table of the category's subcats.
]]
local maint_cats_t = { -- categories are listed here in the order in which they are displayed
'maint_unfit', -- Mirëmbajtja CS1: Adresë e papërshtatshme
'maint_archived_copy', -- Mirëmbajtja CS1: Archived copy si titull
'maint_bot_unknown', -- Mirëmbajtja CS1: BOT: gjendja e adresës origjinale është e panjohur
'maint_untitled', -- Mirëmbajtja CS1: Botim periodik i patitulluar
'maint_ref_duplicates_default', -- Mirëmbajtja CS1: Citimi referon vetveten
'maint_date_year', -- Mirëmbajtja CS1: Data dhe viti
'maint_doi_inactive', -- Mirëmbajtja CS1: DOI joaktive
'maint_pmc_embargo', -- Mirëmbajtja CS1: Embargo PMC ka skaduar
'Mirëmbajtja CS1: Emra shifrorë', -- has subcats with assembled named so this cat not in cfg.error_conditions
'Mirëmbajtja CS1: Emra të shumëfishtë', -- has subcats with assembled named so this cat not in cfg.error_conditions
'maint_others', -- Mirëmbajtja CS1: Është përdorur gabimisht parametri i të tjerëve
'maint_others_avm', -- Mirëmbajtja CS1: Është përdorur gabimisht parametri i të tjerëve te citimet audiovizuale
'maint_authors', -- Mirëmbajtja CS1: Është përdorur parametri i autorëve
'maint_ref_harv', -- Mirëmbajtja CS1: Është përdorur ref=harv
'maint_date_format', -- Mirëmbajtja CS1: Formati i datës
'maint_jfm_format', -- Mirëmbajtja CS1: Formati JFM
'maint_mr_format', -- Mirëmbajtja CS1: Formati MR
'maint_pmc_format', -- Mirëmbajtja CS1: Formati PMC
'maint_doi_ignore', -- Mirëmbajtja CS1: Gabime DOI të injoruara
'maint_isbn_ignore', -- Mirëmbajtja CS1: Gabime ISBN të injoruara
'maint_issn_ignore', -- Mirëmbajtja CS1: Gabime ISSN të injoruara
'maint_unknown_lang', -- Mirëmbajtja CS1: Gjuhë e panjohur
'maint_postscript', -- Mirëmbajtja CS1: Passhkrimi
'maint_extra_punct', -- Mirëmbajtja CS1: Pikësim shtesë
'Mirëmbajtja CS1: Tekst shtesë', -- has subcats with assembled named so this cat not in cfg.error_conditions
'maint_location', -- Mirëmbajtja CS1: Vendodhja
'maint_zbl', -- Mirëmbajtja CS1: ZBL
}
--[[--------------------------< E R R O R _ C A T S _ T >------------------------------------------------------
sequence table of error cats. Each value is the error cat's key in Module:Citation/CS1/Configuration <error_conditions>
k/v table.
]]
local error_cats_t = { -- categories are listed here in the order in which they are displayed
'err_bad_url', -- Gabime CS1: Adresa
'err_archive_url', -- Gabime CS1: Adresa e arkivimit
'err_bare_url_missing_title', -- Gabime CS1: Adresë e zhveshur
'err_bad_arxiv', -- Gabime CS1: arXiv
'err_bad_asin', -- Gabime CS1: ASIN
'err_bad_asin_tld', -- Gabime CS1: ASIN TLD
'err_bad_bibcode', -- Gabime CS1: bibcode
'err_bad_biorxiv', -- Gabime CS1: bioRxiv
'err_empty_citation', -- Gabime CS1: Burim bosh
'err_bad_citeseerx', -- Gabime CS1: citeseerx
'err_bad_date', -- Gabime CS1: Datat
'err_accessdate_missing_url', -- Gabime CS1: Datë aksesimi pa adresë
'err_bad_doi', -- Gabime CS1: DOI
'err_embargo_missing_pmc', -- Gabime CS1: Embargo PMC
'err_format_missing_url', -- Gabime CS1: Format pa adresë
'err_apostrophe_markup', -- Gabime CS1: Formatimi
'err_bad_hdl', -- Gabime CS1: HDL
'err_bad_isbn', -- Gabime CS1: ISBN
'err_bad_ismn', -- Gabime CS1: ISMN
'err_bad_issn', -- Gabime CS1: ISSN
'err_chapter_ignored', -- Gabime CS1: Janë injoruar kapitujt
'err_bad_jfm', -- Gabime CS1: JFM
'err_bad_jstor', -- Gabime CS1: JSTOR
'err_class_ignored', -- Gabime CS1: klasa
'err_wikilink_in_url', -- Gabime CS1: Konflikt URL-wikilink
'err_contributor_ignored', -- Gabime CS1: kontribuesi
'err_bad_lccn', -- Gabime CS1: LCCN
'err_param_has_ext_link', -- Gabime CS1: Lidhjet e jashtme
'err_bad_usenet_id', -- Gabime CS1: message-id
'err_bad_mr', -- Gabime CS1: MR
'err_cite_web_url', -- Gabime CS1: Mungon adresa
'err_missing_periodical', -- Gabime CS1: Mungon botimi periodik
'err_missing_name', -- Gabime CS1: Mungon emri
'err_citation_missing_title', -- Gabime CS1: Mungon titulli
'err_missing_pipe', -- Gabime CS1: Mungon vija ndarëse
'err_bad_oclc', -- Gabime CS1: OCLC
'err_bad_ol', -- Gabime CS1: OL
'err_bad_osti', -- Gabime CS1: OSTI
'err_text_ignored', -- Gabime CS1: Parametra të pa emëruar
'err_parameter_ignored', -- Gabime CS1: Parametra të palejuar
'err_param_unknown_empty', -- Gabime CS1: Parametra të panjohur bosh
'err_redundant_parameters', -- Gabime CS1: Parametra të tepërt
'err_deprecated_params', -- Gabime CS1: Parametra të vjetëruar
'err_script_parameter', -- Gabime CS1: Parametrat script
'err_disp_name', -- Gabime CS1: Parametri display
'err_param_access_requires_param', -- Gabime CS1: parametri i aksesimit
'err_bad_paramlink', -- Gabime CS1: parametri i lidhjes
'err_etal', -- Gabime CS1: Përdorim i gabuar i et al.
'err_bad_pmc', -- Gabime CS1: PMC
'err_bad_pmid', -- Gabime CS1: PMID
'err_bad_rfc', -- Gabime CS1: RFC
'err_bad_s2cid', -- Gabime CS1: S2CID
'err_bad_sbn', -- Gabime CS1: SBN
'err_invisible_char', -- Gabime CS1: simbol i padukshëm
'err_ssrn_missing', -- Gabime CS1: SSRN
'err_vancouver', -- Gabime CS1: Stili Vankuver
'err_extra_text_edition', -- Gabime CS1: Tekst shtesë: Botimi
'err_extra_text_pages', -- Gabime CS1: Tekst shtesë: Faqet
'err_extra_text_issue', -- Gabime CS1: Tekst shtesë: Numri
'err_extra_text_volume', -- Gabime CS1: Tekst shtesë: Vëllimi
'err_generic_title', -- Gabime CS1: Titull i përgjithshëm
'err_trans_missing_title', -- Gabime CS1: titull i përkthyer
'err_invalid_param_val', -- Gabime CS1: Vlerë e palejuar parametri
'err_bad_zbl', -- Gabime CS1: ZBL
}
--[[--------------------------< S U B C A T S _ T >------------------------------------------------------------
some maint and error cats have subcategories. The subcat names are often dynamically created so the parent categories
don't have entries in Module:Citation/CS1/Configuration <error_conditions>.
<subcats_t> is a k/v table where k is the parent category name and v is a sequence table of the parent's subcategory
names (all without namespace prefix)
]]
local subcats_t = {
['Mirëmbajtja CS1: Emra shifrorë'] = { -- subcats of Mirëmbajtja CS1: Emra shifrorë
'Mirëmbajtja CS1: Emra shifrorë: lista e autorëve',
'Mirëmbajtja CS1: Emra shifrorë: lista e intervistuesve',
'Mirëmbajtja CS1: Emra shifrorë: lista e kontribuesve',
'Mirëmbajtja CS1: Emra shifrorë: lista e përkthyesve',
'Mirëmbajtja CS1: Emra shifrorë: lista e redaktorëve',
},
['Mirëmbajtja CS1: Emra të shumëfishtë'] = { -- subcats of Mirëmbajtja CS1: Emra të shumëfishtë
'Mirëmbajtja CS1: Emra të shumëfishtë: lista e autorëve',
'Mirëmbajtja CS1: Emra të shumëfishtë: lista e intervistuesve',
'Mirëmbajtja CS1: Emra të shumëfishtë: lista e kontribuesve',
'Mirëmbajtja CS1: Emra të shumëfishtë: lista e përkthyesve',
'Mirëmbajtja CS1: Emra të shumëfishtë: lista e redaktorëve',
},
['Mirëmbajtja CS1: Tekst shtesë'] = { -- subcats of Mirëmbajtja CS1: Tekst shtesë
'Mirëmbajtja CS1: Tekst shtesë: lista e autorëve',
'Mirëmbajtja CS1: Tekst shtesë: lista e intervistuesve',
'Mirëmbajtja CS1: Tekst shtesë: lista e kontribuesve',
'Mirëmbajtja CS1: Tekst shtesë: lista e përkthyesve',
'Mirëmbajtja CS1: Tekst shtesë: lista e redaktorëve',
},
['Gabime CS1: Tekst shtesë'] = { -- subcats of Gabime CS1: Tekst shtesë; these are charted separately
'Gabime CS1: Tekst shtesë: Botimi',
'Gabime CS1: Tekst shtesë: Faqet',
'Gabime CS1: Tekst shtesë: Numri',
'Gabime CS1: Tekst shtesë: Vëllimi',
}
}
local bar_chart_delimiter = ';'; -- for |delimiter=
local bar_chart_units_suffix = '_faqe'; -- for |units suffix=
local page_title = mw.title.getCurrentTitle().prefixedText; -- namespace and name
local bar_chart_category_title = 'Mirëmbajtja CS1'; -- name without namespace
local bar_chart_x_legends = (page_title == ('Kategoria:' .. bar_chart_category_title)) and bar_chart_category_title or table.concat ({'[[:Kategoria:', bar_chart_category_title, '|', bar_chart_category_title, ']]'});
--[[--------------------------< B A R _ C H A R T _ C O L O R S >----------------------------------------------
these colors from Stampa:Grafiku i kategorive të gabimeve CS1 (64 colors)
]]
local bar_chart_colors_t = {
'Red',
'GreenYellow',
'SlateBlue',
'Silver',
'Maroon',
'Yellow',
'Olive',
'Lime',
'Green',
'Brown',
'Teal',
'Blue',
'Navy',
'Fuchsia',
'Purple',
'ForestGreen',
'Tomato',
'LightSeaGreen',
'RosyBrown',
'DarkOliveGreen',
'MediumVioletRed',
'Olivedrab',
'Hotpink',
'Indigo',
'Gold',
'LawnGreen',
'Peru',
'BlueViolet',
'OrangeRed',
'RoyalBlue',
'DimGrey',
'Chartreuse',
'Chocolate',
'Orange',
'Plum',
'IndianRed',
'MediumAquamarine',
'Tan',
'LightSalmon',
'LightSlategrey',
'Magenta',
'Firebrick',
'DarkGoldenRod',
'SpringGreen',
'Khaki',
'YellowGreen',
'DarkOrange',
'LightCoral',
'DarkSlateGray',
'Crimson',
'SteelBlue',
'MediumSeaGreen',
'DeepPink',
'LightSkyBlue',
'Thistle',
'BlanchedAlmond',
'Burlywood',
'DarkViolet',
'LimeGreen',
'OldLace',
'Black',
'Palevioletred',
'Lightsteelblue',
'Moccasin',
}
--[[local bar_chart_colors_t = {
'Silver',
'Gray',
'Black',
'Red',
'Maroon',
'Yellow',
'Olive',
'Lime',
'Green',
'Lightskyblue',
'Teal',
'Blue',
'Navy',
'Orange',
'Purple',
'Tomato',
'LightSeaGreen',
'RosyBrown',
'DarkOliveGreen',
'MediumVioletRed',
'Orange',
'Violet',
'Brown',
'Darkslategrey',
'Forestgreen',
'Gold',
'Maroon'
}
]]
--[[--------------------------< S U B C A T _ D A T A _ F E T C H >--------------------------------------------
return the total number of pages, files, and subcats in a named category's (<cat>) subcategories; when no subcats
listed in <subcats_t>, returns 0
]]
local function subcat_data_fetch (cat)
local page_count = 0;
if subcats_t[cat] then -- if this category has listed subcats
local pages_in_cat_t = {};
for i, subcat in ipairs (subcats_t[cat]) do -- for each subcat
pages_in_cat_t = mw.site.stats.pagesInCategory (subcat, '*'); -- get the various counts and
page_count = page_count + pages_in_cat_t.files + pages_in_cat_t.pages + pages_in_cat_t.subcats; -- tally
end
end
return page_count;
end
--[[--------------------------< G R A P H _ P A R A M S _ C R E A T E >----------------------------------------
]]
local function graph_params_create (frame)
local page_counts_t = {};
local subcat_counts_t = {};
local cat_names_t = {};
local cats_t = (('maint' == frame.args[1]) and maint_cats_t) or (('error' == frame.args[1]) and error_cats_t) or maint_cats_t;
for i, cat in ipairs (cats_t) do
local pages_in_cat_t = {};
if cfg.error_conditions[cat] then
cat = cfg.error_conditions[cat].category; -- fetch the category name from Module:Citation/CS1/Configuration; use plaintext cat else
end
cat_names_t[i] = cat; -- save a copy of the category name
pages_in_cat_t = mw.site.stats.pagesInCategory (cat, '*'); -- get the table of counts
if 0 ~= subcat_data_fetch (cat) then
page_counts_t[i] = pages_in_cat_t.files + pages_in_cat_t.pages + subcat_data_fetch (cat); -- don't include pages_in_cat_t.subcats in tally
subcat_counts_t[i] = pages_in_cat_t.subcats; -- but remember for later annotation
else
page_counts_t[i] = pages_in_cat_t.files + pages_in_cat_t.pages; -- there are no subcats so don't bother
end
end
local out = {'chart', 'bar chart'}; -- init for #invoke parser function call with Module:Chart and function barChar()
out.delimiter = bar_chart_delimiter; -- |delimiter=
out['units suffix'] = bar_chart_units_suffix; -- |units suffix=
local tail;
local group_names_t = {};
local colors_t = {};
local j = 0; -- indexer for cats that that are not empty
for i, v in ipairs (cats_t) do
if 0 ~= page_counts_t[i] then
j = j + 1; -- bump the indexer
out['group ' .. j] = page_counts_t[i]; -- add |group 1= to |group n= pararameters
if subcat_counts_t[i] then -- if this cat has subcats
tail = table.concat ({' faqe nga ', subcat_counts_t[i], ' nënkategori'}) -- modify the group name tail
else -- here when no subcats
tail = ' faqe'; -- standard group name tail
end
out['tooltip ' .. j] = table.concat ({cat_names_t[i], ' ', page_counts_t[i], tail}); -- add |tooltip 1= to |tooltip n= pararameters
table.insert (group_names_t, table.concat ({'[[:Kategoria:', cat_names_t[i], '|', cat_names_t[i], ']] ', page_counts_t[i], tail}));
end
end
out['group names'] = table.concat (group_names_t, bar_chart_delimiter); -- add |group names= parameter
out['colors'] = table.concat (bar_chart_colors_t, bar_chart_delimiter, 1, j); -- add |colors= parameter
out['x legends'] = table.concat ({bar_chart_x_legends, ' (', #page_counts_t-j, ' kategori bosh janë fshehur)'}); -- add |x legends=
return frame:callParserFunction ('#invoke', out); -- {{#invoke:chart|bar chart|args...}}
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return {
graph_params_create = graph_params_create,
}