maille
Version:
Component library for MithrilJS
50 lines (49 loc) • 2.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mithril_1 = __importDefault(require("mithril")); // +standalone
const types_1 = require("../../types");
class Alert {
view(vnode) {
// Retrieve relevant attributes
const { title, closeOptions, description, footer, rounded } = vnode.attrs;
const alertType = vnode.attrs.type || types_1.AlertType.Default;
// Build list of classes, combine with vnode
const classes = new Set(["maille", "maille-alert"]);
// If outlined, add the outline class
if (rounded) {
classes.add("rounded");
}
// Add the alert type
classes.add(alertType);
// Add in className classes provided by vnode
if (vnode.attrs.className) {
vnode.attrs.className.split(" ").forEach(c => classes.add(c));
}
// Build classname
const className = [...classes].join(" ");
// Build header elements
const headerElements = [
mithril_1.default(".maille-alert-title", title),
description ? mithril_1.default(".maille-alert-description", description) : null,
];
// Add close options if configured
if (closeOptions) {
const closeHandler = () => {
if (closeOptions.fn) {
closeOptions.fn(closeOptions.key);
}
};
const closeElement = closeOptions.elements || mithril_1.default.trust("×");
headerElements.push(mithril_1.default("span.maille-alert-close-container", { onclick: closeHandler }, closeElement));
}
return mithril_1.default(".maille.maille-alert", Object.assign(Object.assign({}, vnode.attrs), { className }), [
mithril_1.default(".maille-alert-header", headerElements),
mithril_1.default(".maille-alert-body", vnode.children),
footer ? mithril_1.default(".maille-alert-footer", footer) : null,
]);
}
}
exports.default = Alert;