ngx-simplemde
Version:
Angular for simplemde
144 lines • 15.6 kB
JavaScript
import { Component, Input, forwardRef, ChangeDetectionStrategy, ViewChild, Inject, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { SimplemdeConfig } from './config';
import { DOCUMENT } from '@angular/common';
import * as i0 from "@angular/core";
import * as i1 from "./config";
export class SimplemdeComponent {
constructor(cog, zone, doc) {
this.cog = cog;
this.zone = zone;
this.doc = doc;
this.value = '';
this.options = {};
this.disabled = false;
cog = Object.assign(Object.assign({}, new SimplemdeConfig()), cog);
this.style = cog.style;
this.delay = cog.delay || 0;
}
get Instance() {
return this.instance;
}
/**
* Call [setOption](https://codemirror.net/doc/manual.html#setOption) method of Codemirror.
*/
setOptions(option, value) {
if (!this.instance) {
return;
}
this.instance.codemirror.setOption(option, value);
}
_getWin() {
return this.doc.defaultView || window;
}
initDelay() {
if (!(typeof document === 'object' && !!document)) {
return;
}
if (this.delay > 0) {
setTimeout(() => this.init(), this.delay);
}
else {
this.init();
}
}
init() {
const win = this._getWin();
if (typeof win.SimpleMDE === 'undefined') {
throw new Error(`Could not find SimpleMDE object.`);
}
this.destroy();
const config = Object.assign(Object.assign(Object.assign({}, this.cog), this.options), (this.style === 'antd'
? {
spellChecker: false,
autoDownloadFontAwesome: false,
}
: {}));
config.element = this.con.nativeElement;
this.zone.runOutsideAngular(() => {
this.instance = new win.SimpleMDE(config);
if (this.value) {
this.instance.value(this.value);
}
this.instance.codemirror.on('change', () => {
this.value = this.instance.value();
this.zone.run(() => this.onChange(this.value));
});
this.setDisable();
});
}
destroy() {
if (this.instance) {
this.instance.toTextArea();
this.instance = null;
}
}
setDisable() {
if (this.instance) {
this.zone.runOutsideAngular(() => (this.instance.codemirror.options.readOnly = this.disabled));
}
}
ngAfterViewInit() {
this.initDelay();
}
ngOnChanges(changes) {
if (changes.options && !changes.options.firstChange) {
this.initDelay();
}
}
ngOnDestroy() {
this.destroy();
}
writeValue(value) {
this.value = value;
if (this.instance) {
this.instance.value(this.value);
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(_fn) { }
setDisabledState(isDisabled) {
this.disabled = isDisabled;
this.setDisable();
}
}
SimplemdeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SimplemdeComponent, deps: [{ token: i1.SimplemdeConfig }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
SimplemdeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: SimplemdeComponent, selector: "simplemde", inputs: { options: "options", style: "style", delay: "delay", disabled: "disabled" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => SimplemdeComponent),
multi: true,
},
], viewQueries: [{ propertyName: "con", first: true, predicate: ["con"], descendants: true }], usesOnChanges: true, ngImport: i0, template: ` <textarea #con></textarea> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SimplemdeComponent, decorators: [{
type: Component,
args: [{
selector: 'simplemde',
template: ` <textarea #con></textarea> `,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => SimplemdeComponent),
multi: true,
},
],
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: i1.SimplemdeConfig }, { type: i0.NgZone }, { type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; }, propDecorators: { con: [{
type: ViewChild,
args: ['con']
}], options: [{
type: Input
}], style: [{
type: Input
}], delay: [{
type: Input
}], disabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NyYy9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUdWLHVCQUF1QixFQUt2QixTQUFTLEVBRVQsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQWMzQyxNQUFNLE9BQU8sa0JBQWtCO0lBZ0M3QixZQUFvQixHQUFvQixFQUFVLElBQVksRUFBNEIsR0FBUTtRQUE5RSxRQUFHLEdBQUgsR0FBRyxDQUFpQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVE7UUFBNEIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQTdCMUYsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUlsQixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUsvQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBcUJqQyxHQUFHLG1DQUFRLElBQUksZUFBZSxFQUFFLEdBQUssR0FBRyxDQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQXRCRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLE1BQWMsRUFBRSxLQUFVO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFR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TTtpQkFDaEQ7OzBCQWlDa0UsTUFBTTsyQkFBQyxRQUFROzRDQS9CdEQsR0FBRztzQkFBNUIsU0FBUzt1QkFBQyxLQUFLO2dCQU1QLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBBZnRlclZpZXdJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE5nWm9uZSxcbiAgVmlld0NoaWxkLFxuICBTaW1wbGVDaGFuZ2UsXG4gIEluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTaW1wbGVtZGVDb25maWcsIFNpbXBsZW1kZU9wdGlvbnMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBsZW1kZScsXG4gIHRlbXBsYXRlOiBgIDx0ZXh0YXJlYSAjY29uPjwvdGV4dGFyZWE+IGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2ltcGxlbWRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVtZGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBAVmlld0NoaWxkKCdjb24nKSBwcml2YXRlIGNvbiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGluc3RhbmNlOiBhbnk7XG4gIHByaXZhdGUgdmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIHByaXZhdGUgb25DaGFuZ2UhOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcblxuICBASW5wdXQoKSBvcHRpb25zOiBTaW1wbGVtZGVPcHRpb25zID0ge307XG4gIC8qKiDpo47moLzvvIzpu5jorqTvvJpgYW50ZGAgKi9cbiAgQElucHV0KCkgc3R5bGU/OiAnZGVmYXVsdCcgfCAnYW50ZCc7XG4gIC8qKiDlu7bov5/liJ3lp4vljJYgKi9cbiAgQElucHV0KCkgZGVsYXk6IG51bWJlcjtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgSW5zdGFuY2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIFtzZXRPcHRpb25dKGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI3NldE9wdGlvbikgbWV0aG9kIG9mIENvZGVtaXJyb3IuXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbjogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5zdGFuY2UuY29kZW1pcnJvci5zZXRPcHRpb24ob3B0aW9uLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRXaW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2c6IFNpbXBsZW1kZUNvbmZpZywgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jOiBhbnkpIHtcbiAgICBjb2cgPSB7IC4uLm5ldyBTaW1wbGVtZGVDb25maWcoKSwgLi4uY29nIH07XG4gICAgdGhpcy5zdHlsZSA9IGNvZy5zdHlsZTtcbiAgICB0aGlzLmRlbGF5ID0gY29nLmRlbGF5IHx8IDA7XG4gIH1cblxuICBwcml2YXRlIGluaXREZWxheSgpOiB2b2lkIHtcbiAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnICYmICEhZG9jdW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXQoKSwgdGhpcy5kZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB3aW4gPSB0aGlzLl9nZXRXaW4oKTtcbiAgICBpZiAodHlwZW9mIHdpbi5TaW1wbGVNREUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFNpbXBsZU1ERSBvYmplY3QuYCk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIGNvbnN0IGNvbmZpZzogU2ltcGxlbWRlT3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMuY29nLFxuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgLi4uKHRoaXMuc3R5bGUgPT09ICdhbnRkJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHNwZWxsQ2hlY2tlcjogZmFsc2UsXG4gICAgICAgICAgICBhdXRvRG93bmxvYWRGb250QXdlc29tZTogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICAgIGNvbmZpZy5lbGVtZW50ID0gdGhpcy5jb24ubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyB3aW4uU2ltcGxlTURFKGNvbmZpZyk7XG4gICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmluc3RhbmNlLnZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnN0YW5jZS5jb2RlbWlycm9yLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmluc3RhbmNlLnZhbHVlKCk7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0RGlzYWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLnRvVGV4dEFyZWEoKTtcbiAgICAgIHRoaXMuaW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzYWJsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+ICh0aGlzLmluc3RhbmNlLmNvZGVtaXJyb3Iub3B0aW9ucy5yZWFkT25seSA9IHRoaXMuZGlzYWJsZWQpKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0RGVsYXkoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW1AgaW4ga2V5b2YgdGhpc10/OiBTaW1wbGVDaGFuZ2UgfSAmIFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zICYmICFjaGFuZ2VzLm9wdGlvbnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5pdERlbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UudmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4ge30pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChfZm46ICgpID0+IHt9KTogdm9pZCB7fVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuc2V0RGlzYWJsZSgpO1xuICB9XG59XG4iXX0=