Module:Citation/CS1/Utilities: Difference between revisions

m>Trappist the monk
No edit summary
 
(14 intermediate revisions by 5 users not shown)
Line 1: Line 1:
require('Module:No globals');
--[[
History of changes since last sync: 2015-12-12
]]
local u = {}


local z = {
local z = {
Line 19: Line 12:
]]
]]


local cfg; -- table of tables imported from slected Module:Citation/CS1/Configuration
local cfg; -- table of tables imported from selected Module:Citation/CS1/Configuration
 
 
--[[--------------------------< H A S _ A C C E P T _ A S _ W R I T T E N >------------------------------------
 
When <str> is wholly wrapped in accept-as-written markup, return <str> without markup and true; return <str> and false else
 
with allow_empty = false, <str> must have at least one character inside the markup
with allow_empty = true, <str> the markup frame can be empty like (()) to distinguish an empty template parameter from the specific condition "has no applicable value" in citation-context.
 
After further evaluation the two cases might be merged at a later stage, but should be kept separated for now.
 
]]
 
local function has_accept_as_written (str, allow_empty)
local count;
if true == allow_empty then
str, count = str:gsub ('^%(%((.*)%)%)$', '%1'); -- allows (()) to be an empty set
else
str, count = str:gsub ('^%(%((.+)%)%)$', '%1');
end
return str, 0 ~= count;
end




Line 25: Line 40:


Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
This function is global because it is called from both this module and from Date validation


]]
]]
local function is_set( var )
 
local function is_set (var)
return not (var == nil or var == '');
return not (var == nil or var == '');
end
end
Line 39: Line 54:
]]
]]


local function in_array( needle, haystack )
local function in_array (needle, haystack)
if needle == nil then
if needle == nil then
return false;
return false;
end
end
for n,v in ipairs( haystack ) do
for n, v in ipairs (haystack) do
if v == needle then
if v == needle then
return n;
return n;
Line 58: Line 73:
]]
]]


local function substitute( msg, args )
local function substitute (msg, args)
return args and mw.message.newRawMessage( msg, args ):plain() or msg;
return args and mw.message.newRawMessage (msg, args):plain() or msg;
end
end


Line 65: Line 80:
--[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------
--[[--------------------------< E R R O R _ C O M M E N T >----------------------------------------------------


Wraps error messages with css markup according to the state of hidden.
Wraps error messages with CSS markup according to the state of hidden.


]]
]]
local function error_comment( content, hidden )
 
return substitute( hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content );
local function error_comment (content, hidden)
return substitute (hidden and cfg.presentation['hidden-error'] or cfg.presentation['visible-error'], content);
end
end




--[[--------------------------< S E T _ E R R O R >--------------------------------------------------------------
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
 
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided (or link and display are the same), returns a wikilink in the form [[L]]; if neither are
provided or link is omitted, returns an empty string.
 
]=]
 
local function make_wikilink (link, display)
if not is_set (link) then return '' end
 
if is_set (display) and link ~= display then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
end
 
 
--[[--------------------------< S E T _ M E S S A G E >----------------------------------------------------------


Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
Sets an error condition and returns the appropriate error message.  The actual placement of the error message in the output is
the responsibility of the calling function.
the responsibility of the calling function.
TODO: change z.error_categories and z.maintenance_cats to have the form cat_name = true; to avoid dups without having to have an extra cat


]]
]]
local function set_error( error_id, arguments, raw, prefix, suffix )
local added_maint_cats = {} -- list of maintenance categories that have been added to z.maintenance_cats; TODO: figure out how to delete this table
local error_state = cfg.error_conditions[ error_id ];
 
local function set_message (error_id, arguments, raw, prefix, suffix)
local error_state = cfg.error_conditions[error_id];
prefix = prefix or "";
prefix = prefix or '';
suffix = suffix or "";
suffix = suffix or '';
if error_state == nil then
if error_state == nil then
error( cfg.messages['undefined_error'] );
error (cfg.messages['undefined_error'] .. ': ' .. error_id); -- because missing error handler in Module:Citation/CS1/Configuration
elseif is_set( error_state.category ) then
 
table.insert( z.error_categories, error_state.category );
elseif is_set (error_state.category) then
if error_state.message then -- when error_state.message defined, this is an error message
table.insert (z.error_categories, error_state.category);
else
if not added_maint_cats[error_id] then
added_maint_cats[error_id] = true; -- note that we've added this category
table.insert (z.maintenance_cats, substitute (error_state.category, arguments)); -- make cat name then add to table