profile-pane 3.1.2-test.5 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/CVPresenter.d.ts.map +1 -1
- package/lib/CVPresenter.js +4 -2
- package/lib/SocialPresenter.d.ts.map +1 -1
- package/lib/SocialPresenter.js +48 -25
- package/lib/profile-pane.js +57 -30
- package/lib/profile-pane.js.map +1 -1
- package/lib/profile-pane.min.js +27 -27
- package/lib/profile-pane.min.js.map +1 -1
- package/package.json +3 -3
package/lib/CVPresenter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CVPresenter.d.ts","sourceRoot":"","sources":["../src/CVPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9E,MAAM,WAAW,IAAI;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAID,eAAO,MAAM,WAAW,UAA4C,CAAA;AAEpE,wBAAgB,WAAW,CAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAE,MAAM,CAW1D;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAM9D;AAED,wBAAgB,WAAW,CAAE,SAAS,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,EAAC,OAAO,GAAE,MAAM,CAIxE;AAsED,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,cAAc,
|
|
1
|
+
{"version":3,"file":"CVPresenter.d.ts","sourceRoot":"","sources":["../src/CVPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9E,MAAM,WAAW,IAAI;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AACD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,UAAU,EAAE,IAAI,EAAE,CAAC;CACpB;AAID,eAAO,MAAM,WAAW,UAA4C,CAAA;AAEpE,wBAAgB,WAAW,CAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAE,MAAM,CAW1D;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAM9D;AAED,wBAAgB,WAAW,CAAE,SAAS,CAAC,EAAC,OAAO,EAAE,OAAO,CAAC,EAAC,OAAO,GAAE,MAAM,CAIxE;AAsED,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,cAAc,CA0BhB"}
|
package/lib/CVPresenter.js
CHANGED
|
@@ -108,10 +108,12 @@ function presentCV(subject, store) {
|
|
|
108
108
|
}
|
|
109
109
|
const skills = store.each(subject, _solidUi.ns.schema('skills')).map(sk => skillAsText(store, sk)).filter(skill => skill !== '');
|
|
110
110
|
const languageNodes = store.each(subject, _solidUi.ns.schema('knowsLanguage'));
|
|
111
|
-
const languages = languageNodes.flatMap(node => expandRdfList(store, node)).map(lan => languageAsText(store, lan))
|
|
111
|
+
const languages = languageNodes.flatMap(node => expandRdfList(store, node)).map(lan => languageAsText(store, lan));
|
|
112
|
+
// Deduplicate languages
|
|
113
|
+
const uniqueLanguages = Array.from(new Set(languages));
|
|
112
114
|
return {
|
|
113
115
|
rolesByType,
|
|
114
116
|
skills,
|
|
115
|
-
languages
|
|
117
|
+
languages: uniqueLanguages
|
|
116
118
|
};
|
|
117
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SocialPresenter.d.ts","sourceRoot":"","sources":["../src/SocialPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAA;AAQnD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"SocialPresenter.d.ts","sourceRoot":"","sources":["../src/SocialPresenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAA;AAQnD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAiCD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GACf,kBAAkB,CA+EpB"}
|
package/lib/SocialPresenter.js
CHANGED
|
@@ -13,22 +13,31 @@ const socialMediaFormName = 'socialMedia.ttl'; // The name of the file to upload
|
|
|
13
13
|
const DEFAULT_ICON_URI = _solidUi.icons.iconBase + 'noun_10636_grey.svg'; // grey disc
|
|
14
14
|
|
|
15
15
|
function expandRdfList(store, node) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
if (!
|
|
29
|
-
|
|
16
|
+
const visited = new Set();
|
|
17
|
+
function inner(node) {
|
|
18
|
+
const termType = node.termType || typeof node;
|
|
19
|
+
const value = node.value || String(node);
|
|
20
|
+
const key = `${termType}:${value}`;
|
|
21
|
+
if (visited.has(key)) return [];
|
|
22
|
+
visited.add(key);
|
|
23
|
+
const collectionElements = node.elements;
|
|
24
|
+
if (Array.isArray(collectionElements)) {
|
|
25
|
+
return collectionElements.flatMap(element => inner(element));
|
|
26
|
+
}
|
|
27
|
+
const first = store.any(node, _solidUi.ns.rdf('first'));
|
|
28
|
+
if (!first) return [node];
|
|
29
|
+
const items = [];
|
|
30
|
+
let current = node;
|
|
31
|
+
while (current) {
|
|
32
|
+
const value = store.any(current, _solidUi.ns.rdf('first'));
|
|
33
|
+
if (value) items.push(...inner(value));
|
|
34
|
+
const rest = store.any(current, _solidUi.ns.rdf('rest'));
|
|
35
|
+
if (!rest || rest.termType === 'NamedNode' && rest.value === _solidUi.ns.rdf('nil').value) break;
|
|
36
|
+
current = rest;
|
|
37
|
+
}
|
|
38
|
+
return items;
|
|
30
39
|
}
|
|
31
|
-
return
|
|
40
|
+
return inner(node);
|
|
32
41
|
}
|
|
33
42
|
function presentSocial(subject, store) {
|
|
34
43
|
function nameForAccount(subject) {
|
|
@@ -59,12 +68,17 @@ function presentSocial(subject, store) {
|
|
|
59
68
|
return DEFAULT_ICON_URI;
|
|
60
69
|
}
|
|
61
70
|
function homepageForAccount(subject) {
|
|
62
|
-
const
|
|
71
|
+
const acHomepage = store.any(subject, _solidUi.ns.foaf('homepage')); // on the account itself?
|
|
72
|
+
if (acHomepage) return acHomepage.value;
|
|
73
|
+
const id = store.anyJS(subject, _solidUi.ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name';
|
|
63
74
|
const classes = store.each(subject, _solidUi.ns.rdf('type'));
|
|
64
75
|
for (const k of classes) {
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
|
|
76
|
+
// Fix: ensure k is a NamedNode for store.any
|
|
77
|
+
if (k.termType === 'NamedNode') {
|
|
78
|
+
const userProfilePrefix = store.any(k, _solidUi.ns.foaf('userProfilePrefix'));
|
|
79
|
+
if (userProfilePrefix) {
|
|
80
|
+
return userProfilePrefix.value + id.trim();
|
|
81
|
+
}
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
84
|
return store.anyJS(subject, _solidUi.ns.foaf('homepage'), null, subject.doc()) || '';
|
|
@@ -80,14 +94,23 @@ function presentSocial(subject, store) {
|
|
|
80
94
|
// we need to load the social media accounts ontology to be able to query all data needed
|
|
81
95
|
(0, _rdfFormsHelper.loadDocument)(store, socialMediaForm, socialMediaFormName);
|
|
82
96
|
const accountNodes = store.each(subject, _solidUi.ns.foaf('account'));
|
|
83
|
-
|
|
84
|
-
|
|
97
|
+
let accountThings = accountNodes.flatMap(node => expandRdfList(store, node));
|
|
98
|
+
// Deduplicate by foaf:accountName value
|
|
99
|
+
const accountNameSet = new Set();
|
|
100
|
+
const accounts = [];
|
|
101
|
+
for (const ac of accountThings) {
|
|
102
|
+
if (ac.termType === 'NamedNode') {
|
|
103
|
+
const accountNameNode = store.any(ac, _solidUi.ns.foaf('accountName'));
|
|
104
|
+
const accountName = accountNameNode ? accountNameNode.value : '';
|
|
105
|
+
if (!accountNameSet.has(accountName)) {
|
|
106
|
+
accountNameSet.add(accountName);
|
|
107
|
+
accounts.push(accountAsObject(ac));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (!accounts.length) return {
|
|
85
112
|
accounts: []
|
|
86
113
|
};
|
|
87
|
-
//console.log('Social: accountThings', accountThings)
|
|
88
|
-
const accounts = accountThings.map(ac => accountAsObject(ac));
|
|
89
|
-
//console.log('Social: account objects', accounts)
|
|
90
|
-
|
|
91
114
|
return {
|
|
92
115
|
accounts
|
|
93
116
|
};
|
package/lib/profile-pane.js
CHANGED
|
@@ -5197,9 +5197,10 @@ function presentCV(subject, store) {
|
|
|
5197
5197
|
const languageNodes = store.each(subject, external_UI_.ns.schema('knowsLanguage'));
|
|
5198
5198
|
const languages = languageNodes
|
|
5199
5199
|
.flatMap(node => expandRdfList(store, node))
|
|
5200
|
-
.map(lan => languageAsText(store, lan))
|
|
5201
|
-
|
|
5202
|
-
|
|
5200
|
+
.map(lan => languageAsText(store, lan));
|
|
5201
|
+
// Deduplicate languages
|
|
5202
|
+
const uniqueLanguages = Array.from(new Set(languages));
|
|
5203
|
+
return { rolesByType, skills, languages: uniqueLanguages };
|
|
5203
5204
|
}
|
|
5204
5205
|
|
|
5205
5206
|
;// ./src/ontology/socialMedia.ttl
|
|
@@ -5240,25 +5241,35 @@ function loadDocument(store, documentSource, documentName, documentURI) {
|
|
|
5240
5241
|
const socialMediaFormName = 'socialMedia.ttl'; // The name of the file to upload
|
|
5241
5242
|
const DEFAULT_ICON_URI = external_UI_.icons.iconBase + 'noun_10636_grey.svg'; // grey disc
|
|
5242
5243
|
function SocialPresenter_expandRdfList(store, node) {
|
|
5243
|
-
const
|
|
5244
|
-
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
current =
|
|
5244
|
+
const visited = new Set();
|
|
5245
|
+
function inner(node) {
|
|
5246
|
+
const termType = node.termType || typeof node;
|
|
5247
|
+
const value = node.value || String(node);
|
|
5248
|
+
const key = `${termType}:${value}`;
|
|
5249
|
+
if (visited.has(key))
|
|
5250
|
+
return [];
|
|
5251
|
+
visited.add(key);
|
|
5252
|
+
const collectionElements = node.elements;
|
|
5253
|
+
if (Array.isArray(collectionElements)) {
|
|
5254
|
+
return collectionElements.flatMap(element => inner(element));
|
|
5255
|
+
}
|
|
5256
|
+
const first = store.any(node, external_UI_.ns.rdf('first'));
|
|
5257
|
+
if (!first)
|
|
5258
|
+
return [node];
|
|
5259
|
+
const items = [];
|
|
5260
|
+
let current = node;
|
|
5261
|
+
while (current) {
|
|
5262
|
+
const value = store.any(current, external_UI_.ns.rdf('first'));
|
|
5263
|
+
if (value)
|
|
5264
|
+
items.push(...inner(value));
|
|
5265
|
+
const rest = store.any(current, external_UI_.ns.rdf('rest'));
|
|
5266
|
+
if (!rest || (rest.termType === 'NamedNode' && rest.value === external_UI_.ns.rdf('nil').value))
|
|
5267
|
+
break;
|
|
5268
|
+
current = rest;
|
|
5269
|
+
}
|
|
5270
|
+
return items;
|
|
5260
5271
|
}
|
|
5261
|
-
return
|
|
5272
|
+
return inner(node);
|
|
5262
5273
|
}
|
|
5263
5274
|
function presentSocial(subject, store) {
|
|
5264
5275
|
function nameForAccount(subject) {
|
|
@@ -5292,12 +5303,18 @@ function presentSocial(subject, store) {
|
|
|
5292
5303
|
return DEFAULT_ICON_URI;
|
|
5293
5304
|
}
|
|
5294
5305
|
function homepageForAccount(subject) {
|
|
5295
|
-
const
|
|
5306
|
+
const acHomepage = store.any(subject, external_UI_.ns.foaf('homepage')); // on the account itself?
|
|
5307
|
+
if (acHomepage)
|
|
5308
|
+
return acHomepage.value;
|
|
5309
|
+
const id = store.anyJS(subject, external_UI_.ns.foaf('accountName'), null, subject.doc()) || 'No_account_Name';
|
|
5296
5310
|
const classes = store.each(subject, external_UI_.ns.rdf('type'));
|
|
5297
5311
|
for (const k of classes) {
|
|
5298
|
-
|
|
5299
|
-
if (
|
|
5300
|
-
|
|
5312
|
+
// Fix: ensure k is a NamedNode for store.any
|
|
5313
|
+
if (k.termType === 'NamedNode') {
|
|
5314
|
+
const userProfilePrefix = store.any(k, external_UI_.ns.foaf('userProfilePrefix'));
|
|
5315
|
+
if (userProfilePrefix) {
|
|
5316
|
+
return userProfilePrefix.value + id.trim();
|
|
5317
|
+
}
|
|
5301
5318
|
}
|
|
5302
5319
|
}
|
|
5303
5320
|
return store.anyJS(subject, external_UI_.ns.foaf('homepage'), null, subject.doc()) || '';
|
|
@@ -5312,12 +5329,22 @@ function presentSocial(subject, store) {
|
|
|
5312
5329
|
// we need to load the social media accounts ontology to be able to query all data needed
|
|
5313
5330
|
loadDocument(store, socialMedia_namespaceObject, socialMediaFormName);
|
|
5314
5331
|
const accountNodes = store.each(subject, external_UI_.ns.foaf('account'));
|
|
5315
|
-
|
|
5316
|
-
|
|
5332
|
+
let accountThings = accountNodes.flatMap(node => SocialPresenter_expandRdfList(store, node));
|
|
5333
|
+
// Deduplicate by foaf:accountName value
|
|
5334
|
+
const accountNameSet = new Set();
|
|
5335
|
+
const accounts = [];
|
|
5336
|
+
for (const ac of accountThings) {
|
|
5337
|
+
if (ac.termType === 'NamedNode') {
|
|
5338
|
+
const accountNameNode = store.any(ac, external_UI_.ns.foaf('accountName'));
|
|
5339
|
+
const accountName = accountNameNode ? accountNameNode.value : '';
|
|
5340
|
+
if (!accountNameSet.has(accountName)) {
|
|
5341
|
+
accountNameSet.add(accountName);
|
|
5342
|
+
accounts.push(accountAsObject(ac));
|
|
5343
|
+
}
|
|
5344
|
+
}
|
|
5345
|
+
}
|
|
5346
|
+
if (!accounts.length)
|
|
5317
5347
|
return { accounts: [] };
|
|
5318
|
-
//console.log('Social: accountThings', accountThings)
|
|
5319
|
-
const accounts = accountThings.map(ac => accountAsObject(ac));
|
|
5320
|
-
//console.log('Social: account objects', accounts)
|
|
5321
5348
|
return { accounts };
|
|
5322
5349
|
}
|
|
5323
5350
|
|