mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-05 19:28:39 +00:00
* Stop throwing ParseError when throwOnError is false `render`, `renderToString`, etc. now catch ParseError and render it to the raw LaTeX (with proper escaping) and a hover title with the error. Along the way: * Use new `katex.__renderToDomTree` in katex-spec's `_getBuilt`. (This was necessary to get the new error handling in `_getBuilt`.) * Fix jest results which must always be functions, not strings. * fix lint * Fix flow error Leave error type unspecified, as we check it with instanceof. * Update katex-spec.js
89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
/* eslint no-console:0 */
|
|
/**
|
|
* This is the webpack entry point for the test page.
|
|
*/
|
|
import katex from '../katex.webpack.js';
|
|
import './main.css';
|
|
import queryString from 'query-string';
|
|
|
|
function init() {
|
|
const input = document.getElementById("input");
|
|
let math = document.getElementById("math");
|
|
const permalink = document.getElementById("permalink");
|
|
|
|
input.addEventListener("input", reprocess, false);
|
|
permalink.addEventListener("click", setSearch);
|
|
|
|
const options = {displayMode: true, throwOnError: false, macros: {}};
|
|
const query = queryString.parse(window.location.search);
|
|
|
|
if (query.text) {
|
|
input.value = query.text;
|
|
}
|
|
|
|
// Use `display=0` or `displayMode=0` (or `=f`/`=false`/`=n`/`=no`)
|
|
// to turn off displayMode (which is on by default).
|
|
const displayQuery = (query.displayMode || query.display);
|
|
if (displayQuery && displayQuery.match(/^(0|f|n)/)) {
|
|
options.displayMode = false;
|
|
}
|
|
|
|
// The `before` or `pre` search parameter puts normal text before the math.
|
|
// The `after` or `post` search parameter puts normal text after the math.
|
|
// Example use: testing baseline alignment.
|
|
if (query.before || query.after || query.pre || query.post) {
|
|
const mathContainer = math;
|
|
mathContainer.id = "math-container";
|
|
|
|
if (query.before || query.pre) {
|
|
const before = document.createTextNode(query.before || query.pre);
|
|
mathContainer.appendChild(before);
|
|
}
|
|
|
|
math = document.createElement("span");
|
|
math.id = "math";
|
|
mathContainer.appendChild(math);
|
|
|
|
if (query.after || query.post) {
|
|
const after = document.createTextNode(query.after || query.post);
|
|
mathContainer.appendChild(after);
|
|
}
|
|
}
|
|
|
|
// Macros can be specified via `\command=expansion` or single-character
|
|
// `c=expansion`.
|
|
Object.getOwnPropertyNames(query).forEach((key) => {
|
|
if (key.match(/^\\|^[^]$/)) {
|
|
options.macros[key] = query[key];
|
|
}
|
|
});
|
|
|
|
reprocess();
|
|
|
|
function setSearch() {
|
|
const query = queryString.parse(window.location.search);
|
|
query.text = input.value;
|
|
window.location.search = queryString.stringify(query);
|
|
}
|
|
|
|
function reprocess() {
|
|
try {
|
|
katex.render(input.value, math, options);
|
|
} catch (e) {
|
|
if (e.__proto__ === katex.ParseError.prototype) {
|
|
console.error(e);
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (module.hot) {
|
|
module.hot.accept('../katex.webpack.js', reprocess);
|
|
}
|
|
}
|
|
|
|
init();
|
|
|
|
export default katex;
|