working on vcard display
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
82
frontend/src/vcard.js
Normal file
82
frontend/src/vcard.js
Normal file
@@ -0,0 +1,82 @@
|
||||
export function parse(data){
|
||||
var code = data.vcard;
|
||||
const lines = code.split("\n");
|
||||
let unprocessed = null;
|
||||
var o = {};
|
||||
for (var line of lines){
|
||||
if (unprocessed = null) unprocessed = line;
|
||||
if (line.startsWith(' ')) { // extend line
|
||||
unprocessed += line.substring(1);
|
||||
} else {
|
||||
// process complete line
|
||||
const parts = line.split(':');
|
||||
var prefix = parts[0];
|
||||
var val = parts.slice(1).join(':');
|
||||
var key = prefix.split(';')[0].toUpperCase();
|
||||
switch (key) {
|
||||
case "ADR": o[key] = parseAdr(prefix,val); break;
|
||||
default:
|
||||
if (key) o[prefix]=val;
|
||||
}
|
||||
unprocessed = line;
|
||||
}
|
||||
}
|
||||
console.log(o);
|
||||
}
|
||||
|
||||
function parseAdr(key,val){
|
||||
var parts = val.split(';');
|
||||
var adr = {
|
||||
postbox : parts[0],
|
||||
ext : parts[1],
|
||||
street : parts[2],
|
||||
locality : parts[3],
|
||||
region : parts[4],
|
||||
code : parts[5],
|
||||
country : parts[6]
|
||||
}
|
||||
parts = key.split(';');
|
||||
for (let part of parts){
|
||||
let inner = part.split('=');
|
||||
if (inner.length<2) continue;
|
||||
const k = inner[0];
|
||||
const v = inner.slice(1).join('=');
|
||||
adr[k] = v;
|
||||
}
|
||||
return adr;
|
||||
}
|
||||
|
||||
export function fn(vcard){
|
||||
const match = vcard.match(/^FN:(.+)$/m);
|
||||
return match ? match[1].trim() : '';
|
||||
}
|
||||
|
||||
export function org(vcard){
|
||||
const match = vcard.match(/^ORG:(.+)$/m);
|
||||
return match ? match[1].trim() : '';
|
||||
}
|
||||
|
||||
export function name(vcard){
|
||||
const match = vcard.match(/^N:(.+)$/m);
|
||||
let name = {
|
||||
family: null,
|
||||
given: null,
|
||||
additional: null,
|
||||
prefix: null,
|
||||
suffix: null
|
||||
}
|
||||
if (match){
|
||||
const parts = match[1].trim().split(';');
|
||||
name.family = parts[0];
|
||||
name.given = parts[1];
|
||||
name.additional = parts[2];
|
||||
name.prefix = parts[3];
|
||||
name.suffix = parts[4];
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
export function byName(a,b){
|
||||
return fn(a.vcard).localeCompare(fn(b.vcard));
|
||||
}
|
||||
Reference in New Issue
Block a user