CS-Notes/docs/_style/prism-master/code.js
2018-12-19 14:09:39 +08:00

214 lines
3.7 KiB
JavaScript

(function(){
if(!document.body.addEventListener) {
return;
}
$$('[data-src][data-type="text/html"]').forEach(function(element) {
var src = element.getAttribute('data-src'),
html = element.getAttribute('data-type') === 'text/html',
contentProperty = html? 'innerHTML' : 'textContent';
$u.xhr({
url: src,
callback: function(xhr) {
try {
element[contentProperty] = xhr.responseText;
// Run JS
$$('script', element).forEach(function (script) {
var after = script.nextSibling, parent = script.parentNode;
parent.removeChild(script);
document.head.appendChild(script);
});
}
catch (e) {}
}
});
});
})();
/**
* Table of contents
*/
(function(){
var toc = document.createElement('ol');
$$('body > section > h1').forEach(function(h1) {
var section = h1.parentNode,
text = h1.textContent,
id = h1.id || section.id;
// Assign id if one does not exist
if (!id) {
id = text.toLowerCase();
// Replace spaces with hyphens, only keep first 10 words
id = id.split(/\s+/g, 10).join('-');
// Remove non-word characters
id = id.replace(/[^\w-]/g, '');
section.id = id;
}
// Linkify heading text
if (h1.children.length === 0) {
h1.innerHTML = '';
$u.element.create('a', {
properties: {
href: window.location.pathname + '#' + id
},
contents: text,
inside: h1
});
}
$u.element.create('li', {
contents: {
tag: 'a',
properties: {
href: window.location.pathname + '#' + (h1.id || section.id)
},
contents: text
},
inside: toc
});
});
if (toc.children.length > 0) {
$u.element.create('section', {
properties: {
id: 'toc'
},
contents: [{
tag: 'h1',
contents: 'On this page'
}, toc],
before: $('body > section')
});
}
})();
// calc()
(function(){
if(!window.PrefixFree) return;
if (PrefixFree.functions.indexOf('calc') == -1) {
var style = document.createElement('_').style;
style.width = 'calc(1px + 1%)'
if(!style.width) {
// calc not supported
var header = $('header'),
footer = $('footer');
function calculatePadding() {
header.style.padding =
footer.style.padding = '30px ' + (innerWidth/2 - 450) + 'px';
}
addEventListener('resize', calculatePadding);
calculatePadding();
}
}
})();
// setTheme is intentionally global,
// so it can be accessed from download.js
var setTheme;
(function() {
var p = $u.element.create('p', {
properties: {
id: 'theme'
},
contents: {
tag: 'p',
contents: 'Theme:'
},
after: '.intro'
});
var themes = components.themes;
var current = (location.search.match(/theme=([\w-]+)/) || [])[1];
if (!(current in themes)) {
current = undefined;
}
if (current === undefined) {
var stored = localStorage.getItem('theme');
current = stored in themes? stored : 'prism';
}
setTheme = function (id) {
var link = $$('link[href^="themes/prism"]')[0];
link.href = themes.meta.path.replace(/\{id}/g, id);
localStorage.setItem('theme', id);
};
for (var id in themes) {
if (id === 'meta') {
continue;
}
$u.element.create('input', {
properties: {
type: 'radio',
name: "theme",
id: 'theme=' + id,
checked: current === id,
value: id,
onclick: function () {
setTheme(this.value);
}
},
inside: p
});
$u.element.create('label', {
properties: {
htmlFor: 'theme=' + id
},
contents: themes[id].title || themes[id],
inside: p
});
}
setTheme(current);
})();
(function(){
function listPlugins(ul) {
for (var id in components.plugins) {
if (id == 'meta') {
continue;
}
var plugin = components.plugins[id];
$u.element.create('li', {
contents: {
tag: 'a',
prop: {
href: 'plugins/' + id
},
contents: plugin.title || plugin
},
inside: ul
});
}
}
$$('.plugin-list').forEach(listPlugins);
})();