123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- /* -*- 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.5",
- 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");
|