Re-organize the imports and types for codemirror This is just a bit of refactoring to sync the upstream plugin code with Google's internal version, which required some adaptations for how the BUILD and the imports are handled. Release-Notes: skip Google-Bug-Id: b/234805062 Change-Id: If6a141cf0132c1d0560cfc6b19a07fc7de0c9bbd
diff --git a/web/codemirror-imports.ts b/web/codemirror-imports.ts new file mode 100644 index 0000000..6db3037 --- /dev/null +++ b/web/codemirror-imports.ts
@@ -0,0 +1,44 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +import 'codemirror'; + +import {EditorConfiguration} from 'codemirror'; + +declare global { + interface HTMLElementTagNameMap { + 'codemirror-element': CodeMirrorElement; + } +} + +/** + * The type `codemirror.EditorConfiguration` is just outdated, so we have to add + * some props manually here. + */ +export interface CodeMirrorConfig extends EditorConfiguration { + autoCloseBrackets?: boolean; + matchBrackets?: boolean; + showTabs?: boolean; + showTrailingSpace?: boolean; + lineSeparator?: string; + rulers?: false | ReadonlyArray<number | Ruler> | undefined; +} + +/** + * <codemirror-element> is defined in a separate javascript bundle, so let's + * define its interface here. + */ +interface CodeMirrorElement extends HTMLElement { + lineNum?: number; + params?: CodeMirrorConfig; +} + +interface Ruler { + column: number; + className?: string | undefined; + color?: string | undefined; + lineStyle?: string | undefined; + width?: string | undefined; +}
diff --git a/web/element/codemirror-element.ts b/web/element/codemirror-element.ts index 34068fa..3cdd668 100644 --- a/web/element/codemirror-element.ts +++ b/web/element/codemirror-element.ts
@@ -4,9 +4,11 @@ * SPDX-License-Identifier: Apache-2.0 */ import './codemirror-imports'; + import {EditorConfiguration} from 'codemirror'; import {css, html, LitElement} from 'lit'; import {customElement, property, query} from 'lit/decorators.js'; + import {codemirrorStyles} from './codemirror-css'; import {dialogStyles} from './dialog-css'; import {foldgutterStyles} from './foldgutter-css';
diff --git a/web/gr-editor.ts b/web/gr-editor.ts index fb59a66..04a0425 100644 --- a/web/gr-editor.ts +++ b/web/gr-editor.ts
@@ -3,14 +3,13 @@ * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ -import 'codemirror'; -import 'codemirror/addon/display/rulers'; +import './codemirror-imports'; import '@gerritcodereview/typescript-api/gerrit'; -import {EditorConfiguration} from 'codemirror'; import {PluginApi} from '@gerritcodereview/typescript-api/plugin'; import {html, LitElement} from 'lit'; import {customElement, property, query} from 'lit/decorators.js'; +import {CodeMirrorConfig} from './codemirror-imports'; import {setScriptSrc} from './safe-script'; declare global { @@ -39,18 +38,6 @@ } /** - * The type `codemirror.EditorConfiguration` is just outdated, so we have to add - * some props manually here. - */ -interface CodeMirrorConfig extends EditorConfiguration { - autoCloseBrackets?: boolean; - matchBrackets?: boolean; - showTabs?: boolean; - showTrailingSpace?: boolean; - lineSeparator?: string; -} - -/** * This component just loads the CodeMirror js bundle lazily and converts the * Gerrit preferences into CodeMirror params. */