mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-02-08 23:25:36 +00:00
150 lines
3.1 KiB
TypeScript
150 lines
3.1 KiB
TypeScript
import domReady from 'domready';
|
|
|
|
import { EventEmitter } from 'events';
|
|
|
|
const Shells = ['iphone6'];
|
|
|
|
export class Flags {
|
|
|
|
public emitter: EventEmitter;
|
|
public flags: string[];
|
|
public ready: boolean;
|
|
public lastFlags: string[];
|
|
public lastShell: string;
|
|
|
|
private lastSimulatorDevice: string;
|
|
|
|
constructor() {
|
|
this.emitter = new EventEmitter();
|
|
this.flags = ['design-mode'];
|
|
|
|
domReady(() => {
|
|
this.ready = true;
|
|
this.applyFlags();
|
|
});
|
|
}
|
|
|
|
public setDragMode(flag: boolean) {
|
|
if (flag) {
|
|
this.add('drag-mode');
|
|
} else {
|
|
this.remove('drag-mode');
|
|
}
|
|
}
|
|
|
|
public setPreviewMode(flag: boolean) {
|
|
if (flag) {
|
|
this.add('preview-mode');
|
|
this.remove('design-mode');
|
|
} else {
|
|
this.add('design-mode');
|
|
this.remove('preview-mode');
|
|
}
|
|
}
|
|
|
|
public setWithShell(shell: string) {
|
|
if (shell === this.lastShell) {
|
|
return;
|
|
}
|
|
if (this.lastShell) {
|
|
this.remove(`with-${this.lastShell}shell`);
|
|
}
|
|
if (shell) {
|
|
if (Shells.indexOf(shell) < 0) {
|
|
shell = Shells[0];
|
|
}
|
|
this.add(`with-${shell}shell`);
|
|
this.lastShell = shell;
|
|
}
|
|
}
|
|
|
|
public setSimulator(device: string) {
|
|
if (this.lastSimulatorDevice) {
|
|
this.remove(`simulator-${this.lastSimulatorDevice}`);
|
|
}
|
|
if (device !== '' && device !== 'pc') {
|
|
this.add(`simulator-${device}`);
|
|
}
|
|
this.lastSimulatorDevice = device;
|
|
}
|
|
|
|
public setHideSlate(flag: boolean) {
|
|
if (this.has('slate-fixed')) {
|
|
return;
|
|
}
|
|
if (flag) {
|
|
this.add('hide-slate');
|
|
} else {
|
|
this.remove('hide-slate');
|
|
}
|
|
}
|
|
|
|
public setSlateFixedMode(flag: boolean) {
|
|
if (flag) {
|
|
this.remove('hide-slate');
|
|
this.add('slate-fixed');
|
|
} else {
|
|
this.remove('slate-fixed');
|
|
}
|
|
}
|
|
|
|
public setSlateFullMode(flag: boolean) {
|
|
if (flag) {
|
|
this.add('slate-full-screen');
|
|
} else {
|
|
this.remove('slate-full-screen');
|
|
}
|
|
}
|
|
|
|
public getFlags() {
|
|
return this.flags;
|
|
}
|
|
|
|
public applyFlags(modifiedFlag?: string) {
|
|
if (!this.ready) {
|
|
return;
|
|
}
|
|
|
|
const doe = document.documentElement;
|
|
if (this.lastFlags) {
|
|
this.lastFlags.filter((flag: string) => this.flags.indexOf(flag) < 0).forEach((flag) => {
|
|
doe.classList.remove(`engine-${flag}`);
|
|
});
|
|
}
|
|
this.flags.forEach((flag) => {
|
|
doe.classList.add(`engine-${flag}`);
|
|
});
|
|
|
|
this.lastFlags = this.flags.slice(0);
|
|
this.emitter.emit('flagschange', this.flags, modifiedFlag);
|
|
}
|
|
|
|
public has(flag: string) {
|
|
return this.flags.indexOf(flag) > -1;
|
|
}
|
|
|
|
public add(flag: string) {
|
|
if (!this.has(flag)) {
|
|
this.flags.push(flag);
|
|
this.applyFlags(flag);
|
|
}
|
|
}
|
|
|
|
public remove(flag: string) {
|
|
const i = this.flags.indexOf(flag);
|
|
if (i > -1) {
|
|
this.flags.splice(i, 1);
|
|
this.applyFlags(flag);
|
|
}
|
|
}
|
|
|
|
public onFlagsChange(func: () => any) {
|
|
this.emitter.on('flagschange', func);
|
|
return () => {
|
|
this.emitter.removeListener('flagschange', func);
|
|
};
|
|
}
|
|
}
|
|
|
|
export default new Flags();
|