Difference between pages "Module:Reporter" and "File:LevelLimitAreaB-GX06-EN-VG-info.png"

From Yugipedia
(Difference between pages)
Jump to: navigation, search
(A less flexible, but more standardized version of InfoWrapper. This is probably better for consistency and code re-use.)
 
 
Line 1: Line 1:
-- <pre>
+
== Summary ==
--[=[Doc
+
Importing file
@module Reporter
 
@description Creates an object to store module info.
 
@author [[User:Becasita]]
 
@contact [[User talk:Becasita]]
 
]=]
 
 
 
local mwHtmlCreate = mw.html.create
 
 
 
--[[Doc
 
@class Reporter
 
@description Stores and provides an interface to manage module info.
 
@exportable
 
]]
 
local Reporter = {} -- TODO: check if it's efficient enough (html library vs raw strings)
 
Reporter.__index = Reporter
 
Reporter.__class = Reporter
 
 
 
--[[Doc
 
@function Reporter new
 
@description Initializes an instance of `Reporter`.
 
@return {Reporter} New instance of `Reporter`.
 
]]
 
function Reporter.new( title )
 
local data = { -- TODO: use local references as fields?
 
_categories = {},
 
_warnings  = {},
 
_errors    = {},
 
}
 
 
 
Reporter.setTitle( data, title )
 
 
 
return setmetatable( data, Reporter )
 
end
 
 
 
--[[Doc
 
@method Reporter setTitle
 
@description Changes the instance title.
 
@parameter {string|nil} title The new title. If `nil`, the empty string is used.
 
@return {Reporter} `self`
 
]]
 
function Reporter:setTitle( title )
 
self._title = title ~= nil and tostring( title ) or '' -- TODO: default to better name? Escape title? Accept nil to avoid default category?
 
 
 
return self
 
end
 
 
 
--[[Doc
 
@method Reporter getTitle
 
@description Gets the instance title.
 
@return {string} The instance title.
 
]]
 
function Reporter:getTitle()
 
return self._title
 
end
 
 
 
--[[Doc
 
@method Reporter addCategory
 
@description Stores a new category.
 
@parameter {string} category The category name.
 
@parameter {string|nil} sortkey The sortkey for this category.
 
@return {Reporter} `self`
 
]]
 
function Reporter:addCategory( category, sortkey )
 
table.insert(
 
self._categories,
 
category and { category, sortkey }
 
)
 
 
 
return self
 
end
 
 
 
--[[Doc
 
@method Reporter addWarning
 
@description Stores a new warning.
 
@parameter {string} message The warning message.
 
@return {Reporter} `self`.
 
]]
 
function Reporter:addWarning( message )
 
self._warnings.exists = true
 
 
 
table.insert( self._warnings, message )
 
 
 
return self
 
end
 
 
 
--[[Doc
 
@method Reporter error
 
@description Stores a new error.
 
@parameter {string} message The error message.
 
@return {Reporter} `self`.
 
]]
 
function Reporter:addError( message )
 
self._errors.exists = true
 
 
 
table.insert( self._errors, message )
 
 
 
return self
 
end
 
 
 
local function formatCategory( name, sortkey )
 
return ( sortkey
 
and table.concat{
 
'[[Category:', name, '|', sortkey, ']]'
 
}
 
or table.concat{
 
'[[Category:', name, ']]'
 
}
 
)
 
end
 
 
 
--[[Doc
 
@method Reporter dumpCategories
 
]]
 
local function dumpCategories( self )
 
local categories = {
 
(
 
self._warnings.exists
 
or
 
self._errors.exists
 
) and table.concat{
 
'[[Category:((', self._title, ')) transclusions to be checked]]'
 
},
 
}
 
 
 
for index, categoryPair in ipairs( self._categories ) do
 
table.insert( categories, formatCategory( categoryPair[ 1 ], categoryPair[ 2 ] ) )
 
end
 
 
 
return table.concat( categories )
 
end
 
 
 
--[[Doc
 
@function dumpWarnings
 
]]
 
local function dumpWarnings( self )
 
local container = mwHtmlCreate( 'div' )
 
:addClass( 'reporter__warnings' )
 
:tag( 'ul' )
 
 
 
for _, warning in ipairs( self._warnings ) do
 
container:node(
 
tostring( mwHtmlCreate( 'li' )
 
:wikitext( warning )
 
)
 
)
 
end
 
 
 
return tostring( container:allDone() )
 
end
 
 
 
--[[Doc
 
@function dumpErrors
 
]]
 
local function dumpErrors( self )
 
local container = mwHtmlCreate( 'div' )
 
:addClass( 'reporter__errors' )
 
:tag( 'ul' )
 
 
 
for _, err in ipairs( self._errors ) do
 
container:node(
 
tostring( mwHtmlCreate( 'li' )
 
:wikitext( err )
 
)
 
)
 
end
 
 
 
return tostring( container:allDone() )
 
end
 
 
 
function Reporter:dump()
 
return table.concat{
 
'<div class="reporter">',
 
dumpCategories( self ),
 
self._warnings.exists and dumpWarnings( self ) or '',
 
self._errors.exists and dumpErrors( self ) or '',
 
'</div>',
 
}
 
end
 
 
 
--[=[Doc
 
@exports The `Reporter` class constructor (`new`).
 
@see [[#Reporter.new]]
 
]=]
 
return setmetatable( Reporter, {
 
__call = function( t, ... )
 
assert(
 
t == Reporter,
 
'Cannot apply Reporter constructor except to itself'
 
)
 
 
 
return Reporter.new( ... )
 
end
 
} )
 
-- </pre>
 

Latest revision as of 17:33, 29 March 2023

Summary[edit]

Importing file