Modul:LinkSkype

Aus Wikivoyage
Zur Navigation springen Zur Suche springen
Template-info.png Dokumentation für das Modul LinkSkype[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Der Modul stellt Funktionen zur Verlinkung von Skype-Adressen bereit.

Versionsbezeichnung auf WikiData: 2019-07-26

Kommentare müssen hinter der Emailadresse in Klammern angefügt werden. Als Trenner für mehrere Skype-Namen kann das Komma nicht eingesetzt werden, da es Bestandteil des Skype-Namens sein könnte. Vielmehr muss das Semikolon als Trenner benutzt werden.

Regeln für einen Skype-Nutzernamen:

  • 6 bis 32 Zeichen,
  • nur ASCII-Kleinbuchstaben, Ziffern, Punkt (.), Komma (,), Bindestrich (-) und Unterstrich (_),
  • erstes Zeichen muss ein Kleinbuchstabe sein.

Wartungskategorie

Beispiele

Text Code Ergebnis
nutzer.name {{#invoke:LinkSkype|linkSkype|nutzer.name}} nutzer.name
nutzer1.name; nutzer2.name {{#invoke:LinkSkype|linkSkype|nutzer1.name; nutzer2.name}} nutzer1.name, nutzer2.name
nutzer1.name, nutzer2.name {{#invoke:LinkSkype|linkSkype|nutzer1.name, nutzer2.name}} nutzer1.name, nutzer2.name Category:Ungültiger Skype-Nutzername
info.name (Information); reserv.name?chat (Reservierung); Anderer.Name {{#invoke:LinkSkype|linkSkype|info.name (Information); reserv.name?chat (Reservierung); Anderer.Name}} info.name (Information), reserv.name?chat (Reservierung), Anderer.Name Category:Ungültiger Skype-Nutzername

Fehlersuche

Im Fehlerfall wird neben der Fehlerkategorie auch ein ausgeblendeter Fehlertext hinter der Email-Adresse ausgegeben, der sich mit einer Stilvorlage anzeigen lässt.

.listing-error
{
    display: inline;
}

Beschreibung der Funktionen

function ls.isSkypeName( s )
s: string;

Die Funktion prüft, ob der Skype-Name s gültig ist.

function ls.SkypeLink( m, args )
m: string;
args: arguments array;

Die Funktion prüft und bereitet die Verlinkung des Skype-Namens m vor. Die eigentliche Verlinkung wird mit dem JavaScript MediaWiki:InitListingTools.js durchgeführt.

function ls.linkSkypeSet( args )
args: arguments array;

Die Funktion spaltet eine Liste von Skype-Namen auf und übergibt jeden einzelnen Namen an ls.SkypeLink.

function ls.linkSkype( frame )
frame: frame object;

Die Funktion stellt die Schnittstelle für einen {{#invoke: ...}}-Aufruf zur Verfügung.

function ls.linkSkypeTemplate( frame )
frame: frame object;

Die Funktion stellt die Schnittstelle für einen Vorlagen-Aufruf zur Verfügung.

Bedeutung der Variablen

  • ls.categories – Array mit gleichnamigen Fehlerausschriften und Kategoriennamen.
  • ls.delimiters – Array mit Mustern für Trenner unterschiedlicher Telefonnummern. Das Komma muss nicht in dieses Array eingetragen werden.
  • ls.addNum – Anzahl der sichtbaren, nicht ausgeblendeten Skype-Links. Die überzähligen Links sind aber im HTML-Quelltext enthalten und lassen mit einer Stilvorlage einblenden.
  • ls.params – Array mit einer Liste der erlaubten Parameter in einem Skype-Link.

Klassenbezeichner

Im HTML-Quelltext werden folgende Klassenbezeichner eingesetzt:

  • listing-error – Klasse der Fehlerausschrift.
  • listing-skype-link – Kennzeichnung des Skype-Links ohne Kommentar.
  • listing-add-contact - Klassenbezeichner ausgeblendeter Skype-Links. Wenn mehr als zwei Skype-Namen vorhanden sind, so werden die überzähligen Namen ausgeblendet, sind aber im HTML-Quelltext vorhanden.

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: Failsafe • LinkBase • LinkBase/i18n

Verwendung in anderen Modulen

Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:

Hinweise
-- documentation
local LinkSkype = {
	suite  = 'LinkSkype',
	serial = '2019-07-26',
	item   = 65157314
}

-- module import
local fs = require( 'Module:Failsafe' )
local lb = require( 'Module:LinkBase' )
local li = require( 'Module:LinkBase/i18n' )

-- module variable, i18n
local ls = {}

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

	local q = s:find( '?', 1, true )
	local user = s, param
	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 = '', t
	m, comment = lb.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 .. lb.errorInfo( catPrefix, li.categories.invalidSkype,
			'listing-error', 'display:none;' )
	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 result = '', i, j, s
	local ns     = mw.title.getCurrentTitle().namespace
	local isDemo = ns == 10 or ns == 828

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

	-- analyse Skype names
	i = 0
	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 .. ', ' .. s
			end
			i = i + 1
		end
	end
	if i > li.addSkype then
		result = result .. '</span>'
	end
	return result
end

-- module administration
function ls.LinkSkype()
	return LinkSkype
end

function ls.failsafe( version )
	return fs._failsafe( version, LinkSkype ) or ''
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