create the type register
This commit is contained in:
Родитель
20b5ab95c0
Коммит
e4bea42dc0
|
@ -1 +1,8 @@
|
|||
import { register } from './item-register.js';
|
||||
import { buildButtonItem } from './button.js';
|
||||
|
||||
register('button', buildButtonItem);
|
||||
|
||||
export { register } from './item-register.js';
|
||||
export { Toolbar } from './toolbar.js';
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import _ from 'underscore';
|
||||
|
||||
const itemBuilders = {};
|
||||
|
||||
export function register(name, builder) {
|
||||
if (_.has(itemBuilders, name)) {
|
||||
throw new Error('Duplicated registration');
|
||||
}
|
||||
|
||||
if (!_.isFunction(builder)) {
|
||||
throw new Error('Item builder has to be a function');
|
||||
}
|
||||
|
||||
itemBuilders[name] = builder;
|
||||
}
|
||||
|
||||
export function getItemBuilder(name) {
|
||||
if (!_.isFunction(itemBuilders[name])) {
|
||||
throw new Error('Unknown item type');
|
||||
}
|
||||
|
||||
return itemBuilders[name];
|
||||
}
|
||||
|
|
@ -1,13 +1,9 @@
|
|||
import _ from 'underscore';
|
||||
import Backbone from 'backbone';
|
||||
import toolbarTemplate from './toolbar.jade';
|
||||
import { buildButtonItem } from './button.js';
|
||||
import { getItemBuilder } from './item-register.js';
|
||||
import './toolbar.less';
|
||||
|
||||
const builders = {
|
||||
button: buildButtonItem,
|
||||
};
|
||||
|
||||
function mergeEvents(dest, src) {
|
||||
const result = dest || {};
|
||||
|
||||
|
@ -38,10 +34,6 @@ function normalizeItem(item) {
|
|||
const error = new Error('Invalid toolbar item');
|
||||
error.item = item;
|
||||
throw error;
|
||||
} else if (!_.isFunction(builders[item.type])) {
|
||||
const error = new Error('Unknown item type');
|
||||
error.type = item.type;
|
||||
throw error;
|
||||
}
|
||||
|
||||
return item;
|
||||
|
@ -68,7 +60,7 @@ export class Toolbar extends Backbone.View {
|
|||
|
||||
_buildItems() {
|
||||
return _.reduce(this._state.items, (memo, item, index) => {
|
||||
const toolbarItemBuilder = builders[normalizeItem(item).type];
|
||||
const toolbarItemBuilder = getItemBuilder(normalizeItem(item).type);
|
||||
const { events, html } = toolbarItemBuilder(_.defaults({
|
||||
tabindex: index === 0 ? 0 : -1,
|
||||
}, item));
|
||||
|
@ -98,4 +90,3 @@ export class Toolbar extends Backbone.View {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче