UNPKG

@ks89/ngx-codemirror6

Version:
118 lines 13.1 kB
/** * The MIT License (MIT) * * Copyright (c) 2023 Stefano Cappa (Ks89) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ import { Component, Input, ViewChild, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { EditorView, lineNumbers } from '@codemirror/view'; import { EditorState } from '@codemirror/state'; import { html } from '@codemirror/lang-html'; import { css } from '@codemirror/lang-css'; import { javascript } from '@codemirror/lang-javascript'; import { sass } from '@codemirror/lang-sass'; import { basicSetup } from 'codemirror'; import * as i0 from "@angular/core"; /** * CodeMirror component */ export class CodemirrorComponent { constructor() { this.content = ''; this.appendExtensions = []; this.language = ''; } ngAfterViewInit() { let lang; switch (this.language) { case 'html': lang = html(); break; case 'javascript': lang = javascript({ typescript: false, jsx: false }); break; case 'typescript': lang = javascript({ typescript: true, jsx: false }); break; case 'jsx': lang = javascript({ typescript: false, jsx: true }); break; case 'css': lang = css(); break; case 'scss': lang = sass(); break; case 'sass': lang = sass({ indented: true }); break; default: throw new Error('Internal ngx-codemirror6 error - unrecognized language'); } const extensions = [lineNumbers(), lang, basicSetup, EditorState.readOnly.of(true), ...this.appendExtensions]; const config = { doc: this.content, extensions: extensions }; this.codemirrorInit(config); } codemirrorInit(config) { if (!this.host) { throw new Error('Internal ngx-codemirror6 error - host must be defined'); } new EditorView({ parent: this.host.nativeElement, state: EditorState.create(config) }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: CodemirrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: CodemirrorComponent, selector: "ks-codemirror", inputs: { content: "content", appendExtensions: "appendExtensions", language: "language" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CodemirrorComponent), multi: true } ], viewQueries: [{ propertyName: "host", first: true, predicate: ["host"], descendants: true }], ngImport: i0, template: `<div #host></div>`, isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: CodemirrorComponent, decorators: [{ type: Component, args: [{ selector: 'ks-codemirror', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CodemirrorComponent), multi: true } ], template: `<div #host></div>` }] }], propDecorators: { content: [{ type: Input }], appendExtensions: [{ type: Input }], language: [{ type: Input }], host: [{ type: ViewChild, args: ['host'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvZGVtaXJyb3I2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvbmd4LWNvZGVtaXJyb3I2L3NyYy9saWIvbmd4LWNvZGVtaXJyb3I2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxtQkFBbUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFeEM7O0dBRUc7QUFZSCxNQUFNLE9BQU8sbUJBQW1CO0lBWGhDO1FBWVcsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixxQkFBZ0IsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLGFBQVEsR0FBVyxFQUFFLENBQUM7S0FpRGhDO0lBN0NDLGVBQWU7UUFDYixJQUFJLElBQXFCLENBQUM7UUFDMUIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsS0FBSyxNQUFNO2dCQUNULElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1IsS0FBSyxLQUFLO2dCQUNSLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNILE1BQU0sTUFBTSxHQUFzQjtZQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDakIsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUF5QjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLFVBQVUsQ0FBQztZQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDL0IsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBbkRVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLG9JQVRuQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRix3SEFDUyxtQkFBbUI7OzJGQUVsQixtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7OEJBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVhLElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIE1JVCBMaWNlbnNlIChNSVQpXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFN0ZWZhbm8gQ2FwcGEgKEtzODkpXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04gSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRWRpdG9yVmlldywgbGluZU51bWJlcnMgfSBmcm9tICdAY29kZW1pcnJvci92aWV3JztcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBFZGl0b3JTdGF0ZUNvbmZpZywgRXh0ZW5zaW9uIH0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTdXBwb3J0IH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgaHRtbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctaHRtbCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWNzcyc7XG5pbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1qYXZhc2NyaXB0JztcbmltcG9ydCB7IHNhc3MgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLXNhc3MnO1xuaW1wb3J0IHsgYmFzaWNTZXR1cCB9IGZyb20gJ2NvZGVtaXJyb3InO1xuXG4vKipcbiAqIENvZGVNaXJyb3IgY29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tzLWNvZGVtaXJyb3InLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvZGVtaXJyb3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgPGRpdiAjaG9zdD48L2Rpdj5gXG59KVxuZXhwb3J0IGNsYXNzIENvZGVtaXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGFwcGVuZEV4dGVuc2lvbnM6IEV4dGVuc2lvbltdID0gW107XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnJztcblxuICBAVmlld0NoaWxkKCdob3N0JykgaG9zdDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgbGV0IGxhbmc6IExhbmd1YWdlU3VwcG9ydDtcbiAgICBzd2l0Y2ggKHRoaXMubGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBsYW5nID0gaHRtbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2phdmFzY3JpcHQnOlxuICAgICAgICBsYW5nID0gamF2YXNjcmlwdCh7IHR5cGVzY3JpcHQ6IGZhbHNlLCBqc3g6IGZhbHNlIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3R5cGVzY3JpcHQnOlxuICAgICAgICBsYW5nID0gamF2YXNjcmlwdCh7IHR5cGVzY3JpcHQ6IHRydWUsIGpzeDogZmFsc2UgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnanN4JzpcbiAgICAgICAgbGFuZyA9IGphdmFzY3JpcHQoeyB0eXBlc2NyaXB0OiBmYWxzZSwganN4OiB0cnVlIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nzcyc6XG4gICAgICAgIGxhbmcgPSBjc3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzY3NzJzpcbiAgICAgICAgbGFuZyA9IHNhc3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzYXNzJzpcbiAgICAgICAgbGFuZyA9IHNhc3MoeyBpbmRlbnRlZDogdHJ1ZSB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIG5neC1jb2RlbWlycm9yNiBlcnJvciAtIHVucmVjb2duaXplZCBsYW5ndWFnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdID0gW2xpbmVOdW1iZXJzKCksIGxhbmcsIGJhc2ljU2V0dXAsIEVkaXRvclN0YXRlLnJlYWRPbmx5Lm9mKHRydWUpLCAuLi50aGlzLmFwcGVuZEV4dGVuc2lvbnNdO1xuICAgIGNvbnN0IGNvbmZpZzogRWRpdG9yU3RhdGVDb25maWcgPSB7XG4gICAgICBkb2M6IHRoaXMuY29udGVudCxcbiAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnNcbiAgICB9O1xuICAgIHRoaXMuY29kZW1pcnJvckluaXQoY29uZmlnKTtcbiAgfVxuXG4gIGNvZGVtaXJyb3JJbml0KGNvbmZpZzogRWRpdG9yU3RhdGVDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaG9zdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBuZ3gtY29kZW1pcnJvcjYgZXJyb3IgLSBob3N0IG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBuZXcgRWRpdG9yVmlldyh7XG4gICAgICBwYXJlbnQ6IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3RhdGU6IEVkaXRvclN0YXRlLmNyZWF0ZShjb25maWcpXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==