Browse Source

Add types file to Pages module

pull/5694/head
Artur Arseniev 3 years ago
parent
commit
a5ac7af6d2
  1. 4
      src/canvas/model/Canvas.ts
  2. 2
      src/editor/config/config.ts
  3. 61
      src/pages/index.ts
  4. 2
      src/pages/model/Page.ts
  5. 61
      src/pages/types.ts

4
src/canvas/model/Canvas.ts

@ -2,8 +2,8 @@ import CanvasModule from '..';
import { ModuleModel } from '../../abstract'; import { ModuleModel } from '../../abstract';
import { Coordinates, CoordinatesTypes, DEFAULT_COORDS } from '../../common'; import { Coordinates, CoordinatesTypes, DEFAULT_COORDS } from '../../common';
import { evUpdate as evDeviceUpdate } from '../../device_manager'; import { evUpdate as evDeviceUpdate } from '../../device_manager';
import { evPageSelect } from '../../pages';
import Page from '../../pages/model/Page'; import Page from '../../pages/model/Page';
import PagesEvents from '../../pages/types';
import Frames from './Frames'; import Frames from './Frames';
export default class Canvas extends ModuleModel<CanvasModule> { export default class Canvas extends ModuleModel<CanvasModule> {
@ -33,7 +33,7 @@ export default class Canvas extends ModuleModel<CanvasModule> {
this.on('change:x change:y', this.onCoordsChange); this.on('change:x change:y', this.onCoordsChange);
this.on('change:pointer change:pointerScreen', this.onPointerChange); this.on('change:pointer change:pointerScreen', this.onPointerChange);
this.listenTo(em, `change:device ${evDeviceUpdate}`, this.updateDevice); this.listenTo(em, `change:device ${evDeviceUpdate}`, this.updateDevice);
this.listenTo(em, evPageSelect, this._pageUpdated); this.listenTo(em, PagesEvents.select, this._pageUpdated);
} }
get frames(): Frames { get frames(): Frames {

2
src/editor/config/config.ts

@ -7,7 +7,7 @@ import { DeviceManagerConfig } from '../../device_manager/config/config';
import { I18nConfig } from '../../i18n/config'; import { I18nConfig } from '../../i18n/config';
import { ModalConfig } from '../../modal_dialog/config/config'; import { ModalConfig } from '../../modal_dialog/config/config';
import { LayerManagerConfig } from '../../navigator/config/config'; import { LayerManagerConfig } from '../../navigator/config/config';
import { PageManagerConfig } from '../../pages'; import { PageManagerConfig } from '../../pages/types';
import { PanelsConfig } from '../../panels/config/config'; import { PanelsConfig } from '../../panels/config/config';
import { ParserConfig } from '../../parser/config/config'; import { ParserConfig } from '../../parser/config/config';
import { RichTextEditorConfig } from '../../rich_text_editor/config/config'; import { RichTextEditorConfig } from '../../rich_text_editor/config/config';

61
src/pages/index.ts

@ -47,52 +47,19 @@
import { isString, bindAll, unique, flatten } from 'underscore'; import { isString, bindAll, unique, flatten } from 'underscore';
import { createId } from '../utils/mixins'; import { createId } from '../utils/mixins';
import { ModuleModel } from '../abstract'; import { ModuleModel } from '../abstract';
import { ItemManagerModule, ModuleConfig } from '../abstract/Module'; import { ItemManagerModule } from '../abstract/Module';
import Pages from './model/Pages'; import Pages from './model/Pages';
import Page, { PageProperties } from './model/Page'; import Page, { PageProperties } from './model/Page';
import EditorModel from '../editor/model/Editor'; import EditorModel from '../editor/model/Editor';
import ComponentWrapper from '../dom_components/model/ComponentWrapper'; import ComponentWrapper from '../dom_components/model/ComponentWrapper';
import { AddOptions, RemoveOptions, SetOptions } from '../common'; import { AddOptions, RemoveOptions, SetOptions } from '../common';
import PagesEvents, { AbortOption, PageManagerConfig, SelectableOption } from './types';
interface SelectableOption {
/**
* Select the page.
*/
select?: boolean;
}
interface AbortOption {
abort?: boolean;
}
export const evAll = 'page';
export const evPfx = `${evAll}:`;
export const evPageSelect = `${evPfx}select`;
export const evPageSelectBefore = `${evPageSelect}:before`;
export const evPageUpdate = `${evPfx}update`;
export const evPageAdd = `${evPfx}add`;
export const evPageAddBefore = `${evPageAdd}:before`;
export const evPageRemove = `${evPfx}remove`;
export const evPageRemoveBefore = `${evPageRemove}:before`;
const chnSel = 'change:selected'; const chnSel = 'change:selected';
const typeMain = 'main'; const typeMain = 'main';
const pageEvents = {
all: evAll,
select: evPageSelect,
selectBefore: evPageSelectBefore,
update: evPageUpdate,
add: evPageAdd,
addBefore: evPageAddBefore,
remove: evPageRemove,
removeBefore: evPageRemoveBefore,
};
export interface PageManagerConfig extends ModuleConfig {
pages?: any[];
}
export default class PageManager extends ItemManagerModule<PageManagerConfig, Pages> { export default class PageManager extends ItemManagerModule<PageManagerConfig, Pages> {
events!: typeof pageEvents; events = PagesEvents;
storageKey = 'pages'; storageKey = 'pages';
get pages() { get pages() {
@ -121,7 +88,7 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
* @param {Object} config Configurations * @param {Object} config Configurations
*/ */
constructor(em: EditorModel) { constructor(em: EditorModel) {
super(em, 'PageManager', new Pages([], em), pageEvents); super(em, 'PageManager', new Pages([], em), PagesEvents);
bindAll(this, '_onPageChange'); bindAll(this, '_onPageChange');
const model = new ModuleModel({ _undo: true } as any); const model = new ModuleModel({ _undo: true } as any);
this.model = model; this.model = model;
@ -131,8 +98,9 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
} }
__onChange(event: string, page: Page, coll: Pages, opts?: any) { __onChange(event: string, page: Page, coll: Pages, opts?: any) {
const { em, events } = this;
const options = opts || coll; const options = opts || coll;
this.em.trigger(evAll, { event, page, options }); em.trigger(events.all, { event, page, options });
} }
onLoad() { onLoad() {
@ -145,11 +113,11 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
} }
_onPageChange(m: any, page: Page, opts: any) { _onPageChange(m: any, page: Page, opts: any) {
const { em } = this; const { em, events } = this;
const lm = em.Layers; const lm = em.Layers;
const mainComp = page.getMainComponent(); const mainComp = page.getMainComponent();
lm && mainComp && lm.setRoot(mainComp as any); lm && mainComp && lm.setRoot(mainComp as any);
em.trigger(evPageSelect, page, m.previous('selected')); em.trigger(events.select, page, m.previous('selected'));
this.__onChange(chnSel, page, opts); this.__onChange(chnSel, page, opts);
} }
@ -174,14 +142,14 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
* }); * });
*/ */
add(props: PageProperties, opts: AddOptions & SelectableOption & AbortOption = {}) { add(props: PageProperties, opts: AddOptions & SelectableOption & AbortOption = {}) {
const { em } = this; const { em, events } = this;
props.id = props.id || this._createId(); props.id = props.id || this._createId();
const add = () => { const add = () => {
const page = this.pages.add(new Page(props, { em: this.em, config: this.config }), opts); const page = this.pages.add(new Page(props, { em: this.em, config: this.config }), opts);
opts.select && this.select(page); opts.select && this.select(page);
return page; return page;
}; };
!opts.silent && em.trigger(evPageAddBefore, props, add, opts); !opts.silent && em.trigger(events.addBefore, props, add, opts);
return !opts.abort ? add() : undefined; return !opts.abort ? add() : undefined;
} }
@ -196,13 +164,13 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
* pageManager.remove(somePage); * pageManager.remove(somePage);
*/ */
remove(page: string | Page, opts: RemoveOptions & AbortOption = {}) { remove(page: string | Page, opts: RemoveOptions & AbortOption = {}) {
const { em } = this; const { em, events } = this;
const pg = isString(page) ? this.get(page) : page; const pg = isString(page) ? this.get(page) : page;
const rm = () => { const rm = () => {
pg && this.pages.remove(pg, opts); pg && this.pages.remove(pg, opts);
return pg; return pg;
}; };
!opts.silent && em.trigger(evPageRemoveBefore, pg, rm, opts); !opts.silent && em.trigger(events.removeBefore, pg, rm, opts);
return !opts.abort && rm(); return !opts.abort && rm();
} }
@ -252,10 +220,11 @@ export default class PageManager extends ItemManagerModule<PageManagerConfig, Pa
* pageManager.select(somePage); * pageManager.select(somePage);
*/ */
select(page: string | Page, opts: SetOptions = {}) { select(page: string | Page, opts: SetOptions = {}) {
const { em, model, events } = this;
const pg = isString(page) ? this.get(page) : page; const pg = isString(page) ? this.get(page) : page;
if (pg) { if (pg) {
this.em.trigger(evPageSelectBefore, pg, opts); em.trigger(events.selectBefore, pg, opts);
this.model.set('selected', pg, opts); model.set('selected', pg, opts);
} }
return this; return this;
} }

2
src/pages/model/Page.ts

@ -1,5 +1,5 @@
import { forEach, result } from 'underscore'; import { forEach, result } from 'underscore';
import { PageManagerConfig } from '..'; import { PageManagerConfig } from '../types';
import Frames from '../../canvas/model/Frames'; import Frames from '../../canvas/model/Frames';
import { Model } from '../../common'; import { Model } from '../../common';
import ComponentWrapper from '../../dom_components/model/ComponentWrapper'; import ComponentWrapper from '../../dom_components/model/ComponentWrapper';

61
src/pages/types.ts

@ -0,0 +1,61 @@
import { ModuleConfig } from '../abstract/Module';
export interface PageManagerConfig extends ModuleConfig {
pages?: any[];
}
export interface SelectableOption {
/**
* Select the page.
*/
select?: boolean;
}
export interface AbortOption {
abort?: boolean;
}
/**{START_EVENTS}*/
export enum PagesEvents {
/**
* @event `page:add` Added new page. The page is passed as an argument to the callback.
* @example
* editor.on('page:add', (page) => { ... });
*/
add = 'page:add',
addBefore = 'page:add:before',
/**
* @event `page:remove` Page removed. The page is passed as an argument to the callback.
* @example
* editor.on('page:remove', (page) => { ... });
*/
remove = 'page:remove',
removeBefore = 'page:remove:before',
/**
* @event `page:select` New page selected. The newly selected page and the previous one, are passed as arguments to the callback.
* @example
* editor.on('page:select', (page, previousPage) => { ... });
*/
select = 'page:select',
selectBefore = 'page:select:before',
/**
* @event `page:update` Page updated. The updated page and the object containing changes are passed as arguments to the callback.
* @example
* editor.on('page:update', (page, changes) => { ... });
*/
update = 'page:update',
/**
* @event `page` Catch-all event for all the events mentioned above. An object containing all the available data about the triggered event is passed as an argument to the callback.
* @example
* editor.on('page', ({ event, model, ... }) => { ... });
*/
all = 'page',
}
/**{END_EVENTS}*/
// need this to avoid the TS documentation generator to break
export default PagesEvents;
Loading…
Cancel
Save