Fossil SCM

Experimentally add a JS toggle to the /tktview comment list to show the comment history in reverse order (newest first). This toggle only appears if JS is available and is persistent on the client. It was added per an off-list request from Steve Landers.

stephan 2025-10-07 19:46 trunk
Commit 531668f5b153cd99e5e28595c44da73e85f26e8e39303178aac2ddb53507b2f6
--- 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,34 @@
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
+ console.debug/*
29
+ * This script adds a checkbox to reverse the sorting on any body.tkt
30
+ * pages which contain a .tktCommentArea element.
31
+ */
32
+window.addEventListener( 'load', function() {
33
+ const tgt = document.querySelectorAll('.tktCommentArea');
34
+
--- a/src/fossil.page.ticket.js
+++ b/src/fossil.page.ticket.js
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/fossil.page.ticket.js
+++ b/src/fossil.page.ticket.js
@@ -0,0 +1,34 @@
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 console.debug/*
29 * This script adds a checkbox to reverse the sorting on any body.tkt
30 * pages which contain a .tktCommentArea element.
31 */
32 window.addEventListener( 'load', function() {
33 const tgt = document.querySelectorAll('.tktCommentArea');
34
--- 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