Módulo:LinkSkype

De Wikiviajes, la guía libre de viajes
Icono de documentación de módulo Documentación del módulo[ver] [editar] [historial] [purgar]

Version check

Designación de la versión en Wikidata: 2023-12-08 Ok!

Uso

This module provides links to Skype addresses.
Esta documentación está transcluida desde Módulo:LinkSkype/doc.
Los editores pueden experimentar en la zona de pruebas (crear) y en los casos de prueba (crear) del módulo.
Por favor, añade las categorías en la subpágina de documentación. Subpáginas de este módulo.

-- module variable and administration
local ls = {
	moduleInterface = {
		suite  = 'LinkSkype',
		serial = '2023-12-08',
		item   = 65157314
	}
}

-- module import
-- require( 'strict' )
local li = require( 'Module:Link utilities/i18n' )
local lu = require( 'Module:Link utilities' )

-- check single skype name
function ls.isSkypeName( s )
	if not s or type( s ) ~= 'string' then
		return 0
	end

	local user = s
	local param
	local q = s:find( '?', 1, true )
	if q then
		user = s:sub( 1, q - 1 )
		param = s:sub( q + 1, #s )
		if not li.params[ param ] then
			return 0
		end
	end
	if #user > 32 or #user < 6 then
		return 0
	end
	if not user:match( "^%l[%l%d%.,_%-]+$" ) then
		return 0
	end
	return 1
end

function ls.SkypeLink( m, isDemo )
	m = mw.text.trim( m )
	if m == '' then -- empty string
		return ''
	end
	local catPrefix = '[[Category:'
	if isDemo then
		catPrefix = ' [[:Category:'
	end

	local comment = ''
	local t
	m, comment = lu.extractComment( m )

	m = m:gsub( 'skype:', '' )
	if ls.isSkypeName( m ) > 0 then
		t = '<span class="listing-skype-link">' .. m ..'</span>'
		-- skype: link is performed by a JavaSript: MediaWiki:VCard.js
	else
		t = m .. catPrefix .. li.categories.invalidSkype
	end
	if comment ~= '' then
		t = t .. ' ' .. comment
	end
	return t
end

function ls.linkSkypeSet( args )
	args.skype   = args.skype or args[ 1 ] or ''
	if args.skype == '' then
		return ''
	end

	local ns     = mw.title.getCurrentTitle().namespace
	local isDemo = ns == 10 or ns == 828

	-- split separate Skype names
	local items = lu.splitItems( args.skype, li.delimiters, ';' )

	-- analyse Skype names
	local i = 0
	local s
	local result = ''

	for j = 1, #items, 1 do
		s = ls.SkypeLink( items[ j ], isDemo )
		if s ~= '' then
			if result == '' then
				result = s
			else
				if i == li.addSkype then
					result = result .. '<span class="listing-add-contact">'
				end
				result = result .. li.texts.comma .. s
			end
			i = i + 1
		end
	end
	if i > li.addSkype then
		result = result .. '</span>'
	end
	return result
end

-- #invoke call
function ls.linkSkype( frame )
	return ls.linkSkypeSet( frame.args )
end

-- template call
function ls.linkSkypeTemplate( frame )
	return ls.linkSkypeSet( frame:getParent().args )
end

return ls