aboutsummaryrefslogtreecommitdiff
path: root/js/mathjax/extensions/fast-preview.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/mathjax/extensions/fast-preview.js')
-rw-r--r--js/mathjax/extensions/fast-preview.js157
1 files changed, 157 insertions, 0 deletions
diff --git a/js/mathjax/extensions/fast-preview.js b/js/mathjax/extensions/fast-preview.js
new file mode 100644
index 0000000..34da2c3
--- /dev/null
+++ b/js/mathjax/extensions/fast-preview.js
@@ -0,0 +1,157 @@
+// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7dn=apache-2.0.txt Apache-2.0
+/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+
+/*************************************************************
+ *
+ * MathJax/extensions/fast-preview.js
+ *
+ * Implements a fast preview using the PreviewHTML output jax
+ * and then a slower update to the more accurate HTML-CSS output
+ * (or whatever the user has selected).
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2014-2020 The MathJax Consortium
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (HUB,HTML,BROWSER) {
+
+ var SETTINGS = HUB.config.menuSettings;
+ var JAX = MathJax.OutputJax;
+ var msieColorBug = BROWSER.isMSIE && (document.documentMode||0) < 8;
+
+ var FastPreview = MathJax.Extension["fast-preview"] = {
+ version: "2.7.9",
+ enabled: true,
+
+ //
+ // Configuration for the chunking of the main output
+ // after the previews have been created, and other configuration.
+ //
+ config: HUB.CombineConfig("fast-preview",{
+ Chunks: {EqnChunk: 10000, EqnChunkFactor: 1, EqnChunkDelay: 0},
+ color: "inherit!important",
+ updateTime: 30, updateDelay: 6,
+ messageStyle: "none",
+ disabled: BROWSER.isMSIE && !BROWSER.versionAtLeast("8.0")
+ }),
+
+ //
+ // Ajust the chunking of the output jax
+ //
+ Config: function () {
+ if (HUB.config["CHTML-preview"])
+ MathJax.Hub.Config({"fast-preview": HUB.config["CHTML-preview"]});
+ var update, delay, style, done, saved;
+ var config = this.config;
+
+ if (!config.disabled && SETTINGS.FastPreview == null)
+ HUB.Config({menuSettings:{FastPreview:true}});
+ if (SETTINGS.FastPreview) {
+ MathJax.Ajax.Styles({".MathJax_Preview .MJXf-math":{color:config.color}});
+ HUB.Config({"HTML-CSS": config.Chunks, CommonHTML: config.Chunks, SVG: config.Chunks});
+ }
+ HUB.Register.MessageHook("Begin Math Output",function () {
+ if (!done && FastPreview.Active()) {
+ update = HUB.processUpdateTime; delay = HUB.processUpdateDelay;
+ style = HUB.config.messageStyle;
+ HUB.processUpdateTime = config.updateTime;
+ HUB.processUpdateDelay = config.updateDelay;
+ HUB.Config({messageStyle: config.messageStyle});
+ MathJax.Message.Clear(0,0);
+ saved = true;
+ }
+ });
+ HUB.Register.MessageHook("End Math Output",function () {
+ if (!done && saved) {
+ HUB.processUpdateTime = update;
+ HUB.processUpdateDelay = delay;
+ HUB.Config({messageStyle: style});
+ done = true;
+ }
+ });
+ },
+
+ //
+ // Allow page to override user settings (for things like editor previews)
+ //
+ Disable: function () {this.enabled = false},
+ Enable: function () {this.enabled = true},
+
+ Active: function () {
+ return SETTINGS.FastPreview && this.enabled &&
+ !(JAX[SETTINGS.renderer]||{}).noFastPreview;
+ },
+
+ //
+ // Insert a preview span, if there isn't one already,
+ // and call the PreviewHTML output jax to create the preview
+ //
+ Preview: function (data) {
+ if (!this.Active() || !data.script.parentNode) return;
+ var preview = data.script.MathJax.preview || data.script.previousSibling;
+ if (!preview || preview.className !== MathJax.Hub.config.preRemoveClass) {
+ preview = HTML.Element("span",{className:MathJax.Hub.config.preRemoveClass});
+ data.script.parentNode.insertBefore(preview,data.script);
+ data.script.MathJax.preview = preview;
+ }
+ preview.innerHTML = "";
+ preview.style.color = (msieColorBug ? "black" : "inherit");
+ return this.postFilter(preview,data);
+ },
+ postFilter: function (preview,data) {
+ //
+ // Load the PreviewHTML jax if it is not already loaded
+ //
+ if (!data.math.root.toPreviewHTML) {
+ var queue = MathJax.Callback.Queue();
+ queue.Push(
+ ["Require",MathJax.Ajax,"[MathJax]/jax/output/PreviewHTML/config.js"],
+ ["Require",MathJax.Ajax,"[MathJax]/jax/output/PreviewHTML/jax.js"]
+ );
+ HUB.RestartAfter(queue.Push({}));
+ }
+ data.math.root.toPreviewHTML(preview);
+ },
+
+ //
+ // Hook into the input jax postFilter to create the previews as
+ // the input jax are processed.
+ //
+ Register: function (name) {
+ HUB.Register.StartupHook(name+" Jax Require",function () {
+ var jax = MathJax.InputJax[name];
+ jax.postfilterHooks.Add(["Preview",MathJax.Extension["fast-preview"]],50);
+ });
+ }
+ }
+
+ //
+ // Hook into each input jax
+ //
+ FastPreview.Register("TeX");
+ FastPreview.Register("MathML");
+ FastPreview.Register("AsciiMath");
+
+ HUB.Register.StartupHook("End Config",["Config",FastPreview]);
+
+ HUB.Startup.signal.Post("fast-preview Ready");
+
+})(MathJax.Hub,MathJax.HTML,MathJax.Hub.Browser);
+
+MathJax.Ajax.loadComplete("[MathJax]/extensions/fast-preview.js");
+
+// @license-end