Kërceni tek përmbajtja

Moduli:CS1 charts

Page semi-protected
Nga Wikipedia, enciklopedia e lirë
--[[--------------------------< 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,
	}