Module:WikiProjectBanner/Row
MyWikiBiz, Author Your Legacy — Saturday December 28, 2024
Jump to navigationJump to searchDocumentation for this module may be created at Module:WikiProjectBanner/Row/doc
------------------------------------------------------------------------------- -- Row class for Module:WikiProjectBanner -- -- -- -- This class is a parent class for all WikiProject banner rows, e.g. -- -- quality ratings, importance ratings, task forces, notices and requests. -- ------------------------------------------------------------------------------- -- Load required modules. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType -- Lazily load modules we might not need. local mShared local Row = {} Row.__index = Row function Row.new(args, bannerData, cfg, rowCfg) -- Validate the input. checkType('Row.new', 1, args, 'table') checkType('Row.new', 2, bannerData, 'table') checkType('Row.new', 3, cfg, 'table') checkType('Row.new', 4, rowCfg, 'table', true) -- Create the object. local obj = {} setmetatable(obj, Row) -- Set the data we were passed. obj.args = args obj.bannerData = bannerData obj.cfg = cfg obj.rowCfg = rowCfg or {} -- Define the object structure. obj.categories = {} return obj end function Row:isActive() -- To be used only by hooks. mShared = mShared or require('Module:WikiProjectBanner/shared') return mShared.isActiveRow( self.args, self.bannerData, self.cfg, self.rowCfg ) end function Row:_setField(field, val, options) options = options or {} local valType = type(val) if valType == 'function' then val = val{ args = self.args, bannerData = self.bannerData, cfg = self.cfg, rowCfg = self.rowCfg } valType = type(val) end if valType == 'string' then self[field] = val elseif val ~= nil then error(string.format( 'the %s value must be a string (received %s)', field, valType ), 3) end self[field .. 'Style'] = options.style self[field .. 'Class'] = options.class end function Row:setIcon(...) self:_setField('icon', ...) end function Row:setText(...) self:_setField('text', ...) end function Row:addCategory(cat) table.insert(self.categories, cat) end function Row:exportHtml() local row = mw.html.create('tr') row :tag('td') :addClass(self.iconClass) :css(self.iconStyle or {}) :wikitext(self.icon) :done() :tag('td') :addClass('mbox-text') :addClass(self.textClass) :attr('colspan', '2') :css(self.textStyle or {}) :wikitext(self.text) return row end function Row:exportCategories() return self.categories end return Row