profile-pane
Version:
A SolidOS compatible pane to display a personal profile page
67 lines • 2.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.presentProfile = void 0;
exports.pronounsAsText = pronounsAsText;
var solid_ui_1 = require("solid-ui");
var solid_logic_1 = require("solid-logic");
var validate_color_1 = require("validate-color");
function pronounsAsText(subject) {
var pronouns = solid_logic_1.store.anyJS(subject, solid_ui_1.ns.solid('preferredSubjectPronoun')) || '';
if (pronouns) {
var them = solid_logic_1.store.anyJS(subject, solid_ui_1.ns.solid('preferredObjectPronoun'));
if (them) {
pronouns += '/' + them;
var their = solid_logic_1.store.anyJS(subject, solid_ui_1.ns.solid('preferredRelativePronoun'));
if (their) {
pronouns += '/' + their;
}
}
pronouns = ' (' + pronouns + ') ';
}
return pronouns || '';
}
var presentProfile = function (subject, store) {
var name = solid_ui_1.utils.label(subject);
var imageSrc = solid_ui_1.widgets.findImage(subject);
var role = store.anyValue(subject, solid_ui_1.ns.vcard("role"));
var orgName = store.anyValue(subject, solid_ui_1.ns.vcard("organization-name")); // @@ Search whole store
var address = store.any(subject, solid_ui_1.ns.vcard("hasAddress"));
var countryName = address != null
? store.anyValue(address, solid_ui_1.ns.vcard("country-name"))
: null;
var locality = address != null
? store.anyValue(address, solid_ui_1.ns.vcard("locality"))
: null;
var _a = getColors(subject, store), backgroundColor = _a.backgroundColor, highlightColor = _a.highlightColor;
var pronouns = pronounsAsText(subject);
return {
name: name,
imageSrc: imageSrc,
introduction: formatIntroduction(role, orgName),
location: formatLocation(countryName, locality),
backgroundColor: backgroundColor,
pronouns: pronouns,
highlightColor: highlightColor,
};
};
exports.presentProfile = presentProfile;
function formatLocation(countryName, locality) {
return countryName && locality
? "".concat(locality, ", ").concat(countryName)
: countryName || locality || null;
}
function formatIntroduction(role, orgName) {
return role && orgName ? "".concat(role, " at ").concat(orgName) : orgName || role || null;
}
function getColors(subject, store) {
var backgroundColor = store.anyValue(subject, solid_ui_1.ns.solid("profileBackgroundColor"), null, subject.doc());
var highlightColor = store.anyValue(subject, solid_ui_1.ns.solid("profileHighlightColor"), null, subject.doc());
return {
backgroundColor: validColorOrDefault(backgroundColor, "#eee"),
highlightColor: validColorOrDefault(highlightColor, "#090"),
};
}
function validColorOrDefault(color, fallback) {
return color && (0, validate_color_1.validateHTMLColorHex)(color) ? color : fallback;
}
//# sourceMappingURL=presenter.js.map