keeweb/app/scripts/models/menu/menu-item-model.js

71 lines
1.7 KiB
JavaScript
Raw Normal View History

2019-09-15 14:16:32 +02:00
import Backbone from 'backbone';
import { MenuOptionCollection } from 'collections/menu/menu-option-collection';
2017-01-31 07:50:28 +01:00
let ItemCollection;
2015-10-17 23:49:24 +02:00
2017-01-31 07:50:28 +01:00
const MenuItemModel = Backbone.Model.extend({
2015-10-17 23:49:24 +02:00
defaults: {
title: '',
icon: '',
2015-11-21 21:14:21 +01:00
customIcon: null,
2015-10-17 23:49:24 +02:00
active: false,
expanded: true,
items: null,
shortcut: null,
options: null,
cls: null,
disabled: false,
visible: true,
2015-11-08 09:59:46 +01:00
drag: false,
drop: false,
2015-10-17 23:49:24 +02:00
filterKey: null,
filterValue: null,
collapsible: false
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
initialize(model) {
2015-10-27 20:59:04 +01:00
if (model && model.file) {
this.listenTo(model.file, 'change:name', this.changeTitle, this);
}
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
_loadItemCollectionType() {
2019-09-15 14:16:32 +02:00
return require('collections/menu/menu-item-collection').MenuItemCollection;
2015-10-17 23:49:24 +02:00
},
2019-08-18 10:17:09 +02:00
addItem(item) {
2015-10-17 23:49:24 +02:00
if (!ItemCollection) {
ItemCollection = this._loadItemCollectionType();
}
2017-01-31 07:50:28 +01:00
let items = this.get('items');
2015-10-17 23:49:24 +02:00
if (!items) {
items = new ItemCollection();
this.set('items', items);
}
items.add(item);
},
2019-08-18 10:17:09 +02:00
addOption(option) {
2017-01-31 07:50:28 +01:00
let options = this.get('options');
2015-10-17 23:49:24 +02:00
if (!options) {
options = new MenuOptionCollection();
this.set('options', options);
}
options.add(option);
},
2019-08-18 10:17:09 +02:00
toggleExpanded() {
2017-01-31 07:50:28 +01:00
const items = this.get('items');
let expanded = !this.get('expanded');
2015-10-17 23:49:24 +02:00
if (!items || !items.length) {
expanded = true;
}
this.set('expanded', expanded);
2015-10-27 20:59:04 +01:00
},
2019-08-18 10:17:09 +02:00
changeTitle(model, newTitle) {
2015-10-27 20:59:04 +01:00
this.set('title', newTitle);
2015-10-17 23:49:24 +02:00
}
});
2019-09-15 14:16:32 +02:00
export { MenuItemModel };