Browse Source

Draft Pages module

pull/3411/head
Artur Arseniev 5 years ago
parent
commit
7da7a6b91c
  1. 97
      src/pages/index.js

97
src/pages/index.js

@ -0,0 +1,97 @@
import { isString } from 'underscore';
export default () => {
const evPfx = `page:`;
return {
name: 'Pages',
/**
* Initialize module
* @param {Object} config Configurations
* @private
*/
init(opts = {}) {
const { em } = opts;
this.config = { ...opts };
const pages = [];
pages.on('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o));
pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o));
this.em = em;
this.pages = pages;
return this;
},
/**
* Add new page
* @param {Object} props Page properties
* @param {Object} [options] Options
* @returns {Page}
*/
add(props, opts = {}) {
props.id = props.id || this._createId();
return this.pages.add(props, opts);
},
/**
* Remove page
* @param {String|Page} page Page or page id
* @returns {Page}
*/
remove(pg) {
const page = isString(pg) ? this.get(pg) : pg;
page && this.pages.remove(page);
return page;
},
/**
* Get page by id
* @param {String} id Page id
* @returns {Page}
*/
get(id) {
return this.pages.filter(p => p.get('id') === id)[0];
},
/**
* Get all pages
*/
getAll() {
return this.pages;
},
/**
* Select page
* @param {String|Page} page Page or page id
* @returns {this}
*/
select(pg) {
const page = isString(pg) ? this.get(pg) : pg;
this.selected = page;
this.em.trigger(`${evPfx}:select`, page);
return this;
},
/**
* Get the selected page
* @returns {Page}
*/
getSelected() {
return this.selected;
},
/**
* Destroy all
*/
destroy() {
this.pages.off().reset();
['selected', 'config', 'em', 'pages'].map(i => (this[i] = 0));
},
// TODO
_createId() {
return Math.random();
}
};
};
Loading…
Cancel
Save