@ctrl/ngx-codemirror 4.1.1 → 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.
@@ -1,4 +1,5 @@
1
- import { EventEmitter, Component, forwardRef, ChangeDetectionStrategy, KeyValueDiffers, NgZone, Input, Output, ViewChild, NgModule } from '@angular/core';
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, forwardRef, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';
2
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
4
 
4
5
  function normalizeLineEndings(str) {
@@ -24,10 +25,10 @@ class CodemirrorComponent {
24
25
  /* called when the editor is focused or loses focus */
25
26
  this.focusChange = new EventEmitter();
26
27
  /* called when the editor is scrolled */
27
- // tslint:disable-next-line:no-output-native
28
+ // eslint-disable-next-line @angular-eslint/no-output-native
28
29
  this.scroll = new EventEmitter();
29
30
  /* called when file(s) are dropped */
30
- // tslint:disable-next-line:no-output-native
31
+ // eslint-disable-next-line @angular-eslint/no-output-native
31
32
  this.drop = new EventEmitter();
32
33
  this.value = '';
33
34
  this.disabled = false;
@@ -51,16 +52,15 @@ class CodemirrorComponent {
51
52
  if (this._codeMirror) {
52
53
  return this._codeMirror;
53
54
  }
54
- this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');
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 : import('codemirror');
55
57
  return this._codeMirror;
56
58
  }
57
59
  ngAfterViewInit() {
58
- if (!this.ref) {
59
- return;
60
- }
61
- // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors
62
- this._ngZone.runOutsideAngular(() => {
63
- this.codeMirror = this.codeMirrorGlobal.fromTextArea(this.ref.nativeElement, this._options);
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);
64
64
  this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
65
65
  this.codeMirror.on('scroll', this.scrollChanged.bind(this));
66
66
  this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
@@ -129,8 +129,7 @@ class CodemirrorComponent {
129
129
  return;
130
130
  }
131
131
  const cur = this.codeMirror.getValue();
132
- if (value !== cur &&
133
- normalizeLineEndings(cur) !== normalizeLineEndings(value)) {
132
+ if (value !== cur && normalizeLineEndings(cur) !== normalizeLineEndings(value)) {
134
133
  this.value = value;
135
134
  if (this.preserveScrollPosition) {
136
135
  const prevScrollPosition = this.codeMirror.getScrollInfo();
@@ -156,10 +155,29 @@ class CodemirrorComponent {
156
155
  this.setOptionIfChanged('readOnly', this.disabled);
157
156
  }
158
157
  }
159
- CodemirrorComponent.decorators = [
160
- { type: Component, args: [{
161
- selector: 'ngx-codemirror',
162
- template: `
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: [
160
+ {
161
+ provide: NG_VALUE_ACCESSOR,
162
+ useExisting: forwardRef(() => CodemirrorComponent),
163
+ multi: true,
164
+ },
165
+ ], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true }], ngImport: i0, template: `
166
+ <textarea
167
+ [name]="name"
168
+ class="ngx-codemirror {{ className }}"
169
+ [class.ngx-codemirror--focused]="isFocused"
170
+ autocomplete="off"
171
+ [autofocus]="autoFocus"
172
+ #ref
173
+ >
174
+ </textarea>
175
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CodemirrorComponent, decorators: [{
177
+ type: Component,
178
+ args: [{
179
+ selector: 'ngx-codemirror',
180
+ template: `
163
181
  <textarea
164
182
  [name]="name"
165
183
  class="ngx-codemirror {{ className }}"
@@ -170,46 +188,55 @@ CodemirrorComponent.decorators = [
170
188
  >
171
189
  </textarea>
172
190
  `,
173
- providers: [
174
- {
175
- provide: NG_VALUE_ACCESSOR,
176
- useExisting: forwardRef(() => CodemirrorComponent),
177
- multi: true,
178
- },
179
- ],
180
- preserveWhitespaces: false,
181
- changeDetection: ChangeDetectionStrategy.OnPush
182
- },] }
183
- ];
184
- CodemirrorComponent.ctorParameters = () => [
185
- { type: KeyValueDiffers },
186
- { type: NgZone }
187
- ];
188
- CodemirrorComponent.propDecorators = {
189
- className: [{ type: Input }],
190
- name: [{ type: Input }],
191
- autoFocus: [{ type: Input }],
192
- options: [{ type: Input }],
193
- preserveScrollPosition: [{ type: Input }],
194
- cursorActivity: [{ type: Output }],
195
- focusChange: [{ type: Output }],
196
- scroll: [{ type: Output }],
197
- drop: [{ type: Output }],
198
- ref: [{ type: ViewChild, args: ['ref', { static: true },] }]
199
- };
191
+ providers: [
192
+ {
193
+ provide: NG_VALUE_ACCESSOR,
194
+ useExisting: forwardRef(() => CodemirrorComponent),
195
+ multi: true,
196
+ },
197
+ ],
198
+ preserveWhitespaces: false,
199
+ changeDetection: ChangeDetectionStrategy.OnPush,
200
+ }]
201
+ }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.NgZone }]; }, propDecorators: { className: [{
202
+ type: Input
203
+ }], name: [{
204
+ type: Input
205
+ }], autoFocus: [{
206
+ type: Input
207
+ }], options: [{
208
+ type: Input
209
+ }], preserveScrollPosition: [{
210
+ type: Input
211
+ }], cursorActivity: [{
212
+ type: Output
213
+ }], focusChange: [{
214
+ type: Output
215
+ }], scroll: [{
216
+ type: Output
217
+ }], drop: [{
218
+ type: Output
219
+ }], ref: [{
220
+ type: ViewChild,
221
+ args: ['ref']
222
+ }] } });
200
223
 
201
224
  class CodemirrorModule {
202
225
  }
203
- CodemirrorModule.decorators = [
204
- { type: NgModule, args: [{
205
- exports: [CodemirrorComponent],
206
- declarations: [CodemirrorComponent],
207
- },] }
208
- ];
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: [{
230
+ type: NgModule,
231
+ args: [{
232
+ exports: [CodemirrorComponent],
233
+ declarations: [CodemirrorComponent],
234
+ }]
235
+ }] });
209
236
 
210
237
  /**
211
238
  * Generated bundle index. Do not edit.
212
239
  */
213
240
 
214
241
  export { CodemirrorComponent, CodemirrorModule };
215
- //# sourceMappingURL=ctrl-ngx-codemirror.js.map
242
+ //# sourceMappingURL=ctrl-ngx-codemirror.mjs.map
@@ -0,0 +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 : 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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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "$schema": "../../node_modules/ng-packagr/package.schema.json",
3
3
  "name": "@ctrl/ngx-codemirror",
4
- "version": "4.1.1",
4
+ "version": "5.1.1",
5
5
  "license": "MIT",
6
6
  "description": "CodeMirror wrapper for Angular",
7
7
  "dependencies": {
8
- "@types/codemirror": "^0.0.99",
9
- "tslib": "^2.0.0"
8
+ "@types/codemirror": "^5.60.5",
9
+ "tslib": "^2.3.0"
10
10
  },
11
11
  "peerDependencies": {
12
- "@angular/core": ">=10.0.0-0",
13
- "@angular/forms": ">=10.0.0-0",
14
- "codemirror": ">=5.58.0"
12
+ "@angular/core": ">=12.0.0-0",
13
+ "@angular/forms": ">=12.0.0-0",
14
+ "codemirror": ">=5.63.3"
15
15
  },
16
16
  "repository": "scttcper/ngx-codemirror",
17
17
  "homepage": "https://github.com/scttcper/ngx-codemirror",
@@ -19,15 +19,26 @@
19
19
  "keywords": [
20
20
  "ngx",
21
21
  "angular",
22
- "wrapper",
23
22
  "codemirror"
24
23
  ],
25
- "main": "bundles/ctrl-ngx-codemirror.umd.js",
26
- "module": "fesm2015/ctrl-ngx-codemirror.js",
27
- "es2015": "fesm2015/ctrl-ngx-codemirror.js",
28
- "esm2015": "esm2015/ctrl-ngx-codemirror.js",
29
- "fesm2015": "fesm2015/ctrl-ngx-codemirror.js",
24
+ "module": "fesm2015/ctrl-ngx-codemirror.mjs",
25
+ "es2020": "fesm2020/ctrl-ngx-codemirror.mjs",
26
+ "esm2020": "esm2020/ctrl-ngx-codemirror.mjs",
27
+ "fesm2020": "fesm2020/ctrl-ngx-codemirror.mjs",
28
+ "fesm2015": "fesm2015/ctrl-ngx-codemirror.mjs",
30
29
  "typings": "ctrl-ngx-codemirror.d.ts",
31
- "metadata": "ctrl-ngx-codemirror.metadata.json",
30
+ "exports": {
31
+ "./package.json": {
32
+ "default": "./package.json"
33
+ },
34
+ ".": {
35
+ "types": "./ctrl-ngx-codemirror.d.ts",
36
+ "esm2020": "./esm2020/ctrl-ngx-codemirror.mjs",
37
+ "es2020": "./fesm2020/ctrl-ngx-codemirror.mjs",
38
+ "es2015": "./fesm2015/ctrl-ngx-codemirror.mjs",
39
+ "node": "./fesm2015/ctrl-ngx-codemirror.mjs",
40
+ "default": "./fesm2020/ctrl-ngx-codemirror.mjs"
41
+ }
42
+ },
32
43
  "sideEffects": false
33
44
  }
@@ -1,227 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms')) :
3
- typeof define === 'function' && define.amd ? define('@ctrl/ngx-codemirror', ['exports', '@angular/core', '@angular/forms'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ctrl = global.ctrl || {}, global.ctrl['ngx-codemirror'] = {}), global.ng.core, global.ng.forms));
5
- }(this, (function (exports, core, forms) { 'use strict';
6
-
7
- function normalizeLineEndings(str) {
8
- if (!str) {
9
- return str;
10
- }
11
- return str.replace(/\r\n|\r/g, '\n');
12
- }
13
- var CodemirrorComponent = /** @class */ (function () {
14
- function CodemirrorComponent(_differs, _ngZone) {
15
- this._differs = _differs;
16
- this._ngZone = _ngZone;
17
- /* class applied to the created textarea */
18
- this.className = '';
19
- /* name applied to the created textarea */
20
- this.name = 'codemirror';
21
- /* autofocus setting applied to the created textarea */
22
- this.autoFocus = false;
23
- /* preserve previous scroll position after updating value */
24
- this.preserveScrollPosition = false;
25
- /* called when the text cursor is moved */
26
- this.cursorActivity = new core.EventEmitter();
27
- /* called when the editor is focused or loses focus */
28
- this.focusChange = new core.EventEmitter();
29
- /* called when the editor is scrolled */
30
- // tslint:disable-next-line:no-output-native
31
- this.scroll = new core.EventEmitter();
32
- /* called when file(s) are dropped */
33
- // tslint:disable-next-line:no-output-native
34
- this.drop = new core.EventEmitter();
35
- this.value = '';
36
- this.disabled = false;
37
- this.isFocused = false;
38
- /** Implemented as part of ControlValueAccessor. */
39
- this.onChange = function (_) { };
40
- /** Implemented as part of ControlValueAccessor. */
41
- this.onTouched = function () { };
42
- }
43
- Object.defineProperty(CodemirrorComponent.prototype, "options", {
44
- /**
45
- * set options for codemirror
46
- * @link http://codemirror.net/doc/manual.html#config
47
- */
48
- set: function (value) {
49
- this._options = value;
50
- if (!this._differ && value) {
51
- this._differ = this._differs.find(value).create();
52
- }
53
- },
54
- enumerable: false,
55
- configurable: true
56
- });
57
- Object.defineProperty(CodemirrorComponent.prototype, "codeMirrorGlobal", {
58
- get: function () {
59
- if (this._codeMirror) {
60
- return this._codeMirror;
61
- }
62
- this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');
63
- return this._codeMirror;
64
- },
65
- enumerable: false,
66
- configurable: true
67
- });
68
- CodemirrorComponent.prototype.ngAfterViewInit = function () {
69
- var _this = this;
70
- if (!this.ref) {
71
- return;
72
- }
73
- // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors
74
- this._ngZone.runOutsideAngular(function () {
75
- _this.codeMirror = _this.codeMirrorGlobal.fromTextArea(_this.ref.nativeElement, _this._options);
76
- _this.codeMirror.on('cursorActivity', function (cm) { return _this._ngZone.run(function () { return _this.cursorActive(cm); }); });
77
- _this.codeMirror.on('scroll', _this.scrollChanged.bind(_this));
78
- _this.codeMirror.on('blur', function () { return _this._ngZone.run(function () { return _this.focusChanged(false); }); });
79
- _this.codeMirror.on('focus', function () { return _this._ngZone.run(function () { return _this.focusChanged(true); }); });
80
- _this.codeMirror.on('change', function (cm, change) { return _this._ngZone.run(function () { return _this.codemirrorValueChanged(cm, change); }); });
81
- _this.codeMirror.on('drop', function (cm, e) {
82
- _this._ngZone.run(function () { return _this.dropFiles(cm, e); });
83
- });
84
- _this.codeMirror.setValue(_this.value);
85
- });
86
- };
87
- CodemirrorComponent.prototype.ngDoCheck = function () {
88
- var _this = this;
89
- if (!this._differ) {
90
- return;
91
- }
92
- // check options have not changed
93
- var changes = this._differ.diff(this._options);
94
- if (changes) {
95
- changes.forEachChangedItem(function (option) { return _this.setOptionIfChanged(option.key, option.currentValue); });
96
- changes.forEachAddedItem(function (option) { return _this.setOptionIfChanged(option.key, option.currentValue); });
97
- changes.forEachRemovedItem(function (option) { return _this.setOptionIfChanged(option.key, option.currentValue); });
98
- }
99
- };
100
- CodemirrorComponent.prototype.ngOnDestroy = function () {
101
- // is there a lighter-weight way to remove the cm instance?
102
- if (this.codeMirror) {
103
- this.codeMirror.toTextArea();
104
- }
105
- };
106
- CodemirrorComponent.prototype.codemirrorValueChanged = function (cm, change) {
107
- var cmVal = cm.getValue();
108
- if (this.value !== cmVal) {
109
- this.value = cmVal;
110
- this.onChange(this.value);
111
- }
112
- };
113
- CodemirrorComponent.prototype.setOptionIfChanged = function (optionName, newValue) {
114
- if (!this.codeMirror) {
115
- return;
116
- }
117
- // cast to any to handle strictly typed option names
118
- // could possibly import settings strings available in the future
119
- this.codeMirror.setOption(optionName, newValue);
120
- };
121
- CodemirrorComponent.prototype.focusChanged = function (focused) {
122
- this.onTouched();
123
- this.isFocused = focused;
124
- this.focusChange.emit(focused);
125
- };
126
- CodemirrorComponent.prototype.scrollChanged = function (cm) {
127
- this.scroll.emit(cm.getScrollInfo());
128
- };
129
- CodemirrorComponent.prototype.cursorActive = function (cm) {
130
- this.cursorActivity.emit(cm);
131
- };
132
- CodemirrorComponent.prototype.dropFiles = function (cm, e) {
133
- this.drop.emit([cm, e]);
134
- };
135
- /** Implemented as part of ControlValueAccessor. */
136
- CodemirrorComponent.prototype.writeValue = function (value) {
137
- if (value === null || value === undefined) {
138
- return;
139
- }
140
- if (!this.codeMirror) {
141
- this.value = value;
142
- return;
143
- }
144
- var cur = this.codeMirror.getValue();
145
- if (value !== cur &&
146
- normalizeLineEndings(cur) !== normalizeLineEndings(value)) {
147
- this.value = value;
148
- if (this.preserveScrollPosition) {
149
- var prevScrollPosition = this.codeMirror.getScrollInfo();
150
- this.codeMirror.setValue(this.value);
151
- this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);
152
- }
153
- else {
154
- this.codeMirror.setValue(this.value);
155
- }
156
- }
157
- };
158
- /** Implemented as part of ControlValueAccessor. */
159
- CodemirrorComponent.prototype.registerOnChange = function (fn) {
160
- this.onChange = fn;
161
- };
162
- /** Implemented as part of ControlValueAccessor. */
163
- CodemirrorComponent.prototype.registerOnTouched = function (fn) {
164
- this.onTouched = fn;
165
- };
166
- /** Implemented as part of ControlValueAccessor. */
167
- CodemirrorComponent.prototype.setDisabledState = function (isDisabled) {
168
- this.disabled = isDisabled;
169
- this.setOptionIfChanged('readOnly', this.disabled);
170
- };
171
- return CodemirrorComponent;
172
- }());
173
- CodemirrorComponent.decorators = [
174
- { type: core.Component, args: [{
175
- selector: 'ngx-codemirror',
176
- 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 ",
177
- providers: [
178
- {
179
- provide: forms.NG_VALUE_ACCESSOR,
180
- useExisting: core.forwardRef(function () { return CodemirrorComponent; }),
181
- multi: true,
182
- },
183
- ],
184
- preserveWhitespaces: false,
185
- changeDetection: core.ChangeDetectionStrategy.OnPush
186
- },] }
187
- ];
188
- CodemirrorComponent.ctorParameters = function () { return [
189
- { type: core.KeyValueDiffers },
190
- { type: core.NgZone }
191
- ]; };
192
- CodemirrorComponent.propDecorators = {
193
- className: [{ type: core.Input }],
194
- name: [{ type: core.Input }],
195
- autoFocus: [{ type: core.Input }],
196
- options: [{ type: core.Input }],
197
- preserveScrollPosition: [{ type: core.Input }],
198
- cursorActivity: [{ type: core.Output }],
199
- focusChange: [{ type: core.Output }],
200
- scroll: [{ type: core.Output }],
201
- drop: [{ type: core.Output }],
202
- ref: [{ type: core.ViewChild, args: ['ref', { static: true },] }]
203
- };
204
-
205
- var CodemirrorModule = /** @class */ (function () {
206
- function CodemirrorModule() {
207
- }
208
- return CodemirrorModule;
209
- }());
210
- CodemirrorModule.decorators = [
211
- { type: core.NgModule, args: [{
212
- exports: [CodemirrorComponent],
213
- declarations: [CodemirrorComponent],
214
- },] }
215
- ];
216
-
217
- /**
218
- * Generated bundle index. Do not edit.
219
- */
220
-
221
- exports.CodemirrorComponent = CodemirrorComponent;
222
- exports.CodemirrorModule = CodemirrorModule;
223
-
224
- Object.defineProperty(exports, '__esModule', { value: true });
225
-
226
- })));
227
- //# sourceMappingURL=ctrl-ngx-codemirror.umd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ctrl-ngx-codemirror.umd.js","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 {\n Editor,\n EditorChangeLinkedList,\n EditorFromTextArea,\n ScrollInfo,\n} 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 /* 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 // tslint:disable-next-line:no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // tslint:disable-next-line:no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref', { static: true }) ref!: ElementRef;\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 this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit(): void {\n if (!this.ref) {\n return;\n }\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\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 =>\n this._ngZone.run(() => this.cursorActive(cm)),\n );\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () =>\n this._ngZone.run(() => this.focusChanged(false)),\n );\n this.codeMirror.on('focus', () =>\n this._ngZone.run(() => this.focusChanged(true)),\n );\n this.codeMirror.on(\n 'change',\n (cm: Editor, change: EditorChangeLinkedList) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on(\n 'drop',\n (cm: Editor, e: DragEvent) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n }\n );\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck(): void {\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 =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy(): void {\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: EditorChangeLinkedList): void {\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): void {\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): void {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor): void {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor): void {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent): void {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string): void {\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 (\n value !== cur &&\n normalizeLineEndings(cur) !== normalizeLineEndings(value)\n ) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(\n prevScrollPosition.left,\n prevScrollPosition.top,\n );\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\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":["EventEmitter","Component","NG_VALUE_ACCESSOR","forwardRef","ChangeDetectionStrategy","KeyValueDiffers","NgZone","Input","Output","ViewChild","NgModule"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@angular/core"),require("@angular/forms")):"function"==typeof define&&define.amd?define("@ctrl/ngx-codemirror",["exports","@angular/core","@angular/forms"],r):r(((e="undefined"!=typeof globalThis?globalThis:e||self).ctrl=e.ctrl||{},e.ctrl["ngx-codemirror"]={}),e.ng.core,e.ng.forms)}(this,(function(e,r,t){"use strict";function o(e){return e?e.replace(/\r\n|\r/g,"\n"):e}var n=function(){function e(e,t){this._differs=e,this._ngZone=t,this.className="",this.name="codemirror",this.autoFocus=!1,this.preserveScrollPosition=!1,this.cursorActivity=new r.EventEmitter,this.focusChange=new r.EventEmitter,this.scroll=new r.EventEmitter,this.drop=new r.EventEmitter,this.value="",this.disabled=!1,this.isFocused=!1,this.onChange=function(e){},this.onTouched=function(){}}return Object.defineProperty(e.prototype,"options",{set:function(e){this._options=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"codeMirrorGlobal",{get:function(){return this._codeMirror||(this._codeMirror="undefined"!=typeof CodeMirror?CodeMirror:require("codemirror")),this._codeMirror},enumerable:!1,configurable:!0}),e.prototype.ngAfterViewInit=function(){var e=this;this.ref&&this._ngZone.runOutsideAngular((function(){e.codeMirror=e.codeMirrorGlobal.fromTextArea(e.ref.nativeElement,e._options),e.codeMirror.on("cursorActivity",(function(r){return e._ngZone.run((function(){return e.cursorActive(r)}))})),e.codeMirror.on("scroll",e.scrollChanged.bind(e)),e.codeMirror.on("blur",(function(){return e._ngZone.run((function(){return e.focusChanged(!1)}))})),e.codeMirror.on("focus",(function(){return e._ngZone.run((function(){return e.focusChanged(!0)}))})),e.codeMirror.on("change",(function(r,t){return e._ngZone.run((function(){return e.codemirrorValueChanged(r,t)}))})),e.codeMirror.on("drop",(function(r,t){e._ngZone.run((function(){return e.dropFiles(r,t)}))})),e.codeMirror.setValue(e.value)}))},e.prototype.ngDoCheck=function(){var e=this;if(this._differ){var r=this._differ.diff(this._options);r&&(r.forEachChangedItem((function(r){return e.setOptionIfChanged(r.key,r.currentValue)})),r.forEachAddedItem((function(r){return e.setOptionIfChanged(r.key,r.currentValue)})),r.forEachRemovedItem((function(r){return e.setOptionIfChanged(r.key,r.currentValue)})))}},e.prototype.ngOnDestroy=function(){this.codeMirror&&this.codeMirror.toTextArea()},e.prototype.codemirrorValueChanged=function(e,r){var t=e.getValue();this.value!==t&&(this.value=t,this.onChange(this.value))},e.prototype.setOptionIfChanged=function(e,r){this.codeMirror&&this.codeMirror.setOption(e,r)},e.prototype.focusChanged=function(e){this.onTouched(),this.isFocused=e,this.focusChange.emit(e)},e.prototype.scrollChanged=function(e){this.scroll.emit(e.getScrollInfo())},e.prototype.cursorActive=function(e){this.cursorActivity.emit(e)},e.prototype.dropFiles=function(e,r){this.drop.emit([e,r])},e.prototype.writeValue=function(e){if(null!=e)if(this.codeMirror){var r=this.codeMirror.getValue();if(e!==r&&o(r)!==o(e))if(this.value=e,this.preserveScrollPosition){var t=this.codeMirror.getScrollInfo();this.codeMirror.setValue(this.value),this.codeMirror.scrollTo(t.left,t.top)}else this.codeMirror.setValue(this.value)}else this.value=e},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this.disabled=e,this.setOptionIfChanged("readOnly",this.disabled)},e}();n.decorators=[{type:r.Component,args:[{selector:"ngx-codemirror",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 ',providers:[{provide:t.NG_VALUE_ACCESSOR,useExisting:r.forwardRef((function(){return n})),multi:!0}],preserveWhitespaces:!1,changeDetection:r.ChangeDetectionStrategy.OnPush}]}],n.ctorParameters=function(){return[{type:r.KeyValueDiffers},{type:r.NgZone}]},n.propDecorators={className:[{type:r.Input}],name:[{type:r.Input}],autoFocus:[{type:r.Input}],options:[{type:r.Input}],preserveScrollPosition:[{type:r.Input}],cursorActivity:[{type:r.Output}],focusChange:[{type:r.Output}],scroll:[{type:r.Output}],drop:[{type:r.Output}],ref:[{type:r.ViewChild,args:["ref",{static:!0}]}]};var i=function(){};i.decorators=[{type:r.NgModule,args:[{exports:[n],declarations:[n]}]}],e.CodemirrorComponent=n,e.CodemirrorModule=i,Object.defineProperty(e,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=ctrl-ngx-codemirror.umd.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/codemirror.component.ts","../../src/lib/codemirror.module.ts"],"names":["normalizeLineEndings","str","replace","CodemirrorComponent","_differs","_ngZone","this","className","name","autoFocus","preserveScrollPosition","cursorActivity","EventEmitter","focusChange","scroll","drop","value","disabled","isFocused","onChange","_","onTouched","Object","defineProperty","prototype","_options","_differ","find","create","_codeMirror","CodeMirror","require","ngAfterViewInit","_this","ref","runOutsideAngular","codeMirror","codeMirrorGlobal","fromTextArea","nativeElement","on","cm","run","cursorActive","scrollChanged","bind","focusChanged","change","codemirrorValueChanged","e","dropFiles","setValue","ngDoCheck","changes","diff","forEachChangedItem","option","setOptionIfChanged","key","currentValue","forEachAddedItem","forEachRemovedItem","ngOnDestroy","toTextArea","cmVal","getValue","optionName","newValue","setOption","focused","emit","getScrollInfo","writeValue","cur","prevScrollPosition","scrollTo","left","top","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","Component","args","selector","template","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","preserveWhitespaces","changeDetection","ChangeDetectionStrategy","OnPush","KeyValueDiffers","NgZone","Input","Output","ViewChild","static","NgModule","exports","declarations"],"mappings":"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","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 {\n Editor,\n EditorChangeLinkedList,\n EditorFromTextArea,\n ScrollInfo,\n} 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 /* 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 // tslint:disable-next-line:no-output-native\n @Output() scroll = new EventEmitter<ScrollInfo>();\n /* called when file(s) are dropped */\n // tslint:disable-next-line:no-output-native\n @Output() drop = new EventEmitter<[Editor, DragEvent]>();\n @ViewChild('ref', { static: true }) ref!: ElementRef;\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 this._codeMirror = typeof CodeMirror !== 'undefined' ? CodeMirror : require('codemirror');\n return this._codeMirror;\n }\n\n ngAfterViewInit(): void {\n if (!this.ref) {\n return;\n }\n // in order to allow for universal rendering, we import Codemirror runtime with `require` to prevent node errors\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 =>\n this._ngZone.run(() => this.cursorActive(cm)),\n );\n this.codeMirror.on('scroll', this.scrollChanged.bind(this));\n this.codeMirror.on('blur', () =>\n this._ngZone.run(() => this.focusChanged(false)),\n );\n this.codeMirror.on('focus', () =>\n this._ngZone.run(() => this.focusChanged(true)),\n );\n this.codeMirror.on(\n 'change',\n (cm: Editor, change: EditorChangeLinkedList) =>\n this._ngZone.run(() => this.codemirrorValueChanged(cm, change)),\n );\n this.codeMirror.on(\n 'drop',\n (cm: Editor, e: DragEvent) => {\n this._ngZone.run(() => this.dropFiles(cm, e));\n }\n );\n this.codeMirror.setValue(this.value);\n });\n }\n ngDoCheck(): void {\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 =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n changes.forEachRemovedItem(option =>\n this.setOptionIfChanged(option.key, option.currentValue),\n );\n }\n }\n ngOnDestroy(): void {\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: EditorChangeLinkedList): void {\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): void {\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): void {\n this.onTouched();\n this.isFocused = focused;\n this.focusChange.emit(focused);\n }\n scrollChanged(cm: Editor): void {\n this.scroll.emit(cm.getScrollInfo());\n }\n cursorActive(cm: Editor): void {\n this.cursorActivity.emit(cm);\n }\n dropFiles(cm: Editor, e: DragEvent): void {\n this.drop.emit([cm, e]);\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value: string): void {\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 (\n value !== cur &&\n normalizeLineEndings(cur) !== normalizeLineEndings(value)\n ) {\n this.value = value;\n if (this.preserveScrollPosition) {\n const prevScrollPosition = this.codeMirror.getScrollInfo();\n this.codeMirror.setValue(this.value);\n this.codeMirror.scrollTo(\n prevScrollPosition.left,\n prevScrollPosition.top,\n );\n } else {\n this.codeMirror.setValue(this.value);\n }\n }\n }\n\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n setDisabledState(isDisabled: boolean): void {\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"]}
@@ -1 +0,0 @@
1
- {"__symbolic":"module","version":4,"metadata":{"CodemirrorComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":34,"character":1},"arguments":[{"selector":"ngx-codemirror","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 ","providers":[{"provide":{"__symbolic":"reference","module":"@angular/forms","name":"NG_VALUE_ACCESSOR","line":49,"character":15},"useExisting":{"__symbolic":"reference","name":"CodemirrorComponent"},"multi":true}],"preserveWhitespaces":false,"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":55,"character":19},"member":"OnPush"}}]}],"members":{"className":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"name":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"autoFocus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"preserveScrollPosition":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"cursorActivity":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":79,"character":3}}]}],"focusChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":81,"character":3}}]}],"scroll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":84,"character":3}}]}],"drop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":3}}]}],"ref":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":88,"character":3},"arguments":["ref",{"static":true}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"KeyValueDiffers","line":101,"character":32},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":101,"character":66}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"codemirrorValueChanged":[{"__symbolic":"method"}],"setOptionIfChanged":[{"__symbolic":"method"}],"focusChanged":[{"__symbolic":"method"}],"scrollChanged":[{"__symbolic":"method"}],"cursorActive":[{"__symbolic":"method"}],"dropFiles":[{"__symbolic":"method"}],"writeValue":[{"__symbolic":"method"}],"registerOnChange":[{"__symbolic":"method"}],"registerOnTouched":[{"__symbolic":"method"}],"setDisabledState":[{"__symbolic":"method"}]}},"CodemirrorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"exports":[{"__symbolic":"reference","name":"CodemirrorComponent"}],"declarations":[{"__symbolic":"reference","name":"CodemirrorComponent"}]}]}],"members":{}}},"origins":{"CodemirrorComponent":"./codemirror.component","CodemirrorModule":"./codemirror.module"},"importAs":"@ctrl/ngx-codemirror"}