Module:Protect: Difference between revisions

    From Nonbinary Wiki
    (New module)
     
    m (5 revisions imported from wikipedia:Module:Protect)
     
    (4 intermediate revisions by 3 users not shown)
    Line 1: Line 1:
    local function wrapMessage(errMessage)
    local function processResult(options, success, ...)
    return '<span class="error">' .. errMessage .. '</span>'
    end
     
    local defaultFormat = wrapMessage('Error: %s')
     
    local function processResult(errFormat, success, ...)
    if not success then
    if not success then
    return string.format(errFormat, tostring(... or '(no message)'))
    local message = tostring(... or '(no message)')
    if options.removeLocation then
    message = string.gsub(message, '^Module:[^:]+:%d+: ', '', 1)
    end
    return string.format(options.errFormat, message)
    end
    end
    return ...
    return ...
    end
    end


    local function protect(func, errFormat, raw)
    local function protect(func, errFormat, options)
    if not errFormat then
    if type(errFormat) == 'table' then
    errFormat = defaultFormat
    options = options or errFormat
    elseif not raw then
    errFormat = nil
    errFormat = wrapMessage(errFormat)
    end
    options = mw.clone(options) or {}
    options.errFormat = errFormat or options.errFormat or 'Error: %s'
    if not options.raw then
    options.errFormat = '<strong class="error">' .. options.errFormat .. '</strong>'
    end
    end
    options.removeLocation = options.removeLocation == nil or options.removeLocation
    return function (...)
    return function (...)
    return processResult(errFormat, pcall(func, ...))
    return processResult(options, pcall(func, ...))
    end
    end
    end
    end


    return protect
    return protect

    Latest revision as of 11:59, 21 May 2021

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

    local function processResult(options, success, ...)
    	if not success then
    		local message = tostring(... or '(no message)')
    		if options.removeLocation then
    			message = string.gsub(message, '^Module:[^:]+:%d+: ', '', 1)
    		end
    		return string.format(options.errFormat, message)
    	end
    	return ...
    end
    
    local function protect(func, errFormat, options)
    	if type(errFormat) == 'table' then
    		options = options or errFormat
    		errFormat = nil
    	end
    	options = mw.clone(options) or {}
    	options.errFormat = errFormat or options.errFormat or 'Error: %s'
    	if not options.raw then
    		options.errFormat = '<strong class="error">' .. options.errFormat .. '</strong>'
    	end
    	options.removeLocation = options.removeLocation == nil or options.removeLocation
    	
    	return function (...)
    		return processResult(options, pcall(func, ...))
    	end
    end
    
    return protect