mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-10-31 02:27:01 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			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-2015 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.6.0",
 | |
|     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()) 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");
 | |
| 
 |