| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- var nameCounter = 0;
- var toc = []; // Table of Content as a list
- var getHeadingLevel = function(h) {
- var level = 1;
- switch (h) {
- case 'h1':
- break;
- case 'h2':
- level += 1;
- break;
- case 'h3':
- level += 2;
- break;
- case 'h4':
- level += 3;
- break;
- case 'h5':
- level += 4;
- break;
- case 'h6':
- level += 5;
- break;
- default:
- level += 6;
- break;
- }
- return level;
- }
- // There is a VMarkdownitOption struct passed in.
- // var VMarkdownitOption = { html, breaks, linkify, sub, sup };
- var mdit = window.markdownit({
- html: VMarkdownitOption.html,
- breaks: VMarkdownitOption.breaks,
- linkify: VMarkdownitOption.linkify,
- typographer: false,
- langPrefix: 'lang-',
- highlight: function(str, lang) {
- if (lang && (!specialCodeBlock(lang) || highlightSpecialBlocks)) {
- if (hljs.getLanguage(lang)) {
- return hljs.highlight(lang, str, true).value;
- } else {
- return hljs.highlightAuto(str).value;
- }
- }
- // Use external default escaping.
- return '';
- }
- });
- mdit = mdit.use(window.markdownitHeadingAnchor, {
- anchorClass: 'vnote-anchor',
- addHeadingID: true,
- addHeadingAnchor: true,
- slugify: function(md, s) {
- return 'toc_' + nameCounter++;
- },
- headingHook: function(openToken, inlineToken, anchor) {
- toc.push({
- level: getHeadingLevel(openToken.tag),
- anchor: anchor,
- title: mdit.utils.escapeHtml(inlineToken.content)
- });
- }
- });
- // Enable file: scheme.
- var validateLinkMDIT = mdit.validateLink;
- var fileSchemeRE = /^file:/;
- mdit.validateLink = function(url) {
- var str = url.trim().toLowerCase();
- return fileSchemeRE.test(str) ? true : validateLinkMDIT(url);
- };
- mdit = mdit.use(window.markdownitTaskLists);
- if (VMarkdownitOption.sub) {
- mdit = mdit.use(window.markdownitSub);
- }
- if (VMarkdownitOption.sup) {
- mdit = mdit.use(window.markdownitSup);
- }
- var metaDataText = null;
- if (VMarkdownitOption.metadata) {
- mdit = mdit.use(window.markdownitFrontMatter, function(text){
- metaDataText = text;
- });
- }
- if (VMarkdownitOption.emoji) {
- mdit = mdit.use(window.markdownitEmoji);
- mdit.renderer.rules.emoji = function(token, idx) {
- return '<span class="emoji emoji_' + token[idx].markup + '">' + token[idx].content + '</span>';
- };
- }
- mdit = mdit.use(window.markdownitFootnote);
- mdit = mdit.use(window["markdown-it-imsize.js"]);
- if (typeof texmath != 'undefined') {
- mdit = mdit.use(texmath, { delimiters: ['dollars', 'raw'] });
- }
- var mdHasTocSection = function(markdown) {
- var n = markdown.search(/(\n|^)\[toc\]/i);
- return n != -1;
- };
- var markdownToHtml = function(markdown, needToc) {
- toc = [];
- nameCounter = 0;
- var html = mdit.render(markdown);
- if (needToc) {
- return html.replace(/<p>\[TOC\]<\/p>/ig, '<div class="vnote-toc"></div>');
- } else {
- return html;
- }
- };
- var updateText = function(text) {
- if (VAddTOC) {
- text = "[TOC]\n\n" + text;
- }
- startFreshRender();
- // There is at least one async job for MathJax.
- asyncJobsCount = 1;
- metaDataText = null;
- var needToc = mdHasTocSection(text);
- var html = markdownToHtml(text, needToc);
- contentDiv.innerHTML = html;
- handleToc(needToc);
- insertImageCaption();
- setupImageView();
- handleMetaData();
- renderMermaid('lang-mermaid');
- renderFlowchart(['lang-flowchart', 'lang-flow']);
- renderPlantUML('lang-puml');
- renderGraphviz('lang-dot');
- addClassToCodeBlock();
- renderCodeBlockLineNumber();
- // If you add new logics after handling MathJax, please pay attention to
- // finishLoading logic.
- if (VEnableMathjax) {
- var texToRender = document.getElementsByClassName('tex-to-render');
- var nrTex = texToRender.length;
- if (nrTex == 0) {
- finishOneAsyncJob();
- return;
- }
- var eles = [];
- for (var i = 0; i < nrTex; ++i) {
- eles.push(texToRender[i]);
- }
- try {
- MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX],
- ["Typeset", MathJax.Hub, eles, postProcessMathJax]);
- } catch (err) {
- content.setLog("err: " + err);
- finishOneAsyncJob();
- }
- } else {
- finishOneAsyncJob();
- }
- };
- var highlightText = function(text, id, timeStamp) {
- highlightSpecialBlocks = true;
- var html = mdit.render(text);
- highlightSpecialBlocks = false;
- content.highlightTextCB(html, id, timeStamp);
- };
- var textToHtml = function(identifier, id, timeStamp, text, inlineStyle) {
- var html = mdit.render(text);
- if (inlineStyle) {
- var container = textHtmlDiv;
- container.innerHTML = html;
- html = getHtmlWithInlineStyles(container);
- container.innerHTML = "";
- }
- content.textToHtmlCB(identifier, id, timeStamp, html);
- };
- // Add a PRE containing metaDataText if it is not empty.
- var handleMetaData = function() {
- if (!metaDataText || metaDataText.length == 0) {
- return;
- }
- var pre = document.createElement('pre');
- var code = document.createElement('code');
- code.classList.add(VMetaDataCodeClass);
- var text = hljs.highlight('yaml', metaDataText, true).value;
- code.innerHTML = text;
- pre.appendChild(code);
- contentDiv.insertAdjacentElement('afterbegin', pre);
- };
- var postProcessMathJaxWhenMathjaxReady = function() {
- var all = MathJax.Hub.getAllJax();
- for (var i = 0; i < all.length; ++i) {
- var node = all[i].SourceElement().parentNode;
- if (VRemoveMathjaxScript) {
- // Remove the SourceElement.
- try {
- node.removeChild(all[i].SourceElement());
- } catch (err) {
- content.setLog("err: " + err);
- }
- }
- if (node.tagName.toLowerCase() == 'code') {
- var pre = node.parentNode;
- var p = document.createElement('p');
- p.innerHTML = node.innerHTML;
- pre.parentNode.replaceChild(p, pre);
- }
- }
- };
- var handleMathjaxReady = function() {
- if (!VEnableMathjax) {
- return;
- }
- var texToRender = document.getElementsByClassName('tex-to-render');
- var nrTex = texToRender.length;
- if (nrTex == 0) {
- return;
- }
- var eles = [];
- for (var i = 0; i < nrTex; ++i) {
- eles.push(texToRender[i]);
- }
- try {
- MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX],
- ["Typeset", MathJax.Hub, eles, postProcessMathJaxWhenMathjaxReady]);
- } catch (err) {
- content.setLog("err: " + err);
- finishOneAsyncJob();
- }
- };
|