Module:LienTéléphone

La documentation ci-dessous est incluse ici depuis la page Module:LienTéléphone/doc.
Utilisation
Ce module est utilisé dans le Modèle:Listing pour mettre en forme les numéros de téléphone, et éventuellement former un lien fonctionnel permettant d'appeler directement ces numéros dans les navigateurs d'appareils prenant en charge ces liens (qui sont indiqués par une URI externe utilisant le préfixe standardisé tel:).
Souligne les questions
Pour trouver plus facilement quels numéros de téléphone posent problème avec des indicateurs visibles dans la page, vous pouvez ajouter ce qui suit à votre propre page de common.css (et personnaliser ce style proposé selon votre convenance). Mais il est également possible d'activer directement ce code en cochant (activant) le gadget Phoneinfo de la section Débug dans vos préférences.
.phoneinfo {
    display: inline !important;
    background: yellow; color: red;
}
Exemples
Texte Code Résultat Travaux à effectuer
+1 123 456 7890 {{#invoke:LienTéléphone|LienTel|+1 123 456 7890}} +1 123 456 7890 Les espaces sont acceptées pour grouper visuellement ou ménomotechniquement les chiffres. Elles ne sont jamais composées. Leur placement est libre et facultatif n'importe où dans le numéro mais devrait se faire selon les usages habituels.
+1 123-456-7890 {{#invoke:LienTéléphone|LienTel|+1 123-456-7890}} +1 123-456-7890 Les signes « - » sont les seuls signes de ponctuations acceptés pour grouper visuellement ou ménomotechniquement les chiffres. Ils ne sont jamais composés. Leur placement et facultatif est libre n'importe où dans le numéro mais devrait se faire selon les usages habituels.
+1 123-456-7890 ext 12 {{#invoke:LienTéléphone|LienTel|+1 123-456-7890 ext 12}} +1 123-456-7890 ext 12 Il est possible d'ajouter un code d'extension, qui ne sera pas composé dans le numéro lors de l'appel mais seulement manuellement lors de son aboutissement. On l'indique visuellement en séparant ces chiffres additionnels par le code « ext » (qui doit être écrit en minuscules).

Ce module ne prend pas en charge les codes indiquant l'attente automatique du décrochage ou l'insertion d'une pause avant de composer automatiquement les chiffres d'extension (les équipements téléphoniques privés modernes peuvent recevoir directement tous les chiffres y compris l'extension pour faire une sélection directe à l'arrivée, car en principe tous les chiffres du numéro composé par l'appelant sont transmis tels quels par les différents opérateurs de réseaux, même si ces derniers n'en ont pas eux-mêmes besoin pour acheminer correctement les appels vers un réseau privé).

+1 123 456 WIKI {{#invoke:LienTéléphone|LienTel|+1 123 456 WIKI}} +1 123 456 WIKI (9454) Ce format utilisant les 26 lettres majuscules de l'alphabet latin de base (de A à Z) est utilisé communément dans certains pays comme un moyen mnémotechnique pour retenir les numéros publiés. Ce module prend en charge la conversion en chiffres de ces seules lettres, uniquement celles écrites en majuscules (selon la même disposition dite « T9 » affichée sur les claviers téléphoniques fixes ou mobiles habituels) pour former l'URI du lien affiché qui ne doit comprendre que des chiffres.

Il n'est pas recommandé car tous les téléphones (à clavier ou à ancien cadran analogique rotatif) n'affichent pas cette correspondance des lettres en chiffres, sauf dans les modèles vendus dans les pays concernés par cet usage. De plus, il pose un problème sérieux de lisibilité des numéros qui doivent être réellement composés (notamment pour distinguer visuellement le chiffre « 0 » de la lettre « O » correspondant au chiffre « 6 », ou le chiffre « 1 » de la lettre « I » correspondant au chiffre « 4 » et de la lettre « L » correspondant au chiffre « 5 ». Pour ces raisons ce module ajoute explicitement entre parenthèses la traduction des lettres en chiffres.

+33 10 MAI 2018 {{#invoke:LienTéléphone|LienTel|+33 10 MAI 2018}} +33 10 MAI 2018 (6242018) Lorsque les lettres converties en chiffres sont elles-mêmes suivies d'autres chiffres, ces derniers chiffres sont ajoutés aussi à l'indication entre parenthèses, qui comprend donc tous les derniers chiffres du numéro complet à partir de la première lettre convertie. De très anciens numéros de téléphone français utilisaient des lettres à la place des trois premiers chiffres du numéro local (ces lettres correspondaient parfois à des abréviations de noms de localités ou de quartiers par exemple à Paris) mais cet usage a été abandonné.
+1 (123) 456 7890 {{#invoke:LienTéléphone|LienTel|+1 (234) 567 890}} +1 (234) 567 890 Ce format permet de distinguer visuellement (avec les parenthèses) l'existence d'une numérotation abrégée possible pour les appels depuis et vers la même zone régionale au sein d'un plan de numérotation spécifique à un pays :
  • Pour les appels au sein du même pays, le code « + » normalisé (ou son équivalent numérique propre à chaque pays ou réseau de l'appelant, qui peut être « 011 » en Amérique du Nord, « 00 » en Europe occidentale, « 70 » en Russie, etc.) et le code pays qui suit peuvent ne pas être composés, mais ils doivent alors être remplacés par un code préfixe interrégional (qui dépend du pays ou du réseau d'appel, tel que « 1 » en Amérique du Nord, « 7 » en Russie, etc.) suivi du code de la zone régional indiquée entre parenthèses.
  • Pour les appels internationaux et même pour les appels nationaux ou régionaux, on peut aujourd'hui appeler directement le numéro international complet en composant le code « + » normalisé (ou son équivalent numérique propre à chaque pays).

Ce format est de moins en moins supporté, car de nombreux pays et réseaux d'opérateurs passent progressivement à un plan unique de numérotation nationale et abandonnent les anciens schémas possibles (mais facultatifs) de numérotation plus courte, afin de pouvoir réutiliser au sein de chaque zone régionale des chiffres auparavant réservés à cette possibilité de changement de région. Dans les pays ayant fait cette transition à un plan de numérotation unique (où tous les chiffres doivent être composés même le code régional quelle que soit la région d'appel, y compris au sein du même réseau d'un opérateur), il est vivement recommandé de supprimer ces parenthèses (on peut toujours grouper les chiffres suivants avec des espaces ou tirets), mais il faut conserver le code « + » normalisé et l'indicatif pays qui le suit.

+44 20 7890 1234, +44 20 7890 1235 {{#invoke:LienTéléphone|LienTel|+44 20 7890 1234, +44 20 7890 1235}} +44 20 7890 1234, +44 20 7890 1235 On peut indiquer plusieurs numéros en les séparant par des virgules.

Attention : cet exemple (initialement donné pour des numéros fixes au Royaume-Uni) est ancien, car désormais le « 0 » présent avant le numéro complet national doit être composé dans tous les appels, y compris dans les appels internationaux après le « +44 » (la même remarque s'applique aussi à d'autres pays ayant fait ce choix, dont l'Italie) : n'oubliez pas alors d'inclure ce « 0 » (et n'utilisez aucune parenthèses), car ce module n'est pas capable de savoir s'il faut l'ajouter ou le supprimer automatiquement (les plans de numérotation interne de chaque pays ou opérateur sont trop nombreux ; seul le plan de numérotation internationale indiqué par le code « + » initial est normalisé pour tous les pays et tous les opérateurs de réseaux et aucun chiffre nécessaire ne doit manquer même si des numérotations plus courtes peuvent également exister nationalement ou régionalement ou sur le réseau d'un opérateur spécifique selon ses propres règles).

+44 20 7890 1234 (réservations), +44 20 7890 1235 (général) {{#invoke:LienTéléphone|LienTel|+44 20 7890 1234 (réservations), +44 20 7890 1235 (général)}} +44 20 7890 1234 (réservations), +44 20 7890 1235 (général) Il est possible d'indiquer l'usage d'un numéro en le précisant entre parenthèses après ce numéro. Cette indication ne sera pas traduite en chiffres dans les numéros à composer dans le lien généré.

Attention : il n'est pas encore possible d'inclure des virgules dans une indication entre parenthèses, les virgules ne peuvent servir que pour séparer des numéros différents.

+44 20 7890 1234 {{#invoke:LienTéléphone|LienTel|''+44'' 20 7890 1234}} +44 20 7890 1234 Le balisage simple pour la mise en forme de certaines partie du numéro est accepté mais facultatif, il est ignoré dans les numéros réellement composés.
+44 (0)20 7890 1234 {{#invoke:LienTéléphone|LienTel|+44 (0)20 7890 1234}} +44 (0)20 7890 1234Catégorie:Listing avec format de numéro téléphonique erroné Le code « (0) » doit être :
  • soit supprimé s'il ne doit pas être composé après le code pays dans un appel international mais seulement dans un appel national (que ce soit seulement les appels entre deux zones régionales dans les pays de moins en moins nombreux qui ont encore des zones régionales et une numérotation possible au sein de la même zone régionale sans indiquer le 0 et le code régional qui suit, ou pour tous les appels nationaux quels que soit la région d'appel ou le réseau appelé, comme en France et de nombreux pays),
  • soit remplacé par « 0 » (sans les parenthèses) s'il doit être composé dans tous les cas (dans certains pays où ce premier chiffre 0 permet de distinguer les appels vers des numéros fixes géographiques traditionnels, des autres appels vers les réseaux mobiles, les numéros courts et spéciaux, ou utilisant un nouveau plan de numérotation nationale indépendant des régions et des zones de service ou de tarification de chaque opérateur).
(1)123 456 7890 {{#invoke:LienTéléphone|LienTel|(1)123 456 7890}} (1)123 456 7890Catégorie:Listing avec numéro téléphonique sans code de pays Le code « (1) » du plan de numérotation nord-américain est un préfixe de numérotation longue permettant d'effectuer des appels entre deux régions en le composant avant le code à trois chiffres de la zone régionale; s'il n'est pas composé, seuls les chiffres suivants sont utilisés pour les appels au sein de la même zone régionale et du même réseau d'un opérateur.

Cette ancienne notation (d'usage uniquement interne dans un seul pays et n'ayant qu'un seul opérateur de réseau) utilisant des parenthèses en tête du numéro, mais sans mentionner le préfixe international et le code pays n'est plus acceptée, car il est ambigu et ne précise pas clairement quelle est la longueur de l'indicatif régional mentionné après (donc combien de chiffres du numéro complet il faut conserver dans la numérotation abrégée), et cette notation peut également être confondue avec l'indication (dans les parenthèses) soit d'un code régional, soit d'un code pays.

234 567 890 {{#invoke:LienTéléphone|LienTel|234 567 890}} 234 567 890Catégorie:Listing avec numéro téléphonique sans code de pays Ajouter le préfixe international téléphonique. Il commence par « + ».
0033912345678 {{#invoke:LienTéléphone|LienTel|0033912345678}} 0033912345678Catégorie:Listing avec numéro téléphonique sans code de pays Ajouter le préfixe international téléphonique. Il commence par « + » et doit remplacer le code « 00 » (utilisé comme en France comme indiqué ici par les chiffres 33 qui suivent, mais l'appelant n'est pas nécessairement en France). Aucun code pays indiqué après le « + » ne peut commencer par le « 0 »
7033912345678 {{#invoke:LienTéléphone|LienTel|7033912345678}} 7033912345678Catégorie:Listing avec numéro téléphonique sans code de pays Ajouter le préfixe international téléphonique. Il commence par « + ». Il devrait remplacer le code « 70 » (utilisé ici comme en Russie pour appeler un numéro en France), mais les chiffres « 703... » pourraient aussi être interprétés comme un numéro de téléphone national fixe ou mobile, pas nécessairement en France ni en Russie. Ce module ne peut pas le deviner, même en se basant sur la longueur du numéro indiqué (car les numéros de téléphone ne sont pas toujours de longueur fixe au sein d'un même pays et parce qu'il peut y avoir des chiffres supplémentaires ajoutés, intégrés au numéro, composés, et utilisés comme chiffres de sélection à l'arrivée sur un réseau privé). Vérifiez la source de ce numéro (et notamment sa localisation géographique) avant de le modifier ou le compléter.
+1 234.567.890 {{#invoke:LienTéléphone|LienTel|+1 234.567.890}} +1 234.567.890Catégorie:Listing avec format de numéro téléphonique erroné Retirer les « . » séparateurs groupant les chiffres du numéro de téléphone, ou les remplacer par des espaces (ou des tirets« - » selon les usages habituels des pays, comme dans les deux premiers exemples ci-dessus)
+44 20 7890 1234 réservations, +44 20 7890 1235 général {{#invoke:LienTéléphone|LienTel|+44 20 7890 1234 réservations, +44 20 7890 1235 général}} +44 20 7890 1234 réservationsCatégorie:Listing avec format de numéro téléphonique erroné, +44 20 7890 1235 généralCatégorie:Listing avec format de numéro téléphonique erroné L'indication d'usage correspondant au numéro doit être placée entre parenthèses.
0 800 10100 {{#invoke:LienTéléphone|LienTel|0 800 10100}} 0 800 10 100Catégorie:Listing avec numéro téléphonique sans code de pays Ne pas mettre d'espace entre le « 0 » et le « 8 ».
0800 10100 {{#invoke:LienTéléphone|LienTel|0800 10100|tollfree=yes}} 0800 10100 Fait Il s'agit d'un numéro gratuit sans préfixe (en France au moins).

Attention car ce pourrait être un numéro géographique dans un autre pays : dans ce cas il faut le convertir en format international (avec le code « + » et l'indicatif pays). Ce format est accepté par la présence du paramètre tollfree=yes, mais il est préférable d'utiliser une indication explicite (entre parenthèses) comme ci-dessous.

0800 101 000 (appel gratuit depuis la France) {{#invoke:LienTéléphone|LienTel|0800 101 000 (appel gratuit depuis la France)|tollfree=yes}} 0800 101 000 (appel gratuit depuis la France) Fait Il s'agit d'un numéro gratuit sans préfixe (en France au moins) mais c'est indiqué explicitement par le paramètre tollfree=yes et par l'indication visuelle (entre parenthèses, mais on ne peut actuellement pas encore y inclure des virgules).
089 123456 (numéro surtaxé et appel depuis la France uniquement) {{#invoke:LienTéléphone|LienTel|089 123456 (numéro surtaxé et appel depuis la France uniquement)|demo=true}} 089 123456 (numéro surtaxé et appel depuis la France uniquement) Fait Il s'agit d'un numéro surtaxé sans préfixe (comme indiqué explicitement). Ce n'est donc pas un numéro international.



local i = {}
 
function i.LienTelUn(txt, demo)
    local link = txt;
    local othertxt = '';
    local catMissingCountryCode = '';
    local catFormatIssue = '';
    local output;
    local catprefix, catsuffix;
    if demo == 'true' then
    	catprefix = '<small style="margin:1px;border:1px dotted red;padding:1px;background:#EEE;line-height:normal">[[:Catégorie:';
    	catsuffix = ']]</small>';
    else
    	catprefix = '[[Catégorie:';
    	catsuffix = ']]';
    end
    -- any other text in brackets at the end is stored separately and ignored for the dialing number
    if mw.ustring.gsub(txt, "(.*)( %([^0-9]*%))$", "%2") ~= txt then
        othertxt = mw.ustring.gsub(txt, "(.*)( %([^0-9]*%))$", "%2");
        txt = mw.ustring.gsub(txt, "(.c*)( %([^0-9]*%))$", "%1");
    end
    -- Don't include "ext NNNN" in the link
    link = mw.ustring.gsub(txt, " +[Ee][Xx][Tt] +%d+$", "");
    -- Don't include " xNNNN" in the link
    link = mw.ustring.gsub(link, " +x%d+$", "");
    link = mw.ustring.gsub(link, " ", "");
    link = mw.ustring.gsub(link, "'", "");
    if link == "" then
        return "";
    end
    if mw.ustring.sub(link, 1, 1) ~= '+' and mw.ustring.len(link) > 4  then
    	catMissingCountryCode = '<span class="phoneinfo" style="display:none">SANSCDP</span>' ..
    		catprefix .. 'Listing avec numéro téléphonique sans code de pays' .. catsuffix;
    	if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '0800' then
           catMissingCountryCode = '';
        end
        if mw.ustring.match(mw.ustring.lower(othertxt), "numéro surtaxé") ~= nil then
           catMissingCountryCode = '';
        end
    end
    if mw.ustring.match(link,"^%+[%d-() ]+$") ~= nil then
        output =
        	'<span class="plainlinks nourlexpansion">[tel:' .. link .. ' ' .. txt .. ']</span>' ..
        	othertxt;
    elseif mw.ustring.match(link,"^%+[%d%u- ]+$") ~= nil then
        local extra = mw.ustring.match(link, "%u[%d%u- ]+")
        link = mw.ustring.gsub(link, "[A-C]", "2");
        link = mw.ustring.gsub(link, "[D-F]", "3");
        link = mw.ustring.gsub(link, "[G-I]", "4");
        link = mw.ustring.gsub(link, "[J-L]", "5");
        link = mw.ustring.gsub(link, "[M-O]", "6");
        link = mw.ustring.gsub(link, "[P-S]", "7");
        link = mw.ustring.gsub(link, "[T-V]", "8");
        link = mw.ustring.gsub(link, "[W-Z]", "9");
        extra = mw.ustring.gsub(extra, "[A-C]", "2");
        extra = mw.ustring.gsub(extra, "[D-F]", "3");
        extra = mw.ustring.gsub(extra, "[G-I]", "4");
        extra = mw.ustring.gsub(extra, "[J-L]", "5");
        extra = mw.ustring.gsub(extra, "[M-O]", "6");
        extra = mw.ustring.gsub(extra, "[P-S]", "7");
        extra = mw.ustring.gsub(extra, "[T-V]", "8");
        extra = mw.ustring.gsub(extra, "[W-Z]", "9");
        output =
        	'<span class="plainlinks nourlexpansion">[tel:' .. link .. ' ' .. txt .. ' <sup>(' .. extra .. ')</sup>]</span>' ..
        	othertxt;
    else
        output = txt .. othertxt;
        if mw.ustring.match('+' .. link,"^%+[%d-() ]+$") == nil then
            catFormatIssue = '<span class="phoneinfo" style="display:none">FORMAT</span>' ..
            	catprefix .. 'Listing avec format de numéro téléphonique erroné' .. catsuffix;
        end
    end
    if mw.ustring.match(link,"%(0%)") ~= nil then
        catFormatIssue = '<span class="phoneinfo" style="display:none">FORMAT</span>' ..
        	catprefix .. 'Listing avec format de numéro téléphonique erroné' .. catsuffix;
    end
    if mw.title.getCurrentTitle().namespace == 0 or demo == 'true' then
        output = output .. catFormatIssue .. catMissingCountryCode;
    end
    return output;
end

function i.LienTel(frame)
    local demo = frame.args["demo"] or '';
	local fax = frame.args["fax"] or '';    
    local txtall = frame.args[1] or '' .. ',';
    local tollfree = frame.args["numéro gratuit"] or '';    
    local txt = "";
    local result = "";
    local catprefix = '';
    -- replace or / and with comma
    txtall = mw.ustring.gsub(txtall, " ou %+", ", +");
    txtall = mw.ustring.gsub(txtall, " et %+", ", +");
    for txt in mw.ustring.gmatch(txtall, "([^,]+)") do
        result = result .. ", " .. i.LienTelUn(txt, demo, fax, tollfree)
    end
    result = mw.ustring.sub(result, 3, mw.ustring.len(result) );
    return result;
end 
return i;