Blame view

bower_components/prism/plugins/line-numbers/prism-line-numbers.js 1.13 KB
73bcce88   luigser   COMPONENTS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  Prism.hooks.add('after-highlight', function (env) {
  	// works only for <code> wrapped inside <pre> (not inline)
  	var pre = env.element.parentNode;
  	var clsReg = /\s*\bline-numbers\b\s*/;
  	if (
  		!pre || !/pre/i.test(pre.nodeName) ||
  		// Abort only if nor the <pre> nor the <code> have the class
  		(!clsReg.test(pre.className) && !clsReg.test(env.element.className))
  	) {
  		return;
  	}
  
  	if (clsReg.test(env.element.className)) {
  		// Remove the class "line-numbers" from the <code>
  		env.element.className = env.element.className.replace(clsReg, '');
  	}
  	if (!clsReg.test(pre.className)) {
  		// Add the class "line-numbers" to the <pre>
  		pre.className += ' line-numbers';
  	}
  
  	var linesNum = (1 + env.code.split('\n').length);
  	var lineNumbersWrapper;
  
  	var lines = new Array(linesNum);
  	lines = lines.join('<span></span>');
  
  	lineNumbersWrapper = document.createElement('span');
  	lineNumbersWrapper.className = 'line-numbers-rows';
  	lineNumbersWrapper.innerHTML = lines;
  
  	if (pre.hasAttribute('data-start')) {
  		pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);
  	}
  
  	env.element.appendChild(lineNumbersWrapper);
  
  });