Fossil SCM

Add a checkbox to ticket pages which have multiple comments to reverse the order of the comments, per an off-list request. Making this visible requires resetting the ticket edit/view templates to their defaults or integrating equivalent edits into local versions of those templates.

stephan 2025-10-10 17:16 trunk merge
Commit cc09064f5c2e79ecfacf129acaf42b1dcd48fa2281889d6a3071bdb392bf8097
--- src/default.css
+++ src/default.css
@@ -752,10 +752,22 @@
752752
border-bottom: 3px solid gold;
753753
}
754754
body.tkt div.content ol.tkt-changes > li:target > ol {
755755
border-left: 1px solid gold;
756756
}
757
+body.tkt .tktCommentArea {
758
+ display: flex;
759
+ flex-direction: column;
760
+}
761
+body.tkt .newest-first-controls {
762
+ display: flex;
763
+ flex-direction: row;
764
+ flex-wrap: nowrap;
765
+}
766
+body.tkt .tktCommentArea.reverse {
767
+ flex-direction: column-reverse;
768
+}
757769
body.cpage-ckout .file-change-line,
758770
body.cpage-info .file-change-line,
759771
body.cpage-vinfo .file-change-line,
760772
body.cpage-ci .file-change-line,
761773
body.cpage-vdiff .file-change-line {
762774
763775
ADDED src/fossil.page.ticket.js
--- src/default.css
+++ src/default.css
@@ -752,10 +752,22 @@
752 border-bottom: 3px solid gold;
753 }
754 body.tkt div.content ol.tkt-changes > li:target > ol {
755 border-left: 1px solid gold;
756 }
 
 
 
 
 
 
 
 
 
 
 
 
757 body.cpage-ckout .file-change-line,
758 body.cpage-info .file-change-line,
759 body.cpage-vinfo .file-change-line,
760 body.cpage-ci .file-change-line,
761 body.cpage-vdiff .file-change-line {
762
763 DDED src/fossil.page.ticket.js
--- src/default.css
+++ src/default.css
@@ -752,10 +752,22 @@
752 border-bottom: 3px solid gold;
753 }
754 body.tkt div.content ol.tkt-changes > li:target > ol {
755 border-left: 1px solid gold;
756 }
757 body.tkt .tktCommentArea {
758 display: flex;
759 flex-direction: column;
760 }
761 body.tkt .newest-first-controls {
762 display: flex;
763 flex-direction: row;
764 flex-wrap: nowrap;
765 }
766 body.tkt .tktCommentArea.reverse {
767 flex-direction: column-reverse;
768 }
769 body.cpage-ckout .file-change-line,
770 body.cpage-info .file-change-line,
771 body.cpage-vinfo .file-change-line,
772 body.cpage-ci .file-change-line,
773 body.cpage-vdiff .file-change-line {
774
775 DDED src/fossil.page.ticket.js
--- a/src/fossil.page.ticket.js
+++ b/src/fossil.page.ticket.js
@@ -0,0 +1,32 @@
1
+/*
2
+ * This script adds a checkbox to reverse the sorting on any body.tkt
3
+ * pages which contain a .tktCommentArea element.
4
+ */
5
+window.addEventListener( 'load', function() {
6
+ const tgt = document.querySelectorAll('.tktCommentArea');
7
+ if( !tgt ) return;
8
+ const F = globalThis.fossil, D = F.dom;
9
+ let i = 0;
10
+ for(const e of tgt) {
11
+ ++i;
12
+ const childs = e.querySelectorAll('.tktCommentEntry');
13
+ if( !childs || 1===childs.length ) continue;
14
+ const cbReverseKey = 'tktCommentArea:reverse';
15
+ const cbReverse = D.checkbox();
16
+ const cbId = cbReverseKey+':'+i;
17
+ cbReverse.setAttribute('id',cbId);
18
+ const widget = D.append(
19
+ D.div(),
20
+ cbReverse,
21
+ D.label(cbReverse, " Show newest first? ")
22
+ );
23
+ widget.classList.add('newest-first-controls');
24
+ e.parentElement.insertBefore(widget,e);
25
+ const cbReverseIt = ()=>{
26
+ e.classList[cbReverse.checked ? 'add' : 'remove']('reverse');
27
+ F.storage.set(cbReverseKey, cbReverse.checked ? 1 : 0);
28
+ };
29
+ cbReverse.addEventListener('change', cbReverseIt, true);
30
+ cbReverse.checked = !!(+F.storage.get(cbReverseKey, 0));
31
+ };
32
+}); // window.addEventListener( 'load' ...
--- a/src/fossil.page.ticket.js
+++ b/src/fossil.page.ticket.js
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/fossil.page.ticket.js
+++ b/src/fossil.page.ticket.js
@@ -0,0 +1,32 @@
1 /*
2 * This script adds a checkbox to reverse the sorting on any body.tkt
3 * pages which contain a .tktCommentArea element.
4 */
5 window.addEventListener( 'load', function() {
6 const tgt = document.querySelectorAll('.tktCommentArea');
7 if( !tgt ) return;
8 const F = globalThis.fossil, D = F.dom;
9 let i = 0;
10 for(const e of tgt) {
11 ++i;
12 const childs = e.querySelectorAll('.tktCommentEntry');
13 if( !childs || 1===childs.length ) continue;
14 const cbReverseKey = 'tktCommentArea:reverse';
15 const cbReverse = D.checkbox();
16 const cbId = cbReverseKey+':'+i;
17 cbReverse.setAttribute('id',cbId);
18 const widget = D.append(
19 D.div(),
20 cbReverse,
21 D.label(cbReverse, " Show newest first? ")
22 );
23 widget.classList.add('newest-first-controls');
24 e.parentElement.insertBefore(widget,e);
25 const cbReverseIt = ()=>{
26 e.classList[cbReverse.checked ? 'add' : 'remove']('reverse');
27 F.storage.set(cbReverseKey, cbReverse.checked ? 1 : 0);
28 };
29 cbReverse.addEventListener('change', cbReverseIt, true);
30 cbReverse.checked = !!(+F.storage.get(cbReverseKey, 0));
31 };
32 }); // window.addEventListener( 'load' ...
--- src/main.mk
+++ src/main.mk
@@ -237,10 +237,11 @@
237237
$(SRCDIR)/fossil.page.chat.js \
238238
$(SRCDIR)/fossil.page.fileedit.js \
239239
$(SRCDIR)/fossil.page.forumpost.js \
240240
$(SRCDIR)/fossil.page.pikchrshow.js \
241241
$(SRCDIR)/fossil.page.pikchrshowasm.js \
242
+ $(SRCDIR)/fossil.page.ticket.js \
242243
$(SRCDIR)/fossil.page.whistory.js \
243244
$(SRCDIR)/fossil.page.wikiedit.js \
244245
$(SRCDIR)/fossil.pikchr.js \
245246
$(SRCDIR)/fossil.popupwidget.js \
246247
$(SRCDIR)/fossil.storage.js \
247248
--- src/main.mk
+++ src/main.mk
@@ -237,10 +237,11 @@
237 $(SRCDIR)/fossil.page.chat.js \
238 $(SRCDIR)/fossil.page.fileedit.js \
239 $(SRCDIR)/fossil.page.forumpost.js \
240 $(SRCDIR)/fossil.page.pikchrshow.js \
241 $(SRCDIR)/fossil.page.pikchrshowasm.js \
 
242 $(SRCDIR)/fossil.page.whistory.js \
243 $(SRCDIR)/fossil.page.wikiedit.js \
244 $(SRCDIR)/fossil.pikchr.js \
245 $(SRCDIR)/fossil.popupwidget.js \
246 $(SRCDIR)/fossil.storage.js \
247
--- src/main.mk
+++ src/main.mk
@@ -237,10 +237,11 @@
237 $(SRCDIR)/fossil.page.chat.js \
238 $(SRCDIR)/fossil.page.fileedit.js \
239 $(SRCDIR)/fossil.page.forumpost.js \
240 $(SRCDIR)/fossil.page.pikchrshow.js \
241 $(SRCDIR)/fossil.page.pikchrshowasm.js \
242 $(SRCDIR)/fossil.page.ticket.js \
243 $(SRCDIR)/fossil.page.whistory.js \
244 $(SRCDIR)/fossil.page.wikiedit.js \
245 $(SRCDIR)/fossil.pikchr.js \
246 $(SRCDIR)/fossil.popupwidget.js \
247 $(SRCDIR)/fossil.storage.js \
248
+4
--- src/tkt.c
+++ src/tkt.c
@@ -791,10 +791,14 @@
791791
if( g.thTrace ) Th_Trace("END_TKTVIEW<br>\n", -1);
792792
793793
if( zFullName ){
794794
attachment_list(zFullName, "<h2>Attachments:</h2>", 1);
795795
}
796
+
797
+ builtin_fossil_js_bundle_or("dom", "storage", NULL);
798
+ builtin_request_js("fossil.page.ticket.js");
799
+ builtin_fulfill_js_requests();
796800
797801
style_finish_page();
798802
}
799803
800804
/*
801805
--- src/tkt.c
+++ src/tkt.c
@@ -791,10 +791,14 @@
791 if( g.thTrace ) Th_Trace("END_TKTVIEW<br>\n", -1);
792
793 if( zFullName ){
794 attachment_list(zFullName, "<h2>Attachments:</h2>", 1);
795 }
 
 
 
 
796
797 style_finish_page();
798 }
799
800 /*
801
--- src/tkt.c
+++ src/tkt.c
@@ -791,10 +791,14 @@
791 if( g.thTrace ) Th_Trace("END_TKTVIEW<br>\n", -1);
792
793 if( zFullName ){
794 attachment_list(zFullName, "<h2>Attachments:</h2>", 1);
795 }
796
797 builtin_fossil_js_bundle_or("dom", "storage", NULL);
798 builtin_request_js("fossil.page.ticket.js");
799 builtin_fulfill_js_requests();
800
801 style_finish_page();
802 }
803
804 /*
805
+8 -4
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -613,13 +613,14 @@
613613
@ if {$seenRow} {
614614
@ html "<hr>\n"
615615
@ } else {
616616
@ html "<tr><td class='tktDspLabel' style='text-align:left'>\n"
617617
@ html "User Comments:</td></tr>\n"
618
-@ html "<tr><td colspan='5' class='tktDspValue'>\n"
618
+@ html "<tr><td colspan='5' class='tktDspValue'><div class='tktCommentArea'>\n"
619619
@ set seenRow 1
620620
@ }
621
+@ html "<div class='tktCommentEntry'>"
621622
@ html "<span class='tktDspCommenter'>"
622623
@ puts $xlogin
623624
@ if {$xlogin ne $xusername && [string length $xusername]>0} {
624625
@ puts " (claiming to be $xusername)"
625626
@ }
@@ -637,12 +638,13 @@
637638
@ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
638639
@ } else {
639640
@ set r [randhex]
640641
@ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
641642
@ }
643
+@ html "</div>"; # .tktCommentEntry
642644
@ }
643
-@ if {$seenRow} {html "</td></tr>\n"}
645
+@ if {$seenRow} {html "</div></td></tr>\n"}
644646
@ </th1>
645647
@ </table>
646648
;
647649
648650
@@ -800,13 +802,14 @@
800802
@ html "<hr>\n"
801803
@ } else {
802804
@ html "<tr><td colspan='2'><hr></td></tr>\n"
803805
@ html "<tr><td colspan='2' class='tktDspLabel' style='text-align:left'>\n"
804806
@ html "Previous User Comments:</td></tr>\n"
805
-@ html "<tr><td colspan='2' class='tktDspValue'>\n"
807
+@ html "<tr><td colspan='2' class='tktDspValue'><div class='tktCommentArea'>\n"
806808
@ set seenRow 1
807809
@ }
810
+@ html "<div class='tktCommentEntry'>"
808811
@ html "<span class='tktDspCommenter'>"
809812
@ puts $xlogin
810813
@ if {$xlogin ne $xusername && [string length $xusername]>0} {
811814
@ puts " (claiming to be $xusername)"
812815
@ }
@@ -824,12 +827,13 @@
824827
@ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
825828
@ } else {
826829
@ set r [randhex]
827830
@ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
828831
@ }
832
+@ html "</div>"; # .tktCommentEntry
829833
@ }
830
-@ if {$seenRow} {html "</td></tr>\n"}
834
+@ if {$seenRow} {html "</div></td></tr>\n"}
831835
@ </th1>
832836
@
833837
@ </table>
834838
;
835839
836840
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -613,13 +613,14 @@
613 @ if {$seenRow} {
614 @ html "<hr>\n"
615 @ } else {
616 @ html "<tr><td class='tktDspLabel' style='text-align:left'>\n"
617 @ html "User Comments:</td></tr>\n"
618 @ html "<tr><td colspan='5' class='tktDspValue'>\n"
619 @ set seenRow 1
620 @ }
 
621 @ html "<span class='tktDspCommenter'>"
622 @ puts $xlogin
623 @ if {$xlogin ne $xusername && [string length $xusername]>0} {
624 @ puts " (claiming to be $xusername)"
625 @ }
@@ -637,12 +638,13 @@
637 @ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
638 @ } else {
639 @ set r [randhex]
640 @ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
641 @ }
 
642 @ }
643 @ if {$seenRow} {html "</td></tr>\n"}
644 @ </th1>
645 @ </table>
646 ;
647
648
@@ -800,13 +802,14 @@
800 @ html "<hr>\n"
801 @ } else {
802 @ html "<tr><td colspan='2'><hr></td></tr>\n"
803 @ html "<tr><td colspan='2' class='tktDspLabel' style='text-align:left'>\n"
804 @ html "Previous User Comments:</td></tr>\n"
805 @ html "<tr><td colspan='2' class='tktDspValue'>\n"
806 @ set seenRow 1
807 @ }
 
808 @ html "<span class='tktDspCommenter'>"
809 @ puts $xlogin
810 @ if {$xlogin ne $xusername && [string length $xusername]>0} {
811 @ puts " (claiming to be $xusername)"
812 @ }
@@ -824,12 +827,13 @@
824 @ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
825 @ } else {
826 @ set r [randhex]
827 @ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
828 @ }
 
829 @ }
830 @ if {$seenRow} {html "</td></tr>\n"}
831 @ </th1>
832 @
833 @ </table>
834 ;
835
836
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -613,13 +613,14 @@
613 @ if {$seenRow} {
614 @ html "<hr>\n"
615 @ } else {
616 @ html "<tr><td class='tktDspLabel' style='text-align:left'>\n"
617 @ html "User Comments:</td></tr>\n"
618 @ html "<tr><td colspan='5' class='tktDspValue'><div class='tktCommentArea'>\n"
619 @ set seenRow 1
620 @ }
621 @ html "<div class='tktCommentEntry'>"
622 @ html "<span class='tktDspCommenter'>"
623 @ puts $xlogin
624 @ if {$xlogin ne $xusername && [string length $xusername]>0} {
625 @ puts " (claiming to be $xusername)"
626 @ }
@@ -637,12 +638,13 @@
638 @ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
639 @ } else {
640 @ set r [randhex]
641 @ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
642 @ }
643 @ html "</div>"; # .tktCommentEntry
644 @ }
645 @ if {$seenRow} {html "</div></td></tr>\n"}
646 @ </th1>
647 @ </table>
648 ;
649
650
@@ -800,13 +802,14 @@
802 @ html "<hr>\n"
803 @ } else {
804 @ html "<tr><td colspan='2'><hr></td></tr>\n"
805 @ html "<tr><td colspan='2' class='tktDspLabel' style='text-align:left'>\n"
806 @ html "Previous User Comments:</td></tr>\n"
807 @ html "<tr><td colspan='2' class='tktDspValue'><div class='tktCommentArea'>\n"
808 @ set seenRow 1
809 @ }
810 @ html "<div class='tktCommentEntry'>"
811 @ html "<span class='tktDspCommenter'>"
812 @ puts $xlogin
813 @ if {$xlogin ne $xusername && [string length $xusername]>0} {
814 @ puts " (claiming to be $xusername)"
815 @ }
@@ -824,12 +827,13 @@
827 @ wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki>\n"
828 @ } else {
829 @ set r [randhex]
830 @ wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n"
831 @ }
832 @ html "</div>"; # .tktCommentEntry
833 @ }
834 @ if {$seenRow} {html "</div></td></tr>\n"}
835 @ </th1>
836 @
837 @ </table>
838 ;
839
840
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -623,10 +623,11 @@
623623
$(SRCDIR)/fossil.page.chat.js \
624624
$(SRCDIR)/fossil.page.fileedit.js \
625625
$(SRCDIR)/fossil.page.forumpost.js \
626626
$(SRCDIR)/fossil.page.pikchrshow.js \
627627
$(SRCDIR)/fossil.page.pikchrshowasm.js \
628
+ $(SRCDIR)/fossil.page.ticket.js \
628629
$(SRCDIR)/fossil.page.whistory.js \
629630
$(SRCDIR)/fossil.page.wikiedit.js \
630631
$(SRCDIR)/fossil.pikchr.js \
631632
$(SRCDIR)/fossil.popupwidget.js \
632633
$(SRCDIR)/fossil.storage.js \
633634
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -623,10 +623,11 @@
623 $(SRCDIR)/fossil.page.chat.js \
624 $(SRCDIR)/fossil.page.fileedit.js \
625 $(SRCDIR)/fossil.page.forumpost.js \
626 $(SRCDIR)/fossil.page.pikchrshow.js \
627 $(SRCDIR)/fossil.page.pikchrshowasm.js \
 
628 $(SRCDIR)/fossil.page.whistory.js \
629 $(SRCDIR)/fossil.page.wikiedit.js \
630 $(SRCDIR)/fossil.pikchr.js \
631 $(SRCDIR)/fossil.popupwidget.js \
632 $(SRCDIR)/fossil.storage.js \
633
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -623,10 +623,11 @@
623 $(SRCDIR)/fossil.page.chat.js \
624 $(SRCDIR)/fossil.page.fileedit.js \
625 $(SRCDIR)/fossil.page.forumpost.js \
626 $(SRCDIR)/fossil.page.pikchrshow.js \
627 $(SRCDIR)/fossil.page.pikchrshowasm.js \
628 $(SRCDIR)/fossil.page.ticket.js \
629 $(SRCDIR)/fossil.page.whistory.js \
630 $(SRCDIR)/fossil.page.wikiedit.js \
631 $(SRCDIR)/fossil.pikchr.js \
632 $(SRCDIR)/fossil.popupwidget.js \
633 $(SRCDIR)/fossil.storage.js \
634
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -585,10 +585,11 @@
585585
"$(SRCDIR)\fossil.page.chat.js" \
586586
"$(SRCDIR)\fossil.page.fileedit.js" \
587587
"$(SRCDIR)\fossil.page.forumpost.js" \
588588
"$(SRCDIR)\fossil.page.pikchrshow.js" \
589589
"$(SRCDIR)\fossil.page.pikchrshowasm.js" \
590
+ "$(SRCDIR)\fossil.page.ticket.js" \
590591
"$(SRCDIR)\fossil.page.whistory.js" \
591592
"$(SRCDIR)\fossil.page.wikiedit.js" \
592593
"$(SRCDIR)\fossil.pikchr.js" \
593594
"$(SRCDIR)\fossil.popupwidget.js" \
594595
"$(SRCDIR)\fossil.storage.js" \
@@ -1220,10 +1221,11 @@
12201221
echo "$(SRCDIR)\fossil.page.chat.js" >> $@
12211222
echo "$(SRCDIR)\fossil.page.fileedit.js" >> $@
12221223
echo "$(SRCDIR)\fossil.page.forumpost.js" >> $@
12231224
echo "$(SRCDIR)\fossil.page.pikchrshow.js" >> $@
12241225
echo "$(SRCDIR)\fossil.page.pikchrshowasm.js" >> $@
1226
+ echo "$(SRCDIR)\fossil.page.ticket.js" >> $@
12251227
echo "$(SRCDIR)\fossil.page.whistory.js" >> $@
12261228
echo "$(SRCDIR)\fossil.page.wikiedit.js" >> $@
12271229
echo "$(SRCDIR)\fossil.pikchr.js" >> $@
12281230
echo "$(SRCDIR)\fossil.popupwidget.js" >> $@
12291231
echo "$(SRCDIR)\fossil.storage.js" >> $@
12301232
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -585,10 +585,11 @@
585 "$(SRCDIR)\fossil.page.chat.js" \
586 "$(SRCDIR)\fossil.page.fileedit.js" \
587 "$(SRCDIR)\fossil.page.forumpost.js" \
588 "$(SRCDIR)\fossil.page.pikchrshow.js" \
589 "$(SRCDIR)\fossil.page.pikchrshowasm.js" \
 
590 "$(SRCDIR)\fossil.page.whistory.js" \
591 "$(SRCDIR)\fossil.page.wikiedit.js" \
592 "$(SRCDIR)\fossil.pikchr.js" \
593 "$(SRCDIR)\fossil.popupwidget.js" \
594 "$(SRCDIR)\fossil.storage.js" \
@@ -1220,10 +1221,11 @@
1220 echo "$(SRCDIR)\fossil.page.chat.js" >> $@
1221 echo "$(SRCDIR)\fossil.page.fileedit.js" >> $@
1222 echo "$(SRCDIR)\fossil.page.forumpost.js" >> $@
1223 echo "$(SRCDIR)\fossil.page.pikchrshow.js" >> $@
1224 echo "$(SRCDIR)\fossil.page.pikchrshowasm.js" >> $@
 
1225 echo "$(SRCDIR)\fossil.page.whistory.js" >> $@
1226 echo "$(SRCDIR)\fossil.page.wikiedit.js" >> $@
1227 echo "$(SRCDIR)\fossil.pikchr.js" >> $@
1228 echo "$(SRCDIR)\fossil.popupwidget.js" >> $@
1229 echo "$(SRCDIR)\fossil.storage.js" >> $@
1230
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -585,10 +585,11 @@
585 "$(SRCDIR)\fossil.page.chat.js" \
586 "$(SRCDIR)\fossil.page.fileedit.js" \
587 "$(SRCDIR)\fossil.page.forumpost.js" \
588 "$(SRCDIR)\fossil.page.pikchrshow.js" \
589 "$(SRCDIR)\fossil.page.pikchrshowasm.js" \
590 "$(SRCDIR)\fossil.page.ticket.js" \
591 "$(SRCDIR)\fossil.page.whistory.js" \
592 "$(SRCDIR)\fossil.page.wikiedit.js" \
593 "$(SRCDIR)\fossil.pikchr.js" \
594 "$(SRCDIR)\fossil.popupwidget.js" \
595 "$(SRCDIR)\fossil.storage.js" \
@@ -1220,10 +1221,11 @@
1221 echo "$(SRCDIR)\fossil.page.chat.js" >> $@
1222 echo "$(SRCDIR)\fossil.page.fileedit.js" >> $@
1223 echo "$(SRCDIR)\fossil.page.forumpost.js" >> $@
1224 echo "$(SRCDIR)\fossil.page.pikchrshow.js" >> $@
1225 echo "$(SRCDIR)\fossil.page.pikchrshowasm.js" >> $@
1226 echo "$(SRCDIR)\fossil.page.ticket.js" >> $@
1227 echo "$(SRCDIR)\fossil.page.whistory.js" >> $@
1228 echo "$(SRCDIR)\fossil.page.wikiedit.js" >> $@
1229 echo "$(SRCDIR)\fossil.pikchr.js" >> $@
1230 echo "$(SRCDIR)\fossil.popupwidget.js" >> $@
1231 echo "$(SRCDIR)\fossil.storage.js" >> $@
1232

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button