Giter Club home page Giter Club logo

vcard's Introduction

vcard

Introduction

vcard allow you to parse vCard data into js object and convert js object into vCard data. It can work both in browser and in node.

Installation

Using npm:

npm install vcard-parser

Example of usage:

var vCard = require('vcard-parser');
var raw = 'BEGIN:VCARD\r\n' +
          'FN:Forrest Gump\r\n' +
          'N:Gump;Forrest;;Mr.;\r\n' +
          'TEL;TYPE=HOME:78884545247\r\n' +
          'END:VCARD';
var card = vCard.parse(raw);

expect(card.fn).toEqual([
    {value: 'Forrest Gump'}
]);
expect(card.n).toEqual([{
    value: [
        'Gump', 'Forrest', '', 'Mr.', ''
    ]
}]);
expect(card.tel).toEqual([
    {value: '78884545247', meta: {type: ['HOME']}}
]);

var generated = vCard.generate(card);

expect(generated).toEqual(raw);

vcard's People

Contributors

deepdiver1975 avatar heymdall avatar spantaleev avatar xenji avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

vcard's Issues

ReferenceError: Can't find variable: module

I am trying to use this module in the browser I have added it to my page directly using:

<script src="node_modules/vcard-parser/lib/vcard.js"></script>

However this then generates the error:

ReferenceError: Can't find variable: module

It seems this expects to be run in a node environment. Do you have guidance on how to use this module in the browser? Thanks.

Long note not parsed correctly

Long notes entered down a line and result in an extra value.

NOTE;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=44=E1=BA=A1=79=20=E1=BB=9F=20=6E=68=C3=A0=20=6B=E1=BB=9B=70=20=36=2C=
=37=2C=38

Is then result in:

"note": [
    {
        "value": "=44=E1=BA=A1=79=20=E1=BB=9F=20=6E=68=C3=A0=20=6B=E1=BB=9B=70=20=36=2C=",
        "meta": {
            "charset": [
                "UTF-8"
            ],
            "encoding": [
                "QUOTED-PRINTABLE"
            ]
        }
    }
],
"=37=2c=38": [
    {
        "value": ""
    }
]

I don't know if this is a predictable output. My samsung phone export the file with these end line on note field. And I don't see in the spec that it should not contains end line. Or maybe I am using not ascii character. The extra = at the first line is to indicate continuation when decoding quoted-printable string.

Electron support

I was not able to use it in Electron (v 1.4.12).

Tip: changing the last line from:

})(typeof window !== 'undefined' ? window : module.exports);

to:

})(module.exports);

worked, but it may affect other languages.

Publish new version?

It would be great to have a new version being released containing the latest changes.

THX

Multiple categories are escaped to one

The category property has a comma separated value, but it looks like the , is escaped and therefor stored as one group group1\,group2 instead of group1 and group2

https://github.com/Heymdall/vcard/blob/master/src/vcard.js#L162

Fix by replacing the function with:

        var escapeCharacters = function (v, k) {
            if (typeof v === 'undefined') {
                return '';
            }
            v = v
                .replace(/\n/g, '\\n')
                .replace(/;/g, '\\;');

            if (typeof k === 'undefined' || k !== 'categories') {
                return v
                    .replace(/\n/g, '\\n')
                    .replace(/;/g, '\\;')
                    .replace(/,/g, '\\,');
            }
            return v
                .replace(/\n/g, '\\n')
                .replace(/;/g, '\\;');
        };

And adding the key to the escape method in:

              if (typeof value.value === 'string') {
                    line += escapeCharacters(value.value);
                } else {
                    // complex values
                    line += value.value.map(function (item) {
                        return escapeCharacters(item,);
                    }).join(';');
                }

Not sure if there are more values which are treaten wrong, but I found at least those.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.