Jump to content

Module:TopCategories

From Pharmacopedia

Documentation for this module may be created at Module:TopCategories/doc

local p = {}

local categories = {
	'Addiction Medicine', 'Amphetamines', 'Anesthetics', 'Anti-Dementia Medicines',
	'Anticonvulsants / Antiepileptics', 'Antidepressants', 'Antihistamines',
	'Antiparkinsonian Medicines', 'Antipsychotics / Neuroleptics',
	'Anxiolytics & Sedative-Hypnotics', 'Arylcyclohexylamines', 'Barbiturates',
	'Benzodiazepines', 'Cannabinoids', 'Cathinones',
	'Classical Psychedelics (Serotonergic)', 'Deliriants', 'Dissociatives',
	'Empathogens / Entactogens', 'Ergotamines',
	'Eugeroics (Wakefulness-Promoting Agents)', 'GABAergics', 'Local Anesthetics',
	'Lysergamides', 'Methylphenidates (Phenidates)', 'Migraine Medicines',
	'Monoamine Oxidase Inhibitors (MAOIs)', 'Mood Stabilizers',
	'Muscle Relaxants (CNS-acting)', 'NBOMe / NBOH series', 'Natural opioids',
	'Nootropics', 'Opioid Antagonists', 'Opioids', 'Orexin Receptor Antagonists',
	'Phenethylamines', 'Psychedelics', 'Pyrrolidinophenones',
	'Research Materials', 'Second-Generation Antipsychotics (SGAs / Atypicals)',
	'Selective Serotonin Reuptake Inhibitors (SSRIs)', 'Semisynthetic opioids',
	'Serotonin–Norepinephrine Reuptake Inhibitors (SNRIs)',
	'Stimulants & Wake-Promoting Agents', 'Synthetic opioids',
	'Tricyclic Antidepressants (TCAs)', 'Triptans (5-HT1B/1D Agonists)',
	'Tryptamines', 'Xanthines', 'Z-Drugs (Non-Benzodiazepine Hypnotics)',
}

function p.list(frame)
	local counts = {}
	for _, cat in ipairs(categories) do
		local n = mw.site.stats.pagesInCategory(cat, 'pages')
		if n > 0 then
			table.insert(counts, {name = cat, count = n})
		end
	end
	-- Sort descending by count to pick top 10
	table.sort(counts, function(a, b) return a.count > b.count end)
	local top10 = {}
	for i = 1, math.min(10, #counts) do
		table.insert(top10, counts[i])
	end
	-- Re-sort top 10 alphabetically
	table.sort(top10, function(a, b) return a.name < b.name end)
	local lines = {}
	for _, item in ipairs(top10) do
		table.insert(lines, '* [[:Category:' .. item.name .. '|' .. item.name .. ']]')
	end
	return table.concat(lines, '\n')
end

return p