@ctrl/ngx-codemirror 5.1.0 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/codemirror.component.mjs +9 -7
- package/esm2020/codemirror.module.mjs +4 -4
- package/fesm2015/ctrl-ngx-codemirror.mjs +14 -11
- package/fesm2015/ctrl-ngx-codemirror.mjs.map +1 -1
- package/fesm2020/ctrl-ngx-codemirror.mjs +12 -10
- package/fesm2020/ctrl-ngx-codemirror.mjs.map +1 -1
- package/package.json +1 -1
@@ -52,12 +52,14 @@ export class CodemirrorComponent {
|
|
52
52
|
return this._codeMirror;
|
53
53
|
}
|
54
54
|
// in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors
|
55
|
-
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror :
|
55
|
+
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : import('codemirror');
|
56
56
|
return this._codeMirror;
|
57
57
|
}
|
58
58
|
ngAfterViewInit() {
|
59
|
-
this._ngZone.runOutsideAngular(() => {
|
60
|
-
|
59
|
+
this._ngZone.runOutsideAngular(async () => {
|
60
|
+
const codeMirrorObj = await this.codeMirrorGlobal;
|
61
|
+
const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;
|
62
|
+
this.codeMirror = codeMirror.fromTextArea(this.ref.nativeElement, this._options);
|
61
63
|
this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
|
62
64
|
this.codeMirror.on('scroll', this.scrollChanged.bind(this));
|
63
65
|
this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
|
@@ -152,8 +154,8 @@ export class CodemirrorComponent {
|
|
152
154
|
this.setOptionIfChanged('readOnly', this.disabled);
|
153
155
|
}
|
154
156
|
}
|
155
|
-
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
156
|
-
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
157
|
+
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
158
|
+
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CodemirrorComponent, selector: "ngx-codemirror", inputs: { className: "className", name: "name", autoFocus: "autoFocus", options: "options", preserveScrollPosition: "preserveScrollPosition" }, outputs: { cursorActivity: "cursorActivity", focusChange: "focusChange", scroll: "scroll", drop: "drop" }, providers: [
|
157
159
|
{
|
158
160
|
provide: NG_VALUE_ACCESSOR,
|
159
161
|
useExisting: forwardRef(() => CodemirrorComponent),
|
@@ -170,7 +172,7 @@ CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
170
172
|
>
|
171
173
|
</textarea>
|
172
174
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, decorators: [{
|
174
176
|
type: Component,
|
175
177
|
args: [{
|
176
178
|
selector: 'ngx-codemirror',
|
@@ -217,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
217
219
|
type: ViewChild,
|
218
220
|
args: ['ref']
|
219
221
|
}] } });
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZW1pcnJvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvZGVtaXJyb3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd6RSxTQUFTLG9CQUFvQixDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUE0QkQsTUFBTSxPQUFPLG1CQUFtQjtJQTZDOUIsWUFBb0IsUUFBeUIsRUFBVSxPQUFlO1FBQWxELGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQTFDdEUsMkNBQTJDO1FBQ2xDLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDeEIsMENBQTBDO1FBQ2pDLFNBQUksR0FBRyxZQUFZLENBQUM7UUFDN0IsdURBQXVEO1FBQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFZM0IsNERBQTREO1FBQ25ELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUN4QywwQ0FBMEM7UUFDaEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RELHNEQUFzRDtRQUM1QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEQsd0NBQXdDO1FBQ3hDLDREQUE0RDtRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNsRCxxQ0FBcUM7UUFDckMsNERBQTREO1FBQ2xELFNBQUksR0FBRyxJ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LEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixzSEFqQlM7Ozs7Ozs7Ozs7R0FVVDsyRkFXVSxtQkFBbUI7a0JBdkIvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzJIQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUYsT0FBTztzQkFEVixLQUFLO2dCQVFHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csTUFBTTtzQkFBZixNQUFNO2dCQUdHLElBQUk7c0JBQWIsTUFBTTtnQkFDVyxHQUFHO3NCQUFwQixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDaGFuZ2UsIEVkaXRvckZyb21UZXh0QXJlYSwgU2Nyb2xsSW5mbyB9IGZyb20gJ2NvZGVtaXJyb3InO1xuXG5mdW5jdGlvbiBub3JtYWxpemVMaW5lRW5kaW5ncyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpO1xufVxuXG5kZWNsYXJlIHZhciByZXF1aXJlOiBhbnk7XG5kZWNsYXJlIHZhciBDb2RlTWlycm9yOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1jb2RlbWlycm9yJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGV4dGFyZWFcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgY2xhc3M9XCJuZ3gtY29kZW1pcnJvciB7eyBjbGFzc05hbWUgfX1cIlxuICAgICAgW2NsYXNzLm5neC1jb2RlbWlycm9yLS1mb2N1c2VkXT1cImlzRm9jdXNlZFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW2F1dG9mb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgI3JlZlxuICAgID5cbiAgICA8L3RleHRhcmVhPlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvZGVtaXJyb3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlbWlycm9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVja1xue1xuICAvKiBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjcmVhdGVkIHRleHRhcmVhICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuICAvKiBuYW1lIGFwcGxpZWQgdG8gdGhlIGNyZWF0ZWQgdGV4dGFyZWEgKi9cbiAgQElucHV0KCkgbmFtZSA9ICdjb2RlbWlycm9yJztcbiAgLyogYXV0b2ZvY3VzIHNldHRpbmcgYXBwbGllZCB0byB0aGUgY3JlYXRlZCB0ZXh0YXJlYSAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSBmYWxzZTtcbiAgLyoqXG4gICAqIHNldCBvcHRpb25zIGZvciBjb2RlbWlycm9yXG4gICAqIEBsaW5rIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9kb2MvbWFudWFsLmh0bWwjY29uZmlnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZTtcbiAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHZhbHVlKS5jcmVhdGUoKTtcbiAgICB9XG4gIH1cbiAgLyogcHJlc2VydmUgcHJldmlvdXMgc2Nyb2xsIHBvc2l0aW9uIGFmdGVyIHVwZGF0aW5nIHZhbHVlICovXG4gIEBJbnB1dCgpIHByZXNlcnZlU2Nyb2xsUG9zaXRpb24gPSBmYWxzZTtcbiAgLyogY2FsbGVkIHdoZW4gdGhlIHRleHQgY3Vyc29yIGlzIG1vdmVkICovXG4gIEBPdXRwdXQoKSBjdXJzb3JBY3Rpdml0eSA9IG5ldyBFdmVudEVtaXR0ZXI8RWRpdG9yPigpO1xuICAvKiBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQgb3IgbG9zZXMgZm9jdXMgKi9cbiAgQE91dHB1dCgpIGZvY3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAvKiBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIHNjcm9sbGVkICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxJbmZvPigpO1xuICAvKiBjYWxsZWQgd2hlbiBmaWxlKHMpIGFyZSBkcm9wcGVkICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgZHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8W0VkaXRvciwgRHJhZ0V2ZW50XT4oKTtcbiAgQFZpZXdDaGlsZCgncmVmJykgcmVmITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcbiAgdmFsdWUgPSAnJztcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG4gIGNvZGVNaXJyb3I/OiBFZGl0b3JGcm9tVGV4dEFyZWE7XG4gIC8qKlxuICAgKiBlaXRoZXIgZ2xvYmFsIHZhcmlhYmxlIG9yIHJlcXVpcmVkIGxpYnJhcnlcbiAgICovXG4gIHByaXZhdGUgX2NvZGVNaXJyb3I6IGFueTtcblxuICBwcml2YXRlIF9kaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIHByaXZhdGUgX25nWm9uZTogTmdab25lKSB7fVxuXG4gIGdldCBjb2RlTWlycm9yR2xvYmFsKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2NvZGVNaXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yO1xuICAgIH1cblxuICAgIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB1bml2ZXJzYWwgcmVuZGVyaW5nLCB3ZSBpbXBvcnQgQ29kZW1pcnJvciBydW50aW1lIHdpdGggYHJlcXVpcmVgIHRvIHByZXZlbnQgbm9kZSBlcnJvcnNcbiAgICB0aGlzLl9jb2RlTWlycm9yID0gdHlwZW9mIENvZGVNaXJyb3IgIT09ICd1bmRlZmluZWQnID8gQ29kZU1pcnJvciA6IHJlcXVpcmUoJ2NvZGVtaXJyb3InKTtcbiAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvcjtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5jb2RlTWlycm9yID0gdGhpcy5jb2RlTWlycm9yR2xvYmFsLmZyb21UZXh0QXJlYShcbiAgICAgICAgdGhpcy5yZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdGhpcy5fb3B0aW9ucyxcbiAgICAgICkgYXMgRWRpdG9yRnJvbVRleHRBcmVhO1xuICAgICAgdGhpcy5jb2RlTWlycm9yLm9uKCdjdXJzb3JBY3Rpdml0eScsIGNtID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jdXJzb3JBY3RpdmUoY20pKSk7XG4gICAgICB0aGlzLmNvZGVNaXJyb3Iub24oJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsQ2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuY29kZU1pcnJvci5vbignYmx1cicsICgpID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c0NoYW5nZWQoZmFsc2UpKSk7XG4gICAgICB0aGlzLmNvZGVNaXJyb3Iub24oJ2ZvY3VzJywgKCkgPT4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmZvY3VzQ2hhbmdlZCh0cnVlKSkpO1xuICAgICAgdGhpcy5jb2RlTWlycm9yLm9uKCdjaGFuZ2UnLCAoY20sIGNoYW5nZSkgPT5cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNvZGVtaXJyb3JWYWx1ZUNoYW5nZWQoY20sIGNoYW5nZSkpLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29kZU1pcnJvci5vbignZHJvcCcsIChjbSwgZSkgPT4ge1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuZHJvcEZpbGVzKGNtLCBlKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29kZU1pcnJvci5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKCF0aGlzLl9kaWZmZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY2hlY2sgb3B0aW9ucyBoYXZlIG5vdCBjaGFuZ2VkXG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX29wdGlvbnMpO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShvcHRpb24gPT5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25JZkNoYW5nZWQob3B0aW9uLmtleSwgb3B0aW9uLmN1cnJlbnRWYWx1ZSksXG4gICAgICApO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKG9wdGlvbiA9PiB0aGlzLnNldE9wdGlvbklmQ2hhbmdlZChvcHRpb24ua2V5LCBvcHRpb24uY3VycmVudFZhbHVlKSk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2hSZW1vdmVkSXRlbShvcHRpb24gPT5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25JZkNoYW5nZWQob3B0aW9uLmtleSwgb3B0aW9uLmN1cnJlbnRWYWx1ZSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBpcyB0aGVyZSBhIGxpZ2h0ZXItd2VpZ2h0IHdheSB0byByZW1vdmUgdGhlIGNtIGluc3RhbmNlP1xuICAgIGlmICh0aGlzLmNvZGVNaXJyb3IpIHtcbiAgICAgIHRoaXMuY29kZU1pcnJvci50b1RleHRBcmVhKCk7XG4gICAgfVxuICB9XG4gIGNvZGVtaXJyb3JWYWx1ZUNoYW5nZWQoY206IEVkaXRvciwgY2hhbmdlOiBFZGl0b3JDaGFuZ2UpIHtcbiAgICBjb25zdCBjbVZhbCA9IGNtLmdldFZhbHVlKCk7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09IGNtVmFsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gY21WYWw7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuICBzZXRPcHRpb25JZkNoYW5nZWQob3B0aW9uTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvZGVNaXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjYXN0IHRvIGFueSB0byBoYW5kbGUgc3RyaWN0bHkgdHlwZWQgb3B0aW9uIG5hbWVzXG4gICAgLy8gY291bGQgcG9zc2libHkgaW1wb3J0IHNldHRpbmdzIHN0cmluZ3MgYXZhaWxhYmxlIGluIHRoZSBmdXR1cmVcbiAgICB0aGlzLmNvZGVNaXJyb3Iuc2V0T3B0aW9uKG9wdGlvbk5hbWUgYXMgYW55LCBuZXdWYWx1ZSk7XG4gIH1cbiAgZm9jdXNDaGFuZ2VkKGZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZm9jdXNlZDtcbiAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoZm9jdXNlZCk7XG4gIH1cbiAgc2Nyb2xsQ2hhbmdlZChjbTogRWRpdG9yKSB7XG4gICAgdGhpcy5zY3JvbGwuZW1pdChjbS5nZXRTY3JvbGxJbmZvKCkpO1xuICB9XG4gIGN1cnNvckFjdGl2ZShjbTogRWRpdG9yKSB7XG4gICAgdGhpcy5jdXJzb3JBY3Rpdml0eS5lbWl0KGNtKTtcbiAgfVxuICBkcm9wRmlsZXMoY206IEVkaXRvciwgZTogRHJhZ0V2ZW50KSB7XG4gICAgdGhpcy5kcm9wLmVtaXQoW2NtLCBlXSk7XG4gIH1cbiAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jb2RlTWlycm9yKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1ciA9IHRoaXMuY29kZU1pcnJvci5nZXRWYWx1ZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gY3VyICYmIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGN1cikgIT09IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMucHJlc2VydmVTY3JvbGxQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsUG9zaXRpb24gPSB0aGlzLmNvZGVNaXJyb3IuZ2V0U2Nyb2xsSW5mbygpO1xuICAgICAgICB0aGlzLmNvZGVNaXJyb3Iuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY29kZU1pcnJvci5zY3JvbGxUbyhwcmV2U2Nyb2xsUG9zaXRpb24ubGVmdCwgcHJldlNjcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvZGVNaXJyb3Iuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgLyoqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuc2V0T3B0aW9uSWZDaGFuZ2VkKCdyZWFkT25seScsIHRoaXMuZGlzYWJsZWQpO1xuICB9XG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICBwcml2YXRlIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xufVxuIl19
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZW1pcnJvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvZGVtaXJyb3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUtMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd6RSxTQUFTLG9CQUFvQixDQUFDLEdBQVc7SUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUE0QkQsTUFBTSxPQUFPLG1CQUFtQjtJQTZDOUIsWUFBb0IsUUFBeUIsRUFBVSxPQUFlO1FBQWxELGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQTFDdEUsMkNBQTJDO1FBQ2xDLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDeEIsMENBQTBDO1FBQ2pDLFNBQUksR0FBRyxZQUFZLENBQUM7UUFDN0IsdURBQXVEO1FBQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFZM0IsNERBQTREO1FBQ25ELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUN4QywwQ0FBMEM7UUFDaEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RELHNEQUFzRDtRQUM1QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEQsd0NBQXdDO1FBQ3hDLDREQUE0RDtRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNsRCxxQ0FBcUM7UUFDckMsNERBQTREO1FBQ2xELFNBQUksR0FBRyxJ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QVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7Z0hBcEtVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLG9TQVZuQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixzSEFqQlM7Ozs7Ozs7Ozs7R0FVVDsyRkFXVSxtQkFBbUI7a0JBdkIvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzJIQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUYsT0FBTztzQkFEVixLQUFLO2dCQVFHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csTUFBTTtzQkFBZixNQUFNO2dCQUdHLElBQUk7c0JBQWIsTUFBTTtnQkFDVyxHQUFHO3NCQUFwQixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBLZXlWYWx1ZURpZmZlcixcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDaGFuZ2UsIEVkaXRvckZyb21UZXh0QXJlYSwgU2Nyb2xsSW5mbyB9IGZyb20gJ2NvZGVtaXJyb3InO1xuXG5mdW5jdGlvbiBub3JtYWxpemVMaW5lRW5kaW5ncyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpO1xufVxuXG5kZWNsYXJlIHZhciByZXF1aXJlOiBhbnk7XG5kZWNsYXJlIHZhciBDb2RlTWlycm9yOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1jb2RlbWlycm9yJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGV4dGFyZWFcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgY2xhc3M9XCJuZ3gtY29kZW1pcnJvciB7eyBjbGFzc05hbWUgfX1cIlxuICAgICAgW2NsYXNzLm5neC1jb2RlbWlycm9yLS1mb2N1c2VkXT1cImlzRm9jdXNlZFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW2F1dG9mb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgI3JlZlxuICAgID5cbiAgICA8L3RleHRhcmVhPlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvZGVtaXJyb3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlbWlycm9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVja1xue1xuICAvKiBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjcmVhdGVkIHRleHRhcmVhICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuICAvKiBuYW1lIGFwcGxpZWQgdG8gdGhlIGNyZWF0ZWQgdGV4dGFyZWEgKi9cbiAgQElucHV0KCkgbmFtZSA9ICdjb2RlbWlycm9yJztcbiAgLyogYXV0b2ZvY3VzIHNldHRpbmcgYXBwbGllZCB0byB0aGUgY3JlYXRlZCB0ZXh0YXJlYSAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSBmYWxzZTtcbiAgLyoqXG4gICAqIHNldCBvcHRpb25zIGZvciBjb2RlbWlycm9yXG4gICAqIEBsaW5rIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC9kb2MvbWFudWFsLmh0bWwjY29uZmlnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZTtcbiAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHZhbHVlKS5jcmVhdGUoKTtcbiAgICB9XG4gIH1cbiAgLyogcHJlc2VydmUgcHJldmlvdXMgc2Nyb2xsIHBvc2l0aW9uIGFmdGVyIHVwZGF0aW5nIHZhbHVlICovXG4gIEBJbnB1dCgpIHByZXNlcnZlU2Nyb2xsUG9zaXRpb24gPSBmYWxzZTtcbiAgLyogY2FsbGVkIHdoZW4gdGhlIHRleHQgY3Vyc29yIGlzIG1vdmVkICovXG4gIEBPdXRwdXQoKSBjdXJzb3JBY3Rpdml0eSA9IG5ldyBFdmVudEVtaXR0ZXI8RWRpdG9yPigpO1xuICAvKiBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIGZvY3VzZWQgb3IgbG9zZXMgZm9jdXMgKi9cbiAgQE91dHB1dCgpIGZvY3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAvKiBjYWxsZWQgd2hlbiB0aGUgZWRpdG9yIGlzIHNjcm9sbGVkICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxJbmZvPigpO1xuICAvKiBjYWxsZWQgd2hlbiBmaWxlKHMpIGFyZSBkcm9wcGVkICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgZHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8W0VkaXRvciwgRHJhZ0V2ZW50XT4oKTtcbiAgQFZpZXdDaGlsZCgncmVmJykgcmVmITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcbiAgdmFsdWUgPSAnJztcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkID0gZmFsc2U7XG4gIGNvZGVNaXJyb3I/OiBFZGl0b3JGcm9tVGV4dEFyZWE7XG4gIC8qKlxuICAgKiBlaXRoZXIgZ2xvYmFsIHZhcmlhYmxlIG9yIHJlcXVpcmVkIGxpYnJhcnlcbiAgICovXG4gIHByaXZhdGUgX2NvZGVNaXJyb3I6IGFueTtcblxuICBwcml2YXRlIF9kaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgX29wdGlvbnM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIHByaXZhdGUgX25nWm9uZTogTmdab25lKSB7fVxuXG4gIGdldCBjb2RlTWlycm9yR2xvYmFsKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuX2NvZGVNaXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yO1xuICAgIH1cblxuICAgIC8vIGluIG9yZGVyIHRvIGFsbG93IGZvciB1bml2ZXJzYWwgcmVuZGVyaW5nLCB3ZSBpbXBvcnQgQ29kZW1pcnJvciBydW50aW1lIHdpdGggYHJlcXVpcmVgIHRvIHByZXZlbnQgbm9kZSBlcnJvcnNcbiAgICB0aGlzLl9jb2RlTWlycm9yID0gdHlwZW9mIENvZGVNaXJyb3IgIT09ICd1bmRlZmluZWQnID8gQ29kZU1pcnJvciA6IGltcG9ydCgnY29kZW1pcnJvcicpO1xuICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb2RlTWlycm9yT2JqID0gYXdhaXQgdGhpcy5jb2RlTWlycm9yR2xvYmFsO1xuICAgICAgY29uc3QgY29kZU1pcnJvciA9IGNvZGVNaXJyb3JPYmo/LmRlZmF1bHQgPyBjb2RlTWlycm9yT2JqLmRlZmF1bHQgOiBjb2RlTWlycm9yT2JqO1xuICAgICAgdGhpcy5jb2RlTWlycm9yID0gY29kZU1pcnJvci5mcm9tVGV4dEFyZWEoXG4gICAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICApIGFzIEVkaXRvckZyb21UZXh0QXJlYTtcbiAgICAgIHRoaXMuY29kZU1pcnJvci5vbignY3Vyc29yQWN0aXZpdHknLCBjbSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY3Vyc29yQWN0aXZlKGNtKSkpO1xuICAgICAgdGhpcy5jb2RlTWlycm9yLm9uKCdzY3JvbGwnLCB0aGlzLnNjcm9sbENoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLmNvZGVNaXJyb3Iub24oJ2JsdXInLCAoKSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuZm9jdXNDaGFuZ2VkKGZhbHNlKSkpO1xuICAgICAgdGhpcy5jb2RlTWlycm9yLm9uKCdmb2N1cycsICgpID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c0NoYW5nZWQodHJ1ZSkpKTtcbiAgICAgIHRoaXMuY29kZU1pcnJvci5vbignY2hhbmdlJywgKGNtLCBjaGFuZ2UpID0+XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jb2RlbWlycm9yVmFsdWVDaGFuZ2VkKGNtLCBjaGFuZ2UpKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvZGVNaXJyb3Iub24oJ2Ryb3AnLCAoY20sIGUpID0+IHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmRyb3BGaWxlcyhjbSwgZSkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvZGVNaXJyb3Iuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICghdGhpcy5fZGlmZmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNoZWNrIG9wdGlvbnMgaGF2ZSBub3QgY2hhbmdlZFxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9vcHRpb25zKTtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgY2hhbmdlcy5mb3JFYWNoQ2hhbmdlZEl0ZW0ob3B0aW9uID0+XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uSWZDaGFuZ2VkKG9wdGlvbi5rZXksIG9wdGlvbi5jdXJyZW50VmFsdWUpLFxuICAgICAgKTtcbiAgICAgIGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbShvcHRpb24gPT4gdGhpcy5zZXRPcHRpb25JZkNoYW5nZWQob3B0aW9uLmtleSwgb3B0aW9uLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoUmVtb3ZlZEl0ZW0ob3B0aW9uID0+XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uSWZDaGFuZ2VkKG9wdGlvbi5rZXksIG9wdGlvbi5jdXJyZW50VmFsdWUpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gaXMgdGhlcmUgYSBsaWdodGVyLXdlaWdodCB3YXkgdG8gcmVtb3ZlIHRoZSBjbSBpbnN0YW5jZT9cbiAgICBpZiAodGhpcy5jb2RlTWlycm9yKSB7XG4gICAgICB0aGlzLmNvZGVNaXJyb3IudG9UZXh0QXJlYSgpO1xuICAgIH1cbiAgfVxuICBjb2RlbWlycm9yVmFsdWVDaGFuZ2VkKGNtOiBFZGl0b3IsIGNoYW5nZTogRWRpdG9yQ2hhbmdlKSB7XG4gICAgY29uc3QgY21WYWwgPSBjbS5nZXRWYWx1ZSgpO1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSBjbVZhbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IGNtVmFsO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgc2V0T3B0aW9uSWZDaGFuZ2VkKG9wdGlvbk5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5jb2RlTWlycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2FzdCB0byBhbnkgdG8gaGFuZGxlIHN0cmljdGx5IHR5cGVkIG9wdGlvbiBuYW1lc1xuICAgIC8vIGNvdWxkIHBvc3NpYmx5IGltcG9ydCBzZXR0aW5ncyBzdHJpbmdzIGF2YWlsYWJsZSBpbiB0aGUgZnV0dXJlXG4gICAgdGhpcy5jb2RlTWlycm9yLnNldE9wdGlvbihvcHRpb25OYW1lIGFzIGFueSwgbmV3VmFsdWUpO1xuICB9XG4gIGZvY3VzQ2hhbmdlZChmb2N1c2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZvY3VzZWQ7XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZvY3VzZWQpO1xuICB9XG4gIHNjcm9sbENoYW5nZWQoY206IEVkaXRvcikge1xuICAgIHRoaXMuc2Nyb2xsLmVtaXQoY20uZ2V0U2Nyb2xsSW5mbygpKTtcbiAgfVxuICBjdXJzb3JBY3RpdmUoY206IEVkaXRvcikge1xuICAgIHRoaXMuY3Vyc29yQWN0aXZpdHkuZW1pdChjbSk7XG4gIH1cbiAgZHJvcEZpbGVzKGNtOiBFZGl0b3IsIGU6IERyYWdFdmVudCkge1xuICAgIHRoaXMuZHJvcC5lbWl0KFtjbSwgZV0pO1xuICB9XG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29kZU1pcnJvcikge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXIgPSB0aGlzLmNvZGVNaXJyb3IuZ2V0VmFsdWUoKTtcbiAgICBpZiAodmFsdWUgIT09IGN1ciAmJiBub3JtYWxpemVMaW5lRW5kaW5ncyhjdXIpICE9PSBub3JtYWxpemVMaW5lRW5kaW5ncyh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgcHJldlNjcm9sbFBvc2l0aW9uID0gdGhpcy5jb2RlTWlycm9yLmdldFNjcm9sbEluZm8oKTtcbiAgICAgICAgdGhpcy5jb2RlTWlycm9yLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNvZGVNaXJyb3Iuc2Nyb2xsVG8ocHJldlNjcm9sbFBvc2l0aW9uLmxlZnQsIHByZXZTY3JvbGxQb3NpdGlvbi50b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2RlTWlycm9yLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci4gKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG4gIC8qKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLiAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLnNldE9wdGlvbklmQ2hhbmdlZCgncmVhZE9ubHknLCB0aGlzLmRpc2FibGVkKTtcbiAgfVxuICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci4gKi9cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvKiogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci4gKi9cbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbn1cbiJdfQ==
|
@@ -3,10 +3,10 @@ import { CodemirrorComponent } from './codemirror.component';
|
|
3
3
|
import * as i0 from "@angular/core";
|
4
4
|
export class CodemirrorModule {
|
5
5
|
}
|
6
|
-
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
7
|
-
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.
|
8
|
-
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
6
|
+
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
7
|
+
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, declarations: [CodemirrorComponent], exports: [CodemirrorComponent] });
|
8
|
+
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule });
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, decorators: [{
|
10
10
|
type: NgModule,
|
11
11
|
args: [{
|
12
12
|
exports: [CodemirrorComponent],
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { __awaiter } from 'tslib';
|
1
2
|
import * as i0 from '@angular/core';
|
2
3
|
import { EventEmitter, forwardRef, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';
|
3
4
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
@@ -53,12 +54,14 @@ class CodemirrorComponent {
|
|
53
54
|
return this._codeMirror;
|
54
55
|
}
|
55
56
|
// in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors
|
56
|
-
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror :
|
57
|
+
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : import('codemirror');
|
57
58
|
return this._codeMirror;
|
58
59
|
}
|
59
60
|
ngAfterViewInit() {
|
60
|
-
this._ngZone.runOutsideAngular(() => {
|
61
|
-
|
61
|
+
this._ngZone.runOutsideAngular(() => __awaiter(this, void 0, void 0, function* () {
|
62
|
+
const codeMirrorObj = yield this.codeMirrorGlobal;
|
63
|
+
const codeMirror = (codeMirrorObj === null || codeMirrorObj === void 0 ? void 0 : codeMirrorObj.default) ? codeMirrorObj.default : codeMirrorObj;
|
64
|
+
this.codeMirror = codeMirror.fromTextArea(this.ref.nativeElement, this._options);
|
62
65
|
this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
|
63
66
|
this.codeMirror.on('scroll', this.scrollChanged.bind(this));
|
64
67
|
this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
|
@@ -68,7 +71,7 @@ class CodemirrorComponent {
|
|
68
71
|
this._ngZone.run(() => this.dropFiles(cm, e));
|
69
72
|
});
|
70
73
|
this.codeMirror.setValue(this.value);
|
71
|
-
});
|
74
|
+
}));
|
72
75
|
}
|
73
76
|
ngDoCheck() {
|
74
77
|
if (!this._differ) {
|
@@ -153,8 +156,8 @@ class CodemirrorComponent {
|
|
153
156
|
this.setOptionIfChanged('readOnly', this.disabled);
|
154
157
|
}
|
155
158
|
}
|
156
|
-
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
157
|
-
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
159
|
+
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
160
|
+
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CodemirrorComponent, selector: "ngx-codemirror", inputs: { className: "className", name: "name", autoFocus: "autoFocus", options: "options", preserveScrollPosition: "preserveScrollPosition" }, outputs: { cursorActivity: "cursorActivity", focusChange: "focusChange", scroll: "scroll", drop: "drop" }, providers: [
|
158
161
|
{
|
159
162
|
provide: NG_VALUE_ACCESSOR,
|
160
163
|
useExisting: forwardRef(() => CodemirrorComponent),
|
@@ -171,7 +174,7 @@ CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
171
174
|
>
|
172
175
|
</textarea>
|
173
176
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
174
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, decorators: [{
|
175
178
|
type: Component,
|
176
179
|
args: [{
|
177
180
|
selector: 'ngx-codemirror',
|
@@ -221,10 +224,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
221
224
|
|
222
225
|
class CodemirrorModule {
|
223
226
|
}
|
224
|
-
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
225
|
-
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.
|
226
|
-
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.
|
227
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
227
|
+
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
228
|
+
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, declarations: [CodemirrorComponent], exports: [CodemirrorComponent] });
|
229
|
+
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule });
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, decorators: [{
|
228
231
|
type: NgModule,
|
229
232
|
args: [{
|
230
233
|
exports: [CodemirrorComponent],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ctrl-ngx-codemirror.mjs","sources":["../../src/lib/codemirror.component.ts","../../src/lib/codemirror.module.ts","../../src/lib/ctrl-ngx-codemirror.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Editor, EditorChange, EditorFromTextArea, ScrollInfo } from 'codemirror';\n\nfunction normalizeLineEndings(str: string): string {\n if (!str) {\n return str;\n }\n return str.replace(/\\r\\n|\\r/g, '\\n');\n}\n\ndeclare var require: any;\ndeclare var CodeMirror: any;\n\n@Component({\n selector: 'ngx-codemirror',\n template: `\n <textarea\n [name]=\"name\"\n class=\"ngx-codemirror {{ className }}\"\n [class.ngx-codemirror--focused]=\"isFocused\"\n autocomplete=\"off\"\n [autofocus]=\"autoFocus\"\n #ref\n >\n </textarea>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodemirrorComponent),\n multi: true,\n },\n ],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodemirrorComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n /* class applied to the created textarea */\n @Input() className = '';\n /* name applied to the created textarea */\n @Input() name = 'codemirror';\n /* autofocus setting applied to the created textarea */\n @Input() autoFocus = false;\n /**\n * set options for codemirror\n * @link http://codemirror.net/doc/manual.html#config\n */\n @Input()\n set options(value: { [key: string]: any }) {\n this._options = value;\n if (!this._differ && value) {\n this._differ = this._differs.find(value).create();\n }\n }\n /* preserve previous scroll position after updating value */\n @Input() preserveScrollPosition = false;\n /* called when the text cursor is moved */\n @Output() cursorActivity = new EventEmitter<Editor>();\n /* called when the editor is focused or loses focus */\n @Output() focusChange = new EventEmitter<boolean>();\n /* called when the editor is scrolled */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref') ref!: ElementRef<HTMLTextAreaElement>;\n value = '';\n disabled = false;\n isFocused = false;\n codeMirror?: EditorFromTextArea;\n /**\n * either global variable or required library\n */\n private _codeMirror: any;\n\n private _differ?: KeyValueDiffer<string, any>;\n private _options: any;\n\n constructor(private _differs: KeyValueDiffers, private _ngZone: NgZone) {}\n\n get codeMirrorGlobal(): any {\n if (this._codeMirror) {\n return this._codeMirror;\n }\n\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\n this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n this.codeMirror = this.codeMirrorGlobal.fromTextArea(\n this.ref.nativeElement,\n this._options,\n ) as EditorFromTextArea;\n this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));\n this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));\n this.codeMirror.on('change', (cm, change) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on('drop', (cm, e) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n });\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck() {\n if (!this._differ) {\n return;\n }\n // check options have not changed\n const changes = this._differ.diff(this._options);\n if (changes) {\n changes.forEachChangedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy() {\n // is there a lighter-weight way to remove the cm instance?\n if (this.codeMirror) {\n this.codeMirror.toTextArea();\n }\n }\n codemirrorValueChanged(cm: Editor, change: EditorChange) {\n const cmVal = cm.getValue();\n if (this.value !== cmVal) {\n this.value = cmVal;\n this.onChange(this.value);\n }\n }\n setOptionIfChanged(optionName: string, newValue: any) {\n if (!this.codeMirror) {\n return;\n }\n\n // cast to any to handle strictly typed option names\n // could possibly import settings strings available in the future\n this.codeMirror.setOption(optionName as any, newValue);\n }\n focusChanged(focused: boolean) {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor) {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor) {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent) {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string) {\n if (value === null || value === undefined) {\n return;\n }\n if (!this.codeMirror) {\n this.value = value;\n return;\n }\n const cur = this.codeMirror.getValue();\n if (value !== cur && normalizeLineEndings(cur) !== normalizeLineEndings(value)) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void) {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.setOptionIfChanged('readOnly', this.disabled);\n }\n /** Implemented as part of ControlValueAccessor. */\n private onChange = (_: any) => {};\n /** Implemented as part of ControlValueAccessor. */\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\n\nimport { CodemirrorComponent } from './codemirror.component';\n\n@NgModule({\n exports: [CodemirrorComponent],\n declarations: [CodemirrorComponent],\n})\nexport class CodemirrorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ctrl-ngx-codemirror.mjs","sources":["../../src/lib/codemirror.component.ts","../../src/lib/codemirror.module.ts","../../src/lib/ctrl-ngx-codemirror.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Editor, EditorChange, EditorFromTextArea, ScrollInfo } from 'codemirror';\n\nfunction normalizeLineEndings(str: string): string {\n if (!str) {\n return str;\n }\n return str.replace(/\\r\\n|\\r/g, '\\n');\n}\n\ndeclare var require: any;\ndeclare var CodeMirror: any;\n\n@Component({\n selector: 'ngx-codemirror',\n template: `\n <textarea\n [name]=\"name\"\n class=\"ngx-codemirror {{ className }}\"\n [class.ngx-codemirror--focused]=\"isFocused\"\n autocomplete=\"off\"\n [autofocus]=\"autoFocus\"\n #ref\n >\n </textarea>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodemirrorComponent),\n multi: true,\n },\n ],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodemirrorComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n /* class applied to the created textarea */\n @Input() className = '';\n /* name applied to the created textarea */\n @Input() name = 'codemirror';\n /* autofocus setting applied to the created textarea */\n @Input() autoFocus = false;\n /**\n * set options for codemirror\n * @link http://codemirror.net/doc/manual.html#config\n */\n @Input()\n set options(value: { [key: string]: any }) {\n this._options = value;\n if (!this._differ && value) {\n this._differ = this._differs.find(value).create();\n }\n }\n /* preserve previous scroll position after updating value */\n @Input() preserveScrollPosition = false;\n /* called when the text cursor is moved */\n @Output() cursorActivity = new EventEmitter<Editor>();\n /* called when the editor is focused or loses focus */\n @Output() focusChange = new EventEmitter<boolean>();\n /* called when the editor is scrolled */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref') ref!: ElementRef<HTMLTextAreaElement>;\n value = '';\n disabled = false;\n isFocused = false;\n codeMirror?: EditorFromTextArea;\n /**\n * either global variable or required library\n */\n private _codeMirror: any;\n\n private _differ?: KeyValueDiffer<string, any>;\n private _options: any;\n\n constructor(private _differs: KeyValueDiffers, private _ngZone: NgZone) {}\n\n get codeMirrorGlobal(): any {\n if (this._codeMirror) {\n return this._codeMirror;\n }\n\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\n this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : import('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(async () => {\n const codeMirrorObj = await this.codeMirrorGlobal;\n const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;\n this.codeMirror = codeMirror.fromTextArea(\n this.ref.nativeElement,\n this._options,\n ) as EditorFromTextArea;\n this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));\n this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));\n this.codeMirror.on('change', (cm, change) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on('drop', (cm, e) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n });\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck() {\n if (!this._differ) {\n return;\n }\n // check options have not changed\n const changes = this._differ.diff(this._options);\n if (changes) {\n changes.forEachChangedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy() {\n // is there a lighter-weight way to remove the cm instance?\n if (this.codeMirror) {\n this.codeMirror.toTextArea();\n }\n }\n codemirrorValueChanged(cm: Editor, change: EditorChange) {\n const cmVal = cm.getValue();\n if (this.value !== cmVal) {\n this.value = cmVal;\n this.onChange(this.value);\n }\n }\n setOptionIfChanged(optionName: string, newValue: any) {\n if (!this.codeMirror) {\n return;\n }\n\n // cast to any to handle strictly typed option names\n // could possibly import settings strings available in the future\n this.codeMirror.setOption(optionName as any, newValue);\n }\n focusChanged(focused: boolean) {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor) {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor) {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent) {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string) {\n if (value === null || value === undefined) {\n return;\n }\n if (!this.codeMirror) {\n this.value = value;\n return;\n }\n const cur = this.codeMirror.getValue();\n if (value !== cur && normalizeLineEndings(cur) !== normalizeLineEndings(value)) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void) {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.setOptionIfChanged('readOnly', this.disabled);\n }\n /** Implemented as part of ControlValueAccessor. */\n private onChange = (_: any) => {};\n /** Implemented as part of ControlValueAccessor. */\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\n\nimport { CodemirrorComponent } from './codemirror.component';\n\n@NgModule({\n exports: [CodemirrorComponent],\n declarations: [CodemirrorComponent],\n})\nexport class CodemirrorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
@@ -53,12 +53,14 @@ class CodemirrorComponent {
|
|
53
53
|
return this._codeMirror;
|
54
54
|
}
|
55
55
|
// in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors
|
56
|
-
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror :
|
56
|
+
this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : import('codemirror');
|
57
57
|
return this._codeMirror;
|
58
58
|
}
|
59
59
|
ngAfterViewInit() {
|
60
|
-
this._ngZone.runOutsideAngular(() => {
|
61
|
-
|
60
|
+
this._ngZone.runOutsideAngular(async () => {
|
61
|
+
const codeMirrorObj = await this.codeMirrorGlobal;
|
62
|
+
const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;
|
63
|
+
this.codeMirror = codeMirror.fromTextArea(this.ref.nativeElement, this._options);
|
62
64
|
this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
|
63
65
|
this.codeMirror.on('scroll', this.scrollChanged.bind(this));
|
64
66
|
this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
|
@@ -153,8 +155,8 @@ class CodemirrorComponent {
|
|
153
155
|
this.setOptionIfChanged('readOnly', this.disabled);
|
154
156
|
}
|
155
157
|
}
|
156
|
-
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
157
|
-
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.
|
158
|
+
CodemirrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
159
|
+
CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CodemirrorComponent, selector: "ngx-codemirror", inputs: { className: "className", name: "name", autoFocus: "autoFocus", options: "options", preserveScrollPosition: "preserveScrollPosition" }, outputs: { cursorActivity: "cursorActivity", focusChange: "focusChange", scroll: "scroll", drop: "drop" }, providers: [
|
158
160
|
{
|
159
161
|
provide: NG_VALUE_ACCESSOR,
|
160
162
|
useExisting: forwardRef(() => CodemirrorComponent),
|
@@ -171,7 +173,7 @@ CodemirrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
171
173
|
>
|
172
174
|
</textarea>
|
173
175
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
174
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, decorators: [{
|
175
177
|
type: Component,
|
176
178
|
args: [{
|
177
179
|
selector: 'ngx-codemirror',
|
@@ -221,10 +223,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
221
223
|
|
222
224
|
class CodemirrorModule {
|
223
225
|
}
|
224
|
-
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.
|
225
|
-
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.
|
226
|
-
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.
|
227
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.
|
226
|
+
CodemirrorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
227
|
+
CodemirrorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, declarations: [CodemirrorComponent], exports: [CodemirrorComponent] });
|
228
|
+
CodemirrorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule });
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorModule, decorators: [{
|
228
230
|
type: NgModule,
|
229
231
|
args: [{
|
230
232
|
exports: [CodemirrorComponent],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ctrl-ngx-codemirror.mjs","sources":["../../src/lib/codemirror.component.ts","../../src/lib/codemirror.module.ts","../../src/lib/ctrl-ngx-codemirror.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Editor, EditorChange, EditorFromTextArea, ScrollInfo } from 'codemirror';\n\nfunction normalizeLineEndings(str: string): string {\n if (!str) {\n return str;\n }\n return str.replace(/\\r\\n|\\r/g, '\\n');\n}\n\ndeclare var require: any;\ndeclare var CodeMirror: any;\n\n@Component({\n selector: 'ngx-codemirror',\n template: `\n <textarea\n [name]=\"name\"\n class=\"ngx-codemirror {{ className }}\"\n [class.ngx-codemirror--focused]=\"isFocused\"\n autocomplete=\"off\"\n [autofocus]=\"autoFocus\"\n #ref\n >\n </textarea>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodemirrorComponent),\n multi: true,\n },\n ],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodemirrorComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n /* class applied to the created textarea */\n @Input() className = '';\n /* name applied to the created textarea */\n @Input() name = 'codemirror';\n /* autofocus setting applied to the created textarea */\n @Input() autoFocus = false;\n /**\n * set options for codemirror\n * @link http://codemirror.net/doc/manual.html#config\n */\n @Input()\n set options(value: { [key: string]: any }) {\n this._options = value;\n if (!this._differ && value) {\n this._differ = this._differs.find(value).create();\n }\n }\n /* preserve previous scroll position after updating value */\n @Input() preserveScrollPosition = false;\n /* called when the text cursor is moved */\n @Output() cursorActivity = new EventEmitter<Editor>();\n /* called when the editor is focused or loses focus */\n @Output() focusChange = new EventEmitter<boolean>();\n /* called when the editor is scrolled */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref') ref!: ElementRef<HTMLTextAreaElement>;\n value = '';\n disabled = false;\n isFocused = false;\n codeMirror?: EditorFromTextArea;\n /**\n * either global variable or required library\n */\n private _codeMirror: any;\n\n private _differ?: KeyValueDiffer<string, any>;\n private _options: any;\n\n constructor(private _differs: KeyValueDiffers, private _ngZone: NgZone) {}\n\n get codeMirrorGlobal(): any {\n if (this._codeMirror) {\n return this._codeMirror;\n }\n\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\n this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(() => {\n this.codeMirror = this.codeMirrorGlobal.fromTextArea(\n this.ref.nativeElement,\n this._options,\n ) as EditorFromTextArea;\n this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));\n this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));\n this.codeMirror.on('change', (cm, change) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on('drop', (cm, e) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n });\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck() {\n if (!this._differ) {\n return;\n }\n // check options have not changed\n const changes = this._differ.diff(this._options);\n if (changes) {\n changes.forEachChangedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy() {\n // is there a lighter-weight way to remove the cm instance?\n if (this.codeMirror) {\n this.codeMirror.toTextArea();\n }\n }\n codemirrorValueChanged(cm: Editor, change: EditorChange) {\n const cmVal = cm.getValue();\n if (this.value !== cmVal) {\n this.value = cmVal;\n this.onChange(this.value);\n }\n }\n setOptionIfChanged(optionName: string, newValue: any) {\n if (!this.codeMirror) {\n return;\n }\n\n // cast to any to handle strictly typed option names\n // could possibly import settings strings available in the future\n this.codeMirror.setOption(optionName as any, newValue);\n }\n focusChanged(focused: boolean) {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor) {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor) {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent) {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string) {\n if (value === null || value === undefined) {\n return;\n }\n if (!this.codeMirror) {\n this.value = value;\n return;\n }\n const cur = this.codeMirror.getValue();\n if (value !== cur && normalizeLineEndings(cur) !== normalizeLineEndings(value)) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void) {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.setOptionIfChanged('readOnly', this.disabled);\n }\n /** Implemented as part of ControlValueAccessor. */\n private onChange = (_: any) => {};\n /** Implemented as part of ControlValueAccessor. */\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\n\nimport { CodemirrorComponent } from './codemirror.component';\n\n@NgModule({\n exports: [CodemirrorComponent],\n declarations: [CodemirrorComponent],\n})\nexport class CodemirrorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ctrl-ngx-codemirror.mjs","sources":["../../src/lib/codemirror.component.ts","../../src/lib/codemirror.module.ts","../../src/lib/ctrl-ngx-codemirror.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Editor, EditorChange, EditorFromTextArea, ScrollInfo } from 'codemirror';\n\nfunction normalizeLineEndings(str: string): string {\n if (!str) {\n return str;\n }\n return str.replace(/\\r\\n|\\r/g, '\\n');\n}\n\ndeclare var require: any;\ndeclare var CodeMirror: any;\n\n@Component({\n selector: 'ngx-codemirror',\n template: `\n <textarea\n [name]=\"name\"\n class=\"ngx-codemirror {{ className }}\"\n [class.ngx-codemirror--focused]=\"isFocused\"\n autocomplete=\"off\"\n [autofocus]=\"autoFocus\"\n #ref\n >\n </textarea>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodemirrorComponent),\n multi: true,\n },\n ],\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodemirrorComponent\n implements AfterViewInit, OnDestroy, ControlValueAccessor, DoCheck\n{\n /* class applied to the created textarea */\n @Input() className = '';\n /* name applied to the created textarea */\n @Input() name = 'codemirror';\n /* autofocus setting applied to the created textarea */\n @Input() autoFocus = false;\n /**\n * set options for codemirror\n * @link http://codemirror.net/doc/manual.html#config\n */\n @Input()\n set options(value: { [key: string]: any }) {\n this._options = value;\n if (!this._differ && value) {\n this._differ = this._differs.find(value).create();\n }\n }\n /* preserve previous scroll position after updating value */\n @Input() preserveScrollPosition = false;\n /* called when the text cursor is moved */\n @Output() cursorActivity = new EventEmitter<Editor>();\n /* called when the editor is focused or loses focus */\n @Output() focusChange = new EventEmitter<boolean>();\n /* called when the editor is scrolled */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref') ref!: ElementRef<HTMLTextAreaElement>;\n value = '';\n disabled = false;\n isFocused = false;\n codeMirror?: EditorFromTextArea;\n /**\n * either global variable or required library\n */\n private _codeMirror: any;\n\n private _differ?: KeyValueDiffer<string, any>;\n private _options: any;\n\n constructor(private _differs: KeyValueDiffers, private _ngZone: NgZone) {}\n\n get codeMirrorGlobal(): any {\n if (this._codeMirror) {\n return this._codeMirror;\n }\n\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\n this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : import('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit() {\n this._ngZone.runOutsideAngular(async () => {\n const codeMirrorObj = await this.codeMirrorGlobal;\n const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;\n this.codeMirror = codeMirror.fromTextArea(\n this.ref.nativeElement,\n this._options,\n ) as EditorFromTextArea;\n this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));\n this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));\n this.codeMirror.on('change', (cm, change) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on('drop', (cm, e) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n });\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck() {\n if (!this._differ) {\n return;\n }\n // check options have not changed\n const changes = this._differ.diff(this._options);\n if (changes) {\n changes.forEachChangedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy() {\n // is there a lighter-weight way to remove the cm instance?\n if (this.codeMirror) {\n this.codeMirror.toTextArea();\n }\n }\n codemirrorValueChanged(cm: Editor, change: EditorChange) {\n const cmVal = cm.getValue();\n if (this.value !== cmVal) {\n this.value = cmVal;\n this.onChange(this.value);\n }\n }\n setOptionIfChanged(optionName: string, newValue: any) {\n if (!this.codeMirror) {\n return;\n }\n\n // cast to any to handle strictly typed option names\n // could possibly import settings strings available in the future\n this.codeMirror.setOption(optionName as any, newValue);\n }\n focusChanged(focused: boolean) {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor) {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor) {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent) {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string) {\n if (value === null || value === undefined) {\n return;\n }\n if (!this.codeMirror) {\n this.value = value;\n return;\n }\n const cur = this.codeMirror.getValue();\n if (value !== cur && normalizeLineEndings(cur) !== normalizeLineEndings(value)) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void) {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.setOptionIfChanged('readOnly', this.disabled);\n }\n /** Implemented as part of ControlValueAccessor. */\n private onChange = (_: any) => {};\n /** Implemented as part of ControlValueAccessor. */\n private onTouched = () => {};\n}\n","import { NgModule } from '@angular/core';\n\nimport { CodemirrorComponent } from './codemirror.component';\n\n@NgModule({\n exports: [CodemirrorComponent],\n declarations: [CodemirrorComponent],\n})\nexport class CodemirrorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|