@sealcode/jdd-editor 0.2.15 → 0.2.17
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/.nyc_output/d5d65fea-85bd-4682-8753-cd95b2fb397a.json +1 -0
- package/.nyc_output/processinfo/75f3e742-9c3d-4937-adad-ed712149983a.json +1 -0
- package/.nyc_output/processinfo/a331cb1e-8707-469e-95be-5bc65de3f692.json +1 -0
- package/.nyc_output/processinfo/d5d65fea-85bd-4682-8753-cd95b2fb397a.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/.xunit +1 -1
- package/@types/controllers/code-snippet.stimulus.d.ts +6 -0
- package/@types/controllers/json-editor.stimulus.d.ts +0 -1
- package/@types/inputs/component-input-code-with-custom-language.d.ts +7 -0
- package/@types/inputs/component-input-code.d.ts +3 -1
- package/@types/inputs/component-input-list.d.ts +3 -2
- package/@types/inputs/component-input-markdown.d.ts +6 -0
- package/@types/inputs/component-input-structured.d.ts +3 -2
- package/@types/inputs/component-input-table.d.ts +3 -2
- package/@types/inputs/component-input.d.ts +3 -2
- package/assets/styles/components.jdd-page.css +4 -2
- package/assets/styles/markdown-editor.css +9 -39
- package/coverage/clover.xml +141 -202
- package/dist/src/controllers/code-snippet.stimulus.js +12 -0
- package/dist/src/controllers/code-snippet.stimulus.js.map +7 -0
- package/dist/src/controllers/exportable-textarea.stimulus.js +0 -1
- package/dist/src/controllers/exportable-textarea.stimulus.js.map +2 -2
- package/dist/src/controllers/json-editor.stimulus.js +0 -3
- package/dist/src/controllers/json-editor.stimulus.js.map +2 -2
- package/dist/src/inputs/component-input-code-with-custom-language.js +41 -0
- package/dist/src/inputs/component-input-code-with-custom-language.js.map +7 -0
- package/dist/src/inputs/component-input-code.js +22 -11
- package/dist/src/inputs/component-input-code.js.map +2 -2
- package/dist/src/inputs/component-input-list.js +3 -1
- package/dist/src/inputs/component-input-list.js.map +2 -2
- package/dist/src/inputs/component-input-markdown.js +49 -0
- package/dist/src/inputs/component-input-markdown.js.map +7 -0
- package/dist/src/inputs/component-input-structured.js +2 -0
- package/dist/src/inputs/component-input-structured.js.map +2 -2
- package/dist/src/inputs/component-input-table.js +6 -3
- package/dist/src/inputs/component-input-table.js.map +2 -2
- package/dist/src/inputs/component-input.js +28 -21
- package/dist/src/inputs/component-input.js.map +2 -2
- package/dist/src/jdd-page.js +2 -1
- package/dist/src/jdd-page.js.map +2 -2
- package/package.json +2 -2
- package/src/controllers/code-snippet.stimulus.ts +12 -0
- package/src/controllers/exportable-textarea.stimulus.ts +0 -1
- package/src/controllers/json-editor.stimulus.ts +0 -4
- package/src/inputs/component-input-code-with-custom-language.ts +44 -0
- package/src/inputs/component-input-code.ts +23 -10
- package/src/inputs/component-input-list.ts +9 -1
- package/src/inputs/component-input-markdown.ts +58 -0
- package/src/inputs/component-input-structured.ts +4 -0
- package/src/inputs/component-input-table.ts +5 -1
- package/src/inputs/component-input.ts +38 -18
- package/src/jdd-page.ts +1 -0
- package/.nyc_output/b318e449-cc0d-49b3-8647-15d9173f5905.json +0 -1
- package/.nyc_output/processinfo/65a49023-1c6a-4217-ab3e-89a09cde8bfc.json +0 -1
- package/.nyc_output/processinfo/b318e449-cc0d-49b3-8647-15d9173f5905.json +0 -1
- package/.nyc_output/processinfo/be222db4-3db9-4c08-a4b5-58673c1c7c29.json +0 -1
- package/@types/controllers/markdown-textarea.stimulus.d.ts +0 -20
- package/dist/src/controllers/markdown-textarea.stimulus.js +0 -174
- package/dist/src/controllers/markdown-textarea.stimulus.js.map +0 -7
- package/src/controllers/markdown-textarea.stimulus.ts +0 -198
- /package/.nyc_output/{65a49023-1c6a-4217-ab3e-89a09cde8bfc.json → 75f3e742-9c3d-4937-adad-ed712149983a.json} +0 -0
- /package/.nyc_output/{be222db4-3db9-4c08-a4b5-58673c1c7c29.json → a331cb1e-8707-469e-95be-5bc65de3f692.json} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"parent":null,"pid":552693,"argv":["/home/kuba/.local/share/fnm/node-versions/v21.7.3/installation/bin/node","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/node_modules/.bin/mocha","--reporter","xunit","--reporter-option","output=.xunit"],"execArgv":[],"cwd":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor","time":1767787423260,"ppid":552668,"coverageFilename":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor/.nyc_output/65a49023-1c6a-4217-ab3e-89a09cde8bfc.json","externalId":"","uuid":"65a49023-1c6a-4217-ab3e-89a09cde8bfc","files":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"parent":null,"pid":552668,"argv":["/home/kuba/.local/share/fnm/node-versions/v21.7.3/installation/bin/node","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/node_modules/.bin/nyc","--reporter","clover","mocha","--reporter","xunit","--reporter-option","output=.xunit"],"execArgv":[],"cwd":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor","time":1767787422774,"ppid":552657,"coverageFilename":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor/.nyc_output/b318e449-cc0d-49b3-8647-15d9173f5905.json","externalId":"","uuid":"b318e449-cc0d-49b3-8647-15d9173f5905","files":["/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/component-preview-actions.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/components.sreact.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/autogrow-textarea.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/component-debugger.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/exportable-textarea.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/input-image-preview.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/jdd-table-paste.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/json-editor.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/markdown-textarea.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/refresh-on-ts-changes.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/refresh-styles.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/submit-on-input.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/controllers/toast.stimulus.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/edit-jdd-field.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/index.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-boolean.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-code.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-color.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-enum.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-image.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-list.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-single-reference.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-structured.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input-table.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/component-input.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/inputs/print-arg-path.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/jdd-creator.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/jdd-page.ts","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/src/test.test.ts"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"parent":"65a49023-1c6a-4217-ab3e-89a09cde8bfc","pid":552700,"argv":["/home/kuba/.local/share/fnm/node-versions/v21.7.3/installation/bin/node","/home/kuba/projects/sealcode/superseal/repos/jdd-editor/node_modules/.bin/mocha","--recursive","--timeout=10000","--require","source-map-support/register","lib/src/**/*.test.js"],"execArgv":[],"cwd":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor","time":1767787423422,"ppid":552693,"coverageFilename":"/home/kuba/projects/sealcode/superseal/repos/jdd-editor/.nyc_output/be222db4-3db9-4c08-a4b5-58673c1c7c29.json","externalId":"","uuid":"be222db4-3db9-4c08-a4b5-58673c1c7c29","files":[]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Controller } from "stimulus";
|
|
2
|
-
import type { default as simplemde } from "simplemde";
|
|
3
|
-
export default class MarkdownTextarea extends Controller<HTMLTextAreaElement> {
|
|
4
|
-
sm: simplemde;
|
|
5
|
-
checkboxHandler: (this: HTMLElement, ev: Event) => any;
|
|
6
|
-
resizeObserver: ResizeObserver;
|
|
7
|
-
intersectionObserver: IntersectionObserver;
|
|
8
|
-
mdeStarted: boolean;
|
|
9
|
-
addCSS(): void;
|
|
10
|
-
addJS(): Promise<void>;
|
|
11
|
-
handleResize(): void;
|
|
12
|
-
connect(): Promise<void>;
|
|
13
|
-
startMDE(): Promise<void>;
|
|
14
|
-
init(): Promise<void>;
|
|
15
|
-
isHiddenBlock(): boolean;
|
|
16
|
-
isInsideComponentBlock(): false | HTMLDivElement;
|
|
17
|
-
getCheckboxThatShowsBlock(): HTMLInputElement | null;
|
|
18
|
-
setupRefreshOnShow(): void;
|
|
19
|
-
disconnect(): void;
|
|
20
|
-
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { Controller } from "stimulus";
|
|
2
|
-
const CSS_ID = "simplemde-css";
|
|
3
|
-
const JS_ID = "simplemde-js";
|
|
4
|
-
class MarkdownTextarea extends Controller {
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
this.mdeStarted = false;
|
|
8
|
-
}
|
|
9
|
-
addCSS() {
|
|
10
|
-
const tag = document.querySelector(`head #${CSS_ID}`);
|
|
11
|
-
if (!tag) {
|
|
12
|
-
const link = document.createElement("link");
|
|
13
|
-
link.setAttribute("rel", "stylesheet");
|
|
14
|
-
link.setAttribute("type", "text/css");
|
|
15
|
-
link.setAttribute("id", CSS_ID);
|
|
16
|
-
link.setAttribute("href", "/dist/simplemde.min.css");
|
|
17
|
-
document.head.appendChild(link);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
async addJS() {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
const once_loaded = (e) => {
|
|
23
|
-
e.target.setAttribute("loaded", "true");
|
|
24
|
-
resolve();
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
const tag = document.querySelector(`head #${JS_ID}`);
|
|
28
|
-
if (!tag) {
|
|
29
|
-
const script = document.createElement("script");
|
|
30
|
-
script.setAttribute("id", JS_ID);
|
|
31
|
-
script.setAttribute("src", "/dist/simplemde.min.js");
|
|
32
|
-
script.addEventListener("load", once_loaded);
|
|
33
|
-
document.head.appendChild(script);
|
|
34
|
-
} else {
|
|
35
|
-
if (tag.getAttribute("loaded") == "true") {
|
|
36
|
-
resolve();
|
|
37
|
-
} else {
|
|
38
|
-
tag.addEventListener("load", once_loaded);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
} catch (e) {
|
|
42
|
-
reject(e);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
handleResize() {
|
|
47
|
-
this.sm.codemirror.refresh();
|
|
48
|
-
}
|
|
49
|
-
async connect() {
|
|
50
|
-
var _a, _b;
|
|
51
|
-
console.log("Markdown connect!", this.element);
|
|
52
|
-
if ((_a = this.element.parentNode) == null ? void 0 : _a.querySelector(".editor-toolbar")) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
this.addCSS();
|
|
56
|
-
await this.addJS();
|
|
57
|
-
const component_block = this.isInsideComponentBlock();
|
|
58
|
-
if (component_block) {
|
|
59
|
-
if (this.isHiddenBlock()) {
|
|
60
|
-
const handler = () => {
|
|
61
|
-
var _a2;
|
|
62
|
-
(_a2 = this.getCheckboxThatShowsBlock()) == null ? void 0 : _a2.removeEventListener(
|
|
63
|
-
"change",
|
|
64
|
-
handler
|
|
65
|
-
);
|
|
66
|
-
setTimeout(() => this.init(), 1);
|
|
67
|
-
};
|
|
68
|
-
(_b = this.getCheckboxThatShowsBlock()) == null ? void 0 : _b.addEventListener(
|
|
69
|
-
"change",
|
|
70
|
-
handler
|
|
71
|
-
);
|
|
72
|
-
} else {
|
|
73
|
-
await this.init();
|
|
74
|
-
}
|
|
75
|
-
} else {
|
|
76
|
-
await this.init();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async startMDE() {
|
|
80
|
-
if (this.mdeStarted) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this.sm = new SimpleMDE({
|
|
84
|
-
element: this.element,
|
|
85
|
-
autoDownloadFontAwesome: false,
|
|
86
|
-
spellChecker: false,
|
|
87
|
-
hideIcons: ["image", "preview", "side-by-side"],
|
|
88
|
-
status: ["words"],
|
|
89
|
-
autosave: { enabled: false },
|
|
90
|
-
forceSync: true,
|
|
91
|
-
initialValue: this.element.value
|
|
92
|
-
});
|
|
93
|
-
this.sm.codemirror.on("change", () => {
|
|
94
|
-
this.element.dispatchEvent(new Event("input"));
|
|
95
|
-
});
|
|
96
|
-
this.setupRefreshOnShow();
|
|
97
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
98
|
-
this.sm.codemirror.refresh();
|
|
99
|
-
});
|
|
100
|
-
const wrapper = this.sm.element.closest(
|
|
101
|
-
".grow-wrap"
|
|
102
|
-
);
|
|
103
|
-
this.resizeObserver.observe(wrapper);
|
|
104
|
-
document.addEventListener(
|
|
105
|
-
"turbo:before-morph-element",
|
|
106
|
-
function(event) {
|
|
107
|
-
const target = event.target;
|
|
108
|
-
if (target == wrapper && event.detail.newElement !== void 0) {
|
|
109
|
-
event.preventDefault();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
this.mdeStarted = true;
|
|
114
|
-
}
|
|
115
|
-
async init() {
|
|
116
|
-
this.intersectionObserver = new IntersectionObserver(
|
|
117
|
-
(entries) => {
|
|
118
|
-
entries.forEach((entry) => {
|
|
119
|
-
if (entry.intersectionRatio > 0.2) {
|
|
120
|
-
void this.startMDE();
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
root: this.element.closest(".component-arguments"),
|
|
126
|
-
rootMargin: "0px",
|
|
127
|
-
threshold: 0.25
|
|
128
|
-
}
|
|
129
|
-
);
|
|
130
|
-
this.intersectionObserver.observe(this.element);
|
|
131
|
-
}
|
|
132
|
-
isHiddenBlock() {
|
|
133
|
-
var _a;
|
|
134
|
-
return !((_a = this.getCheckboxThatShowsBlock()) == null ? void 0 : _a.checked);
|
|
135
|
-
}
|
|
136
|
-
isInsideComponentBlock() {
|
|
137
|
-
return this.element.closest(".jdd-editor__component-block");
|
|
138
|
-
}
|
|
139
|
-
getCheckboxThatShowsBlock() {
|
|
140
|
-
const block = this.isInsideComponentBlock();
|
|
141
|
-
if (!block) {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
144
|
-
return block.querySelector(".component-collapse-toggle");
|
|
145
|
-
}
|
|
146
|
-
setupRefreshOnShow() {
|
|
147
|
-
var _a;
|
|
148
|
-
this.checkboxHandler = (e) => {
|
|
149
|
-
const target = e.target;
|
|
150
|
-
if (target.checked) {
|
|
151
|
-
this.sm.codemirror.refresh();
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
(_a = this.getCheckboxThatShowsBlock()) == null ? void 0 : _a.addEventListener(
|
|
155
|
-
"change",
|
|
156
|
-
this.checkboxHandler
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
disconnect() {
|
|
160
|
-
var _a, _b, _c;
|
|
161
|
-
console.log("disconnecting", this.element);
|
|
162
|
-
(_a = this.getCheckboxThatShowsBlock()) == null ? void 0 : _a.removeEventListener(
|
|
163
|
-
"change",
|
|
164
|
-
this.checkboxHandler
|
|
165
|
-
);
|
|
166
|
-
(_b = this.element.closest(".grow-wrap")) == null ? void 0 : _b.removeAttribute("data-turbo-permanent");
|
|
167
|
-
(_c = this.resizeObserver) == null ? void 0 : _c.unobserve(this.sm.element);
|
|
168
|
-
this.sm.toTextArea();
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
export {
|
|
172
|
-
MarkdownTextarea as default
|
|
173
|
-
};
|
|
174
|
-
//# sourceMappingURL=markdown-textarea.stimulus.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/controllers/markdown-textarea.stimulus.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-misused-promises */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Controller } from \"stimulus\";\nimport type { default as simplemde } from \"simplemde\";\n\nconst CSS_ID = \"simplemde-css\";\nconst JS_ID = \"simplemde-js\";\n\ndeclare const SimpleMDE: simplemde;\n\nexport default class MarkdownTextarea extends Controller<HTMLTextAreaElement> {\n\tsm: simplemde;\n\tcheckboxHandler: (this: HTMLElement, ev: Event) => any;\n\tresizeObserver: ResizeObserver;\n\tintersectionObserver: IntersectionObserver;\n\tmdeStarted = false;\n\n\taddCSS() {\n\t\tconst tag = document.querySelector(`head #${CSS_ID}`);\n\t\tif (!tag) {\n\t\t\tconst link = document.createElement(\"link\");\n\t\t\tlink.setAttribute(\"rel\", \"stylesheet\");\n\t\t\tlink.setAttribute(\"type\", \"text/css\");\n\t\t\tlink.setAttribute(\"id\", CSS_ID);\n\t\t\tlink.setAttribute(\"href\", \"/dist/simplemde.min.css\");\n\t\t\tdocument.head.appendChild(link);\n\t\t}\n\t}\n\n\tasync addJS() {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst once_loaded = (e: MouseEvent) => {\n\t\t\t\t(e.target as HTMLScriptElement).setAttribute(\"loaded\", \"true\");\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst tag = document.querySelector(`head #${JS_ID}`);\n\t\t\t\tif (!tag) {\n\t\t\t\t\tconst script = document.createElement(\"script\");\n\t\t\t\t\tscript.setAttribute(\"id\", JS_ID);\n\t\t\t\t\tscript.setAttribute(\"src\", \"/dist/simplemde.min.js\");\n\t\t\t\t\tscript.addEventListener(\"load\", once_loaded);\n\t\t\t\t\tdocument.head.appendChild(script);\n\t\t\t\t} else {\n\t\t\t\t\tif (tag.getAttribute(\"loaded\") == \"true\") {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttag.addEventListener(\"load\", once_loaded);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treject(e);\n\t\t\t}\n\t\t});\n\t}\n\n\thandleResize() {\n\t\tthis.sm.codemirror.refresh();\n\t}\n\n\tasync connect() {\n\t\tconsole.log(\"Markdown connect!\", this.element);\n\t\tif (this.element.parentNode?.querySelector(\".editor-toolbar\")) {\n\t\t\t//already loaded, quit;\n\t\t\treturn;\n\t\t}\n\t\tthis.addCSS();\n\t\tawait this.addJS();\n\t\tconst component_block = this.isInsideComponentBlock();\n\n\t\t// some offloading of starting the MDE, because it is slow on Chrome\n\t\tif (component_block) {\n\t\t\tif (this.isHiddenBlock()) {\n\t\t\t\tconst handler = () => {\n\t\t\t\t\tthis.getCheckboxThatShowsBlock()?.removeEventListener(\n\t\t\t\t\t\t\"change\",\n\t\t\t\t\t\thandler\n\t\t\t\t\t);\n\t\t\t\t\tsetTimeout(() => this.init(), 1);\n\t\t\t\t};\n\t\t\t\tthis.getCheckboxThatShowsBlock()?.addEventListener(\n\t\t\t\t\t\"change\",\n\t\t\t\t\thandler\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tawait this.init();\n\t\t\t}\n\t\t} else {\n\t\t\tawait this.init();\n\t\t}\n\t}\n\n\tasync startMDE() {\n\t\tif (this.mdeStarted) {\n\t\t\treturn;\n\t\t}\n\t\tthis.sm = new (SimpleMDE as any)({\n\t\t\telement: this.element,\n\t\t\tautoDownloadFontAwesome: false,\n\t\t\tspellChecker: false,\n\t\t\thideIcons: [\"image\", \"preview\", \"side-by-side\"],\n\t\t\tstatus: [\"words\"],\n\t\t\tautosave: { enabled: false },\n\t\t\tforceSync: true, // for autosubmit to work\n\t\t\tinitialValue: this.element.value,\n\t\t}) as simplemde;\n\t\t// this.element.closest(\".grow-wrap\").setAttribute(\"data-turbo-permanent\", \"\");\n\t\tthis.sm.codemirror.on(\"change\", () => {\n\t\t\tthis.element.dispatchEvent(new Event(\"input\"));\n\t\t});\n\t\tthis.setupRefreshOnShow();\n\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\tthis.sm.codemirror.refresh();\n\t\t});\n\t\tconst wrapper = (this.sm as any).element.closest(\n\t\t\t\".grow-wrap\"\n\t\t) as HTMLDivElement;\n\t\tthis.resizeObserver.observe(wrapper);\n\t\tdocument.addEventListener(\n\t\t\t\"turbo:before-morph-element\",\n\t\t\tfunction (event: BeforeUnloadEvent) {\n\t\t\t\tconst target = event.target as HTMLDivElement;\n\t\t\t\t// disallow morphing, but allow removing\n\t\t\t\tif (\n\t\t\t\t\ttarget == wrapper &&\n\t\t\t\t\t(event as any).detail.newElement !== undefined\n\t\t\t\t) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\tthis.mdeStarted = true;\n\t}\n\n\tasync init() {\n\t\tthis.intersectionObserver = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tif (entry.intersectionRatio > 0.2) {\n\t\t\t\t\t\tvoid this.startMDE();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: this.element.closest(\".component-arguments\"),\n\t\t\t\trootMargin: \"0px\",\n\t\t\t\tthreshold: 0.25,\n\t\t\t}\n\t\t);\n\t\tthis.intersectionObserver.observe(this.element);\n\t}\n\n\tisHiddenBlock() {\n\t\treturn !this.getCheckboxThatShowsBlock()?.checked;\n\t}\n\n\tisInsideComponentBlock(): false | HTMLDivElement {\n\t\treturn this.element.closest(\".jdd-editor__component-block\") as\n\t\t\t| HTMLDivElement\n\t\t\t| false;\n\t}\n\n\tgetCheckboxThatShowsBlock(): HTMLInputElement | null {\n\t\tconst block = this.isInsideComponentBlock();\n\t\tif (!block) {\n\t\t\treturn null;\n\t\t}\n\t\treturn block.querySelector(\".component-collapse-toggle\");\n\t}\n\n\tsetupRefreshOnShow() {\n\t\tthis.checkboxHandler = (e) => {\n\t\t\tconst target = e.target as HTMLInputElement;\n\t\t\tif (target.checked) {\n\t\t\t\tthis.sm.codemirror.refresh();\n\t\t\t}\n\t\t};\n\t\tthis.getCheckboxThatShowsBlock()?.addEventListener(\n\t\t\t\"change\",\n\t\t\tthis.checkboxHandler\n\t\t);\n\t}\n\n\tdisconnect() {\n\t\tconsole.log(\"disconnecting\", this.element);\n\t\tthis.getCheckboxThatShowsBlock()?.removeEventListener(\n\t\t\t\"change\",\n\t\t\tthis.checkboxHandler\n\t\t);\n\t\tthis.element\n\t\t\t.closest(\".grow-wrap\")\n\t\t\t?.removeAttribute(\"data-turbo-permanent\");\n\t\tthis.resizeObserver?.unobserve((this.sm as any).element as HTMLElement);\n\t\tthis.sm.toTextArea();\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["_a"]
|
|
7
|
-
}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-misused-promises */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
-
import { Controller } from "stimulus";
|
|
6
|
-
import type { default as simplemde } from "simplemde";
|
|
7
|
-
|
|
8
|
-
const CSS_ID = "simplemde-css";
|
|
9
|
-
const JS_ID = "simplemde-js";
|
|
10
|
-
|
|
11
|
-
declare const SimpleMDE: simplemde;
|
|
12
|
-
|
|
13
|
-
export default class MarkdownTextarea extends Controller<HTMLTextAreaElement> {
|
|
14
|
-
sm: simplemde;
|
|
15
|
-
checkboxHandler: (this: HTMLElement, ev: Event) => any;
|
|
16
|
-
resizeObserver: ResizeObserver;
|
|
17
|
-
intersectionObserver: IntersectionObserver;
|
|
18
|
-
mdeStarted = false;
|
|
19
|
-
|
|
20
|
-
addCSS() {
|
|
21
|
-
const tag = document.querySelector(`head #${CSS_ID}`);
|
|
22
|
-
if (!tag) {
|
|
23
|
-
const link = document.createElement("link");
|
|
24
|
-
link.setAttribute("rel", "stylesheet");
|
|
25
|
-
link.setAttribute("type", "text/css");
|
|
26
|
-
link.setAttribute("id", CSS_ID);
|
|
27
|
-
link.setAttribute("href", "/dist/simplemde.min.css");
|
|
28
|
-
document.head.appendChild(link);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async addJS() {
|
|
33
|
-
return new Promise<void>((resolve, reject) => {
|
|
34
|
-
const once_loaded = (e: MouseEvent) => {
|
|
35
|
-
(e.target as HTMLScriptElement).setAttribute("loaded", "true");
|
|
36
|
-
resolve();
|
|
37
|
-
};
|
|
38
|
-
try {
|
|
39
|
-
const tag = document.querySelector(`head #${JS_ID}`);
|
|
40
|
-
if (!tag) {
|
|
41
|
-
const script = document.createElement("script");
|
|
42
|
-
script.setAttribute("id", JS_ID);
|
|
43
|
-
script.setAttribute("src", "/dist/simplemde.min.js");
|
|
44
|
-
script.addEventListener("load", once_loaded);
|
|
45
|
-
document.head.appendChild(script);
|
|
46
|
-
} else {
|
|
47
|
-
if (tag.getAttribute("loaded") == "true") {
|
|
48
|
-
resolve();
|
|
49
|
-
} else {
|
|
50
|
-
tag.addEventListener("load", once_loaded);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} catch (e) {
|
|
54
|
-
reject(e);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
handleResize() {
|
|
60
|
-
this.sm.codemirror.refresh();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
async connect() {
|
|
64
|
-
console.log("Markdown connect!", this.element);
|
|
65
|
-
if (this.element.parentNode?.querySelector(".editor-toolbar")) {
|
|
66
|
-
//already loaded, quit;
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
this.addCSS();
|
|
70
|
-
await this.addJS();
|
|
71
|
-
const component_block = this.isInsideComponentBlock();
|
|
72
|
-
|
|
73
|
-
// some offloading of starting the MDE, because it is slow on Chrome
|
|
74
|
-
if (component_block) {
|
|
75
|
-
if (this.isHiddenBlock()) {
|
|
76
|
-
const handler = () => {
|
|
77
|
-
this.getCheckboxThatShowsBlock()?.removeEventListener(
|
|
78
|
-
"change",
|
|
79
|
-
handler
|
|
80
|
-
);
|
|
81
|
-
setTimeout(() => this.init(), 1);
|
|
82
|
-
};
|
|
83
|
-
this.getCheckboxThatShowsBlock()?.addEventListener(
|
|
84
|
-
"change",
|
|
85
|
-
handler
|
|
86
|
-
);
|
|
87
|
-
} else {
|
|
88
|
-
await this.init();
|
|
89
|
-
}
|
|
90
|
-
} else {
|
|
91
|
-
await this.init();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async startMDE() {
|
|
96
|
-
if (this.mdeStarted) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
this.sm = new (SimpleMDE as any)({
|
|
100
|
-
element: this.element,
|
|
101
|
-
autoDownloadFontAwesome: false,
|
|
102
|
-
spellChecker: false,
|
|
103
|
-
hideIcons: ["image", "preview", "side-by-side"],
|
|
104
|
-
status: ["words"],
|
|
105
|
-
autosave: { enabled: false },
|
|
106
|
-
forceSync: true, // for autosubmit to work
|
|
107
|
-
initialValue: this.element.value,
|
|
108
|
-
}) as simplemde;
|
|
109
|
-
// this.element.closest(".grow-wrap").setAttribute("data-turbo-permanent", "");
|
|
110
|
-
this.sm.codemirror.on("change", () => {
|
|
111
|
-
this.element.dispatchEvent(new Event("input"));
|
|
112
|
-
});
|
|
113
|
-
this.setupRefreshOnShow();
|
|
114
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
115
|
-
this.sm.codemirror.refresh();
|
|
116
|
-
});
|
|
117
|
-
const wrapper = (this.sm as any).element.closest(
|
|
118
|
-
".grow-wrap"
|
|
119
|
-
) as HTMLDivElement;
|
|
120
|
-
this.resizeObserver.observe(wrapper);
|
|
121
|
-
document.addEventListener(
|
|
122
|
-
"turbo:before-morph-element",
|
|
123
|
-
function (event: BeforeUnloadEvent) {
|
|
124
|
-
const target = event.target as HTMLDivElement;
|
|
125
|
-
// disallow morphing, but allow removing
|
|
126
|
-
if (
|
|
127
|
-
target == wrapper &&
|
|
128
|
-
(event as any).detail.newElement !== undefined
|
|
129
|
-
) {
|
|
130
|
-
event.preventDefault();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
);
|
|
134
|
-
this.mdeStarted = true;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
async init() {
|
|
138
|
-
this.intersectionObserver = new IntersectionObserver(
|
|
139
|
-
(entries) => {
|
|
140
|
-
entries.forEach((entry) => {
|
|
141
|
-
if (entry.intersectionRatio > 0.2) {
|
|
142
|
-
void this.startMDE();
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
root: this.element.closest(".component-arguments"),
|
|
148
|
-
rootMargin: "0px",
|
|
149
|
-
threshold: 0.25,
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
this.intersectionObserver.observe(this.element);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
isHiddenBlock() {
|
|
156
|
-
return !this.getCheckboxThatShowsBlock()?.checked;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
isInsideComponentBlock(): false | HTMLDivElement {
|
|
160
|
-
return this.element.closest(".jdd-editor__component-block") as
|
|
161
|
-
| HTMLDivElement
|
|
162
|
-
| false;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
getCheckboxThatShowsBlock(): HTMLInputElement | null {
|
|
166
|
-
const block = this.isInsideComponentBlock();
|
|
167
|
-
if (!block) {
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
return block.querySelector(".component-collapse-toggle");
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
setupRefreshOnShow() {
|
|
174
|
-
this.checkboxHandler = (e) => {
|
|
175
|
-
const target = e.target as HTMLInputElement;
|
|
176
|
-
if (target.checked) {
|
|
177
|
-
this.sm.codemirror.refresh();
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
this.getCheckboxThatShowsBlock()?.addEventListener(
|
|
181
|
-
"change",
|
|
182
|
-
this.checkboxHandler
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
disconnect() {
|
|
187
|
-
console.log("disconnecting", this.element);
|
|
188
|
-
this.getCheckboxThatShowsBlock()?.removeEventListener(
|
|
189
|
-
"change",
|
|
190
|
-
this.checkboxHandler
|
|
191
|
-
);
|
|
192
|
-
this.element
|
|
193
|
-
.closest(".grow-wrap")
|
|
194
|
-
?.removeAttribute("data-turbo-permanent");
|
|
195
|
-
this.resizeObserver?.unobserve((this.sm as any).element as HTMLElement);
|
|
196
|
-
this.sm.toTextArea();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
File without changes
|
|
File without changes
|