Modul:LinkMail
| Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf LinkMail/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Anwendung
Der Modul stellt Funktionen zur Verlinkung von Email-Adressen bereit.
Versionsbezeichnung auf Wikidata: 2023-12-08
Kommentare müssen hinter der Emailadresse in Klammern angefügt werden. Bei nicht erkennbaren Fehlern stecken in der Email-Adresse möglicherweise nicht sichtbare Steuerzeichen wie Left-To-Right Marks (meist vor und hinter dem @ oder am Ende der Email), oder es wurden falsche Bindestriche verwendet (Soft Hyphen (U+00AD), Hyphen (U+2010) anstelle Hyphen-Minus (U+002D)).
Benötigte weitere Module
Dieses Modul benötigt folgende weitere Module: Link utilities • Link utilities/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:
- vCard
- Modul benötigt das Modul LinkMail – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
Wartungskategorien
Beispiele
| Text | Code | Ergebnis |
|---|---|---|
| cafe@xyz.hotel.com | {{#invoke:LinkMail|linkMails|cafe@xyz.hotel.com}} | cafe@xyz.hotel.com |
| café@xyz.hotel.com | {{#invoke:LinkMail|linkMails|café@xyz.hotel.com}} | café@xyz.hotel.com Category:Kontakt: Email enthält Unicode-Zeichen |
| info.main@xyz.hotel-abc.com (Information) | {{#invoke:LinkMail|linkMails|info.main@xyz.hotel-abc.com (Information)}} | info.main@xyz.hotel-abc.com (Information) |
| info@xyz.hotel.com, reservation@xyz.hotel.travel | {{#invoke:LinkMail|linkMails|info@xyz.hotel.com, reservation@xyz.hotel.travel}} | info@xyz.hotel.com, reservation@xyz.hotel.travel |
| info@$xyz.hotel.com | {{#invoke:LinkMail|linkMails|info@$xyz.hotel.com}} | info@$xyz.hotel.com Category:Kontakt: Ungültiges Email-Format Ungültiges Email-Format |
Fehlersuche
Im Fehlerfall wird neben der Fehlerkategorie auch ein Fehlertext hinter der Email-Adresse ausgegeben.
Beschreibung der Funktionen
function lm._isEmail( s )
s: string;
Die Funktion prüft, ob die Email-Adresse s gültig ist.
function lm._linkMail( m, args, ignoreUnicode )
m: string;args: arguments array;ignoreUnicode: boolean;
Die Funktion prüft und verlinkt eine gültige Email-Adresse m.
function lm.linkMailSet( args )
args: arguments array;
Die Funktion spaltet eine Liste von Email-Adressen auf und übergibt jede einzelne Adresse an lm.linkMail.
function lm.linkMails( frame )
frame: frame object;
Die Funktion stellt die Schnittstelle für einen {{#invoke: ...}}-Aufruf zur Verfügung.
function lm.linkMailsTemplate( frame )
frame: frame object;
Die Funktion stellt die Schnittstelle für einen Vorlagen-Aufruf zur Verfügung.
Bedeutung der Variablen
lm.categories– Array mit gleichnamigen Fehlerausschriften und Kategoriennamen.
lm.delimiters– Array mit Mustern für Trenner unterschiedlicher Telefonnummern. Das Komma muss nicht in dieses Array eingetragen werden.
lm.addNum– Anzahl der sichtbaren, nicht ausgeblendeten Email-Adressen. Die überzähligen Adressen sind aber im HTML-Quelltext enthalten und lassen mit einer Stilvorlage einblenden.
Klassenbezeichner
Im HTML-Quelltext werden folgende Klassenbezeichner eingesetzt:
error– Klasse der Fehlerausschrift.listing-check-recommended– Klasse der Fehlerausschrift. Eine Prüfung wird empfohlenlisting-add-contact- Klassenbezeichner ausgeblendeter Email-Adressen. Wenn mehr als zwei Email-Adressen vorhanden sind, so werden die überzähligen Adressen ausgeblendet, sind aber im HTML-Quelltext vorhanden.
- Die obige Dokumentation wurde aus der Seite Modul:LinkMail/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- module variable and administration
local lm = {
moduleInterface = {
suite = 'LinkMail',
serial = '2023-12-08',
item = 65157414
}
}
-- module import
-- require( 'strict' )
local li = require( 'Module:Link utilities/i18n' )
local lu = require( 'Module:Link utilities' )
-- check single email address
function lm._isEmail( s )
local result = 2
if s == nil or type( s ) ~= 'string' or #s > 254 or s:find( '%s' ) or
s:find( '%.%.' ) or s:find( '%.@' ) or s:find( '@[%.%-]' ) or
s:find( '%-%.' ) or s:find( '%.%-' ) or s:match( '^%.' ) then
return 0
end
local repl, at = s:gsub( '@', '@' )
if at ~= 1 then
return 0
end
at = s:find( '@' )
local user = s:sub( 1, at - 1 )
local domain = s:sub( at + 1, #s )
if not user or not domain or #user > 64 or #domain > 253 then
return 0
end
-- handle user part
if not mw.ustring.match( user, "^[%w!#&'/=_`{|}~%^%$%%%+%-%*%.%?]+$" ) then
return 0
end
if not user:match( "^[%w!#&'/=_`{|}~%^%$%%%+%-%*%.%?]+$" ) then
result = 1
end
-- handle domain part
if not mw.ustring.match( domain, '^[%w%.%-]+%.%a%a+$' ) then
return 0
end
if not domain:match( '^[%w%.%-]+%.%a%a+$' ) then
result = 1
end
-- not yet analysed: texts in quotes in user part
-- added on demand
return result
end
function lm._linkMail( m, isDemo, ignoreUnicode )
m = mw.text.trim( m )
if m == '' then
return ''
end
local catPrefix = '[[Category:'
if isDemo then
catPrefix = ' [[:Category:'
end
local comment = ''
m, comment = lu.extractComment( m )
m = m:gsub( 'mailto:', '' )
local isEmail = lm._isEmail( m )
local t
if isEmail > 0 then
t = '<span class="plainlinks nourlexpansion">[mailto:' .. m .. ' ' .. m .. ']</span>'
if isEmail == 1 and not ignoreUnicode then
t = t .. catPrefix .. li.categories.nonASCII
end
else
t = m .. catPrefix .. li.categories.invalidMail
end
if comment ~= '' then
t = t .. ' ' .. comment
end
return t
end
function lm.linkMailSet( args )
args.email = args.email or args[ 1 ] or ''
if args.email == '' then
return ''
end
local ns = mw.title.getCurrentTitle().namespace
local isDemo = ns == 10 or ns == 828
-- split separate email
local items = lu.splitItems( args.email, li.delimiters )
-- analyse emails
local result = ''
local i = 0
local s
for j, item in ipairs( items ) do
s = lm._linkMail( item, isDemo, args.ignoreUnicode )
if s ~= '' then
if result == '' then
result = s
else
if i == li.addMail then
result = result .. '<span class="listing-add-contact">'
end
result = result .. li.texts.comma .. s
end
i = i + 1
end
end
if i > li.addMail then
result = result .. '</span>'
end
return result
end
-- #invoke call
function lm.linkMails( frame )
return lm.linkMailSet( frame.args )
end
-- template call
function lm.linkMailsTemplate( frame )
return lm.linkMailSet( frame:getParent().args )
end
return lm