comindware.ui
Version:
Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.
103 lines (92 loc) • 4.9 kB
JavaScript
/**
* Developer: Stepan Burguchev
* Date: 11/26/2014
* Copyright: 2009-2016 Comindware®
* All Rights Reserved
* Published under the MIT license
*/
;
import PopoutView from './views/PopoutView';
import ListPanelView from './views/ListPanelView';
import MenuItemView from './views/MenuItemView';
import DefaultButtonView from './views/DefaultButtonView';
import MenuPanelView from './views/MenuPanelView';
import DropdownView from './views/DropdownView';
/**
* The factory covers common use cases of Popout/Dropdown views.
* You can create a simple menu (and other stuff like this) in one click without lots of manual work.
* @namespace factory
* @memberof module:core.dropdown
* */
export default /** @lends module:core.dropdown.factory */ {
/**
* @description Метод служит для быстрого создания меню на базе {@link module:core.dropdown.views.PopoutView PopoutView}.
* В качестве <code>buttonView</code> и <code>panelView</code> (если они не заданы в опциях явно)
* используются предустановленные View для меню. Остальные опции PopoutView передаются 'as is'.
* @param {Object} options Объект опций {@link module:core.dropdown.views.PopoutView PopoutView}. Доступны дополнительные опции, приведенные ниже:
* @param {Array} options.items Элементы списка меню. Могут быть переданы как простой массив объектов <code>{ id, name }</code>
* или как Backbone.Collection.
* @param {String} [options.text] Текст кнопки меню. Если не задан, требуется вручную установить опцию <code>buttonView</code>.
* @returns {Backbone.View} View Меню
* */
createMenu(options) {
options = options || {};
let collection = options.items;
if (!(collection instanceof Backbone.Collection)) {
collection = new Backbone.Collection(collection);
}
let effectiveButtonModel = options.buttonModel || new Backbone.Model({
text: options.text
});
if (!options.buttonModel) {
const defaultActModel = collection.findWhere({ default: true });
if (defaultActModel) {
effectiveButtonModel = defaultActModel;
collection.remove(effectiveButtonModel);
}
}
return this.createPopout(_.extend({
buttonView: DefaultButtonView,
buttonViewOptions: {
model: effectiveButtonModel
},
panelView: MenuPanelView,
panelViewOptions: {
collection
}
}, options));
},
/**
* @description Метод служит для создания {@link module:core.dropdown.views.PopoutView PopoutView} в режиме диалога.
* Выпадающая панель занимает все пространство до низа экрана, а область вокруг затемняется.
* Метод устанавливает опции <code>{ fade: true, height: 'bottom' }</code>.
* @param {Object} options Объект опций {@link module:core.dropdown.views.PopoutView PopoutView}
* @returns {PopoutView} Экземпляр PopoutView
* */
createDialogPopout(options) {
const defaults = {
fade: true,
height: 'bottom'
};
options = _.extend(defaults, options);
return this.createPopout(options);
},
/**
* @description Метод вызывает стандартный конструктор
* {@link module:core.dropdown.views.PopoutView PopoutView} передавая ему опции 'as is'.
* @param {Object} options Объект опций {@link module:core.dropdown.views.PopoutView PopoutView}
* @returns {PopoutView} Экземпляр PopoutView
* */
createPopout(options) {
return new PopoutView(options);
},
/**
* @description Метод вызывает стандартный конструктор
* {@link module:core.dropdown.views.DropdownView DropdownView} передавая ему опции 'as is'.
* @param {Object} options Объект опций {@link module:core.dropdown.views.DropdownView DropdownView}
* @returns {DropdownView} Экземпляр DropdownView
* */
createDropdown(options) {
return new DropdownView(options);
}
};