Module:Category manager

From Chalo Chatu, Zambia online encyclopedia

local checkType = require('libraryUtil').checkType local p = {}

--Global strings and forms local defaults = { badCatListFormat = "Bad category list format (key: %s, value: %s)", categoryForm = "", keyedCategoryForm = "", missingNameMsg = "Missing category name" }

--Adds a category to the provided category list; sortKey is optional function p.addCategory(catList, name, sortKey) --Check and normalize parameters checkType('addCategory', 1, catList, 'table') checkType('addCategory', 2, name, 'string') name = mw.text.trim(name) checkType('addCategory', 3, sortKey, 'string', true) if #name == 0 then error(defaults.missingNameMsg, 2) end if sortKey == nil or #sortKey == 0 then sortKey = nil end

--Add category to category list catList[name] = sortKey or true end

--Removes a category from the provided category list function p.removeCategory(catList, name) --Check and normalize parameters checkType('removeCategory', 1, catList, 'table') checkType('removeCategory', 2, name, 'string') name = mw.text.trim(name) if #name == 0 then error(defaults.missingNameMsg, 2) end

--Remove category from category list catList[name] = nil end

--Converts a category list to a string containing its categories as wikitext function p.writeCategoryList(catList, nullify) checkType('removeCategory', 1, catList, 'table') checkType('removeCategory', 2, name, 'boolean', true)

if nullify then return "" end

local constructedList = {} for k, v in pairs(catList) do if ( type(k) ~= "string" or ( (type(v) ~= "boolean" or v == false) and (type(v) ~= "string") ) ) then error( string.format( defaults.badCatListFormat, mw.dumpObject(k), mw.dumpObject(v) ), 2 ) end table.insert( constructedList, (v == true) and string.format(defaults.categoryForm, k) or string.format(defaults.keyedCategoryForm, k, v) ) end return table.concat(constructedList) end

return p