working on vcard destructuring
This commit is contained in:
31
frontend/src/routes/contact/Address.svelte
Normal file
31
frontend/src/routes/contact/Address.svelte
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<script>
|
||||||
|
import { addr } from '../../vcard.js';
|
||||||
|
|
||||||
|
let { vcard } = $props();
|
||||||
|
|
||||||
|
let address = $derived(addr(vcard));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="address">
|
||||||
|
{#if address.box}
|
||||||
|
<span class="post_box">{address.box}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.ext}
|
||||||
|
<span class="extended">{address.ext}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.street}
|
||||||
|
<span class="street">{address.street}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.code}
|
||||||
|
<span class="code">{address.code}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.loc}
|
||||||
|
<span class="locality">{address.loc}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.region}
|
||||||
|
<span class="region">{address.region}</span>
|
||||||
|
{/if}
|
||||||
|
{#if address.country}
|
||||||
|
<span class="country">{address.country}</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
|
import Address from './Address.svelte';
|
||||||
import FN from './FN.svelte';
|
import FN from './FN.svelte';
|
||||||
import Name from './Name.svelte';
|
import Name from './Name.svelte';
|
||||||
import Org from './Org.svelte';
|
import Org from './Org.svelte';
|
||||||
@@ -7,9 +8,10 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<Org vcard={contact.vcard} /><br/>
|
<FN vcard={contact.vcard} />
|
||||||
<FN vcard={contact.vcard} /><br/>
|
<Org vcard={contact.vcard} />
|
||||||
<Name vcard={contact.vcard} />
|
<Name vcard={contact.vcard} />
|
||||||
|
<Address vcard={contact.vcard} />
|
||||||
<hr/>
|
<hr/>
|
||||||
<pre>{contact.vcard}</pre>
|
<pre>{contact.vcard}</pre>
|
||||||
</div>
|
</div>
|
||||||
@@ -6,18 +6,20 @@
|
|||||||
let n = $derived(name(vcard));
|
let n = $derived(name(vcard));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<div class="name">
|
||||||
{#if n.prefix}
|
{#if n.prefix}
|
||||||
<span class="name prefix">{n.prefix}</span>
|
<span class="prefix">{n.prefix}</span>
|
||||||
{/if}
|
{/if}
|
||||||
{#if n.given}
|
{#if n.given}
|
||||||
<span class="given name">{n.given}</span>
|
<span class="given">{n.given}</span>
|
||||||
{/if}
|
|
||||||
{#if n.family}
|
|
||||||
<span class="family name">{n.family}</span>
|
|
||||||
{/if}
|
{/if}
|
||||||
{#if n.additional}
|
{#if n.additional}
|
||||||
<span class="additional name">{n.additional}</span>
|
<span class="additional">{n.additional}</span>
|
||||||
|
{/if}
|
||||||
|
{#if n.family}
|
||||||
|
<span class="family">{n.family}</span>
|
||||||
{/if}
|
{/if}
|
||||||
{#if n.suffix}
|
{#if n.suffix}
|
||||||
<span class="name suffix">{n.suffix}</span>
|
<span class="suffix">{n.suffix}</span>
|
||||||
{/if}
|
{/if}
|
||||||
|
</div>
|
||||||
@@ -1,51 +1,28 @@
|
|||||||
export function parse(data){
|
export function addr(vcard){
|
||||||
var code = data.vcard;
|
const match = vcard.match(/^ADR:(.+)$/m);
|
||||||
const lines = code.split("\n");
|
let adr = {
|
||||||
let unprocessed = null;
|
box: null,
|
||||||
var o = {};
|
ext: null,
|
||||||
for (var line of lines){
|
street: null,
|
||||||
if (unprocessed = null) unprocessed = line;
|
locality: null,
|
||||||
if (line.startsWith(' ')) { // extend line
|
region: null,
|
||||||
unprocessed += line.substring(1);
|
code: null,
|
||||||
} else {
|
country: null
|
||||||
// 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);
|
if (match){
|
||||||
}
|
const parts = match[1].trim().split(';');
|
||||||
|
adr.box = parts[0];
|
||||||
function parseAdr(key,val){
|
adr.ext = parts[1];
|
||||||
var parts = val.split(';');
|
adr.street = parts[2];
|
||||||
var adr = {
|
adr.loc = parts[3];
|
||||||
postbox : parts[0],
|
adr.region = parts[4];
|
||||||
ext : parts[1],
|
adr.code = parts[5];
|
||||||
street : parts[2],
|
adr.country = parts[6];
|
||||||
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;
|
return adr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function fn(vcard){
|
export function fn(vcard){
|
||||||
const match = vcard.match(/^FN:(.+)$/m);
|
const match = vcard.match(/^FN:(.+)$/m);
|
||||||
return match ? match[1].trim() : '';
|
return match ? match[1].trim() : '';
|
||||||
|
|||||||
Reference in New Issue
Block a user