UNPKG

vcards-js

Version:

Create vCards to import contacts into Outlook, iOS, Mac OS, Android devices, and more.

339 lines (290 loc) 8.34 kB
/******************************************************************************** vCards-js, Eric J Nesser, November 2014 ********************************************************************************/ /*jslint node: true */ 'use strict'; /** * Represents a contact that can be imported into Outlook, iOS, Mac OS, Android devices, and more */ var vCard = (function () { /** * Get photo object for storing photos in vCards */ function getPhoto() { return { url: '', mediaType: '', base64: false, /** * Attach a photo from a URL * @param {string} url URL where photo can be found * @param {string} mediaType Media type of photo (JPEG, PNG, GIF) */ attachFromUrl: function(url, mediaType) { this.url = url; this.mediaType = mediaType; this.base64 = false; }, /** * Embed a photo from a file using base-64 encoding (not implemented yet) * @param {string} filename */ embedFromFile: function(fileLocation) { var fs = require('fs'); var path = require('path'); this.mediaType = path.extname(fileLocation).toUpperCase().replace(/\./g, ""); var imgData = fs.readFileSync(fileLocation); this.url = imgData.toString('base64'); this.base64 = true; }, /** * Embed a photo from a base-64 string * @param {string} base64String */ embedFromString: function(base64String, mediaType) { this.mediaType = mediaType; this.url = base64String; this.base64 = true; } }; } /** * Get a mailing address to attach to a vCard. */ function getMailingAddress() { return { /** * Represents the actual text that should be put on the mailing label when delivering a physical package * @type {String} */ label: '', /** * Street address * @type {String} */ street: '', /** * City * @type {String} */ city: '', /** * State or province * @type {String} */ stateProvince: '', /** * Postal code * @type {String} */ postalCode: '', /** * Country or region * @type {String} */ countryRegion: '' }; } /** * Get social media URLs * @return {object} Social media URL hash group */ function getSocialUrls() { return { 'facebook': '', 'linkedIn': '', 'twitter': '', 'flickr': '' }; } /******************************************************************************** * Public interface for vCard ********************************************************************************/ return { /** * Specifies a value that represents a persistent, globally unique identifier associated with the vCard * @type {String} */ uid: '', /** * Date of birth * @type {Datetime} */ birthday: '', /** * Cell phone number * @type {String} */ cellPhone: '', /** * Other cell phone number or pager * @type {String} */ pagerPhone: '', /** * The address for private electronic mail communication * @type {String} */ email: '', /** * The address for work-related electronic mail communication * @type {String} */ workEmail: '', /** * First name * @type {String} */ firstName: '', /** * Formatted name string associated with the vCard object (will automatically populate if not set) * @type {String} */ formattedName: '', /** * Gender. * @type {String} Must be M or F for Male or Female */ gender: '', /** * Home mailing address * @type {object} */ homeAddress: getMailingAddress(), /** * Home phone * @type {String} */ homePhone: '', /** * Home facsimile * @type {String} */ homeFax: '', /** * Last name * @type {String} */ lastName: '', /** * Logo * @type {object} */ logo: getPhoto(), /** * Middle name * @type {String} */ middleName: '', /** * Prefix for individual's name * @type {String} */ namePrefix: '', /** * Suffix for individual's name * @type {String} */ nameSuffix: '', /** * Nickname of individual * @type {String} */ nickname: '', /** * Specifies supplemental information or a comment that is associated with the vCard * @type {String} */ note: '', /** * The name and optionally the unit(s) of the organization associated with the vCard object * @type {String} */ organization: '', /** * Individual's photo * @type {object} */ photo: getPhoto(), /** * The role, occupation, or business category of the vCard object within an organization * @type {String} */ role: '', /** * Social URLs attached to the vCard object (ex: Facebook, Twitter, LinkedIn) * @type {String} */ socialUrls: getSocialUrls(), /** * A URL that can be used to get the latest version of this vCard * @type {String} */ source: '', /** * Specifies the job title, functional position or function of the individual within an organization * @type {String} */ title: '', /** * URL pointing to a website that represents the person in some way * @type {String} */ url: '', /** * URL pointing to a website that represents the person's work in some way * @type {String} */ workUrl: '', /** * Work mailing address * @type {object} */ workAddress: getMailingAddress(), /** * Work phone * @type {String} */ workPhone: '', /** * Work facsimile * @type {String} */ workFax: '', /** * vCard version * @type {String} */ version: '3.0', /** * Get major version of the vCard format * @return {integer} */ getMajorVersion: function() { var majorVersionString = this.version ? this.version.split('.')[0] : '4'; if (!isNaN(majorVersionString)) { return parseInt(majorVersionString); } return 4; }, /** * Get formatted vCard * @return {String} Formatted vCard in VCF format */ getFormattedString: function() { var vCardFormatter = require('./lib/vCardFormatter'); return vCardFormatter.getFormattedString(this); }, /** * Save formatted vCard to file * @param {String} filename */ saveToFile: function(filename) { var vCardFormatter = require('./lib/vCardFormatter'); var contents = vCardFormatter.getFormattedString(this); var fs = require('fs'); fs.writeFileSync(filename, contents, { encoding: 'utf8' }); } }; }); module.exports = vCard;