mirror of https://github.com/artf/grapesjs.git
1 changed files with 97 additions and 0 deletions
@ -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…
Reference in new issue