Skip to content

Instantly share code, notes, and snippets.

@stevesinchak
Last active January 9, 2024 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevesinchak/0958ac4f221ed14f2fc1c450c90c5757 to your computer and use it in GitHub Desktop.
Save stevesinchak/0958ac4f221ed14f2fc1c450c90c5757 to your computer and use it in GitHub Desktop.
JavaScript vCard VSF Generator
// Custom VCARD generator function by Steve Sinchak
// vcard reference specification
// https://www.rfc-editor.org/rfc/rfc6350.html
// https://en.wikipedia.org/wiki/VCard
// Pass this function the required parameters, and if they are defined, they will be added to the vCard
// The text of the vCard will be returned
function buildCard(vFirstName, vMiddleName, vLastName, vTitle, vSuffix, vNick, vEmail, vEmail2, vEmail3, vHomePhone,
vHomePhone2, vBizPhone, vBizPhone2, vMobilePhone, vOtherPhone, vCompanyPhone, vJobTitle, vCompany,
vBizStreet, vBizCity, vBizState, vBizPostalCode, vBizCountry, vHomeStreet, vHomeCity, vHomeState,
vHomePostalCode, vHomeCountry)
{
var card="BEGIN:VCARD\n";
card += "VERSION:4.0\n";
//N:LAST;FIRST;;
//FN:FIRST LAST
if (vFirstName && vLastName && vMiddleName)
{
card += "N:"+vLastName+";"+vFirstName+";;\n";
card += "FN:"+vFirstName+" "+vMiddleName+" "+vLastName+"\n";
}
else if (vFirstName && vLastName)
{
card += "N:"+vLastName+";"+vFirstName+";;\n";
card += "FN:"+vFirstName+" "+vLastName+"\n";
}
else if(vFirstName)
{
card += "N:"+vFirstName+";;;\n";
card += "FN:"+vFirstName+"\n";
}
else if(vLastName)
{
card += "N:"+vLastName+";;;\n";
card += "FN:"+vLastName+"\n";
}
else
{
return "Error: Bad Name";
}
//NICKNAME:nick
if (vNick)
{
card += "NICKNAME:"+vNick+"\n";
}
//TITLE:title
if (vTitle)
{
card += "TITLE:"+vTitle+"\n";
}
//EMAIL;TYPE=OTHER:
if (vEmail)
{
card += "EMAIL;TYPE=OTHER:"+vEmail+"\n";
}
if (vEmail2)
{
card += "EMAIL;TYPE=OTHER:"+vEmail2+"\n";
}
if (vEmail3)
{
card += "EMAIL;TYPE=OTHER:"+vEmail3+"\n";
}
//TEL;TYPE=(HOME,WORK,CELL,MAIN,OTHER):num
if (vHomePhone)
{
card += "TEL;TYPE=HOME:"+vHomePhone+"\n";
}
if (vHomePhone2)
{
card += "TEL;TYPE=HOME:"+vHomePhone2+"\n";
}
if (vBizPhone)
{
card += "TEL;TYPE=WORK:"+vBizPhone+"\n";
}
if (vBizPhone2)
{
card += "TEL;TYPE=WORK:"+vBizPhone2+"\n";
}
if (vMobilePhone)
{
card += "TEL;TYPE=CELL:"+vMobilePhone+"\n";
}
if (vOtherPhone)
{
card += "TEL;TYPE=OTHER:"+vOtherPhone+"\n";
}
if (vCompanyPhone)
{
card += "TEL;TYPE=WORK:"+vCompanyPhone+"\n";
}
//TITLE:title
if (vJobTitle)
{
card += "TITLE:"+vJobTitle+"\n";
}
//ORG:company
if (vCompany)
{
card += "ORG:"+vCompany+"\n";
}
//ADR;TYPE=HOME:;;street;city;state;zip code;country
if (vBizStreet && vBizCity && vBizState && vBizPostalCode && vBizCountry)
{
card += "ADR;TYPE=WORK:;;"+vBizStreet+";"+vBizCity+";"+vBizState+";"+vBizPostalCode+";"+vBizCountry+"\n";
}
else if (vBizStreet && vBizCity && vBizState && vBizPostalCode)
{
card += "ADR;TYPE=WORK:;;"+vBizStreet+";"+vBizCity+";"+vBizState+";"+vBizPostalCode+";;\n";
}
else if (vBizStreet && vBizCity && vBizState)
{
card += "ADR;TYPE=WORK:;;"+vBizStreet+";"+vBizCity+";"+vBizState+";;;\n";
}
else if (vBizStreet && vBizCity)
{
card += "ADR;TYPE=WORK:;;"+vBizStreet+";"+vBizCity+";;;;\n";
}
else if (vBizStreet)
{
card += "ADR;TYPE=WORK;LABEL=\""+vBizStreet+"\":;;;;;;;\n";
}
if (vHomeStreet && vHomeCity && vHomeState && vHomePostalCode && vHomeCountry)
{
card += "ADR;TYPE=HOME:;;"+vHomeStreet+";"+vHomeCity+";"+vHomeState+";"+vHomePostalCode+";"+vHomeCountry+"\n";
}
else if (vHomeStreet && vHomeCity && vHomeState && vHomePostalCode)
{
card += "ADR;TYPE=HOME:;;"+vHomeStreet+";"+vHomeCity+";"+vHomeState+";"+vHomePostalCode+";;\n";
}
else if (vHomeStreet && vHomeCity && vHomeState)
{
card += "ADR;TYPE=HOME:;;"+vHomeStreet+";"+vHomeCity+";"+vHomeState+";;;\n";
}
else if (vHomeStreet && vHomeCity)
{
card += "ADR;TYPE=HOME:;;"+vHomeStreet+";"+vHomeCity+";;;;\n";
}
else if (vHomeStreet)
{
card += "ADR;TYPE=HOME;LABEL=\""+vHomeStreet.replace(/(\r\n|\n|\r)/gm, ", ").replace(/\s+/g, ' ').trim()+"\":;;;;;;;\n";
}
card += "REV:"+Date.now()+"\n";
card += "END:VCARD\n";
return card;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment