Module:Wy/id/LinkPhone
Documentation for this module may be created at Module:Wy/id/LinkPhone/doc
local i = {}
function i.LinkOnePhone(txt, demo, fax, tollfree)
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
catMissingCountryCode = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan kode negara telepon yang kurang]]<span class="phoneinfo" style="display:none;" title="Phone number does not have country code">NOCC</span>';
if tollfree == 'yes' and mw.ustring.sub(link, 1, 3) == '800' then
catMissingCountryCode = '';
end
if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '0508' then
catMissingCountryCode = '';
end
if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '0800' then
catMissingCountryCode = '';
end
if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '1300' then
catMissingCountryCode = '';
end
if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '1800' then
catMissingCountryCode = '';
end
if tollfree == 'yes' and mw.ustring.sub(link, 1, 5) == '01800' then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"high cost") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"extra charge") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"premium") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"local rate") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"in country only") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"domestic") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"emergency") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"non%-emergency") ~= nil then
catMissingCountryCode = '';
end
if mw.ustring.match(mw.ustring.lower(othertxt),"non%-geographic number") ~= nil then
catMissingCountryCode = '';
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 .. 'Category:wy/id/Senarai dengan masalah format telepon]]<span class="phoneinfo" style="display:none;" title="Phone number has formatting issue">FORMAT</span>';
end
end
if mw.ustring.match(link,"%(0%)") ~= nil then
catFormatIssue = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan masalah format telepon]]<span class="phoneinfo" style="display:none;" title="Phone number has formatting issue">FORMAT</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 tollfree = frame.args["tollfree"] or '';
local txt = "";
local result = "";
-- 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, tollfree)
end
result = mw.ustring.sub(result, 3, mw.ustring.len(result) );
return result;
end
function i.LinkOneEmail(txt, demo)
local othertxt = "";
local catprefix = '';
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
txt = mw.ustring.gsub(txt, " ", "");
output = '[mailto:' .. txt .. ' ' .. txt .. ']' .. othertxt;
if mw.ustring.match(txt,"@.+@") ~= nil then
catFormatIssue = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan masalah format surel]]<span class="phoneinfo" style="display:none;" title="Email has formatting issue">FORMAT</span>';
end
if mw.ustring.match(txt,"@[^.]+%.%.") ~= nil then
catFormatIssue = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan masalah format surel]]<span class="phoneinfo" style="display:none;" title="Email has formatting issue">FORMAT</span>';
end
if mw.ustring.match(txt,"@") == nil then
catFormatIssue = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan masalah format surel]]<span class="phoneinfo" style="display:none;" title="Email has formatting issue">FORMAT</span>';
end
if mw.ustring.match(txt,"@[^.]+%.[^.]+") == nil then
catFormatIssue = '[[' .. catprefix .. 'Category:wy/id/Senarai dengan masalah format surel]]<span class="phoneinfo" style="display:none;" title="Email has formatting issue">FORMAT</span>';
end
if mw.title.getCurrentTitle().namespace == 0 or demo == 'true' then
output = output .. catFormatIssue;
end
return output;
end
function i.LinkEmail(frame)
local demo = frame.args["demo"] or '';
local txtall = frame.args[1] or '' .. ',';
local txt = "";
local result = "";
-- replace semicolon with comma
txtall = mw.ustring.gsub(txtall, "; ", ", ");
for txt in mw.ustring.gmatch(txtall, "([^,]+)") do
result = result .. ", " .. i.LinkOneEmail(txt, demo)
end
result = mw.ustring.sub(result, 3, mw.ustring.len(result) );
return result;
end
return i;