mirror of https://gitee.com/openkylin/mathjax.git
156 lines
5.4 KiB
JavaScript
156 lines
5.4 KiB
JavaScript
/* -*- 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-2018 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.4",
|
|
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");
|
|
|