Modulo:LinkPhone

Da Wikivoyage.

Esempi d'uso[modifica]

Testo Codice Risultato
Esempi corretti
+1 234 567 890 {{#invoke:LinkPhone|LinkPhone|+1 234 567 890}} +1 234 567 890
+1 234-567-890 {{#invoke:LinkPhone|LinkPhone|+1 234-567-890}} +1 234-567-890
+1 234-567-890 ext 12 {{#invoke:LinkPhone|LinkPhone|+1 234-567-890 ext 12}} +1 234-567-890 ext 12
+1 (234) 567 890 {{#invoke:LinkPhone|LinkPhone|+1 (234) 567 890}} +1 (234) 567 890
+1 234 567 WIKI {{#invoke:LinkPhone|LinkPhone|+1 234 567 WIKI}} +1 234 567 WIKI (9454)
+44 20 7890 1234 (prenotazioni), +44 20 7890 1235 (informazioni) {{#invoke:LinkPhone|LinkPhone|+44 20 7890 1234 (prenotazioni), +44 20 7890 1235 (informazioni)}} +44 20 7890 1234 (prenotazioni), +44 20 7890 1235 (informazioni)
+44 20 7890 1234, +44 20 7890 1235 {{#invoke:LinkPhone|LinkPhone|+44 20 7890 1234, +44 20 7890 1235}} +44 20 7890 1234, +44 20 7890 1235
+44 20 7890 1234 {{#invoke:LinkPhone|LinkPhone|''+44'' 20 7890 1234}} +44 20 7890 1234
blank {{#invoke:LinkPhone|LinkPhone| }}
Esempi errati
234 567 890 {{#invoke:LinkPhone|LinkPhone|234 567 890}} 234 567 890Categoria:Listing con telefoni privi di prefisso nazionale
+1 234.567.890 {{#invoke:LinkPhone|LinkPhone|+1 234.567.890}} +1 234.567.890Categoria:Listing con telefoni con problemi di formato
+44 20 7890 1234 prenotazioni, +44 20 7890 1235 informazioni {{#invoke:LinkPhone|LinkPhone|+44 20 7890 1234 prenotazioni, +44 20 7890 1235 informazioni}} +44 20 7890 1234 prenotazioniCategoria:Listing con telefoni con problemi di formato, +44 20 7890 1235 informazioniCategoria:Listing con telefoni con problemi di formato
+44 (0)234 567 890 {{#invoke:LinkPhone|LinkPhone|+44 (0)234 567 890}} +44 (0)234 567 890Categoria:Listing con telefoni con problemi di formato

Debugging[modifica]

Per rendere più facile vedere eventuali problemi con i numeri di telefono, è possibile attivare nelle proprie preferenze l'accessorio Phoneinfo.

Oppure Debuginfo per vedere anche altre tipologie di informazioni errate.


local i = {}
 
function i.LinkOnePhone(txt, demo, fax)
	local link = txt;
	local othertxt = "";
	local catprefix = '';
	local catMissingCountryCode = '';
	local catFormatIssue = '';
	local output;
	if demo == 'true' then
		catprefix = ':';
	end
	-- any other text in brackets at the end is stored separately and ignored for the dialing number
	if mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2") ~= txt then
		othertxt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2");
		txt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%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
		if mw.ustring.sub(link, 1, 3) == '800' or mw.ustring.sub(link, 1, 3) == '803' or mw.ustring.sub(link, 1, 3) == '840'
		 or mw.ustring.sub(link, 1, 3) == '892' or mw.ustring.sub(link, 1, 3) == '199'  or mw.ustring.sub(link, 1, 3) == '848'
		 or mw.ustring.sub(link, 1, 4) == '1800' or mw.ustring.sub(link, 1, 5) == '1 800' or mw.ustring.sub(link, 1, 5) == '1-800' then
			--Alcune numerazioni speciali non prevedono il prefisso nazionale. Questa patch può essere migliorata per restringere le casistiche
			output = '<span class="plainlinks nourlexpansion">';
			if fax == 'true' then
				output = output .. txt .. '</span>' .. othertxt;
			else
				output = output .. '[tel:' .. link .. ' ' .. txt .. ']</span>' .. othertxt;
			end
		else
			catMissingCountryCode = '[[' .. catprefix .. 'Categoria:Listing con telefoni privi di prefisso nazionale]]<span class="phoneinfo debuginfo" style="display:none;">PREFISSO MANCANTE</span>';
		end
	end
	if mw.ustring.match(link,"^%+[%d-() ]+$") ~= nil then
		output = '<span class="plainlinks nourlexpansion">';
		if fax == 'true' then
			output = output .. txt .. '</span>' .. othertxt;
		else
			output = output .. '[tel:' .. link .. ' ' .. txt .. ']</span>' .. othertxt;
		end
	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">';
		if fax == 'true' then
			output = output .. txt .. ' (' .. extra .. ')' .. '</span>' .. othertxt;
		else
			output = output .. '[tel:' .. link .. ' ' .. txt .. ' (' .. extra .. ')' .. ']</span>' .. othertxt;
		end
	else
		output = txt .. othertxt;
		if mw.ustring.match('+' .. link,"^%+[%d-() ]+$") == nil then
			catFormatIssue = '[[' .. catprefix .. 'Categoria:Listing con telefoni con problemi di formato]]<span class="phoneinfo debuginfo" style="display:none;">FORMATO</span>';
		end
	end
	if mw.ustring.match(link,"%(0%)") ~= nil then
		catFormatIssue = '[[' .. catprefix .. 'Categoria:Listing con telefoni con problemi di formato]]<span class="phoneinfo debuginfo" style="display:none;">FORMATO</span>';
	end
	if mw.title.getCurrentTitle().namespace == 0 or demo == 'true' then
		output = output .. catFormatIssue .. catMissingCountryCode;
	end
	return output;
end

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