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 |
---|---|---|
[email protected] | {{#invoke:LinkMail|linkMails|[email protected]}} | [email protected] |
café@xyz.hotel.com | {{#invoke:LinkMail|linkMails|café@xyz.hotel.com}} | café@xyz.hotel.com Category:Kontakt: Email enthält Unicode-Zeichen |
[email protected] (Information) | {{#invoke:LinkMail|linkMails|[email protected] (Information)}} | [email protected] (Information) |
[email protected], [email protected] | {{#invoke:LinkMail|linkMails|[email protected], [email protected]}} | [email protected], [email protected] |
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 administrationlocal 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 addressfunction lm._isEmail( s )local result = 2if s == nil or type( s ) ~= 'string' or #s > 254 or s:find( '%s' ) ors:find( '%.%.' ) or s:find( '%.@' ) or s:find( '@[%.%-]' ) ors:find( '%-%.' ) or s:find( '%.%-' ) or s:match( '^%.' ) thenreturn 0endlocal repl, at = s:gsub( '@', '@' ) if at ~= 1 then return 0 endat = 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 partif not mw.ustring.match( user, "^[%w!#&'/=_`{|}~%^%$%%%+%-%*%.%?]+$" ) thenreturn 0endif not user:match( "^[%w!#&'/=_`{|}~%^%$%%%+%-%*%.%?]+$" ) thenresult = 1end-- handle domain partif not mw.ustring.match( domain, '^[%w%.%-]+%.%a%a+$' ) thenreturn 0endif not domain:match( '^[%w%.%-]+%.%a%a+$' ) thenresult = 1end-- not yet analysed: texts in quotes in user part-- added on demandreturn resultendfunction lm._linkMail( m, isDemo, ignoreUnicode )m = mw.text.trim( m )if m == '' thenreturn ''endlocal catPrefix = '[[Category:'if isDemo thencatPrefix = ' [[:Category:'endlocal comment = ''m, comment = lu.extractComment( m )m = m:gsub( 'mailto:', '' )local isEmail = lm._isEmail( m )local tif isEmail > 0 thent = '<span class="plainlinks nourlexpansion">[mailto:' .. m .. ' ' .. m .. ']</span>'if isEmail == 1 and not ignoreUnicode thent = t .. catPrefix .. li.categories.nonASCIIendelset = m .. catPrefix .. li.categories.invalidMailendif comment ~= '' thent = t .. ' ' .. commentendreturn tendfunction lm.linkMailSet( args )args.email = args.email or args[ 1 ] or ''if args.email == '' thenreturn ''endlocal ns = mw.title.getCurrentTitle().namespacelocal isDemo = ns == 10 or ns == 828-- split separate emaillocal items = lu.splitItems( args.email, li.delimiters )-- analyse emailslocal result = ''local i = 0local sfor j, item in ipairs( items ) dos = lm._linkMail( item, isDemo, args.ignoreUnicode )if s ~= '' thenif result == '' thenresult = selseif i == li.addMail thenresult = result .. '<span class="listing-add-contact">'endresult = result .. li.texts.comma .. sendi = i + 1endendif i > li.addMail thenresult = result .. '</span>'endreturn resultend-- #invoke callfunction lm.linkMails( frame )return lm.linkMailSet( frame.args )end-- template callfunction lm.linkMailsTemplate( frame )return lm.linkMailSet( frame:getParent().args )endreturn lm