@bhsd/codemirror-mediawiki 3.5.2 → 3.6.0

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/dist/matchTag.js CHANGED
@@ -2,6 +2,7 @@ import { Decoration, EditorView } from '@codemirror/view';
2
2
  import { StateField } from '@codemirror/state';
3
3
  import { ensureSyntaxTree } from '@codemirror/language';
4
4
  import { voidHtmlTags, selfClosingTags } from './config';
5
+ import { matchingCls, nonmatchingCls } from './constants';
5
6
  class Tag {
6
7
  get closing() {
7
8
  return isClosing(this.first, this.type, this.state, true);
@@ -109,7 +110,7 @@ export const matchTag = (state, pos) => {
109
110
  const end = searchTag(state, start);
110
111
  return end ? { matched: true, start, end } : { matched: false, start };
111
112
  };
112
- const matchingMark = /* @__PURE__ */ Decoration.mark({ class: 'cm-matchingTag' }), nonmatchingMark = /* @__PURE__ */ Decoration.mark({ class: 'cm-nonmatchingTag' });
113
+ const matchingMark = /* @__PURE__ */ Decoration.mark({ class: matchingCls }), nonmatchingMark = /* @__PURE__ */ Decoration.mark({ class: nonmatchingCls });
113
114
  export default /* @__PURE__ */ StateField.define({
114
115
  create() {
115
116
  return Decoration.none;
@@ -8,13 +8,6 @@ import { MediaWiki } from './token';
8
8
  import type { StreamParser, TagStyle } from '@codemirror/language';
9
9
  import type { CompletionSource, Completion } from '@codemirror/autocomplete';
10
10
  import type { MwConfig } from './token';
11
- export declare const isWMF: boolean;
12
- /**
13
- * 判断节点是否包含指定类型
14
- * @param types 节点类型
15
- * @param names 指定类型
16
- */
17
- export declare const hasTag: (types: Set<string>, names: string | string[]) => boolean;
18
11
  export declare class FullMediaWiki extends MediaWiki {
19
12
  #private;
20
13
  readonly nsRegex: RegExp;
package/dist/mediawiki.js CHANGED
@@ -5,14 +5,13 @@
5
5
  */
6
6
  import { HighlightStyle, LanguageSupport, StreamLanguage, syntaxHighlighting, syntaxTree, } from '@codemirror/language';
7
7
  import { insertCompletionText, pickedCompletion } from '@codemirror/autocomplete';
8
- import { wmf } from '@bhsd/common';
9
8
  import { isUnderscore } from '@bhsd/cm-util';
10
9
  import { commonHtmlAttrs, htmlAttrs, extAttrs } from 'wikiparser-node/dist/util/sharable.mjs';
11
- import { MediaWiki } from './token';
12
10
  import { htmlTags, tokens } from './config';
13
- import { braceStackUpdate } from './fold';
11
+ import { isolateSelector, ltrSelector, isWMF } from './constants';
12
+ import { MediaWiki } from './token';
13
+ import { braceStackUpdate, hasTag } from './util';
14
14
  import { EditorView } from '@codemirror/view';
15
- export const isWMF = /* @__PURE__ */ (() => typeof location === 'object' && new RegExp(String.raw `\.(?:${wmf})\.org$`, 'u').test(location.hostname))();
16
15
  /**
17
16
  * 检查首字母大小写并插入正确的自动填充内容
18
17
  * @param view
@@ -31,12 +30,6 @@ const apply = (view, completion, from, to) => {
31
30
  annotations: pickedCompletion.of(completion),
32
31
  });
33
32
  };
34
- /**
35
- * 判断节点是否包含指定类型
36
- * @param types 节点类型
37
- * @param names 指定类型
38
- */
39
- export const hasTag = (types, names) => (Array.isArray(names) ? names : [names]).some(name => types.has(name in tokens ? tokens[name] : name));
40
33
  export class FullMediaWiki extends MediaWiki {
41
34
  constructor(config) {
42
35
  super(config);
@@ -137,7 +130,7 @@ export class FullMediaWiki extends MediaWiki {
137
130
  const underscore = str.slice(offset).includes('_');
138
131
  return {
139
132
  offset,
140
- options: (await linkSuggest(search, ns, subpage)).map(([label]) => ({
133
+ options: (await linkSuggest(search, subpage, ns)).map(([label]) => ({
141
134
  type: 'text',
142
135
  label: underscore ? label.replace(/ /gu, '_') : label,
143
136
  })),
@@ -150,12 +143,11 @@ export class FullMediaWiki extends MediaWiki {
150
143
  * @param equal 是否有等号
151
144
  */
152
145
  async #paramSuggest(search, page, equal) {
153
- const { config: { paramSuggest } } = this;
154
- return page && typeof paramSuggest === 'function' && !/[|{}<>[\]]/u.test(page)
146
+ const { config: { paramSuggest } } = this, result = await paramSuggest?.(page);
147
+ return result?.length
155
148
  ? {
156
149
  offset: /^\s*/u.exec(search)[0].length,
157
- options: (await paramSuggest(page))
158
- .map(([key, detail]) => ({ type: 'variable', label: key + equal, detail })),
150
+ options: result.map(([key, detail]) => ({ type: 'variable', label: key + equal, detail })),
159
151
  }
160
152
  : undefined;
161
153
  }
@@ -496,10 +488,10 @@ const theme = /* @__PURE__ */ EditorView.theme({
496
488
  [getSelector(['pre', 'nowiki'], 'tag-')]: {
497
489
  backgroundColor: 'rgb(0,0,0,.04)',
498
490
  },
499
- '.cm-bidi-isolate, &[dir="rtl"] .cm-mw-template-name': {
491
+ [`${isolateSelector}, &[dir="rtl"] .cm-mw-template-name`]: {
500
492
  unicodeBidi: 'isolate',
501
493
  },
502
- '.cm-bidi-ltr': {
494
+ [ltrSelector]: {
503
495
  direction: 'ltr',
504
496
  display: 'inline-block',
505
497
  },