latest.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. "use strict";
  2. var __values = (this && this.__values) || function(o) {
  3. var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  4. if (m) return m.call(o);
  5. if (o && typeof o.length === "number") return {
  6. next: function () {
  7. if (o && i >= o.length) o = void 0;
  8. return { value: o && o[i++], done: !o };
  9. }
  10. };
  11. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  12. };
  13. var __read = (this && this.__read) || function (o, n) {
  14. var m = typeof Symbol === "function" && o[Symbol.iterator];
  15. if (!m) return o;
  16. var i = m.call(o), r, ar = [], e;
  17. try {
  18. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  19. }
  20. catch (error) { e = { error: error }; }
  21. finally {
  22. try {
  23. if (r && !r.done && (m = i["return"])) m.call(i);
  24. }
  25. finally { if (e) throw e.error; }
  26. }
  27. return ar;
  28. };
  29. Object.defineProperty(exports, "__esModule", { value: true });
  30. exports.loadLatest = void 0;
  31. var CDN = new Map([
  32. ['cdnjs.cloudflare.com', {
  33. api: 'https://api.cdnjs.com/libraries/mathjax?fields=version',
  34. key: 'version',
  35. base: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/'
  36. }],
  37. ['rawcdn.githack.com', {
  38. api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
  39. key: 'tag_name',
  40. base: 'https://rawcdn.githack.com/mathjax/MathJax/'
  41. }],
  42. ['gitcdn.xyz', {
  43. api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
  44. key: 'tag_name',
  45. base: 'https://gitcdn.xyz/mathjax/MathJax/'
  46. }],
  47. ['cdn.statically.io', {
  48. api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
  49. key: 'tag_name',
  50. base: 'https://cdn.statically.io/gh/mathjax/MathJax/'
  51. }],
  52. ['unpkg.com', {
  53. api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
  54. key: 'tag_name',
  55. base: 'https://unpkg.com/mathjax@'
  56. }],
  57. ['cdn.jsdelivr.net', {
  58. api: 'https://api.github.com/repos/mathjax/mathjax/releases/latest',
  59. key: 'tag_name',
  60. base: 'https://cdn.jsdelivr.net/npm/mathjax@'
  61. }]
  62. ]);
  63. var GITHUB = {
  64. api: 'https://api.github.com/repos/mathjax/mathjax/releases',
  65. key: 'tag_name'
  66. };
  67. var MJX_VERSION = 3;
  68. var MJX_LATEST = 'mjx-latest-version';
  69. var SAVE_TIME = 1000 * 60 * 60 * 24 * 7;
  70. var script = null;
  71. function Error(message) {
  72. if (console && console.error) {
  73. console.error('MathJax(latest.js): ' + message);
  74. }
  75. }
  76. function scriptData(script, cdn) {
  77. if (cdn === void 0) { cdn = null; }
  78. script.parentNode.removeChild(script);
  79. var src = script.src;
  80. var file = src.replace(/.*?\/latest\.js(\?|$)/, '');
  81. if (file === '') {
  82. file = 'startup.js';
  83. src = src.replace(/\?$/, '') + '?' + file;
  84. }
  85. var version = (src.match(/(\d+\.\d+\.\d+)(\/es\d+)?\/latest.js\?/) || ['', ''])[1];
  86. var dir = (src.match(/(\/es\d+)\/latest.js\?/) || ['', ''])[1] || '';
  87. return {
  88. tag: script,
  89. src: src,
  90. id: script.id,
  91. version: version,
  92. dir: dir,
  93. file: file,
  94. cdn: cdn
  95. };
  96. }
  97. function checkScript(script) {
  98. var e_1, _a;
  99. try {
  100. for (var _b = __values(CDN.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
  101. var server = _c.value;
  102. var cdn = CDN.get(server);
  103. var url = cdn.base;
  104. var src = script.src;
  105. if (src && src.substr(0, url.length) === url && src.match(/\/latest\.js(\?|$)/)) {
  106. return scriptData(script, cdn);
  107. }
  108. }
  109. }
  110. catch (e_1_1) { e_1 = { error: e_1_1 }; }
  111. finally {
  112. try {
  113. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  114. }
  115. finally { if (e_1) throw e_1.error; }
  116. }
  117. return null;
  118. }
  119. function getScript() {
  120. var e_2, _a;
  121. if (document.currentScript) {
  122. return scriptData(document.currentScript);
  123. }
  124. var script = document.getElementById('MathJax-script');
  125. if (script && script.nodeName.toLowerCase() === 'script') {
  126. return checkScript(script);
  127. }
  128. var scripts = document.getElementsByTagName('script');
  129. try {
  130. for (var _b = __values(Array.from(scripts)), _c = _b.next(); !_c.done; _c = _b.next()) {
  131. var script_1 = _c.value;
  132. var data = checkScript(script_1);
  133. if (data) {
  134. return data;
  135. }
  136. }
  137. }
  138. catch (e_2_1) { e_2 = { error: e_2_1 }; }
  139. finally {
  140. try {
  141. if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
  142. }
  143. finally { if (e_2) throw e_2.error; }
  144. }
  145. return null;
  146. }
  147. function saveVersion(version) {
  148. try {
  149. var data = version + ' ' + Date.now();
  150. localStorage.setItem(MJX_LATEST, data);
  151. }
  152. catch (err) { }
  153. }
  154. function getSavedVersion() {
  155. try {
  156. var _a = __read(localStorage.getItem(MJX_LATEST).split(/ /), 2), version = _a[0], date = _a[1];
  157. if (date && Date.now() - parseInt(date) < SAVE_TIME) {
  158. return version;
  159. }
  160. }
  161. catch (err) { }
  162. return null;
  163. }
  164. function loadMathJax(url, id) {
  165. var script = document.createElement('script');
  166. script.type = 'text/javascript';
  167. script.async = true;
  168. script.src = url;
  169. if (id) {
  170. script.id = id;
  171. }
  172. var head = document.head || document.getElementsByTagName('head')[0] || document.body;
  173. if (head) {
  174. head.appendChild(script);
  175. }
  176. else {
  177. Error('Can\'t find the document <head> element');
  178. }
  179. }
  180. function loadDefaultMathJax() {
  181. if (script) {
  182. loadMathJax(script.src.replace(/\/latest\.js\?/, '/'), script.id);
  183. }
  184. else {
  185. Error('Can\'t determine the URL for loading MathJax');
  186. }
  187. }
  188. function loadVersion(version) {
  189. if (script.version && script.version !== version) {
  190. script.file = 'latest.js?' + script.file;
  191. }
  192. loadMathJax(script.cdn.base + version + script.dir + '/' + script.file, script.id);
  193. }
  194. function checkVersion(version) {
  195. var major = parseInt(version.split(/\./)[0]);
  196. if (major === MJX_VERSION && !version.match(/-(beta|rc)/)) {
  197. saveVersion(version);
  198. loadVersion(version);
  199. return true;
  200. }
  201. return false;
  202. }
  203. function getXMLHttpRequest() {
  204. if (window.XMLHttpRequest) {
  205. return new XMLHttpRequest();
  206. }
  207. if (window.ActiveXObject) {
  208. try {
  209. return new window.ActiveXObject('Msxml2.XMLHTTP');
  210. }
  211. catch (err) { }
  212. try {
  213. return new window.ActiveXObject('Microsoft.XMLHTTP');
  214. }
  215. catch (err) { }
  216. }
  217. return null;
  218. }
  219. function requestXML(cdn, action, failure) {
  220. var request = getXMLHttpRequest();
  221. if (request) {
  222. request.onreadystatechange = function () {
  223. if (request.readyState === 4) {
  224. if (request.status === 200) {
  225. !action(JSON.parse(request.responseText)) && failure();
  226. }
  227. else {
  228. Error('Problem acquiring MathJax version: status = ' + request.status);
  229. failure();
  230. }
  231. }
  232. };
  233. request.open('GET', cdn.api, true);
  234. request.send(null);
  235. }
  236. else {
  237. Error('Can\'t create XMLHttpRequest object');
  238. failure();
  239. }
  240. }
  241. function loadLatestGitVersion() {
  242. requestXML(GITHUB, function (json) {
  243. var e_3, _a;
  244. if (!(json instanceof Array))
  245. return false;
  246. try {
  247. for (var json_1 = __values(json), json_1_1 = json_1.next(); !json_1_1.done; json_1_1 = json_1.next()) {
  248. var data = json_1_1.value;
  249. if (checkVersion(data[GITHUB.key])) {
  250. return true;
  251. }
  252. }
  253. }
  254. catch (e_3_1) { e_3 = { error: e_3_1 }; }
  255. finally {
  256. try {
  257. if (json_1_1 && !json_1_1.done && (_a = json_1.return)) _a.call(json_1);
  258. }
  259. finally { if (e_3) throw e_3.error; }
  260. }
  261. return false;
  262. }, loadDefaultMathJax);
  263. }
  264. function loadLatestCdnVersion() {
  265. requestXML(script.cdn, function (json) {
  266. if (json instanceof Array) {
  267. json = json[0];
  268. }
  269. if (!checkVersion(json[script.cdn.key])) {
  270. loadLatestGitVersion();
  271. }
  272. return true;
  273. }, loadDefaultMathJax);
  274. }
  275. function loadLatest() {
  276. script = getScript();
  277. if (script && script.cdn) {
  278. var version = getSavedVersion();
  279. version ?
  280. loadVersion(version) :
  281. loadLatestCdnVersion();
  282. }
  283. else {
  284. loadDefaultMathJax();
  285. }
  286. }
  287. exports.loadLatest = loadLatest;
  288. //# sourceMappingURL=latest.js.map