Fossil SCM
Exempt diff line numbers and diff marks (separators) from text selections and have click-and-drag selection include only the most recently clicked side for side-by-side (split) diffs.
Commit
abd3bca70ecb9ef3128297926c16fd751fffd32f30c13fdbe1786d47292f0e4f
Parent
b912690fc447905…
2 files changed
+6
+30
+6
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -691,10 +691,16 @@ | ||
| 691 | 691 | td.difftxt.ins ins { |
| 692 | 692 | background-color: #a0e4b2; |
| 693 | 693 | } |
| 694 | 694 | td.difftxt.ins ins.edit { |
| 695 | 695 | background-color: #c0c0ff; |
| 696 | +} | |
| 697 | +table.diff td.diffln, | |
| 698 | +table.diff td.diffsep, | |
| 699 | +table.splitdiff.select_right td.difftxtl, | |
| 700 | +table.splitdiff.select_left td.difftxtr { | |
| 701 | + user-select: none; | |
| 696 | 702 | } |
| 697 | 703 | body.tkt div.content li > table.udiff { |
| 698 | 704 | margin-left: 1.5em; |
| 699 | 705 | margin-top: 0.5em; |
| 700 | 706 | } |
| 701 | 707 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -691,10 +691,16 @@ | |
| 691 | td.difftxt.ins ins { |
| 692 | background-color: #a0e4b2; |
| 693 | } |
| 694 | td.difftxt.ins ins.edit { |
| 695 | background-color: #c0c0ff; |
| 696 | } |
| 697 | body.tkt div.content li > table.udiff { |
| 698 | margin-left: 1.5em; |
| 699 | margin-top: 0.5em; |
| 700 | } |
| 701 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -691,10 +691,16 @@ | |
| 691 | td.difftxt.ins ins { |
| 692 | background-color: #a0e4b2; |
| 693 | } |
| 694 | td.difftxt.ins ins.edit { |
| 695 | background-color: #c0c0ff; |
| 696 | } |
| 697 | table.diff td.diffln, |
| 698 | table.diff td.diffsep, |
| 699 | table.splitdiff.select_right td.difftxtl, |
| 700 | table.splitdiff.select_left td.difftxtr { |
| 701 | user-select: none; |
| 702 | } |
| 703 | body.tkt div.content li > table.udiff { |
| 704 | margin-left: 1.5em; |
| 705 | margin-top: 0.5em; |
| 706 | } |
| 707 |
+30
| --- src/fossil.diff.js | ||
| +++ src/fossil.diff.js | ||
| @@ -544,5 +544,35 @@ | ||
| 544 | 544 | }); |
| 545 | 545 | return F; |
| 546 | 546 | }; |
| 547 | 547 | Diff.setupDiffContextLoad(); |
| 548 | 548 | }); |
| 549 | +/* Click-handler for side-by-side diffs to activate text selection for the most | |
| 550 | +** recently clicked side (left or right). If the click-handler target is one of | |
| 551 | +** the simple-nested <del> or <ins> elements, the parent <td> is deciding. Note | |
| 552 | +** the "pointerdown" event seems to be exactly what is desired here: activating | |
| 553 | +** the clicked side just before the selection operation starts. */ | |
| 554 | +(function(){ | |
| 555 | + window.addEventListener('load',function(){ | |
| 556 | + var s = document.getElementsByClassName('splitdiff'); | |
| 557 | + for( var i=0; i<s.length; i++ ){ | |
| 558 | + s[i].addEventListener('pointerdown',splitdiff_click); | |
| 559 | + } | |
| 560 | + }); | |
| 561 | + function splitdiff_click(e){ | |
| 562 | + var n = e.target.nodeName, | |
| 563 | + t = n=='DEL' || n=='INS' ? e.target.parentElement : e.target; | |
| 564 | + if( /\bdifftxtl\b/.test(t.className) ){ | |
| 565 | + var s = document.getElementsByClassName('splitdiff'); | |
| 566 | + for( var i=0; i<s.length; i++ ){ | |
| 567 | + s[i].classList.remove('select_right'); | |
| 568 | + s[i].classList.add('select_left'); | |
| 569 | + } | |
| 570 | + }else if( /\bdifftxtr\b/.test(t.className) ){ | |
| 571 | + var s = document.getElementsByClassName('splitdiff'); | |
| 572 | + for( var i=0; i<s.length; i++ ){ | |
| 573 | + s[i].classList.remove('select_left'); | |
| 574 | + s[i].classList.add('select_right'); | |
| 575 | + } | |
| 576 | + } | |
| 577 | + } | |
| 578 | +}()); | |
| 549 | 579 |
| --- src/fossil.diff.js | |
| +++ src/fossil.diff.js | |
| @@ -544,5 +544,35 @@ | |
| 544 | }); |
| 545 | return F; |
| 546 | }; |
| 547 | Diff.setupDiffContextLoad(); |
| 548 | }); |
| 549 |
| --- src/fossil.diff.js | |
| +++ src/fossil.diff.js | |
| @@ -544,5 +544,35 @@ | |
| 544 | }); |
| 545 | return F; |
| 546 | }; |
| 547 | Diff.setupDiffContextLoad(); |
| 548 | }); |
| 549 | /* Click-handler for side-by-side diffs to activate text selection for the most |
| 550 | ** recently clicked side (left or right). If the click-handler target is one of |
| 551 | ** the simple-nested <del> or <ins> elements, the parent <td> is deciding. Note |
| 552 | ** the "pointerdown" event seems to be exactly what is desired here: activating |
| 553 | ** the clicked side just before the selection operation starts. */ |
| 554 | (function(){ |
| 555 | window.addEventListener('load',function(){ |
| 556 | var s = document.getElementsByClassName('splitdiff'); |
| 557 | for( var i=0; i<s.length; i++ ){ |
| 558 | s[i].addEventListener('pointerdown',splitdiff_click); |
| 559 | } |
| 560 | }); |
| 561 | function splitdiff_click(e){ |
| 562 | var n = e.target.nodeName, |
| 563 | t = n=='DEL' || n=='INS' ? e.target.parentElement : e.target; |
| 564 | if( /\bdifftxtl\b/.test(t.className) ){ |
| 565 | var s = document.getElementsByClassName('splitdiff'); |
| 566 | for( var i=0; i<s.length; i++ ){ |
| 567 | s[i].classList.remove('select_right'); |
| 568 | s[i].classList.add('select_left'); |
| 569 | } |
| 570 | }else if( /\bdifftxtr\b/.test(t.className) ){ |
| 571 | var s = document.getElementsByClassName('splitdiff'); |
| 572 | for( var i=0; i<s.length; i++ ){ |
| 573 | s[i].classList.remove('select_left'); |
| 574 | s[i].classList.add('select_right'); |
| 575 | } |
| 576 | } |
| 577 | } |
| 578 | }()); |
| 579 |