zenn-embed-elements 0.1.101 → 0.1.103-alpha.1
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/lib/classes/katex.js +3 -2
- package/lib/classes/mermaid.d.ts +3 -4
- package/lib/classes/mermaid.js +40 -23
- package/package.json +2 -2
package/lib/classes/katex.js
CHANGED
|
@@ -27,7 +27,6 @@ class EmbedKatex extends HTMLElement {
|
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
render() {
|
|
30
|
-
var _a;
|
|
31
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
31
|
if (typeof katex === 'undefined') {
|
|
33
32
|
yield load_script_1.loadScript({
|
|
@@ -41,7 +40,9 @@ class EmbedKatex extends HTMLElement {
|
|
|
41
40
|
id: `katex-css`,
|
|
42
41
|
});
|
|
43
42
|
const displayMode = !!this.getAttribute('display-mode');
|
|
44
|
-
|
|
43
|
+
// detailsタグの中ではinnerTextがnullになることがあるため
|
|
44
|
+
const content = this.textContent || this.innerText;
|
|
45
|
+
katex === null || katex === void 0 ? void 0 : katex.render(content, this._container, {
|
|
45
46
|
macros: { '\\RR': '\\mathbb{R}' },
|
|
46
47
|
throwOnError: false,
|
|
47
48
|
displayMode,
|
package/lib/classes/mermaid.d.ts
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* original: https://github.com/gitlabhq/gitlabhq/blob/master/app/assets/javascripts/behaviors/markdown/render_mermaid.js
|
|
3
3
|
*/
|
|
4
4
|
export declare class EmbedMermaid extends HTMLElement {
|
|
5
|
-
private
|
|
6
|
-
private
|
|
7
|
-
private readonly _svgContainer;
|
|
8
|
-
constructor();
|
|
5
|
+
private observer?;
|
|
6
|
+
private _tmpContainer?;
|
|
9
7
|
connectedCallback(): Promise<void>;
|
|
8
|
+
disconnectedCallback(): void;
|
|
10
9
|
render(): Promise<void>;
|
|
11
10
|
}
|
package/lib/classes/mermaid.js
CHANGED
|
@@ -95,37 +95,51 @@ function getPotentialPerformanceRisk(source) {
|
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
class EmbedMermaid extends HTMLElement {
|
|
98
|
-
constructor() {
|
|
99
|
-
super();
|
|
100
|
-
// コード記述が格納されている pre タグを取得
|
|
101
|
-
// できるだけコードがちらつかないようにインスタンス変数に入れて削除してしまう
|
|
102
|
-
// パフォーマンスのために削除しているが、「コードをコピペしたい」みたいな話がでてきたときは残してHiddenにする
|
|
103
|
-
const sourceContainer = this.childNodes[0];
|
|
104
|
-
this._source = sourceContainer.innerText || '';
|
|
105
|
-
sourceContainer.remove();
|
|
106
|
-
// 一時コンテナ
|
|
107
|
-
const tmpContainer = document.createElement('div');
|
|
108
|
-
this.appendChild(tmpContainer);
|
|
109
|
-
this._tmpContainer = tmpContainer;
|
|
110
|
-
// 描画後のSVGを格納する div タグを作成
|
|
111
|
-
const container = document.createElement('div');
|
|
112
|
-
this.appendChild(container);
|
|
113
|
-
this._svgContainer = container;
|
|
114
|
-
}
|
|
115
98
|
connectedCallback() {
|
|
116
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
|
|
100
|
+
// 一時コンテナ
|
|
101
|
+
const tmpContainer = document.createElement('div');
|
|
102
|
+
this.appendChild(tmpContainer);
|
|
103
|
+
this._tmpContainer = tmpContainer;
|
|
104
|
+
// 以下の理由からmermaidのレンダリングを遅延する
|
|
105
|
+
// - パフォーマンスのため
|
|
106
|
+
// - Safariでdetailsタグ内のmermaid.jsがうまくレンダリングされないため
|
|
107
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
108
|
+
entries.forEach((entry) => {
|
|
109
|
+
var _a;
|
|
110
|
+
if (entry.isIntersecting) {
|
|
111
|
+
this.render();
|
|
112
|
+
if (!this._tmpContainer) {
|
|
113
|
+
console.error('Something wrong with _tmpContainer');
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
(_a = this.observer) === null || _a === void 0 ? void 0 : _a.unobserve(this._tmpContainer); // 一度レンダリングされたらobserveを解除する
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}, { rootMargin: '1000px 0px' } // 手前で発火
|
|
120
|
+
);
|
|
121
|
+
this._tmpContainer && this.observer.observe(this._tmpContainer);
|
|
118
122
|
});
|
|
119
123
|
}
|
|
124
|
+
disconnectedCallback() {
|
|
125
|
+
// observeを解除
|
|
126
|
+
if (this.observer) {
|
|
127
|
+
this._tmpContainer && this.observer.unobserve(this._tmpContainer);
|
|
128
|
+
this.observer.disconnect();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
120
131
|
render() {
|
|
121
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
122
133
|
yield initMermaid();
|
|
134
|
+
const content = this.textContent || this.innerText;
|
|
123
135
|
// Mermaid モジュールの読み込みに失敗したり、レンダリング対象のコンテンツが空の場合は何もせずに終了
|
|
124
|
-
if (!
|
|
136
|
+
if (!content)
|
|
125
137
|
return;
|
|
126
|
-
|
|
138
|
+
// 図だけを表示するためにコードは非表示に
|
|
139
|
+
const sourceContainer = this.childNodes[0];
|
|
140
|
+
sourceContainer.setAttribute('style', 'display:none');
|
|
127
141
|
// 文法エラーやパフォーマンスリスクが検出された場合、注意書きをレンダリングして終了
|
|
128
|
-
const risk = getPotentialPerformanceRisk(
|
|
142
|
+
const risk = getPotentialPerformanceRisk(content);
|
|
129
143
|
if (Object.values(risk)
|
|
130
144
|
.map((r) => r.yes)
|
|
131
145
|
.includes(true)) {
|
|
@@ -148,9 +162,12 @@ class EmbedMermaid extends HTMLElement {
|
|
|
148
162
|
// https://github.com/mermaidjs/mermaid-gitbook/blob/master/content/usage.md#binding-events
|
|
149
163
|
// ここを参考に追加する
|
|
150
164
|
const insert = (svgCode) => {
|
|
151
|
-
|
|
165
|
+
// 描画後のSVGを格納する div タグを作成
|
|
166
|
+
const container = document.createElement('div');
|
|
167
|
+
this.appendChild(container);
|
|
168
|
+
container.innerHTML = svgCode;
|
|
152
169
|
};
|
|
153
|
-
mermaid === null || mermaid === void 0 ? void 0 : mermaid.mermaidAPI.render(`${containerId}-${Date.now().valueOf()}-render`,
|
|
170
|
+
mermaid === null || mermaid === void 0 ? void 0 : mermaid.mermaidAPI.render(`${containerId}-${Date.now().valueOf()}-render`, content, insert, this._tmpContainer);
|
|
154
171
|
});
|
|
155
172
|
}
|
|
156
173
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zenn-embed-elements",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.103-alpha.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Web components for embedded contents.",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"rimraf": "^3.0.2",
|
|
29
29
|
"typescript": "^3.9.3"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "fbc22a3bd78996526bedf97899c945c841e60ff1",
|
|
32
32
|
"publishConfig": {
|
|
33
33
|
"access": "public"
|
|
34
34
|
}
|