profile-pane
Version:
A SolidOS compatible pane to display a personal profile page
104 lines • 4.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.typesOfRole = void 0;
exports.skillAsText = skillAsText;
exports.languageAsText = languageAsText;
exports.datesAsText = datesAsText;
exports.presentCV = presentCV;
var rdflib_1 = require("rdflib");
var solid_ui_1 = require("solid-ui");
var ORG = (0, rdflib_1.Namespace)('http://www.w3.org/ns/org#');
exports.typesOfRole = ['PastRole', 'CurrentRole', 'FutureRole'];
function skillAsText(store, sk) {
if (sk.termType === 'Literal')
return sk.value; // Not normal but allow this
var publicId = store.anyJS(sk, solid_ui_1.ns.solid('publicId'));
if (publicId) {
var name_1 = store.anyJS(publicId, solid_ui_1.ns.schema('name'));
if (name_1)
return name_1; // @@ check language and get name in diff language if necessary
}
var manual = store.anyJS(sk, solid_ui_1.ns.vcard('role'));
if (manual && manual[0] > "")
return manual;
return '¿¿¿ skill ???';
}
function languageAsText(store, lan) {
if (lan.termType === 'Literal')
return lan.value; // Not normal but allow this
var publicId = store.anyJS(lan, solid_ui_1.ns.solid('publicId'));
if (publicId)
return solid_ui_1.utils.label(publicId, true); // @@ check language and get name in diff language if necessary
return '-';
}
function datesAsText(startDate, endDate) {
return startDate ? '(' + startDate.value.slice(0, 10) + ' to ' +
(endDate ? endDate.value.slice(0, 10) : '') + ')'
: '';
}
function getRolesByType(store, subject) {
var memberships = store.each(null, ORG('member'), subject, null);
var rolesByType = { PastRole: [], CurrentRole: [], FutureRole: [] };
for (var _i = 0, memberships_1 = memberships; _i < memberships_1.length; _i++) {
var membership = memberships_1[_i];
var orgHomePage = void 0, orgNameGiven = void 0, publicIdName = void 0, roleName = void 0, publicId
// Things should have start dates but we will be very lenient in this view
= void 0;
// Things should have start dates but we will be very lenient in this view
var startDate = store.any(membership, solid_ui_1.ns.schema('startDate'));
var endDate = store.any(membership, solid_ui_1.ns.schema('endDate'));
var dates = datesAsText(startDate, endDate);
var organization = store.any(membership, ORG('organization'));
if (organization) {
orgNameGiven = store.anyJS(organization, solid_ui_1.ns.schema('name'));
orgHomePage = store.any(organization, solid_ui_1.ns.schema('uri'));
publicId = store.any(organization, solid_ui_1.ns.solid('publicId'));
}
if (publicId) {
publicIdName = store.anyJS(publicId, solid_ui_1.ns.schema('name'));
}
var orgName = publicIdName || orgNameGiven;
var escoRole = store.any(membership, ORG('role'));
if (escoRole) {
roleName = store.anyJS(escoRole, solid_ui_1.ns.schema('name'));
}
var roleText0 = store.anyJS(membership, solid_ui_1.ns.vcard('role'));
var roleText = (roleText0 && roleName) ? roleName + ' - ' + roleText0
: roleText0 || roleName;
var item = {
startDate: startDate,
endDate: endDate,
orgName: orgName,
roleText: roleText,
dates: dates,
orgHomePage: orgHomePage
};
for (var _a = 0, typesOfRole_1 = exports.typesOfRole; _a < typesOfRole_1.length; _a++) {
var t = typesOfRole_1[_a];
if (store.holds(membership, solid_ui_1.ns.rdf('type'), solid_ui_1.ns.solid(t))) {
rolesByType[t].push(item);
}
}
}
return rolesByType;
}
function presentCV(subject, store) {
var rolesByType = getRolesByType(store, subject);
// Most recent thing most relevant -> sort by end date
for (var _i = 0, typesOfRole_2 = exports.typesOfRole; _i < typesOfRole_2.length; _i++) {
var t = typesOfRole_2[_i];
rolesByType[t].sort(function (x, y) {
if (x.endDate && y.endDate) {
return x.endDate > y.endDate ? -1 : 1;
}
return x.startDate > y.startDate ? -1 : 1;
});
}
var skills = store.each(subject, solid_ui_1.ns.schema('skills')).map(function (sk) { return skillAsText(store, sk); });
var languagesInStore = store.anyJS(subject, solid_ui_1.ns.schema('knowsLanguage'));
var languages = [];
if (languagesInStore)
languages = languagesInStore.map(function (lan) { return languageAsText(store, lan); });
return { rolesByType: rolesByType, skills: skills, languages: languages };
}
//# sourceMappingURL=CVPresenter.js.map