single-script.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. {{ $js := .Site.Data.lib.js }}
  2. {{ $css := .Site.Data.lib.css }}
  3. {{ $getParents := resources.Get "js/helper/getParents.js" | resources.Minify }}
  4. <script defer src="{{ $getParents.RelPermalink }}"></script>
  5. {{ $closest := resources.Get "js/helper/closest.js" | resources.Minify }}
  6. <script defer src="{{ $closest.RelPermalink }}"></script>
  7. {{ $prev := resources.Get "js/helper/prev.js" | resources.Minify }}
  8. <script defer src="{{ $prev.RelPermalink }}"></script>
  9. {{ $prop := resources.Get "js/helper/prop.js" | resources.Minify }}
  10. <script defer src="{{ $prop.RelPermalink }}"></script>
  11. {{ $fadeinout := resources.Get "js/helper/fadeinout.js" | resources.Minify }}
  12. <script defer src="{{ $fadeinout.RelPermalink }}"></script>
  13. {{ if in .Params.Libraries "mermaid" }}
  14. <script defer src="{{ $js.mermaid.url }}" integrity="{{ $js.mermaid.sri }}" crossorigin="anonymous"></script>
  15. {{ end }}
  16. {{ if in .Params.Libraries "katex" }}
  17. <link rel="stylesheet" href="{{ $css.katex.url }}" integrity="{{$css.katex.sri }}" crossorigin="anonymous">
  18. <script defer src="{{ $js.katex.url }}" integrity="{{ $js.katex.sri }}" crossorigin="anonymous"></script>
  19. <script defer src="{{ $js.katex_auto_render.url }}" integrity="{{ $js.katex_auto_render.sri }}" crossorigin="anonymous"></script>
  20. {{ end }}
  21. {{ if in .Params.Libraries "flowchartjs" }}
  22. <script defer src="{{ $js.raphael.url }}" integrity="{{ $js.raphael.sri }}" crossorigin="anonymous"></script>
  23. <script defer src="{{ $js.flowchartjs.url }}" integrity="{{ $js.flowchartjs.sri }}" crossorigin="anonymous"></script>
  24. {{ end }}
  25. {{ if in .Params.Libraries "viz" }}
  26. <script defer src="{{ $js.viz.url }}" crossorigin="anonymous"></script>
  27. <script defer src="{{ $js.viz_render.url }}" integrity="{{ $js.viz_render.sri }}" crossorigin="anonymous"></script>
  28. {{ end }}
  29. {{ if in .Params.Libraries "mathjax" }}
  30. <script type="text/javascript" async src="{{ $js.mathjax.url }}?config=TeX-AMS-MML_HTMLorMML">
  31. MathJax.Hub.Config({
  32. tex2jax: {
  33. inlineMath: [['$', '$'], ['\\(', '\\)']],
  34. displayMath: [['$$', '$$']],
  35. processEscapes: true,
  36. processEnvironments: true,
  37. skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
  38. TeX: {
  39. equationNumbers: { autoNumber: "AMS" },
  40. extensions: ["AMSmath.js", "AMSsymbols.js"]
  41. }
  42. }
  43. });
  44. MathJax.Hub.Queue(function () {
  45. // Fix <code> tags after MathJax finishes running. This is a
  46. // hack to overcome a shortcoming of Markdown. Discussion at
  47. // https://github.com/mojombo/jekyll/issues/199
  48. var all = MathJax.Hub.getAllJax(), i;
  49. for (i = 0; i < all.length; i += 1) {
  50. all[i].SourceElement().parentNode.className += ' has-jax';
  51. }
  52. });
  53. MathJax.Hub.Config({
  54. // Autonumbering by mathjax
  55. TeX: { equationNumbers: { autoNumber: "AMS" } }
  56. });
  57. </script>
  58. {{ end }}
  59. {{ if in .Params.Libraries "chart" }}
  60. <script defer src="{{ $js.chart.url }}" integrity="{{ $js.chart.sri }}" crossorigin="anonymous"></script>
  61. {{ end }}
  62. <script>
  63. document.addEventListener('DOMContentLoaded', function () {
  64. 'use strict';
  65. // ====================== toc visibility =========================
  66. var toggleSidebarElem = document.getElementById("toggle-sidebar");
  67. var tocBodyElem = document.querySelector('.toc__body');
  68. var tocLabelElem = document.querySelector('.toc__label');
  69. var listMainElem = document.getElementById('list-main');
  70. var listSideElem = document.getElementById('list-side');
  71. var sliderIcons = document.querySelectorAll('.slider__icon');
  72. toggleSidebarElem ?
  73. toggleSidebarElem.addEventListener('change', function (e) {
  74. if (e.target.checked) {
  75. if (tocBodyElem) {
  76. fadeIn(tocBodyElem, 200);
  77. }
  78. if (tocLabelElem) {
  79. fadeIn(tocLabelElem, 200);
  80. }
  81. if (listMainElem && listSideElem) {
  82. listMainElem.className = 'm';
  83. listSideElem.className = 'r';
  84. }
  85. sliderIcons && sliderIcons.forEach(function(elem) {
  86. if (elem.classList.contains('hide')) {
  87. elem.classList.remove('hide');
  88. } else {
  89. elem.classList.add('hide');
  90. }
  91. });
  92. } else {
  93. if (tocBodyElem) {
  94. fadeOut(tocBodyElem, 200);
  95. }
  96. if (tocLabelElem) {
  97. fadeOut(tocLabelElem, 200);
  98. }
  99. if (listMainElem && listSideElem) {
  100. listMainElem.className = 'mr';
  101. listSideElem.className = 'hide';
  102. }
  103. sliderIcons && sliderIcons.forEach(function (elem) {
  104. if (elem.classList.contains('hide')) {
  105. elem.classList.remove('hide');
  106. } else {
  107. elem.classList.add('hide');
  108. }
  109. });
  110. }
  111. }) : null;
  112. // =================================================================
  113. // ============================ mermaid ============================
  114. {{ $lib := .Params.libraries }}
  115. var lib = JSON.parse({{ $lib | jsonify }});
  116. if (lib && lib.includes('mermaid')) {
  117. var themeVariant = localStorage.getItem('theme') || 'light';
  118. if (themeVariant === "dark") {
  119. mermaid.initialize({ theme: 'dark' });
  120. } else {
  121. mermaid.initialize({ theme: 'default' });
  122. }
  123. var mermaids = [];
  124. [].push.apply(mermaids, document.getElementsByClassName('language-mermaid'));
  125. mermaids.forEach(function(elem) {
  126. var elemParentNode = elem.parentNode;
  127. if (elemParentNode !== document.body) {
  128. elemParentNode.parentNode.insertBefore(elem, elemParentNode);
  129. elemParentNode.parentNode.removeChild(elemParentNode);
  130. }
  131. var newElemWrapper = document.createElement('div');
  132. newElemWrapper.classList.add('mermaid');
  133. newElemWrapper.innerHTML = elem.innerHTML;
  134. elem.replaceWith(newElemWrapper);
  135. });
  136. }
  137. // =================================================================
  138. // ============================= katex =============================
  139. if (lib && lib.includes('katex')) {
  140. var mathElements = document.getElementsByClassName('math');
  141. var options = {
  142. delimiters: [
  143. { left: "$$", right: "$$", display: true },
  144. { left: "\\[", right: "\\]", display: true },
  145. { left: "$", right: "$", display: false },
  146. { left: "\\(", right: "\\)", display: false }
  147. ],
  148. };
  149. renderMathInElement(document.querySelector('.single__contents'), options);
  150. }
  151. // =================================================================
  152. // ========================= flowchart.js ==========================
  153. if (lib && lib.includes('flowchartjs')) {
  154. {{ $flowchartjs := .Site.Data.flowchartjs }}
  155. var options = JSON.parse({{ $flowchartjs | jsonify }});
  156. var jsonContent = null;
  157. var flowchartPrefix = "language-flowchart";
  158. var index = 0;
  159. Array.prototype.forEach.call(document.querySelectorAll("[class^=" + flowchartPrefix + "]"), function(x){
  160. x.style.display = 'none'
  161. x.parentNode.style.backgroundColor = "transparent"
  162. jsonContent = x.innerText;
  163. var node0 = document.createElement('div');
  164. node0.id = 'flowchart' + index;
  165. x.parentNode.insertBefore(node0, x);
  166. var diagram = flowchart.parse(jsonContent);
  167. diagram.drawSVG("flowchart"+index, options);
  168. index +=1;
  169. });
  170. }
  171. // =================================================================
  172. // =========================== chart.js ============================
  173. if (lib && lib.includes('chart')) {
  174. var borderColor = "#666";
  175. var bgColor = "#ddd";
  176. var borderWidth = 2;
  177. Chart.defaults.global.elements.rectangle.borderWidth = borderWidth;
  178. Chart.defaults.global.elements.rectangle.borderColor = borderColor;
  179. Chart.defaults.global.elements.rectangle.backgroundColor = bgColor;
  180. Chart.defaults.global.elements.line.borderWidth = borderWidth;
  181. Chart.defaults.global.elements.line.borderColor = borderColor;
  182. Chart.defaults.global.elements.line.backgroundColor = bgColor;
  183. Chart.defaults.global.elements.point.borderWidth = borderWidth;
  184. Chart.defaults.global.elements.point.borderColor = borderColor;
  185. Chart.defaults.global.elements.point.backgroundColor = bgColor;
  186. var chartPrefix = "language-chart";
  187. var index = 0;
  188. var jsonContent = null;
  189. Array.prototype.forEach.call(document.querySelectorAll("[class^=" + chartPrefix + "]"), function (x) {
  190. x.style.display = 'none'
  191. x.parentNode.style.backgroundColor = "transparent"
  192. jsonContent = x.innerText;
  193. var node0 = document.createElement('canvas');
  194. var source = null;
  195. node0.height = 200;
  196. node0.style.height = 200;
  197. node0.id = 'myChart' + index;
  198. source = JSON.parse(jsonContent);
  199. x.parentNode.insertBefore(node0, x);
  200. var ctx = document.getElementById('myChart' + index).getContext('2d');
  201. var myChart = new Chart(ctx, source);
  202. index += 1;
  203. });
  204. }
  205. // =================================================================
  206. // ========================== viz diagram ==========================
  207. if (lib && lib.includes('viz')) {
  208. var vizPrefix = "language-viz-";
  209. Array.prototype.forEach.call(document.querySelectorAll("[class^=" + vizPrefix + "]"), function (x) {
  210. x.style.display = 'none'
  211. x.parentNode.style.backgroundColor = "transparent"
  212. var engine;
  213. x.getAttribute("class").split(" ").forEach(function (cls) {
  214. if (cls.startsWith(vizPrefix)) {
  215. engine = cls.substr(vizPrefix.length);
  216. }
  217. });
  218. var viz = new Viz();
  219. viz.renderSVGElement(x.innerText, { engine: engine })
  220. .then(function (element) {
  221. element.style.width = "100%";
  222. x.parentNode.insertBefore(element, x);
  223. })
  224. });
  225. }
  226. // =================================================================
  227. });
  228. </script>