@gravity-ui/markdown-editor 15.22.2 → 15.24.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/build/cjs/bundle/ToolbarView.js +2 -1
- package/build/cjs/bundle/ToolbarView.js.map +1 -1
- package/build/cjs/bundle/settings/index.d.ts +2 -1
- package/build/cjs/bundle/settings/index.js +6 -2
- package/build/cjs/bundle/settings/index.js.map +1 -1
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/cjs/common/layout.d.ts +3 -0
- package/build/cjs/common/layout.js +7 -0
- package/build/cjs/common/layout.js.map +1 -0
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +2 -2
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Table/commands.d.ts +2 -0
- package/build/cjs/extensions/markdown/Table/commands.js +73 -0
- package/build/cjs/extensions/markdown/Table/commands.js.map +1 -0
- package/build/cjs/extensions/markdown/Table/helpers.d.ts +7 -2
- package/build/cjs/extensions/markdown/Table/helpers.js +22 -9
- package/build/cjs/extensions/markdown/Table/helpers.js.map +1 -1
- package/build/cjs/extensions/markdown/Table/index.js +3 -0
- package/build/cjs/extensions/markdown/Table/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +35 -0
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +6 -0
- package/build/cjs/extensions/yfm/ImgSize/utils.js +25 -0
- package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js +6 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js +2 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +6 -6
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +6 -6
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/const.d.ts +9 -1
- package/build/cjs/extensions/yfm/YfmCut/const.js +13 -6
- package/build/cjs/extensions/yfm/YfmCut/const.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/index.css +0 -3
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.js +6 -7
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +8 -9
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.js +61 -84
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.js.map +1 -1
- package/build/cjs/i18n/search/en.json +5 -2
- package/build/cjs/i18n/search/index.d.ts +4 -1
- package/build/cjs/i18n/search/ru.json +5 -2
- package/build/cjs/markup/codemirror/search-plugin/plugin.d.ts +2 -0
- package/build/cjs/markup/codemirror/search-plugin/plugin.js +13 -0
- package/build/cjs/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +3 -0
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js +9 -0
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +1 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +1 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.d.ts +2 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js +12 -2
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js.map +1 -1
- package/build/cjs/react-utils/index.d.ts +1 -0
- package/build/cjs/react-utils/index.js +1 -0
- package/build/cjs/react-utils/index.js.map +1 -1
- package/build/cjs/react-utils/useSticky.js +13 -2
- package/build/cjs/react-utils/useSticky.js.map +1 -1
- package/build/cjs/react-utils/useTargetZIndex.d.ts +1 -0
- package/build/cjs/react-utils/useTargetZIndex.js +50 -0
- package/build/cjs/react-utils/useTargetZIndex.js.map +1 -0
- package/build/cjs/toolbar/ToolbarListButton.js +4 -1
- package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
- package/build/cjs/utils/get-target-z-index.d.ts +1 -0
- package/build/cjs/utils/get-target-z-index.js +17 -0
- package/build/cjs/utils/get-target-z-index.js.map +1 -0
- package/build/cjs/utils/inputrules.d.ts +1 -0
- package/build/cjs/utils/inputrules.js +8 -3
- package/build/cjs/utils/inputrules.js.map +1 -1
- package/build/cjs/utils/rulebuilders.js +2 -0
- package/build/cjs/utils/rulebuilders.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/ToolbarView.js +2 -1
- package/build/esm/bundle/ToolbarView.js.map +1 -1
- package/build/esm/bundle/settings/index.d.ts +2 -1
- package/build/esm/bundle/settings/index.js +6 -2
- package/build/esm/bundle/settings/index.js.map +1 -1
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/esm/common/layout.d.ts +3 -0
- package/build/esm/common/layout.js +4 -0
- package/build/esm/common/layout.js.map +1 -0
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +1 -1
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Table/commands.d.ts +2 -0
- package/build/esm/extensions/markdown/Table/commands.js +69 -0
- package/build/esm/extensions/markdown/Table/commands.js.map +1 -0
- package/build/esm/extensions/markdown/Table/helpers.d.ts +7 -2
- package/build/esm/extensions/markdown/Table/helpers.js +9 -3
- package/build/esm/extensions/markdown/Table/helpers.js.map +1 -1
- package/build/esm/extensions/markdown/Table/index.js +3 -0
- package/build/esm/extensions/markdown/Table/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +36 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/utils.d.ts +6 -0
- package/build/esm/extensions/yfm/ImgSize/utils.js +22 -0
- package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js +5 -0
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +7 -7
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +5 -5
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/const.d.ts +9 -1
- package/build/esm/extensions/yfm/YfmCut/const.js +8 -1
- package/build/esm/extensions/yfm/YfmCut/const.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/index.css +0 -3
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/active.js +4 -5
- package/build/esm/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +6 -7
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.js +60 -83
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.js.map +1 -1
- package/build/esm/i18n/search/en.json +5 -2
- package/build/esm/i18n/search/index.d.ts +4 -1
- package/build/esm/i18n/search/ru.json +5 -2
- package/build/esm/markup/codemirror/search-plugin/plugin.d.ts +2 -0
- package/build/esm/markup/codemirror/search-plugin/plugin.js +14 -1
- package/build/esm/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +3 -0
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js +4 -0
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +1 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +1 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.d.ts +2 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js +12 -2
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js.map +1 -1
- package/build/esm/react-utils/index.d.ts +1 -0
- package/build/esm/react-utils/index.js +1 -0
- package/build/esm/react-utils/index.js.map +1 -1
- package/build/esm/react-utils/useSticky.js +13 -2
- package/build/esm/react-utils/useSticky.js.map +1 -1
- package/build/esm/react-utils/useTargetZIndex.d.ts +1 -0
- package/build/esm/react-utils/useTargetZIndex.js +47 -0
- package/build/esm/react-utils/useTargetZIndex.js.map +1 -0
- package/build/esm/toolbar/ToolbarListButton.js +4 -1
- package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
- package/build/esm/utils/get-target-z-index.d.ts +1 -0
- package/build/esm/utils/get-target-z-index.js +14 -0
- package/build/esm/utils/get-target-z-index.js.map +1 -0
- package/build/esm/utils/inputrules.d.ts +1 -0
- package/build/esm/utils/inputrules.js +5 -1
- package/build/esm/utils/inputrules.js.map +1 -1
- package/build/esm/utils/rulebuilders.js +3 -1
- package/build/esm/utils/rulebuilders.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/styles.css +7 -8
- package/package.json +2 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.YfmCutTitleNodeView = void 0;
|
|
4
|
+
const const_1 = require("../const.js");
|
|
4
5
|
require("./yfm-cut-title.css");
|
|
5
6
|
class YfmCutTitleNodeView {
|
|
6
7
|
dom;
|
|
@@ -9,15 +10,11 @@ class YfmCutTitleNodeView {
|
|
|
9
10
|
constructor(node) {
|
|
10
11
|
this.node = node;
|
|
11
12
|
this.dom = document.createElement('div');
|
|
12
|
-
this.dom.classList.add(
|
|
13
|
-
this.dom.
|
|
14
|
-
this.contentDOM.
|
|
15
|
-
this.contentDOM.
|
|
16
|
-
|
|
17
|
-
// you can open/close yfm-cut by clicking on the arrow icon
|
|
18
|
-
e.stopPropagation();
|
|
19
|
-
e.preventDefault();
|
|
20
|
-
});
|
|
13
|
+
this.dom.classList.add(const_1.YfmCutClassName.Title);
|
|
14
|
+
this.dom.addEventListener('click', this._onTitleClick);
|
|
15
|
+
this.contentDOM = this.dom.appendChild(document.createElement('div'));
|
|
16
|
+
this.contentDOM.classList.add(const_1.YfmCutClassName.TitleInner);
|
|
17
|
+
this.contentDOM.addEventListener('click', this._onTitleInnerClick);
|
|
21
18
|
}
|
|
22
19
|
update(node) {
|
|
23
20
|
if (this.node.type !== node.type)
|
|
@@ -25,6 +22,26 @@ class YfmCutTitleNodeView {
|
|
|
25
22
|
this.node = node;
|
|
26
23
|
return true;
|
|
27
24
|
}
|
|
25
|
+
destroy() {
|
|
26
|
+
this.dom.removeEventListener('click', this._onTitleClick);
|
|
27
|
+
this.contentDOM.removeEventListener('click', this._onTitleInnerClick);
|
|
28
|
+
}
|
|
29
|
+
_onTitleClick = (e) => {
|
|
30
|
+
const { currentTarget } = e;
|
|
31
|
+
if (currentTarget instanceof HTMLElement) {
|
|
32
|
+
const parent = currentTarget.parentElement;
|
|
33
|
+
if (parent?.classList.contains(const_1.YfmCutClassName.Cut)) {
|
|
34
|
+
// TODO: toggle open classname via prosemirror decoration
|
|
35
|
+
parent.classList.toggle(const_1.YfmCutClassName.Open);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
_onTitleInnerClick = (e) => {
|
|
40
|
+
// ignore clicking on the title content
|
|
41
|
+
// you can open/close yfm-cut by clicking on the arrow icon
|
|
42
|
+
e.stopPropagation();
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
};
|
|
28
45
|
}
|
|
29
46
|
exports.YfmCutTitleNodeView = YfmCutTitleNodeView;
|
|
30
47
|
//# sourceMappingURL=yfm-cut-title.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yfm-cut-title.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/nodeviews/yfm-cut-title.ts"],"names":[],"mappings":";;;AAGA,+BAA8B;AAE9B,MAAa,mBAAmB;IACnB,GAAG,CAAc;IACjB,UAAU,CAAc;IAEzB,IAAI,CAAO;IAEnB,YAAY,IAAU;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"yfm-cut-title.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/nodeviews/yfm-cut-title.ts"],"names":[],"mappings":";;;AAGA,uCAAyC;AAEzC,+BAA8B;AAE9B,MAAa,mBAAmB;IACnB,GAAG,CAAc;IACjB,UAAU,CAAc;IAEzB,IAAI,CAAO;IAEnB,YAAY,IAAU;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAe,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAe,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,IAAU;QACb,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAEO,aAAa,GAAG,CAAC,CAAa,EAAE,EAAE;QACtC,MAAM,EAAC,aAAa,EAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,aAAa,YAAY,WAAW,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC;YAC3C,IAAI,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,uBAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,yDAAyD;gBACzD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAe,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;QAC3C,uCAAuC;QACvC,2DAA2D;QAC3D,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC,CAAC;CACL;AA9CD,kDA8CC","sourcesContent":["import type {Node} from '#pm/model';\nimport type {NodeView} from '#pm/view';\n\nimport {YfmCutClassName} from '../const';\n\nimport './yfm-cut-title.scss';\n\nexport class YfmCutTitleNodeView implements NodeView {\n readonly dom: HTMLElement;\n readonly contentDOM: HTMLElement;\n\n private node: Node;\n\n constructor(node: Node) {\n this.node = node;\n\n this.dom = document.createElement('div');\n this.dom.classList.add(YfmCutClassName.Title);\n this.dom.addEventListener('click', this._onTitleClick);\n\n this.contentDOM = this.dom.appendChild(document.createElement('div'));\n this.contentDOM.classList.add(YfmCutClassName.TitleInner);\n this.contentDOM.addEventListener('click', this._onTitleInnerClick);\n }\n\n update(node: Node): boolean {\n if (this.node.type !== node.type) return false;\n this.node = node;\n return true;\n }\n\n destroy() {\n this.dom.removeEventListener('click', this._onTitleClick);\n this.contentDOM.removeEventListener('click', this._onTitleInnerClick);\n }\n\n private _onTitleClick = (e: MouseEvent) => {\n const {currentTarget} = e;\n if (currentTarget instanceof HTMLElement) {\n const parent = currentTarget.parentElement;\n if (parent?.classList.contains(YfmCutClassName.Cut)) {\n // TODO: toggle open classname via prosemirror decoration\n parent.classList.toggle(YfmCutClassName.Open);\n }\n }\n };\n\n private _onTitleInnerClick = (e: MouseEvent) => {\n // ignore clicking on the title content\n // you can open/close yfm-cut by clicking on the arrow icon\n e.stopPropagation();\n e.preventDefault();\n };\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Plugin } from
|
|
1
|
+
import { Plugin } from "../../../../pm/state.js";
|
|
2
2
|
export declare const cutActivePlugin: () => Plugin<any>;
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cutActivePlugin = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const state_1 = require("../../../../pm/state.js");
|
|
5
|
+
const view_1 = require("../../../../pm/view.js");
|
|
6
6
|
const selection_1 = require("../../../../utils/selection.js");
|
|
7
7
|
const const_1 = require("../const.js");
|
|
8
|
-
const YFM_CUT_ACTIVE_CLASSNAME = 'yfm-cut-active';
|
|
9
8
|
const cutActivePlugin = () => {
|
|
10
|
-
return new
|
|
9
|
+
return new state_1.Plugin({
|
|
11
10
|
props: {
|
|
12
11
|
decorations(state) {
|
|
13
12
|
const decos = [];
|
|
14
13
|
const sel = state.selection;
|
|
15
14
|
const yfmCutType = (0, const_1.cutType)(state.schema);
|
|
16
15
|
const createDeco = ({ pos, node }) => {
|
|
17
|
-
decos.push(
|
|
18
|
-
class:
|
|
16
|
+
decos.push(view_1.Decoration.node(pos, pos + node.nodeSize, {
|
|
17
|
+
class: const_1.YfmCutClassName.Active,
|
|
19
18
|
}));
|
|
20
19
|
};
|
|
21
20
|
if ((0, selection_1.isNodeSelection)(sel)) {
|
|
@@ -40,7 +39,7 @@ const cutActivePlugin = () => {
|
|
|
40
39
|
// some other selection
|
|
41
40
|
findParentNodesOfType(yfmCutType, sel.$from).forEach(createDeco);
|
|
42
41
|
}
|
|
43
|
-
return decos.length ?
|
|
42
|
+
return decos.length ? view_1.DecorationSet.create(state.doc, decos) : view_1.DecorationSet.empty;
|
|
44
43
|
},
|
|
45
44
|
},
|
|
46
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/plugins/active.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"active.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/plugins/active.ts"],"names":[],"mappings":"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","sourcesContent":["import type {NodeType, ResolvedPos} from '#pm/model';\nimport {Plugin} from '#pm/state';\nimport type {NodeWithPos} from '#pm/utils';\nimport {Decoration, DecorationSet} from '#pm/view';\nimport {isNodeSelection, isTextSelection} from 'src/utils/selection';\n\nimport {YfmCutClassName, cutType} from '../const';\n\nexport const cutActivePlugin = () => {\n return new Plugin({\n props: {\n decorations(state) {\n const decos: Decoration[] = [];\n const sel = state.selection;\n const yfmCutType = cutType(state.schema);\n\n const createDeco = ({pos, node}: NodeWithPos) => {\n decos.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: YfmCutClassName.Active,\n }),\n );\n };\n\n if (isNodeSelection(sel)) {\n if (sel.node.type === yfmCutType) createDeco({pos: sel.from, node: sel.node});\n findParentNodesOfType(yfmCutType, sel.$from).forEach(createDeco);\n } else if (isTextSelection(sel)) {\n findParentNodesOfType(yfmCutType, sel.$from).forEach(createDeco);\n if (!sel.$from.sameParent(sel.$to)) {\n findParentNodesOfType(yfmCutType, sel.$to).forEach(createDeco);\n state.doc.nodesBetween(sel.from, sel.to, (node, pos) => {\n if (node.type === yfmCutType) createDeco({pos, node});\n if (node.isTextblock) return false;\n return true;\n });\n }\n } else {\n // some other selection\n findParentNodesOfType(yfmCutType, sel.$from).forEach(createDeco);\n }\n\n return decos.length ? DecorationSet.create(state.doc, decos) : DecorationSet.empty;\n },\n },\n });\n};\n\nfunction findParentNodesOfType(\n type: NodeType,\n $pos: ResolvedPos,\n): (NodeWithPos & {depth: number})[] {\n let {depth} = $pos;\n const nodes: (NodeWithPos & {depth: number})[] = [];\n\n while (depth >= 0) {\n const node = $pos.node(depth);\n if (node.type === type) nodes.push({depth, node, pos: $pos.before(depth)});\n depth--;\n }\n\n return nodes;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Plugin } from
|
|
1
|
+
import { Plugin } from "../../../../pm/state.js";
|
|
2
2
|
export declare const cutAutoOpenPlugin: () => Plugin<any>;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cutAutoOpenPlugin = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const prosemirror_utils_1 = require("prosemirror-utils");
|
|
4
|
+
const state_1 = require("../../../../pm/state.js");
|
|
5
|
+
const utils_1 = require("../../../../pm/utils.js");
|
|
7
6
|
const lodash_1 = require("../../../../lodash.js");
|
|
8
7
|
const selection_1 = require("../../../../utils/selection.js");
|
|
9
8
|
const const_1 = require("../const.js");
|
|
10
|
-
const key = new
|
|
9
|
+
const key = new state_1.PluginKey('yfm-cut-auto-open');
|
|
11
10
|
const cutAutoOpenPlugin = () => {
|
|
12
|
-
return new
|
|
11
|
+
return new state_1.Plugin({
|
|
13
12
|
key,
|
|
14
13
|
view(view) {
|
|
15
14
|
update(view);
|
|
@@ -42,7 +41,7 @@ function openParentYfmCuts($pos, domAtPos) {
|
|
|
42
41
|
if ($pos.node(depth).type === (0, const_1.cutContentType)(schema)) {
|
|
43
42
|
if ($pos.node(depth - 1).type === (0, const_1.cutType)(schema)) {
|
|
44
43
|
const { node: cutDomNode } = domAtPos($pos.start(depth - 1), 0);
|
|
45
|
-
cutDomNode.classList.add(
|
|
44
|
+
cutDomNode.classList.add(const_1.YfmCutClassName.Open);
|
|
46
45
|
depth--;
|
|
47
46
|
}
|
|
48
47
|
}
|
|
@@ -50,7 +49,7 @@ function openParentYfmCuts($pos, domAtPos) {
|
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
class CutAutoOpenOnDragOver {
|
|
53
|
-
static YFM_CUT_SELECTOR =
|
|
52
|
+
static YFM_CUT_SELECTOR = `.${const_1.YfmCutClassName.Cut}:not(.${const_1.YfmCutClassName.Open})`;
|
|
54
53
|
static OPEN_TIMEOUT = 500; //ms
|
|
55
54
|
static THROTTLE_WAIT = 50; //ms
|
|
56
55
|
_cutElem = null;
|
|
@@ -76,7 +75,7 @@ class CutAutoOpenOnDragOver {
|
|
|
76
75
|
const pos = view.posAtCoords({ left: event.clientX, top: event.clientY });
|
|
77
76
|
if (!pos)
|
|
78
77
|
return;
|
|
79
|
-
const elem = (0,
|
|
78
|
+
const elem = (0, utils_1.findDomRefAtPos)(pos.pos, view.domAtPos.bind(view));
|
|
80
79
|
const cutElem = elem.closest(CutAutoOpenOnDragOver.YFM_CUT_SELECTOR);
|
|
81
80
|
if (cutElem === this._cutElem)
|
|
82
81
|
return;
|
|
@@ -96,7 +95,7 @@ class CutAutoOpenOnDragOver {
|
|
|
96
95
|
}
|
|
97
96
|
_openCut() {
|
|
98
97
|
if (this._editorView.dragging) {
|
|
99
|
-
this._cutElem?.classList.add(
|
|
98
|
+
this._cutElem?.classList.add(const_1.YfmCutClassName.Open);
|
|
100
99
|
}
|
|
101
100
|
this._clear();
|
|
102
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-open.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/plugins/auto-open.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"auto-open.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/plugins/auto-open.ts"],"names":[],"mappings":";;;AACA,mDAA6D;AAC7D,mDAA0C;AAE1C,kDAAoC;AACpC,8DAAoD;AAEpD,uCAAkE;AAElE,MAAM,GAAG,GAAG,IAAI,iBAAS,CAAC,mBAAmB,CAAC,CAAC;AAExC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAClC,OAAO,IAAI,cAAM,CAAC;QACd,GAAG;QACH,IAAI,CAAC,IAAI;YACL,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO;gBACH,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;aACvC,CAAC;QACN,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC;AAZW,QAAA,iBAAiB,qBAY5B;AAEF,SAAS,MAAM,CAAC,IAAgB;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAA,2BAAe,EAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACJ,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB,EAAE,QAAgC;IAC1E,IAAI,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC;IACnB,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAClC,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAA,sBAAc,EAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,IAAA,eAAO,EAAC,MAAM,CAAC,EAAE,CAAC;gBAChD,MAAM,EAAC,IAAI,EAAE,UAAU,EAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7D,UAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAe,CAAC,IAAI,CAAC,CAAC;gBAC5D,KAAK,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QACD,KAAK,EAAE,CAAC;IACZ,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB;IACf,MAAM,CAAU,gBAAgB,GACpC,IAAI,uBAAe,CAAC,GAAG,SAAS,uBAAe,CAAC,IAAI,GAAY,CAAC;IAC7D,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC,CAAC,IAAI;IACxC,MAAM,CAAU,aAAa,GAAG,EAAE,CAAC,CAAC,IAAI;IAExC,QAAQ,GAAuB,IAAI,CAAC;IACpC,WAAW,CAAa;IACxB,QAAQ,GAAyC,IAAI,CAAC;IAC7C,YAAY,CAAC;IAE9B,YAAY,IAAgB;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAA,iBAAQ,EACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,qBAAqB,CAAC,aAAa,CACtC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,KAAiB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAC,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,IAAI,GAAG,IAAA,uBAAe,EAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAgB,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QACrE,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,OAAO;YAAE,IAAI,CAAC,WAAW,CAAC,OAAsB,CAAC,CAAC;IAC1D,CAAC;IAEO,MAAM;QACV,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,IAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7F,CAAC;IAEO,QAAQ;QACZ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,uBAAe,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC","sourcesContent":["import type {ResolvedPos} from '#pm/model';\nimport {Plugin, PluginKey, type PluginView} from '#pm/state';\nimport {findDomRefAtPos} from '#pm/utils';\nimport type {EditorView} from '#pm/view';\nimport {throttle} from 'src/lodash';\nimport {isTextSelection} from 'src/utils/selection';\n\nimport {YfmCutClassName, cutContentType, cutType} from '../const';\n\nconst key = new PluginKey('yfm-cut-auto-open');\n\nexport const cutAutoOpenPlugin = () => {\n return new Plugin({\n key,\n view(view) {\n update(view);\n const dragHandler = new CutAutoOpenOnDragOver(view);\n return {\n update: (view) => update(view),\n destroy: () => dragHandler.destroy(),\n };\n },\n });\n};\n\nfunction update(view: EditorView) {\n const sel = view.state.selection;\n const domAtPos = view.domAtPos.bind(view);\n if (isTextSelection(sel)) {\n if (sel.$cursor) {\n openParentYfmCuts(sel.$cursor, domAtPos);\n } else {\n openParentYfmCuts(sel.$head, domAtPos);\n openParentYfmCuts(sel.$anchor, domAtPos);\n }\n }\n}\n\nfunction openParentYfmCuts($pos: ResolvedPos, domAtPos: EditorView['domAtPos']): void {\n let {depth} = $pos;\n const {schema} = $pos.parent.type;\n while (depth > 0) {\n if ($pos.node(depth).type === cutContentType(schema)) {\n if ($pos.node(depth - 1).type === cutType(schema)) {\n const {node: cutDomNode} = domAtPos($pos.start(depth - 1), 0);\n (cutDomNode as Element).classList.add(YfmCutClassName.Open);\n depth--;\n }\n }\n depth--;\n }\n}\n\nclass CutAutoOpenOnDragOver implements PluginView {\n private static readonly YFM_CUT_SELECTOR =\n `.${YfmCutClassName.Cut}:not(.${YfmCutClassName.Open})` as const;\n private static readonly OPEN_TIMEOUT = 500; //ms\n private static readonly THROTTLE_WAIT = 50; //ms\n\n private _cutElem: HTMLElement | null = null;\n private _editorView: EditorView;\n private _timeout: ReturnType<typeof setTimeout> | null = null;\n private readonly _docListener;\n\n constructor(view: EditorView) {\n this._editorView = view;\n this._docListener = throttle(\n this._onDocEvent.bind(this),\n CutAutoOpenOnDragOver.THROTTLE_WAIT,\n );\n document.addEventListener('mousemove', this._docListener);\n document.addEventListener('dragover', this._docListener);\n }\n\n destroy(): void {\n this._clear();\n this._docListener.cancel();\n document.removeEventListener('mousemove', this._docListener);\n document.removeEventListener('dragover', this._docListener);\n }\n\n private _onDocEvent(event: MouseEvent) {\n const view = this._editorView;\n if (!view.dragging) return;\n const pos = view.posAtCoords({left: event.clientX, top: event.clientY});\n if (!pos) return;\n const elem = findDomRefAtPos(pos.pos, view.domAtPos.bind(view)) as HTMLElement;\n const cutElem = elem.closest(CutAutoOpenOnDragOver.YFM_CUT_SELECTOR);\n if (cutElem === this._cutElem) return;\n this._clear();\n if (cutElem) this._setCutElem(cutElem as HTMLElement);\n }\n\n private _clear() {\n if (this._timeout !== null) clearTimeout(this._timeout);\n this._timeout = null;\n this._cutElem = null;\n }\n\n private _setCutElem(elem: HTMLElement) {\n this._cutElem = elem;\n this._timeout = setTimeout(this._openCut.bind(this), CutAutoOpenOnDragOver.OPEN_TIMEOUT);\n }\n\n private _openCut() {\n if (this._editorView.dragging) {\n this._cutElem?.classList.add(YfmCutClassName.Open);\n }\n this._clear();\n }\n}\n"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.backspaceCommand = exports.clearSelectedCells = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const commands_1 = require("../../../../pm/commands.js");
|
|
5
|
+
const state_1 = require("../../../../pm/state.js");
|
|
6
|
+
const specs_1 = require("../../../base/specs.js");
|
|
7
|
+
const lodash_1 = require("../../../../lodash.js");
|
|
6
8
|
const table_utils_1 = require("../../../../table-utils/index.js");
|
|
9
|
+
const table_desc_1 = require("../../../../table-utils/table-desc.js");
|
|
7
10
|
const selection_1 = require("../../../../utils/selection.js");
|
|
11
|
+
const utils_1 = require("../utils.js");
|
|
8
12
|
const removeCellNodeContent = (state, dispatch) => {
|
|
9
13
|
const sel = state.selection;
|
|
10
14
|
if (!(0, selection_1.isNodeSelection)(sel))
|
|
@@ -21,105 +25,78 @@ const removeCellNodeContent = (state, dispatch) => {
|
|
|
21
25
|
const from = sel.from + 1;
|
|
22
26
|
const to = sel.to - 1;
|
|
23
27
|
let tr = state.tr.delete(from, to);
|
|
24
|
-
tr = tr.setSelection(
|
|
28
|
+
tr = tr.setSelection(state_1.TextSelection.create(tr.doc, from));
|
|
25
29
|
dispatch(tr);
|
|
26
30
|
}
|
|
27
31
|
return true;
|
|
28
32
|
}
|
|
29
33
|
return false;
|
|
30
34
|
};
|
|
31
|
-
// eslint-disable-next-line complexity
|
|
32
35
|
const clearSelectedCells = (state, dispatch) => {
|
|
33
36
|
const sel = state.selection;
|
|
34
37
|
if (!(0, selection_1.isTextSelection)(sel))
|
|
35
38
|
return false;
|
|
36
39
|
const { $from, $to } = sel;
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const sharedDepth = $from.sharedDepth($to.pos);
|
|
41
|
+
const commonAncestor = $from.node(sharedDepth);
|
|
42
|
+
const { schema } = commonAncestor.type;
|
|
43
|
+
if (!isAnyOfTypes(commonAncestor, [
|
|
44
|
+
(0, utils_1.yfmTableType)(schema),
|
|
45
|
+
(0, utils_1.yfmTableBodyType)(schema),
|
|
46
|
+
(0, utils_1.yfmTableRowType)(schema),
|
|
47
|
+
]))
|
|
43
48
|
return false;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return false;
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (trRow && isEmptyTableRow(trRow)) {
|
|
75
|
-
tr = tr.delete(rowPos, rowPos + trRow.nodeSize);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
rowIndex--;
|
|
79
|
-
}
|
|
80
|
-
tr = tr.delete($from.pos, fromCell.pos + fromCell.node.nodeSize);
|
|
81
|
-
const fromRowPos = tBody.pos + bodyRows[fromRowIndexInBody].pos + 1;
|
|
82
|
-
const trFromRow = tr.doc.nodeAt(fromRowPos);
|
|
83
|
-
if (fromCellIndexInRow === 0 && trFromRow && isEmptyTableRow(trFromRow)) {
|
|
84
|
-
const rowsCountBeforeDelete = tr.doc.nodeAt(tBody.pos).childCount;
|
|
85
|
-
tr = tr.delete(fromRowPos, fromRowPos + tr.doc.nodeAt(fromRowPos).nodeSize);
|
|
86
|
-
const trTable = tr.doc.nodeAt(table.pos);
|
|
87
|
-
if (rowsCountBeforeDelete <= 1) {
|
|
88
|
-
if (trTable) {
|
|
89
|
-
if (trTable.childCount <= 1) {
|
|
90
|
-
tr = tr.delete(table.pos, trTable.nodeSize);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
tr = tr.delete(tBody.pos, tBody.pos + tr.doc.nodeAt(tBody.pos).nodeSize);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
49
|
+
const tablePos = findTablePos($from, sharedDepth);
|
|
50
|
+
if (typeof tablePos !== 'number')
|
|
51
|
+
return false;
|
|
52
|
+
const tableNode = $from.doc.nodeAt(tablePos);
|
|
53
|
+
if (!tableNode)
|
|
54
|
+
return false;
|
|
55
|
+
const tableDesc = table_desc_1.TableDesc.create(tableNode)?.bind(tablePos);
|
|
56
|
+
if (!tableDesc)
|
|
57
|
+
return false;
|
|
58
|
+
if (dispatch) {
|
|
59
|
+
const tr = state.tr;
|
|
60
|
+
const cells = (0, lodash_1.range)(0, tableDesc.rows)
|
|
61
|
+
.flatMap((rowIdx) => tableDesc.getPosForRowCells(rowIdx))
|
|
62
|
+
.filter((cell) => cell.type === 'real');
|
|
63
|
+
const isAllSelected = $from.pos <= cells[0].from + 2 && $to.pos >= cells[cells.length - 1].to - 2;
|
|
64
|
+
if (isAllSelected) {
|
|
65
|
+
// all table content is selected, we should remove table
|
|
66
|
+
tr.replaceWith(tablePos, tablePos + tableNode.nodeSize, (0, specs_1.pType)(schema).create());
|
|
67
|
+
tr.setSelection(state_1.TextSelection.create(tr.doc, tablePos + 1));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
for (const cell of cells) {
|
|
71
|
+
if ($from.pos > cell.to)
|
|
72
|
+
continue;
|
|
73
|
+
if ($to.pos < cell.from)
|
|
74
|
+
break;
|
|
75
|
+
const from = Math.max($from.pos, cell.from + 1);
|
|
76
|
+
const to = Math.min($to.pos, cell.to - 1);
|
|
77
|
+
tr.delete(tr.mapping.map(from), tr.mapping.map(to));
|
|
78
|
+
tr.setSelection(state_1.TextSelection.near(tr.doc.resolve(tr.mapping.map(to)), -1));
|
|
97
79
|
}
|
|
98
|
-
tr = tr.setSelection(prosemirror_state_1.TextSelection.create(tr.doc, tr.mapping.map(sel.head)));
|
|
99
|
-
dispatch(tr);
|
|
100
80
|
}
|
|
101
|
-
|
|
81
|
+
dispatch(tr.scrollIntoView());
|
|
102
82
|
}
|
|
103
|
-
return
|
|
83
|
+
return true;
|
|
104
84
|
};
|
|
105
85
|
exports.clearSelectedCells = clearSelectedCells;
|
|
106
|
-
exports.backspaceCommand = (0,
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
return false;
|
|
110
|
-
if (node.childCount === 0)
|
|
111
|
-
return true;
|
|
112
|
-
let isRowEmpty = true;
|
|
113
|
-
node.forEach((cellNode) => {
|
|
114
|
-
isRowEmpty = isEmptyTableCell(cellNode);
|
|
115
|
-
});
|
|
116
|
-
return isRowEmpty;
|
|
86
|
+
exports.backspaceCommand = (0, commands_1.chainCommands)(removeCellNodeContent, exports.clearSelectedCells);
|
|
87
|
+
function isAnyOfTypes(node, types) {
|
|
88
|
+
return types.some((type) => type === node.type);
|
|
117
89
|
}
|
|
118
|
-
function
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
90
|
+
function findTablePos($pos, startDepth) {
|
|
91
|
+
const ASCENTS = 5;
|
|
92
|
+
let depth = startDepth;
|
|
93
|
+
while (depth >= 0 && startDepth - depth <= ASCENTS) {
|
|
94
|
+
const node = $pos.node(depth);
|
|
95
|
+
if ((0, table_utils_1.isTableNode)(node)) {
|
|
96
|
+
return $pos.before(depth);
|
|
97
|
+
}
|
|
98
|
+
depth--;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
124
101
|
}
|
|
125
102
|
//# sourceMappingURL=backspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backspace.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmTable/commands/backspace.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands} from 'prosemirror-commands';\nimport type {Node} from 'prosemirror-model';\nimport {type Command, TextSelection} from 'prosemirror-state';\n\nimport {\n findChildTableCells,\n findChildTableRows,\n findParentTableBodyFromPos,\n findParentTableCellFromPos,\n findParentTableFromPos,\n isTableCellNode,\n isTableRowNode,\n} from '../../../../table-utils';\nimport {isNodeSelection, isTextSelection} from '../../../../utils/selection';\n\nconst removeCellNodeContent: Command = (state, dispatch) => {\n const sel = state.selection;\n if (!isNodeSelection(sel)) return false;\n const selNode = sel.node;\n if (isTableRowNode(selNode)) {\n // remove the table row\n dispatch?.(state.tr.deleteSelection());\n return true;\n }\n if (isTableCellNode(selNode)) {\n if (dispatch) {\n // clearing the table cell\n const from = sel.from + 1;\n const to = sel.to - 1;\n let tr = state.tr.delete(from, to);\n tr = tr.setSelection(TextSelection.create(tr.doc, from));\n dispatch(tr);\n }\n return true;\n }\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport const clearSelectedCells: Command = (state, dispatch) => {\n const sel = state.selection;\n if (!isTextSelection(sel)) return false;\n const {$from, $to} = sel;\n\n const fromCell = findParentTableCellFromPos($from);\n const toCell = findParentTableCellFromPos($to);\n const fromTBody = findParentTableBodyFromPos($from);\n const toTBody = findParentTableBodyFromPos($to);\n const fromTable = findParentTableFromPos($to);\n\n if (!fromCell || !toCell || !fromTBody || !toTBody || !fromTable) return false;\n\n if (fromCell.node === toCell.node) {\n // selection inside table cell\n return false; // should executes default command\n }\n\n if (fromTBody && toTBody && fromTBody.pos === toTBody.pos) {\n if (dispatch) {\n const table = fromTable;\n const tBody = fromTBody;\n\n const fromCellIndexInRow = $from.index(fromCell.depth - 1);\n const toCellIndexInRow = $to.index(toCell.depth - 1);\n\n const fromRowIndexInBody = $from.index(fromCell.depth - 2);\n const toRowIndexInBody = $to.index(toCell.depth - 2);\n\n const bodyRows = findChildTableRows(tBody.node);\n\n let tr = state.tr;\n tr = tr.delete(toCell.start, $to.pos);\n\n let rowIndex = toRowIndexInBody;\n while (rowIndex >= fromRowIndexInBody) {\n const row = bodyRows[rowIndex];\n const rowCells = findChildTableCells(row.node);\n\n let cellIndex =\n rowIndex === toRowIndexInBody ? toCellIndexInRow - 1 : rowCells.length - 1;\n while (cellIndex > (rowIndex === fromRowIndexInBody ? fromCellIndexInRow : -1)) {\n const cell = rowCells[cellIndex];\n\n const from = tBody.pos + row.pos + cell.pos + 3;\n const to = from + cell.node.nodeSize - 2;\n\n tr = tr.delete(from, to);\n\n cellIndex--;\n }\n\n if (rowIndex !== fromRowIndexInBody) {\n const rowPos = tBody.pos + row.pos + 1;\n const trRow = tr.doc.nodeAt(rowPos);\n if (trRow && isEmptyTableRow(trRow)) {\n tr = tr.delete(rowPos, rowPos + trRow.nodeSize);\n }\n }\n\n rowIndex--;\n }\n\n tr = tr.delete($from.pos, fromCell.pos + fromCell.node.nodeSize);\n\n const fromRowPos = tBody.pos + bodyRows[fromRowIndexInBody].pos + 1;\n const trFromRow = tr.doc.nodeAt(fromRowPos);\n if (fromCellIndexInRow === 0 && trFromRow && isEmptyTableRow(trFromRow)) {\n const rowsCountBeforeDelete = tr.doc.nodeAt(tBody.pos)!.childCount;\n tr = tr.delete(fromRowPos, fromRowPos + tr.doc.nodeAt(fromRowPos)!.nodeSize);\n\n const trTable = tr.doc.nodeAt(table.pos);\n if (rowsCountBeforeDelete <= 1) {\n if (trTable) {\n if (trTable.childCount <= 1) {\n tr = tr.delete(table.pos, trTable.nodeSize);\n }\n } else {\n tr = tr.delete(tBody.pos, tBody.pos + tr.doc.nodeAt(tBody.pos)!.nodeSize);\n }\n }\n }\n tr = tr.setSelection(TextSelection.create(tr.doc, tr.mapping.map(sel.head)));\n\n dispatch(tr);\n }\n\n return true;\n }\n\n return false;\n};\n\nexport const backspaceCommand = chainCommands(removeCellNodeContent, clearSelectedCells);\n\nfunction isEmptyTableRow(node: Node) {\n if (!isTableRowNode(node)) return false;\n if (node.childCount === 0) return true;\n let isRowEmpty = true;\n node.forEach((cellNode) => {\n isRowEmpty = isEmptyTableCell(cellNode);\n });\n return isRowEmpty;\n}\n\nfunction isEmptyTableCell(node: Node): boolean {\n if (!isTableCellNode(node)) return false;\n if (node.childCount === 0) return true;\n return node.childCount === 1 && node.child(0).isTextblock && node.child(0).childCount === 0;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"backspace.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmTable/commands/backspace.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands} from '#pm/commands';\nimport type {Node, NodeType, ResolvedPos} from '#pm/model';\nimport {type Command, TextSelection} from '#pm/state';\nimport {pType} from 'src/extensions/base/specs';\nimport {range} from 'src/lodash';\nimport {isTableCellNode, isTableNode, isTableRowNode} from 'src/table-utils';\nimport {TableDesc} from 'src/table-utils/table-desc';\nimport {isNodeSelection, isTextSelection} from 'src/utils/selection';\n\nimport {yfmTableBodyType, yfmTableRowType, yfmTableType} from '../utils';\n\nconst removeCellNodeContent: Command = (state, dispatch) => {\n const sel = state.selection;\n if (!isNodeSelection(sel)) return false;\n const selNode = sel.node;\n if (isTableRowNode(selNode)) {\n // remove the table row\n dispatch?.(state.tr.deleteSelection());\n return true;\n }\n if (isTableCellNode(selNode)) {\n if (dispatch) {\n // clearing the table cell\n const from = sel.from + 1;\n const to = sel.to - 1;\n let tr = state.tr.delete(from, to);\n tr = tr.setSelection(TextSelection.create(tr.doc, from));\n dispatch(tr);\n }\n return true;\n }\n return false;\n};\n\nexport const clearSelectedCells: Command = (state, dispatch) => {\n const sel = state.selection;\n if (!isTextSelection(sel)) return false;\n const {$from, $to} = sel;\n\n const sharedDepth = $from.sharedDepth($to.pos);\n const commonAncestor = $from.node(sharedDepth);\n const {schema} = commonAncestor.type;\n\n if (\n !isAnyOfTypes(commonAncestor, [\n yfmTableType(schema),\n yfmTableBodyType(schema),\n yfmTableRowType(schema),\n ])\n )\n return false;\n\n const tablePos = findTablePos($from, sharedDepth);\n if (typeof tablePos !== 'number') return false;\n const tableNode = $from.doc.nodeAt(tablePos);\n if (!tableNode) return false;\n const tableDesc = TableDesc.create(tableNode)?.bind(tablePos);\n if (!tableDesc) return false;\n\n if (dispatch) {\n const tr = state.tr;\n\n const cells = range(0, tableDesc.rows)\n .flatMap((rowIdx) => tableDesc.getPosForRowCells(rowIdx))\n .filter((cell) => cell.type === 'real');\n\n const isAllSelected =\n $from.pos <= cells[0].from + 2 && $to.pos >= cells[cells.length - 1].to - 2;\n\n if (isAllSelected) {\n // all table content is selected, we should remove table\n tr.replaceWith(tablePos, tablePos + tableNode.nodeSize, pType(schema).create());\n tr.setSelection(TextSelection.create(tr.doc, tablePos + 1));\n } else {\n for (const cell of cells) {\n if ($from.pos > cell.to) continue;\n if ($to.pos < cell.from) break;\n\n const from = Math.max($from.pos, cell.from + 1);\n const to = Math.min($to.pos, cell.to - 1);\n\n tr.delete(tr.mapping.map(from), tr.mapping.map(to));\n tr.setSelection(TextSelection.near(tr.doc.resolve(tr.mapping.map(to)), -1));\n }\n }\n\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n};\n\nexport const backspaceCommand = chainCommands(removeCellNodeContent, clearSelectedCells);\n\nfunction isAnyOfTypes(node: Node, types: NodeType[]): boolean {\n return types.some((type) => type === node.type);\n}\n\nfunction findTablePos($pos: ResolvedPos, startDepth: number): number | null {\n const ASCENTS = 5;\n let depth = startDepth;\n while (depth >= 0 && startDepth - depth <= ASCENTS) {\n const node = $pos.node(depth);\n if (isTableNode(node)) {\n return $pos.before(depth);\n }\n depth--;\n }\n return null;\n}\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
export declare const i18n: <G extends "title" | "label_case-sensitive" | "label_whole-word", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
1
|
+
export declare const i18n: <G extends "title" | "label_case-sensitive" | "label_whole-word" | "action_replace" | "action_replace_all" | "replace_placeholder", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
2
2
|
[key: string]: any;
|
|
3
3
|
}) => S extends G ? {
|
|
4
4
|
"label_case-sensitive": string;
|
|
5
5
|
"label_whole-word": string;
|
|
6
6
|
title: string;
|
|
7
|
+
action_replace: string;
|
|
8
|
+
action_replace_all: string;
|
|
9
|
+
replace_placeholder: string;
|
|
7
10
|
}[G] : string;
|
|
@@ -29,5 +29,7 @@ export declare const SearchPanelPlugin: (params: SearchPanelPluginParams) => Vie
|
|
|
29
29
|
handleSearchNext(): void;
|
|
30
30
|
handleSearchPrev(): void;
|
|
31
31
|
handleSearchConfigChange(config: Partial<SearchQueryConfig>): void;
|
|
32
|
+
handleReplaceNext(query: string, replacement: string): void;
|
|
33
|
+
handleReplaceAll(query: string, replacement: string): void;
|
|
32
34
|
}>;
|
|
33
35
|
export {};
|
|
@@ -16,6 +16,7 @@ const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
|
16
16
|
search: '',
|
|
17
17
|
caseSensitive: false,
|
|
18
18
|
wholeWord: false,
|
|
19
|
+
replace: '',
|
|
19
20
|
};
|
|
20
21
|
receiver;
|
|
21
22
|
setViewSearchWithDelay;
|
|
@@ -29,6 +30,8 @@ const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
|
29
30
|
this.handleChange = this.handleChange.bind(this);
|
|
30
31
|
this.handleSearchNext = this.handleSearchNext.bind(this);
|
|
31
32
|
this.handleSearchPrev = this.handleSearchPrev.bind(this);
|
|
33
|
+
this.handleReplaceNext = this.handleReplaceNext.bind(this);
|
|
34
|
+
this.handleReplaceAll = this.handleReplaceAll.bind(this);
|
|
32
35
|
this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);
|
|
33
36
|
this.handleEditorModeChange = this.handleEditorModeChange.bind(this);
|
|
34
37
|
this.setViewSearchWithDelay = (0, lodash_1.debounce)(this.setViewSearch, this.params.inputDelay ?? INPUT_DELAY);
|
|
@@ -49,6 +52,8 @@ const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
|
49
52
|
onClose: this.handleClose,
|
|
50
53
|
onSearchNext: this.handleSearchNext,
|
|
51
54
|
onSearchPrev: this.handleSearchPrev,
|
|
55
|
+
onReplaceNext: this.handleReplaceNext,
|
|
56
|
+
onReplaceAll: this.handleReplaceAll,
|
|
52
57
|
onConfigChange: this.handleSearchConfigChange,
|
|
53
58
|
}));
|
|
54
59
|
}
|
|
@@ -93,6 +98,14 @@ const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
|
93
98
|
handleSearchConfigChange(config) {
|
|
94
99
|
this.setViewSearch(config);
|
|
95
100
|
}
|
|
101
|
+
handleReplaceNext(query, replacement) {
|
|
102
|
+
this.setViewSearch({ search: query, replace: replacement });
|
|
103
|
+
(0, search_1.replaceNext)(this.view);
|
|
104
|
+
}
|
|
105
|
+
handleReplaceAll(query, replacement) {
|
|
106
|
+
this.setViewSearch({ search: query, replace: replacement });
|
|
107
|
+
(0, search_1.replaceAll)(this.view);
|
|
108
|
+
}
|
|
96
109
|
}, {
|
|
97
110
|
provide: () => [
|
|
98
111
|
view_1.keymap.of(search_1.searchKeymap),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":";;;AAAA,+CAU4B;AAC5B,2CAM0B;AAK1B,+CAAyC;AAEzC,mDAAkD;AAElD,uDAAqD;AAIrD,MAAM,WAAW,GAAG,GAAG,CAAC;AAQjB,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAE,EAAE,CACjE,iBAAU,CAAC,SAAS,CAChB;IACa,IAAI,CAAa;IACjB,MAAM,CAA0B;IAEzC,MAAM,CAAqB;IAC3B,QAAQ,CAAsB;IAC9B,YAAY,GAAsB;QAC9B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,KAAK;KACnB,CAAC;IACF,QAAQ,CAAiC;IAEzC,sBAAsB,CAA+C;IAErE,YAAY,IAAgB;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEhC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErE,IAAI,CAAC,sBAAsB,GAAG,IAAA,iBAAQ,EAClC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,WAAW,CACxC,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,MAAkB;QACrB,MAAM,WAAW,GAAG,IAAA,wBAAe,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAA,uBAAc,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;iBAC1B,KAAK,CAAC,gCAAkB,CAAC;iBACzB,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,CAC1B,IAAA,+BAAiB,EAAC;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,YAAY;gBAC3B,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,YAAY,EAAE,IAAI,CAAC,gBAAgB;gBACnC,YAAY,EAAE,IAAI,CAAC,gBAAgB;gBACnC,cAAc,EAAE,IAAI,CAAC,wBAAwB;aAChD,CAAC,CACL,CAAC;QACV,CAAC;aAAM,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC1E,CAAC;IAED,aAAa,CAAC,MAAkC;QAC5C,IAAI,CAAC,YAAY,GAAG;YAChB,GAAG,IAAI,CAAC,YAAY;YACpB,GAAG,MAAM;SACZ,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC;YAChC,GAAG,IAAI,CAAC,YAAY;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,OAAO,EAAE,uBAAc,CAAC,EAAE,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC;IAClE,CAAC;IAED,sBAAsB,CAAC,EAAC,IAAI,EAA6B;QACrD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,IAAA,yBAAgB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,MAAc;QACvB,IAAI,CAAC,sBAAsB,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW;QACP,IAAI,CAAC,aAAa,CAAC,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC;QACjC,IAAA,yBAAgB,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;QACZ,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,gBAAgB;QACZ,IAAA,qBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,wBAAwB,CAAC,MAAkC;QACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACJ,EACD;IACI,OAAO,EAAE,GAAG,EAAE,CAAC;QACX,aAAM,CAAC,EAAE,CAAC,qBAAY,CAAC;QACvB,IAAA,eAAM,EAAC;YACH,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChB,+BAA+B;gBAC/B,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;aACrC,CAAC;SACL,CAAC;KACL;CACJ,CACJ,CAAC;AAxHO,QAAA,iBAAiB,qBAwHxB","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from '../../../bundle';\nimport type {EventMap} from '../../../bundle/Editor';\nimport type {RendererItem} from '../../../extensions';\nimport {debounce} from '../../../lodash';\nimport type {Receiver} from '../../../utils';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {renderSearchPopup} from './view/SearchPopup';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nconst INPUT_DELAY = 200;\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n anchor: HTMLElement | null;\n renderer: RendererItem | null;\n searchConfig: SearchQueryConfig = {\n search: '',\n caseSensitive: false,\n wholeWord: false,\n };\n receiver: Receiver<EventMap> | undefined;\n\n setViewSearchWithDelay: (config: Partial<SearchQueryConfig>) => void;\n\n constructor(view: EditorView) {\n this.view = view;\n this.anchor = null;\n this.renderer = null;\n this.params = params;\n this.receiver = params.receiver;\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.setViewSearchWithDelay = debounce(\n this.setViewSearch,\n this.params.inputDelay ?? INPUT_DELAY,\n );\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n\n if (isPanelOpen && !this.renderer) {\n const initial = getSearchQuery(update.state);\n this.anchor = document.querySelector(this.params.anchorSelector);\n this.renderer = this.view.state\n .facet(ReactRendererFacet)\n .createItem('cm-search', () =>\n renderSearchPopup({\n initial,\n open: true,\n anchor: this.anchor,\n onChange: this.handleChange,\n onClose: this.handleClose,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onConfigChange: this.handleSearchConfigChange,\n }),\n );\n } else if (!isPanelOpen && this.renderer) {\n this.renderer?.remove();\n this.renderer = null;\n }\n }\n\n destroy() {\n this.renderer?.remove();\n this.renderer = null;\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n setViewSearch(config: Partial<SearchQueryConfig>) {\n this.searchConfig = {\n ...this.searchConfig,\n ...config,\n };\n const searchQuery = new SearchQuery({\n ...this.searchConfig,\n });\n\n this.view.dispatch({effects: setSearchQuery.of(searchQuery)});\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(search: string) {\n this.setViewSearchWithDelay({search});\n }\n\n handleClose() {\n this.setViewSearch({search: ''});\n closeSearchPanel(this.view);\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleSearchConfigChange(config: Partial<SearchQueryConfig>) {\n this.setViewSearch(config);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n replaceAll,\n replaceNext,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from '../../../bundle';\nimport type {EventMap} from '../../../bundle/Editor';\nimport type {RendererItem} from '../../../extensions';\nimport {debounce} from '../../../lodash';\nimport type {Receiver} from '../../../utils';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {renderSearchPopup} from './view/SearchPopup';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nconst INPUT_DELAY = 200;\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n anchor: HTMLElement | null;\n renderer: RendererItem | null;\n searchConfig: SearchQueryConfig = {\n search: '',\n caseSensitive: false,\n wholeWord: false,\n replace: '',\n };\n receiver: Receiver<EventMap> | undefined;\n\n setViewSearchWithDelay: (config: Partial<SearchQueryConfig>) => void;\n\n constructor(view: EditorView) {\n this.view = view;\n this.anchor = null;\n this.renderer = null;\n this.params = params;\n this.receiver = params.receiver;\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleReplaceNext = this.handleReplaceNext.bind(this);\n this.handleReplaceAll = this.handleReplaceAll.bind(this);\n this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.setViewSearchWithDelay = debounce(\n this.setViewSearch,\n this.params.inputDelay ?? INPUT_DELAY,\n );\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n\n if (isPanelOpen && !this.renderer) {\n const initial = getSearchQuery(update.state);\n this.anchor = document.querySelector(this.params.anchorSelector);\n this.renderer = this.view.state\n .facet(ReactRendererFacet)\n .createItem('cm-search', () =>\n renderSearchPopup({\n initial,\n open: true,\n anchor: this.anchor,\n onChange: this.handleChange,\n onClose: this.handleClose,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onReplaceNext: this.handleReplaceNext,\n onReplaceAll: this.handleReplaceAll,\n onConfigChange: this.handleSearchConfigChange,\n }),\n );\n } else if (!isPanelOpen && this.renderer) {\n this.renderer?.remove();\n this.renderer = null;\n }\n }\n\n destroy() {\n this.renderer?.remove();\n this.renderer = null;\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n setViewSearch(config: Partial<SearchQueryConfig>) {\n this.searchConfig = {\n ...this.searchConfig,\n ...config,\n };\n const searchQuery = new SearchQuery({\n ...this.searchConfig,\n });\n\n this.view.dispatch({effects: setSearchQuery.of(searchQuery)});\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(search: string) {\n this.setViewSearchWithDelay({search});\n }\n\n handleClose() {\n this.setViewSearch({search: ''});\n closeSearchPanel(this.view);\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleSearchConfigChange(config: Partial<SearchQueryConfig>) {\n this.setViewSearch(config);\n }\n\n handleReplaceNext(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceNext(this.view);\n }\n\n handleReplaceAll(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceAll(this.view);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
|