@minix-iot/ui
Version:
基于Vue的移动端轻量级UI组件库
51 lines (42 loc) • 1.08 kB
JavaScript
export class Namespace {
static ROOT = 'mx';
static Create(name) {
return new Namespace(name);
}
constructor(name) {
this._name = name;
}
get name() {
return `${Namespace.ROOT}-${this._name}`;
}
// 衍生名称空间
// css 子/组合类名
derive(name, mods) {
if (name && typeof name !== 'string') {
mods = name;
name = '';
}
name = name ? this.sub(name) : this.name;
return `${name}${this.mod(name, mods)}`;
}
// 子名称空间
// css 子类名
sub(name) {
const names = Array.isArray(name) ? name : [name];
return names.reduce((ret, item) => `${ret}-${item}`, names.length ? this.name : '');
}
// 名称空间模式
// css 组合类名
mod(name, mods) {
if (!mods) {
return '';
}
if (typeof mods === 'string') {
return ` ${name}--${mods}`;
}
if (Array.isArray(mods)) {
return mods.reduce((ret, item) => ret + this.mod(name, item), '');
}
return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? this.mod(name, key) : ''), '');
}
}