Jump to content

Module:Unsigned: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
clean
fix cmt and better name for variable
 
Line 9: Line 9:
--if nothing is found, returns the empty string
--if nothing is found, returns the empty string
--we search for time and date seperately to allow for a time-less addition of date
--we search for time and date seperately to allow for a time-less addition of date

local currentTestString
--this flag tells us to return an error if we only have a time (no date)
--match() on a nil is a bad thing, so avoid that
--match() on a nil is a bad thing, so avoid that
local sOrBlank = s or ''
local sOrBlank = s or ''
--find the date
currentTestString = mw.ustring.match( sOrBlank, '%d%d? %u%l+ %d%d%d%d', 0 ) or ''
local theDate = mw.ustring.match( sOrBlank, '%d%d? %u%l+ %d%d%d%d', 0 ) or ''

if currentTestString ~= '' then
if theDate ~= '' then
-- we have a date, so process and return accordingly
-- we have a date, so process and return accordingly
local theTime = mw.ustring.match( sOrBlank, '%d%d:%d%d,', 0 ) or ''
local theTime = mw.ustring.match( sOrBlank, '%d%d:%d%d,', 0 ) or ''
if theTime ~= '' then
if theTime ~= '' then
return theTime .. ' ' .. currentTestString .. ' (UTC)'
return theTime .. ' ' .. theDate .. ' (UTC)'
else
else
return currentTestString
return theDate
end
end
else
else

Latest revision as of 00:32, 30 May 2025

local p = {}

local function trim(s)
	return s:gsub("^%s+", ""):gsub("%s+$", ""):gsub("\226\128\142", "")
end

function p.getTimestamp(s)
	--gets the timestamp in the input
	--if nothing is found, returns the empty string
	--we search for time and date seperately to allow for a time-less addition of date

	--match() on a nil is a bad thing, so avoid that
	local sOrBlank = s or ''
	--find the date
	local theDate = mw.ustring.match( sOrBlank, '%d%d? %u%l+ %d%d%d%d', 0 ) or ''

	if theDate ~= '' then
		-- we have a date, so process and return accordingly
		local theTime = mw.ustring.match( sOrBlank, '%d%d:%d%d,', 0 ) or ''
		if theTime ~= '' then
			return theTime .. ' ' .. theDate .. ' (UTC)'
		else
			return theDate
		end
	else
		return ''
	end
end

function p.getUsername(s)
	--gets the username in the input
	--------WARNING--------
	--this method assumes that *everything* besides the timestamp is, in fact, part of the username
	--it does no further username validation
	--if you try putting random garbage in, you **will** get garbage out
	--------YOU HAVE BEEN WARNED--------
	local toReturn = s or ''
	--remove the date
	toReturn = mw.ustring.gsub(toReturn, '%d%d? %u%l+ %d%d%d%d', '', 1) or ''
	--remove the time
	toReturn = mw.ustring.gsub(toReturn, '%d%d:%d%d,?', '', 1) or ''
	--remove (UTC)
	toReturn = mw.ustring.gsub(toReturn, '%(UTC%)', '', 1) or ''
	--concat the empty string to ensure we only return the string and not the number of matches
	return trim(toReturn) .. ''
end

local function makeUnsigned(args)
	local isIP
	local username
	local timestamp
	local toReturn
	
	if args[2] then
		-- we have multiple parameters
		-- so we can be less janky
		timestamp = p.getTimestamp(args[2])
		if timestamp ~= '' then
			username = trim(args[1] or '')
		else
			username = trim(args[2] or '')
			timestamp = args[1]
		end
	else
		-- be very janky; this has a high probability of GIGO-ing
		-- due to the way getUsername is implemented
		username = p.getUsername(args[1])
		timestamp = p.getTimestamp(args[1])
	end
	
	-- error if we cannot find a username
	if username == '' then
		return '<em class="error">Unable to detect username</em>'
	end
	
	-- check if we have an IP address or not
	isIp = require('Module:IPAddress')._isIp(username)
	
	if isIp then
		return mw.getCurrentFrame():expandTemplate{ title = 'unsigned/unregistered', args = { username , timestamp } } 
	else
		return mw.getCurrentFrame():expandTemplate{ title = 'unsigned/registered', args = { username , timestamp } }
	end
end

function p.main(frame)
	local args
	if type(frame.args) == 'table' then
		-- We're being called via #invoke. The args are passed through to the module
		-- from the template page, so use the args that were passed into the template.
		args = require('Module:Arguments').getArgs(frame)
	else
		-- We're being called from another module or from the debug console, so assume
		-- the args are passed in directly.
		args = frame
	end
	return makeUnsigned(args)
end

return p