##// END OF EJS Templates
diffs: fixed selecting active lines in both types of diffs.
dan -
r3130:dc7450ba default
parent child Browse files
Show More
@@ -1132,6 +1132,9 b' table.cb {'
1132 .icon-comment {
1132 .icon-comment {
1133 cursor: pointer;
1133 cursor: pointer;
1134 }
1134 }
1135 &.cb-line-selected {
1136 background: @comment-highlight-color !important;
1137 }
1135 &.cb-line-selected > div {
1138 &.cb-line-selected > div {
1136 display: block;
1139 display: block;
1137 background: @comment-highlight-color !important;
1140 background: @comment-highlight-color !important;
@@ -1154,7 +1157,7 b' table.cb {'
1154 a::before {
1157 a::before {
1155 content: attr(data-line-no);
1158 content: attr(data-line-no);
1156 }
1159 }
1157 &.cb-line-selected a {
1160 &.cb-line-selected {
1158 background: @comment-highlight-color !important;
1161 background: @comment-highlight-color !important;
1159 }
1162 }
1160
1163
@@ -295,75 +295,81 b' function scrollToElement(element, percen'
295 });
295 });
296
296
297 $('body').on('click', '.cb-lineno a', function(event) {
297 $('body').on('click', '.cb-lineno a', function(event) {
298 function sortNumber(a,b) {
299 return a - b;
300 }
298
301
299 function sortNumber(a,b) {
302 var lineNo = $(this).data('lineNo');
300 return a - b;
303 var lineName = $(this).attr('name');
304
305 if (lineNo) {
306 var prevLine = $('.cb-line-selected a').data('lineNo');
307
308 // on shift, we do a range selection, if we got previous line
309 if (event.shiftKey && prevLine !== undefined) {
310 var prevLine = parseInt(prevLine);
311 var nextLine = parseInt(lineNo);
312 var pos = [prevLine, nextLine].sort(sortNumber);
313 var anchor = '#L{0}-{1}'.format(pos[0], pos[1]);
314
315 // single click
316 } else {
317 var nextLine = parseInt(lineNo);
318 var pos = [nextLine, nextLine];
319 var anchor = '#L{0}'.format(pos[0]);
320
321 }
322 // highlight
323 var range = [];
324 for (var i = pos[0]; i <= pos[1]; i++) {
325 range.push(i);
326 }
327 // clear old selected lines
328 $('.cb-line-selected').removeClass('cb-line-selected');
329
330 $.each(range, function (i, lineNo) {
331 var line_td = $('td.cb-lineno#L' + lineNo);
332
333 if (line_td.length) {
334 line_td.addClass('cb-line-selected'); // line number td
335 line_td.prev().addClass('cb-line-selected'); // line data
336 line_td.next().addClass('cb-line-selected'); // line content
337 }
338 });
339
340 } else if (lineName !== undefined) { // lineName only occurs in diffs
341 // clear old selected lines
342 $('td.cb-line-selected').removeClass('cb-line-selected');
343 var anchor = '#{0}'.format(lineName);
344 var diffmode = templateContext.session_attrs.diffmode || "sideside";
345
346 if (diffmode === "unified") {
347 $(this).closest('tr').find('td').addClass('cb-line-selected');
348 } else {
349 var activeTd = $(this).closest('td');
350 activeTd.addClass('cb-line-selected');
351 activeTd.next('td').addClass('cb-line-selected');
301 }
352 }
302
353
303 var lineNo = $(this).data('lineNo');
354 }
304 if (lineNo) {
305
306 // on shift, we do a range selection, if we got previous line
307 var prevLine = $('.cb-line-selected a').data('lineNo');
308 if (event.shiftKey && prevLine !== undefined) {
309 var prevLine = parseInt(prevLine);
310 var nextLine = parseInt(lineNo);
311 var pos = [prevLine, nextLine].sort(sortNumber);
312 var anchor = '#L{0}-{1}'.format(pos[0], pos[1]);
313
314 } else {
315
316 var nextLine = parseInt(lineNo);
317 var pos = [nextLine, nextLine];
318 var anchor = '#L{0}'.format(pos[0]);
319
355
320 }
356 // Replace URL without jumping to it if browser supports.
321 // highlight
357 // Default otherwise
322 var range = [];
358 if (history.pushState && anchor !== undefined) {
323 for (var i = pos[0]; i <= pos[1]; i++) {
359 var new_location = location.href.rstrip('#');
324 range.push(i);
360 if (location.hash) {
325 }
361 // location without hash
326 // clear selection
362 new_location = new_location.replace(location.hash, "");
327 $('.cb-line-selected').removeClass('cb-line-selected');
328
329 $.each(range, function (i, lineNo) {
330 var line_td = $('td.cb-lineno#L' + lineNo);
331 if (line_td.length) {
332 line_td.addClass('cb-line-selected'); // line number td
333 line_td.prev().addClass('cb-line-selected'); // line data
334 line_td.next().addClass('cb-line-selected'); // line content
335 }
336 });
337
338
339 } else {
340 if ($(this).attr('name') !== undefined) {
341 // clear selection
342 $('td.cb-line-selected').removeClass('cb-line-selected');
343 var aEl = $(this).closest('td');
344 aEl.addClass('cb-line-selected');
345 aEl.next('td').addClass('cb-line-selected');
346 }
347 }
363 }
348
364
349 // Replace URL without jumping to it if browser supports.
365 // Make new anchor url
350 // Default otherwise
366 new_location = new_location + anchor;
351 if (history.pushState && anchor !== undefined) {
367 history.pushState(true, document.title, new_location);
352 var new_location = location.href.rstrip('#');
353 if (location.hash) {
354 // location without hash
355 new_location = new_location.replace(location.hash, "");
356 }
357
368
358 // Make new anchor url
369 return false;
359 new_location = new_location + anchor;
370 }
360 history.pushState(true, document.title, new_location);
361
371
362 return false;
372 });
363 }
364
365 });
366
367
373
368 $('.collapse_file').on('click', function(e) {
374 $('.collapse_file').on('click', function(e) {
369 e.stopPropagation();
375 e.stopPropagation();
General Comments 0
You need to be logged in to leave comments. Login now