feat: allow to copy math-jax as tex from github iframe ipynb
This commit is contained in:
parent
810fc1998b
commit
4decc34c6e
31
package-lock.json
generated
31
package-lock.json
generated
@ -16,6 +16,7 @@
|
||||
"css": "^3.0.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"marked": "^4.2.5",
|
||||
"mathml-to-latex": "^1.2.0",
|
||||
"nanoid": "^4.0.0",
|
||||
"openpgp": "^5.5.0",
|
||||
"prosemirror-commands": "^1.3.1",
|
||||
@ -14425,6 +14426,14 @@
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/mathml-to-latex": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mathml-to-latex/-/mathml-to-latex-1.2.0.tgz",
|
||||
"integrity": "sha512-AgwKE5vYJItWsi7qrzzxD8h+YUbv/FH1p1XOs/v/pVFUXHaK+GQZvrU8h7LYmkkfM97zFIPfbWrXJT4Qowykug==",
|
||||
"dependencies": {
|
||||
"xmldom": "^0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mdn-data": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
|
||||
@ -16216,6 +16225,15 @@
|
||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/xmldom": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz",
|
||||
"integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==",
|
||||
"deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/xxhash-wasm": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
|
||||
@ -25311,6 +25329,14 @@
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-4.2.5.tgz",
|
||||
"integrity": "sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ=="
|
||||
},
|
||||
"mathml-to-latex": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mathml-to-latex/-/mathml-to-latex-1.2.0.tgz",
|
||||
"integrity": "sha512-AgwKE5vYJItWsi7qrzzxD8h+YUbv/FH1p1XOs/v/pVFUXHaK+GQZvrU8h7LYmkkfM97zFIPfbWrXJT4Qowykug==",
|
||||
"requires": {
|
||||
"xmldom": "^0.4.0"
|
||||
}
|
||||
},
|
||||
"mdn-data": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
|
||||
@ -26640,6 +26666,11 @@
|
||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"xmldom": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz",
|
||||
"integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA=="
|
||||
},
|
||||
"xxhash-wasm": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
|
||||
|
@ -59,6 +59,7 @@
|
||||
"css": "^3.0.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"marked": "^4.2.5",
|
||||
"mathml-to-latex": "^1.2.0",
|
||||
"nanoid": "^4.0.0",
|
||||
"openpgp": "^5.5.0",
|
||||
"prosemirror-commands": "^1.3.1",
|
||||
|
@ -15,6 +15,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { HtmlComponent } from '../../../../common/model/html.model';
|
||||
import MathMLToLaTeX from 'mathml-to-latex';
|
||||
import { PinComponent } from '../../pin.component';
|
||||
import { applyStylesToElement } from '../../../../common/style.utils';
|
||||
import { fnConsoleLog } from '../../../../common/fn/console.fn';
|
||||
@ -38,6 +39,13 @@ export class ActionCopyButton implements HtmlComponent<HTMLElement> {
|
||||
this.el.removeEventListener('click', this.handleClick);
|
||||
}
|
||||
|
||||
private findMathJaxParent = (ref: HTMLElement): HTMLElement => {
|
||||
if (ref.parentElement && ref.parentElement.tagName.startsWith('MJX-')) {
|
||||
return this.findMathJaxParent(ref.parentElement);
|
||||
}
|
||||
return ref;
|
||||
};
|
||||
|
||||
private handleClick = () => {
|
||||
let text = '';
|
||||
const clipboardCopy = this.parent.ref.getElementsByTagName('clipboard-copy');
|
||||
@ -47,11 +55,20 @@ export class ActionCopyButton implements HtmlComponent<HTMLElement> {
|
||||
if (!text && this.parent.ref.tagName === 'IMG') {
|
||||
text = this.parent.ref.getAttribute('alt') || '';
|
||||
}
|
||||
// Support for math-jax copy as tex inside iframe
|
||||
// Sample url https://github.com/mholtrop/QMPython/blob/master/Solving_the_Schrodinger_Equation_Numerically.ipynb
|
||||
if (this.parent.ref.tagName.startsWith('MJX-')) {
|
||||
// find mathjax and then find math tag inside it
|
||||
const mathJaxContainer = this.findMathJaxParent(this.parent.ref);
|
||||
const mathTag = mathJaxContainer.getElementsByTagName('math')[0];
|
||||
if (mathTag?.parentElement) {
|
||||
text = MathMLToLaTeX.convert(mathTag.parentElement.innerHTML);
|
||||
}
|
||||
}
|
||||
if (!text) {
|
||||
text = this.parent.ref.innerText.replaceAll('\u00a0', ' ');
|
||||
}
|
||||
// window.navigator.clipboard not working in iframe :/
|
||||
// TODO
|
||||
const copyFn = (event: ClipboardEvent) => {
|
||||
fnConsoleLog('COPY FN', event.clipboardData, 'text :', text, 'ref', this.parent.ref);
|
||||
event.preventDefault();
|
||||
|
Loading…
Reference in New Issue
Block a user