123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*************************************************************
- *
- * latest.js
- *
- * Replacement for cdn.mathjax.org/mathjax/latest that loads the
- * latest (2.x) version of MathJax from cdnjs, rawgit.com, or jsdelivr
- * depending on where it was loaded from.
- *
- * ---------------------------------------------------------------------
- *
- * Copyright (c) 2017-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 () {
- var CDN = {
- 'cdnjs.cloudflare.com': {
- api: 'https://api.cdnjs.com/libraries/mathjax?fields=version',
- version: 'version',
- mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/'
- },
-
- 'cdn.rawgit.com': {
- api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
- version: 'tag_name',
- mathjax: 'https://cdn.rawgit.com/mathjax/MathJax/'
- },
-
- 'cdn.jsdelivr.net': {
- api: 'https://api.jsdelivr.com/v1/jsdelivr/libraries?name=mathjax&lastversion=*',
- version: 'lastversion',
- mathjax: 'https://cdn.jsdelivr.net/mathjax/'
- }
- };
-
- function Error(message) {
- if (console && console.log) console.log(message);
- }
-
- function getScript() {
- if (document.currentScript) return document.currentScript;
- var scripts = document.getElementsByTagName("script");
- for (var i = 0, m = scripts.length; i < m; i++) {
- var script = scripts[i];
- for (var cdn in CDN) {if (CDN.hasOwnProperty(cdn)) {
- var url = CDN[cdn].mathjax;
- if (script.src && script.src.substr(0,url.length) === url) return script;
- }}
- }
- }
-
- function getCDN(script) {
- if (!script) return;
- var cdn = script.src.replace(/https:\/\//,'').replace(/[\/\?].*/,'');
- return CDN[cdn];
- }
-
- var cookiePattern = /(?:^|;\s*)mjx\.latest=([^;]*)(?:;|$)/;
- function getVersion() {
- var match;
- try {match = cookiePattern.exec(document.cookie)} catch (err) {}
- if (match && match[1] !== '') return match[1];
- }
- function setVersion(version) {
- cookie = 'mjx.latest=' + version;
- var time = new Date();
- time.setDate(time.getDate() + 7);
- cookie += '; expires=' + time.toGMTString();
- cookie += '; path=/';
- try {document.cookie = cookie} catch (err) {}
- }
-
- function getXMLHttpRequest() {
- if (window.XMLHttpRequest) return new XMLHttpRequest();
- if (window.ActiveXObject) {
- try {return new ActiveXObject("Msxml2.XMLHTTP")} catch (err) {}
- try {return new ActiveXObject("Microsoft.XMLHTTP")} catch (err) {}
- }
- }
-
- function loadMathJax(url) {
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.async = true;
- script.src = url;
- var head = document.head || document.getElementsByTagName('head')[0] || document.body;
- if (head) {
- head.appendChild(script);
- } else {
- Error("Can't find the document <head> element");
- }
- }
-
- function loadDefaultMathJax() {
- var script = getScript();
- if (script) {
- loadMathJax(script.src.replace(/\/latest\.js/, "/MathJax.js"));
- } else {
- Error("Can't determine the URL for loading MathJax");
- }
- }
-
- function getLatestMathJax(cdn,config,unpacked) {
- var request = getXMLHttpRequest();
- if (request) {
- request.onreadystatechange = function() {
- if (request.readyState === 4) {
- if (request.status === 200) {
- var json = JSON.parse(request.responseText);
- if (json instanceof Array) json = json[0];
- var version = json[cdn.version];
- if (version.substr(0,2) === '2.') {
- setVersion(version);
- loadMathJax(cdn.mathjax + json[cdn.version] + unpacked + '/MathJax.js' + config);
- return;
- }
- } else {
- Error("Problem acquiring MathJax version: status = " + request.status);
- }
- loadDefaultMathJax();
- }
- }
- request.open('GET', cdn.api, true);
- request.send(null);
- } else {
- Error("Can't create XMLHttpRequest object");
- loadDefaultMathJax();
- }
- }
-
- var script = getScript();
- var cdn = getCDN(script);
- if (cdn) {
- var config = script.src.replace(/.*?(\?|$)/, "$1");
- config += (config ? '&' : '?') + 'latest';
- var unpacked = (script.src.match(/\/unpacked\/latest\.js/) ? "/unpacked" : "");
- var version = getVersion();
- if (version) {
- loadMathJax(cdn.mathjax + version + unpacked + '/MathJax.js' + config);
- } else {
- getLatestMathJax(cdn, config, unpacked);
- }
- } else {
- loadDefaultMathJax();
- }
- })();
|