Skip to content

Commit e1800d7

Browse files
committed
添加数学公式粘贴到知乎编辑器
1 parent 4823e04 commit e1800d7

File tree

4 files changed

+42
-43
lines changed

4 files changed

+42
-43
lines changed

src/App.js

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,16 @@ class App extends Component {
4242
options: {
4343
renderActions: {
4444
addMenu: [0, "", ""],
45-
},
46-
},
47-
startup: {
48-
ready: () => {
49-
window.MathJax.startup.defaultReady();
50-
window.MathJax.startup.promise.then(() => {
51-
const element = document.getElementById(LAYOUT_ID);
52-
let html = element.innerHTML;
53-
html = html.replace(
54-
/<mjx-container.+?display.+?>(.+?)<\/mjx-container>/g,
55-
'<section class="block-equation">$1</section>',
56-
);
57-
html = html.replace(
58-
/<mjx-container.+?>(.+?)<\/mjx-container>/g,
59-
'<span class="inline-equation">$1</span>',
60-
);
61-
element.innerHTML = html;
62-
});
45+
addContainer: [
46+
190,
47+
(doc) => {
48+
for (const math of doc.math) {
49+
const cls = math.display ? "block-equation" : "inline-equation";
50+
math.typesetRoot.className = cls;
51+
math.typesetRoot.setAttribute("data", math.math);
52+
}
53+
},
54+
],
6355
},
6456
},
6557
};

src/component/Copy.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, {Component} from "react";
22
import {observer, inject} from "mobx-react";
33
import {Button, message, ConfigProvider} from "antd";
44

5-
import {solveMath, solveHtml, copySafari} from "../utils/converter";
5+
import {solveWeChatMath, solveZhihuMath, solveHtml, copySafari} from "../utils/converter";
66

77
@inject("content")
88
@inject("navbar")
@@ -20,7 +20,8 @@ class Copy extends Component {
2020

2121
copy = () => {
2222
this.setState({loading: true});
23-
solveMath();
23+
solveZhihuMath();
24+
// solveWeChatMath();
2425
this.html = solveHtml();
2526
// FIXED: safari 复制问题
2627
copySafari(this.html);

src/utils/converter.js

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@ import juice from "juice";
22
import {message} from "antd";
33
import {BASIC_THEME_ID, CODE_THEME_ID, MARKDOWN_THEME_ID, LAYOUT_ID} from "./constant";
44

5-
export const solveMath = () => {
5+
export const solveWeChatMath = () => {
66
const layout = document.getElementById(LAYOUT_ID);
7-
const svgArr = layout.getElementsByTagName("svg");
8-
for (let i = 0; i < svgArr.length; i++) {
9-
const svg = svgArr[i];
10-
if (!svg.hasAttribute("style")) {
11-
continue;
7+
const mjxs = layout.getElementsByTagName("mjx-container");
8+
for (let i = 0; i < mjxs.length; i++) {
9+
const mjx = mjxs[i];
10+
if (!mjx.hasAttribute("data")) {
11+
break;
1212
}
1313

14+
mjx.removeAttribute("data");
15+
mjx.removeAttribute("jax");
16+
mjx.removeAttribute("display");
17+
mjx.removeAttribute("tabindex");
18+
mjx.removeAttribute("ctxtmenu_counter");
19+
const svg = mjx.firstChild;
1420
const width = svg.getAttribute("width");
15-
if (width === null) {
16-
break;
17-
}
1821
const height = svg.getAttribute("height");
1922
svg.removeAttribute("width");
2023
svg.removeAttribute("height");
@@ -23,11 +26,25 @@ export const solveMath = () => {
2326
}
2427
};
2528

29+
export const solveZhihuMath = () => {
30+
const layout = document.getElementById(LAYOUT_ID);
31+
const mjxs = layout.getElementsByTagName("mjx-container");
32+
for (let i = 0; i < mjxs.length; i++) {
33+
const mjx = mjxs[i];
34+
const data = mjx.getAttribute("data");
35+
if (!data) {
36+
continue;
37+
}
38+
39+
mjx.innerHTML = '<img class="Formula-image" data-eeimg="true" src="" alt="' + data + '">';
40+
}
41+
};
42+
2643
export const solveHtml = () => {
2744
const element = document.getElementById("wx-box");
2845
let html = element.innerHTML;
29-
html = html.replace(/\s<span class="inline/g, '&nbsp;<span class="inline');
30-
html = html.replace(/svg><\/span>\s/g, "svg></span>&nbsp;");
46+
html = html.replace(/\s<mjx-container class="inline/g, '&nbsp;<mjx-container class="inline');
47+
html = html.replace(/svg><\/mjx-container>\s/g, "svg></mjx-container>&nbsp;");
3148
const basicStyle = document.getElementById(BASIC_THEME_ID).innerText;
3249
const markdownStyle = document.getElementById(MARKDOWN_THEME_ID).innerText;
3350
const codeStyle = document.getElementById(CODE_THEME_ID).innerText;

src/utils/helper.js

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -267,16 +267,5 @@ export const addStyleLabel = (styleLabels) => {
267267
export const updateMathjax = () => {
268268
window.MathJax.texReset();
269269
window.MathJax.typesetClear();
270-
window.MathJax.typesetPromise()
271-
.then(() => {
272-
const element = document.getElementById(LAYOUT_ID);
273-
let html = element.innerHTML;
274-
html = html.replace(
275-
/<mjx-container.+?display.+?>(.+?)<\/mjx-container>/g,
276-
'<section class="block-equation">$1</section>',
277-
);
278-
html = html.replace(/<mjx-container.+?>(.+?)<\/mjx-container>/g, '<span class="inline-equation">$1</span>');
279-
element.innerHTML = html;
280-
})
281-
.catch((err) => console.log(err.message));
270+
window.MathJax.typesetPromise();
282271
};

0 commit comments

Comments
 (0)