Skip to content

Commit 6b1ecd6

Browse files
committed
provide pod lines via data attribute rather than javascript
1 parent 18d01a0 commit 6b1ecd6

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

root/source.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@
5555

5656
<div class="content">
5757
<% IF !module.binary %>
58-
<pre id="source" class="line-numbers"><code class="language-<% filetype %>"><% source %></code></pre>
58+
<pre id="source" class="line-numbers" data-pod-lines="<%
59+
module.pod_lines.map(->(lines){ lines.0+1 _ "-" _ (lines.0+lines.1) }).join(', ')
60+
%>"><code class="language-<% filetype %>"><% source %></code></pre>
5961
<% ELSE %>
6062
This file cannot be displayed inline. Try the <a href="<% raw_url %>">raw file</a>.
6163
<% END %>
@@ -67,7 +69,6 @@
6769
//SyntaxHighlighter.all();
6870
$(document).ready(function() {
6971
<% IF module.sloc > 0 %>
70-
setPodLines(<% module.pod_lines.json %>);
7172
togglePod();
7273
<% END %>
7374
if(document.location.hash)

root/static/js/syntaxhighlighter.js

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
11
$(function () {
2+
function parseLines (lines) {
3+
lines = lines.split(/\s*,\s*/);
4+
var all_lines = [];
5+
for (var i = 0; i < lines.length; i++) {
6+
var line = lines[i];
7+
var res = line.match(/^\s*(\d+)\s*(-\s*(\d+)\s*)?$/);
8+
if (res) {
9+
var start = res[1]*1;
10+
var end = (res[3] || res[1])*1;
11+
for (var l = start; l <= end; l++) {
12+
all_lines.push(l);
13+
}
14+
}
15+
}
16+
return all_lines;
17+
}
18+
219
// Allow tilde in url (#1118). Orig: /\w+:\/\/[\w-.\/?%&=:@;#]*/g,
320
SyntaxHighlighter.regexLib['url'] = /\w+:\/\/[\w-.\/?%&=:@;#~]*/g;
421

@@ -123,39 +140,21 @@ $(function () {
123140
}
124141
var lines = pre.attr('data-line');
125142
if (lines) {
126-
lines = lines.split(/,/);
127-
var all_lines = [];
128-
for (var i = 0; i < lines.length; i++) {
129-
var line = lines[i].trim();
130-
var res = line.match(/(\d+)-(\d+)/);
131-
if (res) {
132-
for (var l = res[1]; l <= res[2]; l++) {
133-
all_lines.push(l);
134-
}
135-
}
136-
else {
137-
all_lines.push(line);
138-
}
139-
}
140-
config.highlight = all_lines;
143+
config.highlight = parseLines(lines);
141144
}
142145

143146
SyntaxHighlighter.highlight(config, source);
144-
});
145-
});
146147

147-
function setPodLines (lines) {
148-
if (!lines || !lines.length) return;
149-
for (var i = 0; i < lines.length; i++) {
150-
var start = lines[i][0];
151-
var length = lines[i][1];
152-
var selectors = [];
153-
for (var x = start; x < start + length; x++) {
154-
selectors.push('.number' + (x+1));
148+
var pod_lines = pre.attr('data-pod-lines');
149+
if (pod_lines) {
150+
var selector = $.map(
151+
parseLines(pod_lines),
152+
function (e, i) { return '.number' + e }
153+
).join(', ');
154+
pre.find('.syntaxhighlighter .line').filter(selector).addClass('pod-line');
155155
}
156-
$('#source .syntaxhighlighter .line').filter(selectors.join(', ')).addClass('pod-line');
157-
}
158-
}
156+
});
157+
});
159158

160159
function togglePod() {
161160
$('.syntaxhighlighter').toggleClass('pod-hidden');

0 commit comments

Comments
 (0)