| Index: polymer_1.0.4/bower_components/prism/plugins/line-highlight/prism-line-highlight.js
|
| diff --git a/polymer_1.0.4/bower_components/prism/plugins/line-highlight/prism-line-highlight.js b/polymer_1.0.4/bower_components/prism/plugins/line-highlight/prism-line-highlight.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b8dddebb29dcb952d703457247d8803a02662e82
|
| --- /dev/null
|
| +++ b/polymer_1.0.4/bower_components/prism/plugins/line-highlight/prism-line-highlight.js
|
| @@ -0,0 +1,109 @@
|
| +(function(){
|
| +
|
| +if(!window.Prism) {
|
| + return;
|
| +}
|
| +
|
| +function $$(expr, con) {
|
| + return Array.prototype.slice.call((con || document).querySelectorAll(expr));
|
| +}
|
| +
|
| +function hasClass(element, className) {
|
| + className = " " + className + " ";
|
| + return (" " + element.className + " ").replace(/[\n\t]/g, " ").indexOf(className) > -1
|
| +}
|
| +
|
| +var CRLF = crlf = /\r?\n|\r/g;
|
| +
|
| +function highlightLines(pre, lines, classes) {
|
| + var ranges = lines.replace(/\s+/g, '').split(','),
|
| + offset = +pre.getAttribute('data-line-offset') || 0;
|
| +
|
| + var lineHeight = parseFloat(getComputedStyle(pre).lineHeight);
|
| +
|
| + for (var i=0, range; range = ranges[i++];) {
|
| + range = range.split('-');
|
| +
|
| + var start = +range[0],
|
| + end = +range[1] || start;
|
| +
|
| + var line = document.createElement('div');
|
| +
|
| + line.textContent = Array(end - start + 2).join(' \r\n');
|
| + line.className = (classes || '') + ' line-highlight';
|
| +
|
| + //if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers
|
| + if(!hasClass(pre, 'line-numbers')) {
|
| + line.setAttribute('data-start', start);
|
| +
|
| + if(end > start) {
|
| + line.setAttribute('data-end', end);
|
| + }
|
| + }
|
| +
|
| + line.style.top = (start - offset - 1) * lineHeight + 'px';
|
| +
|
| + //allow this to play nicely with the line-numbers plugin
|
| + if(hasClass(pre, 'line-numbers')) {
|
| + //need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning
|
| + pre.appendChild(line);
|
| + } else {
|
| + (pre.querySelector('code') || pre).appendChild(line);
|
| + }
|
| + }
|
| +}
|
| +
|
| +function applyHash() {
|
| + var hash = location.hash.slice(1);
|
| +
|
| + // Remove pre-existing temporary lines
|
| + $$('.temporary.line-highlight').forEach(function (line) {
|
| + line.parentNode.removeChild(line);
|
| + });
|
| +
|
| + var range = (hash.match(/\.([\d,-]+)$/) || [,''])[1];
|
| +
|
| + if (!range || document.getElementById(hash)) {
|
| + return;
|
| + }
|
| +
|
| + var id = hash.slice(0, hash.lastIndexOf('.')),
|
| + pre = document.getElementById(id);
|
| +
|
| + if (!pre) {
|
| + return;
|
| + }
|
| +
|
| + if (!pre.hasAttribute('data-line')) {
|
| + pre.setAttribute('data-line', '');
|
| + }
|
| +
|
| + highlightLines(pre, range, 'temporary ');
|
| +
|
| + document.querySelector('.temporary.line-highlight').scrollIntoView();
|
| +}
|
| +
|
| +var fakeTimer = 0; // Hack to limit the number of times applyHash() runs
|
| +
|
| +Prism.hooks.add('after-highlight', function(env) {
|
| + var pre = env.element.parentNode;
|
| + var lines = pre && pre.getAttribute('data-line');
|
| +
|
| + if (!pre || !lines || !/pre/i.test(pre.nodeName)) {
|
| + return;
|
| + }
|
| +
|
| + clearTimeout(fakeTimer);
|
| +
|
| + $$('.line-highlight', pre).forEach(function (line) {
|
| + line.parentNode.removeChild(line);
|
| + });
|
| +
|
| + highlightLines(pre, lines);
|
| +
|
| + fakeTimer = setTimeout(applyHash, 1);
|
| +});
|
| +
|
| +addEventListener('hashchange', applyHash);
|
| +
|
| +})();
|
|
|