Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10384429
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
View Options
diff --git a/templates/include/post-render.tmpl b/templates/include/post-render.tmpl
index 8ff2bbb..8e694a0 100644
--- a/templates/include/post-render.tmpl
+++ b/templates/include/post-render.tmpl
@@ -1,50 +1,73 @@
<!-- Miscelaneous render related template parts we use multiple times -->
{{define "highlighting"}}
<script>
// TODO: this feels more like a mutation observer
addEventListener('DOMContentLoaded', function () {
- var hlbaseUri = "//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/";
- var x = document.querySelectorAll("code[class^='language-']");
- if (x.length > 0) {
- // We have blocks to be highlighted, so we load css + js
+ var hlbaseUri = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/";
+ var lb = document.querySelectorAll("code[class^='language-']");
+
+ // Set langs to the langs that are included by default (for now: 'common set' on CDN)
+ var langs = ["apache", "bash", "coffeescript", "cpp", "cs", "css", "diff",
+ "http", "ini", "java", "javascript", "json", "makefile", "xml",
+ "markdown", "nginx", "objectivec", "perl", "php", "properties",
+ "python", "ruby", "shell", "sql"];
+
+ // Given a set of nodes, run highlighting on them
+ function highlight(nodes) {
+ for (i=0; i < nodes.length; i++) {
+ hljs.highlightBlock(nodes[i]);
+ }
+ }
+
+ // Given a array of URIs, load them in order
+ function loadLanguages(uris, callback) {
+ uris.forEach(function(uri) {
+ var sc=document.createElement('script');
+ sc.src=uri; sc.async=false; // critical?
+ if( uris.indexOf(uri) == uris.length-1) {
+ sc.onload = callback;
+ }
+ document.head.appendChild(sc);
+ });
+ }
+
+ // We don't have to do anything if there are no language blocks
+ if (lb.length > 0) {
+ // We have blocks to be highlighted, so we load css
var st = document.createElement('link');
st.rel = "stylesheet";
st.href = hlbaseUri + "styles/atom-one-light.min.css";
- document.getElementsByTagName('head')[0].appendChild(st);
-
- var sc = document.createElement('script');
- sc.type = "text/javascript";
- sc.src = hlbaseUri + "highlight.min.js";
- sc.async = true;
+ document.head.appendChild(st);
- // Here's the crux, we need to react on load event for this new element to make it work.
- sc.onload = () => { highlight(x) }
- document.getElementsByTagName('head')[0].appendChild(sc);
-
- // Given a set of nodes, run highlighting on them
- function highlight(nodes) {
- for (i=0; i < nodes.length; i++) {
- hljs.highlightBlock(nodes[i]);
- }
+ // Construct set of files to load, in order
+ var jss = [hlbaseUri + "highlight.min.js"];
+ // Check what we need to load
+ for (i=0; i < lb.length; i++) {
+ lang = lb[i].className.replace('language-','');
+ if (!langs.includes(lang)) {
+ jss.push(hlbaseUri + "languages/" + lang + ".min.js");
+ }
}
+ // Load files in order, higlight on last load
+ loadLanguages(jss, () => {highlight(lb)});
}
});
</script>
{{end}}
<!-- Include mathjax configuration -->
{{define "mathjax"}}
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"HTML-CSS": { fonts: ["TeX"] }
});
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML" async></script>
{{end}}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Nov 23, 3:49 PM (22 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3104621
Attached To
rWF WriteFreely
Event Timeline
Log In to Comment