64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var CoreView = require('backbone/core-view');
|
||
|
var TabPaneView = require('./tab-pane-view.js');
|
||
|
var TabPaneCollection = require('./tab-pane-collection');
|
||
|
var MixedLabelView = require('./tab-pane-mixed-view');
|
||
|
var ColorView = require('./tab-pane-color-view');
|
||
|
|
||
|
/**
|
||
|
* Creates a tab pane, where the menu consists of text labels.
|
||
|
*
|
||
|
* Example usage:
|
||
|
* {
|
||
|
* label: 'My label',
|
||
|
* createContentView: CoreView(),
|
||
|
* selected: false
|
||
|
* }
|
||
|
*
|
||
|
* @param {Array} paneItems
|
||
|
* @param {Object} options
|
||
|
* @return {Object} instance of CoreView
|
||
|
*/
|
||
|
module.exports = function (paneItems, options) {
|
||
|
options = options || {};
|
||
|
var tabPaneItemLabelOptions = options.tabPaneItemLabelOptions;
|
||
|
|
||
|
var items = paneItems.map(function (paneItem) {
|
||
|
['label', 'createContentView'].forEach(function (check) {
|
||
|
if (!paneItem[check]) {
|
||
|
throw new Error(check + ' should be provided');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
name: paneItem.name,
|
||
|
selected: paneItem.selected,
|
||
|
label: paneItem.label,
|
||
|
color: paneItem.color,
|
||
|
kind: paneItem.kind,
|
||
|
selectedChild: paneItem.selectedChild,
|
||
|
createButtonView: function () {
|
||
|
if (paneItem.type === 'color') {
|
||
|
return new ColorView(_.extend({ model: this }, tabPaneItemLabelOptions));
|
||
|
} else {
|
||
|
return new MixedLabelView(_.extend({ model: this, type: paneItem.type }, tabPaneItemLabelOptions));
|
||
|
}
|
||
|
},
|
||
|
createContentView: function () {
|
||
|
return paneItem.createContentView && paneItem.createContentView() || new CoreView();
|
||
|
}
|
||
|
};
|
||
|
});
|
||
|
|
||
|
var collection = new TabPaneCollection(items);
|
||
|
|
||
|
var tabPaneOptions = options.tabPaneOptions;
|
||
|
|
||
|
return new TabPaneView(
|
||
|
_.extend(
|
||
|
{ collection: collection },
|
||
|
tabPaneOptions
|
||
|
)
|
||
|
);
|
||
|
};
|