Skip to content

Commit a5211d3

Browse files
committed
Switch from Ace Editor to Codemirror
1 parent b07ecb5 commit a5211d3

12 files changed

+71
-68
lines changed

angular.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@
5555
},
5656
{
5757
"type": "anyComponentStyle",
58-
"maximumWarning": "6kb"
58+
"maximumWarning": "20kb"
5959
}
6060
]
6161
},
6262
"es5": {
6363
"budgets": [
6464
{
6565
"type": "anyComponentStyle",
66-
"maximumWarning": "6kb"
66+
"maximumWarning": "20kb"
6767
}
6868
],
6969
"tsConfig": "./tsconfig.es5.app.json"
@@ -218,16 +218,16 @@
218218
},
219219
{
220220
"type": "anyComponentStyle",
221-
"maximumWarning": "6kb",
222-
"maximumError": "15kb"
221+
"maximumWarning": "15kb",
222+
"maximumError": "20kb"
223223
}
224224
]
225225
},
226226
"es5": {
227227
"budgets": [
228228
{
229229
"type": "anyComponentStyle",
230-
"maximumWarning": "6kb"
230+
"maximumWarning": "15kb"
231231
}
232232
],
233233
"tsConfig": "projects/openapi-viewer-element/tsconfig.es5.app.json"

package-lock.json

+38-35
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@
5656
"@angular/platform-browser": "^9.1.3",
5757
"@angular/platform-browser-dynamic": "^9.1.3",
5858
"@angular/router": "^9.1.3",
59+
"@ctrl/ngx-codemirror": "^4.0.0",
5960
"@webcomponents/webcomponentsjs": "^2.4.1",
6061
"ajv": "^6.11.0",
61-
"brace": "^0.11.1",
62+
"codemirror": "^5.57.0",
6263
"core-js": "^3.6.4",
6364
"document-register-element": "^1.7.2",
64-
"ngx-ace-wrapper": "^8.0.0",
6565
"ngx-markdown": "^8.2.2",
6666
"openapi3-ts": "^1.4.0",
6767
"rxjs": "^6.5.5",

projects/openapi-viewer/ng-package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
"lib": {
55
"entryFile": "src/public-api.ts"
66
},
7-
"whitelistedNonPeerDependencies": ["ajv", "brace", "ngx-ace-wrapper", "ngx-markdown", "openapi3-ts", "swagger-client"]
7+
"whitelistedNonPeerDependencies": ["ajv", "codemirror", "@ctrl/ngx-codemirror", "ngx-markdown", "openapi3-ts", "swagger-client"]
88
}

projects/openapi-viewer/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
},
2121
"dependencies": {
2222
"ajv": "^6.10.2",
23-
"brace": "^0.11.1",
24-
"ngx-ace-wrapper": "^8.0.0",
23+
"@ctrl/ngx-codemirror": "^4.0.0",
24+
"codemirror": "^5.57.0",
2525
"ngx-markdown": "^8.1.0",
2626
"openapi3-ts": "^1.4.0",
2727
"swagger-client": "^3.10.12"

projects/openapi-viewer/src/lib/openapi-viewer.module.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ import { PortalModule } from '@angular/cdk/portal';
2828
import { OverlayModule } from '@angular/cdk/overlay';
2929
import { TooltipComponent } from './shared-components/tooltip/tooltip.component';
3030
import { TooltipDirective } from './shared-components/tooltip/tooltip.directive';
31-
import { AceModule } from 'ngx-ace-wrapper';
3231
import { CodeInputComponent } from './shared-components/code-input/code-input.component';
3332
import { IndexNavEndpointsComponent } from './index-nav/index-nav-endpoints/index-nav-endpoints.component';
3433
import { OverviewViewEndpointsComponent } from './overview-view/overview-view-endpoints/overview-view-endpoints.component';
3534
import { ModelsViewComponent } from './models-view/models-view.component';
3635
import { JsonSchemaComponent } from './shared-components/json-schema/json-schema.component';
36+
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
3737

3838
@NgModule({
3939
declarations: [
@@ -74,7 +74,7 @@ import { JsonSchemaComponent } from './shared-components/json-schema/json-schema
7474
MarkdownModule.forRoot(),
7575
PortalModule,
7676
OverlayModule,
77-
AceModule
77+
CodemirrorModule
7878
],
7979
exports: [OpenapiViewerComponent, OperationComponent]
8080
})

projects/openapi-viewer/src/lib/openapi-viewer.scss

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
@import '~@angular/cdk/overlay-prebuilt.css';
2+
@import '~codemirror/lib/codemirror.css';
3+
@import '~codemirror/theme/eclipse.css';
24

35
$method-colors: (
46
'get': #2681ac,
@@ -144,7 +146,7 @@ $line-color: #ccc;
144146
color: #fb9200;
145147
}
146148

147-
.ace_editor {
149+
.CodeMirror {
148150
border: 1px solid $line-color;
149151
}
150152
}

projects/openapi-viewer/src/lib/parameter/parameter.component.spec.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
2-
import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
2+
import { FormGroup, FormsModule, NgModel, ReactiveFormsModule } from '@angular/forms';
33
import { ParameterComponent } from './parameter.component';
44
import { MultiItemsInputComponent } from '../shared-components/multi-items-input/multi-items-input.component';
55
import { DebugElement } from '@angular/core';
66
import { By } from '@angular/platform-browser';
77
import { ParameterObject } from 'openapi3-ts';
88
import { MarkdownModule } from 'ngx-markdown';
99
import { CodeInputComponent } from '../shared-components/code-input/code-input.component';
10-
import { AceComponent, AceModule } from 'ngx-ace-wrapper';
1110
import { JsonSchemaComponent } from '../shared-components/json-schema/json-schema.component';
11+
import { CodemirrorComponent, CodemirrorModule } from '@ctrl/ngx-codemirror';
1212

1313
describe('ParameterComponent', () => {
1414
let fixture: ComponentFixture<ParameterComponent>;
@@ -17,7 +17,7 @@ describe('ParameterComponent', () => {
1717

1818
beforeEach(async(() => {
1919
TestBed.configureTestingModule({
20-
imports: [FormsModule, ReactiveFormsModule, MarkdownModule.forRoot(), AceModule],
20+
imports: [FormsModule, ReactiveFormsModule, MarkdownModule.forRoot(), CodemirrorModule],
2121
declarations: [ParameterComponent, MultiItemsInputComponent, CodeInputComponent, JsonSchemaComponent]
2222
}).compileComponents();
2323
fixture = TestBed.createComponent(ParameterComponent);
@@ -115,9 +115,9 @@ describe('ParameterComponent', () => {
115115
expect(component.formGroup.get('body')).toBeDefined();
116116
expect(component.formGroup.get('body').value).toEqual(JSON.stringify({ name: '', tag: '' }, null, 2));
117117

118-
const input = element.query(By.directive(AceComponent));
119-
const ace: AceComponent = input.componentInstance;
120-
input.componentInstance.valueChange.next('{}');
118+
const input = element.query(By.directive(CodemirrorComponent));
119+
const dir = input.injector.get(NgModel);
120+
dir.control.setValue('{}');
121121
expect(component.formGroup.get('body').value).toEqual('{}');
122122
});
123123
});

projects/openapi-viewer/src/lib/request-body-input/request-body-input.component.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
66
import { MultiItemsInputComponent } from '../shared-components/multi-items-input/multi-items-input.component';
77
import { MarkdownModule } from 'ngx-markdown';
88
import { CodeInputComponent } from '../shared-components/code-input/code-input.component';
9-
import { AceModule } from 'ngx-ace-wrapper';
109
import { JsonSchemaComponent } from '../shared-components/json-schema/json-schema.component';
10+
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
1111

1212
describe('RequestBodyInputComponent', () => {
1313
let component: RequestBodyInputComponent;
@@ -16,7 +16,7 @@ describe('RequestBodyInputComponent', () => {
1616

1717
beforeEach(async(() => {
1818
TestBed.configureTestingModule({
19-
imports: [FormsModule, ReactiveFormsModule, MarkdownModule, AceModule],
19+
imports: [FormsModule, ReactiveFormsModule, MarkdownModule, CodemirrorModule],
2020
declarations: [RequestBodyInputComponent, ParameterComponent, MultiItemsInputComponent, CodeInputComponent, JsonSchemaComponent]
2121
}).compileComponents();
2222
}));
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<div>
2-
<ace [config]="config" [mode]="mode" [value]="value" (valueChange)="updateValue($event)"></ace>
2+
<ngx-codemirror [ngModel]="value" (ngModelChange)="updateValue($event)" [options]="config"></ngx-codemirror>
33
</div>
44
<div *ngFor="let err of errors" class="oav-error">{{ err }}</div>

projects/openapi-viewer/src/lib/shared-components/code-input/code-input.component.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
22

33
import { CodeInputComponent } from './code-input.component';
4-
import { AceModule } from 'ngx-ace-wrapper';
4+
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
55

66
describe('CodeInputComponent', () => {
77
let component: CodeInputComponent;
88
let fixture: ComponentFixture<CodeInputComponent>;
99

1010
beforeEach(async(() => {
1111
TestBed.configureTestingModule({
12-
imports: [AceModule],
12+
imports: [CodemirrorModule],
1313
declarations: [CodeInputComponent]
1414
}).compileComponents();
1515
}));

projects/openapi-viewer/src/lib/shared-components/code-input/code-input.component.ts

+7-9
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ import {
1010
SimpleChanges
1111
} from '@angular/core';
1212
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
13-
import { AceConfigInterface } from 'ngx-ace-wrapper';
14-
import 'brace';
15-
import 'brace/mode/json';
16-
import 'brace/mode/xml';
13+
import 'codemirror/mode/javascript/javascript';
1714
import { ValidateFunction } from 'ajv';
1815
import { getValidationFunction } from '../../util/validation.util';
1916
import { Subject } from 'rxjs';
@@ -33,7 +30,7 @@ import { debounceTime } from 'rxjs/operators';
3330
]
3431
})
3532
export class CodeInputComponent implements OnChanges, ControlValueAccessor, OnInit, OnDestroy {
36-
config: AceConfigInterface = {};
33+
config: Record<string, any> = {};
3734

3835
disabled = false;
3936

@@ -84,10 +81,11 @@ export class CodeInputComponent implements OnChanges, ControlValueAccessor, OnIn
8481

8582
updateConfig() {
8683
this.config = {
87-
minLines: this.minLines,
88-
maxLines: this.maxLines,
89-
wrap: true,
90-
tabSize: 2
84+
lineNumbers: true,
85+
theme: 'eclipse',
86+
mode: 'javascript',
87+
tabSize: 2,
88+
lineWrapping: true
9189
};
9290
if (this.readonly || this.readonly === '') {
9391
this.config.readOnly = true;

0 commit comments

Comments
 (0)