maille
Version:
Component library for MithrilJS
52 lines (51 loc) • 2.13 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 Tag {
view(vnode) {
const { closeOptions, text, size } = vnode.attrs;
const tagType = vnode.attrs.type || types_1.TagType.Default;
const tagSize = vnode.attrs.size || types_1.Size.Medium;
const classes = new Set(["maille", "maille-tag"]);
// Add class names if provided by the user
if (vnode.attrs.className) {
vnode.attrs.className.split(" ").forEach(c => classes.add(c));
}
// Add additional styling classes
classes.add(tagType);
classes.add(`size-${tagSize}`);
if (vnode.attrs.outlined) {
classes.add("outlined");
}
if (vnode.attrs.rounded) {
classes.add("rounded");
}
// Build the className
const className = [...classes].join(" ");
// Build children
let children = [mithril_1.default("span", vnode.attrs.text)];
// Use passed in children if available
if (vnode.children && "length" in vnode.children && vnode.children.length > 0) {
children = vnode.children;
}
// Add removal times button on the right if close options are provided
if (closeOptions && closeOptions.fn) {
const closeHandler = () => {
if (closeOptions.fn) {
closeOptions.fn(closeOptions.key);
}
};
children.push(mithril_1.default("a", { onclick: closeHandler }, closeOptions.elements || [mithril_1.default("span", { style: { cursor: "pointer" } }, mithril_1.default.trust(" ×"))]));
}
const attrs = {
style: vnode.attrs.style,
className,
};
return mithril_1.default("span.maille.maille-tag", attrs, children);
}
}
exports.default = Tag;