Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Diff toggles: move the toggle-all button into the page-level diff UI controls (and add that area to the /ckout page) and only show the toggle-all option if more than one diff is being shown. Only show the Sync-sbs-diff preference checkbox when rendering sbs diffs. There is some slight visual inconsistency across various pages in how the toggle-all button is rendered, so there's still opportunity for some polishing-up. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
a718a7689409c5d71c83dac92cd03bbf |
| User & Date: | stephan 2024-12-13 00:41:49.221 |
Context
|
2024-12-13
| ||
| 04:03 | Tidied up language in add.c. ... (check-in: 3d2f1886a3 user: brickviking tags: trunk) | |
| 00:41 | Diff toggles: move the toggle-all button into the page-level diff UI controls (and add that area to the /ckout page) and only show the toggle-all option if more than one diff is being shown. Only show the Sync-sbs-diff preference checkbox when rendering sbs diffs. There is some slight visual inconsistency across various pages in how the toggle-all button is rendered, so there's still opportunity for some polishing-up. ... (check-in: a718a76894 user: stephan tags: trunk) | |
|
2024-12-12
| ||
| 11:36 | On the /ckout page, omit the diff if the diff parameter is 0 or smaller. ... (check-in: 0654e8459a user: drh tags: trunk) | |
Changes
Changes to src/default.css.
| ︙ | ︙ | |||
746 747 748 749 750 751 752 753 754 755 756 757 758 759 |
}
body.tkt div.content ol.tkt-changes > li:target > p > span {
border-bottom: 3px solid gold;
}
body.tkt div.content ol.tkt-changes > li:target > ol {
border-left: 1px solid gold;
}
body.cpage-info .file-change-line,
body.cpage-vdiff .file-change-line {
margin-top: 16px;
margin-bottom: 16px;
margin-right: 1em /* keep it from nudging right up against the scrollbar-reveal zone */;
display: flex;
flex-direction: row;
| > | 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 |
}
body.tkt div.content ol.tkt-changes > li:target > p > span {
border-bottom: 3px solid gold;
}
body.tkt div.content ol.tkt-changes > li:target > ol {
border-left: 1px solid gold;
}
body.cpage-ckout .file-change-line,
body.cpage-info .file-change-line,
body.cpage-vdiff .file-change-line {
margin-top: 16px;
margin-bottom: 16px;
margin-right: 1em /* keep it from nudging right up against the scrollbar-reveal zone */;
display: flex;
flex-direction: row;
|
| ︙ | ︙ |
Changes to src/fossil.diff.js.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/**
diff-related JS APIs for fossil.
*/
"use strict";
window.fossil.onPageLoad(function(){
/**
Adds toggle checkboxes to each file entry in the diff views for
/info and similar pages.
*/
const D = window.fossil.dom;
const allToggles = [/*collection of all diff-toggle checkboxes */];
const addToggle = function(diffElem){
const sib = diffElem.previousElementSibling,
| > > > > > > > > > > > > > > > > > > > > > > > | | > < < | | | < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > | 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/**
diff-related JS APIs for fossil.
*/
"use strict";
/* Locate the UI element (if any) into which we can inject some diff-related
UI controls. */
window.fossil.onPageLoad(function(){
const potentialParents = window.fossil.page.diffControlContainers = [
/* CSS selectors for possible parents for injected diff-related UI
controls. */
/* Put the most likely pages at the end, as array.pop() is more
efficient than array.shift() (see loop below). */
/* /filedit */ 'body.cpage-fileedit #fileedit-tab-diff-buttons',
/* /wikiedit */ 'body.cpage-wikiedit #wikiedit-tab-diff-buttons',
/* /fdiff */ 'body.fdiff form div.submenu',
/* /vdiff */ 'body.vdiff form div.submenu',
/* /info, /vinfo, /ckout */ 'body.vinfo div.sectionmenu.info-changes-menu'
];
window.fossil.page.diffControlContainer = undefined;
while( potentialParents.length ){
if( (window.fossil.page.diffControlContainer
= document.querySelector(potentialParents.pop())) ){
break;
}
}
});
window.fossil.onPageLoad(function(){
/**
Adds toggle checkboxes to each file entry in the diff views for
/info and similar pages.
*/
const D = window.fossil.dom;
const allToggles = [/*collection of all diff-toggle checkboxes */];
const addToggle = function(diffElem){
const sib = diffElem.previousElementSibling,
ckbox = sib ? D.addClass(D.checkbox(true), 'diff-toggle') : 0;
if(!sib) return;
const lblToggle = D.label();
D.append(lblToggle, ckbox, D.text(" show/hide "));
const wrapper = D.append(D.span(), lblToggle);
allToggles.push(ckbox);
D.append(sib, D.append(wrapper, lblToggle));
ckbox.addEventListener('change', function(){
diffElem.classList[this.checked ? 'remove' : 'add']('hidden');
}, false);
};
if( !document.querySelector('body.fdiff') ){
/* Don't show the diff toggle button for /fdiff because it only
has a single file to show (and also a different DOM layout). */
document.querySelectorAll('table.diff').forEach(addToggle);
}
const icm = allToggles.length>1 ? window.fossil.page.diffControlContainer : 0;
if(icm) {
const btnAll = D.addClass(D.a("#", "Toggle all diffs"), "button");
D.append( icm, btnAll );
btnAll.addEventListener('click', function(ev){
ev.preventDefault();
ev.stopPropagation();
/* Figure out whether we want to show all or hide all: if any diffs are
toggled off, show all, else hide all. */
let show = false;
let ckbox;
for( ckbox of allToggles ){
if( !ckbox.checked ){
show = true;
break;
}
}
for( ckbox of allToggles ){
/* Toggle all entries to match this new state. We use click()
instead of ckbox.checked=... so that the on-change event handler
fires. */
if(ckbox.checked!==show) ckbox.click();
}
}, false);
}
});
window.fossil.onPageLoad(function(){
const F = window.fossil, D = F.dom;
const Diff = F.diff = {
e:{/*certain cached DOM elements*/},
|
| ︙ | ︙ | |||
649 650 651 652 653 654 655 |
const F = window.fossil, D = F.dom, Diff = F.diff;
/* Look for a parent element to hold the sbs-sync-scroll toggle
checkbox. This differs per page. If we don't find one, simply
elide that toggle and use whatever preference the user last
specified (defaulting to on). */
let cbSync /* scroll-sync checkbox */;
| | < < < < < < < < < < | > | < < | | 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 |
const F = window.fossil, D = F.dom, Diff = F.diff;
/* Look for a parent element to hold the sbs-sync-scroll toggle
checkbox. This differs per page. If we don't find one, simply
elide that toggle and use whatever preference the user last
specified (defaulting to on). */
let cbSync /* scroll-sync checkbox */;
let eToggleParent = /* element to put the sync-scroll checkbox in */
document.querySelector('table.diff.splitdiff')
? window.fossil.page.diffControlContainer
: undefined;
const keySbsScroll = 'sync-diff-scroll' /* F.storage key for persistent user preference */;
if( eToggleParent ){
/* Add a checkbox to toggle sbs scroll sync. Remember that in
order to be UI-consistent in the /vdiff page we have to ensure
that the checkbox is to the LEFT of of its label. We store the
sync-scroll preference in F.storage (not a cookie) so that it
persists across page loads and different apps. */
cbSync = D.checkbox(keySbsScroll, F.storage.getBool(keySbsScroll,true));
|
| ︙ | ︙ |
Changes to src/info.c.
| ︙ | ︙ | |||
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 |
vid
);
if( pCfg->diffFlags & DIFF_SIDEBYSIDE ){
pCfg->diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
}else{
pCfg->diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
}
while( db_step(&q)==SQLITE_ROW ){
const char *zTreename = db_column_text(&q,0);
int isDeleted = db_column_int(&q, 1);
int isChnged = db_column_int(&q,2);
int isNew = db_column_int(&q,3);
int srcid = db_column_int(&q, 4);
int isLink = db_column_int(&q, 5);
const char *zUuid = db_column_text(&q, 6);
int showDiff = 1;
pCfg->diffFlags &= (~DIFF_FILE_MASK);
if( isDeleted ){
| > > > > | | | | | | > | 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 |
vid
);
if( pCfg->diffFlags & DIFF_SIDEBYSIDE ){
pCfg->diffFlags |= DIFF_HTML | DIFF_NOTTOOBIG;
}else{
pCfg->diffFlags |= DIFF_LINENO | DIFF_HTML | DIFF_NOTTOOBIG;
}
@ <div class="sectionmenu info-changes-menu">
/* Filled out by JS */
@ </div>
while( db_step(&q)==SQLITE_ROW ){
const char *zTreename = db_column_text(&q,0);
int isDeleted = db_column_int(&q, 1);
int isChnged = db_column_int(&q,2);
int isNew = db_column_int(&q,3);
int srcid = db_column_int(&q, 4);
int isLink = db_column_int(&q, 5);
const char *zUuid = db_column_text(&q, 6);
int showDiff = 1;
pCfg->diffFlags &= (~DIFF_FILE_MASK);
@ <div class='file-change-line'><span>
if( isDeleted ){
@ DELETED %h(zTreename)
pCfg->diffFlags |= DIFF_FILE_DELETED;
showDiff = 0;
}else if( file_access(zTreename, F_OK) ){
@ MISSING %h(zTreename)
showDiff = 0;
}else if( isNew ){
@ ADDED %h(zTreename)
pCfg->diffFlags |= DIFF_FILE_ADDED;
srcid = 0;
showDiff = 0;
}else if( isChnged==3 ){
@ ADDED_BY_MERGE %h(zTreename)
pCfg->diffFlags |= DIFF_FILE_ADDED;
srcid = 0;
showDiff = 0;
}else if( isChnged==5 ){
@ ADDED_BY_INTEGRATE %h(zTreename)
pCfg->diffFlags |= DIFF_FILE_ADDED;
srcid = 0;
showDiff = 0;
}else{
@ CHANGED %h(zTreename)
}
@ </span></div>
if( showDiff ){
Blob old, new;
if( !isLink != !file_islink(zTreename) ){
@ %s(DIFF_CANNOT_COMPUTE_SYMLINK)
continue;
}
if( srcid>0 ){
|
| ︙ | ︙ |