Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Unified Diff: polymer_1.0.4/bower_components/prism/plugins/line-highlight/prism-line-highlight.js

Issue 1205703007: Add polymer 1.0 to npm_modules (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Renamed folder to 1.0.4 Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+
+})();

Powered by Google App Engine
This is Rietveld 408576698