Fossil SCM

Apply fixes to all web views to pass WCAG 2.1 tests performed by "axe DevTools" browser extension. Most fixes related to screen reader compatibility, like making sure that form elements have labels. Some color changes to improve contrast on Default skin. Made more HTML5 compliant. Minor improvement to select combo boxes for UX. Improved Search form UX. Two minor bug fixes for malformed HTML. Fixed help pages to resolve issues with non-compliant HTML being generated. Mostly documented at https://fossil-scm.org/forum/forumpost/aafb17a981df4166

ericwikman 2022-11-13 16:26 trunk
Commit 1f231db380dd1d3965f3c3360450ee2614b35e90152d620fa8b40fae804f9d38
120 files changed +1 -1 +2 -2 +5 -5 +11 -11 +2 -2 +4 -4 +3 -3 +2 -2 +5 -5 +11 -11 +2 -2 +5 -5 +28 -9 +2 -2 +7 -7 +10 -10 +2 -2 +5 -5 +18 -18 +2 -2 +5 -5 +13 -13 +2 -2 +4 -4 +19 -19 +2 -2 +5 -5 +22 -22 +2 -2 +4 -4 +1 -1 +38 -49 -22 +3 -5 -7 +2 -23 -4 +7 -18 +1 -3 +2 -1 -15 +2 -5 +1 -1 +4 -3 -11 +3 -1 +1 -15 -4 -2 +5 -6 -1 -1 +1 -5 -4 -1 +16 -16 -7 -1 +2 -4 +1 -1 +11 -12 +3 -1 +29 -11 +1 -1 +12 -11 +9 -6 +2 +5 -3 +8 -5 +1 -1 -5 +1 -14 -1 -3 +2 -3 +25 -36 +8 -14 +28 -32 -19 -1 -10 +2 -3 +6 -23 +4 -4 +3 -17 -19 -2 +14 -12 +2 -7 +6 -11 +63 -38 +12 -12 +1 -1 -1 +6 -6 +1 -1 +18 -18 -2 -20 -14 -1 +16 -18 +19 -16 +1 -1 -24 -10 -4 -7 +14 -15 +10 -26 +30 -29 +5 -14 -17 +14 -22 +1 -2 -1 +2 -2 -5 +11 -11
~ skins/ardoise/css.txt ~ skins/ardoise/footer.txt ~ skins/ardoise/header.txt ~ skins/black_and_white/css.txt ~ skins/black_and_white/footer.txt ~ skins/black_and_white/header.txt ~ skins/blitz/css.txt ~ skins/blitz/footer.txt ~ skins/blitz/header.txt ~ skins/darkmode/css.txt ~ skins/darkmode/footer.txt ~ skins/darkmode/header.txt ~ skins/default/css.txt ~ skins/default/footer.txt ~ skins/default/header.txt ~ skins/eagle/css.txt ~ skins/eagle/footer.txt ~ skins/eagle/header.txt ~ skins/khaki/css.txt ~ skins/khaki/footer.txt ~ skins/khaki/header.txt ~ skins/original/css.txt ~ skins/original/footer.txt ~ skins/original/header.txt ~ skins/plain_gray/css.txt ~ skins/plain_gray/footer.txt ~ skins/plain_gray/header.txt ~ skins/xekri/css.txt ~ skins/xekri/footer.txt ~ skins/xekri/header.txt ~ src/accordion.js ~ src/add.c ~ src/alerts.c ~ src/allrepo.c ~ src/attach.c ~ src/backoffice.c ~ src/bisect.c ~ src/blob.c ~ src/branch.c ~ src/browse.c ~ src/builtin.c ~ src/bundle.c ~ src/cache.c ~ src/capabilities.c ~ src/captcha.c ~ src/chat.c ~ src/color.c ~ src/configure.c ~ src/content.c ~ src/db.c ~ src/default.css ~ src/descendants.c ~ src/diff.c ~ src/dispatch.c ~ src/doc.c ~ src/etag.c ~ src/event.c ~ src/export.c ~ src/file.c ~ src/fileedit.c ~ src/finfo.c ~ src/forum.c ~ src/fossil.diff.js ~ src/fossil.dom.js ~ src/fossil.page.brlist.js ~ src/fossil.page.chat.js ~ src/fossil.page.fileedit.js ~ src/fossil.page.pikchrshow.js ~ src/fossil.page.pikchrshowasm.js ~ src/fossil.page.wikiedit.js ~ src/hbmenu.js ~ src/hname.c ~ src/hook.c ~ src/http.c ~ src/http_ssl.c ~ src/import.c ~ src/info.c ~ src/interwiki.c ~ src/login.c ~ src/main.c ~ src/manifest.c ~ src/merge.c ~ src/name.c ~ src/patch.c ~ src/piechart.c ~ src/pikchrshow.c ~ src/purge.c ~ src/regexp.c ~ src/report.c ~ src/rss.c ~ src/search.c ~ src/setup.c ~ src/setupuser.c ~ src/sha1.c ~ src/sha3.c ~ src/shun.c ~ src/sitemap.c ~ src/skins.c ~ src/smtp.c ~ src/sqlcmd.c ~ src/stash.c ~ src/stat.c ~ src/statrep.c ~ src/style.c ~ src/style.chat.css ~ src/sync.c ~ src/tag.c ~ src/tar.c ~ src/th_main.c ~ src/timeline.c ~ src/tkt.c ~ src/tktsetup.c ~ src/unversioned.c ~ src/user.c ~ src/wiki.c ~ src/wikiformat.c ~ src/xfer.c ~ src/xfersetup.c ~ src/zip.c ~ www/customskin.md
--- skins/ardoise/css.txt
+++ skins/ardoise/css.txt
@@ -728,11 +728,11 @@
728728
border-radius: 5px
729729
}
730730
.mainmenu li:hover a {
731731
color: #000
732732
}
733
-div#hbdrop {
733
+nav#hbdrop {
734734
background-color: #161819;
735735
border-radius: 15px;
736736
display: none;
737737
width: 100%;
738738
position: absolute;
739739
--- skins/ardoise/css.txt
+++ skins/ardoise/css.txt
@@ -728,11 +728,11 @@
728 border-radius: 5px
729 }
730 .mainmenu li:hover a {
731 color: #000
732 }
733 div#hbdrop {
734 background-color: #161819;
735 border-radius: 15px;
736 display: none;
737 width: 100%;
738 position: absolute;
739
--- skins/ardoise/css.txt
+++ skins/ardoise/css.txt
@@ -728,11 +728,11 @@
728 border-radius: 5px
729 }
730 .mainmenu li:hover a {
731 color: #000
732 }
733 nav#hbdrop {
734 background-color: #161819;
735 border-radius: 15px;
736 display: none;
737 width: 100%;
738 position: absolute;
739
--- skins/ardoise/footer.txt
+++ skins/ardoise/footer.txt
@@ -3,13 +3,13 @@
33
html "</div>"
44
}
55
</th1>
66
</div> <!-- end div container -->
77
</div> <!-- end div middle max-full-width -->
8
-<div class="footer">
8
+<footer class="footer">
99
<div class="container">
1010
<div class="pull-right">
1111
<a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
1212
</div>
1313
This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
1414
</div>
15
-</div>
15
+</footer>
1616
--- skins/ardoise/footer.txt
+++ skins/ardoise/footer.txt
@@ -3,13 +3,13 @@
3 html "</div>"
4 }
5 </th1>
6 </div> <!-- end div container -->
7 </div> <!-- end div middle max-full-width -->
8 <div class="footer">
9 <div class="container">
10 <div class="pull-right">
11 <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
12 </div>
13 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
14 </div>
15 </div>
16
--- skins/ardoise/footer.txt
+++ skins/ardoise/footer.txt
@@ -3,13 +3,13 @@
3 html "</div>"
4 }
5 </th1>
6 </div> <!-- end div container -->
7 </div> <!-- end div middle max-full-width -->
8 <footer class="footer">
9 <div class="container">
10 <div class="pull-right">
11 <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
12 </div>
13 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
14 </div>
15 </footer>
16
--- skins/ardoise/header.txt
+++ skins/ardoise/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="container">
33
<div class="login pull-right">
44
<th1>
55
if {[info exists login]} {
66
html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n"
@@ -18,11 +18,11 @@
1818
</th1>
1919
<small> &nbsp;$<title></small></h1>
2020
</div>
2121
2222
<!-- Main Menu -->
23
- <div class="mainmenu">
23
+ <nav class="mainmenu">
2424
<ul>
2525
<th1>
2626
html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
2727
builtin_request_js hbmenu.js
2828
set once 1
@@ -35,16 +35,16 @@
3535
html "<li class='$class'>"
3636
if {[string match /* $url]} {set url $home$url}
3737
html "<a href='$url'>$name</a></li>\n"
3838
}
3939
</th1></ul>
40
- </div> <!-- end div mainmenu -->
41
- <div id="hbdrop"></div>
40
+ </nav> <!-- end div mainmenu -->
41
+ <nav id='hbdrop' title="Sitemap"></nav>
4242
</div> <!-- end div container -->
43
- </div> <!-- end div header -->
43
+ </header> <!-- end div header -->
4444
<div class="middle max-full-width">
4545
<div class="container">
4646
<th1>
4747
if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} {
4848
html "<div class=\"artifact_content\">"
4949
}
5050
</th1>
5151
--- skins/ardoise/header.txt
+++ skins/ardoise/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="container">
3 <div class="login pull-right">
4 <th1>
5 if {[info exists login]} {
6 html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n"
@@ -18,11 +18,11 @@
18 </th1>
19 <small> &nbsp;$<title></small></h1>
20 </div>
21
22 <!-- Main Menu -->
23 <div class="mainmenu">
24 <ul>
25 <th1>
26 html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
27 builtin_request_js hbmenu.js
28 set once 1
@@ -35,16 +35,16 @@
35 html "<li class='$class'>"
36 if {[string match /* $url]} {set url $home$url}
37 html "<a href='$url'>$name</a></li>\n"
38 }
39 </th1></ul>
40 </div> <!-- end div mainmenu -->
41 <div id="hbdrop"></div>
42 </div> <!-- end div container -->
43 </div> <!-- end div header -->
44 <div class="middle max-full-width">
45 <div class="container">
46 <th1>
47 if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} {
48 html "<div class=\"artifact_content\">"
49 }
50 </th1>
51
--- skins/ardoise/header.txt
+++ skins/ardoise/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="container">
3 <div class="login pull-right">
4 <th1>
5 if {[info exists login]} {
6 html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n"
@@ -18,11 +18,11 @@
18 </th1>
19 <small> &nbsp;$<title></small></h1>
20 </div>
21
22 <!-- Main Menu -->
23 <nav class="mainmenu">
24 <ul>
25 <th1>
26 html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
27 builtin_request_js hbmenu.js
28 set once 1
@@ -35,16 +35,16 @@
35 html "<li class='$class'>"
36 if {[string match /* $url]} {set url $home$url}
37 html "<a href='$url'>$name</a></li>\n"
38 }
39 </th1></ul>
40 </nav> <!-- end div mainmenu -->
41 <nav id='hbdrop' title="Sitemap"></nav>
42 </div> <!-- end div container -->
43 </header> <!-- end div header -->
44 <div class="middle max-full-width">
45 <div class="container">
46 <th1>
47 if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} {
48 html "<div class=\"artifact_content\">"
49 }
50 </th1>
51
--- skins/black_and_white/css.txt
+++ skins/black_and_white/css.txt
@@ -49,11 +49,11 @@
4949
font-weight: bold;
5050
white-space: nowrap;
5151
}
5252
5353
/* The header across the top of the page */
54
-div.header {
54
+header.header {
5555
margin:10px 0px 10px 0px;
5656
padding:1px 0px 0px 20px;
5757
border-style:solid;
5858
border-color:black;
5959
border-width:1px 0px;
@@ -60,11 +60,11 @@
6060
background-color:#eee;
6161
}
6262
6363
/* The main menu bar that appears at the top left of the page beneath
6464
** the header. Width must be co-ordinated with the container below */
65
-div.mainmenu {
65
+nav.mainmenu {
6666
float: left;
6767
margin-left: 10px;
6868
margin-right: 20px;
6969
font-size: 0.9em;
7070
font-weight: bold;
@@ -73,20 +73,20 @@
7373
border:1px solid #999;
7474
width:6em;
7575
}
7676
7777
/* Main menu is now a list */
78
-div.mainmenu ul {
78
+nav.mainmenu ul {
7979
padding: 0;
8080
list-style:none;
8181
}
82
-div.mainmenu a, div.mainmenu a:visited{
82
+nav.mainmenu a, nav.mainmenu a:visited{
8383
padding: 1px 10px 1px 10px;
8484
color: #333;
8585
text-decoration: none;
8686
}
87
-div.mainmenu a:hover {
87
+nav.mainmenu a:hover {
8888
color: #eee;
8989
background-color: #333;
9090
}
9191
9292
/* Container for the sub-menu and content so they don't spread
@@ -94,33 +94,33 @@
9494
#container {
9595
padding-left: 9em;
9696
}
9797
9898
/* The submenu bar that *sometimes* appears below the main menu */
99
-div.submenu, div.sectionmenu {
99
+nav.submenu, div.sectionmenu {
100100
padding: 3px 10px 3px 10px;
101101
font-size: 0.9em;
102102
text-align: center;
103103
border:1px solid #999;
104104
border-width:1px 0px;
105105
background-color: #eee;
106106
color: #333;
107107
}
108
-div.submenu a, div.submenu a:visited, div.sectionmenu>a.button:link,
109
-div.sectionmenu>a.button:visited, div.submenu label {
108
+nav.submenu a, nav.submenu a:visited, div.sectionmenu>a.button:link,
109
+div.sectionmenu>a.button:visited, nav.submenu label {
110110
padding: 3px 10px 3px 10px;
111111
color: #333;
112112
text-decoration: none;
113113
}
114
-div.submenu a:hover, div.sectionmenu>a.button:hover, div.submenu label:hover {
114
+nav.submenu a:hover, div.sectionmenu>a.button:hover, nav.submenu label:hover {
115115
color: #eee;
116116
background-color: #333;
117117
}
118118
119119
/* All page content from the bottom of the menu or submenu down to
120120
** the footer */
121
-div.content {
121
+main.content {
122122
padding: 2ex 1ex 0ex 2ex;
123123
}
124124
125125
/* Some pages have section dividers */
126126
div.section {
@@ -149,11 +149,11 @@
149149
color: #333;
150150
white-space: nowrap;
151151
}
152152
153153
/* The footer at the very bottom of the page */
154
-div.footer {
154
+footer.footer {
155155
font-size: 0.8em;
156156
margin-top: 12px;
157157
padding: 5px 10px 5px 10px;
158158
text-align: right;
159159
background-color: #eee;
160160
--- skins/black_and_white/css.txt
+++ skins/black_and_white/css.txt
@@ -49,11 +49,11 @@
49 font-weight: bold;
50 white-space: nowrap;
51 }
52
53 /* The header across the top of the page */
54 div.header {
55 margin:10px 0px 10px 0px;
56 padding:1px 0px 0px 20px;
57 border-style:solid;
58 border-color:black;
59 border-width:1px 0px;
@@ -60,11 +60,11 @@
60 background-color:#eee;
61 }
62
63 /* The main menu bar that appears at the top left of the page beneath
64 ** the header. Width must be co-ordinated with the container below */
65 div.mainmenu {
66 float: left;
67 margin-left: 10px;
68 margin-right: 20px;
69 font-size: 0.9em;
70 font-weight: bold;
@@ -73,20 +73,20 @@
73 border:1px solid #999;
74 width:6em;
75 }
76
77 /* Main menu is now a list */
78 div.mainmenu ul {
79 padding: 0;
80 list-style:none;
81 }
82 div.mainmenu a, div.mainmenu a:visited{
83 padding: 1px 10px 1px 10px;
84 color: #333;
85 text-decoration: none;
86 }
87 div.mainmenu a:hover {
88 color: #eee;
89 background-color: #333;
90 }
91
92 /* Container for the sub-menu and content so they don't spread
@@ -94,33 +94,33 @@
94 #container {
95 padding-left: 9em;
96 }
97
98 /* The submenu bar that *sometimes* appears below the main menu */
99 div.submenu, div.sectionmenu {
100 padding: 3px 10px 3px 10px;
101 font-size: 0.9em;
102 text-align: center;
103 border:1px solid #999;
104 border-width:1px 0px;
105 background-color: #eee;
106 color: #333;
107 }
108 div.submenu a, div.submenu a:visited, div.sectionmenu>a.button:link,
109 div.sectionmenu>a.button:visited, div.submenu label {
110 padding: 3px 10px 3px 10px;
111 color: #333;
112 text-decoration: none;
113 }
114 div.submenu a:hover, div.sectionmenu>a.button:hover, div.submenu label:hover {
115 color: #eee;
116 background-color: #333;
117 }
118
119 /* All page content from the bottom of the menu or submenu down to
120 ** the footer */
121 div.content {
122 padding: 2ex 1ex 0ex 2ex;
123 }
124
125 /* Some pages have section dividers */
126 div.section {
@@ -149,11 +149,11 @@
149 color: #333;
150 white-space: nowrap;
151 }
152
153 /* The footer at the very bottom of the page */
154 div.footer {
155 font-size: 0.8em;
156 margin-top: 12px;
157 padding: 5px 10px 5px 10px;
158 text-align: right;
159 background-color: #eee;
160
--- skins/black_and_white/css.txt
+++ skins/black_and_white/css.txt
@@ -49,11 +49,11 @@
49 font-weight: bold;
50 white-space: nowrap;
51 }
52
53 /* The header across the top of the page */
54 header.header {
55 margin:10px 0px 10px 0px;
56 padding:1px 0px 0px 20px;
57 border-style:solid;
58 border-color:black;
59 border-width:1px 0px;
@@ -60,11 +60,11 @@
60 background-color:#eee;
61 }
62
63 /* The main menu bar that appears at the top left of the page beneath
64 ** the header. Width must be co-ordinated with the container below */
65 nav.mainmenu {
66 float: left;
67 margin-left: 10px;
68 margin-right: 20px;
69 font-size: 0.9em;
70 font-weight: bold;
@@ -73,20 +73,20 @@
73 border:1px solid #999;
74 width:6em;
75 }
76
77 /* Main menu is now a list */
78 nav.mainmenu ul {
79 padding: 0;
80 list-style:none;
81 }
82 nav.mainmenu a, nav.mainmenu a:visited{
83 padding: 1px 10px 1px 10px;
84 color: #333;
85 text-decoration: none;
86 }
87 nav.mainmenu a:hover {
88 color: #eee;
89 background-color: #333;
90 }
91
92 /* Container for the sub-menu and content so they don't spread
@@ -94,33 +94,33 @@
94 #container {
95 padding-left: 9em;
96 }
97
98 /* The submenu bar that *sometimes* appears below the main menu */
99 nav.submenu, div.sectionmenu {
100 padding: 3px 10px 3px 10px;
101 font-size: 0.9em;
102 text-align: center;
103 border:1px solid #999;
104 border-width:1px 0px;
105 background-color: #eee;
106 color: #333;
107 }
108 nav.submenu a, nav.submenu a:visited, div.sectionmenu>a.button:link,
109 div.sectionmenu>a.button:visited, nav.submenu label {
110 padding: 3px 10px 3px 10px;
111 color: #333;
112 text-decoration: none;
113 }
114 nav.submenu a:hover, div.sectionmenu>a.button:hover, nav.submenu label:hover {
115 color: #eee;
116 background-color: #333;
117 }
118
119 /* All page content from the bottom of the menu or submenu down to
120 ** the footer */
121 main.content {
122 padding: 2ex 1ex 0ex 2ex;
123 }
124
125 /* Some pages have section dividers */
126 div.section {
@@ -149,11 +149,11 @@
149 color: #333;
150 white-space: nowrap;
151 }
152
153 /* The footer at the very bottom of the page */
154 footer.footer {
155 font-size: 0.8em;
156 margin-top: 12px;
157 padding: 5px 10px 5px 10px;
158 text-align: right;
159 background-color: #eee;
160
--- skins/black_and_white/footer.txt
+++ skins/black_and_white/footer.txt
@@ -1,3 +1,3 @@
1
-<div class="footer">
1
+<footer class="footer">
22
Fossil $release_version $manifest_version $manifest_date
3
-</div>
3
+</footer>
44
--- skins/black_and_white/footer.txt
+++ skins/black_and_white/footer.txt
@@ -1,3 +1,3 @@
1 <div class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </div>
4
--- skins/black_and_white/footer.txt
+++ skins/black_and_white/footer.txt
@@ -1,3 +1,3 @@
1 <footer class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </footer>
4
--- skins/black_and_white/header.txt
+++ skins/black_and_white/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="logo">
33
<img src="$logo_image_url" alt="logo">
44
<br />$<project_name>
55
</div>
66
<div class="title">$<title></div>
@@ -9,12 +9,12 @@
99
puts "Logged in as $login"
1010
} else {
1111
puts "Not logged in"
1212
}
1313
</th1></div>
14
-</div>
15
-<div class="mainmenu">
14
+</header>
15
+<nav class="mainmenu">
1616
<th1>
1717
set sitemap 0
1818
foreach {name url expr class} $mainmenu {
1919
if {![capexpr $expr]} continue
2020
if {[string match /* $url]} {set url $home$url}
@@ -22,6 +22,6 @@
2222
if {[string match /sitemap $url]} {set sitemap 1}
2323
}
2424
if {!$sitemap} {
2525
html "<a href='$home/sitemap'>Sitemap</a>\n"
2626
}
27
-</th1></div>
27
+</th1></nav>
2828
--- skins/black_and_white/header.txt
+++ skins/black_and_white/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="logo">
3 <img src="$logo_image_url" alt="logo">
4 <br />$<project_name>
5 </div>
6 <div class="title">$<title></div>
@@ -9,12 +9,12 @@
9 puts "Logged in as $login"
10 } else {
11 puts "Not logged in"
12 }
13 </th1></div>
14 </div>
15 <div class="mainmenu">
16 <th1>
17 set sitemap 0
18 foreach {name url expr class} $mainmenu {
19 if {![capexpr $expr]} continue
20 if {[string match /* $url]} {set url $home$url}
@@ -22,6 +22,6 @@
22 if {[string match /sitemap $url]} {set sitemap 1}
23 }
24 if {!$sitemap} {
25 html "<a href='$home/sitemap'>Sitemap</a>\n"
26 }
27 </th1></div>
28
--- skins/black_and_white/header.txt
+++ skins/black_and_white/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="logo">
3 <img src="$logo_image_url" alt="logo">
4 <br />$<project_name>
5 </div>
6 <div class="title">$<title></div>
@@ -9,12 +9,12 @@
9 puts "Logged in as $login"
10 } else {
11 puts "Not logged in"
12 }
13 </th1></div>
14 </header>
15 <nav class="mainmenu">
16 <th1>
17 set sitemap 0
18 foreach {name url expr class} $mainmenu {
19 if {![capexpr $expr]} continue
20 if {[string match /* $url]} {set url $home$url}
@@ -22,6 +22,6 @@
22 if {[string match /sitemap $url]} {set sitemap 1}
23 }
24 if {!$sitemap} {
25 html "<a href='$home/sitemap'>Sitemap</a>\n"
26 }
27 </th1></nav>
28
--- skins/blitz/css.txt
+++ skins/blitz/css.txt
@@ -866,25 +866,25 @@
866866
background-repeat: no-repeat;
867867
background-position: center bottom;
868868
}
869869
870870
.mainmenu li a,
871
-div#hbdrop a {
871
+nav#hbdrop a {
872872
color: #3b5c6b;
873873
padding: 10px 15px;
874874
}
875875
876876
.mainmenu li.active a {
877877
font-weight: bold;
878878
}
879879
880880
.mainmenu li:hover
881
-div#hbdrop a:hover {
881
+nav#hbdrop a:hover {
882882
background-color: #eee;
883883
}
884884
885
-div#hbdrop {
885
+nav#hbdrop {
886886
background-color: white;
887887
border: 2px solid #ccc;
888888
display: none;
889889
width: 100%;
890890
position: absolute;
891891
--- skins/blitz/css.txt
+++ skins/blitz/css.txt
@@ -866,25 +866,25 @@
866 background-repeat: no-repeat;
867 background-position: center bottom;
868 }
869
870 .mainmenu li a,
871 div#hbdrop a {
872 color: #3b5c6b;
873 padding: 10px 15px;
874 }
875
876 .mainmenu li.active a {
877 font-weight: bold;
878 }
879
880 .mainmenu li:hover
881 div#hbdrop a:hover {
882 background-color: #eee;
883 }
884
885 div#hbdrop {
886 background-color: white;
887 border: 2px solid #ccc;
888 display: none;
889 width: 100%;
890 position: absolute;
891
--- skins/blitz/css.txt
+++ skins/blitz/css.txt
@@ -866,25 +866,25 @@
866 background-repeat: no-repeat;
867 background-position: center bottom;
868 }
869
870 .mainmenu li a,
871 nav#hbdrop a {
872 color: #3b5c6b;
873 padding: 10px 15px;
874 }
875
876 .mainmenu li.active a {
877 font-weight: bold;
878 }
879
880 .mainmenu li:hover
881 nav#hbdrop a:hover {
882 background-color: #eee;
883 }
884
885 nav#hbdrop {
886 background-color: white;
887 border: 2px solid #ccc;
888 display: none;
889 width: 100%;
890 position: absolute;
891
--- skins/blitz/footer.txt
+++ skins/blitz/footer.txt
@@ -1,10 +1,10 @@
11
</div> <!-- end div container -->
22
</div> <!-- end div middle max-full-width -->
3
-<div class="footer">
3
+<footer class="footer">
44
<div class="container">
55
<div class="pull-right">
66
<a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
77
</div>
88
This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
99
</div>
10
-</div>
10
+</footer>
1111
--- skins/blitz/footer.txt
+++ skins/blitz/footer.txt
@@ -1,10 +1,10 @@
1 </div> <!-- end div container -->
2 </div> <!-- end div middle max-full-width -->
3 <div class="footer">
4 <div class="container">
5 <div class="pull-right">
6 <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
7 </div>
8 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
9 </div>
10 </div>
11
--- skins/blitz/footer.txt
+++ skins/blitz/footer.txt
@@ -1,10 +1,10 @@
1 </div> <!-- end div container -->
2 </div> <!-- end div middle max-full-width -->
3 <footer class="footer">
4 <div class="container">
5 <div class="pull-right">
6 <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
7 </div>
8 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
9 </div>
10 </footer>
11
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="container">
33
44
<!-- Header -->
55
<div class="login pull-right">
66
<th1>
@@ -20,11 +20,11 @@
2020
</th1>
2121
<small> &nbsp;$<title></small></h1>
2222
</div>
2323
2424
<!-- Main Menu -->
25
- <div class="mainmenu">
25
+ <nav class="mainmenu">
2626
<ul><th1>
2727
html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
2828
builtin_request_js hbmenu.js
2929
set once 1
3030
foreach {name url expr class} $mainmenu {
@@ -36,11 +36,11 @@
3636
html "<li class='$class'>"
3737
if {[string match /* $url]} {set url $home$url}
3838
html "<a href='$url'>$name</a></li>\n"
3939
}
4040
</th1></ul>
41
- </div> <!-- end div mainmenu -->
42
- <div id="hbdrop"></div>
41
+ </nav> <!-- end div mainmenu -->
42
+ <nav id='hbdrop' title="Sitemap"></nav>
4343
</div> <!-- end div container -->
44
- </div> <!-- end div header -->
44
+ </header> <!-- end div header -->
4545
<div class="middle max-full-width">
4646
<div class="container">
4747
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="container">
3
4 <!-- Header -->
5 <div class="login pull-right">
6 <th1>
@@ -20,11 +20,11 @@
20 </th1>
21 <small> &nbsp;$<title></small></h1>
22 </div>
23
24 <!-- Main Menu -->
25 <div class="mainmenu">
26 <ul><th1>
27 html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
28 builtin_request_js hbmenu.js
29 set once 1
30 foreach {name url expr class} $mainmenu {
@@ -36,11 +36,11 @@
36 html "<li class='$class'>"
37 if {[string match /* $url]} {set url $home$url}
38 html "<a href='$url'>$name</a></li>\n"
39 }
40 </th1></ul>
41 </div> <!-- end div mainmenu -->
42 <div id="hbdrop"></div>
43 </div> <!-- end div container -->
44 </div> <!-- end div header -->
45 <div class="middle max-full-width">
46 <div class="container">
47
--- skins/blitz/header.txt
+++ skins/blitz/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="container">
3
4 <!-- Header -->
5 <div class="login pull-right">
6 <th1>
@@ -20,11 +20,11 @@
20 </th1>
21 <small> &nbsp;$<title></small></h1>
22 </div>
23
24 <!-- Main Menu -->
25 <nav class="mainmenu">
26 <ul><th1>
27 html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a></li>\n"
28 builtin_request_js hbmenu.js
29 set once 1
30 foreach {name url expr class} $mainmenu {
@@ -36,11 +36,11 @@
36 html "<li class='$class'>"
37 if {[string match /* $url]} {set url $home$url}
38 html "<a href='$url'>$name</a></li>\n"
39 }
40 </th1></ul>
41 </nav> <!-- end div mainmenu -->
42 <nav id='hbdrop' title="Sitemap"></nav>
43 </div> <!-- end div container -->
44 </header> <!-- end div header -->
45 <div class="middle max-full-width">
46 <div class="container">
47
--- skins/darkmode/css.txt
+++ skins/darkmode/css.txt
@@ -34,28 +34,28 @@
3434
div.leftoftitle {
3535
visibility: hidden;
3636
}
3737
3838
/* The header across the top of the page */
39
-div.header {
39
+header.header {
4040
display: table;
4141
width: 100%;
4242
}
4343
4444
/* The main menu bar that appears at the top of the page beneath
4545
** the header */
46
-div.mainmenu {
46
+nav.mainmenu {
4747
padding: 0.25em 0.5em;
4848
font-size: 0.9em;
4949
font-weight: bold;
5050
text-align: center;
5151
border-top-left-radius: 0.5em;
5252
border-top-right-radius: 0.5em;
5353
border-bottom: 1px dotted rgba(200,200,200,0.3);
5454
z-index: 21; /* just above hbdrop */
5555
}
56
-div#hbdrop {
56
+nav#hbdrop {
5757
background-color: #1f1f1f;
5858
border: 2px solid #303536;
5959
border-radius: 0 0 0.5em 0.5em;
6060
display: none;
6161
left: 2em;
@@ -62,16 +62,16 @@
6262
width: calc(100% - 4em);
6363
position: absolute;
6464
z-index: 20; /* just below mainmenu, but above timeline bubbles */
6565
}
6666
67
-div.mainmenu, div.submenu, div.sectionmenu {
67
+nav.mainmenu, nav.submenu, div.sectionmenu {
6868
color: #ffffffcc;
6969
background-color: #303536/*#0000ff60*/;
7070
}
7171
/* The submenu bar that *sometimes* appears below the main menu */
72
-div.submenu, div.sectionmenu {
72
+nav.submenu, div.sectionmenu {
7373
padding: 0.15em 0.5em 0.15em 0;
7474
font-size: 0.9em;
7575
text-align: center;
7676
border-bottom-left-radius: 0.5em;
7777
border-bottom-right-radius: 0.5em;
@@ -80,16 +80,16 @@
8080
color: rgba(127, 201, 255, 0.9);
8181
display: inline;
8282
text-decoration: none;
8383
}
8484
a:visited {opacity: 0.8}
85
-div.mainmenu a, div.submenu a,
86
-div.sectionmenu>a.button, div.submenu label,
87
-div.footer a {
85
+nav.mainmenu a, nav.submenu a,
86
+div.sectionmenu>a.button, nav.submenu label,
87
+footer.footer a {
8888
padding: 0.15em 0.5em;
8989
}
90
-div.mainmenu a.active {
90
+nav.mainmenu a.active {
9191
border-bottom: 1px solid #FF4500f0;
9292
}
9393
a:hover,
9494
a:visited:hover {
9595
background-color: #FF4500f0;
@@ -137,11 +137,11 @@
137137
border-color: #888;
138138
}
139139
140140
/* All page content from the bottom of the menu or submenu down to
141141
** the footer */
142
-div.content {
142
+main.content {
143143
padding: 0ex 1ex 1ex 1ex;
144144
}
145145
146146
/* Some pages have section dividers */
147147
div.section {
@@ -168,11 +168,11 @@
168168
clear: left;
169169
white-space: nowrap;
170170
}
171171
172172
/* The footer at the very bottom of the page */
173
-div.footer {
173
+footer.footer {
174174
clear: both;
175175
font-size: 0.8em;
176176
padding: 0.15em 0.5em;
177177
text-align: right;
178178
background-color: #303536/*#0000ff60*/;
179179
--- skins/darkmode/css.txt
+++ skins/darkmode/css.txt
@@ -34,28 +34,28 @@
34 div.leftoftitle {
35 visibility: hidden;
36 }
37
38 /* The header across the top of the page */
39 div.header {
40 display: table;
41 width: 100%;
42 }
43
44 /* The main menu bar that appears at the top of the page beneath
45 ** the header */
46 div.mainmenu {
47 padding: 0.25em 0.5em;
48 font-size: 0.9em;
49 font-weight: bold;
50 text-align: center;
51 border-top-left-radius: 0.5em;
52 border-top-right-radius: 0.5em;
53 border-bottom: 1px dotted rgba(200,200,200,0.3);
54 z-index: 21; /* just above hbdrop */
55 }
56 div#hbdrop {
57 background-color: #1f1f1f;
58 border: 2px solid #303536;
59 border-radius: 0 0 0.5em 0.5em;
60 display: none;
61 left: 2em;
@@ -62,16 +62,16 @@
62 width: calc(100% - 4em);
63 position: absolute;
64 z-index: 20; /* just below mainmenu, but above timeline bubbles */
65 }
66
67 div.mainmenu, div.submenu, div.sectionmenu {
68 color: #ffffffcc;
69 background-color: #303536/*#0000ff60*/;
70 }
71 /* The submenu bar that *sometimes* appears below the main menu */
72 div.submenu, div.sectionmenu {
73 padding: 0.15em 0.5em 0.15em 0;
74 font-size: 0.9em;
75 text-align: center;
76 border-bottom-left-radius: 0.5em;
77 border-bottom-right-radius: 0.5em;
@@ -80,16 +80,16 @@
80 color: rgba(127, 201, 255, 0.9);
81 display: inline;
82 text-decoration: none;
83 }
84 a:visited {opacity: 0.8}
85 div.mainmenu a, div.submenu a,
86 div.sectionmenu>a.button, div.submenu label,
87 div.footer a {
88 padding: 0.15em 0.5em;
89 }
90 div.mainmenu a.active {
91 border-bottom: 1px solid #FF4500f0;
92 }
93 a:hover,
94 a:visited:hover {
95 background-color: #FF4500f0;
@@ -137,11 +137,11 @@
137 border-color: #888;
138 }
139
140 /* All page content from the bottom of the menu or submenu down to
141 ** the footer */
142 div.content {
143 padding: 0ex 1ex 1ex 1ex;
144 }
145
146 /* Some pages have section dividers */
147 div.section {
@@ -168,11 +168,11 @@
168 clear: left;
169 white-space: nowrap;
170 }
171
172 /* The footer at the very bottom of the page */
173 div.footer {
174 clear: both;
175 font-size: 0.8em;
176 padding: 0.15em 0.5em;
177 text-align: right;
178 background-color: #303536/*#0000ff60*/;
179
--- skins/darkmode/css.txt
+++ skins/darkmode/css.txt
@@ -34,28 +34,28 @@
34 div.leftoftitle {
35 visibility: hidden;
36 }
37
38 /* The header across the top of the page */
39 header.header {
40 display: table;
41 width: 100%;
42 }
43
44 /* The main menu bar that appears at the top of the page beneath
45 ** the header */
46 nav.mainmenu {
47 padding: 0.25em 0.5em;
48 font-size: 0.9em;
49 font-weight: bold;
50 text-align: center;
51 border-top-left-radius: 0.5em;
52 border-top-right-radius: 0.5em;
53 border-bottom: 1px dotted rgba(200,200,200,0.3);
54 z-index: 21; /* just above hbdrop */
55 }
56 nav#hbdrop {
57 background-color: #1f1f1f;
58 border: 2px solid #303536;
59 border-radius: 0 0 0.5em 0.5em;
60 display: none;
61 left: 2em;
@@ -62,16 +62,16 @@
62 width: calc(100% - 4em);
63 position: absolute;
64 z-index: 20; /* just below mainmenu, but above timeline bubbles */
65 }
66
67 nav.mainmenu, nav.submenu, div.sectionmenu {
68 color: #ffffffcc;
69 background-color: #303536/*#0000ff60*/;
70 }
71 /* The submenu bar that *sometimes* appears below the main menu */
72 nav.submenu, div.sectionmenu {
73 padding: 0.15em 0.5em 0.15em 0;
74 font-size: 0.9em;
75 text-align: center;
76 border-bottom-left-radius: 0.5em;
77 border-bottom-right-radius: 0.5em;
@@ -80,16 +80,16 @@
80 color: rgba(127, 201, 255, 0.9);
81 display: inline;
82 text-decoration: none;
83 }
84 a:visited {opacity: 0.8}
85 nav.mainmenu a, nav.submenu a,
86 div.sectionmenu>a.button, nav.submenu label,
87 footer.footer a {
88 padding: 0.15em 0.5em;
89 }
90 nav.mainmenu a.active {
91 border-bottom: 1px solid #FF4500f0;
92 }
93 a:hover,
94 a:visited:hover {
95 background-color: #FF4500f0;
@@ -137,11 +137,11 @@
137 border-color: #888;
138 }
139
140 /* All page content from the bottom of the menu or submenu down to
141 ** the footer */
142 main.content {
143 padding: 0ex 1ex 1ex 1ex;
144 }
145
146 /* Some pages have section dividers */
147 div.section {
@@ -168,11 +168,11 @@
168 clear: left;
169 white-space: nowrap;
170 }
171
172 /* The footer at the very bottom of the page */
173 footer.footer {
174 clear: both;
175 font-size: 0.8em;
176 padding: 0.15em 0.5em;
177 text-align: right;
178 background-color: #303536/*#0000ff60*/;
179
--- skins/darkmode/footer.txt
+++ skins/darkmode/footer.txt
@@ -1,8 +1,8 @@
1
-<div class="footer">
1
+<footer class="footer">
22
<div class="container">
33
<div class="pull-right">
44
<a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
55
</div>
66
This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
77
</div>
8
-</div>
8
+</footer>
99
--- skins/darkmode/footer.txt
+++ skins/darkmode/footer.txt
@@ -1,8 +1,8 @@
1 <div class="footer">
2 <div class="container">
3 <div class="pull-right">
4 <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
5 </div>
6 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
7 </div>
8 </div>
9
--- skins/darkmode/footer.txt
+++ skins/darkmode/footer.txt
@@ -1,8 +1,8 @@
1 <footer class="footer">
2 <div class="container">
3 <div class="pull-right">
4 <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a>
5 </div>
6 This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
7 </div>
8 </footer>
9
--- skins/darkmode/header.txt
+++ skins/darkmode/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="status leftoftitle"><th1>
33
if {[info exists login]} {
44
set logintext "<a href='$home/login'>$login</a>\n"
55
} else {
66
set logintext "<a href='$home/login'>Login</a>\n"
@@ -9,12 +9,12 @@
99
</th1></div>
1010
<div class="title">$<title></div>
1111
<div class="status"><nobr><th1>
1212
html $logintext
1313
</th1></nobr></div>
14
-</div>
15
-<div class="mainmenu">
14
+</header>
15
+<nav class="mainmenu">
1616
<th1>
1717
html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
1818
builtin_request_js hbmenu.js
1919
foreach {name url expr class} $mainmenu {
2020
if {![capexpr $expr]} continue
@@ -24,7 +24,7 @@
2424
}
2525
set url $home$url
2626
}
2727
html "<a href='$url' class='$class'>$name</a>\n"
2828
}
29
-</th1></div>
30
-<div id='hbdrop'></div>
29
+</th1></nav>
30
+<nav id='hbdrop' title="Sitemap"></nav>
3131
--- skins/darkmode/header.txt
+++ skins/darkmode/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="status leftoftitle"><th1>
3 if {[info exists login]} {
4 set logintext "<a href='$home/login'>$login</a>\n"
5 } else {
6 set logintext "<a href='$home/login'>Login</a>\n"
@@ -9,12 +9,12 @@
9 </th1></div>
10 <div class="title">$<title></div>
11 <div class="status"><nobr><th1>
12 html $logintext
13 </th1></nobr></div>
14 </div>
15 <div class="mainmenu">
16 <th1>
17 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
18 builtin_request_js hbmenu.js
19 foreach {name url expr class} $mainmenu {
20 if {![capexpr $expr]} continue
@@ -24,7 +24,7 @@
24 }
25 set url $home$url
26 }
27 html "<a href='$url' class='$class'>$name</a>\n"
28 }
29 </th1></div>
30 <div id='hbdrop'></div>
31
--- skins/darkmode/header.txt
+++ skins/darkmode/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="status leftoftitle"><th1>
3 if {[info exists login]} {
4 set logintext "<a href='$home/login'>$login</a>\n"
5 } else {
6 set logintext "<a href='$home/login'>Login</a>\n"
@@ -9,12 +9,12 @@
9 </th1></div>
10 <div class="title">$<title></div>
11 <div class="status"><nobr><th1>
12 html $logintext
13 </th1></nobr></div>
14 </header>
15 <nav class="mainmenu">
16 <th1>
17 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
18 builtin_request_js hbmenu.js
19 foreach {name url expr class} $mainmenu {
20 if {![capexpr $expr]} continue
@@ -24,7 +24,7 @@
24 }
25 set url $home$url
26 }
27 html "<a href='$url' class='$class'>$name</a>\n"
28 }
29 </th1></nav>
30 <nav id='hbdrop' title="Sitemap"></nav>
31
--- skins/default/css.txt
+++ skins/default/css.txt
@@ -9,31 +9,31 @@
99
-mx-text-size-adjust: none;
1010
-webkit-text-size-adjust: none;
1111
}
1212
1313
a {
14
- color: #4183C4;
14
+ color: #2D5486;
1515
text-decoration: none;
1616
}
1717
a:hover {
18
- color: #4183C4;
18
+ color: #2D5486;
1919
text-decoration: underline;
2020
}
2121
2222
2323
/* Page title, above menu bars */
2424
2525
.title {
26
- color: #4183C4;
26
+ color: #3A76BB;
2727
float: left;
2828
}
2929
.title h1 {
3030
display: inline;
3131
}
3232
.title h1:after {
3333
content: " / ";
34
- color: #777;
34
+ color: #6B6B6B;
3535
font-weight: normal;
3636
}
3737
.status {
3838
float: right;
3939
font-size: 0.7em;
@@ -53,19 +53,19 @@
5353
white-space: nowrap;
5454
z-index: 21; /* just above hbdrop */
5555
}
5656
.mainmenu a {
5757
text-decoration: none;
58
- color: #777;
58
+ color: #6B6B6B;
5959
border-right: 1px solid #eaeaea;
6060
}
6161
.mainmenu a.active,
6262
.mainmenu a:hover {
6363
color: #000;
6464
border-bottom: 2px solid #D26911;
6565
}
66
-div#hbdrop {
66
+nav#hbdrop {
6767
background-color: white;
6868
border: 1px solid black;
6969
border-top: white;
7070
border-radius: 0 0 0.5em 0.5em;
7171
display: none;
@@ -83,11 +83,11 @@
8383
border-bottom: 1px solid #ccc;
8484
}
8585
.submenu a, .submenu label {
8686
padding: 10px 11px;
8787
text-decoration: none;
88
- color: #777;
88
+ color: #6B6B6B;
8989
}
9090
.submenu label {
9191
white-space: nowrap;
9292
}
9393
.submenu a:hover, .submenu label:hover {
@@ -95,16 +95,35 @@
9595
border: 1px solid #ccc;
9696
border-radius: 5px;
9797
color: #000;
9898
}
9999
span.submenuctrl, span.submenuctrl input, select.submenuctrl {
100
- color: #777;
100
+ color: #6B6B6B;
101101
}
102102
span.submenuctrl {
103103
white-space: nowrap;
104104
}
105105
106
+div.searchForm {
107
+ text-align: left;
108
+}
109
+.searchForm {
110
+ padding: 10px;
111
+ border-bottom: 1px solid #ccc;
112
+}
113
+.searchForm label {
114
+ padding: 10px 11px;
115
+ text-decoration: none;
116
+ color: #6B6B6B;
117
+ white-space: nowrap;
118
+}
119
+.searchForm label:hover {
120
+ padding: 6px 10px;
121
+ border: 1px solid #ccc;
122
+ border-radius: 5px;
123
+ color: #000;
124
+}
106125
107126
/* Main document area; elements common to most pages. */
108127
109128
.content {
110129
padding-top: 10px;
@@ -156,11 +175,11 @@
156175
.footer {
157176
border-top: 1px solid #ccc;
158177
padding: 10px;
159178
font-size: 0.7em;
160179
margin-top: 10px;
161
- color: #ccc;
180
+ color: #757575;
162181
}
163182
164183
/* Forum */
165184
166185
.forum a:visited {
167186
--- skins/default/css.txt
+++ skins/default/css.txt
@@ -9,31 +9,31 @@
9 -mx-text-size-adjust: none;
10 -webkit-text-size-adjust: none;
11 }
12
13 a {
14 color: #4183C4;
15 text-decoration: none;
16 }
17 a:hover {
18 color: #4183C4;
19 text-decoration: underline;
20 }
21
22
23 /* Page title, above menu bars */
24
25 .title {
26 color: #4183C4;
27 float: left;
28 }
29 .title h1 {
30 display: inline;
31 }
32 .title h1:after {
33 content: " / ";
34 color: #777;
35 font-weight: normal;
36 }
37 .status {
38 float: right;
39 font-size: 0.7em;
@@ -53,19 +53,19 @@
53 white-space: nowrap;
54 z-index: 21; /* just above hbdrop */
55 }
56 .mainmenu a {
57 text-decoration: none;
58 color: #777;
59 border-right: 1px solid #eaeaea;
60 }
61 .mainmenu a.active,
62 .mainmenu a:hover {
63 color: #000;
64 border-bottom: 2px solid #D26911;
65 }
66 div#hbdrop {
67 background-color: white;
68 border: 1px solid black;
69 border-top: white;
70 border-radius: 0 0 0.5em 0.5em;
71 display: none;
@@ -83,11 +83,11 @@
83 border-bottom: 1px solid #ccc;
84 }
85 .submenu a, .submenu label {
86 padding: 10px 11px;
87 text-decoration: none;
88 color: #777;
89 }
90 .submenu label {
91 white-space: nowrap;
92 }
93 .submenu a:hover, .submenu label:hover {
@@ -95,16 +95,35 @@
95 border: 1px solid #ccc;
96 border-radius: 5px;
97 color: #000;
98 }
99 span.submenuctrl, span.submenuctrl input, select.submenuctrl {
100 color: #777;
101 }
102 span.submenuctrl {
103 white-space: nowrap;
104 }
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
107 /* Main document area; elements common to most pages. */
108
109 .content {
110 padding-top: 10px;
@@ -156,11 +175,11 @@
156 .footer {
157 border-top: 1px solid #ccc;
158 padding: 10px;
159 font-size: 0.7em;
160 margin-top: 10px;
161 color: #ccc;
162 }
163
164 /* Forum */
165
166 .forum a:visited {
167
--- skins/default/css.txt
+++ skins/default/css.txt
@@ -9,31 +9,31 @@
9 -mx-text-size-adjust: none;
10 -webkit-text-size-adjust: none;
11 }
12
13 a {
14 color: #2D5486;
15 text-decoration: none;
16 }
17 a:hover {
18 color: #2D5486;
19 text-decoration: underline;
20 }
21
22
23 /* Page title, above menu bars */
24
25 .title {
26 color: #3A76BB;
27 float: left;
28 }
29 .title h1 {
30 display: inline;
31 }
32 .title h1:after {
33 content: " / ";
34 color: #6B6B6B;
35 font-weight: normal;
36 }
37 .status {
38 float: right;
39 font-size: 0.7em;
@@ -53,19 +53,19 @@
53 white-space: nowrap;
54 z-index: 21; /* just above hbdrop */
55 }
56 .mainmenu a {
57 text-decoration: none;
58 color: #6B6B6B;
59 border-right: 1px solid #eaeaea;
60 }
61 .mainmenu a.active,
62 .mainmenu a:hover {
63 color: #000;
64 border-bottom: 2px solid #D26911;
65 }
66 nav#hbdrop {
67 background-color: white;
68 border: 1px solid black;
69 border-top: white;
70 border-radius: 0 0 0.5em 0.5em;
71 display: none;
@@ -83,11 +83,11 @@
83 border-bottom: 1px solid #ccc;
84 }
85 .submenu a, .submenu label {
86 padding: 10px 11px;
87 text-decoration: none;
88 color: #6B6B6B;
89 }
90 .submenu label {
91 white-space: nowrap;
92 }
93 .submenu a:hover, .submenu label:hover {
@@ -95,16 +95,35 @@
95 border: 1px solid #ccc;
96 border-radius: 5px;
97 color: #000;
98 }
99 span.submenuctrl, span.submenuctrl input, select.submenuctrl {
100 color: #6B6B6B;
101 }
102 span.submenuctrl {
103 white-space: nowrap;
104 }
105
106 div.searchForm {
107 text-align: left;
108 }
109 .searchForm {
110 padding: 10px;
111 border-bottom: 1px solid #ccc;
112 }
113 .searchForm label {
114 padding: 10px 11px;
115 text-decoration: none;
116 color: #6B6B6B;
117 white-space: nowrap;
118 }
119 .searchForm label:hover {
120 padding: 6px 10px;
121 border: 1px solid #ccc;
122 border-radius: 5px;
123 color: #000;
124 }
125
126 /* Main document area; elements common to most pages. */
127
128 .content {
129 padding-top: 10px;
@@ -156,11 +175,11 @@
175 .footer {
176 border-top: 1px solid #ccc;
177 padding: 10px;
178 font-size: 0.7em;
179 margin-top: 10px;
180 color: #757575;
181 }
182
183 /* Forum */
184
185 .forum a:visited {
186
--- skins/default/footer.txt
+++ skins/default/footer.txt
@@ -1,5 +1,5 @@
1
-<div class="footer">
1
+<footer class="footer">
22
This page was generated in about
33
<th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
44
Fossil $release_version $manifest_version $manifest_date
5
-</div>
5
+</footer>
66
--- skins/default/footer.txt
+++ skins/default/footer.txt
@@ -1,5 +1,5 @@
1 <div class="footer">
2 This page was generated in about
3 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
4 Fossil $release_version $manifest_version $manifest_date
5 </div>
6
--- skins/default/footer.txt
+++ skins/default/footer.txt
@@ -1,5 +1,5 @@
1 <footer class="footer">
2 This page was generated in about
3 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
4 Fossil $release_version $manifest_version $manifest_date
5 </footer>
6
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -1,18 +1,18 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="title"><h1>$<project_name></h1>$<title></div>
33
<div class="status"><th1>
44
if {[info exists login]} {
5
- html "<a href='$home/login'>$login</a>\n"
5
+ html "<a href='$home/login' title='Logout'>$login</a>\n"
66
} else {
77
html "<a href='$home/login'>Login</a>\n"
88
}
99
</th1></div>
10
-</div>
11
-<div class="mainmenu">
10
+</header>
11
+<nav class="mainmenu" title="Main Menu">
1212
<th1>
13
-html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
13
+html "<a id='hbbtn' href='$home/sitemap' title='Site Map'>&#9776;</a>"
1414
builtin_request_js hbmenu.js
1515
foreach {name url expr class} $mainmenu {
1616
if {![capexpr $expr]} continue
1717
if {[string match /* $url]} {
1818
if {[string match $url\[/?#\]* /$current_page/]} {
@@ -20,7 +20,7 @@
2020
}
2121
set url $home$url
2222
}
2323
html "<a href='$url' class='$class'>$name</a>\n"
2424
}
25
-</th1></div>
26
-<div id='hbdrop'></div>
25
+</th1></nav>
26
+<nav id='hbdrop' title="Sitemap"></nav>
2727
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -1,18 +1,18 @@
1 <div class="header">
2 <div class="title"><h1>$<project_name></h1>$<title></div>
3 <div class="status"><th1>
4 if {[info exists login]} {
5 html "<a href='$home/login'>$login</a>\n"
6 } else {
7 html "<a href='$home/login'>Login</a>\n"
8 }
9 </th1></div>
10 </div>
11 <div class="mainmenu">
12 <th1>
13 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
14 builtin_request_js hbmenu.js
15 foreach {name url expr class} $mainmenu {
16 if {![capexpr $expr]} continue
17 if {[string match /* $url]} {
18 if {[string match $url\[/?#\]* /$current_page/]} {
@@ -20,7 +20,7 @@
20 }
21 set url $home$url
22 }
23 html "<a href='$url' class='$class'>$name</a>\n"
24 }
25 </th1></div>
26 <div id='hbdrop'></div>
27
--- skins/default/header.txt
+++ skins/default/header.txt
@@ -1,18 +1,18 @@
1 <header class="header">
2 <div class="title"><h1>$<project_name></h1>$<title></div>
3 <div class="status"><th1>
4 if {[info exists login]} {
5 html "<a href='$home/login' title='Logout'>$login</a>\n"
6 } else {
7 html "<a href='$home/login'>Login</a>\n"
8 }
9 </th1></div>
10 </header>
11 <nav class="mainmenu" title="Main Menu">
12 <th1>
13 html "<a id='hbbtn' href='$home/sitemap' title='Site Map'>&#9776;</a>"
14 builtin_request_js hbmenu.js
15 foreach {name url expr class} $mainmenu {
16 if {![capexpr $expr]} continue
17 if {[string match /* $url]} {
18 if {[string match $url\[/?#\]* /$current_page/]} {
@@ -20,7 +20,7 @@
20 }
21 set url $home$url
22 }
23 html "<a href='$url' class='$class'>$name</a>\n"
24 }
25 </th1></nav>
26 <nav id='hbdrop' title="Sitemap"></nav>
27
--- skins/eagle/css.txt
+++ skins/eagle/css.txt
@@ -47,18 +47,18 @@
4747
font-weight: bold;
4848
white-space: nowrap;
4949
}
5050
5151
/* The header across the top of the page */
52
-div.header {
52
+header.header {
5353
display: table;
5454
width: 100%;
5555
}
5656
5757
/* The main menu bar that appears at the top of the page beneath
5858
** the header */
59
-div.mainmenu {
59
+nav.mainmenu {
6060
padding: 5px 10px 5px 10px;
6161
font-size: 0.9em;
6262
font-weight: bold;
6363
text-align: center;
6464
letter-spacing: 1px;
@@ -66,11 +66,11 @@
6666
border-top-left-radius: 8px;
6767
border-top-right-radius: 8px;
6868
color: white;
6969
}
7070
71
-div#hbdrop {
71
+nav#hbdrop {
7272
background-color: #485D7B;
7373
border-radius: 0 0 15px 15px;
7474
border-left: 0.5em solid #76869d;
7575
border-bottom: 1.2em solid #76869d;
7676
display: none;
@@ -79,33 +79,33 @@
7979
z-index: 20;
8080
}
8181
8282
8383
/* The submenu bar that *sometimes* appears below the main menu */
84
-div.submenu, div.sectionmenu {
84
+nav.submenu, div.sectionmenu {
8585
padding: 3px 10px 3px 0px;
8686
font-size: 0.9em;
8787
font-weight: bold;
8888
text-align: center;
8989
background-color: #485D7B;
9090
color: white;
9191
}
92
-div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
92
+nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
9393
div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
94
-div.submenu label {
94
+nav.submenu label {
9595
padding: 3px 10px 3px 10px;
9696
color: white;
9797
text-decoration: none;
9898
}
99
-div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
100
-div.submenu label:hover {
99
+nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
100
+nav.submenu label:hover {
101101
text-decoration: underline;
102102
}
103103
104104
/* All page content from the bottom of the menu or submenu down to
105105
** the footer */
106
-div.content {
106
+main.content {
107107
padding: 0ex 1ex 0ex 2ex;
108108
}
109109
110110
/* Some pages have section dividers */
111111
div.section {
@@ -131,11 +131,11 @@
131131
clear: left;
132132
white-space: nowrap;
133133
}
134134
135135
/* The footer at the very bottom of the page */
136
-div.footer {
136
+footer.footer {
137137
clear: both;
138138
font-size: 0.8em;
139139
margin-top: 12px;
140140
padding: 5px 10px 5px 10px;
141141
text-align: right;
142142
--- skins/eagle/css.txt
+++ skins/eagle/css.txt
@@ -47,18 +47,18 @@
47 font-weight: bold;
48 white-space: nowrap;
49 }
50
51 /* The header across the top of the page */
52 div.header {
53 display: table;
54 width: 100%;
55 }
56
57 /* The main menu bar that appears at the top of the page beneath
58 ** the header */
59 div.mainmenu {
60 padding: 5px 10px 5px 10px;
61 font-size: 0.9em;
62 font-weight: bold;
63 text-align: center;
64 letter-spacing: 1px;
@@ -66,11 +66,11 @@
66 border-top-left-radius: 8px;
67 border-top-right-radius: 8px;
68 color: white;
69 }
70
71 div#hbdrop {
72 background-color: #485D7B;
73 border-radius: 0 0 15px 15px;
74 border-left: 0.5em solid #76869d;
75 border-bottom: 1.2em solid #76869d;
76 display: none;
@@ -79,33 +79,33 @@
79 z-index: 20;
80 }
81
82
83 /* The submenu bar that *sometimes* appears below the main menu */
84 div.submenu, div.sectionmenu {
85 padding: 3px 10px 3px 0px;
86 font-size: 0.9em;
87 font-weight: bold;
88 text-align: center;
89 background-color: #485D7B;
90 color: white;
91 }
92 div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
93 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
94 div.submenu label {
95 padding: 3px 10px 3px 10px;
96 color: white;
97 text-decoration: none;
98 }
99 div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
100 div.submenu label:hover {
101 text-decoration: underline;
102 }
103
104 /* All page content from the bottom of the menu or submenu down to
105 ** the footer */
106 div.content {
107 padding: 0ex 1ex 0ex 2ex;
108 }
109
110 /* Some pages have section dividers */
111 div.section {
@@ -131,11 +131,11 @@
131 clear: left;
132 white-space: nowrap;
133 }
134
135 /* The footer at the very bottom of the page */
136 div.footer {
137 clear: both;
138 font-size: 0.8em;
139 margin-top: 12px;
140 padding: 5px 10px 5px 10px;
141 text-align: right;
142
--- skins/eagle/css.txt
+++ skins/eagle/css.txt
@@ -47,18 +47,18 @@
47 font-weight: bold;
48 white-space: nowrap;
49 }
50
51 /* The header across the top of the page */
52 header.header {
53 display: table;
54 width: 100%;
55 }
56
57 /* The main menu bar that appears at the top of the page beneath
58 ** the header */
59 nav.mainmenu {
60 padding: 5px 10px 5px 10px;
61 font-size: 0.9em;
62 font-weight: bold;
63 text-align: center;
64 letter-spacing: 1px;
@@ -66,11 +66,11 @@
66 border-top-left-radius: 8px;
67 border-top-right-radius: 8px;
68 color: white;
69 }
70
71 nav#hbdrop {
72 background-color: #485D7B;
73 border-radius: 0 0 15px 15px;
74 border-left: 0.5em solid #76869d;
75 border-bottom: 1.2em solid #76869d;
76 display: none;
@@ -79,33 +79,33 @@
79 z-index: 20;
80 }
81
82
83 /* The submenu bar that *sometimes* appears below the main menu */
84 nav.submenu, div.sectionmenu {
85 padding: 3px 10px 3px 0px;
86 font-size: 0.9em;
87 font-weight: bold;
88 text-align: center;
89 background-color: #485D7B;
90 color: white;
91 }
92 nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
93 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
94 nav.submenu label {
95 padding: 3px 10px 3px 10px;
96 color: white;
97 text-decoration: none;
98 }
99 nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
100 nav.submenu label:hover {
101 text-decoration: underline;
102 }
103
104 /* All page content from the bottom of the menu or submenu down to
105 ** the footer */
106 main.content {
107 padding: 0ex 1ex 0ex 2ex;
108 }
109
110 /* Some pages have section dividers */
111 div.section {
@@ -131,11 +131,11 @@
131 clear: left;
132 white-space: nowrap;
133 }
134
135 /* The footer at the very bottom of the page */
136 footer.footer {
137 clear: both;
138 font-size: 0.8em;
139 margin-top: 12px;
140 padding: 5px 10px 5px 10px;
141 text-align: right;
142
--- skins/eagle/footer.txt
+++ skins/eagle/footer.txt
@@ -1,6 +1,6 @@
1
-<div class="footer">
1
+<footer class="footer">
22
<th1>
33
proc getTclVersion {} {
44
if {[catch {tclEval info patchlevel} tclVersion] == 0} {
55
return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
66
}
@@ -19,6 +19,6 @@
1919
<th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
2020
<a href="$fossilUrl/">Fossil</a>
2121
version $release_version $tclVersion
2222
<a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
2323
<a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24
-</div>
24
+</footer>
2525
--- skins/eagle/footer.txt
+++ skins/eagle/footer.txt
@@ -1,6 +1,6 @@
1 <div class="footer">
2 <th1>
3 proc getTclVersion {} {
4 if {[catch {tclEval info patchlevel} tclVersion] == 0} {
5 return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
6 }
@@ -19,6 +19,6 @@
19 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
20 <a href="$fossilUrl/">Fossil</a>
21 version $release_version $tclVersion
22 <a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
23 <a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24 </div>
25
--- skins/eagle/footer.txt
+++ skins/eagle/footer.txt
@@ -1,6 +1,6 @@
1 <footer class="footer">
2 <th1>
3 proc getTclVersion {} {
4 if {[catch {tclEval info patchlevel} tclVersion] == 0} {
5 return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
6 }
@@ -19,6 +19,6 @@
19 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
20 <a href="$fossilUrl/">Fossil</a>
21 version $release_version $tclVersion
22 <a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
23 <a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24 </footer>
25
--- skins/eagle/header.txt
+++ skins/eagle/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="logo">
33
<th1>
44
##
55
## NOTE: The purpose of this procedure is to take the base URL of the
66
## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
7676
puts "Logged in as $login"
7777
} else {
7878
puts "Not logged in"
7979
}
8080
</th1></nobr><small><div id="clock"></div></small></div>
81
-</div>
81
+</header>
8282
<th1>html "<script nonce='$nonce'>"</th1>
8383
(function updateClock(){
8484
var e = document.getElementById("clock");
8585
if(!e) return;
8686
if(!updateClock.fmt){
@@ -95,15 +95,15 @@
9595
updateClock.fmt(d.getUTCHours()) + ':' +
9696
updateClock.fmt(d.getUTCMinutes());
9797
setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
9898
})();
9999
</script>
100
-<div class="mainmenu"><th1>
100
+<nav class="mainmenu"><th1>
101101
html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>\n"
102102
builtin_request_js hbmenu.js
103103
foreach {name url expr class} $mainmenu {
104104
if {![capexpr $expr]} continue
105105
if {[string match /* $url]} {set url $home$url}
106106
html "<a href='$url' class='$class'>$name</a>\n"
107107
}
108
-</th1></div>
109
-<div id="hbdrop"></div>
108
+</th1></nav>
109
+<nav id='hbdrop' title="Sitemap"></nav>
110110
--- skins/eagle/header.txt
+++ skins/eagle/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
76 puts "Logged in as $login"
77 } else {
78 puts "Not logged in"
79 }
80 </th1></nobr><small><div id="clock"></div></small></div>
81 </div>
82 <th1>html "<script nonce='$nonce'>"</th1>
83 (function updateClock(){
84 var e = document.getElementById("clock");
85 if(!e) return;
86 if(!updateClock.fmt){
@@ -95,15 +95,15 @@
95 updateClock.fmt(d.getUTCHours()) + ':' +
96 updateClock.fmt(d.getUTCMinutes());
97 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
98 })();
99 </script>
100 <div class="mainmenu"><th1>
101 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>\n"
102 builtin_request_js hbmenu.js
103 foreach {name url expr class} $mainmenu {
104 if {![capexpr $expr]} continue
105 if {[string match /* $url]} {set url $home$url}
106 html "<a href='$url' class='$class'>$name</a>\n"
107 }
108 </th1></div>
109 <div id="hbdrop"></div>
110
--- skins/eagle/header.txt
+++ skins/eagle/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
76 puts "Logged in as $login"
77 } else {
78 puts "Not logged in"
79 }
80 </th1></nobr><small><div id="clock"></div></small></div>
81 </header>
82 <th1>html "<script nonce='$nonce'>"</th1>
83 (function updateClock(){
84 var e = document.getElementById("clock");
85 if(!e) return;
86 if(!updateClock.fmt){
@@ -95,15 +95,15 @@
95 updateClock.fmt(d.getUTCHours()) + ':' +
96 updateClock.fmt(d.getUTCMinutes());
97 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
98 })();
99 </script>
100 <nav class="mainmenu"><th1>
101 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>\n"
102 builtin_request_js hbmenu.js
103 foreach {name url expr class} $mainmenu {
104 if {![capexpr $expr]} continue
105 if {[string match /* $url]} {set url $home$url}
106 html "<a href='$url' class='$class'>$name</a>\n"
107 }
108 </th1></nav>
109 <nav id='hbdrop' title="Sitemap"></nav>
110
--- skins/khaki/css.txt
+++ skins/khaki/css.txt
@@ -41,28 +41,28 @@
4141
font-weight: bold;
4242
white-space: nowrap;
4343
}
4444
4545
/* The header across the top of the page */
46
-div.header {
46
+header.header {
4747
display: table;
4848
width: 100%;
4949
}
5050
5151
/* The main menu bar that appears at the top of the page beneath
5252
** the header */
53
-div.mainmenu {
53
+nav.mainmenu {
5454
padding: 5px 10px 5px 10px;
5555
font-size: 0.9em;
5656
font-weight: bold;
5757
text-align: center;
5858
letter-spacing: 1px;
5959
background-color: #a09048;
6060
color: black;
6161
z-index: 21; /* just above hbdrop */
6262
}
63
-div#hbdrop {
63
+nav#hbdrop {
6464
background-color: #fef3bc;
6565
border: 2px solid #a09048;
6666
border-radius: 0 0 0.5em 0.5em;
6767
display: none;
6868
left: 2em;
@@ -72,39 +72,39 @@
7272
z-index: 20; /* just below mainmenu, but above timeline bubbles */
7373
}
7474
7575
7676
/* The submenu bar that *sometimes* appears below the main menu */
77
-div.submenu, div.sectionmenu {
77
+nav.submenu, div.sectionmenu {
7878
padding: 3px 10px 3px 0px;
7979
font-size: 0.9em;
8080
text-align: center;
8181
background-color: #c0af58;
8282
color: white;
8383
}
84
-div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
84
+nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
8585
div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
86
-div.submenu label {
86
+nav.submenu label {
8787
padding: 3px 10px 3px 10px;
8888
color: white;
8989
text-decoration: none;
9090
}
91
-div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
92
-div.submenu label:hover, div#hbdrop a:hover {
91
+nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
92
+nav.submenu label:hover, nav#hbdrop a:hover {
9393
color: #a09048;
9494
background-color: white;
9595
}
9696
9797
/* All page content from the bottom of the menu or submenu down to
9898
** the footer */
99
-div.content {
99
+main.content {
100100
padding: 1ex 5px;
101101
}
102
-div.content a, div#hbdrop a { color: #706532; }
103
-div.content a:link, div#hbdrop a:link { color: #706532; }
104
-div.content a:visited, div#hbdrop a:visited { color: #704032; }
105
-div.content a:hover, div#hbdrop a:hover {
102
+main.content a, nav#hbdrop a { color: #706532; }
103
+main.content a:link, nav#hbdrop a:link { color: #706532; }
104
+main.content a:visited, nav#hbdrop a:visited { color: #704032; }
105
+main.content a:hover, nav#hbdrop a:hover {
106106
background-color: white; color: #706532;
107107
}
108108
a, a:visited {
109109
text-decoration: none;
110110
}
@@ -133,24 +133,24 @@
133133
clear: left;
134134
white-space: nowrap;
135135
}
136136
137137
/* The footer at the very bottom of the page */
138
-div.footer {
138
+footer.footer {
139139
font-size: 0.8em;
140140
margin-top: 12px;
141141
padding: 5px 10px 5px 10px;
142142
text-align: right;
143143
background-color: #a09048;
144144
color: white;
145145
}
146146
147147
/* Hyperlink colors */
148
-div.footer a { color: white; }
149
-div.footer a:link { color: white; }
150
-div.footer a:visited { color: white; }
151
-div.footer a:hover { background-color: white; color: #558195; }
148
+footer.footer a { color: white; }
149
+footer.footer a:link { color: white; }
150
+footer.footer a:visited { color: white; }
151
+footer.footer a:hover { background-color: white; color: #558195; }
152152
153153
/* <verbatim> blocks */
154154
pre.verbatim {
155155
background-color: #f5f5f5;
156156
padding: 0.5em;
157157
--- skins/khaki/css.txt
+++ skins/khaki/css.txt
@@ -41,28 +41,28 @@
41 font-weight: bold;
42 white-space: nowrap;
43 }
44
45 /* The header across the top of the page */
46 div.header {
47 display: table;
48 width: 100%;
49 }
50
51 /* The main menu bar that appears at the top of the page beneath
52 ** the header */
53 div.mainmenu {
54 padding: 5px 10px 5px 10px;
55 font-size: 0.9em;
56 font-weight: bold;
57 text-align: center;
58 letter-spacing: 1px;
59 background-color: #a09048;
60 color: black;
61 z-index: 21; /* just above hbdrop */
62 }
63 div#hbdrop {
64 background-color: #fef3bc;
65 border: 2px solid #a09048;
66 border-radius: 0 0 0.5em 0.5em;
67 display: none;
68 left: 2em;
@@ -72,39 +72,39 @@
72 z-index: 20; /* just below mainmenu, but above timeline bubbles */
73 }
74
75
76 /* The submenu bar that *sometimes* appears below the main menu */
77 div.submenu, div.sectionmenu {
78 padding: 3px 10px 3px 0px;
79 font-size: 0.9em;
80 text-align: center;
81 background-color: #c0af58;
82 color: white;
83 }
84 div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
85 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
86 div.submenu label {
87 padding: 3px 10px 3px 10px;
88 color: white;
89 text-decoration: none;
90 }
91 div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
92 div.submenu label:hover, div#hbdrop a:hover {
93 color: #a09048;
94 background-color: white;
95 }
96
97 /* All page content from the bottom of the menu or submenu down to
98 ** the footer */
99 div.content {
100 padding: 1ex 5px;
101 }
102 div.content a, div#hbdrop a { color: #706532; }
103 div.content a:link, div#hbdrop a:link { color: #706532; }
104 div.content a:visited, div#hbdrop a:visited { color: #704032; }
105 div.content a:hover, div#hbdrop a:hover {
106 background-color: white; color: #706532;
107 }
108 a, a:visited {
109 text-decoration: none;
110 }
@@ -133,24 +133,24 @@
133 clear: left;
134 white-space: nowrap;
135 }
136
137 /* The footer at the very bottom of the page */
138 div.footer {
139 font-size: 0.8em;
140 margin-top: 12px;
141 padding: 5px 10px 5px 10px;
142 text-align: right;
143 background-color: #a09048;
144 color: white;
145 }
146
147 /* Hyperlink colors */
148 div.footer a { color: white; }
149 div.footer a:link { color: white; }
150 div.footer a:visited { color: white; }
151 div.footer a:hover { background-color: white; color: #558195; }
152
153 /* <verbatim> blocks */
154 pre.verbatim {
155 background-color: #f5f5f5;
156 padding: 0.5em;
157
--- skins/khaki/css.txt
+++ skins/khaki/css.txt
@@ -41,28 +41,28 @@
41 font-weight: bold;
42 white-space: nowrap;
43 }
44
45 /* The header across the top of the page */
46 header.header {
47 display: table;
48 width: 100%;
49 }
50
51 /* The main menu bar that appears at the top of the page beneath
52 ** the header */
53 nav.mainmenu {
54 padding: 5px 10px 5px 10px;
55 font-size: 0.9em;
56 font-weight: bold;
57 text-align: center;
58 letter-spacing: 1px;
59 background-color: #a09048;
60 color: black;
61 z-index: 21; /* just above hbdrop */
62 }
63 nav#hbdrop {
64 background-color: #fef3bc;
65 border: 2px solid #a09048;
66 border-radius: 0 0 0.5em 0.5em;
67 display: none;
68 left: 2em;
@@ -72,39 +72,39 @@
72 z-index: 20; /* just below mainmenu, but above timeline bubbles */
73 }
74
75
76 /* The submenu bar that *sometimes* appears below the main menu */
77 nav.submenu, div.sectionmenu {
78 padding: 3px 10px 3px 0px;
79 font-size: 0.9em;
80 text-align: center;
81 background-color: #c0af58;
82 color: white;
83 }
84 nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
85 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
86 nav.submenu label {
87 padding: 3px 10px 3px 10px;
88 color: white;
89 text-decoration: none;
90 }
91 nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
92 nav.submenu label:hover, nav#hbdrop a:hover {
93 color: #a09048;
94 background-color: white;
95 }
96
97 /* All page content from the bottom of the menu or submenu down to
98 ** the footer */
99 main.content {
100 padding: 1ex 5px;
101 }
102 main.content a, nav#hbdrop a { color: #706532; }
103 main.content a:link, nav#hbdrop a:link { color: #706532; }
104 main.content a:visited, nav#hbdrop a:visited { color: #704032; }
105 main.content a:hover, nav#hbdrop a:hover {
106 background-color: white; color: #706532;
107 }
108 a, a:visited {
109 text-decoration: none;
110 }
@@ -133,24 +133,24 @@
133 clear: left;
134 white-space: nowrap;
135 }
136
137 /* The footer at the very bottom of the page */
138 footer.footer {
139 font-size: 0.8em;
140 margin-top: 12px;
141 padding: 5px 10px 5px 10px;
142 text-align: right;
143 background-color: #a09048;
144 color: white;
145 }
146
147 /* Hyperlink colors */
148 footer.footer a { color: white; }
149 footer.footer a:link { color: white; }
150 footer.footer a:visited { color: white; }
151 footer.footer a:hover { background-color: white; color: #558195; }
152
153 /* <verbatim> blocks */
154 pre.verbatim {
155 background-color: #f5f5f5;
156 padding: 0.5em;
157
--- skins/khaki/footer.txt
+++ skins/khaki/footer.txt
@@ -1,3 +1,3 @@
1
-<div class="footer">
1
+<footer class="footer">
22
Fossil $release_version $manifest_version $manifest_date
3
-</div>
3
+</footer>
44
--- skins/khaki/footer.txt
+++ skins/khaki/footer.txt
@@ -1,3 +1,3 @@
1 <div class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </div>
4
--- skins/khaki/footer.txt
+++ skins/khaki/footer.txt
@@ -1,3 +1,3 @@
1 <footer class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </footer>
4
--- skins/khaki/header.txt
+++ skins/khaki/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="title">$<title></div>
33
<div class="status">
44
<div class="logo">$<project_name></div><br/>
55
<th1>
66
if {[info exists login]} {
@@ -7,16 +7,16 @@
77
puts "Logged in as $login"
88
} else {
99
puts "Not logged in"
1010
}
1111
</th1></div>
12
-</div>
13
-<div class="mainmenu"><th1>
12
+</header>
13
+<nav class="mainmenu"><th1>
1414
html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
1515
builtin_request_js hbmenu.js
1616
foreach {name url expr class} $mainmenu {
1717
if {![capexpr $expr]} continue
1818
if {[string match /* $url]} {set url $home$url}
1919
html "<a href='$url' class='$class'>$name</a>\n"
2020
}
21
-</th1></div>
22
-<div id='hbdrop'></div>
21
+</th1></nav>
22
+<nav id='hbdrop' title="Sitemap"></nav>
2323
--- skins/khaki/header.txt
+++ skins/khaki/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="title">$<title></div>
3 <div class="status">
4 <div class="logo">$<project_name></div><br/>
5 <th1>
6 if {[info exists login]} {
@@ -7,16 +7,16 @@
7 puts "Logged in as $login"
8 } else {
9 puts "Not logged in"
10 }
11 </th1></div>
12 </div>
13 <div class="mainmenu"><th1>
14 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
15 builtin_request_js hbmenu.js
16 foreach {name url expr class} $mainmenu {
17 if {![capexpr $expr]} continue
18 if {[string match /* $url]} {set url $home$url}
19 html "<a href='$url' class='$class'>$name</a>\n"
20 }
21 </th1></div>
22 <div id='hbdrop'></div>
23
--- skins/khaki/header.txt
+++ skins/khaki/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="title">$<title></div>
3 <div class="status">
4 <div class="logo">$<project_name></div><br/>
5 <th1>
6 if {[info exists login]} {
@@ -7,16 +7,16 @@
7 puts "Logged in as $login"
8 } else {
9 puts "Not logged in"
10 }
11 </th1></div>
12 </header>
13 <nav class="mainmenu"><th1>
14 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
15 builtin_request_js hbmenu.js
16 foreach {name url expr class} $mainmenu {
17 if {![capexpr $expr]} continue
18 if {[string match /* $url]} {set url $home$url}
19 html "<a href='$url' class='$class'>$name</a>\n"
20 }
21 </th1></nav>
22 <nav id='hbdrop' title="Sitemap"></nav>
23
--- skins/original/css.txt
+++ skins/original/css.txt
@@ -42,18 +42,18 @@
4242
font-weight: bold;
4343
white-space: nowrap;
4444
}
4545
4646
/* The header across the top of the page */
47
-div.header {
47
+header.header {
4848
display: table;
4949
width: 100%;
5050
}
5151
5252
/* The main menu bar that appears at the top of the page beneath
5353
** the header */
54
-div.mainmenu {
54
+nav.mainmenu {
5555
padding: 5px;
5656
font-size: 0.9em;
5757
font-weight: bold;
5858
text-align: center;
5959
letter-spacing: 1px;
@@ -62,33 +62,33 @@
6262
border-top-right-radius: 8px;
6363
color: white;
6464
}
6565
6666
/* The submenu bar that *sometimes* appears below the main menu */
67
-div.submenu, div.sectionmenu {
67
+nav.submenu, div.sectionmenu {
6868
padding: 3px 10px 3px 0px;
6969
font-size: 0.9em;
7070
text-align: center;
7171
background-color: #456878;
7272
color: white;
7373
}
74
-div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
74
+nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
7575
div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
76
-div.submenu label {
76
+nav.submenu label {
7777
padding: 3px 10px 3px 10px;
7878
color: white;
7979
text-decoration: none;
8080
}
81
-div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
82
-div.submenu label:hover {
81
+nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
82
+nav.submenu label:hover {
8383
color: #558195;
8484
background-color: white;
8585
}
8686
8787
/* All page content from the bottom of the menu or submenu down to
8888
** the footer */
89
-div.content {
89
+main.content {
9090
padding: 0ex 1ex 1ex 1ex;
9191
border: solid #aaa;
9292
border-width: 1px;
9393
}
9494
@@ -115,11 +115,11 @@
115115
clear: left;
116116
white-space: nowrap;
117117
}
118118
119119
/* The footer at the very bottom of the page */
120
-div.footer {
120
+footer.footer {
121121
clear: both;
122122
font-size: 0.8em;
123123
padding: 5px 10px 5px 10px;
124124
text-align: right;
125125
background-color: #558195;
@@ -127,14 +127,14 @@
127127
border-bottom-right-radius: 8px;
128128
color: white;
129129
}
130130
131131
/* Hyperlink colors in the footer */
132
-div.footer a { color: white; }
133
-div.footer a:link { color: white; }
134
-div.footer a:visited { color: white; }
135
-div.footer a:hover { background-color: white; color: #558195; }
132
+footer.footer a { color: white; }
133
+footer.footer a:link { color: white; }
134
+footer.footer a:visited { color: white; }
135
+footer.footer a:hover { background-color: white; color: #558195; }
136136
137137
/* verbatim blocks */
138138
pre.verbatim {
139139
background-color: #f5f5f5;
140140
padding: 0.5em;
141141
--- skins/original/css.txt
+++ skins/original/css.txt
@@ -42,18 +42,18 @@
42 font-weight: bold;
43 white-space: nowrap;
44 }
45
46 /* The header across the top of the page */
47 div.header {
48 display: table;
49 width: 100%;
50 }
51
52 /* The main menu bar that appears at the top of the page beneath
53 ** the header */
54 div.mainmenu {
55 padding: 5px;
56 font-size: 0.9em;
57 font-weight: bold;
58 text-align: center;
59 letter-spacing: 1px;
@@ -62,33 +62,33 @@
62 border-top-right-radius: 8px;
63 color: white;
64 }
65
66 /* The submenu bar that *sometimes* appears below the main menu */
67 div.submenu, div.sectionmenu {
68 padding: 3px 10px 3px 0px;
69 font-size: 0.9em;
70 text-align: center;
71 background-color: #456878;
72 color: white;
73 }
74 div.mainmenu a, div.mainmenu a:visited, div.submenu a, div.submenu a:visited,
75 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
76 div.submenu label {
77 padding: 3px 10px 3px 10px;
78 color: white;
79 text-decoration: none;
80 }
81 div.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover,
82 div.submenu label:hover {
83 color: #558195;
84 background-color: white;
85 }
86
87 /* All page content from the bottom of the menu or submenu down to
88 ** the footer */
89 div.content {
90 padding: 0ex 1ex 1ex 1ex;
91 border: solid #aaa;
92 border-width: 1px;
93 }
94
@@ -115,11 +115,11 @@
115 clear: left;
116 white-space: nowrap;
117 }
118
119 /* The footer at the very bottom of the page */
120 div.footer {
121 clear: both;
122 font-size: 0.8em;
123 padding: 5px 10px 5px 10px;
124 text-align: right;
125 background-color: #558195;
@@ -127,14 +127,14 @@
127 border-bottom-right-radius: 8px;
128 color: white;
129 }
130
131 /* Hyperlink colors in the footer */
132 div.footer a { color: white; }
133 div.footer a:link { color: white; }
134 div.footer a:visited { color: white; }
135 div.footer a:hover { background-color: white; color: #558195; }
136
137 /* verbatim blocks */
138 pre.verbatim {
139 background-color: #f5f5f5;
140 padding: 0.5em;
141
--- skins/original/css.txt
+++ skins/original/css.txt
@@ -42,18 +42,18 @@
42 font-weight: bold;
43 white-space: nowrap;
44 }
45
46 /* The header across the top of the page */
47 header.header {
48 display: table;
49 width: 100%;
50 }
51
52 /* The main menu bar that appears at the top of the page beneath
53 ** the header */
54 nav.mainmenu {
55 padding: 5px;
56 font-size: 0.9em;
57 font-weight: bold;
58 text-align: center;
59 letter-spacing: 1px;
@@ -62,33 +62,33 @@
62 border-top-right-radius: 8px;
63 color: white;
64 }
65
66 /* The submenu bar that *sometimes* appears below the main menu */
67 nav.submenu, div.sectionmenu {
68 padding: 3px 10px 3px 0px;
69 font-size: 0.9em;
70 text-align: center;
71 background-color: #456878;
72 color: white;
73 }
74 nav.mainmenu a, nav.mainmenu a:visited, nav.submenu a, nav.submenu a:visited,
75 div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited,
76 nav.submenu label {
77 padding: 3px 10px 3px 10px;
78 color: white;
79 text-decoration: none;
80 }
81 nav.mainmenu a:hover, nav.submenu a:hover, div.sectionmenu>a.button:hover,
82 nav.submenu label:hover {
83 color: #558195;
84 background-color: white;
85 }
86
87 /* All page content from the bottom of the menu or submenu down to
88 ** the footer */
89 main.content {
90 padding: 0ex 1ex 1ex 1ex;
91 border: solid #aaa;
92 border-width: 1px;
93 }
94
@@ -115,11 +115,11 @@
115 clear: left;
116 white-space: nowrap;
117 }
118
119 /* The footer at the very bottom of the page */
120 footer.footer {
121 clear: both;
122 font-size: 0.8em;
123 padding: 5px 10px 5px 10px;
124 text-align: right;
125 background-color: #558195;
@@ -127,14 +127,14 @@
127 border-bottom-right-radius: 8px;
128 color: white;
129 }
130
131 /* Hyperlink colors in the footer */
132 footer.footer a { color: white; }
133 footer.footer a:link { color: white; }
134 footer.footer a:visited { color: white; }
135 footer.footer a:hover { background-color: white; color: #558195; }
136
137 /* verbatim blocks */
138 pre.verbatim {
139 background-color: #f5f5f5;
140 padding: 0.5em;
141
--- skins/original/footer.txt
+++ skins/original/footer.txt
@@ -1,6 +1,6 @@
1
-<div class="footer">
1
+<footer class="footer">
22
<th1>
33
proc getTclVersion {} {
44
if {[catch {tclEval info patchlevel} tclVersion] == 0} {
55
return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
66
}
@@ -19,6 +19,6 @@
1919
<th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
2020
<a href="$fossilUrl/">Fossil</a>
2121
version $release_version $tclVersion
2222
<a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
2323
<a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24
-</div>
24
+</footer>
2525
--- skins/original/footer.txt
+++ skins/original/footer.txt
@@ -1,6 +1,6 @@
1 <div class="footer">
2 <th1>
3 proc getTclVersion {} {
4 if {[catch {tclEval info patchlevel} tclVersion] == 0} {
5 return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
6 }
@@ -19,6 +19,6 @@
19 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
20 <a href="$fossilUrl/">Fossil</a>
21 version $release_version $tclVersion
22 <a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
23 <a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24 </div>
25
--- skins/original/footer.txt
+++ skins/original/footer.txt
@@ -1,6 +1,6 @@
1 <footer class="footer">
2 <th1>
3 proc getTclVersion {} {
4 if {[catch {tclEval info patchlevel} tclVersion] == 0} {
5 return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion"
6 }
@@ -19,6 +19,6 @@
19 <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by
20 <a href="$fossilUrl/">Fossil</a>
21 version $release_version $tclVersion
22 <a href="$fossilUrl/index.html/info/$version">$manifest_version</a>
23 <a href="$fossilUrl/index.html/timeline?c=$fossilDate&amp;y=ci">$manifest_date</a>
24 </footer>
25
--- skins/original/header.txt
+++ skins/original/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="logo">
33
<th1>
44
##
55
## NOTE: The purpose of this procedure is to take the base URL of the
66
## Fossil project and return the root of the entire web site using
@@ -70,11 +70,11 @@
7070
puts "Logged in as $login"
7171
} else {
7272
puts "Not logged in"
7373
}
7474
</th1></nobr><small><div id="clock"></div></small></div>
75
-</div>
75
+</header>
7676
<th1>html "<script nonce='$nonce'>"</th1>
7777
function updateClock(){
7878
var e = document.getElementById("clock");
7979
if(e){
8080
var d = new Date();
@@ -89,11 +89,11 @@
8989
setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
9090
}
9191
}
9292
updateClock();
9393
</script>
94
-<div class="mainmenu"><th1>
94
+<nav class="mainmenu"><th1>
9595
set sitemap 0
9696
foreach {name url expr class} $mainmenu {
9797
if {![capexpr $expr]} continue
9898
if {[string match /* $url]} {set url $home$url}
9999
html "<a href='$url' class='$class'>$name</a>\n"
@@ -100,6 +100,6 @@
100100
if {[string match */sitemap $url]} {set sitemap 1}
101101
}
102102
if {!$sitemap} {
103103
html "<a href='$home/sitemap'>...</a>"
104104
}
105
-</th1></div>
105
+</th1></nav>
106106
--- skins/original/header.txt
+++ skins/original/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -70,11 +70,11 @@
70 puts "Logged in as $login"
71 } else {
72 puts "Not logged in"
73 }
74 </th1></nobr><small><div id="clock"></div></small></div>
75 </div>
76 <th1>html "<script nonce='$nonce'>"</th1>
77 function updateClock(){
78 var e = document.getElementById("clock");
79 if(e){
80 var d = new Date();
@@ -89,11 +89,11 @@
89 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
90 }
91 }
92 updateClock();
93 </script>
94 <div class="mainmenu"><th1>
95 set sitemap 0
96 foreach {name url expr class} $mainmenu {
97 if {![capexpr $expr]} continue
98 if {[string match /* $url]} {set url $home$url}
99 html "<a href='$url' class='$class'>$name</a>\n"
@@ -100,6 +100,6 @@
100 if {[string match */sitemap $url]} {set sitemap 1}
101 }
102 if {!$sitemap} {
103 html "<a href='$home/sitemap'>...</a>"
104 }
105 </th1></div>
106
--- skins/original/header.txt
+++ skins/original/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -70,11 +70,11 @@
70 puts "Logged in as $login"
71 } else {
72 puts "Not logged in"
73 }
74 </th1></nobr><small><div id="clock"></div></small></div>
75 </header>
76 <th1>html "<script nonce='$nonce'>"</th1>
77 function updateClock(){
78 var e = document.getElementById("clock");
79 if(e){
80 var d = new Date();
@@ -89,11 +89,11 @@
89 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
90 }
91 }
92 updateClock();
93 </script>
94 <nav class="mainmenu"><th1>
95 set sitemap 0
96 foreach {name url expr class} $mainmenu {
97 if {![capexpr $expr]} continue
98 if {[string match /* $url]} {set url $home$url}
99 html "<a href='$url' class='$class'>$name</a>\n"
@@ -100,6 +100,6 @@
100 if {[string match */sitemap $url]} {set sitemap 1}
101 }
102 if {!$sitemap} {
103 html "<a href='$home/sitemap'>...</a>"
104 }
105 </th1></nav>
106
--- skins/plain_gray/css.txt
+++ skins/plain_gray/css.txt
@@ -28,18 +28,18 @@
2828
font-weight: bold;
2929
white-space: nowrap;
3030
}
3131
3232
/* The header across the top of the page */
33
-div.header {
33
+header.header {
3434
display: table;
3535
width: 100%;
3636
}
3737
3838
/* The main menu bar that appears at the top of the page beneath
3939
** the header */
40
-div.mainmenu {
40
+nav.mainmenu {
4141
padding: 5px 10px 5px 10px;
4242
font-size: 0.9em;
4343
font-weight: bold;
4444
text-align: center;
4545
letter-spacing: 1px;
@@ -54,54 +54,54 @@
5454
display: none;
5555
width: 95%;
5656
position: absolute;
5757
z-index: 20; /* just below mainmenu, but above timeline bubbles */
5858
}
59
-div.hbdrop a { color: #604000; }
60
-div.hbdrop a:link { color: #604000;}
61
-div.hbdrop a:visited { color: #600000; }
59
+nav.hbdrop a { color: #604000; }
60
+nav.hbdrop a:link { color: #604000;}
61
+nav.hbdrop a:visited { color: #600000; }
6262
6363
6464
/* The submenu bar that *sometimes* appears below the main menu */
65
-div.submenu, div.sectionmenu {
65
+nav.submenu, div.sectionmenu {
6666
padding: 3px 10px 3px 0px;
6767
font-size: 0.9em;
6868
text-align: center;
6969
background-color: #606060;
7070
color: white;
7171
}
72
-div.mainmenu a,
73
-div.mainmenu a:visited,
74
-div.submenu a,
75
-div.submenu a:visited,
72
+nav.mainmenu a,
73
+nav.mainmenu a:visited,
74
+nav.submenu a,
75
+nav.submenu a:visited,
7676
div.sectionmenu>a.button:link,
7777
div.sectionmenu>a.button:visited,
78
-div.submenu label {
78
+nav.submenu label {
7979
padding: 3px 10px 3px 10px;
8080
color: white;
8181
text-decoration: none;
8282
}
83
-div.mainmenu a:hover,
84
-div.submenu a:hover,
83
+nav.mainmenu a:hover,
84
+nav.submenu a:hover,
8585
div.sectionmenu>a.button:hover,
86
-div.submenu label:hover {
86
+nav.submenu label:hover {
8787
color: #404040;
8888
background-color: white;
8989
}
9090
a, a:visited {
9191
text-decoration: none;
9292
}
9393
9494
/* All page content from the bottom of the menu or submenu down to
9595
** the footer */
96
-div.content {
96
+main.content {
9797
padding: 0ex 0ex 0ex 0ex;
9898
}
9999
/* Hyperlink colors */
100
-div.content a { color: #604000; }
101
-div.content a:link { color: #604000;}
102
-div.content a:visited { color: #600000; }
100
+main.content a { color: #604000; }
101
+main.content a:link { color: #604000;}
102
+main.content a:visited { color: #600000; }
103103
104104
/* <verbatim> blocks */
105105
pre.verbatim {
106106
background-color: #ffffff;
107107
padding: 0.5em;
@@ -131,11 +131,11 @@
131131
clear: left;
132132
white-space: nowrap;
133133
}
134134
135135
/* The footer at the very bottom of the page */
136
-div.footer {
136
+footer.footer {
137137
font-size: 0.8em;
138138
margin-top: 12px;
139139
padding: 5px 10px 5px 10px;
140140
text-align: right;
141141
background-color: #404040;
142142
--- skins/plain_gray/css.txt
+++ skins/plain_gray/css.txt
@@ -28,18 +28,18 @@
28 font-weight: bold;
29 white-space: nowrap;
30 }
31
32 /* The header across the top of the page */
33 div.header {
34 display: table;
35 width: 100%;
36 }
37
38 /* The main menu bar that appears at the top of the page beneath
39 ** the header */
40 div.mainmenu {
41 padding: 5px 10px 5px 10px;
42 font-size: 0.9em;
43 font-weight: bold;
44 text-align: center;
45 letter-spacing: 1px;
@@ -54,54 +54,54 @@
54 display: none;
55 width: 95%;
56 position: absolute;
57 z-index: 20; /* just below mainmenu, but above timeline bubbles */
58 }
59 div.hbdrop a { color: #604000; }
60 div.hbdrop a:link { color: #604000;}
61 div.hbdrop a:visited { color: #600000; }
62
63
64 /* The submenu bar that *sometimes* appears below the main menu */
65 div.submenu, div.sectionmenu {
66 padding: 3px 10px 3px 0px;
67 font-size: 0.9em;
68 text-align: center;
69 background-color: #606060;
70 color: white;
71 }
72 div.mainmenu a,
73 div.mainmenu a:visited,
74 div.submenu a,
75 div.submenu a:visited,
76 div.sectionmenu>a.button:link,
77 div.sectionmenu>a.button:visited,
78 div.submenu label {
79 padding: 3px 10px 3px 10px;
80 color: white;
81 text-decoration: none;
82 }
83 div.mainmenu a:hover,
84 div.submenu a:hover,
85 div.sectionmenu>a.button:hover,
86 div.submenu label:hover {
87 color: #404040;
88 background-color: white;
89 }
90 a, a:visited {
91 text-decoration: none;
92 }
93
94 /* All page content from the bottom of the menu or submenu down to
95 ** the footer */
96 div.content {
97 padding: 0ex 0ex 0ex 0ex;
98 }
99 /* Hyperlink colors */
100 div.content a { color: #604000; }
101 div.content a:link { color: #604000;}
102 div.content a:visited { color: #600000; }
103
104 /* <verbatim> blocks */
105 pre.verbatim {
106 background-color: #ffffff;
107 padding: 0.5em;
@@ -131,11 +131,11 @@
131 clear: left;
132 white-space: nowrap;
133 }
134
135 /* The footer at the very bottom of the page */
136 div.footer {
137 font-size: 0.8em;
138 margin-top: 12px;
139 padding: 5px 10px 5px 10px;
140 text-align: right;
141 background-color: #404040;
142
--- skins/plain_gray/css.txt
+++ skins/plain_gray/css.txt
@@ -28,18 +28,18 @@
28 font-weight: bold;
29 white-space: nowrap;
30 }
31
32 /* The header across the top of the page */
33 header.header {
34 display: table;
35 width: 100%;
36 }
37
38 /* The main menu bar that appears at the top of the page beneath
39 ** the header */
40 nav.mainmenu {
41 padding: 5px 10px 5px 10px;
42 font-size: 0.9em;
43 font-weight: bold;
44 text-align: center;
45 letter-spacing: 1px;
@@ -54,54 +54,54 @@
54 display: none;
55 width: 95%;
56 position: absolute;
57 z-index: 20; /* just below mainmenu, but above timeline bubbles */
58 }
59 nav.hbdrop a { color: #604000; }
60 nav.hbdrop a:link { color: #604000;}
61 nav.hbdrop a:visited { color: #600000; }
62
63
64 /* The submenu bar that *sometimes* appears below the main menu */
65 nav.submenu, div.sectionmenu {
66 padding: 3px 10px 3px 0px;
67 font-size: 0.9em;
68 text-align: center;
69 background-color: #606060;
70 color: white;
71 }
72 nav.mainmenu a,
73 nav.mainmenu a:visited,
74 nav.submenu a,
75 nav.submenu a:visited,
76 div.sectionmenu>a.button:link,
77 div.sectionmenu>a.button:visited,
78 nav.submenu label {
79 padding: 3px 10px 3px 10px;
80 color: white;
81 text-decoration: none;
82 }
83 nav.mainmenu a:hover,
84 nav.submenu a:hover,
85 div.sectionmenu>a.button:hover,
86 nav.submenu label:hover {
87 color: #404040;
88 background-color: white;
89 }
90 a, a:visited {
91 text-decoration: none;
92 }
93
94 /* All page content from the bottom of the menu or submenu down to
95 ** the footer */
96 main.content {
97 padding: 0ex 0ex 0ex 0ex;
98 }
99 /* Hyperlink colors */
100 main.content a { color: #604000; }
101 main.content a:link { color: #604000;}
102 main.content a:visited { color: #600000; }
103
104 /* <verbatim> blocks */
105 pre.verbatim {
106 background-color: #ffffff;
107 padding: 0.5em;
@@ -131,11 +131,11 @@
131 clear: left;
132 white-space: nowrap;
133 }
134
135 /* The footer at the very bottom of the page */
136 footer.footer {
137 font-size: 0.8em;
138 margin-top: 12px;
139 padding: 5px 10px 5px 10px;
140 text-align: right;
141 background-color: #404040;
142
--- skins/plain_gray/footer.txt
+++ skins/plain_gray/footer.txt
@@ -1,3 +1,3 @@
1
-<div class="footer">
1
+<footer class="footer">
22
Fossil $release_version $manifest_version $manifest_date
3
-</div>
3
+</footer>
44
--- skins/plain_gray/footer.txt
+++ skins/plain_gray/footer.txt
@@ -1,3 +1,3 @@
1 <div class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </div>
4
--- skins/plain_gray/footer.txt
+++ skins/plain_gray/footer.txt
@@ -1,3 +1,3 @@
1 <footer class="footer">
2 Fossil $release_version $manifest_version $manifest_date
3 </footer>
4
--- skins/plain_gray/header.txt
+++ skins/plain_gray/header.txt
@@ -1,14 +1,14 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="title">$<project_name>: $<title></div>
3
-</div>
4
-<div class="mainmenu">
3
+</header>
4
+<nav class="mainmenu">
55
<th1>
66
html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
77
builtin_request_js hbmenu.js
88
foreach {name url expr class} $mainmenu {
99
if {![capexpr $expr]} continue
1010
if {[string match /* $url]} {set url $home$url}
1111
html "<a href='$url' class='$class'>$name</a>\n"
1212
}
13
-</th1></div>
14
-<div id='hbdrop' class='hbdrop'></div>
13
+</th1></nav>
14
+<nav id='hbdrop' class='hbdrop' title="Sitemap"></nav>
1515
--- skins/plain_gray/header.txt
+++ skins/plain_gray/header.txt
@@ -1,14 +1,14 @@
1 <div class="header">
2 <div class="title">$<project_name>: $<title></div>
3 </div>
4 <div class="mainmenu">
5 <th1>
6 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
7 builtin_request_js hbmenu.js
8 foreach {name url expr class} $mainmenu {
9 if {![capexpr $expr]} continue
10 if {[string match /* $url]} {set url $home$url}
11 html "<a href='$url' class='$class'>$name</a>\n"
12 }
13 </th1></div>
14 <div id='hbdrop' class='hbdrop'></div>
15
--- skins/plain_gray/header.txt
+++ skins/plain_gray/header.txt
@@ -1,14 +1,14 @@
1 <header class="header">
2 <div class="title">$<project_name>: $<title></div>
3 </header>
4 <nav class="mainmenu">
5 <th1>
6 html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>&#9776;</a>"
7 builtin_request_js hbmenu.js
8 foreach {name url expr class} $mainmenu {
9 if {![capexpr $expr]} continue
10 if {[string match /* $url]} {set url $home$url}
11 html "<a href='$url' class='$class'>$name</a>\n"
12 }
13 </th1></nav>
14 <nav id='hbdrop' class='hbdrop' title="Sitemap"></nav>
15
--- skins/xekri/css.txt
+++ skins/xekri/css.txt
@@ -75,11 +75,11 @@
7575
7676
/**************************************
7777
* Main Area
7878
*/
7979
80
-div.header, div.mainmenu, div.submenu, div.content, div.footer {
80
+header.header, nav.mainmenu, nav.submenu, main.content, footer.footer {
8181
clear: both;
8282
margin: 0 auto;
8383
max-width: 90%;
8484
padding: 0.25rem 1rem;
8585
}
@@ -87,11 +87,11 @@
8787
8888
/**************************************
8989
* Main Area: Header
9090
*/
9191
92
-div.header {
92
+header.header {
9393
margin: 0.5rem auto 0 auto;
9494
display: flex;
9595
flex-direction: row;
9696
align-items: center;
9797
flex-wrap: wrap;
@@ -146,73 +146,73 @@
146146
147147
/**************************************
148148
* Main Area: Global Menu
149149
*/
150150
151
-div.mainmenu, div.submenu {
151
+nav.mainmenu, nav.submenu {
152152
background-color: #080;
153153
border-radius: 1rem 1rem 0 0;
154154
box-shadow: 3px 4px 1px #000;
155155
color: #000;
156156
font-weight: bold;
157157
font-size: 1.1rem;
158158
text-align: center;
159159
}
160160
161
-div.mainmenu {
161
+nav.mainmenu {
162162
padding-top: 0.33rem;
163163
padding-bottom: 0.25rem;
164164
}
165165
166
-div.submenu {
166
+nav.submenu {
167167
border-top: 1px solid #0a0;
168168
border-radius: 0;
169169
display: block;
170170
}
171171
172
-div.mainmenu a, div.submenu a, div.submenu label {
172
+nav.mainmenu a, nav.submenu a, nav.submenu label {
173173
color: #000;
174174
padding: 0 0.75rem;
175175
text-decoration: none;
176176
}
177177
178
-div.mainmenu a:hover, div.submenu a:hover, div.submenu label:hover {
178
+nav.mainmenu a:hover, nav.submenu a:hover, nav.submenu label:hover {
179179
color: #fff;
180180
text-shadow: 0px 0px 6px #0f0;
181181
}
182182
183
-div.submenu * {
183
+nav.submenu * {
184184
margin: 0 0.5rem;
185185
vertical-align: middle;
186186
}
187187
188
-div.submenu select, div.submenu input {
188
+nav.submenu select, nav.submenu input {
189189
background-color: #222;
190190
border: 1px inset #080;
191191
color: #eee;
192192
cursor: pointer;
193193
font-size: 0.9rem;
194194
}
195195
196
-div.submenu select {
196
+nav.submenu select {
197197
height: 1.75rem;
198198
}
199199
200200
/**************************************
201201
* Main Area: Content
202202
*/
203203
204
-div.content {
204
+main.content {
205205
background-color: #222;
206206
border-radius: 0 0 1rem 1rem;
207207
box-shadow: 3px 3px 1px #000;
208208
min-height:40%;
209209
padding-bottom: 1rem;
210210
padding-top: 0.5rem;
211211
}
212212
213
-div.content table[bgcolor="white"] {
213
+main.content table[bgcolor="white"] {
214214
color: #000;
215215
}
216216
217217
.piechartLabel {
218218
fill: white;
@@ -223,40 +223,40 @@
223223
224224
/**************************************
225225
* Main Area: Footer
226226
*/
227227
228
-div.footer {
228
+footer.footer {
229229
color: #ee0;
230230
font-size: 0.75rem;
231231
padding: 0;
232232
text-align: right;
233233
width: 75%;
234234
}
235235
236236
237
-div.footer div {
237
+footer.footer div {
238238
background-color: #222;
239239
box-shadow: 3px 3px 1px #000;
240240
border-radius: 0 0 1rem 1rem;
241241
margin: 0 0 10px 0;
242242
padding: 0.25rem 0.75rem;
243243
}
244244
245
-div.footer div.page-time {
245
+footer.footer div.page-time {
246246
float: left;
247247
}
248248
249
-div.footer div.fossil-info {
249
+footer.footer div.fossil-info {
250250
float: right;
251251
}
252252
253
-div.footer a, div.footer a:link, div.footer a:visited {
253
+footer.footer a, footer.footer a:link, footer.footer a:visited {
254254
color: #ee0;
255255
}
256256
257
-div.footer a:hover {
257
+footer.footer a:hover {
258258
color: #fff;
259259
text-shadow: 0px 0px 6px #ee0;
260260
}
261261
262262
@@ -1152,18 +1152,18 @@
11521152
body.branch .brlist > table > tbody > tr:hover:not(.selected),
11531153
body.branch .brlist > table > tbody > tr.selected {
11541154
background-color: #444;
11551155
}
11561156
1157
-body.chat div.header, body.chat div.footer,
1158
-body.chat div.mainmenu, body.chat div.submenu,
1159
-body.chat div.content {
1157
+body.chat header.header, body.chat footer.footer,
1158
+body.chat nav.mainmenu, body.chat nav.submenu,
1159
+body.chat main.content {
11601160
margin-left: 0.5em;
11611161
margin-right: 0.5em;
11621162
margin-top: auto/*eliminates unnecessary scrollbars*/;
11631163
}
1164
-body.chat.chat-only-mode div.content {
1164
+body.chat.chat-only-mode main.content {
11651165
max-width: revert;
11661166
}
11671167
body.chat #chat-user-list .chat-user{
11681168
color: white;
11691169
}
11701170
--- skins/xekri/css.txt
+++ skins/xekri/css.txt
@@ -75,11 +75,11 @@
75
76 /**************************************
77 * Main Area
78 */
79
80 div.header, div.mainmenu, div.submenu, div.content, div.footer {
81 clear: both;
82 margin: 0 auto;
83 max-width: 90%;
84 padding: 0.25rem 1rem;
85 }
@@ -87,11 +87,11 @@
87
88 /**************************************
89 * Main Area: Header
90 */
91
92 div.header {
93 margin: 0.5rem auto 0 auto;
94 display: flex;
95 flex-direction: row;
96 align-items: center;
97 flex-wrap: wrap;
@@ -146,73 +146,73 @@
146
147 /**************************************
148 * Main Area: Global Menu
149 */
150
151 div.mainmenu, div.submenu {
152 background-color: #080;
153 border-radius: 1rem 1rem 0 0;
154 box-shadow: 3px 4px 1px #000;
155 color: #000;
156 font-weight: bold;
157 font-size: 1.1rem;
158 text-align: center;
159 }
160
161 div.mainmenu {
162 padding-top: 0.33rem;
163 padding-bottom: 0.25rem;
164 }
165
166 div.submenu {
167 border-top: 1px solid #0a0;
168 border-radius: 0;
169 display: block;
170 }
171
172 div.mainmenu a, div.submenu a, div.submenu label {
173 color: #000;
174 padding: 0 0.75rem;
175 text-decoration: none;
176 }
177
178 div.mainmenu a:hover, div.submenu a:hover, div.submenu label:hover {
179 color: #fff;
180 text-shadow: 0px 0px 6px #0f0;
181 }
182
183 div.submenu * {
184 margin: 0 0.5rem;
185 vertical-align: middle;
186 }
187
188 div.submenu select, div.submenu input {
189 background-color: #222;
190 border: 1px inset #080;
191 color: #eee;
192 cursor: pointer;
193 font-size: 0.9rem;
194 }
195
196 div.submenu select {
197 height: 1.75rem;
198 }
199
200 /**************************************
201 * Main Area: Content
202 */
203
204 div.content {
205 background-color: #222;
206 border-radius: 0 0 1rem 1rem;
207 box-shadow: 3px 3px 1px #000;
208 min-height:40%;
209 padding-bottom: 1rem;
210 padding-top: 0.5rem;
211 }
212
213 div.content table[bgcolor="white"] {
214 color: #000;
215 }
216
217 .piechartLabel {
218 fill: white;
@@ -223,40 +223,40 @@
223
224 /**************************************
225 * Main Area: Footer
226 */
227
228 div.footer {
229 color: #ee0;
230 font-size: 0.75rem;
231 padding: 0;
232 text-align: right;
233 width: 75%;
234 }
235
236
237 div.footer div {
238 background-color: #222;
239 box-shadow: 3px 3px 1px #000;
240 border-radius: 0 0 1rem 1rem;
241 margin: 0 0 10px 0;
242 padding: 0.25rem 0.75rem;
243 }
244
245 div.footer div.page-time {
246 float: left;
247 }
248
249 div.footer div.fossil-info {
250 float: right;
251 }
252
253 div.footer a, div.footer a:link, div.footer a:visited {
254 color: #ee0;
255 }
256
257 div.footer a:hover {
258 color: #fff;
259 text-shadow: 0px 0px 6px #ee0;
260 }
261
262
@@ -1152,18 +1152,18 @@
1152 body.branch .brlist > table > tbody > tr:hover:not(.selected),
1153 body.branch .brlist > table > tbody > tr.selected {
1154 background-color: #444;
1155 }
1156
1157 body.chat div.header, body.chat div.footer,
1158 body.chat div.mainmenu, body.chat div.submenu,
1159 body.chat div.content {
1160 margin-left: 0.5em;
1161 margin-right: 0.5em;
1162 margin-top: auto/*eliminates unnecessary scrollbars*/;
1163 }
1164 body.chat.chat-only-mode div.content {
1165 max-width: revert;
1166 }
1167 body.chat #chat-user-list .chat-user{
1168 color: white;
1169 }
1170
--- skins/xekri/css.txt
+++ skins/xekri/css.txt
@@ -75,11 +75,11 @@
75
76 /**************************************
77 * Main Area
78 */
79
80 header.header, nav.mainmenu, nav.submenu, main.content, footer.footer {
81 clear: both;
82 margin: 0 auto;
83 max-width: 90%;
84 padding: 0.25rem 1rem;
85 }
@@ -87,11 +87,11 @@
87
88 /**************************************
89 * Main Area: Header
90 */
91
92 header.header {
93 margin: 0.5rem auto 0 auto;
94 display: flex;
95 flex-direction: row;
96 align-items: center;
97 flex-wrap: wrap;
@@ -146,73 +146,73 @@
146
147 /**************************************
148 * Main Area: Global Menu
149 */
150
151 nav.mainmenu, nav.submenu {
152 background-color: #080;
153 border-radius: 1rem 1rem 0 0;
154 box-shadow: 3px 4px 1px #000;
155 color: #000;
156 font-weight: bold;
157 font-size: 1.1rem;
158 text-align: center;
159 }
160
161 nav.mainmenu {
162 padding-top: 0.33rem;
163 padding-bottom: 0.25rem;
164 }
165
166 nav.submenu {
167 border-top: 1px solid #0a0;
168 border-radius: 0;
169 display: block;
170 }
171
172 nav.mainmenu a, nav.submenu a, nav.submenu label {
173 color: #000;
174 padding: 0 0.75rem;
175 text-decoration: none;
176 }
177
178 nav.mainmenu a:hover, nav.submenu a:hover, nav.submenu label:hover {
179 color: #fff;
180 text-shadow: 0px 0px 6px #0f0;
181 }
182
183 nav.submenu * {
184 margin: 0 0.5rem;
185 vertical-align: middle;
186 }
187
188 nav.submenu select, nav.submenu input {
189 background-color: #222;
190 border: 1px inset #080;
191 color: #eee;
192 cursor: pointer;
193 font-size: 0.9rem;
194 }
195
196 nav.submenu select {
197 height: 1.75rem;
198 }
199
200 /**************************************
201 * Main Area: Content
202 */
203
204 main.content {
205 background-color: #222;
206 border-radius: 0 0 1rem 1rem;
207 box-shadow: 3px 3px 1px #000;
208 min-height:40%;
209 padding-bottom: 1rem;
210 padding-top: 0.5rem;
211 }
212
213 main.content table[bgcolor="white"] {
214 color: #000;
215 }
216
217 .piechartLabel {
218 fill: white;
@@ -223,40 +223,40 @@
223
224 /**************************************
225 * Main Area: Footer
226 */
227
228 footer.footer {
229 color: #ee0;
230 font-size: 0.75rem;
231 padding: 0;
232 text-align: right;
233 width: 75%;
234 }
235
236
237 footer.footer div {
238 background-color: #222;
239 box-shadow: 3px 3px 1px #000;
240 border-radius: 0 0 1rem 1rem;
241 margin: 0 0 10px 0;
242 padding: 0.25rem 0.75rem;
243 }
244
245 footer.footer div.page-time {
246 float: left;
247 }
248
249 footer.footer div.fossil-info {
250 float: right;
251 }
252
253 footer.footer a, footer.footer a:link, footer.footer a:visited {
254 color: #ee0;
255 }
256
257 footer.footer a:hover {
258 color: #fff;
259 text-shadow: 0px 0px 6px #ee0;
260 }
261
262
@@ -1152,18 +1152,18 @@
1152 body.branch .brlist > table > tbody > tr:hover:not(.selected),
1153 body.branch .brlist > table > tbody > tr.selected {
1154 background-color: #444;
1155 }
1156
1157 body.chat header.header, body.chat footer.footer,
1158 body.chat nav.mainmenu, body.chat nav.submenu,
1159 body.chat main.content {
1160 margin-left: 0.5em;
1161 margin-right: 0.5em;
1162 margin-top: auto/*eliminates unnecessary scrollbars*/;
1163 }
1164 body.chat.chat-only-mode main.content {
1165 max-width: revert;
1166 }
1167 body.chat #chat-user-list .chat-user{
1168 color: white;
1169 }
1170
--- skins/xekri/footer.txt
+++ skins/xekri/footer.txt
@@ -1,9 +1,9 @@
11
</div>
2
-<div class="footer">
2
+<footer class="footer">
33
<div class="page-time">
44
Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
55
</div>
66
<div class="fossil-info">
77
Fossil v$release_version $manifest_version
88
</div>
9
-</div>
9
+</footer>
1010
--- skins/xekri/footer.txt
+++ skins/xekri/footer.txt
@@ -1,9 +1,9 @@
1 </div>
2 <div class="footer">
3 <div class="page-time">
4 Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
5 </div>
6 <div class="fossil-info">
7 Fossil v$release_version $manifest_version
8 </div>
9 </div>
10
--- skins/xekri/footer.txt
+++ skins/xekri/footer.txt
@@ -1,9 +1,9 @@
1 </div>
2 <footer class="footer">
3 <div class="page-time">
4 Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s
5 </div>
6 <div class="fossil-info">
7 Fossil v$release_version $manifest_version
8 </div>
9 </footer>
10
--- skins/xekri/header.txt
+++ skins/xekri/header.txt
@@ -1,6 +1,6 @@
1
-<div class="header">
1
+<header class="header">
22
<div class="logo">
33
<th1>
44
##
55
## NOTE: The purpose of this procedure is to take the base URL of the
66
## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
7676
puts "Logged in as $login"
7777
} else {
7878
puts "Not logged in"
7979
}
8080
</th1></nobr><small><div id="clock"></div></small></div>
81
-</div>
81
+</header>
8282
<th1>html "<script nonce='$nonce'>"</th1>
8383
function updateClock(){
8484
var e = document.getElementById("clock");
8585
if(e){
8686
var d = new Date();
@@ -95,11 +95,11 @@
9595
setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
9696
}
9797
}
9898
updateClock();
9999
</script>
100
-<div class="mainmenu"><th1>
100
+<nav class="mainmenu"><th1>
101101
set sitemap 0
102102
foreach {name url expr class} $mainmenu {
103103
if {![capexpr $expr]} continue
104104
if {[string match /* $url]} {
105105
if {[string match $url\[/?#\]* /$current_page/]} {
@@ -111,6 +111,6 @@
111111
if {[string match */sitemap $url]} {set sitemap 1}
112112
}
113113
if {!$sitemap} {
114114
html "<a href='$home/sitemap'>...</a>\n"
115115
}
116
-</th1></div>
116
+</th1></nav>
117117
--- skins/xekri/header.txt
+++ skins/xekri/header.txt
@@ -1,6 +1,6 @@
1 <div class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
76 puts "Logged in as $login"
77 } else {
78 puts "Not logged in"
79 }
80 </th1></nobr><small><div id="clock"></div></small></div>
81 </div>
82 <th1>html "<script nonce='$nonce'>"</th1>
83 function updateClock(){
84 var e = document.getElementById("clock");
85 if(e){
86 var d = new Date();
@@ -95,11 +95,11 @@
95 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
96 }
97 }
98 updateClock();
99 </script>
100 <div class="mainmenu"><th1>
101 set sitemap 0
102 foreach {name url expr class} $mainmenu {
103 if {![capexpr $expr]} continue
104 if {[string match /* $url]} {
105 if {[string match $url\[/?#\]* /$current_page/]} {
@@ -111,6 +111,6 @@
111 if {[string match */sitemap $url]} {set sitemap 1}
112 }
113 if {!$sitemap} {
114 html "<a href='$home/sitemap'>...</a>\n"
115 }
116 </th1></div>
117
--- skins/xekri/header.txt
+++ skins/xekri/header.txt
@@ -1,6 +1,6 @@
1 <header class="header">
2 <div class="logo">
3 <th1>
4 ##
5 ## NOTE: The purpose of this procedure is to take the base URL of the
6 ## Fossil project and return the root of the entire web site using
@@ -76,11 +76,11 @@
76 puts "Logged in as $login"
77 } else {
78 puts "Not logged in"
79 }
80 </th1></nobr><small><div id="clock"></div></small></div>
81 </header>
82 <th1>html "<script nonce='$nonce'>"</th1>
83 function updateClock(){
84 var e = document.getElementById("clock");
85 if(e){
86 var d = new Date();
@@ -95,11 +95,11 @@
95 setTimeout(updateClock,(60-d.getUTCSeconds())*1000);
96 }
97 }
98 updateClock();
99 </script>
100 <nav class="mainmenu"><th1>
101 set sitemap 0
102 foreach {name url expr class} $mainmenu {
103 if {![capexpr $expr]} continue
104 if {[string match /* $url]} {
105 if {[string match $url\[/?#\]* /$current_page/]} {
@@ -111,6 +111,6 @@
111 if {[string match */sitemap $url]} {set sitemap 1}
112 }
113 if {!$sitemap} {
114 html "<a href='$home/sitemap'>...</a>\n"
115 }
116 </th1></nav>
117
--- src/accordion.js
+++ src/accordion.js
@@ -40,10 +40,11 @@
4040
img.className = "accordion_btn accordion_btn_plus";
4141
a[i].insertBefore(img,a[i].firstChild);
4242
img = document.createElement("img");
4343
img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
4444
img.className = "accordion_btn accordion_btn_minus";
45
+ img.alt = "Open/Close Section";
4546
a[i].insertBefore(img,a[i].firstChild);
4647
a[i].addEventListener("click",function(){
4748
var x = this.nextElementSibling;
4849
if( this.classList.contains("accordion_closed") ){
4950
x.style.maxHeight = x.scrollHeight + "px";
5051
--- src/accordion.js
+++ src/accordion.js
@@ -40,10 +40,11 @@
40 img.className = "accordion_btn accordion_btn_plus";
41 a[i].insertBefore(img,a[i].firstChild);
42 img = document.createElement("img");
43 img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
44 img.className = "accordion_btn accordion_btn_minus";
 
45 a[i].insertBefore(img,a[i].firstChild);
46 a[i].addEventListener("click",function(){
47 var x = this.nextElementSibling;
48 if( this.classList.contains("accordion_closed") ){
49 x.style.maxHeight = x.scrollHeight + "px";
50
--- src/accordion.js
+++ src/accordion.js
@@ -40,10 +40,11 @@
40 img.className = "accordion_btn accordion_btn_plus";
41 a[i].insertBefore(img,a[i].firstChild);
42 img = document.createElement("img");
43 img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1];
44 img.className = "accordion_btn accordion_btn_minus";
45 img.alt = "Open/Close Section";
46 a[i].insertBefore(img,a[i].firstChild);
47 a[i].addEventListener("click",function(){
48 var x = this.nextElementSibling;
49 if( this.classList.contains("accordion_closed") ){
50 x.style.maxHeight = x.scrollHeight + "px";
51
-1
--- src/add.c
+++ src/add.c
@@ -362,11 +362,10 @@
362362
** The --case-sensitive option determines whether or not filenames should
363363
** be treated case sensitive or not. If the option is not given, the default
364364
** depends on the global setting, or the operating system default, if not set.
365365
**
366366
** Options:
367
-**
368367
** --case-sensitive BOOL Override the case-sensitive setting
369368
** --dotfiles Include files beginning with a dot (".")
370369
** -f|--force Add files without prompting
371370
** --ignore CSG Ignore unmanaged files matching patterns from
372371
** the Comma Separated Glob (CSG) pattern list
373372
--- src/add.c
+++ src/add.c
@@ -362,11 +362,10 @@
362 ** The --case-sensitive option determines whether or not filenames should
363 ** be treated case sensitive or not. If the option is not given, the default
364 ** depends on the global setting, or the operating system default, if not set.
365 **
366 ** Options:
367 **
368 ** --case-sensitive BOOL Override the case-sensitive setting
369 ** --dotfiles Include files beginning with a dot (".")
370 ** -f|--force Add files without prompting
371 ** --ignore CSG Ignore unmanaged files matching patterns from
372 ** the Comma Separated Glob (CSG) pattern list
373
--- src/add.c
+++ src/add.c
@@ -362,11 +362,10 @@
362 ** The --case-sensitive option determines whether or not filenames should
363 ** be treated case sensitive or not. If the option is not given, the default
364 ** depends on the global setting, or the operating system default, if not set.
365 **
366 ** Options:
 
367 ** --case-sensitive BOOL Override the case-sensitive setting
368 ** --dotfiles Include files beginning with a dot (".")
369 ** -f|--force Add files without prompting
370 ** --ignore CSG Ignore unmanaged files matching patterns from
371 ** the Comma Separated Glob (CSG) pattern list
372
+38 -49
--- src/alerts.c
+++ src/alerts.c
@@ -291,11 +291,11 @@
291291
@ <h1>Status</h1>
292292
@ <table class="label-value">
293293
if( alert_enabled() ){
294294
stats_for_email();
295295
}else{
296
- @ <th>Disabled</th>
296
+ @ <td>Disabled</td>
297297
}
298298
@ </table>
299299
@ <hr>
300300
@ <h1> Configuration </h1>
301301
@ <form action="%R/setup_notification" method="post"><div>
@@ -1112,47 +1112,40 @@
11121112
** COMMAND: alerts*
11131113
**
11141114
** Usage: %fossil alerts SUBCOMMAND ARGS...
11151115
**
11161116
** Subcommands:
1117
-**
11181117
** pending Show all pending alerts. Useful for debugging.
1119
-**
11201118
** reset Hard reset of all email notification tables
11211119
** in the repository. This erases all subscription
11221120
** information. ** Use with extreme care **
1123
-**
11241121
** send Compose and send pending email alerts.
11251122
** Some installations may want to do this via
11261123
** a cron-job to make sure alerts are sent
11271124
** in a timely manner.
1128
-** Options:
11291125
**
1126
+** Options:
11301127
** --digest Send digests
11311128
** --renewal Send subscription renewal
11321129
** notices
11331130
** --test Write to standard output
1134
-**
11351131
** settings [NAME VALUE] With no arguments, list all email settings.
11361132
** Or change the value of a single email setting.
1137
-**
11381133
** status Report on the status of the email alert
11391134
** subsystem
1140
-**
11411135
** subscribers [PATTERN] List all subscribers matching PATTERN. Either
11421136
** LIKE or GLOB wildcards can be used in PATTERN.
1143
-**
11441137
** test-message TO [OPTS] Send a single email message using whatever
11451138
** email sending mechanism is currently configured.
11461139
** Use this for testing the email notification
1147
-** configuration. Options:
1140
+** configuration.
11481141
**
1142
+** Options:
11491143
** --body FILENAME Content from FILENAME
11501144
** --smtp-trace Trace SMTP processing
11511145
** --stdout Send msg to stdout
11521146
** -S|--subject SUBJECT Message "subject:"
1153
-**
11541147
** unsubscribe EMAIL Remove a single subscriber with the given EMAIL.
11551148
*/
11561149
void alert_cmd(void){
11571150
const char *zCmd;
11581151
int nCmd;
@@ -1603,12 +1596,12 @@
16031596
@ <p>To receive email notifications for changes to this
16041597
@ repository, fill out the form below and press the "Submit" button.</p>
16051598
form_begin(0, "%R/subscribe");
16061599
@ <table class="subscribe">
16071600
@ <tr>
1608
- @ <td class="form_label">Email&nbsp;Address:</td>
1609
- @ <td><input type="text" name="e" value="%h(PD("e",""))" size="30"></td>
1601
+ @ <td class="form_label"><label for="e">Email&nbsp;Address:</label></td>
1602
+ @ <td><input type="text" id="e" name="e" value="%h(PD("e",""))" size="30"></td>
16101603
@ <tr>
16111604
if( eErr==1 ){
16121605
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
16131606
}
16141607
@ </tr>
@@ -1621,12 +1614,12 @@
16211614
uSeed = captcha_seed();
16221615
}
16231616
zDecoded = captcha_decode(uSeed);
16241617
zCaptcha = captcha_render(zDecoded);
16251618
@ <tr>
1626
- @ <td class="form_label">Security Code:</td>
1627
- @ <td><input type="text" name="captcha" value="%h(zInit)" size="30">
1619
+ @ <td class="form_label"><label for="captcha">Security Code:</label></td>
1620
+ @ <td><input type="text" id="captcha" name="captcha" value="%h(zInit)" size="30">
16281621
captcha_speakit_button(uSeed, "Speak the code");
16291622
@ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
16301623
@ </tr>
16311624
if( eErr==2 ){
16321625
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
@@ -1633,13 +1626,13 @@
16331626
}
16341627
@ </tr>
16351628
}
16361629
if( g.perm.Admin ){
16371630
@ <tr>
1638
- @ <td class="form_label">User:</td>
1639
- @ <td><input type="text" name="suname" value="%h(PD("suname",g.zLogin))" \
1640
- @ size="30"></td>
1631
+ @ <td class="form_label"><label for="suname">User:</label></td>
1632
+ @ <td><input type="text" id="suname" name="suname" \
1633
+ @ value="%h(PD("suname",g.zLogin))" size="30"></td>
16411634
@ </tr>
16421635
if( eErr==3 ){
16431636
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
16441637
}
16451638
@ </tr>
@@ -1667,12 +1660,12 @@
16671660
@ Wiki</label><br>
16681661
}
16691662
di = PB("di");
16701663
@ </td></tr>
16711664
@ <tr>
1672
- @ <td class="form_label">Delivery:</td>
1673
- @ <td><select size="1" name="di">
1665
+ @ <td class="form_label"><label for="di">Delivery:</label></td>
1666
+ @ <td><select size="1" id="di" name="di">
16741667
@ <option value="0" %s(di?"":"selected")>Individual Emails</option>
16751668
@ <option value="1" %s(di?"selected":"")>Daily Digest</option>
16761669
@ </select></td>
16771670
@ </tr>
16781671
if( g.perm.Admin ){
@@ -1972,13 +1965,13 @@
19721965
zHalfCode = db_text("x","SELECT hex(substr(subscriberCode,1,16))"
19731966
" FROM subscriber WHERE subscriberId=%d", sid);
19741967
@ <input type="hidden" name="name" value="%h(zHalfCode)">
19751968
@ <table class="subscribe">
19761969
@ <tr>
1977
- @ <td class="form_label">Email&nbsp;Address:</td>
1970
+ @ <td class="form_label"><label for="semail">Email&nbsp;Address:</label></td>
19781971
if( isLogin ){
1979
- @ <td><input type="text" name="semail" value="%h(semail)" size="30">\
1972
+ @ <td><input type="text" id="semail" name="semail" value="%h(semail)" size="30">\
19801973
if( eErr==8 ){
19811974
@ <span class='loginError'>&larr; not a valid email address!</span>
19821975
}else if( g.perm.Admin ){
19831976
@ &nbsp;&nbsp;<a href="%R/announce?to=%t(semail)">\
19841977
@ (Send a message to %h(semail))</a>\
@@ -2009,13 +2002,13 @@
20092002
@ <tr>
20102003
@ <td class='form_label'>Last Contact:</td>
20112004
@ <td>%h(db_column_text(&q,10)) &larr; \
20122005
@ %,d(db_column_int(&q,11)) days ago</td>
20132006
@ </tr>
2014
- @ <td class="form_label">User:</td>
2015
- @ <td><input type="text" name="suname" value="%h(suname?suname:"")" \
2016
- @ size="30">\
2007
+ @ <td class="form_label"><label for="suname">User:</label></td>
2008
+ @ <td><input type="text" id="suname" name="suname" \
2009
+ @ value="%h(suname?suname:"")" size="30">\
20172010
uid = db_int(0, "SELECT uid FROM user WHERE login=%Q", suname);
20182011
if( uid ){
20192012
@ &nbsp;&nbsp;<a href='%R/setup_uedit?id=%d(uid)'>\
20202013
@ (login info for %h(suname))</a>\
20212014
}
@@ -2043,12 +2036,12 @@
20432036
@ <label><input type="checkbox" name="sw" %s(sw?"checked":"")>\
20442037
@ Wiki</label>
20452038
}
20462039
@ </td></tr>
20472040
@ <tr>
2048
- @ <td class="form_label">Delivery:</td>
2049
- @ <td><select size="1" name="sdigest">
2041
+ @ <td class="form_label"><label for="sdigest">Delivery:</label></td>
2042
+ @ <td><select size="1" id="sdigest" name="sdigest">
20502043
@ <option value="0" %s(sdigest?"":"selected")>Individual Emails</option>
20512044
@ <option value="1" %s(sdigest?"selected":"")>Daily Digest</option>
20522045
@ </select></td>
20532046
@ </tr>
20542047
if( g.perm.Admin ){
@@ -2276,22 +2269,22 @@
22762269
@ explain how to unsubscribe and/or change your subscription settings.</p>
22772270
@
22782271
form_begin(0, "%R/unsubscribe");
22792272
@ <table class="subscribe">
22802273
@ <tr>
2281
- @ <td class="form_label">Email&nbsp;Address:</td>
2282
- @ <td><input type="text" name="e" value="%h(zEAddr)" size="30"></td>
2274
+ @ <td class="form_label"><label for="e">Email&nbsp;Address:</label></td>
2275
+ @ <td><input type="text" id="e" name="e" value="%h(zEAddr)" size="30"></td>
22832276
if( eErr==1 ){
22842277
@ <td><span class="loginError">&larr; %h(zErr)</span></td>
22852278
}
22862279
@ </tr>
22872280
uSeed = captcha_seed();
22882281
zDecoded = captcha_decode(uSeed);
22892282
zCaptcha = captcha_render(zDecoded);
22902283
@ <tr>
2291
- @ <td class="form_label">Security Code:</td>
2292
- @ <td><input type="text" name="captcha" value="" size="30">
2284
+ @ <td class="form_label"><label for="captcha">Security Code:</label></td>
2285
+ @ <td><input type="text" id="captcha" name="captcha" value="" size="30">
22932286
captcha_speakit_button(uSeed, "Speak the code");
22942287
@ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
22952288
if( eErr==2 ){
22962289
@ <td><span class="loginError">&larr; %h(zErr)</span></td>
22972290
}
@@ -2698,11 +2691,10 @@
26982691
** for check-in, forum, ticket, or wiki. The remaining text is a
26992692
** integer that references the EVENT.OBJID value for the event.
27002693
** Run /timeline?showid to see these OBJID values.
27012694
**
27022695
** Options:
2703
-**
27042696
** --digest Generate digest alert text
27052697
** --needmod Assume all events are pending moderator approval
27062698
*/
27072699
void test_alert_cmd(void){
27082700
Blob out;
@@ -2759,19 +2751,16 @@
27592751
** for check-in, forum, ticket, or wiki. The remaining text is a
27602752
** integer that references the EVENT.OBJID value for the event.
27612753
** Run /timeline?showid to see these OBJID values.
27622754
**
27632755
** Options:
2764
-**
27652756
** --backoffice Run alert_backoffice() after all alerts have
27662757
** been added. This will cause the alerts to be
27672758
** sent out with the SENDALERT_TRACE option.
2768
-**
27692759
** --debug Like --backoffice, but add the SENDALERT_STDOUT
27702760
** so that emails are printed to standard output
27712761
** rather than being sent.
2772
-**
27732762
** --digest Process emails using SENDALERT_DIGEST
27742763
*/
27752764
void test_add_alert_cmd(void){
27762765
int i;
27772766
int doAuto = find_option("backoffice",0,0)!=0;
@@ -3226,28 +3215,28 @@
32263215
form_begin(0, "%R/contact_admin");
32273216
@ <p>Enter a message to the repository administrator below:</p>
32283217
@ <table class="subscribe">
32293218
if( zCaptcha ){
32303219
@ <tr>
3231
- @ <td class="form_label">Security&nbsp;Code:</td>
3232
- @ <td><input type="text" name="captcha" value="" size="10">
3220
+ @ <td class="form_label"><label for="captcha">Security&nbsp;Code:</label></td>
3221
+ @ <td><input type="text" id="captcha" name="captcha" value="" size="10">
32333222
captcha_speakit_button(uSeed, "Speak the code");
32343223
@ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
32353224
@ </tr>
32363225
}
32373226
@ <tr>
3238
- @ <td class="form_label">Your&nbsp;Email&nbsp;Address:</td>
3239
- @ <td><input type="text" name="from" value="%h(PT("from"))" size="30"></td>
3227
+ @ <td class="form_label"><label for="from">Your&nbsp;Email&nbsp;Address:</label></td>
3228
+ @ <td><input type="text" id="from" name="from" value="%h(PT("from"))" size="30"></td>
32403229
@ </tr>
32413230
@ <tr>
3242
- @ <td class="form_label">Subject:</td>
3243
- @ <td><input type="text" name="subject" value="%h(PT("subject"))"\
3231
+ @ <td class="form_label"><label for="subject">Subject:</label></td>
3232
+ @ <td><input type="text" id="subject" name="subject" value="%h(PT("subject"))"\
32443233
@ size="80"></td>
32453234
@ </tr>
32463235
@ <tr>
3247
- @ <td class="form_label">Message:</td>
3248
- @ <td><textarea name="msg" cols="80" rows="10" wrap="virtual">\
3236
+ @ <td class="form_label"><label for="msg">Message:</label></td>
3237
+ @ <td><textarea id="msg" name="msg" cols="80" rows="10" wrap="virtual">\
32493238
@ %h(PT("msg"))</textarea>
32503239
@ </tr>
32513240
@ <tr>
32523241
@ <td></td>
32533242
@ <td><input type="submit" name="submit" value="Send Message">
@@ -3397,12 +3386,12 @@
33973386
int aMod = PB("mods");
33983387
const char *aack = aa ? "checked" : "";
33993388
const char *allck = all ? "checked" : "";
34003389
const char *modck = aMod ? "checked" : "";
34013390
@ <tr>
3402
- @ <td class="form_label">To:</td>
3403
- @ <td><input type="text" name="to" value="%h(PT("to"))" size="30"><br>
3391
+ @ <td class="form_label"><label for="to">To:</label></td>
3392
+ @ <td><input type="text" id="to" name="to" value="%h(PT("to"))" size="30"><br>
34043393
@ <label><input type="checkbox" name="aa" %s(aack)> \
34053394
@ All "announcement" subscribers</label> \
34063395
@ <a href="%R/subscribers?only=a" target="_blank">(list)</a><br>
34073396
@ <label><input type="checkbox" name="all" %s(allck)> \
34083397
@ All subscribers</label> \
@@ -3411,17 +3400,17 @@
34113400
@ All moderators</label> \
34123401
@ <a href="%R/setup_ulist?with=5" target="_blank">(list)</a><br></td>
34133402
@ </tr>
34143403
}
34153404
@ <tr>
3416
- @ <td class="form_label">Subject:</td>
3417
- @ <td><input type="text" name="subject" value="%h(PT("subject"))"\
3405
+ @ <td class="form_label"><label for="subject">Subject:</label></td>
3406
+ @ <td><input type="text" id="subject" name="subject" value="%h(PT("subject"))"\
34183407
@ size="80"></td>
34193408
@ </tr>
34203409
@ <tr>
3421
- @ <td class="form_label">Message:</td>
3422
- @ <td><textarea name="msg" cols="80" rows="10" wrap="virtual">\
3410
+ @ <td class="form_label"><label for="msg">Message:</label></td>
3411
+ @ <td><textarea id="msg" name="msg" cols="80" rows="10" wrap="virtual">\
34233412
@ %h(PT("msg"))</textarea>
34243413
@ </tr>
34253414
@ <tr>
34263415
@ <td></td>
34273416
if( fossil_strcmp(P("name"),"test2")==0 ){
34283417
--- src/alerts.c
+++ src/alerts.c
@@ -291,11 +291,11 @@
291 @ <h1>Status</h1>
292 @ <table class="label-value">
293 if( alert_enabled() ){
294 stats_for_email();
295 }else{
296 @ <th>Disabled</th>
297 }
298 @ </table>
299 @ <hr>
300 @ <h1> Configuration </h1>
301 @ <form action="%R/setup_notification" method="post"><div>
@@ -1112,47 +1112,40 @@
1112 ** COMMAND: alerts*
1113 **
1114 ** Usage: %fossil alerts SUBCOMMAND ARGS...
1115 **
1116 ** Subcommands:
1117 **
1118 ** pending Show all pending alerts. Useful for debugging.
1119 **
1120 ** reset Hard reset of all email notification tables
1121 ** in the repository. This erases all subscription
1122 ** information. ** Use with extreme care **
1123 **
1124 ** send Compose and send pending email alerts.
1125 ** Some installations may want to do this via
1126 ** a cron-job to make sure alerts are sent
1127 ** in a timely manner.
1128 ** Options:
1129 **
 
1130 ** --digest Send digests
1131 ** --renewal Send subscription renewal
1132 ** notices
1133 ** --test Write to standard output
1134 **
1135 ** settings [NAME VALUE] With no arguments, list all email settings.
1136 ** Or change the value of a single email setting.
1137 **
1138 ** status Report on the status of the email alert
1139 ** subsystem
1140 **
1141 ** subscribers [PATTERN] List all subscribers matching PATTERN. Either
1142 ** LIKE or GLOB wildcards can be used in PATTERN.
1143 **
1144 ** test-message TO [OPTS] Send a single email message using whatever
1145 ** email sending mechanism is currently configured.
1146 ** Use this for testing the email notification
1147 ** configuration. Options:
1148 **
 
1149 ** --body FILENAME Content from FILENAME
1150 ** --smtp-trace Trace SMTP processing
1151 ** --stdout Send msg to stdout
1152 ** -S|--subject SUBJECT Message "subject:"
1153 **
1154 ** unsubscribe EMAIL Remove a single subscriber with the given EMAIL.
1155 */
1156 void alert_cmd(void){
1157 const char *zCmd;
1158 int nCmd;
@@ -1603,12 +1596,12 @@
1603 @ <p>To receive email notifications for changes to this
1604 @ repository, fill out the form below and press the "Submit" button.</p>
1605 form_begin(0, "%R/subscribe");
1606 @ <table class="subscribe">
1607 @ <tr>
1608 @ <td class="form_label">Email&nbsp;Address:</td>
1609 @ <td><input type="text" name="e" value="%h(PD("e",""))" size="30"></td>
1610 @ <tr>
1611 if( eErr==1 ){
1612 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1613 }
1614 @ </tr>
@@ -1621,12 +1614,12 @@
1621 uSeed = captcha_seed();
1622 }
1623 zDecoded = captcha_decode(uSeed);
1624 zCaptcha = captcha_render(zDecoded);
1625 @ <tr>
1626 @ <td class="form_label">Security Code:</td>
1627 @ <td><input type="text" name="captcha" value="%h(zInit)" size="30">
1628 captcha_speakit_button(uSeed, "Speak the code");
1629 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
1630 @ </tr>
1631 if( eErr==2 ){
1632 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
@@ -1633,13 +1626,13 @@
1633 }
1634 @ </tr>
1635 }
1636 if( g.perm.Admin ){
1637 @ <tr>
1638 @ <td class="form_label">User:</td>
1639 @ <td><input type="text" name="suname" value="%h(PD("suname",g.zLogin))" \
1640 @ size="30"></td>
1641 @ </tr>
1642 if( eErr==3 ){
1643 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1644 }
1645 @ </tr>
@@ -1667,12 +1660,12 @@
1667 @ Wiki</label><br>
1668 }
1669 di = PB("di");
1670 @ </td></tr>
1671 @ <tr>
1672 @ <td class="form_label">Delivery:</td>
1673 @ <td><select size="1" name="di">
1674 @ <option value="0" %s(di?"":"selected")>Individual Emails</option>
1675 @ <option value="1" %s(di?"selected":"")>Daily Digest</option>
1676 @ </select></td>
1677 @ </tr>
1678 if( g.perm.Admin ){
@@ -1972,13 +1965,13 @@
1972 zHalfCode = db_text("x","SELECT hex(substr(subscriberCode,1,16))"
1973 " FROM subscriber WHERE subscriberId=%d", sid);
1974 @ <input type="hidden" name="name" value="%h(zHalfCode)">
1975 @ <table class="subscribe">
1976 @ <tr>
1977 @ <td class="form_label">Email&nbsp;Address:</td>
1978 if( isLogin ){
1979 @ <td><input type="text" name="semail" value="%h(semail)" size="30">\
1980 if( eErr==8 ){
1981 @ <span class='loginError'>&larr; not a valid email address!</span>
1982 }else if( g.perm.Admin ){
1983 @ &nbsp;&nbsp;<a href="%R/announce?to=%t(semail)">\
1984 @ (Send a message to %h(semail))</a>\
@@ -2009,13 +2002,13 @@
2009 @ <tr>
2010 @ <td class='form_label'>Last Contact:</td>
2011 @ <td>%h(db_column_text(&q,10)) &larr; \
2012 @ %,d(db_column_int(&q,11)) days ago</td>
2013 @ </tr>
2014 @ <td class="form_label">User:</td>
2015 @ <td><input type="text" name="suname" value="%h(suname?suname:"")" \
2016 @ size="30">\
2017 uid = db_int(0, "SELECT uid FROM user WHERE login=%Q", suname);
2018 if( uid ){
2019 @ &nbsp;&nbsp;<a href='%R/setup_uedit?id=%d(uid)'>\
2020 @ (login info for %h(suname))</a>\
2021 }
@@ -2043,12 +2036,12 @@
2043 @ <label><input type="checkbox" name="sw" %s(sw?"checked":"")>\
2044 @ Wiki</label>
2045 }
2046 @ </td></tr>
2047 @ <tr>
2048 @ <td class="form_label">Delivery:</td>
2049 @ <td><select size="1" name="sdigest">
2050 @ <option value="0" %s(sdigest?"":"selected")>Individual Emails</option>
2051 @ <option value="1" %s(sdigest?"selected":"")>Daily Digest</option>
2052 @ </select></td>
2053 @ </tr>
2054 if( g.perm.Admin ){
@@ -2276,22 +2269,22 @@
2276 @ explain how to unsubscribe and/or change your subscription settings.</p>
2277 @
2278 form_begin(0, "%R/unsubscribe");
2279 @ <table class="subscribe">
2280 @ <tr>
2281 @ <td class="form_label">Email&nbsp;Address:</td>
2282 @ <td><input type="text" name="e" value="%h(zEAddr)" size="30"></td>
2283 if( eErr==1 ){
2284 @ <td><span class="loginError">&larr; %h(zErr)</span></td>
2285 }
2286 @ </tr>
2287 uSeed = captcha_seed();
2288 zDecoded = captcha_decode(uSeed);
2289 zCaptcha = captcha_render(zDecoded);
2290 @ <tr>
2291 @ <td class="form_label">Security Code:</td>
2292 @ <td><input type="text" name="captcha" value="" size="30">
2293 captcha_speakit_button(uSeed, "Speak the code");
2294 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
2295 if( eErr==2 ){
2296 @ <td><span class="loginError">&larr; %h(zErr)</span></td>
2297 }
@@ -2698,11 +2691,10 @@
2698 ** for check-in, forum, ticket, or wiki. The remaining text is a
2699 ** integer that references the EVENT.OBJID value for the event.
2700 ** Run /timeline?showid to see these OBJID values.
2701 **
2702 ** Options:
2703 **
2704 ** --digest Generate digest alert text
2705 ** --needmod Assume all events are pending moderator approval
2706 */
2707 void test_alert_cmd(void){
2708 Blob out;
@@ -2759,19 +2751,16 @@
2759 ** for check-in, forum, ticket, or wiki. The remaining text is a
2760 ** integer that references the EVENT.OBJID value for the event.
2761 ** Run /timeline?showid to see these OBJID values.
2762 **
2763 ** Options:
2764 **
2765 ** --backoffice Run alert_backoffice() after all alerts have
2766 ** been added. This will cause the alerts to be
2767 ** sent out with the SENDALERT_TRACE option.
2768 **
2769 ** --debug Like --backoffice, but add the SENDALERT_STDOUT
2770 ** so that emails are printed to standard output
2771 ** rather than being sent.
2772 **
2773 ** --digest Process emails using SENDALERT_DIGEST
2774 */
2775 void test_add_alert_cmd(void){
2776 int i;
2777 int doAuto = find_option("backoffice",0,0)!=0;
@@ -3226,28 +3215,28 @@
3226 form_begin(0, "%R/contact_admin");
3227 @ <p>Enter a message to the repository administrator below:</p>
3228 @ <table class="subscribe">
3229 if( zCaptcha ){
3230 @ <tr>
3231 @ <td class="form_label">Security&nbsp;Code:</td>
3232 @ <td><input type="text" name="captcha" value="" size="10">
3233 captcha_speakit_button(uSeed, "Speak the code");
3234 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
3235 @ </tr>
3236 }
3237 @ <tr>
3238 @ <td class="form_label">Your&nbsp;Email&nbsp;Address:</td>
3239 @ <td><input type="text" name="from" value="%h(PT("from"))" size="30"></td>
3240 @ </tr>
3241 @ <tr>
3242 @ <td class="form_label">Subject:</td>
3243 @ <td><input type="text" name="subject" value="%h(PT("subject"))"\
3244 @ size="80"></td>
3245 @ </tr>
3246 @ <tr>
3247 @ <td class="form_label">Message:</td>
3248 @ <td><textarea name="msg" cols="80" rows="10" wrap="virtual">\
3249 @ %h(PT("msg"))</textarea>
3250 @ </tr>
3251 @ <tr>
3252 @ <td></td>
3253 @ <td><input type="submit" name="submit" value="Send Message">
@@ -3397,12 +3386,12 @@
3397 int aMod = PB("mods");
3398 const char *aack = aa ? "checked" : "";
3399 const char *allck = all ? "checked" : "";
3400 const char *modck = aMod ? "checked" : "";
3401 @ <tr>
3402 @ <td class="form_label">To:</td>
3403 @ <td><input type="text" name="to" value="%h(PT("to"))" size="30"><br>
3404 @ <label><input type="checkbox" name="aa" %s(aack)> \
3405 @ All "announcement" subscribers</label> \
3406 @ <a href="%R/subscribers?only=a" target="_blank">(list)</a><br>
3407 @ <label><input type="checkbox" name="all" %s(allck)> \
3408 @ All subscribers</label> \
@@ -3411,17 +3400,17 @@
3411 @ All moderators</label> \
3412 @ <a href="%R/setup_ulist?with=5" target="_blank">(list)</a><br></td>
3413 @ </tr>
3414 }
3415 @ <tr>
3416 @ <td class="form_label">Subject:</td>
3417 @ <td><input type="text" name="subject" value="%h(PT("subject"))"\
3418 @ size="80"></td>
3419 @ </tr>
3420 @ <tr>
3421 @ <td class="form_label">Message:</td>
3422 @ <td><textarea name="msg" cols="80" rows="10" wrap="virtual">\
3423 @ %h(PT("msg"))</textarea>
3424 @ </tr>
3425 @ <tr>
3426 @ <td></td>
3427 if( fossil_strcmp(P("name"),"test2")==0 ){
3428
--- src/alerts.c
+++ src/alerts.c
@@ -291,11 +291,11 @@
291 @ <h1>Status</h1>
292 @ <table class="label-value">
293 if( alert_enabled() ){
294 stats_for_email();
295 }else{
296 @ <td>Disabled</td>
297 }
298 @ </table>
299 @ <hr>
300 @ <h1> Configuration </h1>
301 @ <form action="%R/setup_notification" method="post"><div>
@@ -1112,47 +1112,40 @@
1112 ** COMMAND: alerts*
1113 **
1114 ** Usage: %fossil alerts SUBCOMMAND ARGS...
1115 **
1116 ** Subcommands:
 
1117 ** pending Show all pending alerts. Useful for debugging.
 
1118 ** reset Hard reset of all email notification tables
1119 ** in the repository. This erases all subscription
1120 ** information. ** Use with extreme care **
 
1121 ** send Compose and send pending email alerts.
1122 ** Some installations may want to do this via
1123 ** a cron-job to make sure alerts are sent
1124 ** in a timely manner.
 
1125 **
1126 ** Options:
1127 ** --digest Send digests
1128 ** --renewal Send subscription renewal
1129 ** notices
1130 ** --test Write to standard output
 
1131 ** settings [NAME VALUE] With no arguments, list all email settings.
1132 ** Or change the value of a single email setting.
 
1133 ** status Report on the status of the email alert
1134 ** subsystem
 
1135 ** subscribers [PATTERN] List all subscribers matching PATTERN. Either
1136 ** LIKE or GLOB wildcards can be used in PATTERN.
 
1137 ** test-message TO [OPTS] Send a single email message using whatever
1138 ** email sending mechanism is currently configured.
1139 ** Use this for testing the email notification
1140 ** configuration.
1141 **
1142 ** Options:
1143 ** --body FILENAME Content from FILENAME
1144 ** --smtp-trace Trace SMTP processing
1145 ** --stdout Send msg to stdout
1146 ** -S|--subject SUBJECT Message "subject:"
 
1147 ** unsubscribe EMAIL Remove a single subscriber with the given EMAIL.
1148 */
1149 void alert_cmd(void){
1150 const char *zCmd;
1151 int nCmd;
@@ -1603,12 +1596,12 @@
1596 @ <p>To receive email notifications for changes to this
1597 @ repository, fill out the form below and press the "Submit" button.</p>
1598 form_begin(0, "%R/subscribe");
1599 @ <table class="subscribe">
1600 @ <tr>
1601 @ <td class="form_label"><label for="e">Email&nbsp;Address:</label></td>
1602 @ <td><input type="text" id="e" name="e" value="%h(PD("e",""))" size="30"></td>
1603 @ <tr>
1604 if( eErr==1 ){
1605 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1606 }
1607 @ </tr>
@@ -1621,12 +1614,12 @@
1614 uSeed = captcha_seed();
1615 }
1616 zDecoded = captcha_decode(uSeed);
1617 zCaptcha = captcha_render(zDecoded);
1618 @ <tr>
1619 @ <td class="form_label"><label for="captcha">Security Code:</label></td>
1620 @ <td><input type="text" id="captcha" name="captcha" value="%h(zInit)" size="30">
1621 captcha_speakit_button(uSeed, "Speak the code");
1622 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
1623 @ </tr>
1624 if( eErr==2 ){
1625 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
@@ -1633,13 +1626,13 @@
1626 }
1627 @ </tr>
1628 }
1629 if( g.perm.Admin ){
1630 @ <tr>
1631 @ <td class="form_label"><label for="suname">User:</label></td>
1632 @ <td><input type="text" id="suname" name="suname" \
1633 @ value="%h(PD("suname",g.zLogin))" size="30"></td>
1634 @ </tr>
1635 if( eErr==3 ){
1636 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1637 }
1638 @ </tr>
@@ -1667,12 +1660,12 @@
1660 @ Wiki</label><br>
1661 }
1662 di = PB("di");
1663 @ </td></tr>
1664 @ <tr>
1665 @ <td class="form_label"><label for="di">Delivery:</label></td>
1666 @ <td><select size="1" id="di" name="di">
1667 @ <option value="0" %s(di?"":"selected")>Individual Emails</option>
1668 @ <option value="1" %s(di?"selected":"")>Daily Digest</option>
1669 @ </select></td>
1670 @ </tr>
1671 if( g.perm.Admin ){
@@ -1972,13 +1965,13 @@
1965 zHalfCode = db_text("x","SELECT hex(substr(subscriberCode,1,16))"
1966 " FROM subscriber WHERE subscriberId=%d", sid);
1967 @ <input type="hidden" name="name" value="%h(zHalfCode)">
1968 @ <table class="subscribe">
1969 @ <tr>
1970 @ <td class="form_label"><label for="semail">Email&nbsp;Address:</label></td>
1971 if( isLogin ){
1972 @ <td><input type="text" id="semail" name="semail" value="%h(semail)" size="30">\
1973 if( eErr==8 ){
1974 @ <span class='loginError'>&larr; not a valid email address!</span>
1975 }else if( g.perm.Admin ){
1976 @ &nbsp;&nbsp;<a href="%R/announce?to=%t(semail)">\
1977 @ (Send a message to %h(semail))</a>\
@@ -2009,13 +2002,13 @@
2002 @ <tr>
2003 @ <td class='form_label'>Last Contact:</td>
2004 @ <td>%h(db_column_text(&q,10)) &larr; \
2005 @ %,d(db_column_int(&q,11)) days ago</td>
2006 @ </tr>
2007 @ <td class="form_label"><label for="suname">User:</label></td>
2008 @ <td><input type="text" id="suname" name="suname" \
2009 @ value="%h(suname?suname:"")" size="30">\
2010 uid = db_int(0, "SELECT uid FROM user WHERE login=%Q", suname);
2011 if( uid ){
2012 @ &nbsp;&nbsp;<a href='%R/setup_uedit?id=%d(uid)'>\
2013 @ (login info for %h(suname))</a>\
2014 }
@@ -2043,12 +2036,12 @@
2036 @ <label><input type="checkbox" name="sw" %s(sw?"checked":"")>\
2037 @ Wiki</label>
2038 }
2039 @ </td></tr>
2040 @ <tr>
2041 @ <td class="form_label"><label for="sdigest">Delivery:</label></td>
2042 @ <td><select size="1" id="sdigest" name="sdigest">
2043 @ <option value="0" %s(sdigest?"":"selected")>Individual Emails</option>
2044 @ <option value="1" %s(sdigest?"selected":"")>Daily Digest</option>
2045 @ </select></td>
2046 @ </tr>
2047 if( g.perm.Admin ){
@@ -2276,22 +2269,22 @@
2269 @ explain how to unsubscribe and/or change your subscription settings.</p>
2270 @
2271 form_begin(0, "%R/unsubscribe");
2272 @ <table class="subscribe">
2273 @ <tr>
2274 @ <td class="form_label"><label for="e">Email&nbsp;Address:</label></td>
2275 @ <td><input type="text" id="e" name="e" value="%h(zEAddr)" size="30"></td>
2276 if( eErr==1 ){
2277 @ <td><span class="loginError">&larr; %h(zErr)</span></td>
2278 }
2279 @ </tr>
2280 uSeed = captcha_seed();
2281 zDecoded = captcha_decode(uSeed);
2282 zCaptcha = captcha_render(zDecoded);
2283 @ <tr>
2284 @ <td class="form_label"><label for="captcha">Security Code:</label></td>
2285 @ <td><input type="text" id="captcha" name="captcha" value="" size="30">
2286 captcha_speakit_button(uSeed, "Speak the code");
2287 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
2288 if( eErr==2 ){
2289 @ <td><span class="loginError">&larr; %h(zErr)</span></td>
2290 }
@@ -2698,11 +2691,10 @@
2691 ** for check-in, forum, ticket, or wiki. The remaining text is a
2692 ** integer that references the EVENT.OBJID value for the event.
2693 ** Run /timeline?showid to see these OBJID values.
2694 **
2695 ** Options:
 
2696 ** --digest Generate digest alert text
2697 ** --needmod Assume all events are pending moderator approval
2698 */
2699 void test_alert_cmd(void){
2700 Blob out;
@@ -2759,19 +2751,16 @@
2751 ** for check-in, forum, ticket, or wiki. The remaining text is a
2752 ** integer that references the EVENT.OBJID value for the event.
2753 ** Run /timeline?showid to see these OBJID values.
2754 **
2755 ** Options:
 
2756 ** --backoffice Run alert_backoffice() after all alerts have
2757 ** been added. This will cause the alerts to be
2758 ** sent out with the SENDALERT_TRACE option.
 
2759 ** --debug Like --backoffice, but add the SENDALERT_STDOUT
2760 ** so that emails are printed to standard output
2761 ** rather than being sent.
 
2762 ** --digest Process emails using SENDALERT_DIGEST
2763 */
2764 void test_add_alert_cmd(void){
2765 int i;
2766 int doAuto = find_option("backoffice",0,0)!=0;
@@ -3226,28 +3215,28 @@
3215 form_begin(0, "%R/contact_admin");
3216 @ <p>Enter a message to the repository administrator below:</p>
3217 @ <table class="subscribe">
3218 if( zCaptcha ){
3219 @ <tr>
3220 @ <td class="form_label"><label for="captcha">Security&nbsp;Code:</label></td>
3221 @ <td><input type="text" id="captcha" name="captcha" value="" size="10">
3222 captcha_speakit_button(uSeed, "Speak the code");
3223 @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td>
3224 @ </tr>
3225 }
3226 @ <tr>
3227 @ <td class="form_label"><label for="from">Your&nbsp;Email&nbsp;Address:</label></td>
3228 @ <td><input type="text" id="from" name="from" value="%h(PT("from"))" size="30"></td>
3229 @ </tr>
3230 @ <tr>
3231 @ <td class="form_label"><label for="subject">Subject:</label></td>
3232 @ <td><input type="text" id="subject" name="subject" value="%h(PT("subject"))"\
3233 @ size="80"></td>
3234 @ </tr>
3235 @ <tr>
3236 @ <td class="form_label"><label for="msg">Message:</label></td>
3237 @ <td><textarea id="msg" name="msg" cols="80" rows="10" wrap="virtual">\
3238 @ %h(PT("msg"))</textarea>
3239 @ </tr>
3240 @ <tr>
3241 @ <td></td>
3242 @ <td><input type="submit" name="submit" value="Send Message">
@@ -3397,12 +3386,12 @@
3386 int aMod = PB("mods");
3387 const char *aack = aa ? "checked" : "";
3388 const char *allck = all ? "checked" : "";
3389 const char *modck = aMod ? "checked" : "";
3390 @ <tr>
3391 @ <td class="form_label"><label for="to">To:</label></td>
3392 @ <td><input type="text" id="to" name="to" value="%h(PT("to"))" size="30"><br>
3393 @ <label><input type="checkbox" name="aa" %s(aack)> \
3394 @ All "announcement" subscribers</label> \
3395 @ <a href="%R/subscribers?only=a" target="_blank">(list)</a><br>
3396 @ <label><input type="checkbox" name="all" %s(allck)> \
3397 @ All subscribers</label> \
@@ -3411,17 +3400,17 @@
3400 @ All moderators</label> \
3401 @ <a href="%R/setup_ulist?with=5" target="_blank">(list)</a><br></td>
3402 @ </tr>
3403 }
3404 @ <tr>
3405 @ <td class="form_label"><label for="subject">Subject:</label></td>
3406 @ <td><input type="text" id="subject" name="subject" value="%h(PT("subject"))"\
3407 @ size="80"></td>
3408 @ </tr>
3409 @ <tr>
3410 @ <td class="form_label"><label for="msg">Message:</label></td>
3411 @ <td><textarea id="msg" name="msg" cols="80" rows="10" wrap="virtual">\
3412 @ %h(PT("msg"))</textarea>
3413 @ </tr>
3414 @ <tr>
3415 @ <td></td>
3416 if( fossil_strcmp(P("name"),"test2")==0 ){
3417
--- src/allrepo.c
+++ src/allrepo.c
@@ -61,88 +61,66 @@
6161
**
6262
** On Win32 systems, the file is named "_fossil" and is located in
6363
** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%.
6464
**
6565
** Available operations are:
66
-**
6766
** backup Backup all repositories. The argument must be the name of
6867
** a directory into which all backup repositories are written.
69
-**
7068
** cache Manages the cache used for potentially expensive web
7169
** pages. Any additional arguments are passed on verbatim
7270
** to the cache command.
73
-**
7471
** changes Shows all local checkouts that have uncommitted changes.
7572
** This operation has no additional options.
76
-**
7773
** clean Delete all "extra" files in all local checkouts. Extreme
7874
** caution should be exercised with this command because its
7975
** effects cannot be undone. Use of the --dry-run option to
8076
** carefully review the local checkouts to be operated upon
8177
** and the --whatif option to carefully review the files to
8278
** be deleted beforehand is highly recommended. The command
8379
** line options supported by the clean command itself, if any
8480
** are present, are passed along verbatim.
85
-**
8681
** config Only the "config pull AREA" command works.
87
-**
8882
** dbstat Run the "dbstat" command on all repositories.
89
-**
9083
** extras Shows "extra" files from all local checkouts. The command
9184
** line options supported by the extra command itself, if any
9285
** are present, are passed along verbatim.
93
-**
9486
** fts-config Run the "fts-config" command on all repositories.
95
-**
9687
** git CMD Do the "git export" or "git status" command (whichever
9788
** is specified by CMD) on all repositories for which
9889
** a Git mirror has been previously established.
99
-**
10090
** info Run the "info" command on all repositories.
101
-**
10291
** pull Run a "pull" operation on all repositories. Only the
10392
** --verbose and --share-links options are supported.
104
-**
10593
** push Run a "push" on all repositories. Only the --verbose
10694
** option is supported.
107
-**
10895
** rebuild Rebuild on all repositories. The command line options
10996
** supported by the rebuild command itself, if any are
11097
** present, are passed along verbatim. The --force and
11198
** --randomize options are not supported.
112
-**
11399
** sync Run a "sync" on all repositories. Only the --verbose
114100
** and --unversioned and --share-links options are supported.
115
-**
116101
** set Run the "setting" or "set" commands on all
117102
** repositories. These command are particularly useful in
118103
** conjunction with the "max-loadavg" setting which cannot
119104
** otherwise be set globally.
120
-**
121105
** unset Run the "unset" command on all repositories
122
-**
123106
** server Run the "server" commands on all repositories.
124107
** The root URI gives a listing of all repos.
125
-**
126108
** ui Run the "ui" command on all repositories. Like "server"
127109
** but bind to the loopback TCP address only, enable
128110
** the --localauth option and automatically launch a
129111
** web-browser
130112
**
131
-**
132113
** In addition, the following maintenance operations are supported:
133
-**
134114
** add Add all the repositories named to the set of repositories
135115
** tracked by Fossil. Normally Fossil is able to keep up with
136116
** this list by itself, but sometimes it can benefit from this
137117
** hint if you rename repositories.
138
-**
139118
** ignore Arguments are repositories that should be ignored by
140119
** subsequent clean, extras, list, pull, push, rebuild, and
141120
** sync operations. The -c|--ckout option causes the listed
142121
** local checkouts to be ignored instead.
143
-**
144122
** list | ls Display the location of all repositories. The -c|--ckout
145123
** option causes all local checkouts to be listed instead.
146124
**
147125
** Repositories are automatically added to the set of known repositories
148126
** when one of the following commands are run against the repository:
149127
--- src/allrepo.c
+++ src/allrepo.c
@@ -61,88 +61,66 @@
61 **
62 ** On Win32 systems, the file is named "_fossil" and is located in
63 ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%.
64 **
65 ** Available operations are:
66 **
67 ** backup Backup all repositories. The argument must be the name of
68 ** a directory into which all backup repositories are written.
69 **
70 ** cache Manages the cache used for potentially expensive web
71 ** pages. Any additional arguments are passed on verbatim
72 ** to the cache command.
73 **
74 ** changes Shows all local checkouts that have uncommitted changes.
75 ** This operation has no additional options.
76 **
77 ** clean Delete all "extra" files in all local checkouts. Extreme
78 ** caution should be exercised with this command because its
79 ** effects cannot be undone. Use of the --dry-run option to
80 ** carefully review the local checkouts to be operated upon
81 ** and the --whatif option to carefully review the files to
82 ** be deleted beforehand is highly recommended. The command
83 ** line options supported by the clean command itself, if any
84 ** are present, are passed along verbatim.
85 **
86 ** config Only the "config pull AREA" command works.
87 **
88 ** dbstat Run the "dbstat" command on all repositories.
89 **
90 ** extras Shows "extra" files from all local checkouts. The command
91 ** line options supported by the extra command itself, if any
92 ** are present, are passed along verbatim.
93 **
94 ** fts-config Run the "fts-config" command on all repositories.
95 **
96 ** git CMD Do the "git export" or "git status" command (whichever
97 ** is specified by CMD) on all repositories for which
98 ** a Git mirror has been previously established.
99 **
100 ** info Run the "info" command on all repositories.
101 **
102 ** pull Run a "pull" operation on all repositories. Only the
103 ** --verbose and --share-links options are supported.
104 **
105 ** push Run a "push" on all repositories. Only the --verbose
106 ** option is supported.
107 **
108 ** rebuild Rebuild on all repositories. The command line options
109 ** supported by the rebuild command itself, if any are
110 ** present, are passed along verbatim. The --force and
111 ** --randomize options are not supported.
112 **
113 ** sync Run a "sync" on all repositories. Only the --verbose
114 ** and --unversioned and --share-links options are supported.
115 **
116 ** set Run the "setting" or "set" commands on all
117 ** repositories. These command are particularly useful in
118 ** conjunction with the "max-loadavg" setting which cannot
119 ** otherwise be set globally.
120 **
121 ** unset Run the "unset" command on all repositories
122 **
123 ** server Run the "server" commands on all repositories.
124 ** The root URI gives a listing of all repos.
125 **
126 ** ui Run the "ui" command on all repositories. Like "server"
127 ** but bind to the loopback TCP address only, enable
128 ** the --localauth option and automatically launch a
129 ** web-browser
130 **
131 **
132 ** In addition, the following maintenance operations are supported:
133 **
134 ** add Add all the repositories named to the set of repositories
135 ** tracked by Fossil. Normally Fossil is able to keep up with
136 ** this list by itself, but sometimes it can benefit from this
137 ** hint if you rename repositories.
138 **
139 ** ignore Arguments are repositories that should be ignored by
140 ** subsequent clean, extras, list, pull, push, rebuild, and
141 ** sync operations. The -c|--ckout option causes the listed
142 ** local checkouts to be ignored instead.
143 **
144 ** list | ls Display the location of all repositories. The -c|--ckout
145 ** option causes all local checkouts to be listed instead.
146 **
147 ** Repositories are automatically added to the set of known repositories
148 ** when one of the following commands are run against the repository:
149
--- src/allrepo.c
+++ src/allrepo.c
@@ -61,88 +61,66 @@
61 **
62 ** On Win32 systems, the file is named "_fossil" and is located in
63 ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%.
64 **
65 ** Available operations are:
 
66 ** backup Backup all repositories. The argument must be the name of
67 ** a directory into which all backup repositories are written.
 
68 ** cache Manages the cache used for potentially expensive web
69 ** pages. Any additional arguments are passed on verbatim
70 ** to the cache command.
 
71 ** changes Shows all local checkouts that have uncommitted changes.
72 ** This operation has no additional options.
 
73 ** clean Delete all "extra" files in all local checkouts. Extreme
74 ** caution should be exercised with this command because its
75 ** effects cannot be undone. Use of the --dry-run option to
76 ** carefully review the local checkouts to be operated upon
77 ** and the --whatif option to carefully review the files to
78 ** be deleted beforehand is highly recommended. The command
79 ** line options supported by the clean command itself, if any
80 ** are present, are passed along verbatim.
 
81 ** config Only the "config pull AREA" command works.
 
82 ** dbstat Run the "dbstat" command on all repositories.
 
83 ** extras Shows "extra" files from all local checkouts. The command
84 ** line options supported by the extra command itself, if any
85 ** are present, are passed along verbatim.
 
86 ** fts-config Run the "fts-config" command on all repositories.
 
87 ** git CMD Do the "git export" or "git status" command (whichever
88 ** is specified by CMD) on all repositories for which
89 ** a Git mirror has been previously established.
 
90 ** info Run the "info" command on all repositories.
 
91 ** pull Run a "pull" operation on all repositories. Only the
92 ** --verbose and --share-links options are supported.
 
93 ** push Run a "push" on all repositories. Only the --verbose
94 ** option is supported.
 
95 ** rebuild Rebuild on all repositories. The command line options
96 ** supported by the rebuild command itself, if any are
97 ** present, are passed along verbatim. The --force and
98 ** --randomize options are not supported.
 
99 ** sync Run a "sync" on all repositories. Only the --verbose
100 ** and --unversioned and --share-links options are supported.
 
101 ** set Run the "setting" or "set" commands on all
102 ** repositories. These command are particularly useful in
103 ** conjunction with the "max-loadavg" setting which cannot
104 ** otherwise be set globally.
 
105 ** unset Run the "unset" command on all repositories
 
106 ** server Run the "server" commands on all repositories.
107 ** The root URI gives a listing of all repos.
 
108 ** ui Run the "ui" command on all repositories. Like "server"
109 ** but bind to the loopback TCP address only, enable
110 ** the --localauth option and automatically launch a
111 ** web-browser
112 **
 
113 ** In addition, the following maintenance operations are supported:
 
114 ** add Add all the repositories named to the set of repositories
115 ** tracked by Fossil. Normally Fossil is able to keep up with
116 ** this list by itself, but sometimes it can benefit from this
117 ** hint if you rename repositories.
 
118 ** ignore Arguments are repositories that should be ignored by
119 ** subsequent clean, extras, list, pull, push, rebuild, and
120 ** sync operations. The -c|--ckout option causes the listed
121 ** local checkouts to be ignored instead.
 
122 ** list | ls Display the location of all repositories. The -c|--ckout
123 ** option causes all local checkouts to be listed instead.
124 **
125 ** Repositories are automatically added to the set of known repositories
126 ** when one of the following commands are run against the repository:
127
+3 -5
--- src/attach.c
+++ src/attach.c
@@ -398,12 +398,12 @@
398398
@ <h2>Add Attachment To %s(zTargetType)</h2>
399399
form_begin("enctype='multipart/form-data'", "%R/attachadd");
400400
@ <div>
401401
@ File to Attach:
402402
@ <input type="file" name="f" size="60" /><br />
403
- @ Description:<br />
404
- @ <textarea name="comment" cols="80" rows="5" wrap="virtual"></textarea><br />
403
+ @ <label>Description:<br />
404
+ @ <textarea name="comment" cols="80" rows="5" wrap="virtual"></textarea></label><br />
405405
if( zTkt ){
406406
@ <input type="hidden" name="tkt" value="%h(zTkt)" />
407407
}else if( zTechNote ){
408408
@ <input type="hidden" name="technote" value="%h(zTechNote)" />
409409
}else{
@@ -678,18 +678,17 @@
678678
** COMMAND: attachment*
679679
**
680680
** Usage: %fossil attachment add ?PAGENAME? FILENAME ?OPTIONS?
681681
**
682682
** Add an attachment to an existing wiki page or tech note.
683
-** Options:
684683
**
684
+** Options:
685685
** -t|--technote DATETIME Specifies the timestamp of
686686
** the technote to which the attachment
687687
** is to be made. The attachment will be
688688
** to the most recently modified tech note
689689
** with the specified timestamp.
690
-**
691690
** -t|--technote TECHNOTE-ID Specifies the technote to be
692691
** updated by its technote id.
693692
**
694693
** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
695694
**
@@ -792,11 +791,10 @@
792791
** name arguments are glob prefixes for the attachment.target
793792
** field. If no names are provided then a prefix of [a-zA-Z] is used,
794793
** which will match most wiki page names and some ticket hashes.
795794
**
796795
** Options:
797
-**
798796
** -latest List only the latest version of a given attachment.
799797
**
800798
*/
801799
void test_list_attachments(void){
802800
Stmt q;
803801
--- src/attach.c
+++ src/attach.c
@@ -398,12 +398,12 @@
398 @ <h2>Add Attachment To %s(zTargetType)</h2>
399 form_begin("enctype='multipart/form-data'", "%R/attachadd");
400 @ <div>
401 @ File to Attach:
402 @ <input type="file" name="f" size="60" /><br />
403 @ Description:<br />
404 @ <textarea name="comment" cols="80" rows="5" wrap="virtual"></textarea><br />
405 if( zTkt ){
406 @ <input type="hidden" name="tkt" value="%h(zTkt)" />
407 }else if( zTechNote ){
408 @ <input type="hidden" name="technote" value="%h(zTechNote)" />
409 }else{
@@ -678,18 +678,17 @@
678 ** COMMAND: attachment*
679 **
680 ** Usage: %fossil attachment add ?PAGENAME? FILENAME ?OPTIONS?
681 **
682 ** Add an attachment to an existing wiki page or tech note.
683 ** Options:
684 **
 
685 ** -t|--technote DATETIME Specifies the timestamp of
686 ** the technote to which the attachment
687 ** is to be made. The attachment will be
688 ** to the most recently modified tech note
689 ** with the specified timestamp.
690 **
691 ** -t|--technote TECHNOTE-ID Specifies the technote to be
692 ** updated by its technote id.
693 **
694 ** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
695 **
@@ -792,11 +791,10 @@
792 ** name arguments are glob prefixes for the attachment.target
793 ** field. If no names are provided then a prefix of [a-zA-Z] is used,
794 ** which will match most wiki page names and some ticket hashes.
795 **
796 ** Options:
797 **
798 ** -latest List only the latest version of a given attachment.
799 **
800 */
801 void test_list_attachments(void){
802 Stmt q;
803
--- src/attach.c
+++ src/attach.c
@@ -398,12 +398,12 @@
398 @ <h2>Add Attachment To %s(zTargetType)</h2>
399 form_begin("enctype='multipart/form-data'", "%R/attachadd");
400 @ <div>
401 @ File to Attach:
402 @ <input type="file" name="f" size="60" /><br />
403 @ <label>Description:<br />
404 @ <textarea name="comment" cols="80" rows="5" wrap="virtual"></textarea></label><br />
405 if( zTkt ){
406 @ <input type="hidden" name="tkt" value="%h(zTkt)" />
407 }else if( zTechNote ){
408 @ <input type="hidden" name="technote" value="%h(zTechNote)" />
409 }else{
@@ -678,18 +678,17 @@
678 ** COMMAND: attachment*
679 **
680 ** Usage: %fossil attachment add ?PAGENAME? FILENAME ?OPTIONS?
681 **
682 ** Add an attachment to an existing wiki page or tech note.
 
683 **
684 ** Options:
685 ** -t|--technote DATETIME Specifies the timestamp of
686 ** the technote to which the attachment
687 ** is to be made. The attachment will be
688 ** to the most recently modified tech note
689 ** with the specified timestamp.
 
690 ** -t|--technote TECHNOTE-ID Specifies the technote to be
691 ** updated by its technote id.
692 **
693 ** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified.
694 **
@@ -792,11 +791,10 @@
791 ** name arguments are glob prefixes for the attachment.target
792 ** field. If no names are provided then a prefix of [a-zA-Z] is used,
793 ** which will match most wiki page names and some ticket hashes.
794 **
795 ** Options:
 
796 ** -latest List only the latest version of a given attachment.
797 **
798 */
799 void test_list_attachments(void){
800 Stmt q;
801
--- src/backoffice.c
+++ src/backoffice.c
@@ -679,34 +679,27 @@
679679
** backoffice work is done in-process. But if there are multiple repositories
680680
** or if --poll is used, a separate sub-process is started for each poll of
681681
** each repository.
682682
**
683683
** Standard options:
684
-**
685684
** --debug Show what this command is doing.
686
-**
687685
** --logfile FILE Append a log of backoffice actions onto FILE.
688
-**
689686
** --min N When polling, invoke backoffice at least
690687
** once every N seconds even if the repository
691688
** never changes. 0 or negative means disable
692689
** this feature. Default: 3600 (once per hour).
693
-**
694690
** --poll N Repeat backoffice calls for repositories that
695691
** change in appoximately N-second intervals.
696692
** N less than 1 turns polling off (the default).
697693
** Recommended polling interval: 60 seconds.
698
-**
699694
** --trace Enable debugging output on stderr
700695
**
701696
** Options intended for internal use only which may change or be
702697
** discontinued in future releases:
703
-**
704698
** --nodelay Do not queue up or wait for a backoffice job
705699
** to complete. If no work is available or if
706700
** backoffice has run recently, return immediately.
707
-**
708701
** --nolease Always run backoffice, even if there is a lease
709702
** conflict. This option implies --nodelay. This
710703
** option is added to secondary backoffice commands
711704
** that are invoked by the --poll option.
712705
*/
713706
--- src/backoffice.c
+++ src/backoffice.c
@@ -679,34 +679,27 @@
679 ** backoffice work is done in-process. But if there are multiple repositories
680 ** or if --poll is used, a separate sub-process is started for each poll of
681 ** each repository.
682 **
683 ** Standard options:
684 **
685 ** --debug Show what this command is doing.
686 **
687 ** --logfile FILE Append a log of backoffice actions onto FILE.
688 **
689 ** --min N When polling, invoke backoffice at least
690 ** once every N seconds even if the repository
691 ** never changes. 0 or negative means disable
692 ** this feature. Default: 3600 (once per hour).
693 **
694 ** --poll N Repeat backoffice calls for repositories that
695 ** change in appoximately N-second intervals.
696 ** N less than 1 turns polling off (the default).
697 ** Recommended polling interval: 60 seconds.
698 **
699 ** --trace Enable debugging output on stderr
700 **
701 ** Options intended for internal use only which may change or be
702 ** discontinued in future releases:
703 **
704 ** --nodelay Do not queue up or wait for a backoffice job
705 ** to complete. If no work is available or if
706 ** backoffice has run recently, return immediately.
707 **
708 ** --nolease Always run backoffice, even if there is a lease
709 ** conflict. This option implies --nodelay. This
710 ** option is added to secondary backoffice commands
711 ** that are invoked by the --poll option.
712 */
713
--- src/backoffice.c
+++ src/backoffice.c
@@ -679,34 +679,27 @@
679 ** backoffice work is done in-process. But if there are multiple repositories
680 ** or if --poll is used, a separate sub-process is started for each poll of
681 ** each repository.
682 **
683 ** Standard options:
 
684 ** --debug Show what this command is doing.
 
685 ** --logfile FILE Append a log of backoffice actions onto FILE.
 
686 ** --min N When polling, invoke backoffice at least
687 ** once every N seconds even if the repository
688 ** never changes. 0 or negative means disable
689 ** this feature. Default: 3600 (once per hour).
 
690 ** --poll N Repeat backoffice calls for repositories that
691 ** change in appoximately N-second intervals.
692 ** N less than 1 turns polling off (the default).
693 ** Recommended polling interval: 60 seconds.
 
694 ** --trace Enable debugging output on stderr
695 **
696 ** Options intended for internal use only which may change or be
697 ** discontinued in future releases:
 
698 ** --nodelay Do not queue up or wait for a backoffice job
699 ** to complete. If no work is available or if
700 ** backoffice has run recently, return immediately.
 
701 ** --nolease Always run backoffice, even if there is a lease
702 ** conflict. This option implies --nodelay. This
703 ** option is added to secondary backoffice commands
704 ** that are invoked by the --poll option.
705 */
706
+2 -23
--- src/bisect.c
+++ src/bisect.c
@@ -470,71 +470,50 @@
470470
**
471471
** Usage: %fossil bisect SUBCOMMAND ...
472472
**
473473
** Run various subcommands useful for searching back through the change
474474
** history for a particular checkin that causes or fixes a problem.
475
-**
476475
** > fossil bisect bad ?VERSION?
477
-**
478476
** Identify version VERSION as non-working. If VERSION is omitted,
479477
** the current checkout is marked as non-working.
480
-**
481478
** > fossil bisect good ?VERSION?
482
-**
483479
** Identify version VERSION as working. If VERSION is omitted,
484480
** the current checkout is marked as working.
485
-**
486481
** > fossil bisect log
487482
** > fossil bisect chart
488
-**
489483
** Show a log of "good", "bad", and "skip" versions. "bisect log"
490484
** shows the events in the order that they were tested.
491485
** "bisect chart" shows them in order of check-in.
492
-**
493486
** > fossil bisect next
494
-**
495487
** Update to the next version that is halfway between the working and
496488
** non-working versions.
497
-**
498489
** > fossil bisect options ?NAME? ?VALUE?
499
-**
500490
** List all bisect options, or the value of a single option, or set the
501491
** value of a bisect option.
502
-**
503492
** > fossil bisect reset
504
-**
505493
** Reinitialize a bisect session. This cancels prior bisect history
506494
** and allows a bisect session to start over from the beginning.
507
-**
508495
** > fossil bisect run [OPTIONS] COMMAND
509
-**
510496
** Invoke COMMAND repeatedly to run the bisect. The exit code for
511497
** COMMAND should be 0 for "good", 125 for "skip", and any other value
512
-** for "bad". Options:
498
+** for "bad".
513499
**
500
+** Options:
514501
** -i|--interactive Prompt the user for the good/bad/skip decision
515502
** after each step, rather than using the exit
516503
** code from COMMAND
517
-**
518504
** > fossil bisect skip ?VERSION?
519
-**
520505
** Cause VERSION (or the current checkout if VERSION is omitted) to
521506
** be ignored for the purpose of the current bisect. This might
522507
** be done, for example, because VERSION does not compile correctly
523508
** or is otherwise unsuitable to participate in this bisect.
524
-**
525509
** > fossil bisect vlist|ls|status ?-a|--all?
526
-**
527510
** List the versions in between the inner-most "bad" and "good".
528
-**
529511
** > fossil bisect ui
530
-**
531512
** Like "fossil ui" except start on a timeline that shows only the
532513
** check-ins that are part of the current bisect.
533
-**
534514
** > fossil bisect undo
535
-**
536515
** Undo the most recent "good", "bad", or "skip" command.
537516
*/
538517
void bisect_cmd(void){
539518
int n;
540519
const char *zCmd;
541520
--- src/bisect.c
+++ src/bisect.c
@@ -470,71 +470,50 @@
470 **
471 ** Usage: %fossil bisect SUBCOMMAND ...
472 **
473 ** Run various subcommands useful for searching back through the change
474 ** history for a particular checkin that causes or fixes a problem.
475 **
476 ** > fossil bisect bad ?VERSION?
477 **
478 ** Identify version VERSION as non-working. If VERSION is omitted,
479 ** the current checkout is marked as non-working.
480 **
481 ** > fossil bisect good ?VERSION?
482 **
483 ** Identify version VERSION as working. If VERSION is omitted,
484 ** the current checkout is marked as working.
485 **
486 ** > fossil bisect log
487 ** > fossil bisect chart
488 **
489 ** Show a log of "good", "bad", and "skip" versions. "bisect log"
490 ** shows the events in the order that they were tested.
491 ** "bisect chart" shows them in order of check-in.
492 **
493 ** > fossil bisect next
494 **
495 ** Update to the next version that is halfway between the working and
496 ** non-working versions.
497 **
498 ** > fossil bisect options ?NAME? ?VALUE?
499 **
500 ** List all bisect options, or the value of a single option, or set the
501 ** value of a bisect option.
502 **
503 ** > fossil bisect reset
504 **
505 ** Reinitialize a bisect session. This cancels prior bisect history
506 ** and allows a bisect session to start over from the beginning.
507 **
508 ** > fossil bisect run [OPTIONS] COMMAND
509 **
510 ** Invoke COMMAND repeatedly to run the bisect. The exit code for
511 ** COMMAND should be 0 for "good", 125 for "skip", and any other value
512 ** for "bad". Options:
513 **
 
514 ** -i|--interactive Prompt the user for the good/bad/skip decision
515 ** after each step, rather than using the exit
516 ** code from COMMAND
517 **
518 ** > fossil bisect skip ?VERSION?
519 **
520 ** Cause VERSION (or the current checkout if VERSION is omitted) to
521 ** be ignored for the purpose of the current bisect. This might
522 ** be done, for example, because VERSION does not compile correctly
523 ** or is otherwise unsuitable to participate in this bisect.
524 **
525 ** > fossil bisect vlist|ls|status ?-a|--all?
526 **
527 ** List the versions in between the inner-most "bad" and "good".
528 **
529 ** > fossil bisect ui
530 **
531 ** Like "fossil ui" except start on a timeline that shows only the
532 ** check-ins that are part of the current bisect.
533 **
534 ** > fossil bisect undo
535 **
536 ** Undo the most recent "good", "bad", or "skip" command.
537 */
538 void bisect_cmd(void){
539 int n;
540 const char *zCmd;
541
--- src/bisect.c
+++ src/bisect.c
@@ -470,71 +470,50 @@
470 **
471 ** Usage: %fossil bisect SUBCOMMAND ...
472 **
473 ** Run various subcommands useful for searching back through the change
474 ** history for a particular checkin that causes or fixes a problem.
 
475 ** > fossil bisect bad ?VERSION?
 
476 ** Identify version VERSION as non-working. If VERSION is omitted,
477 ** the current checkout is marked as non-working.
 
478 ** > fossil bisect good ?VERSION?
 
479 ** Identify version VERSION as working. If VERSION is omitted,
480 ** the current checkout is marked as working.
 
481 ** > fossil bisect log
482 ** > fossil bisect chart
 
483 ** Show a log of "good", "bad", and "skip" versions. "bisect log"
484 ** shows the events in the order that they were tested.
485 ** "bisect chart" shows them in order of check-in.
 
486 ** > fossil bisect next
 
487 ** Update to the next version that is halfway between the working and
488 ** non-working versions.
 
489 ** > fossil bisect options ?NAME? ?VALUE?
 
490 ** List all bisect options, or the value of a single option, or set the
491 ** value of a bisect option.
 
492 ** > fossil bisect reset
 
493 ** Reinitialize a bisect session. This cancels prior bisect history
494 ** and allows a bisect session to start over from the beginning.
 
495 ** > fossil bisect run [OPTIONS] COMMAND
 
496 ** Invoke COMMAND repeatedly to run the bisect. The exit code for
497 ** COMMAND should be 0 for "good", 125 for "skip", and any other value
498 ** for "bad".
499 **
500 ** Options:
501 ** -i|--interactive Prompt the user for the good/bad/skip decision
502 ** after each step, rather than using the exit
503 ** code from COMMAND
 
504 ** > fossil bisect skip ?VERSION?
 
505 ** Cause VERSION (or the current checkout if VERSION is omitted) to
506 ** be ignored for the purpose of the current bisect. This might
507 ** be done, for example, because VERSION does not compile correctly
508 ** or is otherwise unsuitable to participate in this bisect.
 
509 ** > fossil bisect vlist|ls|status ?-a|--all?
 
510 ** List the versions in between the inner-most "bad" and "good".
 
511 ** > fossil bisect ui
 
512 ** Like "fossil ui" except start on a timeline that shows only the
513 ** check-ins that are part of the current bisect.
 
514 ** > fossil bisect undo
 
515 ** Undo the most recent "good", "bad", or "skip" command.
516 */
517 void bisect_cmd(void){
518 int n;
519 const char *zCmd;
520
-4
--- src/blob.c
+++ src/blob.c
@@ -1635,22 +1635,18 @@
16351635
** result. Append each argument to "fossil test-echo" and run that
16361636
** using fossil_system() to verify that it really does get escaped
16371637
** correctly.
16381638
**
16391639
** Other options:
1640
-**
16411640
** --filename-args BOOL Subsequent arguments are assumed to be
16421641
** filenames if BOOL is true, or not if BOOL
16431642
** is false. Defaults on.
1644
-**
16451643
** --hex HEX Skip the --hex flag and instead decode HEX
16461644
** into ascii. This provides a way to insert
16471645
** unusual characters as an argument for testing.
1648
-**
16491646
** --compare HEX ASCII Verify that argument ASCII is identical to
16501647
** to decoded HEX.
1651
-**
16521648
** --fuzz N Run N fuzz cases. Each cases is a call
16531649
** to "fossil test-escaped-arg --compare HEX ARG"
16541650
** where HEX and ARG are the same argument.
16551651
** The argument is chosen at random.
16561652
*/
16571653
--- src/blob.c
+++ src/blob.c
@@ -1635,22 +1635,18 @@
1635 ** result. Append each argument to "fossil test-echo" and run that
1636 ** using fossil_system() to verify that it really does get escaped
1637 ** correctly.
1638 **
1639 ** Other options:
1640 **
1641 ** --filename-args BOOL Subsequent arguments are assumed to be
1642 ** filenames if BOOL is true, or not if BOOL
1643 ** is false. Defaults on.
1644 **
1645 ** --hex HEX Skip the --hex flag and instead decode HEX
1646 ** into ascii. This provides a way to insert
1647 ** unusual characters as an argument for testing.
1648 **
1649 ** --compare HEX ASCII Verify that argument ASCII is identical to
1650 ** to decoded HEX.
1651 **
1652 ** --fuzz N Run N fuzz cases. Each cases is a call
1653 ** to "fossil test-escaped-arg --compare HEX ARG"
1654 ** where HEX and ARG are the same argument.
1655 ** The argument is chosen at random.
1656 */
1657
--- src/blob.c
+++ src/blob.c
@@ -1635,22 +1635,18 @@
1635 ** result. Append each argument to "fossil test-echo" and run that
1636 ** using fossil_system() to verify that it really does get escaped
1637 ** correctly.
1638 **
1639 ** Other options:
 
1640 ** --filename-args BOOL Subsequent arguments are assumed to be
1641 ** filenames if BOOL is true, or not if BOOL
1642 ** is false. Defaults on.
 
1643 ** --hex HEX Skip the --hex flag and instead decode HEX
1644 ** into ascii. This provides a way to insert
1645 ** unusual characters as an argument for testing.
 
1646 ** --compare HEX ASCII Verify that argument ASCII is identical to
1647 ** to decoded HEX.
 
1648 ** --fuzz N Run N fuzz cases. Each cases is a call
1649 ** to "fossil test-escaped-arg --compare HEX ARG"
1650 ** where HEX and ARG are the same argument.
1651 ** The argument is chosen at random.
1652 */
1653
+7 -18
--- src/branch.c
+++ src/branch.c
@@ -584,41 +584,35 @@
584584
**
585585
** Usage: %fossil branch SUBCOMMAND ... ?OPTIONS?
586586
**
587587
** Run various subcommands to manage branches of the open repository or
588588
** of the repository identified by the -R or --repository option.
589
-**
590589
** > fossil branch close|reopen ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
591
-**
592590
** Adds or cancels the "closed" tag to one or more branches.
593591
** It accepts arbitrary unambiguous symbolic names but
594592
** will only resolve checkin names and skips any which resolve
595
-** to non-leaf checkins. Options:
593
+** to non-leaf checkins.
594
+**
595
+** Options:
596596
** -n|--dry-run do not commit changes and dump artifact
597597
** to stdout
598598
** -v|--verbose output more information
599599
** --date-override DATE DATE to use instead of 'now'
600600
** --user-override USER USER to use instead of the current default
601
-**
602601
** > fossil branch current
603
-**
604602
** Print the name of the branch for the current check-out
605
-**
606603
** > fossil branch hide|unhide ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
607
-**
608604
** Adds or cancels the "hidden" tag for the specified branches or
609605
** or checkin IDs. Accepts the same options as the close
610606
** subcommand.
611
-**
612607
** > fossil branch info BRANCH-NAME
613
-**
614608
** Print information about a branch
615
-**
616609
** > fossil branch list|ls ?OPTIONS? ?GLOB?
617610
** > fossil branch lsh ?OPTIONS? ?LIMIT?
611
+** List all branches.
618612
**
619
-** List all branches. Options:
613
+** Options:
620614
** -a|--all List all branches. Default show only open branches
621615
** -c|--closed List closed branches.
622616
** -p List only private branches.
623617
** -r Reverse the sort order
624618
** -t Show recently changed branches first
@@ -630,13 +624,11 @@
630624
**
631625
** The "lsh" variant of this subcommand shows recently changed branches,
632626
** and accepts an optional LIMIT argument (defaults to 5) to cap output,
633627
** but no GLOB argument. All other options are supported, with -t being
634628
** an implied no-op.
635
-**
636629
** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
637
-**
638630
** Create a new branch BRANCH-NAME off of check-in BASIS.
639631
** Supported options for this subcommand include:
640632
** --private branch is private (i.e., remains local)
641633
** --bgcolor COLOR use COLOR instead of automatic background
642634
** ("auto" lets Fossil choose it automatically,
@@ -650,11 +642,10 @@
650642
** replaced by a space, and it may also name a timezone offset
651643
** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward).
652644
** Either no timezone suffix or "Z" means UTC.
653645
**
654646
** Options valid for all subcommands:
655
-**
656647
** -R|--repository REPO Run commands on repository REPO
657648
*/
658649
void branch_cmd(void){
659650
int n;
660651
const char *zCmd = "list";
@@ -809,12 +800,12 @@
809800
if( zBgClr && zBgClr[0] && show_colors ){
810801
@ <tr style="background-color:%s(zBgClr)">
811802
}else{
812803
@ <tr>
813804
}
814
- @ <td>%z(href("%R/timeline?r=%T",zBranch))%h(zBranch)</a><input
815
- @ type="checkbox" disabled="disabled"/></td>
805
+ @ <td>%z(href("%R/timeline?r=%T",zBranch))%h(zBranch)</a><input type="checkbox"
806
+ @ title="%h(zBranch)" aria-label="%h(zBranch)" disabled="disabled"/></td>
816807
@ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td>
817808
@ <td>%d(nCkin)</td>
818809
fossil_free(zAge);
819810
@ <td>%s(isClosed?"closed":"")</td>
820811
if( zMergeTo ){
@@ -837,11 +828,10 @@
837828
** Show a list of branches. With no query parameters, a sortable table
838829
** is used to show all branches. If query parameters are present a
839830
** fixed bullet list is shown.
840831
**
841832
** Query parameters:
842
-**
843833
** all Show all branches
844834
** closed Show only closed branches
845835
** open Show only open branches
846836
** colortest Show all branches with automatic color
847837
**
@@ -968,11 +958,10 @@
968958
** WEBPAGE: brtimeline
969959
**
970960
** Show a timeline of all branches
971961
**
972962
** Query parameters:
973
-**
974963
** ng No graph
975964
** nohidden Hide check-ins with "hidden" tag
976965
** onlyhidden Show only check-ins with "hidden" tag
977966
** brbg Background color by branch name
978967
** ubg Background color by user name
979968
--- src/branch.c
+++ src/branch.c
@@ -584,41 +584,35 @@
584 **
585 ** Usage: %fossil branch SUBCOMMAND ... ?OPTIONS?
586 **
587 ** Run various subcommands to manage branches of the open repository or
588 ** of the repository identified by the -R or --repository option.
589 **
590 ** > fossil branch close|reopen ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
591 **
592 ** Adds or cancels the "closed" tag to one or more branches.
593 ** It accepts arbitrary unambiguous symbolic names but
594 ** will only resolve checkin names and skips any which resolve
595 ** to non-leaf checkins. Options:
 
 
596 ** -n|--dry-run do not commit changes and dump artifact
597 ** to stdout
598 ** -v|--verbose output more information
599 ** --date-override DATE DATE to use instead of 'now'
600 ** --user-override USER USER to use instead of the current default
601 **
602 ** > fossil branch current
603 **
604 ** Print the name of the branch for the current check-out
605 **
606 ** > fossil branch hide|unhide ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
607 **
608 ** Adds or cancels the "hidden" tag for the specified branches or
609 ** or checkin IDs. Accepts the same options as the close
610 ** subcommand.
611 **
612 ** > fossil branch info BRANCH-NAME
613 **
614 ** Print information about a branch
615 **
616 ** > fossil branch list|ls ?OPTIONS? ?GLOB?
617 ** > fossil branch lsh ?OPTIONS? ?LIMIT?
 
618 **
619 ** List all branches. Options:
620 ** -a|--all List all branches. Default show only open branches
621 ** -c|--closed List closed branches.
622 ** -p List only private branches.
623 ** -r Reverse the sort order
624 ** -t Show recently changed branches first
@@ -630,13 +624,11 @@
630 **
631 ** The "lsh" variant of this subcommand shows recently changed branches,
632 ** and accepts an optional LIMIT argument (defaults to 5) to cap output,
633 ** but no GLOB argument. All other options are supported, with -t being
634 ** an implied no-op.
635 **
636 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
637 **
638 ** Create a new branch BRANCH-NAME off of check-in BASIS.
639 ** Supported options for this subcommand include:
640 ** --private branch is private (i.e., remains local)
641 ** --bgcolor COLOR use COLOR instead of automatic background
642 ** ("auto" lets Fossil choose it automatically,
@@ -650,11 +642,10 @@
650 ** replaced by a space, and it may also name a timezone offset
651 ** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward).
652 ** Either no timezone suffix or "Z" means UTC.
653 **
654 ** Options valid for all subcommands:
655 **
656 ** -R|--repository REPO Run commands on repository REPO
657 */
658 void branch_cmd(void){
659 int n;
660 const char *zCmd = "list";
@@ -809,12 +800,12 @@
809 if( zBgClr && zBgClr[0] && show_colors ){
810 @ <tr style="background-color:%s(zBgClr)">
811 }else{
812 @ <tr>
813 }
814 @ <td>%z(href("%R/timeline?r=%T",zBranch))%h(zBranch)</a><input
815 @ type="checkbox" disabled="disabled"/></td>
816 @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td>
817 @ <td>%d(nCkin)</td>
818 fossil_free(zAge);
819 @ <td>%s(isClosed?"closed":"")</td>
820 if( zMergeTo ){
@@ -837,11 +828,10 @@
837 ** Show a list of branches. With no query parameters, a sortable table
838 ** is used to show all branches. If query parameters are present a
839 ** fixed bullet list is shown.
840 **
841 ** Query parameters:
842 **
843 ** all Show all branches
844 ** closed Show only closed branches
845 ** open Show only open branches
846 ** colortest Show all branches with automatic color
847 **
@@ -968,11 +958,10 @@
968 ** WEBPAGE: brtimeline
969 **
970 ** Show a timeline of all branches
971 **
972 ** Query parameters:
973 **
974 ** ng No graph
975 ** nohidden Hide check-ins with "hidden" tag
976 ** onlyhidden Show only check-ins with "hidden" tag
977 ** brbg Background color by branch name
978 ** ubg Background color by user name
979
--- src/branch.c
+++ src/branch.c
@@ -584,41 +584,35 @@
584 **
585 ** Usage: %fossil branch SUBCOMMAND ... ?OPTIONS?
586 **
587 ** Run various subcommands to manage branches of the open repository or
588 ** of the repository identified by the -R or --repository option.
 
589 ** > fossil branch close|reopen ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
 
590 ** Adds or cancels the "closed" tag to one or more branches.
591 ** It accepts arbitrary unambiguous symbolic names but
592 ** will only resolve checkin names and skips any which resolve
593 ** to non-leaf checkins.
594 **
595 ** Options:
596 ** -n|--dry-run do not commit changes and dump artifact
597 ** to stdout
598 ** -v|--verbose output more information
599 ** --date-override DATE DATE to use instead of 'now'
600 ** --user-override USER USER to use instead of the current default
 
601 ** > fossil branch current
 
602 ** Print the name of the branch for the current check-out
 
603 ** > fossil branch hide|unhide ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES?
 
604 ** Adds or cancels the "hidden" tag for the specified branches or
605 ** or checkin IDs. Accepts the same options as the close
606 ** subcommand.
 
607 ** > fossil branch info BRANCH-NAME
 
608 ** Print information about a branch
 
609 ** > fossil branch list|ls ?OPTIONS? ?GLOB?
610 ** > fossil branch lsh ?OPTIONS? ?LIMIT?
611 ** List all branches.
612 **
613 ** Options:
614 ** -a|--all List all branches. Default show only open branches
615 ** -c|--closed List closed branches.
616 ** -p List only private branches.
617 ** -r Reverse the sort order
618 ** -t Show recently changed branches first
@@ -630,13 +624,11 @@
624 **
625 ** The "lsh" variant of this subcommand shows recently changed branches,
626 ** and accepts an optional LIMIT argument (defaults to 5) to cap output,
627 ** but no GLOB argument. All other options are supported, with -t being
628 ** an implied no-op.
 
629 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
 
630 ** Create a new branch BRANCH-NAME off of check-in BASIS.
631 ** Supported options for this subcommand include:
632 ** --private branch is private (i.e., remains local)
633 ** --bgcolor COLOR use COLOR instead of automatic background
634 ** ("auto" lets Fossil choose it automatically,
@@ -650,11 +642,10 @@
642 ** replaced by a space, and it may also name a timezone offset
643 ** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward).
644 ** Either no timezone suffix or "Z" means UTC.
645 **
646 ** Options valid for all subcommands:
 
647 ** -R|--repository REPO Run commands on repository REPO
648 */
649 void branch_cmd(void){
650 int n;
651 const char *zCmd = "list";
@@ -809,12 +800,12 @@
800 if( zBgClr && zBgClr[0] && show_colors ){
801 @ <tr style="background-color:%s(zBgClr)">
802 }else{
803 @ <tr>
804 }
805 @ <td>%z(href("%R/timeline?r=%T",zBranch))%h(zBranch)</a><input type="checkbox"
806 @ title="%h(zBranch)" aria-label="%h(zBranch)" disabled="disabled"/></td>
807 @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td>
808 @ <td>%d(nCkin)</td>
809 fossil_free(zAge);
810 @ <td>%s(isClosed?"closed":"")</td>
811 if( zMergeTo ){
@@ -837,11 +828,10 @@
828 ** Show a list of branches. With no query parameters, a sortable table
829 ** is used to show all branches. If query parameters are present a
830 ** fixed bullet list is shown.
831 **
832 ** Query parameters:
 
833 ** all Show all branches
834 ** closed Show only closed branches
835 ** open Show only open branches
836 ** colortest Show all branches with automatic color
837 **
@@ -968,11 +958,10 @@
958 ** WEBPAGE: brtimeline
959 **
960 ** Show a timeline of all branches
961 **
962 ** Query parameters:
 
963 ** ng No graph
964 ** nohidden Hide check-ins with "hidden" tag
965 ** onlyhidden Show only check-ins with "hidden" tag
966 ** brbg Background color by branch name
967 ** ubg Background color by user name
968
+1 -3
--- src/browse.c
+++ src/browse.c
@@ -126,11 +126,10 @@
126126
** source tree. Only files for a single check-in are shown if the ci=
127127
** query parameter is present. If ci= is missing, the union of files
128128
** across all check-ins is shown.
129129
**
130130
** Query parameters:
131
-**
132131
** ci=LABEL Show only files in this check-in. Optional.
133132
** name=PATH Directory to display. Optional. Top-level if missing
134133
** re=REGEXP Show only files matching REGEXP
135134
** type=TYPE TYPE=flat: use this display
136135
** TYPE=tree: use the /tree display instead
@@ -640,11 +639,10 @@
640639
**
641640
** The type=tree query parameter is required or else the /dir format is
642641
** used.
643642
**
644643
** Query parameters:
645
-**
646644
** type=tree Required to prevent use of /dir format
647645
** name=PATH Directory to display. Optional
648646
** ci=LABEL Show only files in this check-in. Optional.
649647
** re=REGEXP Show only files matching REGEXP. Optional.
650648
** expand Begin with the tree fully expanded.
@@ -764,11 +762,11 @@
764762
style_submenu_element("Top-Level", "%s",
765763
url_render(&sURI, "name", 0, 0, 0));
766764
}else if( zRE ){
767765
blob_appendf(&dirname, "matching \"%s\"", zRE);
768766
}
769
- style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0);
767
+ style_submenu_binary("mtime","Sort By","Time","Filename", 0);
770768
if( zCI ){
771769
style_submenu_element("All", "%s", url_render(&sURI, "ci", 0, 0, 0));
772770
if( nD==0 && !showDirOnly ){
773771
style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
774772
}
775773
--- src/browse.c
+++ src/browse.c
@@ -126,11 +126,10 @@
126 ** source tree. Only files for a single check-in are shown if the ci=
127 ** query parameter is present. If ci= is missing, the union of files
128 ** across all check-ins is shown.
129 **
130 ** Query parameters:
131 **
132 ** ci=LABEL Show only files in this check-in. Optional.
133 ** name=PATH Directory to display. Optional. Top-level if missing
134 ** re=REGEXP Show only files matching REGEXP
135 ** type=TYPE TYPE=flat: use this display
136 ** TYPE=tree: use the /tree display instead
@@ -640,11 +639,10 @@
640 **
641 ** The type=tree query parameter is required or else the /dir format is
642 ** used.
643 **
644 ** Query parameters:
645 **
646 ** type=tree Required to prevent use of /dir format
647 ** name=PATH Directory to display. Optional
648 ** ci=LABEL Show only files in this check-in. Optional.
649 ** re=REGEXP Show only files matching REGEXP. Optional.
650 ** expand Begin with the tree fully expanded.
@@ -764,11 +762,11 @@
764 style_submenu_element("Top-Level", "%s",
765 url_render(&sURI, "name", 0, 0, 0));
766 }else if( zRE ){
767 blob_appendf(&dirname, "matching \"%s\"", zRE);
768 }
769 style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0);
770 if( zCI ){
771 style_submenu_element("All", "%s", url_render(&sURI, "ci", 0, 0, 0));
772 if( nD==0 && !showDirOnly ){
773 style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
774 }
775
--- src/browse.c
+++ src/browse.c
@@ -126,11 +126,10 @@
126 ** source tree. Only files for a single check-in are shown if the ci=
127 ** query parameter is present. If ci= is missing, the union of files
128 ** across all check-ins is shown.
129 **
130 ** Query parameters:
 
131 ** ci=LABEL Show only files in this check-in. Optional.
132 ** name=PATH Directory to display. Optional. Top-level if missing
133 ** re=REGEXP Show only files matching REGEXP
134 ** type=TYPE TYPE=flat: use this display
135 ** TYPE=tree: use the /tree display instead
@@ -640,11 +639,10 @@
639 **
640 ** The type=tree query parameter is required or else the /dir format is
641 ** used.
642 **
643 ** Query parameters:
 
644 ** type=tree Required to prevent use of /dir format
645 ** name=PATH Directory to display. Optional
646 ** ci=LABEL Show only files in this check-in. Optional.
647 ** re=REGEXP Show only files matching REGEXP. Optional.
648 ** expand Begin with the tree fully expanded.
@@ -764,11 +762,11 @@
762 style_submenu_element("Top-Level", "%s",
763 url_render(&sURI, "name", 0, 0, 0));
764 }else if( zRE ){
765 blob_appendf(&dirname, "matching \"%s\"", zRE);
766 }
767 style_submenu_binary("mtime","Sort By","Time","Filename", 0);
768 if( zCI ){
769 style_submenu_element("All", "%s", url_render(&sURI, "ci", 0, 0, 0));
770 if( nD==0 && !showDirOnly ){
771 style_submenu_element("File Ages", "%R/fileage?name=%T", zCI);
772 }
773
+2 -1
--- src/builtin.c
+++ src/builtin.c
@@ -157,12 +157,13 @@
157157
}
158158
159159
/*
160160
** WEBPAGE: builtin loadavg-exempt
161161
**
162
-** Return one of many built-in content files. Query parameters:
162
+** Return one of many built-in content files.
163163
**
164
+** Query parameters:
164165
** name=FILENAME Return the single file whose name is FILENAME.
165166
** mimetype=TYPE Override the mimetype in the returned file to
166167
** be TYPE. If this query parameter is omitted
167168
** (the usual case) then the mimetype is inferred
168169
** from the suffix on FILENAME
169170
--- src/builtin.c
+++ src/builtin.c
@@ -157,12 +157,13 @@
157 }
158
159 /*
160 ** WEBPAGE: builtin loadavg-exempt
161 **
162 ** Return one of many built-in content files. Query parameters:
163 **
 
164 ** name=FILENAME Return the single file whose name is FILENAME.
165 ** mimetype=TYPE Override the mimetype in the returned file to
166 ** be TYPE. If this query parameter is omitted
167 ** (the usual case) then the mimetype is inferred
168 ** from the suffix on FILENAME
169
--- src/builtin.c
+++ src/builtin.c
@@ -157,12 +157,13 @@
157 }
158
159 /*
160 ** WEBPAGE: builtin loadavg-exempt
161 **
162 ** Return one of many built-in content files.
163 **
164 ** Query parameters:
165 ** name=FILENAME Return the single file whose name is FILENAME.
166 ** mimetype=TYPE Override the mimetype in the returned file to
167 ** be TYPE. If this query parameter is omitted
168 ** (the usual case) then the mimetype is inferred
169 ** from the suffix on FILENAME
170
-15
--- src/bundle.c
+++ src/bundle.c
@@ -719,55 +719,40 @@
719719
720720
/*
721721
** COMMAND: bundle*
722722
**
723723
** Usage: %fossil bundle SUBCOMMAND ARGS...
724
-**
725724
** > fossil bundle append BUNDLE FILE...
726
-**
727725
** Add files named on the command line to BUNDLE. This subcommand has
728726
** little practical use and is mostly intended for testing.
729
-**
730727
** > fossil bundle cat BUNDLE HASH...
731
-**
732728
** Extract one or more artifacts from the bundle and write them
733729
** consecutively on standard output. This subcommand was designed
734730
** for testing and introspection of bundles and is not something
735731
** commonly used.
736
-**
737732
** > fossil bundle export BUNDLE ?OPTIONS?
738
-**
739733
** Generate a new bundle, in the file named BUNDLE, that contains a
740734
** subset of the check-ins in the repository (usually a single branch)
741735
** described by the --branch, --from, --to, and/or --checkin options,
742736
** at least one of which is required. If BUNDLE already exists, the
743737
** specified content is added to the bundle.
744
-**
745738
** --branch BRANCH Package all check-ins on BRANCH
746739
** --from TAG1 --to TAG2 Package check-ins between TAG1 and TAG2
747740
** --checkin TAG Package the single check-in TAG
748741
** --standalone Do no use delta-encoding against
749742
** artifacts not in the bundle
750
-**
751743
** > fossil bundle extend BUNDLE
752
-**
753744
** The BUNDLE must already exist. This subcommand adds to the bundle
754745
** any check-ins that are descendants of check-ins already in the bundle,
755746
** and any tags that apply to artifacts in the bundle.
756
-**
757747
** > fossil bundle import BUNDLE ?--publish?
758
-**
759748
** Import all content from BUNDLE into the repository. By default, the
760749
** imported files are private and will not sync. Use the --publish
761750
** option to make the import public.
762
-**
763751
** > fossil bundle ls BUNDLE
764
-**
765752
** List the contents of BUNDLE on standard output
766
-**
767753
** > fossil bundle purge BUNDLE
768
-**
769754
** Remove from the repository all files that are used exclusively
770755
** by check-ins in BUNDLE. This has the effect of undoing a
771756
** "fossil bundle import".
772757
**
773758
** See also: [[publish]]
774759
--- src/bundle.c
+++ src/bundle.c
@@ -719,55 +719,40 @@
719
720 /*
721 ** COMMAND: bundle*
722 **
723 ** Usage: %fossil bundle SUBCOMMAND ARGS...
724 **
725 ** > fossil bundle append BUNDLE FILE...
726 **
727 ** Add files named on the command line to BUNDLE. This subcommand has
728 ** little practical use and is mostly intended for testing.
729 **
730 ** > fossil bundle cat BUNDLE HASH...
731 **
732 ** Extract one or more artifacts from the bundle and write them
733 ** consecutively on standard output. This subcommand was designed
734 ** for testing and introspection of bundles and is not something
735 ** commonly used.
736 **
737 ** > fossil bundle export BUNDLE ?OPTIONS?
738 **
739 ** Generate a new bundle, in the file named BUNDLE, that contains a
740 ** subset of the check-ins in the repository (usually a single branch)
741 ** described by the --branch, --from, --to, and/or --checkin options,
742 ** at least one of which is required. If BUNDLE already exists, the
743 ** specified content is added to the bundle.
744 **
745 ** --branch BRANCH Package all check-ins on BRANCH
746 ** --from TAG1 --to TAG2 Package check-ins between TAG1 and TAG2
747 ** --checkin TAG Package the single check-in TAG
748 ** --standalone Do no use delta-encoding against
749 ** artifacts not in the bundle
750 **
751 ** > fossil bundle extend BUNDLE
752 **
753 ** The BUNDLE must already exist. This subcommand adds to the bundle
754 ** any check-ins that are descendants of check-ins already in the bundle,
755 ** and any tags that apply to artifacts in the bundle.
756 **
757 ** > fossil bundle import BUNDLE ?--publish?
758 **
759 ** Import all content from BUNDLE into the repository. By default, the
760 ** imported files are private and will not sync. Use the --publish
761 ** option to make the import public.
762 **
763 ** > fossil bundle ls BUNDLE
764 **
765 ** List the contents of BUNDLE on standard output
766 **
767 ** > fossil bundle purge BUNDLE
768 **
769 ** Remove from the repository all files that are used exclusively
770 ** by check-ins in BUNDLE. This has the effect of undoing a
771 ** "fossil bundle import".
772 **
773 ** See also: [[publish]]
774
--- src/bundle.c
+++ src/bundle.c
@@ -719,55 +719,40 @@
719
720 /*
721 ** COMMAND: bundle*
722 **
723 ** Usage: %fossil bundle SUBCOMMAND ARGS...
 
724 ** > fossil bundle append BUNDLE FILE...
 
725 ** Add files named on the command line to BUNDLE. This subcommand has
726 ** little practical use and is mostly intended for testing.
 
727 ** > fossil bundle cat BUNDLE HASH...
 
728 ** Extract one or more artifacts from the bundle and write them
729 ** consecutively on standard output. This subcommand was designed
730 ** for testing and introspection of bundles and is not something
731 ** commonly used.
 
732 ** > fossil bundle export BUNDLE ?OPTIONS?
 
733 ** Generate a new bundle, in the file named BUNDLE, that contains a
734 ** subset of the check-ins in the repository (usually a single branch)
735 ** described by the --branch, --from, --to, and/or --checkin options,
736 ** at least one of which is required. If BUNDLE already exists, the
737 ** specified content is added to the bundle.
 
738 ** --branch BRANCH Package all check-ins on BRANCH
739 ** --from TAG1 --to TAG2 Package check-ins between TAG1 and TAG2
740 ** --checkin TAG Package the single check-in TAG
741 ** --standalone Do no use delta-encoding against
742 ** artifacts not in the bundle
 
743 ** > fossil bundle extend BUNDLE
 
744 ** The BUNDLE must already exist. This subcommand adds to the bundle
745 ** any check-ins that are descendants of check-ins already in the bundle,
746 ** and any tags that apply to artifacts in the bundle.
 
747 ** > fossil bundle import BUNDLE ?--publish?
 
748 ** Import all content from BUNDLE into the repository. By default, the
749 ** imported files are private and will not sync. Use the --publish
750 ** option to make the import public.
 
751 ** > fossil bundle ls BUNDLE
 
752 ** List the contents of BUNDLE on standard output
 
753 ** > fossil bundle purge BUNDLE
 
754 ** Remove from the repository all files that are used exclusively
755 ** by check-ins in BUNDLE. This has the effect of undoing a
756 ** "fossil bundle import".
757 **
758 ** See also: [[publish]]
759
+2 -5
--- src/cache.c
+++ src/cache.c
@@ -260,21 +260,18 @@
260260
** COMMAND: cache*
261261
**
262262
** Usage: %fossil cache SUBCOMMAND
263263
**
264264
** Manage the cache used for potentially expensive web pages such as
265
-** /zip and /tarball. SUBCOMMAND can be:
265
+** /zip and /tarball.
266266
**
267
+** SUBCOMMAND can be:
267268
** clear Remove all entries from the cache.
268
-**
269269
** init Create the cache file if it does not already exist.
270
-**
271270
** list|ls List the keys and content sizes and other stats for
272271
** all entries currently in the cache.
273
-**
274272
** size ?N? Query or set the maximum number of entries in the cache.
275
-**
276273
** status Show a summary of the cache status.
277274
**
278275
** The cache is stored in a file that is distinct from the repository
279276
** but that is held in the same directory as the repository. The cache
280277
** file can be deleted in order to completely disable the cache.
281278
--- src/cache.c
+++ src/cache.c
@@ -260,21 +260,18 @@
260 ** COMMAND: cache*
261 **
262 ** Usage: %fossil cache SUBCOMMAND
263 **
264 ** Manage the cache used for potentially expensive web pages such as
265 ** /zip and /tarball. SUBCOMMAND can be:
266 **
 
267 ** clear Remove all entries from the cache.
268 **
269 ** init Create the cache file if it does not already exist.
270 **
271 ** list|ls List the keys and content sizes and other stats for
272 ** all entries currently in the cache.
273 **
274 ** size ?N? Query or set the maximum number of entries in the cache.
275 **
276 ** status Show a summary of the cache status.
277 **
278 ** The cache is stored in a file that is distinct from the repository
279 ** but that is held in the same directory as the repository. The cache
280 ** file can be deleted in order to completely disable the cache.
281
--- src/cache.c
+++ src/cache.c
@@ -260,21 +260,18 @@
260 ** COMMAND: cache*
261 **
262 ** Usage: %fossil cache SUBCOMMAND
263 **
264 ** Manage the cache used for potentially expensive web pages such as
265 ** /zip and /tarball.
266 **
267 ** SUBCOMMAND can be:
268 ** clear Remove all entries from the cache.
 
269 ** init Create the cache file if it does not already exist.
 
270 ** list|ls List the keys and content sizes and other stats for
271 ** all entries currently in the cache.
 
272 ** size ?N? Query or set the maximum number of entries in the cache.
 
273 ** status Show a summary of the cache status.
274 **
275 ** The cache is stored in a file that is distinct from the repository
276 ** but that is held in the same directory as the repository. The cache
277 ** file can be deleted in order to completely disable the cache.
278
--- src/capabilities.c
+++ src/capabilities.c
@@ -393,11 +393,11 @@
393393
" WHERE cap GLOB '*[as]*'"
394394
" ORDER BY 3 ASC",
395395
zSelfCap, hasPubPages, zSelfCap
396396
);
397397
@ <table id='capabilitySummary' cellpadding="0" cellspacing="0" border="1">
398
- @ <tr><th>&nbsp;<th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\
398
+ @ <tr><th>Role<th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\
399399
@ <th>Unversioned Content</th></tr>
400400
while( db_step(&q)==SQLITE_ROW ){
401401
const char *zId = db_column_text(&q, 0);
402402
const char *zCap = db_column_text(&q, 1);
403403
int n = db_column_int(&q, 3);
404404
--- src/capabilities.c
+++ src/capabilities.c
@@ -393,11 +393,11 @@
393 " WHERE cap GLOB '*[as]*'"
394 " ORDER BY 3 ASC",
395 zSelfCap, hasPubPages, zSelfCap
396 );
397 @ <table id='capabilitySummary' cellpadding="0" cellspacing="0" border="1">
398 @ <tr><th>&nbsp;<th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\
399 @ <th>Unversioned Content</th></tr>
400 while( db_step(&q)==SQLITE_ROW ){
401 const char *zId = db_column_text(&q, 0);
402 const char *zCap = db_column_text(&q, 1);
403 int n = db_column_int(&q, 3);
404
--- src/capabilities.c
+++ src/capabilities.c
@@ -393,11 +393,11 @@
393 " WHERE cap GLOB '*[as]*'"
394 " ORDER BY 3 ASC",
395 zSelfCap, hasPubPages, zSelfCap
396 );
397 @ <table id='capabilitySummary' cellpadding="0" cellspacing="0" border="1">
398 @ <tr><th>Role<th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\
399 @ <th>Unversioned Content</th></tr>
400 while( db_step(&q)==SQLITE_ROW ){
401 const char *zId = db_column_text(&q, 0);
402 const char *zCap = db_column_text(&q, 1);
403 int n = db_column_int(&q, 3);
404
+4 -3
--- src/captcha.c
+++ src/captcha.c
@@ -543,13 +543,13 @@
543543
zDecoded = captcha_decode(uSeed);
544544
zCaptcha = captcha_render(zDecoded);
545545
@ <div class="captcha"><table class="captcha"><tr><td><pre class="captcha">
546546
@ %h(zCaptcha)
547547
@ </pre>
548
- @ Enter security code shown above:
548
+ @ <label for="captcha">Enter security code shown above:</label>
549549
@ <input type="hidden" name="captchaseed" value="%u(uSeed)" />
550
- @ <input type="text" name="captcha" size=8 />
550
+ @ <input type="text" id="captcha" name="captcha" size=8 />
551551
if( showButton ){
552552
@ <input type="submit" value="Submit">
553553
}
554554
@ <br/>\
555555
captcha_speakit_button(uSeed, 0);
@@ -559,11 +559,11 @@
559559
/*
560560
** Add a "Speak the captcha" button.
561561
*/
562562
void captcha_speakit_button(unsigned int uSeed, const char *zMsg){
563563
if( zMsg==0 ) zMsg = "Speak the text";
564
- @ <input aria-label="%h(zMsg)" type="button" value="%h(zMsg)" \
564
+ @ <input aria-label="%h(zMsg)" title="%h(zMsg)" type="button" value="%h(zMsg)" \
565565
@ id="speakthetext">
566566
@ <script nonce="%h(style_nonce())">/* captcha_speakit_button() */
567567
@ document.getElementById("speakthetext").onclick = function(){
568568
@ var audio = window.fossilAudioCaptcha \
569569
@ || new Audio("%R/captcha-audio/%u(uSeed)");
@@ -574,10 +574,11 @@
574574
@ </script>
575575
}
576576
577577
/*
578578
** WEBPAGE: test-captcha
579
+**
579580
** Test the captcha-generator by rendering the value of the name= query
580581
** parameter using ascii-art. If name= is omitted, show a random 16-digit
581582
** hexadecimal number.
582583
*/
583584
void captcha_test(void){
584585
--- src/captcha.c
+++ src/captcha.c
@@ -543,13 +543,13 @@
543 zDecoded = captcha_decode(uSeed);
544 zCaptcha = captcha_render(zDecoded);
545 @ <div class="captcha"><table class="captcha"><tr><td><pre class="captcha">
546 @ %h(zCaptcha)
547 @ </pre>
548 @ Enter security code shown above:
549 @ <input type="hidden" name="captchaseed" value="%u(uSeed)" />
550 @ <input type="text" name="captcha" size=8 />
551 if( showButton ){
552 @ <input type="submit" value="Submit">
553 }
554 @ <br/>\
555 captcha_speakit_button(uSeed, 0);
@@ -559,11 +559,11 @@
559 /*
560 ** Add a "Speak the captcha" button.
561 */
562 void captcha_speakit_button(unsigned int uSeed, const char *zMsg){
563 if( zMsg==0 ) zMsg = "Speak the text";
564 @ <input aria-label="%h(zMsg)" type="button" value="%h(zMsg)" \
565 @ id="speakthetext">
566 @ <script nonce="%h(style_nonce())">/* captcha_speakit_button() */
567 @ document.getElementById("speakthetext").onclick = function(){
568 @ var audio = window.fossilAudioCaptcha \
569 @ || new Audio("%R/captcha-audio/%u(uSeed)");
@@ -574,10 +574,11 @@
574 @ </script>
575 }
576
577 /*
578 ** WEBPAGE: test-captcha
 
579 ** Test the captcha-generator by rendering the value of the name= query
580 ** parameter using ascii-art. If name= is omitted, show a random 16-digit
581 ** hexadecimal number.
582 */
583 void captcha_test(void){
584
--- src/captcha.c
+++ src/captcha.c
@@ -543,13 +543,13 @@
543 zDecoded = captcha_decode(uSeed);
544 zCaptcha = captcha_render(zDecoded);
545 @ <div class="captcha"><table class="captcha"><tr><td><pre class="captcha">
546 @ %h(zCaptcha)
547 @ </pre>
548 @ <label for="captcha">Enter security code shown above:</label>
549 @ <input type="hidden" name="captchaseed" value="%u(uSeed)" />
550 @ <input type="text" id="captcha" name="captcha" size=8 />
551 if( showButton ){
552 @ <input type="submit" value="Submit">
553 }
554 @ <br/>\
555 captcha_speakit_button(uSeed, 0);
@@ -559,11 +559,11 @@
559 /*
560 ** Add a "Speak the captcha" button.
561 */
562 void captcha_speakit_button(unsigned int uSeed, const char *zMsg){
563 if( zMsg==0 ) zMsg = "Speak the text";
564 @ <input aria-label="%h(zMsg)" title="%h(zMsg)" type="button" value="%h(zMsg)" \
565 @ id="speakthetext">
566 @ <script nonce="%h(style_nonce())">/* captcha_speakit_button() */
567 @ document.getElementById("speakthetext").onclick = function(){
568 @ var audio = window.fossilAudioCaptcha \
569 @ || new Audio("%R/captcha-audio/%u(uSeed)");
@@ -574,10 +574,11 @@
574 @ </script>
575 }
576
577 /*
578 ** WEBPAGE: test-captcha
579 **
580 ** Test the captcha-generator by rendering the value of the name= query
581 ** parameter using ascii-art. If name= is omitted, show a random 16-digit
582 ** hexadecimal number.
583 */
584 void captcha_test(void){
585
-11
--- src/chat.c
+++ src/chat.c
@@ -701,11 +701,10 @@
701701
** /chat-fetch-one/N
702702
**
703703
** Fetches a single message with the given ID, if available.
704704
**
705705
** Options:
706
-**
707706
** raw = the xmsg field will be returned unparsed.
708707
**
709708
** Response is either a single object in the format returned by
710709
** /chat-poll (without the wrapper array) or a JSON-format error
711710
** response, as documented for ajax_route_error().
@@ -971,45 +970,35 @@
971970
** specified by the --remote option. If there is no default remote
972971
** Fossil repository and the --remote option is omitted, then this
973972
** command fails with an error.
974973
**
975974
** Subcommands:
976
-**
977975
** > fossil chat
978
-**
979976
** When there is no SUBCOMMAND (when this command is simply "fossil chat")
980977
** the response is to bring up a web-browser window to the chatroom
981978
** on the default system web-browser. You can accomplish the same by
982979
** typing the appropriate URL into the web-browser yourself. This
983980
** command is merely a convenience for command-line oriented people.
984
-**
985981
** > fossil chat pull
986
-**
987982
** Copy chat content from the server down into the local clone,
988983
** as a backup or archive. Setup privilege is required on the server.
989
-**
990984
** --all Download all chat content. Normally only
991985
** previously undownloaded content is retrieved.
992986
** --debug Additional debugging output.
993987
** --out DATABASE Store CHAT table in separate database file
994988
** DATABASE rather that adding to local clone
995989
** --unsafe Allow the use of unencrypted http://
996
-**
997990
** > fossil chat send [ARGUMENTS]
998
-**
999991
** This command sends a new message to the chatroom. The message
1000992
** to be sent is determined by arguments as follows:
1001
-**
1002993
** -f|--file FILENAME File to attach to the message
1003994
** --as FILENAME2 Causes --file FILENAME to be sent with
1004995
** the attachment name FILENAME2
1005996
** -m|--message TEXT Text of the chat message
1006997
** --remote URL Send to this remote URL
1007998
** --unsafe Allow the use of unencrypted http://
1008
-**
1009999
** > fossil chat url
1010
-**
10111000
** Show the default URL used to access the chat server.
10121001
**
10131002
** Additional subcommands may be added in the future.
10141003
*/
10151004
void chat_command(void){
10161005
--- src/chat.c
+++ src/chat.c
@@ -701,11 +701,10 @@
701 ** /chat-fetch-one/N
702 **
703 ** Fetches a single message with the given ID, if available.
704 **
705 ** Options:
706 **
707 ** raw = the xmsg field will be returned unparsed.
708 **
709 ** Response is either a single object in the format returned by
710 ** /chat-poll (without the wrapper array) or a JSON-format error
711 ** response, as documented for ajax_route_error().
@@ -971,45 +970,35 @@
971 ** specified by the --remote option. If there is no default remote
972 ** Fossil repository and the --remote option is omitted, then this
973 ** command fails with an error.
974 **
975 ** Subcommands:
976 **
977 ** > fossil chat
978 **
979 ** When there is no SUBCOMMAND (when this command is simply "fossil chat")
980 ** the response is to bring up a web-browser window to the chatroom
981 ** on the default system web-browser. You can accomplish the same by
982 ** typing the appropriate URL into the web-browser yourself. This
983 ** command is merely a convenience for command-line oriented people.
984 **
985 ** > fossil chat pull
986 **
987 ** Copy chat content from the server down into the local clone,
988 ** as a backup or archive. Setup privilege is required on the server.
989 **
990 ** --all Download all chat content. Normally only
991 ** previously undownloaded content is retrieved.
992 ** --debug Additional debugging output.
993 ** --out DATABASE Store CHAT table in separate database file
994 ** DATABASE rather that adding to local clone
995 ** --unsafe Allow the use of unencrypted http://
996 **
997 ** > fossil chat send [ARGUMENTS]
998 **
999 ** This command sends a new message to the chatroom. The message
1000 ** to be sent is determined by arguments as follows:
1001 **
1002 ** -f|--file FILENAME File to attach to the message
1003 ** --as FILENAME2 Causes --file FILENAME to be sent with
1004 ** the attachment name FILENAME2
1005 ** -m|--message TEXT Text of the chat message
1006 ** --remote URL Send to this remote URL
1007 ** --unsafe Allow the use of unencrypted http://
1008 **
1009 ** > fossil chat url
1010 **
1011 ** Show the default URL used to access the chat server.
1012 **
1013 ** Additional subcommands may be added in the future.
1014 */
1015 void chat_command(void){
1016
--- src/chat.c
+++ src/chat.c
@@ -701,11 +701,10 @@
701 ** /chat-fetch-one/N
702 **
703 ** Fetches a single message with the given ID, if available.
704 **
705 ** Options:
 
706 ** raw = the xmsg field will be returned unparsed.
707 **
708 ** Response is either a single object in the format returned by
709 ** /chat-poll (without the wrapper array) or a JSON-format error
710 ** response, as documented for ajax_route_error().
@@ -971,45 +970,35 @@
970 ** specified by the --remote option. If there is no default remote
971 ** Fossil repository and the --remote option is omitted, then this
972 ** command fails with an error.
973 **
974 ** Subcommands:
 
975 ** > fossil chat
 
976 ** When there is no SUBCOMMAND (when this command is simply "fossil chat")
977 ** the response is to bring up a web-browser window to the chatroom
978 ** on the default system web-browser. You can accomplish the same by
979 ** typing the appropriate URL into the web-browser yourself. This
980 ** command is merely a convenience for command-line oriented people.
 
981 ** > fossil chat pull
 
982 ** Copy chat content from the server down into the local clone,
983 ** as a backup or archive. Setup privilege is required on the server.
 
984 ** --all Download all chat content. Normally only
985 ** previously undownloaded content is retrieved.
986 ** --debug Additional debugging output.
987 ** --out DATABASE Store CHAT table in separate database file
988 ** DATABASE rather that adding to local clone
989 ** --unsafe Allow the use of unencrypted http://
 
990 ** > fossil chat send [ARGUMENTS]
 
991 ** This command sends a new message to the chatroom. The message
992 ** to be sent is determined by arguments as follows:
 
993 ** -f|--file FILENAME File to attach to the message
994 ** --as FILENAME2 Causes --file FILENAME to be sent with
995 ** the attachment name FILENAME2
996 ** -m|--message TEXT Text of the chat message
997 ** --remote URL Send to this remote URL
998 ** --unsafe Allow the use of unencrypted http://
 
999 ** > fossil chat url
 
1000 ** Show the default URL used to access the chat server.
1001 **
1002 ** Additional subcommands may be added in the future.
1003 */
1004 void chat_command(void){
1005
+3 -1
--- src/color.c
+++ src/color.c
@@ -169,11 +169,13 @@
169169
@ <p>Enter candidate branch names below and see them displayed in their
170170
@ default background colors above.</p>
171171
for(i=0; i<10; i++){
172172
sqlite3_snprintf(sizeof(zNm),zNm,"b%d",i);
173173
zBr = P(zNm);
174
- @ <input type="text" size="30" name='%s(zNm)' value='%h(PD(zNm,""))'><br />
174
+ @ <label>Branch %s(zNm):
175
+ @ <input type="text" size="30" name='%s(zNm)' value='%h(PD(zNm,""))'>
176
+ @ </label><br />
175177
}
176178
@ <input type="submit" value="Submit">
177179
@ <input type="submit" name="rand" value="Random">
178180
@ </form>
179181
style_finish_page();
180182
--- src/color.c
+++ src/color.c
@@ -169,11 +169,13 @@
169 @ <p>Enter candidate branch names below and see them displayed in their
170 @ default background colors above.</p>
171 for(i=0; i<10; i++){
172 sqlite3_snprintf(sizeof(zNm),zNm,"b%d",i);
173 zBr = P(zNm);
174 @ <input type="text" size="30" name='%s(zNm)' value='%h(PD(zNm,""))'><br />
 
 
175 }
176 @ <input type="submit" value="Submit">
177 @ <input type="submit" name="rand" value="Random">
178 @ </form>
179 style_finish_page();
180
--- src/color.c
+++ src/color.c
@@ -169,11 +169,13 @@
169 @ <p>Enter candidate branch names below and see them displayed in their
170 @ default background colors above.</p>
171 for(i=0; i<10; i++){
172 sqlite3_snprintf(sizeof(zNm),zNm,"b%d",i);
173 zBr = P(zNm);
174 @ <label>Branch %s(zNm):
175 @ <input type="text" size="30" name='%s(zNm)' value='%h(PD(zNm,""))'>
176 @ </label><br />
177 }
178 @ <input type="submit" value="Submit">
179 @ <input type="submit" name="rand" value="Random">
180 @ </form>
181 style_finish_page();
182
+1 -15
--- src/configure.c
+++ src/configure.c
@@ -724,50 +724,36 @@
724724
** COMMAND: configuration*
725725
**
726726
** Usage: %fossil configuration METHOD ... ?OPTIONS?
727727
**
728728
** Where METHOD is one of: export import merge pull push reset.
729
-**
730729
** > fossil configuration export AREA FILENAME
731
-**
732730
** Write to FILENAME exported configuration information for AREA.
733
-** AREA can be one of:
734731
**
732
+** AREA can be one of:
735733
** all email interwiki project shun skin
736734
** ticket user alias subscriber
737
-**
738735
** > fossil configuration import FILENAME
739
-**
740736
** Read a configuration from FILENAME, overwriting the current
741737
** configuration.
742
-**
743738
** > fossil configuration merge FILENAME
744
-**
745739
** Read a configuration from FILENAME and merge its values into
746740
** the current configuration. Existing values take priority over
747741
** values read from FILENAME.
748
-**
749742
** > fossil configuration pull AREA ?URL?
750
-**
751743
** Pull and install the configuration from a different server
752744
** identified by URL. If no URL is specified, then the default
753745
** server is used. Use the --overwrite flag to completely
754746
** replace local settings with content received from URL.
755
-**
756747
** > fossil configuration push AREA ?URL?
757
-**
758748
** Push the local configuration into the remote server identified
759749
** by URL. Admin privilege is required on the remote server for
760750
** this to work. When the same record exists both locally and on
761751
** the remote end, the one that was most recently changed wins.
762
-**
763752
** > fossil configuration reset AREA
764
-**
765753
** Restore the configuration to the default. AREA as above.
766
-**
767754
** > fossil configuration sync AREA ?URL?
768
-**
769755
** Synchronize configuration changes in the local repository with
770756
** the remote repository at URL.
771757
**
772758
** Options:
773759
** -R|--repository REPO Affect repository REPO with changes
774760
--- src/configure.c
+++ src/configure.c
@@ -724,50 +724,36 @@
724 ** COMMAND: configuration*
725 **
726 ** Usage: %fossil configuration METHOD ... ?OPTIONS?
727 **
728 ** Where METHOD is one of: export import merge pull push reset.
729 **
730 ** > fossil configuration export AREA FILENAME
731 **
732 ** Write to FILENAME exported configuration information for AREA.
733 ** AREA can be one of:
734 **
 
735 ** all email interwiki project shun skin
736 ** ticket user alias subscriber
737 **
738 ** > fossil configuration import FILENAME
739 **
740 ** Read a configuration from FILENAME, overwriting the current
741 ** configuration.
742 **
743 ** > fossil configuration merge FILENAME
744 **
745 ** Read a configuration from FILENAME and merge its values into
746 ** the current configuration. Existing values take priority over
747 ** values read from FILENAME.
748 **
749 ** > fossil configuration pull AREA ?URL?
750 **
751 ** Pull and install the configuration from a different server
752 ** identified by URL. If no URL is specified, then the default
753 ** server is used. Use the --overwrite flag to completely
754 ** replace local settings with content received from URL.
755 **
756 ** > fossil configuration push AREA ?URL?
757 **
758 ** Push the local configuration into the remote server identified
759 ** by URL. Admin privilege is required on the remote server for
760 ** this to work. When the same record exists both locally and on
761 ** the remote end, the one that was most recently changed wins.
762 **
763 ** > fossil configuration reset AREA
764 **
765 ** Restore the configuration to the default. AREA as above.
766 **
767 ** > fossil configuration sync AREA ?URL?
768 **
769 ** Synchronize configuration changes in the local repository with
770 ** the remote repository at URL.
771 **
772 ** Options:
773 ** -R|--repository REPO Affect repository REPO with changes
774
--- src/configure.c
+++ src/configure.c
@@ -724,50 +724,36 @@
724 ** COMMAND: configuration*
725 **
726 ** Usage: %fossil configuration METHOD ... ?OPTIONS?
727 **
728 ** Where METHOD is one of: export import merge pull push reset.
 
729 ** > fossil configuration export AREA FILENAME
 
730 ** Write to FILENAME exported configuration information for AREA.
 
731 **
732 ** AREA can be one of:
733 ** all email interwiki project shun skin
734 ** ticket user alias subscriber
 
735 ** > fossil configuration import FILENAME
 
736 ** Read a configuration from FILENAME, overwriting the current
737 ** configuration.
 
738 ** > fossil configuration merge FILENAME
 
739 ** Read a configuration from FILENAME and merge its values into
740 ** the current configuration. Existing values take priority over
741 ** values read from FILENAME.
 
742 ** > fossil configuration pull AREA ?URL?
 
743 ** Pull and install the configuration from a different server
744 ** identified by URL. If no URL is specified, then the default
745 ** server is used. Use the --overwrite flag to completely
746 ** replace local settings with content received from URL.
 
747 ** > fossil configuration push AREA ?URL?
 
748 ** Push the local configuration into the remote server identified
749 ** by URL. Admin privilege is required on the remote server for
750 ** this to work. When the same record exists both locally and on
751 ** the remote end, the one that was most recently changed wins.
 
752 ** > fossil configuration reset AREA
 
753 ** Restore the configuration to the default. AREA as above.
 
754 ** > fossil configuration sync AREA ?URL?
 
755 ** Synchronize configuration changes in the local repository with
756 ** the remote repository at URL.
757 **
758 ** Options:
759 ** -R|--repository REPO Affect repository REPO with changes
760
--- src/content.c
+++ src/content.c
@@ -957,17 +957,14 @@
957957
** Verify that all content can be extracted from the BLOB table correctly.
958958
** If the BLOB table is correct, then the repository can always be
959959
** successfully reconstructed using "fossil rebuild".
960960
**
961961
** Options:
962
-**
963962
** -d|--db-only Run "PRAGMA integrity_check" on the database only.
964963
** No other validation is performed.
965
-**
966964
** --parse Parse all manifests, wikis, tickets, events, and
967965
** so forth, reporting any errors found.
968
-**
969966
** -q|--quick Run "PRAGMA quick_check" on the database only.
970967
** No other validation is performed.
971968
*/
972969
void test_integrity(void){
973970
Stmt q;
@@ -1197,11 +1194,10 @@
11971194
** Look at every artifact in the repository and verify that
11981195
** all references are satisfied. Report any referenced artifacts
11991196
** that are missing or shunned.
12001197
**
12011198
** Options:
1202
-**
12031199
** --notshunned Do not report shunned artifacts
12041200
** --quiet Only show output if there are errors
12051201
*/
12061202
void test_missing(void){
12071203
Stmt q;
12081204
--- src/content.c
+++ src/content.c
@@ -957,17 +957,14 @@
957 ** Verify that all content can be extracted from the BLOB table correctly.
958 ** If the BLOB table is correct, then the repository can always be
959 ** successfully reconstructed using "fossil rebuild".
960 **
961 ** Options:
962 **
963 ** -d|--db-only Run "PRAGMA integrity_check" on the database only.
964 ** No other validation is performed.
965 **
966 ** --parse Parse all manifests, wikis, tickets, events, and
967 ** so forth, reporting any errors found.
968 **
969 ** -q|--quick Run "PRAGMA quick_check" on the database only.
970 ** No other validation is performed.
971 */
972 void test_integrity(void){
973 Stmt q;
@@ -1197,11 +1194,10 @@
1197 ** Look at every artifact in the repository and verify that
1198 ** all references are satisfied. Report any referenced artifacts
1199 ** that are missing or shunned.
1200 **
1201 ** Options:
1202 **
1203 ** --notshunned Do not report shunned artifacts
1204 ** --quiet Only show output if there are errors
1205 */
1206 void test_missing(void){
1207 Stmt q;
1208
--- src/content.c
+++ src/content.c
@@ -957,17 +957,14 @@
957 ** Verify that all content can be extracted from the BLOB table correctly.
958 ** If the BLOB table is correct, then the repository can always be
959 ** successfully reconstructed using "fossil rebuild".
960 **
961 ** Options:
 
962 ** -d|--db-only Run "PRAGMA integrity_check" on the database only.
963 ** No other validation is performed.
 
964 ** --parse Parse all manifests, wikis, tickets, events, and
965 ** so forth, reporting any errors found.
 
966 ** -q|--quick Run "PRAGMA quick_check" on the database only.
967 ** No other validation is performed.
968 */
969 void test_integrity(void){
970 Stmt q;
@@ -1197,11 +1194,10 @@
1194 ** Look at every artifact in the repository and verify that
1195 ** all references are satisfied. Report any referenced artifacts
1196 ** that are missing or shunned.
1197 **
1198 ** Options:
 
1199 ** --notshunned Do not report shunned artifacts
1200 ** --quiet Only show output if there are errors
1201 */
1202 void test_missing(void){
1203 Stmt q;
1204
-2
--- src/db.c
+++ src/db.c
@@ -867,11 +867,10 @@
867867
/*
868868
** COMMAND: test-db-prepare
869869
** Usage: %fossil test-db-prepare ?OPTIONS? SQL-STATEMENT
870870
**
871871
** Options:
872
-**
873872
** --auth-report Enable the ticket report query authorizer.
874873
** --auth-ticket Enable the ticket schema query authorizer.
875874
**
876875
** Invoke db_prepare() on the SQL input. Report any errors encountered.
877876
** This command is used to verify error detection logic in the db_prepare()
@@ -4623,11 +4622,10 @@
46234622
** on the local settings. Use the --global option to change global settings.
46244623
**
46254624
** Options:
46264625
** --global set or unset the given property globally instead of
46274626
** setting or unsetting it for the open repository only.
4628
-**
46294627
** --exact only consider exact name matches.
46304628
**
46314629
** See also: [[configuration]]
46324630
*/
46334631
void setting_cmd(void){
46344632
--- src/db.c
+++ src/db.c
@@ -867,11 +867,10 @@
867 /*
868 ** COMMAND: test-db-prepare
869 ** Usage: %fossil test-db-prepare ?OPTIONS? SQL-STATEMENT
870 **
871 ** Options:
872 **
873 ** --auth-report Enable the ticket report query authorizer.
874 ** --auth-ticket Enable the ticket schema query authorizer.
875 **
876 ** Invoke db_prepare() on the SQL input. Report any errors encountered.
877 ** This command is used to verify error detection logic in the db_prepare()
@@ -4623,11 +4622,10 @@
4623 ** on the local settings. Use the --global option to change global settings.
4624 **
4625 ** Options:
4626 ** --global set or unset the given property globally instead of
4627 ** setting or unsetting it for the open repository only.
4628 **
4629 ** --exact only consider exact name matches.
4630 **
4631 ** See also: [[configuration]]
4632 */
4633 void setting_cmd(void){
4634
--- src/db.c
+++ src/db.c
@@ -867,11 +867,10 @@
867 /*
868 ** COMMAND: test-db-prepare
869 ** Usage: %fossil test-db-prepare ?OPTIONS? SQL-STATEMENT
870 **
871 ** Options:
 
872 ** --auth-report Enable the ticket report query authorizer.
873 ** --auth-ticket Enable the ticket schema query authorizer.
874 **
875 ** Invoke db_prepare() on the SQL input. Report any errors encountered.
876 ** This command is used to verify error detection logic in the db_prepare()
@@ -4623,11 +4622,10 @@
4622 ** on the local settings. Use the --global option to change global settings.
4623 **
4624 ** Options:
4625 ** --global set or unset the given property globally instead of
4626 ** setting or unsetting it for the open repository only.
 
4627 ** --exact only consider exact name matches.
4628 **
4629 ** See also: [[configuration]]
4630 */
4631 void setting_cmd(void){
4632
+5 -6
--- src/default.css
+++ src/default.css
@@ -86,11 +86,10 @@
8686
}
8787
.timelineModernDetail {
8888
font-size: 80%;
8989
text-align: right;
9090
float: right;
91
- opacity: 0.75;
9291
margin-top: 0.5em;
9392
margin-left: 1em;
9493
}
9594
.tl-canvas {
9695
margin: 0 6px 0 10px;
@@ -461,11 +460,11 @@
461460
}
462461
td.tktTlOpen {
463462
color: #800;
464463
}
465464
td.tktTlClosed {
466
- color: #888;
465
+ color: #757575;
467466
}
468467
span.tktError {
469468
color: red;
470469
font-weight: bold;
471470
}
@@ -563,11 +562,11 @@
563562
/* ^^^ attempt to keep mobile from inflating some text */;
564563
}
565564
table.diff pre > ins,
566565
table.diff pre > del {
567566
/* Fill platform-dependent color gaps caused by
568
- inflated line-height */;
567
+ inflated line-height */
569568
padding: 0.062em 0 0.062em 0;
570569
}
571570
table.diff pre > ins > *,
572571
table.diff pre > del > *{
573572
/* Avoid odd-looking color swatches in conjunction with
@@ -707,18 +706,18 @@
707706
td.difftxt ins > ins.edit {
708707
background-color: #c0c0ff;
709708
text-decoration: none;
710709
font-weight: bold;
711710
}
712
-body.tkt div.content li > table.udiff {
711
+body.tkt main.content li > table.udiff {
713712
margin-left: 1.5em;
714713
margin-top: 0.5em;
715714
}
716
-body.tkt div.content ol.tkt-changes > li:target > p > span {
715
+body.tkt main.content ol.tkt-changes > li:target > p > span {
717716
border-bottom: 3px solid gold;
718717
}
719
-body.tkt div.content ol.tkt-changes > li:target > ol {
718
+body.tkt main.content ol.tkt-changes > li:target > ol {
720719
border-left: 1px solid gold;
721720
}
722721
723722
span.modpending {
724723
color: #b03800;
725724
--- src/default.css
+++ src/default.css
@@ -86,11 +86,10 @@
86 }
87 .timelineModernDetail {
88 font-size: 80%;
89 text-align: right;
90 float: right;
91 opacity: 0.75;
92 margin-top: 0.5em;
93 margin-left: 1em;
94 }
95 .tl-canvas {
96 margin: 0 6px 0 10px;
@@ -461,11 +460,11 @@
461 }
462 td.tktTlOpen {
463 color: #800;
464 }
465 td.tktTlClosed {
466 color: #888;
467 }
468 span.tktError {
469 color: red;
470 font-weight: bold;
471 }
@@ -563,11 +562,11 @@
563 /* ^^^ attempt to keep mobile from inflating some text */;
564 }
565 table.diff pre > ins,
566 table.diff pre > del {
567 /* Fill platform-dependent color gaps caused by
568 inflated line-height */;
569 padding: 0.062em 0 0.062em 0;
570 }
571 table.diff pre > ins > *,
572 table.diff pre > del > *{
573 /* Avoid odd-looking color swatches in conjunction with
@@ -707,18 +706,18 @@
707 td.difftxt ins > ins.edit {
708 background-color: #c0c0ff;
709 text-decoration: none;
710 font-weight: bold;
711 }
712 body.tkt div.content li > table.udiff {
713 margin-left: 1.5em;
714 margin-top: 0.5em;
715 }
716 body.tkt div.content ol.tkt-changes > li:target > p > span {
717 border-bottom: 3px solid gold;
718 }
719 body.tkt div.content ol.tkt-changes > li:target > ol {
720 border-left: 1px solid gold;
721 }
722
723 span.modpending {
724 color: #b03800;
725
--- src/default.css
+++ src/default.css
@@ -86,11 +86,10 @@
86 }
87 .timelineModernDetail {
88 font-size: 80%;
89 text-align: right;
90 float: right;
 
91 margin-top: 0.5em;
92 margin-left: 1em;
93 }
94 .tl-canvas {
95 margin: 0 6px 0 10px;
@@ -461,11 +460,11 @@
460 }
461 td.tktTlOpen {
462 color: #800;
463 }
464 td.tktTlClosed {
465 color: #757575;
466 }
467 span.tktError {
468 color: red;
469 font-weight: bold;
470 }
@@ -563,11 +562,11 @@
562 /* ^^^ attempt to keep mobile from inflating some text */;
563 }
564 table.diff pre > ins,
565 table.diff pre > del {
566 /* Fill platform-dependent color gaps caused by
567 inflated line-height */
568 padding: 0.062em 0 0.062em 0;
569 }
570 table.diff pre > ins > *,
571 table.diff pre > del > *{
572 /* Avoid odd-looking color swatches in conjunction with
@@ -707,18 +706,18 @@
706 td.difftxt ins > ins.edit {
707 background-color: #c0c0ff;
708 text-decoration: none;
709 font-weight: bold;
710 }
711 body.tkt main.content li > table.udiff {
712 margin-left: 1.5em;
713 margin-top: 0.5em;
714 }
715 body.tkt main.content ol.tkt-changes > li:target > p > span {
716 border-bottom: 3px solid gold;
717 }
718 body.tkt main.content ol.tkt-changes > li:target > ol {
719 border-left: 1px solid gold;
720 }
721
722 span.modpending {
723 color: #b03800;
724
--- src/descendants.c
+++ src/descendants.c
@@ -536,11 +536,10 @@
536536
** A "leaf" is a check-in with no children in the same branch. A
537537
** "closed leaf" is a leaf that has a "closed" tag. An "open leaf"
538538
** is a leaf without a "closed" tag.
539539
**
540540
** Query parameters:
541
-**
542541
** all Show all leaves
543542
** closed Show only closed leaves
544543
** ng No graph
545544
** nohidden Hide check-ins with "hidden" tag
546545
** onlyhidden Show only check-ins with "hidden" tag
547546
--- src/descendants.c
+++ src/descendants.c
@@ -536,11 +536,10 @@
536 ** A "leaf" is a check-in with no children in the same branch. A
537 ** "closed leaf" is a leaf that has a "closed" tag. An "open leaf"
538 ** is a leaf without a "closed" tag.
539 **
540 ** Query parameters:
541 **
542 ** all Show all leaves
543 ** closed Show only closed leaves
544 ** ng No graph
545 ** nohidden Hide check-ins with "hidden" tag
546 ** onlyhidden Show only check-ins with "hidden" tag
547
--- src/descendants.c
+++ src/descendants.c
@@ -536,11 +536,10 @@
536 ** A "leaf" is a check-in with no children in the same branch. A
537 ** "closed leaf" is a leaf that has a "closed" tag. An "open leaf"
538 ** is a leaf without a "closed" tag.
539 **
540 ** Query parameters:
 
541 ** all Show all leaves
542 ** closed Show only closed leaves
543 ** ng No graph
544 ** nohidden Hide check-ins with "hidden" tag
545 ** onlyhidden Show only check-ins with "hidden" tag
546
-1
--- src/diff.c
+++ src/diff.c
@@ -3539,11 +3539,10 @@
35393539
** that alternative origin. Thus using "origin=trunk" on an historical
35403540
** version of the file shows the first time each line in the file was changed
35413541
** or removed by any subsequent check-in.
35423542
**
35433543
** Query parameters:
3544
-**
35453544
** checkin=ID The check-in at which to start the annotation
35463545
** filename=FILENAME The filename.
35473546
** filevers=BOOLEAN Show file versions rather than check-in versions
35483547
** limit=LIMIT Limit the amount of analysis. LIMIT can be one of:
35493548
** none No limit
35503549
--- src/diff.c
+++ src/diff.c
@@ -3539,11 +3539,10 @@
3539 ** that alternative origin. Thus using "origin=trunk" on an historical
3540 ** version of the file shows the first time each line in the file was changed
3541 ** or removed by any subsequent check-in.
3542 **
3543 ** Query parameters:
3544 **
3545 ** checkin=ID The check-in at which to start the annotation
3546 ** filename=FILENAME The filename.
3547 ** filevers=BOOLEAN Show file versions rather than check-in versions
3548 ** limit=LIMIT Limit the amount of analysis. LIMIT can be one of:
3549 ** none No limit
3550
--- src/diff.c
+++ src/diff.c
@@ -3539,11 +3539,10 @@
3539 ** that alternative origin. Thus using "origin=trunk" on an historical
3540 ** version of the file shows the first time each line in the file was changed
3541 ** or removed by any subsequent check-in.
3542 **
3543 ** Query parameters:
 
3544 ** checkin=ID The check-in at which to start the annotation
3545 ** filename=FILENAME The filename.
3546 ** filevers=BOOLEAN Show file versions rather than check-in versions
3547 ** limit=LIMIT Limit the amount of analysis. LIMIT can be one of:
3548 ** none No limit
3549
+1 -5
--- src/dispatch.c
+++ src/dispatch.c
@@ -798,18 +798,16 @@
798798
** WEBPAGE: help
799799
** URL: /help?name=CMD
800800
**
801801
** Show the built-in help text for CMD. CMD can be a command-line interface
802802
** command or a page name from the web interface or a setting.
803
-** Query parameters:
804803
**
804
+** Query parameters:
805805
** name=CMD Show help for CMD where CMD is a command name or
806806
** webpage name or setting name.
807
-**
808807
** plaintext Show the help within <pre>...</pre>, as if it were
809808
** displayed using the "fossil help" command.
810
-**
811809
** raw Show the raw help text without any formatting.
812810
** (Used for debugging.)
813811
*/
814812
void help_page(void){
815813
const char *zCmd = P("cmd");
@@ -1141,11 +1139,10 @@
11411139
** Display information on how to use TOPIC, which may be a command, webpage, or
11421140
** setting. Webpage names begin with "/". If TOPIC is omitted, a list of
11431141
** topics is returned.
11441142
**
11451143
** The following options can be used when TOPIC is omitted:
1146
-**
11471144
** -a|--all List both common and auxiliary commands
11481145
** -o|--options List command-line options common to all commands
11491146
** -s|--setting List setting names
11501147
** -t|--test List unsupported "test" commands
11511148
** -v|--verbose List both names and help text
@@ -1155,11 +1152,10 @@
11551152
** and unsupported "test" commands), options,
11561153
** settings, and web pages
11571154
** -e|--everything List all help on all topics
11581155
**
11591156
** These options can be used when TOPIC is present:
1160
-**
11611157
** -h|--html Format output as HTML rather than plain text
11621158
** -c|--commands Restrict TOPIC search to commands
11631159
*/
11641160
void help_cmd(void){
11651161
int rc;
11661162
--- src/dispatch.c
+++ src/dispatch.c
@@ -798,18 +798,16 @@
798 ** WEBPAGE: help
799 ** URL: /help?name=CMD
800 **
801 ** Show the built-in help text for CMD. CMD can be a command-line interface
802 ** command or a page name from the web interface or a setting.
803 ** Query parameters:
804 **
 
805 ** name=CMD Show help for CMD where CMD is a command name or
806 ** webpage name or setting name.
807 **
808 ** plaintext Show the help within <pre>...</pre>, as if it were
809 ** displayed using the "fossil help" command.
810 **
811 ** raw Show the raw help text without any formatting.
812 ** (Used for debugging.)
813 */
814 void help_page(void){
815 const char *zCmd = P("cmd");
@@ -1141,11 +1139,10 @@
1141 ** Display information on how to use TOPIC, which may be a command, webpage, or
1142 ** setting. Webpage names begin with "/". If TOPIC is omitted, a list of
1143 ** topics is returned.
1144 **
1145 ** The following options can be used when TOPIC is omitted:
1146 **
1147 ** -a|--all List both common and auxiliary commands
1148 ** -o|--options List command-line options common to all commands
1149 ** -s|--setting List setting names
1150 ** -t|--test List unsupported "test" commands
1151 ** -v|--verbose List both names and help text
@@ -1155,11 +1152,10 @@
1155 ** and unsupported "test" commands), options,
1156 ** settings, and web pages
1157 ** -e|--everything List all help on all topics
1158 **
1159 ** These options can be used when TOPIC is present:
1160 **
1161 ** -h|--html Format output as HTML rather than plain text
1162 ** -c|--commands Restrict TOPIC search to commands
1163 */
1164 void help_cmd(void){
1165 int rc;
1166
--- src/dispatch.c
+++ src/dispatch.c
@@ -798,18 +798,16 @@
798 ** WEBPAGE: help
799 ** URL: /help?name=CMD
800 **
801 ** Show the built-in help text for CMD. CMD can be a command-line interface
802 ** command or a page name from the web interface or a setting.
 
803 **
804 ** Query parameters:
805 ** name=CMD Show help for CMD where CMD is a command name or
806 ** webpage name or setting name.
 
807 ** plaintext Show the help within <pre>...</pre>, as if it were
808 ** displayed using the "fossil help" command.
 
809 ** raw Show the raw help text without any formatting.
810 ** (Used for debugging.)
811 */
812 void help_page(void){
813 const char *zCmd = P("cmd");
@@ -1141,11 +1139,10 @@
1139 ** Display information on how to use TOPIC, which may be a command, webpage, or
1140 ** setting. Webpage names begin with "/". If TOPIC is omitted, a list of
1141 ** topics is returned.
1142 **
1143 ** The following options can be used when TOPIC is omitted:
 
1144 ** -a|--all List both common and auxiliary commands
1145 ** -o|--options List command-line options common to all commands
1146 ** -s|--setting List setting names
1147 ** -t|--test List unsupported "test" commands
1148 ** -v|--verbose List both names and help text
@@ -1155,11 +1152,10 @@
1152 ** and unsupported "test" commands), options,
1153 ** settings, and web pages
1154 ** -e|--everything List all help on all topics
1155 **
1156 ** These options can be used when TOPIC is present:
 
1157 ** -h|--html Format output as HTML rather than plain text
1158 ** -c|--commands Restrict TOPIC search to commands
1159 */
1160 void help_cmd(void){
1161 int rc;
1162
-4
--- src/doc.c
+++ src/doc.c
@@ -866,16 +866,13 @@
866866
** URL: /doc/CHECKIN/FILE
867867
**
868868
** CHECKIN can be either tag or hash prefix or timestamp identifying a
869869
** particular check-in, or the name of a branch (meaning the most recent
870870
** check-in on that branch) or one of various magic words:
871
-**
872871
** "tip" means the most recent check-in
873
-**
874872
** "ckout" means the current check-out, if the server is run from
875873
** within a check-out, otherwise it is the same as "tip"
876
-**
877874
** "latest" means use the most recent check-in for the document
878875
** regardless of what branch it occurs on.
879876
**
880877
** FILE is the name of a file to delivered up as a webpage. FILE is relative
881878
** to the root of the source tree of the repository. The FILE must
@@ -1228,15 +1225,14 @@
12281225
** Search for documents that match a user-supplied full-text search pattern.
12291226
** If no pattern is specified (by the s= query parameter) then the user
12301227
** is prompted to enter a search string.
12311228
**
12321229
** Query parameters:
1233
-**
12341230
** s=PATTERN Search for PATTERN
12351231
*/
12361232
void doc_search_page(void){
12371233
const int isSearch = P("s")!=0;
12381234
login_check_credentials();
12391235
style_header("Document Search%s", isSearch ? " Results" : "");
12401236
search_screen(SRCH_DOC, 0);
12411237
style_finish_page();
12421238
}
12431239
--- src/doc.c
+++ src/doc.c
@@ -866,16 +866,13 @@
866 ** URL: /doc/CHECKIN/FILE
867 **
868 ** CHECKIN can be either tag or hash prefix or timestamp identifying a
869 ** particular check-in, or the name of a branch (meaning the most recent
870 ** check-in on that branch) or one of various magic words:
871 **
872 ** "tip" means the most recent check-in
873 **
874 ** "ckout" means the current check-out, if the server is run from
875 ** within a check-out, otherwise it is the same as "tip"
876 **
877 ** "latest" means use the most recent check-in for the document
878 ** regardless of what branch it occurs on.
879 **
880 ** FILE is the name of a file to delivered up as a webpage. FILE is relative
881 ** to the root of the source tree of the repository. The FILE must
@@ -1228,15 +1225,14 @@
1228 ** Search for documents that match a user-supplied full-text search pattern.
1229 ** If no pattern is specified (by the s= query parameter) then the user
1230 ** is prompted to enter a search string.
1231 **
1232 ** Query parameters:
1233 **
1234 ** s=PATTERN Search for PATTERN
1235 */
1236 void doc_search_page(void){
1237 const int isSearch = P("s")!=0;
1238 login_check_credentials();
1239 style_header("Document Search%s", isSearch ? " Results" : "");
1240 search_screen(SRCH_DOC, 0);
1241 style_finish_page();
1242 }
1243
--- src/doc.c
+++ src/doc.c
@@ -866,16 +866,13 @@
866 ** URL: /doc/CHECKIN/FILE
867 **
868 ** CHECKIN can be either tag or hash prefix or timestamp identifying a
869 ** particular check-in, or the name of a branch (meaning the most recent
870 ** check-in on that branch) or one of various magic words:
 
871 ** "tip" means the most recent check-in
 
872 ** "ckout" means the current check-out, if the server is run from
873 ** within a check-out, otherwise it is the same as "tip"
 
874 ** "latest" means use the most recent check-in for the document
875 ** regardless of what branch it occurs on.
876 **
877 ** FILE is the name of a file to delivered up as a webpage. FILE is relative
878 ** to the root of the source tree of the repository. The FILE must
@@ -1228,15 +1225,14 @@
1225 ** Search for documents that match a user-supplied full-text search pattern.
1226 ** If no pattern is specified (by the s= query parameter) then the user
1227 ** is prompted to enter a search string.
1228 **
1229 ** Query parameters:
 
1230 ** s=PATTERN Search for PATTERN
1231 */
1232 void doc_search_page(void){
1233 const int isSearch = P("s")!=0;
1234 login_check_credentials();
1235 style_header("Document Search%s", isSearch ? " Results" : "");
1236 search_screen(SRCH_DOC, 0);
1237 style_finish_page();
1238 }
1239
-1
--- src/etag.c
+++ src/etag.c
@@ -252,11 +252,10 @@
252252
** Usage: fossil test-etag -key KEY-NUMBER -hash HASH
253253
**
254254
** Generate an etag given a KEY-NUMBER and/or a HASH.
255255
**
256256
** KEY-NUMBER is some combination of:
257
-**
258257
** 1 ETAG_CONFIG The config table version number
259258
** 2 ETAG_DATA The event table version number
260259
** 4 ETAG_COOKIE The display cookie
261260
*/
262261
void test_etag_cmd(void){
263262
--- src/etag.c
+++ src/etag.c
@@ -252,11 +252,10 @@
252 ** Usage: fossil test-etag -key KEY-NUMBER -hash HASH
253 **
254 ** Generate an etag given a KEY-NUMBER and/or a HASH.
255 **
256 ** KEY-NUMBER is some combination of:
257 **
258 ** 1 ETAG_CONFIG The config table version number
259 ** 2 ETAG_DATA The event table version number
260 ** 4 ETAG_COOKIE The display cookie
261 */
262 void test_etag_cmd(void){
263
--- src/etag.c
+++ src/etag.c
@@ -252,11 +252,10 @@
252 ** Usage: fossil test-etag -key KEY-NUMBER -hash HASH
253 **
254 ** Generate an etag given a KEY-NUMBER and/or a HASH.
255 **
256 ** KEY-NUMBER is some combination of:
 
257 ** 1 ETAG_CONFIG The config table version number
258 ** 2 ETAG_DATA The event table version number
259 ** 4 ETAG_COOKIE The display cookie
260 */
261 void test_etag_cmd(void){
262
+16 -16
--- src/event.c
+++ src/event.c
@@ -52,11 +52,10 @@
5252
** WEBPAGE: event
5353
**
5454
** Display a technical note (formerly called an "event").
5555
**
5656
** PARAMETERS:
57
-**
5857
** name=ID Identify the technical note to display. ID must be
5958
** complete.
6059
** aid=ARTIFACTID Which specific version of the tech-note. Optional.
6160
** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
6261
**
@@ -346,16 +345,14 @@
346345
** WEBPAGE: eventedit
347346
**
348347
** Revise or create a technical note (formerly called an "event").
349348
**
350349
** Required query parameter:
351
-**
352350
** name=ID Hex hash ID of the technote. If omitted, a new
353351
** tech-note is created.
354352
**
355353
** POST parameters from the "Cancel", "Preview", or "Submit" buttons:
356
-**
357354
** w=TEXT Complete text of the technote.
358355
** t=TEXT Time of the technote on the timeline (ISO 8601)
359356
** c=TEXT Timeline comment
360357
** g=TEXT Tags associated with this technote
361358
** mimetype=TEXT Mimetype for w= text
@@ -526,42 +523,45 @@
526523
@ <form method="post" action="%R/technoteedit"><div>
527524
login_insert_csrf_secret();
528525
@ <input type="hidden" name="name" value="%h(zId)" />
529526
@ <table border="0" cellspacing="10">
530527
531
- @ <tr><th align="right" valign="top">Timestamp (UTC):</th>
528
+ @ <tr><th align="right" valign="top"><label for="t">Timestamp (UTC):</label></th>
532529
@ <td valign="top">
533
- @ <input type="text" name="t" size="25" value="%h(zETime)" />
530
+ @ <input type="text" id="t" name="t" size="25" value="%h(zETime)" />
534531
@ </td></tr>
535532
536
- @ <tr><th align="right" valign="top">Timeline Comment:</th>
533
+ @ <tr><th align="right" valign="top"><label for="c">Timeline Comment:</label></th>
537534
@ <td valign="top">
538
- @ <textarea name="c" class="technoteedit" cols="80"
535
+ @ <textarea id="c" name="c" class="technoteedit" cols="80"
539536
@ rows="3" wrap="virtual">%h(zComment)</textarea>
540537
@ </td></tr>
541538
542
- @ <tr><th align="right" valign="top">Timeline Background Color:</th>
539
+ @ <tr><th align="right" valign="top">
540
+ @ <label for='newclr'%s(zClrFlag)>Timeline Background Color:</label></th>
543541
@ <td valign="top">
544
- @ <input type='checkbox' name='newclr'%s(zClrFlag) />
545
- @ Use custom color: \
546
- @ <input type='color' name='clr' value='%s(zClr[0]?zClr:"#c0f0ff")'>
542
+ @ <input type='checkbox' id='newclr'%s(zClrFlag) name='newclr'%s(zClrFlag) />
543
+ @ <label>Use custom color: \
544
+ @ <input type='color' name='clr' value='%s(zClr[0]?zClr:"#c0f0ff")'></label>
547545
@ </td></tr>
548546
549
- @ <tr><th align="right" valign="top">Tags:</th>
547
+ @ <tr><th align="right" valign="top"><label for="g">Tags:</label></th>
550548
@ <td valign="top">
551
- @ <input type="text" name="g" size="40" value="%h(zTags)" />
549
+ @ <input type="text" id="g" name="g" size="40" value="%h(zTags)" />
552550
@ </td></tr>
553551
554552
@ <tr><th align="right" valign="top">\
555
- @ %z(href("%R/markup_help"))Markup Style</a>:</th>
553
+ @ <label for="mimetype">Markup style</label>
554
+ @ %z(href("%R/markup_help"))
555
+ @ <span class="help-buttonlet processed" title="Help"></span></a>:
556556
@ <td valign="top">
557557
mimetype_option_menu(zMimetype);
558558
@ </td></tr>
559559
560
- @ <tr><th align="right" valign="top">Page&nbsp;Content:</th>
560
+ @ <tr><th align="right" valign="top"><label for="w">Page&nbsp;Content:</label></th>
561561
@ <td valign="top">
562
- @ <textarea name="w" class="technoteedit" cols="80"
562
+ @ <textarea id="w" name="w" class="technoteedit" cols="80"
563563
@ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
564564
@ </td></tr>
565565
566566
@ <tr><td colspan="2">
567567
@ <input type="submit" name="cancel" value="Cancel" />
568568
--- src/event.c
+++ src/event.c
@@ -52,11 +52,10 @@
52 ** WEBPAGE: event
53 **
54 ** Display a technical note (formerly called an "event").
55 **
56 ** PARAMETERS:
57 **
58 ** name=ID Identify the technical note to display. ID must be
59 ** complete.
60 ** aid=ARTIFACTID Which specific version of the tech-note. Optional.
61 ** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
62 **
@@ -346,16 +345,14 @@
346 ** WEBPAGE: eventedit
347 **
348 ** Revise or create a technical note (formerly called an "event").
349 **
350 ** Required query parameter:
351 **
352 ** name=ID Hex hash ID of the technote. If omitted, a new
353 ** tech-note is created.
354 **
355 ** POST parameters from the "Cancel", "Preview", or "Submit" buttons:
356 **
357 ** w=TEXT Complete text of the technote.
358 ** t=TEXT Time of the technote on the timeline (ISO 8601)
359 ** c=TEXT Timeline comment
360 ** g=TEXT Tags associated with this technote
361 ** mimetype=TEXT Mimetype for w= text
@@ -526,42 +523,45 @@
526 @ <form method="post" action="%R/technoteedit"><div>
527 login_insert_csrf_secret();
528 @ <input type="hidden" name="name" value="%h(zId)" />
529 @ <table border="0" cellspacing="10">
530
531 @ <tr><th align="right" valign="top">Timestamp (UTC):</th>
532 @ <td valign="top">
533 @ <input type="text" name="t" size="25" value="%h(zETime)" />
534 @ </td></tr>
535
536 @ <tr><th align="right" valign="top">Timeline Comment:</th>
537 @ <td valign="top">
538 @ <textarea name="c" class="technoteedit" cols="80"
539 @ rows="3" wrap="virtual">%h(zComment)</textarea>
540 @ </td></tr>
541
542 @ <tr><th align="right" valign="top">Timeline Background Color:</th>
 
543 @ <td valign="top">
544 @ <input type='checkbox' name='newclr'%s(zClrFlag) />
545 @ Use custom color: \
546 @ <input type='color' name='clr' value='%s(zClr[0]?zClr:"#c0f0ff")'>
547 @ </td></tr>
548
549 @ <tr><th align="right" valign="top">Tags:</th>
550 @ <td valign="top">
551 @ <input type="text" name="g" size="40" value="%h(zTags)" />
552 @ </td></tr>
553
554 @ <tr><th align="right" valign="top">\
555 @ %z(href("%R/markup_help"))Markup Style</a>:</th>
 
 
556 @ <td valign="top">
557 mimetype_option_menu(zMimetype);
558 @ </td></tr>
559
560 @ <tr><th align="right" valign="top">Page&nbsp;Content:</th>
561 @ <td valign="top">
562 @ <textarea name="w" class="technoteedit" cols="80"
563 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
564 @ </td></tr>
565
566 @ <tr><td colspan="2">
567 @ <input type="submit" name="cancel" value="Cancel" />
568
--- src/event.c
+++ src/event.c
@@ -52,11 +52,10 @@
52 ** WEBPAGE: event
53 **
54 ** Display a technical note (formerly called an "event").
55 **
56 ** PARAMETERS:
 
57 ** name=ID Identify the technical note to display. ID must be
58 ** complete.
59 ** aid=ARTIFACTID Which specific version of the tech-note. Optional.
60 ** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional.
61 **
@@ -346,16 +345,14 @@
345 ** WEBPAGE: eventedit
346 **
347 ** Revise or create a technical note (formerly called an "event").
348 **
349 ** Required query parameter:
 
350 ** name=ID Hex hash ID of the technote. If omitted, a new
351 ** tech-note is created.
352 **
353 ** POST parameters from the "Cancel", "Preview", or "Submit" buttons:
 
354 ** w=TEXT Complete text of the technote.
355 ** t=TEXT Time of the technote on the timeline (ISO 8601)
356 ** c=TEXT Timeline comment
357 ** g=TEXT Tags associated with this technote
358 ** mimetype=TEXT Mimetype for w= text
@@ -526,42 +523,45 @@
523 @ <form method="post" action="%R/technoteedit"><div>
524 login_insert_csrf_secret();
525 @ <input type="hidden" name="name" value="%h(zId)" />
526 @ <table border="0" cellspacing="10">
527
528 @ <tr><th align="right" valign="top"><label for="t">Timestamp (UTC):</label></th>
529 @ <td valign="top">
530 @ <input type="text" id="t" name="t" size="25" value="%h(zETime)" />
531 @ </td></tr>
532
533 @ <tr><th align="right" valign="top"><label for="c">Timeline Comment:</label></th>
534 @ <td valign="top">
535 @ <textarea id="c" name="c" class="technoteedit" cols="80"
536 @ rows="3" wrap="virtual">%h(zComment)</textarea>
537 @ </td></tr>
538
539 @ <tr><th align="right" valign="top">
540 @ <label for='newclr'%s(zClrFlag)>Timeline Background Color:</label></th>
541 @ <td valign="top">
542 @ <input type='checkbox' id='newclr'%s(zClrFlag) name='newclr'%s(zClrFlag) />
543 @ <label>Use custom color: \
544 @ <input type='color' name='clr' value='%s(zClr[0]?zClr:"#c0f0ff")'></label>
545 @ </td></tr>
546
547 @ <tr><th align="right" valign="top"><label for="g">Tags:</label></th>
548 @ <td valign="top">
549 @ <input type="text" id="g" name="g" size="40" value="%h(zTags)" />
550 @ </td></tr>
551
552 @ <tr><th align="right" valign="top">\
553 @ <label for="mimetype">Markup style</label>
554 @ %z(href("%R/markup_help"))
555 @ <span class="help-buttonlet processed" title="Help"></span></a>:
556 @ <td valign="top">
557 mimetype_option_menu(zMimetype);
558 @ </td></tr>
559
560 @ <tr><th align="right" valign="top"><label for="w">Page&nbsp;Content:</label></th>
561 @ <td valign="top">
562 @ <textarea id="w" name="w" class="technoteedit" cols="80"
563 @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea>
564 @ </td></tr>
565
566 @ <tr><td colspan="2">
567 @ <input type="submit" name="cancel" value="Cancel" />
568
--- src/export.c
+++ src/export.c
@@ -1816,13 +1816,11 @@
18161816
**
18171817
** Usage: %fossil git SUBCOMMAND
18181818
**
18191819
** Do incremental import or export operations between Fossil and Git.
18201820
** Subcommands:
1821
-**
18221821
** > fossil git export [MIRROR] [OPTIONS]
1823
-**
18241822
** Write content from the Fossil repository into the Git repository
18251823
** in directory MIRROR. The Git repository is created if it does not
18261824
** already exist. If the Git repository does already exist, then
18271825
** new content added to fossil since the previous export is appended.
18281826
**
@@ -1852,19 +1850,14 @@
18521850
** The "trunk" branch of the Fossil repository is
18531851
** mapped into this name. "master" is used if
18541852
** this option is omitted.
18551853
** -q|--quiet Reduce output. Repeat for even less output.
18561854
** -v|--verbose More output.
1857
-**
18581855
** > fossil git import MIRROR
1859
-**
18601856
** TBD...
1861
-**
18621857
** > fossil git status
1863
-**
18641858
** Show the status of the current Git mirror, if there is one.
1865
-**
18661859
** -q|--quiet No output if there is nothing to report
18671860
*/
18681861
void gitmirror_command(void){
18691862
char *zCmd;
18701863
int nCmd;
18711864
--- src/export.c
+++ src/export.c
@@ -1816,13 +1816,11 @@
1816 **
1817 ** Usage: %fossil git SUBCOMMAND
1818 **
1819 ** Do incremental import or export operations between Fossil and Git.
1820 ** Subcommands:
1821 **
1822 ** > fossil git export [MIRROR] [OPTIONS]
1823 **
1824 ** Write content from the Fossil repository into the Git repository
1825 ** in directory MIRROR. The Git repository is created if it does not
1826 ** already exist. If the Git repository does already exist, then
1827 ** new content added to fossil since the previous export is appended.
1828 **
@@ -1852,19 +1850,14 @@
1852 ** The "trunk" branch of the Fossil repository is
1853 ** mapped into this name. "master" is used if
1854 ** this option is omitted.
1855 ** -q|--quiet Reduce output. Repeat for even less output.
1856 ** -v|--verbose More output.
1857 **
1858 ** > fossil git import MIRROR
1859 **
1860 ** TBD...
1861 **
1862 ** > fossil git status
1863 **
1864 ** Show the status of the current Git mirror, if there is one.
1865 **
1866 ** -q|--quiet No output if there is nothing to report
1867 */
1868 void gitmirror_command(void){
1869 char *zCmd;
1870 int nCmd;
1871
--- src/export.c
+++ src/export.c
@@ -1816,13 +1816,11 @@
1816 **
1817 ** Usage: %fossil git SUBCOMMAND
1818 **
1819 ** Do incremental import or export operations between Fossil and Git.
1820 ** Subcommands:
 
1821 ** > fossil git export [MIRROR] [OPTIONS]
 
1822 ** Write content from the Fossil repository into the Git repository
1823 ** in directory MIRROR. The Git repository is created if it does not
1824 ** already exist. If the Git repository does already exist, then
1825 ** new content added to fossil since the previous export is appended.
1826 **
@@ -1852,19 +1850,14 @@
1850 ** The "trunk" branch of the Fossil repository is
1851 ** mapped into this name. "master" is used if
1852 ** this option is omitted.
1853 ** -q|--quiet Reduce output. Repeat for even less output.
1854 ** -v|--verbose More output.
 
1855 ** > fossil git import MIRROR
 
1856 ** TBD...
 
1857 ** > fossil git status
 
1858 ** Show the status of the current Git mirror, if there is one.
 
1859 ** -q|--quiet No output if there is nothing to report
1860 */
1861 void gitmirror_command(void){
1862 char *zCmd;
1863 int nCmd;
1864
-1
--- src/file.c
+++ src/file.c
@@ -1475,11 +1475,10 @@
14751475
**
14761476
** Display the effective file handling subsystem "settings" and then
14771477
** display file system information about the files specified, if any.
14781478
**
14791479
** Options:
1480
-**
14811480
** --allow-symlinks BOOLEAN Temporarily turn allow-symlinks on/off
14821481
** --open-config Open the configuration database first.
14831482
** --reset Reset cached stat() info for each file.
14841483
** --root ROOT Use ROOT as the root of the checkout
14851484
** --slash Trailing slashes, if any, are retained.
14861485
--- src/file.c
+++ src/file.c
@@ -1475,11 +1475,10 @@
1475 **
1476 ** Display the effective file handling subsystem "settings" and then
1477 ** display file system information about the files specified, if any.
1478 **
1479 ** Options:
1480 **
1481 ** --allow-symlinks BOOLEAN Temporarily turn allow-symlinks on/off
1482 ** --open-config Open the configuration database first.
1483 ** --reset Reset cached stat() info for each file.
1484 ** --root ROOT Use ROOT as the root of the checkout
1485 ** --slash Trailing slashes, if any, are retained.
1486
--- src/file.c
+++ src/file.c
@@ -1475,11 +1475,10 @@
1475 **
1476 ** Display the effective file handling subsystem "settings" and then
1477 ** display file system information about the files specified, if any.
1478 **
1479 ** Options:
 
1480 ** --allow-symlinks BOOLEAN Temporarily turn allow-symlinks on/off
1481 ** --open-config Open the configuration database first.
1482 ** --reset Reset cached stat() info for each file.
1483 ** --root ROOT Use ROOT as the root of the checkout
1484 ** --slash Trailing slashes, if any, are retained.
1485
+2 -4
--- src/fileedit.c
+++ src/fileedit.c
@@ -698,11 +698,10 @@
698698
**
699699
** where FILENAME is a repo-relative name as it would appear in the
700700
** vfile table.
701701
**
702702
** Options:
703
-**
704703
** -R|--repository REPO The repository file to commit to.
705704
** --as FILENAME The repository-side name of the input
706705
** file, relative to the top of the
707706
** repository. Default is the same as the
708707
** input file name.
@@ -1538,11 +1537,10 @@
15381537
** Note that fileedit-glob, by design, is a local-only setting.
15391538
** It does not sync across repository clones, and must be explicitly
15401539
** set on any repositories where this page should be activated.
15411540
**
15421541
** Optional query parameters:
1543
-**
15441542
** filename=FILENAME Repo-relative path to the file.
15451543
** checkin=VERSION Checkin version, using any unambiguous
15461544
** symbolic version name.
15471545
**
15481546
** If passed a filename but no checkin then it will attempt to
@@ -1728,11 +1726,11 @@
17281726
"150%", 150, "175%", 175,
17291727
"200%", 200, NULL);
17301728
CX("</div>");
17311729
CX("<div class='flex-container flex-column stretch'>");
17321730
CX("<textarea name='content' id='fileedit-content-editor' "
1733
- "class='fileedit' rows='25'>");
1731
+ "class='fileedit' rows='25' aria-label='Content' title='Content'>");
17341732
CX("</textarea>");
17351733
CX("</div>"/*textarea wrapper*/);
17361734
CX("</div>"/*#tab-file-content*/);
17371735
}
17381736
@@ -1906,11 +1904,11 @@
19061904
CX("</div>"/*checkboxes*/);
19071905
}
19081906
19091907
{ /******* Commit comment, button, and result manifest *******/
19101908
CX("<fieldset class='fileedit-options commit-message'>"
1911
- "<legend>Message (required)</legend><div>\n");
1909
+ "<legend><label for='fileedit-comment'>Message (required)</label></legend><div>\n");
19121910
/* We have two comment input fields, defaulting to single-line
19131911
** mode. JS code sets up the ability to toggle between single-
19141912
** and multi-line modes. */
19151913
CX("<input type='text' name='comment' "
19161914
"id='fileedit-comment'></input>");
19171915
--- src/fileedit.c
+++ src/fileedit.c
@@ -698,11 +698,10 @@
698 **
699 ** where FILENAME is a repo-relative name as it would appear in the
700 ** vfile table.
701 **
702 ** Options:
703 **
704 ** -R|--repository REPO The repository file to commit to.
705 ** --as FILENAME The repository-side name of the input
706 ** file, relative to the top of the
707 ** repository. Default is the same as the
708 ** input file name.
@@ -1538,11 +1537,10 @@
1538 ** Note that fileedit-glob, by design, is a local-only setting.
1539 ** It does not sync across repository clones, and must be explicitly
1540 ** set on any repositories where this page should be activated.
1541 **
1542 ** Optional query parameters:
1543 **
1544 ** filename=FILENAME Repo-relative path to the file.
1545 ** checkin=VERSION Checkin version, using any unambiguous
1546 ** symbolic version name.
1547 **
1548 ** If passed a filename but no checkin then it will attempt to
@@ -1728,11 +1726,11 @@
1728 "150%", 150, "175%", 175,
1729 "200%", 200, NULL);
1730 CX("</div>");
1731 CX("<div class='flex-container flex-column stretch'>");
1732 CX("<textarea name='content' id='fileedit-content-editor' "
1733 "class='fileedit' rows='25'>");
1734 CX("</textarea>");
1735 CX("</div>"/*textarea wrapper*/);
1736 CX("</div>"/*#tab-file-content*/);
1737 }
1738
@@ -1906,11 +1904,11 @@
1906 CX("</div>"/*checkboxes*/);
1907 }
1908
1909 { /******* Commit comment, button, and result manifest *******/
1910 CX("<fieldset class='fileedit-options commit-message'>"
1911 "<legend>Message (required)</legend><div>\n");
1912 /* We have two comment input fields, defaulting to single-line
1913 ** mode. JS code sets up the ability to toggle between single-
1914 ** and multi-line modes. */
1915 CX("<input type='text' name='comment' "
1916 "id='fileedit-comment'></input>");
1917
--- src/fileedit.c
+++ src/fileedit.c
@@ -698,11 +698,10 @@
698 **
699 ** where FILENAME is a repo-relative name as it would appear in the
700 ** vfile table.
701 **
702 ** Options:
 
703 ** -R|--repository REPO The repository file to commit to.
704 ** --as FILENAME The repository-side name of the input
705 ** file, relative to the top of the
706 ** repository. Default is the same as the
707 ** input file name.
@@ -1538,11 +1537,10 @@
1537 ** Note that fileedit-glob, by design, is a local-only setting.
1538 ** It does not sync across repository clones, and must be explicitly
1539 ** set on any repositories where this page should be activated.
1540 **
1541 ** Optional query parameters:
 
1542 ** filename=FILENAME Repo-relative path to the file.
1543 ** checkin=VERSION Checkin version, using any unambiguous
1544 ** symbolic version name.
1545 **
1546 ** If passed a filename but no checkin then it will attempt to
@@ -1728,11 +1726,11 @@
1726 "150%", 150, "175%", 175,
1727 "200%", 200, NULL);
1728 CX("</div>");
1729 CX("<div class='flex-container flex-column stretch'>");
1730 CX("<textarea name='content' id='fileedit-content-editor' "
1731 "class='fileedit' rows='25' aria-label='Content' title='Content'>");
1732 CX("</textarea>");
1733 CX("</div>"/*textarea wrapper*/);
1734 CX("</div>"/*#tab-file-content*/);
1735 }
1736
@@ -1906,11 +1904,11 @@
1904 CX("</div>"/*checkboxes*/);
1905 }
1906
1907 { /******* Commit comment, button, and result manifest *******/
1908 CX("<fieldset class='fileedit-options commit-message'>"
1909 "<legend><label for='fileedit-comment'>Message (required)</label></legend><div>\n");
1910 /* We have two comment input fields, defaulting to single-line
1911 ** mode. JS code sets up the ability to toggle between single-
1912 ** and multi-line modes. */
1913 CX("<input type='text' name='comment' "
1914 "id='fileedit-comment'></input>");
1915
+1 -1
--- src/finfo.c
+++ src/finfo.c
@@ -302,10 +302,11 @@
302302
/* Values for the debug= query parameter to finfo */
303303
#define FINFO_DEBUG_MLINK 0x01
304304
305305
/*
306306
** WEBPAGE: finfo
307
+**
307308
** Usage:
308309
** * /finfo?name=FILENAME
309310
** * /finfo?name=FILENAME&ci=HASH
310311
**
311312
** Show the change history for a single file. The name=FILENAME query
@@ -316,11 +317,10 @@
316317
** If only the name=FILENAME parameter is supplied (if ci=HASH is omitted)
317318
** then the graph shows all changes to any file while it happened
318319
** to be called FILENAME and changes are not tracked across renames.
319320
**
320321
** Additional query parameters:
321
-**
322322
** a=DATETIME Only show changes after DATETIME
323323
** b=DATETIME Only show changes before DATETIME
324324
** ci=HASH identify a particular version of a file and then
325325
** track changes to that file across renames
326326
** m=HASH Mark this particular file version.
327327
--- src/finfo.c
+++ src/finfo.c
@@ -302,10 +302,11 @@
302 /* Values for the debug= query parameter to finfo */
303 #define FINFO_DEBUG_MLINK 0x01
304
305 /*
306 ** WEBPAGE: finfo
 
307 ** Usage:
308 ** * /finfo?name=FILENAME
309 ** * /finfo?name=FILENAME&ci=HASH
310 **
311 ** Show the change history for a single file. The name=FILENAME query
@@ -316,11 +317,10 @@
316 ** If only the name=FILENAME parameter is supplied (if ci=HASH is omitted)
317 ** then the graph shows all changes to any file while it happened
318 ** to be called FILENAME and changes are not tracked across renames.
319 **
320 ** Additional query parameters:
321 **
322 ** a=DATETIME Only show changes after DATETIME
323 ** b=DATETIME Only show changes before DATETIME
324 ** ci=HASH identify a particular version of a file and then
325 ** track changes to that file across renames
326 ** m=HASH Mark this particular file version.
327
--- src/finfo.c
+++ src/finfo.c
@@ -302,10 +302,11 @@
302 /* Values for the debug= query parameter to finfo */
303 #define FINFO_DEBUG_MLINK 0x01
304
305 /*
306 ** WEBPAGE: finfo
307 **
308 ** Usage:
309 ** * /finfo?name=FILENAME
310 ** * /finfo?name=FILENAME&ci=HASH
311 **
312 ** Show the change history for a single file. The name=FILENAME query
@@ -316,11 +317,10 @@
317 ** If only the name=FILENAME parameter is supplied (if ci=HASH is omitted)
318 ** then the graph shows all changes to any file while it happened
319 ** to be called FILENAME and changes are not tracked across renames.
320 **
321 ** Additional query parameters:
 
322 ** a=DATETIME Only show changes after DATETIME
323 ** b=DATETIME Only show changes before DATETIME
324 ** ci=HASH identify a particular version of a file and then
325 ** track changes to that file across renames
326 ** m=HASH Mark this particular file version.
327
+11 -12
--- src/forum.c
+++ src/forum.c
@@ -501,11 +501,11 @@
501501
zDate = db_text(0, "SELECT datetime(%.17g,toLocal())", p->rDate);
502502
if( p->pEditPrev ){
503503
zPosterName = forum_post_display_name(p->pEditHead, 0);
504504
zEditorName = forum_post_display_name(p, pManifest);
505505
zHist = bHist ? "" : zQuery[0]==0 ? "?hist" : "&hist";
506
- @ <h3 class='forumPostHdr'>(%d(p->sid)\
506
+ @ <h2 class='forumPostHdr'>(%d(p->sid)\
507507
@ .%0*d(fossil_num_digits(p->nEdit))(p->rev)) \
508508
if( fossil_strcmp(zPosterName, zEditorName)==0 ){
509509
@ By %s(zPosterName) on %h(zDate) edited from \
510510
@ %z(href("%R/forumpost/%S?%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
511511
@ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
@@ -515,11 +515,11 @@
515515
@ %z(href("%R/forumpost/%S%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
516516
@ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
517517
}
518518
}else{
519519
zPosterName = forum_post_display_name(p, pManifest);
520
- @ <h3 class='forumPostHdr'>(%d(p->sid)) \
520
+ @ <h2 class='forumPostHdr'>(%d(p->sid)) \
521521
@ By %s(zPosterName) on %h(zDate)
522522
}
523523
fossil_free(zDate);
524524
525525
@@ -553,11 +553,11 @@
553553
554554
/* Provide a link to the raw source code. */
555555
if( !bUnf ){
556556
@ %z(href("%R/forumpost/%!S?raw",p->zUuid))[source]</a>
557557
}
558
- @ </h3>
558
+ @ </h2>
559559
}
560560
561561
/* Check if this post is approved, also if it's by the current user. */
562562
bPrivate = content_is_private(p->fpid);
563563
bSameUser = login_is_individual()
@@ -793,11 +793,10 @@
793793
** its entire thread. The selected posting is enclosed within
794794
** <div class='forumSel'>...</div>. Javascript is used to move the
795795
** selected posting into view after the page loads.
796796
**
797797
** Query parameters:
798
-**
799798
** name=X REQUIRED. The hash of the post to display.
800799
** t=a Automatic display mode, i.e. hierarchical for
801800
** desktop and chronological for mobile. This is the
802801
** default if the "t" query parameter is omitted.
803802
** t=c Show posts in the order they were written.
@@ -820,11 +819,10 @@
820819
** Show all forum messages associated with a particular message thread.
821820
** The result is basically the same as /forumpost except that none of
822821
** the postings in the thread are selected.
823822
**
824823
** Query parameters:
825
-**
826824
** name=X REQUIRED. The hash of any post of the thread.
827825
** t=a Automatic display mode, i.e. hierarchical for
828826
** desktop and chronological for mobile. This is the
829827
** default if the "t" query parameter is omitted.
830828
** t=c Show posts in the order they were written.
@@ -1055,17 +1053,19 @@
10551053
const char *zTitle,
10561054
const char *zMimetype,
10571055
const char *zContent
10581056
){
10591057
if( zTitle ){
1060
- @ Title: <input type="input" name="title" value="%h(zTitle)" size="50"
1061
- @ maxlength="125"><br>
1058
+ @ <label>Title: <input type="input" name="title" value="%h(zTitle)" size="50"
1059
+ @ maxlength="125"></label><br>
10621060
}
1063
- @ %z(href("%R/markup_help"))Markup style</a>:
1061
+ @ <label>Markup style
1062
+ @ %z(href("%R/markup_help"))
1063
+ @ <span class="help-buttonlet processed" title="Help"></span></a>:
10641064
mimetype_option_menu(zMimetype);
1065
- @ <br><textarea aria-label="Content:" name="content" class="wikiedit" \
1066
- @ cols="80" rows="25" wrap="virtual">%h(zContent)</textarea><br>
1065
+ @ </label><br><textarea aria-label="Content" title="Content" name="content" \
1066
+ @ class="wikiedit" cols="80" rows="25" wrap="virtual">%h(zContent)</textarea><br>
10671067
}
10681068
10691069
/*
10701070
** WEBPAGE: forumnew
10711071
** WEBPAGE: forumedit
@@ -1189,12 +1189,12 @@
11891189
11901190
/*
11911191
** WEBPAGE: forume2
11921192
**
11931193
** Edit an existing forum message.
1194
-** Query parameters:
11951194
**
1195
+** Query parameters:
11961196
** fpid=X Hash of the post to be edited. REQUIRED
11971197
*/
11981198
void forumedit_page(void){
11991199
int fpid;
12001200
int froot;
@@ -1379,11 +1379,10 @@
13791379
** The main page for the forum feature. Show a list of recent forum
13801380
** threads. Also show a search box at the top if search is enabled,
13811381
** and a button for creating a new thread, if enabled.
13821382
**
13831383
** Query parameters:
1384
-**
13851384
** n=N The number of threads to show on each page
13861385
** x=X Skip the first X threads
13871386
** s=Y Search for term Y.
13881387
*/
13891388
void forum_main_page(void){
13901389
--- src/forum.c
+++ src/forum.c
@@ -501,11 +501,11 @@
501 zDate = db_text(0, "SELECT datetime(%.17g,toLocal())", p->rDate);
502 if( p->pEditPrev ){
503 zPosterName = forum_post_display_name(p->pEditHead, 0);
504 zEditorName = forum_post_display_name(p, pManifest);
505 zHist = bHist ? "" : zQuery[0]==0 ? "?hist" : "&hist";
506 @ <h3 class='forumPostHdr'>(%d(p->sid)\
507 @ .%0*d(fossil_num_digits(p->nEdit))(p->rev)) \
508 if( fossil_strcmp(zPosterName, zEditorName)==0 ){
509 @ By %s(zPosterName) on %h(zDate) edited from \
510 @ %z(href("%R/forumpost/%S?%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
511 @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
@@ -515,11 +515,11 @@
515 @ %z(href("%R/forumpost/%S%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
516 @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
517 }
518 }else{
519 zPosterName = forum_post_display_name(p, pManifest);
520 @ <h3 class='forumPostHdr'>(%d(p->sid)) \
521 @ By %s(zPosterName) on %h(zDate)
522 }
523 fossil_free(zDate);
524
525
@@ -553,11 +553,11 @@
553
554 /* Provide a link to the raw source code. */
555 if( !bUnf ){
556 @ %z(href("%R/forumpost/%!S?raw",p->zUuid))[source]</a>
557 }
558 @ </h3>
559 }
560
561 /* Check if this post is approved, also if it's by the current user. */
562 bPrivate = content_is_private(p->fpid);
563 bSameUser = login_is_individual()
@@ -793,11 +793,10 @@
793 ** its entire thread. The selected posting is enclosed within
794 ** <div class='forumSel'>...</div>. Javascript is used to move the
795 ** selected posting into view after the page loads.
796 **
797 ** Query parameters:
798 **
799 ** name=X REQUIRED. The hash of the post to display.
800 ** t=a Automatic display mode, i.e. hierarchical for
801 ** desktop and chronological for mobile. This is the
802 ** default if the "t" query parameter is omitted.
803 ** t=c Show posts in the order they were written.
@@ -820,11 +819,10 @@
820 ** Show all forum messages associated with a particular message thread.
821 ** The result is basically the same as /forumpost except that none of
822 ** the postings in the thread are selected.
823 **
824 ** Query parameters:
825 **
826 ** name=X REQUIRED. The hash of any post of the thread.
827 ** t=a Automatic display mode, i.e. hierarchical for
828 ** desktop and chronological for mobile. This is the
829 ** default if the "t" query parameter is omitted.
830 ** t=c Show posts in the order they were written.
@@ -1055,17 +1053,19 @@
1055 const char *zTitle,
1056 const char *zMimetype,
1057 const char *zContent
1058 ){
1059 if( zTitle ){
1060 @ Title: <input type="input" name="title" value="%h(zTitle)" size="50"
1061 @ maxlength="125"><br>
1062 }
1063 @ %z(href("%R/markup_help"))Markup style</a>:
 
 
1064 mimetype_option_menu(zMimetype);
1065 @ <br><textarea aria-label="Content:" name="content" class="wikiedit" \
1066 @ cols="80" rows="25" wrap="virtual">%h(zContent)</textarea><br>
1067 }
1068
1069 /*
1070 ** WEBPAGE: forumnew
1071 ** WEBPAGE: forumedit
@@ -1189,12 +1189,12 @@
1189
1190 /*
1191 ** WEBPAGE: forume2
1192 **
1193 ** Edit an existing forum message.
1194 ** Query parameters:
1195 **
 
1196 ** fpid=X Hash of the post to be edited. REQUIRED
1197 */
1198 void forumedit_page(void){
1199 int fpid;
1200 int froot;
@@ -1379,11 +1379,10 @@
1379 ** The main page for the forum feature. Show a list of recent forum
1380 ** threads. Also show a search box at the top if search is enabled,
1381 ** and a button for creating a new thread, if enabled.
1382 **
1383 ** Query parameters:
1384 **
1385 ** n=N The number of threads to show on each page
1386 ** x=X Skip the first X threads
1387 ** s=Y Search for term Y.
1388 */
1389 void forum_main_page(void){
1390
--- src/forum.c
+++ src/forum.c
@@ -501,11 +501,11 @@
501 zDate = db_text(0, "SELECT datetime(%.17g,toLocal())", p->rDate);
502 if( p->pEditPrev ){
503 zPosterName = forum_post_display_name(p->pEditHead, 0);
504 zEditorName = forum_post_display_name(p, pManifest);
505 zHist = bHist ? "" : zQuery[0]==0 ? "?hist" : "&hist";
506 @ <h2 class='forumPostHdr'>(%d(p->sid)\
507 @ .%0*d(fossil_num_digits(p->nEdit))(p->rev)) \
508 if( fossil_strcmp(zPosterName, zEditorName)==0 ){
509 @ By %s(zPosterName) on %h(zDate) edited from \
510 @ %z(href("%R/forumpost/%S?%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
511 @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
@@ -515,11 +515,11 @@
515 @ %z(href("%R/forumpost/%S%s%s",p->pEditPrev->zUuid,zQuery,zHist))\
516 @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a>
517 }
518 }else{
519 zPosterName = forum_post_display_name(p, pManifest);
520 @ <h2 class='forumPostHdr'>(%d(p->sid)) \
521 @ By %s(zPosterName) on %h(zDate)
522 }
523 fossil_free(zDate);
524
525
@@ -553,11 +553,11 @@
553
554 /* Provide a link to the raw source code. */
555 if( !bUnf ){
556 @ %z(href("%R/forumpost/%!S?raw",p->zUuid))[source]</a>
557 }
558 @ </h2>
559 }
560
561 /* Check if this post is approved, also if it's by the current user. */
562 bPrivate = content_is_private(p->fpid);
563 bSameUser = login_is_individual()
@@ -793,11 +793,10 @@
793 ** its entire thread. The selected posting is enclosed within
794 ** <div class='forumSel'>...</div>. Javascript is used to move the
795 ** selected posting into view after the page loads.
796 **
797 ** Query parameters:
 
798 ** name=X REQUIRED. The hash of the post to display.
799 ** t=a Automatic display mode, i.e. hierarchical for
800 ** desktop and chronological for mobile. This is the
801 ** default if the "t" query parameter is omitted.
802 ** t=c Show posts in the order they were written.
@@ -820,11 +819,10 @@
819 ** Show all forum messages associated with a particular message thread.
820 ** The result is basically the same as /forumpost except that none of
821 ** the postings in the thread are selected.
822 **
823 ** Query parameters:
 
824 ** name=X REQUIRED. The hash of any post of the thread.
825 ** t=a Automatic display mode, i.e. hierarchical for
826 ** desktop and chronological for mobile. This is the
827 ** default if the "t" query parameter is omitted.
828 ** t=c Show posts in the order they were written.
@@ -1055,17 +1053,19 @@
1053 const char *zTitle,
1054 const char *zMimetype,
1055 const char *zContent
1056 ){
1057 if( zTitle ){
1058 @ <label>Title: <input type="input" name="title" value="%h(zTitle)" size="50"
1059 @ maxlength="125"></label><br>
1060 }
1061 @ <label>Markup style
1062 @ %z(href("%R/markup_help"))
1063 @ <span class="help-buttonlet processed" title="Help"></span></a>:
1064 mimetype_option_menu(zMimetype);
1065 @ </label><br><textarea aria-label="Content" title="Content" name="content" \
1066 @ class="wikiedit" cols="80" rows="25" wrap="virtual">%h(zContent)</textarea><br>
1067 }
1068
1069 /*
1070 ** WEBPAGE: forumnew
1071 ** WEBPAGE: forumedit
@@ -1189,12 +1189,12 @@
1189
1190 /*
1191 ** WEBPAGE: forume2
1192 **
1193 ** Edit an existing forum message.
 
1194 **
1195 ** Query parameters:
1196 ** fpid=X Hash of the post to be edited. REQUIRED
1197 */
1198 void forumedit_page(void){
1199 int fpid;
1200 int froot;
@@ -1379,11 +1379,10 @@
1379 ** The main page for the forum feature. Show a list of recent forum
1380 ** threads. Also show a search box at the top if search is enabled,
1381 ** and a button for creating a new thread, if enabled.
1382 **
1383 ** Query parameters:
 
1384 ** n=N The number of threads to show on each page
1385 ** x=X Skip the first X threads
1386 ** s=Y Search for term Y.
1387 */
1388 void forum_main_page(void){
1389
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -10,10 +10,12 @@
1010
const D = window.fossil.dom;
1111
const addToggle = function(diffElem){
1212
const sib = diffElem.previousElementSibling,
1313
btn = sib ? D.addClass(D.checkbox(true), 'diff-toggle') : 0;
1414
if(!sib) return;
15
+ D.attr(btn,'aria-label','Toggle Diff')
16
+ D.attr(btn,'title','Toggle Diff')
1517
D.append(sib,btn);
1618
btn.addEventListener('click', function(){
1719
diffElem.classList.toggle('hidden');
1820
}, false);
1921
};
@@ -638,11 +640,11 @@
638640
const SCROLL_LEN = 25;
639641
const F = window.fossil, D = F.dom, Diff = F.diff;
640642
var lastWidth;
641643
Diff.checkTableWidth = function f(force){
642644
if(undefined === f.contentNode){
643
- f.contentNode = document.querySelector('div.content');
645
+ f.contentNode = document.querySelector('main.content');
644646
}
645647
force = true;
646648
const parentCS = window.getComputedStyle(f.contentNode);
647649
const parentWidth = (
648650
//document.body.clientWidth;
649651
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -10,10 +10,12 @@
10 const D = window.fossil.dom;
11 const addToggle = function(diffElem){
12 const sib = diffElem.previousElementSibling,
13 btn = sib ? D.addClass(D.checkbox(true), 'diff-toggle') : 0;
14 if(!sib) return;
 
 
15 D.append(sib,btn);
16 btn.addEventListener('click', function(){
17 diffElem.classList.toggle('hidden');
18 }, false);
19 };
@@ -638,11 +640,11 @@
638 const SCROLL_LEN = 25;
639 const F = window.fossil, D = F.dom, Diff = F.diff;
640 var lastWidth;
641 Diff.checkTableWidth = function f(force){
642 if(undefined === f.contentNode){
643 f.contentNode = document.querySelector('div.content');
644 }
645 force = true;
646 const parentCS = window.getComputedStyle(f.contentNode);
647 const parentWidth = (
648 //document.body.clientWidth;
649
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -10,10 +10,12 @@
10 const D = window.fossil.dom;
11 const addToggle = function(diffElem){
12 const sib = diffElem.previousElementSibling,
13 btn = sib ? D.addClass(D.checkbox(true), 'diff-toggle') : 0;
14 if(!sib) return;
15 D.attr(btn,'aria-label','Toggle Diff')
16 D.attr(btn,'title','Toggle Diff')
17 D.append(sib,btn);
18 btn.addEventListener('click', function(){
19 diffElem.classList.toggle('hidden');
20 }, false);
21 };
@@ -638,11 +640,11 @@
640 const SCROLL_LEN = 25;
641 const F = window.fossil, D = F.dom, Diff = F.diff;
642 var lastWidth;
643 Diff.checkTableWidth = function f(force){
644 if(undefined === f.contentNode){
645 f.contentNode = document.querySelector('main.content');
646 }
647 force = true;
648 const parentCS = window.getComputedStyle(f.contentNode);
649 const parentWidth = (
650 //document.body.clientWidth;
651
+29 -11
--- src/fossil.dom.js
+++ src/fossil.dom.js
@@ -262,30 +262,44 @@
262262
element added to it. If legendText is an HTMLElement then is is
263263
assumed to be a LEGEND and is appended as-is, else it is assumed
264264
(if truthy) to be a value suitable for passing to
265265
dom.append(aLegendElement,...).
266266
*/
267
- dom.fieldset = function(legendText){
267
+ dom.fieldset = function(legendText, labelFor){
268268
const fs = this.create('fieldset');
269269
if(legendText){
270
- this.append(
271
- fs,
272
- (legendText instanceof HTMLElement)
273
- ? legendText
274
- : this.append(this.legend(legendText))
275
- );
270
+ if(labelFor){
271
+ this.append(
272
+ fs,
273
+ (legendText instanceof HTMLElement)
274
+ ? legendText
275
+ : this.append(this.legend(legendText, labelFor))
276
+ );
277
+ } else {
278
+ this.append(
279
+ fs,
280
+ (legendText instanceof HTMLElement)
281
+ ? legendText
282
+ : this.append(this.legend(legendText))
283
+ );
284
+ }
276285
}
277286
return fs;
278287
};
279288
/**
280289
Returns a new LEGEND legend element. The given argument, if
281290
not falsy, is append()ed to the element (so it may be a string
282291
or DOM element.
283292
*/
284
- dom.legend = function(legendText){
293
+ dom.legend = function(legendText, labelFor){
285294
const rc = this.create('legend');
286
- if(legendText) this.append(rc, legendText);
295
+ if(legendText) {
296
+ if(labelFor){
297
+ legendText = this.label(labelFor,legendText)
298
+ }
299
+ this.append(rc, legendText);
300
+ }
287301
return rc;
288302
};
289303
290304
/**
291305
Appends each argument after the first to the first argument
@@ -318,12 +332,16 @@
318332
parent.appendChild(e);
319333
}
320334
return parent;
321335
};
322336
323
- dom.input = function(type){
324
- return this.attr(this.create('input'), 'type', type);
337
+ dom.input = function(type, id){
338
+ if(id){
339
+ return this.attr(this.create('input'), 'type', type, 'id', id);
340
+ } else {
341
+ return this.attr(this.create('input'), 'type', type);
342
+ }
325343
};
326344
/**
327345
Returns a new CHECKBOX input element.
328346
329347
Usages:
330348
--- src/fossil.dom.js
+++ src/fossil.dom.js
@@ -262,30 +262,44 @@
262 element added to it. If legendText is an HTMLElement then is is
263 assumed to be a LEGEND and is appended as-is, else it is assumed
264 (if truthy) to be a value suitable for passing to
265 dom.append(aLegendElement,...).
266 */
267 dom.fieldset = function(legendText){
268 const fs = this.create('fieldset');
269 if(legendText){
270 this.append(
271 fs,
272 (legendText instanceof HTMLElement)
273 ? legendText
274 : this.append(this.legend(legendText))
275 );
 
 
 
 
 
 
 
 
 
276 }
277 return fs;
278 };
279 /**
280 Returns a new LEGEND legend element. The given argument, if
281 not falsy, is append()ed to the element (so it may be a string
282 or DOM element.
283 */
284 dom.legend = function(legendText){
285 const rc = this.create('legend');
286 if(legendText) this.append(rc, legendText);
 
 
 
 
 
287 return rc;
288 };
289
290 /**
291 Appends each argument after the first to the first argument
@@ -318,12 +332,16 @@
318 parent.appendChild(e);
319 }
320 return parent;
321 };
322
323 dom.input = function(type){
324 return this.attr(this.create('input'), 'type', type);
 
 
 
 
325 };
326 /**
327 Returns a new CHECKBOX input element.
328
329 Usages:
330
--- src/fossil.dom.js
+++ src/fossil.dom.js
@@ -262,30 +262,44 @@
262 element added to it. If legendText is an HTMLElement then is is
263 assumed to be a LEGEND and is appended as-is, else it is assumed
264 (if truthy) to be a value suitable for passing to
265 dom.append(aLegendElement,...).
266 */
267 dom.fieldset = function(legendText, labelFor){
268 const fs = this.create('fieldset');
269 if(legendText){
270 if(labelFor){
271 this.append(
272 fs,
273 (legendText instanceof HTMLElement)
274 ? legendText
275 : this.append(this.legend(legendText, labelFor))
276 );
277 } else {
278 this.append(
279 fs,
280 (legendText instanceof HTMLElement)
281 ? legendText
282 : this.append(this.legend(legendText))
283 );
284 }
285 }
286 return fs;
287 };
288 /**
289 Returns a new LEGEND legend element. The given argument, if
290 not falsy, is append()ed to the element (so it may be a string
291 or DOM element.
292 */
293 dom.legend = function(legendText, labelFor){
294 const rc = this.create('legend');
295 if(legendText) {
296 if(labelFor){
297 legendText = this.label(labelFor,legendText)
298 }
299 this.append(rc, legendText);
300 }
301 return rc;
302 };
303
304 /**
305 Appends each argument after the first to the first argument
@@ -318,12 +332,16 @@
332 parent.appendChild(e);
333 }
334 return parent;
335 };
336
337 dom.input = function(type, id){
338 if(id){
339 return this.attr(this.create('input'), 'type', type, 'id', id);
340 } else {
341 return this.attr(this.create('input'), 'type', type);
342 }
343 };
344 /**
345 Returns a new CHECKBOX input element.
346
347 Usages:
348
--- src/fossil.page.brlist.js
+++ src/fossil.page.brlist.js
@@ -10,11 +10,11 @@
1010
* For the time being, continueing without 'const' and 'indexOf'
1111
* (but that may be reconsidered later).
1212
*/
1313
window.addEventListener( 'load', function() {
1414
15
-var submenu = document.querySelector("div.submenu");
15
+var submenu = document.querySelector("nav.submenu");
1616
var anchor = document.createElement("A");
1717
var brlistDataObj = document.getElementById("brlist-data");
1818
var brlistDataTxt = brlistDataObj.textContent || brlistDataObj.innerText;
1919
var brlistData = JSON.parse(brlistDataTxt);
2020
anchor.classList.add("label");
2121
--- src/fossil.page.brlist.js
+++ src/fossil.page.brlist.js
@@ -10,11 +10,11 @@
10 * For the time being, continueing without 'const' and 'indexOf'
11 * (but that may be reconsidered later).
12 */
13 window.addEventListener( 'load', function() {
14
15 var submenu = document.querySelector("div.submenu");
16 var anchor = document.createElement("A");
17 var brlistDataObj = document.getElementById("brlist-data");
18 var brlistDataTxt = brlistDataObj.textContent || brlistDataObj.innerText;
19 var brlistData = JSON.parse(brlistDataTxt);
20 anchor.classList.add("label");
21
--- src/fossil.page.brlist.js
+++ src/fossil.page.brlist.js
@@ -10,11 +10,11 @@
10 * For the time being, continueing without 'const' and 'indexOf'
11 * (but that may be reconsidered later).
12 */
13 window.addEventListener( 'load', function() {
14
15 var submenu = document.querySelector("nav.submenu");
16 var anchor = document.createElement("A");
17 var brlistDataObj = document.getElementById("brlist-data");
18 var brlistDataTxt = brlistDataObj.textContent || brlistDataObj.innerText;
19 var brlistData = JSON.parse(brlistDataTxt);
20 anchor.classList.add("label");
21
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -76,16 +76,16 @@
7676
7777
While we're here, we also use this to cap the max-height
7878
of the input field so that pasting huge text does not scroll
7979
the upper area of the input widget off-screen. */
8080
const elemsToCount = [
81
- document.querySelector('body > div.header'),
82
- document.querySelector('body > div.mainmenu'),
81
+ document.querySelector('body > header.header'),
82
+ document.querySelector('body > nav.mainmenu'),
8383
document.querySelector('body > #hbdrop'),
84
- document.querySelector('body > div.footer')
84
+ document.querySelector('body > footer.footer')
8585
];
86
- const contentArea = E1('div.content');
86
+ const contentArea = E1('main.content');
8787
const bcl = document.body.classList;
8888
const resized = function f(){
8989
if(f.$disabled) return;
9090
const wh = window.innerHeight,
9191
com = bcl.contains('chat-only-mode');
@@ -137,11 +137,11 @@
137137
btnAttach: E1('#chat-button-attach'),
138138
inputX: E1('#chat-input-field-x'),
139139
input1: E1('#chat-input-field-single'),
140140
inputM: E1('#chat-input-field-multi'),
141141
inputFile: E1('#chat-input-file'),
142
- contentDiv: E1('div.content'),
142
+ contentDiv: E1('main.content'),
143143
viewConfig: E1('#chat-config'),
144144
viewPreview: E1('#chat-preview'),
145145
previewContent: E1('#chat-preview-content'),
146146
btnPreview: E1('#chat-button-preview'),
147147
views: document.querySelectorAll('.chat-view'),
@@ -324,13 +324,13 @@
324324
*/
325325
chatOnlyMode: function f(yes){
326326
if(undefined === f.elemsToToggle){
327327
f.elemsToToggle = [];
328328
document.querySelectorAll(
329
- ["body > div.header",
330
- "body > div.mainmenu",
331
- "body > div.footer",
329
+ ["body > header.header",
330
+ "body > nav.mainmenu",
331
+ "body > footer.footer",
332332
"#debugMsg"
333333
].join(',')
334334
).forEach((e)=>f.elemsToToggle.push(e));
335335
}
336336
if(!arguments.length) yes = true;
@@ -1724,16 +1724,18 @@
17241724
const label = op.label
17251725
? D.append(D.label(),op.label) : undefined;
17261726
const labelWrapper = D.addClass(D.div(), 'label-wrapper');
17271727
var hint;
17281728
if(op.hint){
1729
- hint = D.append(D.addClass(D.label(),'hint'),op.hint);
1729
+ hint = D.append(D.addClass(D.span(),'hint'),op.hint);
17301730
}
17311731
if(op.hasOwnProperty('select')){
17321732
const col0 = D.addClass(D.span(/*empty, but for spacing*/),
17331733
'toggle-wrapper');
17341734
D.append(menuEntry, labelWrapper, col0);
1735
+ D.attr(op.select,'aria-label',op.hint);
1736
+ D.attr(op.select,'title',op.hint);
17351737
D.append(labelWrapper, op.select);
17361738
if(hint) D.append(labelWrapper, hint);
17371739
if(label) D.append(label);
17381740
if(op.callback){
17391741
op.select.addEventListener('change', (ev)=>op.callback(ev), false);
@@ -1745,12 +1747,11 @@
17451747
const key = op.boolValue;
17461748
op.boolValue = ()=>Chat.settings.getBool(key);
17471749
op.persistentSetting = key;
17481750
}
17491751
const check = op.checkbox
1750
- = D.attr(D.checkbox(1, op.boolValue()),
1751
- 'aria-label', op.label);
1752
+ = D.attr(D.checkbox(1, op.boolValue()));
17521753
const id = 'cfgopt'+f.$id;
17531754
const col0 = D.addClass(D.span(), 'toggle-wrapper');
17541755
check.checked = op.boolValue();
17551756
op.checkbox = check;
17561757
D.attr(check, 'id', id);
17571758
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -76,16 +76,16 @@
76
77 While we're here, we also use this to cap the max-height
78 of the input field so that pasting huge text does not scroll
79 the upper area of the input widget off-screen. */
80 const elemsToCount = [
81 document.querySelector('body > div.header'),
82 document.querySelector('body > div.mainmenu'),
83 document.querySelector('body > #hbdrop'),
84 document.querySelector('body > div.footer')
85 ];
86 const contentArea = E1('div.content');
87 const bcl = document.body.classList;
88 const resized = function f(){
89 if(f.$disabled) return;
90 const wh = window.innerHeight,
91 com = bcl.contains('chat-only-mode');
@@ -137,11 +137,11 @@
137 btnAttach: E1('#chat-button-attach'),
138 inputX: E1('#chat-input-field-x'),
139 input1: E1('#chat-input-field-single'),
140 inputM: E1('#chat-input-field-multi'),
141 inputFile: E1('#chat-input-file'),
142 contentDiv: E1('div.content'),
143 viewConfig: E1('#chat-config'),
144 viewPreview: E1('#chat-preview'),
145 previewContent: E1('#chat-preview-content'),
146 btnPreview: E1('#chat-button-preview'),
147 views: document.querySelectorAll('.chat-view'),
@@ -324,13 +324,13 @@
324 */
325 chatOnlyMode: function f(yes){
326 if(undefined === f.elemsToToggle){
327 f.elemsToToggle = [];
328 document.querySelectorAll(
329 ["body > div.header",
330 "body > div.mainmenu",
331 "body > div.footer",
332 "#debugMsg"
333 ].join(',')
334 ).forEach((e)=>f.elemsToToggle.push(e));
335 }
336 if(!arguments.length) yes = true;
@@ -1724,16 +1724,18 @@
1724 const label = op.label
1725 ? D.append(D.label(),op.label) : undefined;
1726 const labelWrapper = D.addClass(D.div(), 'label-wrapper');
1727 var hint;
1728 if(op.hint){
1729 hint = D.append(D.addClass(D.label(),'hint'),op.hint);
1730 }
1731 if(op.hasOwnProperty('select')){
1732 const col0 = D.addClass(D.span(/*empty, but for spacing*/),
1733 'toggle-wrapper');
1734 D.append(menuEntry, labelWrapper, col0);
 
 
1735 D.append(labelWrapper, op.select);
1736 if(hint) D.append(labelWrapper, hint);
1737 if(label) D.append(label);
1738 if(op.callback){
1739 op.select.addEventListener('change', (ev)=>op.callback(ev), false);
@@ -1745,12 +1747,11 @@
1745 const key = op.boolValue;
1746 op.boolValue = ()=>Chat.settings.getBool(key);
1747 op.persistentSetting = key;
1748 }
1749 const check = op.checkbox
1750 = D.attr(D.checkbox(1, op.boolValue()),
1751 'aria-label', op.label);
1752 const id = 'cfgopt'+f.$id;
1753 const col0 = D.addClass(D.span(), 'toggle-wrapper');
1754 check.checked = op.boolValue();
1755 op.checkbox = check;
1756 D.attr(check, 'id', id);
1757
--- src/fossil.page.chat.js
+++ src/fossil.page.chat.js
@@ -76,16 +76,16 @@
76
77 While we're here, we also use this to cap the max-height
78 of the input field so that pasting huge text does not scroll
79 the upper area of the input widget off-screen. */
80 const elemsToCount = [
81 document.querySelector('body > header.header'),
82 document.querySelector('body > nav.mainmenu'),
83 document.querySelector('body > #hbdrop'),
84 document.querySelector('body > footer.footer')
85 ];
86 const contentArea = E1('main.content');
87 const bcl = document.body.classList;
88 const resized = function f(){
89 if(f.$disabled) return;
90 const wh = window.innerHeight,
91 com = bcl.contains('chat-only-mode');
@@ -137,11 +137,11 @@
137 btnAttach: E1('#chat-button-attach'),
138 inputX: E1('#chat-input-field-x'),
139 input1: E1('#chat-input-field-single'),
140 inputM: E1('#chat-input-field-multi'),
141 inputFile: E1('#chat-input-file'),
142 contentDiv: E1('main.content'),
143 viewConfig: E1('#chat-config'),
144 viewPreview: E1('#chat-preview'),
145 previewContent: E1('#chat-preview-content'),
146 btnPreview: E1('#chat-button-preview'),
147 views: document.querySelectorAll('.chat-view'),
@@ -324,13 +324,13 @@
324 */
325 chatOnlyMode: function f(yes){
326 if(undefined === f.elemsToToggle){
327 f.elemsToToggle = [];
328 document.querySelectorAll(
329 ["body > header.header",
330 "body > nav.mainmenu",
331 "body > footer.footer",
332 "#debugMsg"
333 ].join(',')
334 ).forEach((e)=>f.elemsToToggle.push(e));
335 }
336 if(!arguments.length) yes = true;
@@ -1724,16 +1724,18 @@
1724 const label = op.label
1725 ? D.append(D.label(),op.label) : undefined;
1726 const labelWrapper = D.addClass(D.div(), 'label-wrapper');
1727 var hint;
1728 if(op.hint){
1729 hint = D.append(D.addClass(D.span(),'hint'),op.hint);
1730 }
1731 if(op.hasOwnProperty('select')){
1732 const col0 = D.addClass(D.span(/*empty, but for spacing*/),
1733 'toggle-wrapper');
1734 D.append(menuEntry, labelWrapper, col0);
1735 D.attr(op.select,'aria-label',op.hint);
1736 D.attr(op.select,'title',op.hint);
1737 D.append(labelWrapper, op.select);
1738 if(hint) D.append(labelWrapper, hint);
1739 if(label) D.append(label);
1740 if(op.callback){
1741 op.select.addEventListener('change', (ev)=>op.callback(ev), false);
@@ -1745,12 +1747,11 @@
1747 const key = op.boolValue;
1748 op.boolValue = ()=>Chat.settings.getBool(key);
1749 op.persistentSetting = key;
1750 }
1751 const check = op.checkbox
1752 = D.attr(D.checkbox(1, op.boolValue()));
 
1753 const id = 'cfgopt'+f.$id;
1754 const col0 = D.addClass(D.span(), 'toggle-wrapper');
1755 check.checked = op.boolValue();
1756 op.checkbox = check;
1757 D.attr(check, 'id', id);
1758
--- src/fossil.page.fileedit.js
+++ src/fossil.page.fileedit.js
@@ -392,24 +392,26 @@
392392
selFiles = this.e.selectFiles
393393
= D.addClass(D.select(), 'file-list'),
394394
btnLoad = this.e.btnLoadFile =
395395
D.addClass(D.button("Load file"), "flex-shrink"),
396396
filesLabel = this.e.fileListLabel =
397
- D.addClass(D.div(),'flex-shrink','file-list-label'),
397
+ D.addClass(D.label('editable-file-list'),'flex-shrink','file-list-label'),
398398
ciLabelWrapper = D.addClass(
399399
D.div(), 'flex-container','flex-row', 'flex-shrink',
400400
'stretch', 'child-gap-small'
401401
),
402402
btnReload = D.addClass(
403403
D.button('Reload'), 'flex-shrink'
404404
),
405
- ciLabel = this.e.ciListLabel =
406
- D.addClass(D.span(),'flex-shrink','checkin-list-label')
405
+ ciLabel = this.e.ciListLabel =
406
+ D.addClass(D.label('open-leaf-list'),'flex-shrink','checkin-list-label')
407407
;
408
+ D.attr(selCi, 'id',"open-leaf-list");
408409
D.attr(selCi, 'title',"The list of opened leaves.");
409410
D.attr(selFiles, 'title',
410411
"The list of editable files for the selected checkin.");
412
+ D.attr(selFiles, 'id',"editable-file-list");
411413
D.attr(btnLoad, 'title',
412414
"Load the selected file into the editor.");
413415
D.disable(selCi, selFiles, btnLoad);
414416
D.attr(selFiles, 'size', 12);
415417
D.append(
@@ -472,13 +474,14 @@
472474
'Locally-edited files. Timestamps are the last local edit time. ',
473475
'Only the ',P.config.defaultMaxStashSize,' most recent files ',
474476
'are retained. Saving or reloading a file removes it from this list. ',
475477
D.append(D.code(),F.storage.storageImplName()),
476478
' = ',F.storage.storageHelpDescription()
477
- );
478
-
479
- D.append(wrapper, "Local edits (",
479
+ ),
480
+ label = D.label('local-edits', "Local edits");
481
+ D.attr(sel, 'id', 'local-edits');
482
+ D.append(wrapper, label, " (",
480483
D.append(D.code(),
481484
F.storage.storageImplName()),
482485
"):",
483486
btnHelp, sel, btnClear);
484487
F.helpButtonlets.setup(btnHelp);
485488
--- src/fossil.page.fileedit.js
+++ src/fossil.page.fileedit.js
@@ -392,24 +392,26 @@
392 selFiles = this.e.selectFiles
393 = D.addClass(D.select(), 'file-list'),
394 btnLoad = this.e.btnLoadFile =
395 D.addClass(D.button("Load file"), "flex-shrink"),
396 filesLabel = this.e.fileListLabel =
397 D.addClass(D.div(),'flex-shrink','file-list-label'),
398 ciLabelWrapper = D.addClass(
399 D.div(), 'flex-container','flex-row', 'flex-shrink',
400 'stretch', 'child-gap-small'
401 ),
402 btnReload = D.addClass(
403 D.button('Reload'), 'flex-shrink'
404 ),
405 ciLabel = this.e.ciListLabel =
406 D.addClass(D.span(),'flex-shrink','checkin-list-label')
407 ;
 
408 D.attr(selCi, 'title',"The list of opened leaves.");
409 D.attr(selFiles, 'title',
410 "The list of editable files for the selected checkin.");
 
411 D.attr(btnLoad, 'title',
412 "Load the selected file into the editor.");
413 D.disable(selCi, selFiles, btnLoad);
414 D.attr(selFiles, 'size', 12);
415 D.append(
@@ -472,13 +474,14 @@
472 'Locally-edited files. Timestamps are the last local edit time. ',
473 'Only the ',P.config.defaultMaxStashSize,' most recent files ',
474 'are retained. Saving or reloading a file removes it from this list. ',
475 D.append(D.code(),F.storage.storageImplName()),
476 ' = ',F.storage.storageHelpDescription()
477 );
478
479 D.append(wrapper, "Local edits (",
 
480 D.append(D.code(),
481 F.storage.storageImplName()),
482 "):",
483 btnHelp, sel, btnClear);
484 F.helpButtonlets.setup(btnHelp);
485
--- src/fossil.page.fileedit.js
+++ src/fossil.page.fileedit.js
@@ -392,24 +392,26 @@
392 selFiles = this.e.selectFiles
393 = D.addClass(D.select(), 'file-list'),
394 btnLoad = this.e.btnLoadFile =
395 D.addClass(D.button("Load file"), "flex-shrink"),
396 filesLabel = this.e.fileListLabel =
397 D.addClass(D.label('editable-file-list'),'flex-shrink','file-list-label'),
398 ciLabelWrapper = D.addClass(
399 D.div(), 'flex-container','flex-row', 'flex-shrink',
400 'stretch', 'child-gap-small'
401 ),
402 btnReload = D.addClass(
403 D.button('Reload'), 'flex-shrink'
404 ),
405 ciLabel = this.e.ciListLabel =
406 D.addClass(D.label('open-leaf-list'),'flex-shrink','checkin-list-label')
407 ;
408 D.attr(selCi, 'id',"open-leaf-list");
409 D.attr(selCi, 'title',"The list of opened leaves.");
410 D.attr(selFiles, 'title',
411 "The list of editable files for the selected checkin.");
412 D.attr(selFiles, 'id',"editable-file-list");
413 D.attr(btnLoad, 'title',
414 "Load the selected file into the editor.");
415 D.disable(selCi, selFiles, btnLoad);
416 D.attr(selFiles, 'size', 12);
417 D.append(
@@ -472,13 +474,14 @@
474 'Locally-edited files. Timestamps are the last local edit time. ',
475 'Only the ',P.config.defaultMaxStashSize,' most recent files ',
476 'are retained. Saving or reloading a file removes it from this list. ',
477 D.append(D.code(),F.storage.storageImplName()),
478 ' = ',F.storage.storageHelpDescription()
479 ),
480 label = D.label('local-edits', "Local edits");
481 D.attr(sel, 'id', 'local-edits');
482 D.append(wrapper, label, " (",
483 D.append(D.code(),
484 F.storage.storageImplName()),
485 "):",
486 btnHelp, sel, btnClear);
487 F.helpButtonlets.setup(btnHelp);
488
--- src/fossil.page.pikchrshow.js
+++ src/fossil.page.pikchrshow.js
@@ -146,10 +146,12 @@
146146
const selectScript = P.e.selectScript = D.select(),
147147
cbAutoPreview = P.e.cbAutoPreview =
148148
D.attr(D.checkbox(true),'id', 'cb-auto-preview'),
149149
cbWrap = D.addClass(D.div(),'input-with-label')
150150
;
151
+ D.attr(selectScript, 'aria-label', 'Example Scripts');
152
+ D.attr(selectScript, 'title', 'Example Scripts');
151153
D.append(
152154
cbWrap,
153155
selectScript,
154156
cbAutoPreview,
155157
D.label(cbAutoPreview,"Auto-preview?"),
156158
--- src/fossil.page.pikchrshow.js
+++ src/fossil.page.pikchrshow.js
@@ -146,10 +146,12 @@
146 const selectScript = P.e.selectScript = D.select(),
147 cbAutoPreview = P.e.cbAutoPreview =
148 D.attr(D.checkbox(true),'id', 'cb-auto-preview'),
149 cbWrap = D.addClass(D.div(),'input-with-label')
150 ;
 
 
151 D.append(
152 cbWrap,
153 selectScript,
154 cbAutoPreview,
155 D.label(cbAutoPreview,"Auto-preview?"),
156
--- src/fossil.page.pikchrshow.js
+++ src/fossil.page.pikchrshow.js
@@ -146,10 +146,12 @@
146 const selectScript = P.e.selectScript = D.select(),
147 cbAutoPreview = P.e.cbAutoPreview =
148 D.attr(D.checkbox(true),'id', 'cb-auto-preview'),
149 cbWrap = D.addClass(D.div(),'input-with-label')
150 ;
151 D.attr(selectScript, 'aria-label', 'Example Scripts');
152 D.attr(selectScript, 'title', 'Example Scripts');
153 D.append(
154 cbWrap,
155 selectScript,
156 cbAutoPreview,
157 D.label(cbAutoPreview,"Auto-preview?"),
158
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -371,10 +371,12 @@
371371
372372
////////////////////////////////////////////////////////////
373373
// Set up selection list of predefined scripts...
374374
if(true){
375375
const selectScript = PS.e.selectScript = D.select();
376
+ D.attr(selectScript, 'aria-label', 'Example Scripts');
377
+ D.attr(selectScript, 'title', 'Example Scripts');
376378
D.append(PS.e.zoneInputButtons, selectScript);
377379
PS.predefinedPiks.forEach(function(script,ndx){
378380
const opt = D.option(script.code ? script.code.trim() :'', script.name);
379381
D.append(selectScript, opt);
380382
if(!ndx) selectScript.selectedIndex = 0 /*timing/ordering workaround*/;
@@ -479,13 +481,13 @@
479481
off-screen. */
480482
const appViews = EAll('.app-view');
481483
const elemsToCount = [
482484
/* Elements which we need to always count in the
483485
visible body size. */
484
- E('body > div.header'),
485
- E('body > div.mainmenu'),
486
- E('body > div.footer')
486
+ E('body > header.header'),
487
+ E('body > nav.mainmenu'),
488
+ E('body > footer.footer')
487489
];
488490
const resized = function f(){
489491
if(f.$disabled) return;
490492
const wh = window.innerHeight;
491493
var ht;
492494
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -371,10 +371,12 @@
371
372 ////////////////////////////////////////////////////////////
373 // Set up selection list of predefined scripts...
374 if(true){
375 const selectScript = PS.e.selectScript = D.select();
 
 
376 D.append(PS.e.zoneInputButtons, selectScript);
377 PS.predefinedPiks.forEach(function(script,ndx){
378 const opt = D.option(script.code ? script.code.trim() :'', script.name);
379 D.append(selectScript, opt);
380 if(!ndx) selectScript.selectedIndex = 0 /*timing/ordering workaround*/;
@@ -479,13 +481,13 @@
479 off-screen. */
480 const appViews = EAll('.app-view');
481 const elemsToCount = [
482 /* Elements which we need to always count in the
483 visible body size. */
484 E('body > div.header'),
485 E('body > div.mainmenu'),
486 E('body > div.footer')
487 ];
488 const resized = function f(){
489 if(f.$disabled) return;
490 const wh = window.innerHeight;
491 var ht;
492
--- src/fossil.page.pikchrshowasm.js
+++ src/fossil.page.pikchrshowasm.js
@@ -371,10 +371,12 @@
371
372 ////////////////////////////////////////////////////////////
373 // Set up selection list of predefined scripts...
374 if(true){
375 const selectScript = PS.e.selectScript = D.select();
376 D.attr(selectScript, 'aria-label', 'Example Scripts');
377 D.attr(selectScript, 'title', 'Example Scripts');
378 D.append(PS.e.zoneInputButtons, selectScript);
379 PS.predefinedPiks.forEach(function(script,ndx){
380 const opt = D.option(script.code ? script.code.trim() :'', script.name);
381 D.append(selectScript, opt);
382 if(!ndx) selectScript.selectedIndex = 0 /*timing/ordering workaround*/;
@@ -479,13 +481,13 @@
481 off-screen. */
482 const appViews = EAll('.app-view');
483 const elemsToCount = [
484 /* Elements which we need to always count in the
485 visible body size. */
486 E('body > header.header'),
487 E('body > nav.mainmenu'),
488 E('body > footer.footer')
489 ];
490 const resized = function f(){
491 if(f.$disabled) return;
492 const wh = window.innerHeight;
493 var ht;
494
--- src/fossil.page.wikiedit.js
+++ src/fossil.page.wikiedit.js
@@ -550,14 +550,15 @@
550550
this.e.select = sel;
551551
D.addClass(parentElem, 'WikiList');
552552
D.clearElement(parentElem);
553553
D.append(
554554
parentElem,
555
- D.append(D.fieldset("Select a page to edit"),
555
+ D.append(D.fieldset("Select a page to edit", 'select-page'),
556556
sel)
557557
);
558558
D.attr(sel, 'size', 12);
559
+ D.attr(sel, 'id', 'select-page');
559560
D.option(D.disable(D.clearElement(sel)), undefined, "Loading...");
560561
561562
/** Set up filter checkboxes for the various types
562563
of wiki pages... */
563564
const fsFilter = D.addClass(D.fieldset("Page types"),"page-types-list"),
@@ -627,13 +628,13 @@
627628
D.append(D.span(), getEditMarker(getEditMarker.NEW,false)," = new/unsaved"),
628629
D.append(D.span(), getEditMarker(getEditMarker.MODIFIED,false)," = has local edits"),
629630
D.append(D.span(), getEditMarker(getEditMarker.DELETED,false)," = is empty (deleted)")
630631
);
631632
632
- const fsNewPage = D.fieldset("Create new page"),
633
+ const fsNewPage = D.fieldset("Create new page", 'new-page'),
633634
fsNewPageBody = D.div(),
634
- newPageName = D.input('text'),
635
+ newPageName = D.input('text', 'new-page'),
635636
newPageBtn = D.button("Add page locally")
636637
;
637638
D.append(parentElem, fsNewPage);
638639
D.append(fsNewPage, fsNewPageBody);
639640
D.addClass(fsNewPageBody, 'flex-container', 'flex-column', 'new-page');
@@ -697,12 +698,14 @@
697698
'Locally-edited wiki pages. Timestamps are the last local edit time. ',
698699
'Only the ',P.config.defaultMaxStashSize,' most recent pages ',
699700
'are retained. Saving or reloading a file removes it from this list. ',
700701
D.append(D.code(),F.storage.storageImplName()),
701702
' = ',F.storage.storageHelpDescription()
702
- );
703
- D.append(wrapper, "Local edits (",
703
+ ),
704
+ label = D.label('local-edits', "Local edits");
705
+ D.attr(sel, 'id', 'local-edits');
706
+ D.append(wrapper, label, " (",
704707
D.append(D.code(),
705708
F.storage.storageImplName()),
706709
"):",
707710
btnHelp, sel, btnClear);
708711
F.helpButtonlets.setup(btnHelp);
709712
--- src/fossil.page.wikiedit.js
+++ src/fossil.page.wikiedit.js
@@ -550,14 +550,15 @@
550 this.e.select = sel;
551 D.addClass(parentElem, 'WikiList');
552 D.clearElement(parentElem);
553 D.append(
554 parentElem,
555 D.append(D.fieldset("Select a page to edit"),
556 sel)
557 );
558 D.attr(sel, 'size', 12);
 
559 D.option(D.disable(D.clearElement(sel)), undefined, "Loading...");
560
561 /** Set up filter checkboxes for the various types
562 of wiki pages... */
563 const fsFilter = D.addClass(D.fieldset("Page types"),"page-types-list"),
@@ -627,13 +628,13 @@
627 D.append(D.span(), getEditMarker(getEditMarker.NEW,false)," = new/unsaved"),
628 D.append(D.span(), getEditMarker(getEditMarker.MODIFIED,false)," = has local edits"),
629 D.append(D.span(), getEditMarker(getEditMarker.DELETED,false)," = is empty (deleted)")
630 );
631
632 const fsNewPage = D.fieldset("Create new page"),
633 fsNewPageBody = D.div(),
634 newPageName = D.input('text'),
635 newPageBtn = D.button("Add page locally")
636 ;
637 D.append(parentElem, fsNewPage);
638 D.append(fsNewPage, fsNewPageBody);
639 D.addClass(fsNewPageBody, 'flex-container', 'flex-column', 'new-page');
@@ -697,12 +698,14 @@
697 'Locally-edited wiki pages. Timestamps are the last local edit time. ',
698 'Only the ',P.config.defaultMaxStashSize,' most recent pages ',
699 'are retained. Saving or reloading a file removes it from this list. ',
700 D.append(D.code(),F.storage.storageImplName()),
701 ' = ',F.storage.storageHelpDescription()
702 );
703 D.append(wrapper, "Local edits (",
 
 
704 D.append(D.code(),
705 F.storage.storageImplName()),
706 "):",
707 btnHelp, sel, btnClear);
708 F.helpButtonlets.setup(btnHelp);
709
--- src/fossil.page.wikiedit.js
+++ src/fossil.page.wikiedit.js
@@ -550,14 +550,15 @@
550 this.e.select = sel;
551 D.addClass(parentElem, 'WikiList');
552 D.clearElement(parentElem);
553 D.append(
554 parentElem,
555 D.append(D.fieldset("Select a page to edit", 'select-page'),
556 sel)
557 );
558 D.attr(sel, 'size', 12);
559 D.attr(sel, 'id', 'select-page');
560 D.option(D.disable(D.clearElement(sel)), undefined, "Loading...");
561
562 /** Set up filter checkboxes for the various types
563 of wiki pages... */
564 const fsFilter = D.addClass(D.fieldset("Page types"),"page-types-list"),
@@ -627,13 +628,13 @@
628 D.append(D.span(), getEditMarker(getEditMarker.NEW,false)," = new/unsaved"),
629 D.append(D.span(), getEditMarker(getEditMarker.MODIFIED,false)," = has local edits"),
630 D.append(D.span(), getEditMarker(getEditMarker.DELETED,false)," = is empty (deleted)")
631 );
632
633 const fsNewPage = D.fieldset("Create new page", 'new-page'),
634 fsNewPageBody = D.div(),
635 newPageName = D.input('text', 'new-page'),
636 newPageBtn = D.button("Add page locally")
637 ;
638 D.append(parentElem, fsNewPage);
639 D.append(fsNewPage, fsNewPageBody);
640 D.addClass(fsNewPageBody, 'flex-container', 'flex-column', 'new-page');
@@ -697,12 +698,14 @@
698 'Locally-edited wiki pages. Timestamps are the last local edit time. ',
699 'Only the ',P.config.defaultMaxStashSize,' most recent pages ',
700 'are retained. Saving or reloading a file removes it from this list. ',
701 D.append(D.code(),F.storage.storageImplName()),
702 ' = ',F.storage.storageHelpDescription()
703 ),
704 label = D.label('local-edits', "Local edits");
705 D.attr(sel, 'id', 'local-edits');
706 D.append(wrapper, label, " (",
707 D.append(D.code(),
708 F.storage.storageImplName()),
709 "):",
710 btnHelp, sel, btnClear);
711 F.helpButtonlets.setup(btnHelp);
712
+1 -1
--- src/hbmenu.js
+++ src/hbmenu.js
@@ -24,11 +24,11 @@
2424
** Operation:
2525
**
2626
** This script request that the HTML contain two elements:
2727
**
2828
** <a id="hbbtn"> <--- The hamburger menu button
29
-** <div id="hbdrop"> <--- Container for the hamburger menu
29
+** <nav id="hbdrop"> <--- Container for the hamburger menu
3030
**
3131
** Bindings are made on hbbtn so that when it is clicked, the following
3232
** happens:
3333
**
3434
** 1. An XHR is made to /sitemap?popup to fetch the HTML for the
3535
--- src/hbmenu.js
+++ src/hbmenu.js
@@ -24,11 +24,11 @@
24 ** Operation:
25 **
26 ** This script request that the HTML contain two elements:
27 **
28 ** <a id="hbbtn"> <--- The hamburger menu button
29 ** <div id="hbdrop"> <--- Container for the hamburger menu
30 **
31 ** Bindings are made on hbbtn so that when it is clicked, the following
32 ** happens:
33 **
34 ** 1. An XHR is made to /sitemap?popup to fetch the HTML for the
35
--- src/hbmenu.js
+++ src/hbmenu.js
@@ -24,11 +24,11 @@
24 ** Operation:
25 **
26 ** This script request that the HTML contain two elements:
27 **
28 ** <a id="hbbtn"> <--- The hamburger menu button
29 ** <nav id="hbdrop"> <--- Container for the hamburger menu
30 **
31 ** Bindings are made on hbbtn so that when it is clicked, the following
32 ** happens:
33 **
34 ** 1. An XHR is made to /sitemap?popup to fetch the HTML for the
35
--- src/hname.c
+++ src/hname.c
@@ -234,23 +234,18 @@
234234
**
235235
** Usage: fossil hash-policy ?NEW-POLICY?
236236
**
237237
** Query or set the hash policy for the current repository. Available hash
238238
** policies are as follows:
239
-**
240239
** sha1 New artifact names are created using SHA1
241
-**
242240
** auto New artifact names are created using SHA1, but
243241
** automatically change the policy to "sha3" when
244242
** any SHA3 artifact enters the repository.
245
-**
246243
** sha3 New artifact names are created using SHA3, but
247244
** older artifacts with SHA1 names may be reused.
248
-**
249245
** sha3-only Use only SHA3 artifact names. Do not reuse legacy
250246
** SHA1 names.
251
-**
252247
** shun-sha1 Shun any SHA1 artifacts received by sync operations
253248
** other than clones. Older legacy SHA1 artifacts are
254249
** allowed during a clone.
255250
**
256251
** The default hash policy for existing repositories is "auto", which will
257252
--- src/hname.c
+++ src/hname.c
@@ -234,23 +234,18 @@
234 **
235 ** Usage: fossil hash-policy ?NEW-POLICY?
236 **
237 ** Query or set the hash policy for the current repository. Available hash
238 ** policies are as follows:
239 **
240 ** sha1 New artifact names are created using SHA1
241 **
242 ** auto New artifact names are created using SHA1, but
243 ** automatically change the policy to "sha3" when
244 ** any SHA3 artifact enters the repository.
245 **
246 ** sha3 New artifact names are created using SHA3, but
247 ** older artifacts with SHA1 names may be reused.
248 **
249 ** sha3-only Use only SHA3 artifact names. Do not reuse legacy
250 ** SHA1 names.
251 **
252 ** shun-sha1 Shun any SHA1 artifacts received by sync operations
253 ** other than clones. Older legacy SHA1 artifacts are
254 ** allowed during a clone.
255 **
256 ** The default hash policy for existing repositories is "auto", which will
257
--- src/hname.c
+++ src/hname.c
@@ -234,23 +234,18 @@
234 **
235 ** Usage: fossil hash-policy ?NEW-POLICY?
236 **
237 ** Query or set the hash policy for the current repository. Available hash
238 ** policies are as follows:
 
239 ** sha1 New artifact names are created using SHA1
 
240 ** auto New artifact names are created using SHA1, but
241 ** automatically change the policy to "sha3" when
242 ** any SHA3 artifact enters the repository.
 
243 ** sha3 New artifact names are created using SHA3, but
244 ** older artifacts with SHA1 names may be reused.
 
245 ** sha3-only Use only SHA3 artifact names. Do not reuse legacy
246 ** SHA1 names.
 
247 ** shun-sha1 Shun any SHA1 artifacts received by sync operations
248 ** other than clones. Older legacy SHA1 artifacts are
249 ** allowed during a clone.
250 **
251 ** The default hash policy for existing repositories is "auto", which will
252
+1 -14
--- src/hook.c
+++ src/hook.c
@@ -197,49 +197,36 @@
197197
** COMMAND: hook*
198198
**
199199
** Usage: %fossil hook COMMAND ...
200200
**
201201
** Commands include:
202
-**
203202
** > fossil hook add --command COMMAND --type TYPE --sequence NUMBER
204
-**
205203
** Create a new hook. The --command and --type arguments are
206204
** required. --sequence is optional.
207
-**
208205
** > fossil hook delete ID ...
209
-**
210206
** Delete one or more hooks by their IDs. ID can be "all"
211207
** to delete all hooks. Caution: There is no "undo" for
212208
** this operation. Deleted hooks are permanently lost.
213
-**
214209
** > fossil hook edit --command COMMAND --type TYPE --sequence NUMBER ID ...
215
-**
216210
** Make changes to one or more existing hooks. The ID argument
217211
** is either a hook-id, or a list of hook-ids, or the keyword
218212
** "all". For example, to disable hook number 2, use:
219213
**
220214
** fossil hook edit --type disabled 2
221
-**
222215
** > fossil hook list
223
-**
224216
** Show all current hooks
225
-**
226217
** > fossil hook status
227
-**
228218
** Print the values of CONFIG table entries that are relevant to
229219
** hook processing. Used for debugging.
230
-**
231220
** > fossil hook test [OPTIONS] ID
221
+** Run the hook script given by ID for testing purposes.
232222
**
233
-** Run the hook script given by ID for testing purposes.
234223
** Options:
235
-**
236224
** --dry-run Print the script on stdout rather than run it
237225
** --base-rcvid N Pretend that the hook-last-rcvid value is N
238226
** --new-rcvid M Pretend that the last rcvid valud is M
239227
** --aux-file NAME NAME is substituted for %A in the script
240
-**
241228
** The --base-rcvid and --new-rcvid options are silently ignored if
242229
** the hook type is not "after-receive". The default values for
243230
** --base-rcvid and --new-rcvid cause the last receive to be processed.
244231
*/
245232
void hook_cmd(void){
246233
--- src/hook.c
+++ src/hook.c
@@ -197,49 +197,36 @@
197 ** COMMAND: hook*
198 **
199 ** Usage: %fossil hook COMMAND ...
200 **
201 ** Commands include:
202 **
203 ** > fossil hook add --command COMMAND --type TYPE --sequence NUMBER
204 **
205 ** Create a new hook. The --command and --type arguments are
206 ** required. --sequence is optional.
207 **
208 ** > fossil hook delete ID ...
209 **
210 ** Delete one or more hooks by their IDs. ID can be "all"
211 ** to delete all hooks. Caution: There is no "undo" for
212 ** this operation. Deleted hooks are permanently lost.
213 **
214 ** > fossil hook edit --command COMMAND --type TYPE --sequence NUMBER ID ...
215 **
216 ** Make changes to one or more existing hooks. The ID argument
217 ** is either a hook-id, or a list of hook-ids, or the keyword
218 ** "all". For example, to disable hook number 2, use:
219 **
220 ** fossil hook edit --type disabled 2
221 **
222 ** > fossil hook list
223 **
224 ** Show all current hooks
225 **
226 ** > fossil hook status
227 **
228 ** Print the values of CONFIG table entries that are relevant to
229 ** hook processing. Used for debugging.
230 **
231 ** > fossil hook test [OPTIONS] ID
 
232 **
233 ** Run the hook script given by ID for testing purposes.
234 ** Options:
235 **
236 ** --dry-run Print the script on stdout rather than run it
237 ** --base-rcvid N Pretend that the hook-last-rcvid value is N
238 ** --new-rcvid M Pretend that the last rcvid valud is M
239 ** --aux-file NAME NAME is substituted for %A in the script
240 **
241 ** The --base-rcvid and --new-rcvid options are silently ignored if
242 ** the hook type is not "after-receive". The default values for
243 ** --base-rcvid and --new-rcvid cause the last receive to be processed.
244 */
245 void hook_cmd(void){
246
--- src/hook.c
+++ src/hook.c
@@ -197,49 +197,36 @@
197 ** COMMAND: hook*
198 **
199 ** Usage: %fossil hook COMMAND ...
200 **
201 ** Commands include:
 
202 ** > fossil hook add --command COMMAND --type TYPE --sequence NUMBER
 
203 ** Create a new hook. The --command and --type arguments are
204 ** required. --sequence is optional.
 
205 ** > fossil hook delete ID ...
 
206 ** Delete one or more hooks by their IDs. ID can be "all"
207 ** to delete all hooks. Caution: There is no "undo" for
208 ** this operation. Deleted hooks are permanently lost.
 
209 ** > fossil hook edit --command COMMAND --type TYPE --sequence NUMBER ID ...
 
210 ** Make changes to one or more existing hooks. The ID argument
211 ** is either a hook-id, or a list of hook-ids, or the keyword
212 ** "all". For example, to disable hook number 2, use:
213 **
214 ** fossil hook edit --type disabled 2
 
215 ** > fossil hook list
 
216 ** Show all current hooks
 
217 ** > fossil hook status
 
218 ** Print the values of CONFIG table entries that are relevant to
219 ** hook processing. Used for debugging.
 
220 ** > fossil hook test [OPTIONS] ID
221 ** Run the hook script given by ID for testing purposes.
222 **
 
223 ** Options:
 
224 ** --dry-run Print the script on stdout rather than run it
225 ** --base-rcvid N Pretend that the hook-last-rcvid value is N
226 ** --new-rcvid M Pretend that the last rcvid valud is M
227 ** --aux-file NAME NAME is substituted for %A in the script
 
228 ** The --base-rcvid and --new-rcvid options are silently ignored if
229 ** the hook type is not "after-receive". The default values for
230 ** --base-rcvid and --new-rcvid cause the last receive to be processed.
231 */
232 void hook_cmd(void){
233
-1
--- src/http.c
+++ src/http.c
@@ -540,11 +540,10 @@
540540
** is written into that second file instead of being written on standard
541541
** output. Use the "--out OUTPUT" option to specify an output file for
542542
** a GET request where there is no PAYLOAD.
543543
**
544544
** Options:
545
-**
546545
** --compress Use ZLIB compression on the payload
547546
** --mimetype TYPE Mimetype of the payload
548547
** --out FILE Store the reply in FILE
549548
** -v Verbose output
550549
** --xfer PAYLOAD in a Fossil xfer protocol message
551550
--- src/http.c
+++ src/http.c
@@ -540,11 +540,10 @@
540 ** is written into that second file instead of being written on standard
541 ** output. Use the "--out OUTPUT" option to specify an output file for
542 ** a GET request where there is no PAYLOAD.
543 **
544 ** Options:
545 **
546 ** --compress Use ZLIB compression on the payload
547 ** --mimetype TYPE Mimetype of the payload
548 ** --out FILE Store the reply in FILE
549 ** -v Verbose output
550 ** --xfer PAYLOAD in a Fossil xfer protocol message
551
--- src/http.c
+++ src/http.c
@@ -540,11 +540,10 @@
540 ** is written into that second file instead of being written on standard
541 ** output. Use the "--out OUTPUT" option to specify an output file for
542 ** a GET request where there is no PAYLOAD.
543 **
544 ** Options:
 
545 ** --compress Use ZLIB compression on the payload
546 ** --mimetype TYPE Mimetype of the payload
547 ** --out FILE Store the reply in FILE
548 ** -v Verbose output
549 ** --xfer PAYLOAD in a Fossil xfer protocol message
550
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -905,19 +905,16 @@
905905
** This command is used to view or modify the TLS (Transport Layer
906906
** Security) configuration for Fossil. TLS (formerly SSL) is the
907907
** encryption technology used for secure HTTPS transport.
908908
**
909909
** Sub-commands:
910
-**
911910
** remove-exception DOMAINS Remove TLS cert exceptions for the domains
912911
** listed. Or remove them all if the --all
913912
** option is specified.
914
-**
915913
** scrub ?--force? Remove all SSL configuration data from the
916914
** repository. Use --force to omit the
917915
** confirmation.
918
-**
919916
** show ?-v? Show the TLS configuration. Add -v to see
920917
** additional explaination
921918
*/
922919
void test_tlsconfig_info(void){
923920
const char *zCmd;
924921
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -905,19 +905,16 @@
905 ** This command is used to view or modify the TLS (Transport Layer
906 ** Security) configuration for Fossil. TLS (formerly SSL) is the
907 ** encryption technology used for secure HTTPS transport.
908 **
909 ** Sub-commands:
910 **
911 ** remove-exception DOMAINS Remove TLS cert exceptions for the domains
912 ** listed. Or remove them all if the --all
913 ** option is specified.
914 **
915 ** scrub ?--force? Remove all SSL configuration data from the
916 ** repository. Use --force to omit the
917 ** confirmation.
918 **
919 ** show ?-v? Show the TLS configuration. Add -v to see
920 ** additional explaination
921 */
922 void test_tlsconfig_info(void){
923 const char *zCmd;
924
--- src/http_ssl.c
+++ src/http_ssl.c
@@ -905,19 +905,16 @@
905 ** This command is used to view or modify the TLS (Transport Layer
906 ** Security) configuration for Fossil. TLS (formerly SSL) is the
907 ** encryption technology used for secure HTTPS transport.
908 **
909 ** Sub-commands:
 
910 ** remove-exception DOMAINS Remove TLS cert exceptions for the domains
911 ** listed. Or remove them all if the --all
912 ** option is specified.
 
913 ** scrub ?--force? Remove all SSL configuration data from the
914 ** repository. Use --force to omit the
915 ** confirmation.
 
916 ** show ?-v? Show the TLS configuration. Add -v to see
917 ** additional explaination
918 */
919 void test_tlsconfig_info(void){
920 const char *zCmd;
921
+2 -3
--- src/import.c
+++ src/import.c
@@ -1661,26 +1661,26 @@
16611661
** construct a new Fossil repository named by the NEW-REPOSITORY
16621662
** argument. If no input file is supplied the interchange format
16631663
** data is read from standard input.
16641664
**
16651665
** The following formats are currently understood by this command
1666
-**
16671666
** --git Import from the git-fast-export file format (default)
1667
+**
16681668
** Options:
16691669
** --import-marks FILE Restore marks table from FILE
16701670
** --export-marks FILE Save marks table to FILE
16711671
** --rename-master NAME Renames the master branch to NAME
16721672
** --use-author Uses author as the committer
16731673
** --attribute "EMAIL USER" Attribute commits to USER
16741674
** instead of Git committer EMAIL address
1675
-**
16761675
** --svn Import from the svnadmin-dump file format. The default
16771676
** behaviour (unless overridden by --flat) is to treat 3
16781677
** folders in the SVN root as special, following the
16791678
** common layout of SVN repositories. These are (by
16801679
** default) trunk/, branches/ and tags/. The SVN --deltas
16811680
** format is supported but not required.
1681
+**
16821682
** Options:
16831683
** --trunk FOLDER Name of trunk folder
16841684
** --branches FOLDER Name of branches folder
16851685
** --tags FOLDER Name of tags folder
16861686
** --base PATH Path to project root in repository
@@ -1687,11 +1687,10 @@
16871687
** --flat The whole dump is a single branch
16881688
** --rev-tags Tag each revision, implied by -i
16891689
** --no-rev-tags Disables tagging effect of -i
16901690
** --rename-rev PAT Rev tag names, default "svn-rev-%"
16911691
** --ignore-tree DIR Ignores subtree rooted at DIR
1692
-**
16931692
** Common Options:
16941693
** -i|--incremental allow importing into an existing repository
16951694
** -f|--force overwrite repository if already exists
16961695
** -q|--quiet omit progress output
16971696
** --no-rebuild skip the "rebuilding metadata" step
16981697
--- src/import.c
+++ src/import.c
@@ -1661,26 +1661,26 @@
1661 ** construct a new Fossil repository named by the NEW-REPOSITORY
1662 ** argument. If no input file is supplied the interchange format
1663 ** data is read from standard input.
1664 **
1665 ** The following formats are currently understood by this command
1666 **
1667 ** --git Import from the git-fast-export file format (default)
 
1668 ** Options:
1669 ** --import-marks FILE Restore marks table from FILE
1670 ** --export-marks FILE Save marks table to FILE
1671 ** --rename-master NAME Renames the master branch to NAME
1672 ** --use-author Uses author as the committer
1673 ** --attribute "EMAIL USER" Attribute commits to USER
1674 ** instead of Git committer EMAIL address
1675 **
1676 ** --svn Import from the svnadmin-dump file format. The default
1677 ** behaviour (unless overridden by --flat) is to treat 3
1678 ** folders in the SVN root as special, following the
1679 ** common layout of SVN repositories. These are (by
1680 ** default) trunk/, branches/ and tags/. The SVN --deltas
1681 ** format is supported but not required.
 
1682 ** Options:
1683 ** --trunk FOLDER Name of trunk folder
1684 ** --branches FOLDER Name of branches folder
1685 ** --tags FOLDER Name of tags folder
1686 ** --base PATH Path to project root in repository
@@ -1687,11 +1687,10 @@
1687 ** --flat The whole dump is a single branch
1688 ** --rev-tags Tag each revision, implied by -i
1689 ** --no-rev-tags Disables tagging effect of -i
1690 ** --rename-rev PAT Rev tag names, default "svn-rev-%"
1691 ** --ignore-tree DIR Ignores subtree rooted at DIR
1692 **
1693 ** Common Options:
1694 ** -i|--incremental allow importing into an existing repository
1695 ** -f|--force overwrite repository if already exists
1696 ** -q|--quiet omit progress output
1697 ** --no-rebuild skip the "rebuilding metadata" step
1698
--- src/import.c
+++ src/import.c
@@ -1661,26 +1661,26 @@
1661 ** construct a new Fossil repository named by the NEW-REPOSITORY
1662 ** argument. If no input file is supplied the interchange format
1663 ** data is read from standard input.
1664 **
1665 ** The following formats are currently understood by this command
 
1666 ** --git Import from the git-fast-export file format (default)
1667 **
1668 ** Options:
1669 ** --import-marks FILE Restore marks table from FILE
1670 ** --export-marks FILE Save marks table to FILE
1671 ** --rename-master NAME Renames the master branch to NAME
1672 ** --use-author Uses author as the committer
1673 ** --attribute "EMAIL USER" Attribute commits to USER
1674 ** instead of Git committer EMAIL address
 
1675 ** --svn Import from the svnadmin-dump file format. The default
1676 ** behaviour (unless overridden by --flat) is to treat 3
1677 ** folders in the SVN root as special, following the
1678 ** common layout of SVN repositories. These are (by
1679 ** default) trunk/, branches/ and tags/. The SVN --deltas
1680 ** format is supported but not required.
1681 **
1682 ** Options:
1683 ** --trunk FOLDER Name of trunk folder
1684 ** --branches FOLDER Name of branches folder
1685 ** --tags FOLDER Name of tags folder
1686 ** --base PATH Path to project root in repository
@@ -1687,11 +1687,10 @@
1687 ** --flat The whole dump is a single branch
1688 ** --rev-tags Tag each revision, implied by -i
1689 ** --no-rev-tags Disables tagging effect of -i
1690 ** --rename-rev PAT Rev tag names, default "svn-rev-%"
1691 ** --ignore-tree DIR Ignores subtree rooted at DIR
 
1692 ** Common Options:
1693 ** -i|--incremental allow importing into an existing repository
1694 ** -f|--force overwrite repository if already exists
1695 ** -q|--quiet omit progress output
1696 ** --no-rebuild skip the "rebuilding metadata" step
1697
+25 -36
--- src/info.c
+++ src/info.c
@@ -187,11 +187,10 @@
187187
**
188188
** Use the "finfo" command to get information about a specific
189189
** file in a checkout.
190190
**
191191
** Options:
192
-**
193192
** -R|--repository REPO Extract info from repository REPO
194193
** -v|--verbose Show extra information about repositories
195194
**
196195
** See also: [[annotate]], [[artifact]], [[finfo]], [[timeline]]
197196
*/
@@ -1154,11 +1153,10 @@
11541153
**
11551154
** Show the difference between two check-ins identified by the from= and
11561155
** to= query parameters.
11571156
**
11581157
** Query parameters:
1159
-**
11601158
** from=TAG Left side of the comparison
11611159
** to=TAG Right side of the comparison
11621160
** branch=TAG Show all changes on a particular branch
11631161
** diff=INTEGER 0: none, 1: unified, 2: side-by-side
11641162
** glob=STRING only diff files matching this glob
@@ -1656,11 +1654,10 @@
16561654
** SETTING: preferred-diff-type width=16 default=0
16571655
**
16581656
** The preferred-diff-type setting determines the preferred diff format
16591657
** for web pages if the format is not otherwise specified, for example
16601658
** by a query parameter or cookie. Allowed values:
1661
-**
16621659
** 1 Unified diff
16631660
** 2 Side-by-side diff
16641661
**
16651662
** If this setting is omitted or has a value of 0 or less, then it
16661663
** is ignored.
@@ -1707,11 +1704,10 @@
17071704
** the names of two files within the check-in "ci" that are diffed. If the
17081705
** "ci" parameter is omitted, then the most recent check-in ("tip") is
17091706
** used.
17101707
**
17111708
** Additional parameters:
1712
-**
17131709
** dc=N Show N lines of context around each diff
17141710
** patch Use the patch diff format
17151711
** regex=REGEX Only show differences that match REGEX
17161712
** sbs=BOOLEAN Turn side-by-side diffs on and off (default: on)
17171713
** verbose=BOOLEAN Show more detail when describing artifacts
@@ -1834,11 +1830,10 @@
18341830
** WEBPAGE: raw
18351831
** URL: /raw/ARTIFACTID
18361832
** URL: /raw?ci=BRANCH&filename=NAME
18371833
**
18381834
** Additional query parameters:
1839
-**
18401835
** m=MIMETYPE The mimetype is MIMETYPE
18411836
** at=FILENAME Content-disposition; attachment; filename=FILENAME;
18421837
**
18431838
** Return the uninterpreted content of an artifact. Used primarily
18441839
** to view artifacts that are images.
@@ -2093,11 +2088,10 @@
20932088
**
20942089
** Show the complete content of a file identified by ARTIFACTID
20952090
** as preformatted text.
20962091
**
20972092
** Other parameters:
2098
-**
20992093
** verbose Show more detail when describing the object
21002094
*/
21012095
void hexdump_page(void){
21022096
int rid;
21032097
Blob content;
@@ -2358,23 +2352,22 @@
23582352
** /artifact/HASH
23592353
** /whatis/HASH
23602354
** /file/NAME
23612355
**
23622356
** Additional query parameters:
2363
-**
2364
-** ln - show line numbers
2365
-** ln=N - highlight line number N
2366
-** ln=M-N - highlight lines M through N inclusive
2367
-** ln=M-N+Y-Z - highlight lines M through N and Y through Z (inclusive)
2368
-** verbose - show more detail in the description
2369
-** download - redirect to the download (artifact page only)
2370
-** name=NAME - filename or hash as a query parameter
2371
-** filename=NAME - alternative spelling for "name="
2372
-** fn=NAME - alternative spelling for "name="
2373
-** ci=VERSION - The specific check-in to use with "name=" to
2374
-** identify the file.
2375
-** txt - Force display of unformatted source text
2357
+** ln show line numbers
2358
+** ln=N highlight line number N
2359
+** ln=M-N highlight lines M through N inclusive
2360
+** ln=M-N+Y-Z highlight lines M through N and Y through Z (inclusive)
2361
+** verbose show more detail in the description
2362
+** download redirect to the download (artifact page only)
2363
+** name=NAME filename or hash as a query parameter
2364
+** filename=NAME alternative spelling for "name="
2365
+** fn=NAME alternative spelling for "name="
2366
+** ci=VERSION The specific check-in to use with "name=" to
2367
+** identify the file.
2368
+** txt Force display of unformatted source text
23762369
**
23772370
** The /artifact page show the complete content of a file
23782371
** identified by HASH. The /whatis page shows only a description
23792372
** of how the artifact is used. The /file page shows the most recent
23802373
** version of the file or directory called NAME, or a list of the
@@ -3105,15 +3098,13 @@
31053098
** Edit a check-in. (Check-ins are immutable and do not really change.
31063099
** This page really creates supplemental tags that affect the display
31073100
** of the check-in.)
31083101
**
31093102
** Query parameters:
3110
-**
31113103
** rid=INTEGER Record ID of the check-in to edit (REQUIRED)
31123104
**
31133105
** POST parameters after pressing "Preview", "Cancel", or "Apply":
3114
-**
31153106
** c=TEXT New check-in comment
31163107
** u=TEXT New user name
31173108
** newclr Apply a background color
31183109
** clr=TEXT New background color (only if newclr)
31193110
** pclr Propagate new background color (only if newclr)
@@ -3123,11 +3114,10 @@
31233114
** newbr Put the check-in on a new branch
31243115
** brname=TEXT Name of the new branch (only if newbr)
31253116
** close Close this check-in
31263117
** hide Hide this check-in
31273118
** cNNN Cancel tag with tagid=NNN
3128
-**
31293119
** cancel Cancel the edit. Return to the check-in view
31303120
** preview Show a preview of the edited check-in comment
31313121
** apply Apply changes
31323122
*/
31333123
void ci_edit_page(void){
@@ -3280,29 +3270,30 @@
32803270
form_begin(0, "%R/ci_edit");
32813271
login_insert_csrf_secret();
32823272
@ <div><input type="hidden" name="r" value="%s(zUuid)" />
32833273
@ <table border="0" cellspacing="10">
32843274
3285
- @ <tr><th align="right" valign="top">User:</th>
3275
+ @ <tr><th align="right" valign="top"><label for="u">User:</label></th>
32863276
@ <td valign="top">
3287
- @ <input type="text" name="u" size="20" value="%h(zNewUser)" />
3277
+ @ <input type="text" id="u" name="u" size="20" value="%h(zNewUser)" />
32883278
@ </td></tr>
32893279
3290
- @ <tr><th align="right" valign="top">Comment:</th>
3280
+ @ <tr><th align="right" valign="top"><label for="c">Comment:</label></th>
32913281
@ <td valign="top">
3292
- @ <textarea name="c" rows="10" cols="80">%h(zNewComment)</textarea>
3282
+ @ <textarea id="c" name="c" rows="10" cols="80">%h(zNewComment)</textarea>
32933283
@ </td></tr>
32943284
3295
- @ <tr><th align="right" valign="top">Check-in Time:</th>
3285
+ @ <tr><th align="right" valign="top"><label for="dt">Check-in Time:</label></th>
32963286
@ <td valign="top">
3297
- @ <input type="text" name="dt" size="20" value="%h(zNewDate)" />
3287
+ @ <input type="text" id="dt" name="dt" size="20" value="%h(zNewDate)" />
32983288
@ </td></tr>
32993289
33003290
if( zChngTime ){
3301
- @ <tr><th align="right" valign="top">Timestamp of this change:</th>
3291
+ @ <tr><th align="right" valign="top">
3292
+ @ <label for="chngtime">Timestamp of this change:</label></th>
33023293
@ <td valign="top">
3303
- @ <input type="text" name="chngtime" size="20" value="%h(zChngTime)" />
3294
+ @ <input type="text" id="chngtime" name="chngtime" size="20" value="%h(zChngTime)" />
33043295
@ </td></tr>
33053296
}
33063297
33073298
@ <tr><th align="right" valign="top">Background&nbsp;Color:</th>
33083299
@ <td valign="top">
@@ -3325,13 +3316,13 @@
33253316
@ </td></tr>
33263317
33273318
@ <tr><th align="right" valign="top">Tags:</th>
33283319
@ <td valign="top">
33293320
@ <label><input type="checkbox" id="newtag" name="newtag"%s(zNewTagFlag) />
3330
- @ Add the following new tag name to this check-in:</label>
3321
+ @ Add the following</label> <label>new tag name to this check-in:
33313322
@ <input type="text" size='15' name="tagname" value="%h(zNewTag)" \
3332
- @ id='tagname' />
3323
+ @ id='tagname' /></label>
33333324
zBranchName = db_text(0, "SELECT value FROM tagxref, tag"
33343325
" WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid"
33353326
" AND tagxref.tagid=%d", rid, TAG_BRANCH);
33363327
db_prepare(&q,
33373328
"SELECT tag.tagid, tagname, tagxref.value FROM tagxref, tag"
@@ -3380,13 +3371,13 @@
33803371
}
33813372
@ <tr><th align="right" valign="top">Branching:</th>
33823373
@ <td valign="top">
33833374
@ <label><input id="newbr" type="checkbox" name="newbr" \
33843375
@ data-branch='%h(zBranchName)'%s(zNewBrFlag) />
3385
- @ Make this check-in the start of a new branch named:</label>
3376
+ @ Make this check-in the start of a</label> <label>new branch named:
33863377
@ <input id="brname" type="text" style="width:15;" name="brname" \
3387
- @ value="%h(zNewBranch)" /></td></tr>
3378
+ @ value="%h(zNewBranch)" /></label></td></tr>
33883379
if( !fHasHidden ){
33893380
@ <tr><th align="right" valign="top">Branch Hiding:</th>
33903381
@ <td valign="top">
33913382
@ <label><input type="checkbox" id="hidebr" name="hide"%s(zHideFlag) />
33923383
@ Hide branch
@@ -3471,11 +3462,10 @@
34713462
** Usage: %fossil amend HASH OPTION ?OPTION ...?
34723463
**
34733464
** Amend the tags on check-in HASH to change how it displays in the timeline.
34743465
**
34753466
** Options:
3476
-**
34773467
** --author USER Make USER the author for check-in
34783468
** -m|--comment COMMENT Make COMMENT the check-in comment
34793469
** -M|--message-file FILE Read the amended comment from FILE
34803470
** -e|--edit-comment Launch editor to revise comment
34813471
** --date DATETIME Make DATETIME the check-in time
@@ -3813,11 +3803,10 @@
38133803
** If VERSION and the found ancestor refer to the same commit, the last two
38143804
** components are omitted, unless --long is provided. When no fitting tagged
38153805
** ancestor is found, show only the short hash of VERSION.
38163806
**
38173807
** Options:
3818
-**
38193808
** --digits Display so many hex digits of the hash
38203809
** (default: the larger of 6 and the 'hash-digit' setting)
38213810
** -d|--dirty Show whether there are changes to be committed
38223811
** --long Always show all three components
38233812
** --match GLOB Consider only non-propagating tags matching GLOB
38243813
--- src/info.c
+++ src/info.c
@@ -187,11 +187,10 @@
187 **
188 ** Use the "finfo" command to get information about a specific
189 ** file in a checkout.
190 **
191 ** Options:
192 **
193 ** -R|--repository REPO Extract info from repository REPO
194 ** -v|--verbose Show extra information about repositories
195 **
196 ** See also: [[annotate]], [[artifact]], [[finfo]], [[timeline]]
197 */
@@ -1154,11 +1153,10 @@
1154 **
1155 ** Show the difference between two check-ins identified by the from= and
1156 ** to= query parameters.
1157 **
1158 ** Query parameters:
1159 **
1160 ** from=TAG Left side of the comparison
1161 ** to=TAG Right side of the comparison
1162 ** branch=TAG Show all changes on a particular branch
1163 ** diff=INTEGER 0: none, 1: unified, 2: side-by-side
1164 ** glob=STRING only diff files matching this glob
@@ -1656,11 +1654,10 @@
1656 ** SETTING: preferred-diff-type width=16 default=0
1657 **
1658 ** The preferred-diff-type setting determines the preferred diff format
1659 ** for web pages if the format is not otherwise specified, for example
1660 ** by a query parameter or cookie. Allowed values:
1661 **
1662 ** 1 Unified diff
1663 ** 2 Side-by-side diff
1664 **
1665 ** If this setting is omitted or has a value of 0 or less, then it
1666 ** is ignored.
@@ -1707,11 +1704,10 @@
1707 ** the names of two files within the check-in "ci" that are diffed. If the
1708 ** "ci" parameter is omitted, then the most recent check-in ("tip") is
1709 ** used.
1710 **
1711 ** Additional parameters:
1712 **
1713 ** dc=N Show N lines of context around each diff
1714 ** patch Use the patch diff format
1715 ** regex=REGEX Only show differences that match REGEX
1716 ** sbs=BOOLEAN Turn side-by-side diffs on and off (default: on)
1717 ** verbose=BOOLEAN Show more detail when describing artifacts
@@ -1834,11 +1830,10 @@
1834 ** WEBPAGE: raw
1835 ** URL: /raw/ARTIFACTID
1836 ** URL: /raw?ci=BRANCH&filename=NAME
1837 **
1838 ** Additional query parameters:
1839 **
1840 ** m=MIMETYPE The mimetype is MIMETYPE
1841 ** at=FILENAME Content-disposition; attachment; filename=FILENAME;
1842 **
1843 ** Return the uninterpreted content of an artifact. Used primarily
1844 ** to view artifacts that are images.
@@ -2093,11 +2088,10 @@
2093 **
2094 ** Show the complete content of a file identified by ARTIFACTID
2095 ** as preformatted text.
2096 **
2097 ** Other parameters:
2098 **
2099 ** verbose Show more detail when describing the object
2100 */
2101 void hexdump_page(void){
2102 int rid;
2103 Blob content;
@@ -2358,23 +2352,22 @@
2358 ** /artifact/HASH
2359 ** /whatis/HASH
2360 ** /file/NAME
2361 **
2362 ** Additional query parameters:
2363 **
2364 ** ln - show line numbers
2365 ** ln=N - highlight line number N
2366 ** ln=M-N - highlight lines M through N inclusive
2367 ** ln=M-N+Y-Z - highlight lines M through N and Y through Z (inclusive)
2368 ** verbose - show more detail in the description
2369 ** download - redirect to the download (artifact page only)
2370 ** name=NAME - filename or hash as a query parameter
2371 ** filename=NAME - alternative spelling for "name="
2372 ** fn=NAME - alternative spelling for "name="
2373 ** ci=VERSION - The specific check-in to use with "name=" to
2374 ** identify the file.
2375 ** txt - Force display of unformatted source text
2376 **
2377 ** The /artifact page show the complete content of a file
2378 ** identified by HASH. The /whatis page shows only a description
2379 ** of how the artifact is used. The /file page shows the most recent
2380 ** version of the file or directory called NAME, or a list of the
@@ -3105,15 +3098,13 @@
3105 ** Edit a check-in. (Check-ins are immutable and do not really change.
3106 ** This page really creates supplemental tags that affect the display
3107 ** of the check-in.)
3108 **
3109 ** Query parameters:
3110 **
3111 ** rid=INTEGER Record ID of the check-in to edit (REQUIRED)
3112 **
3113 ** POST parameters after pressing "Preview", "Cancel", or "Apply":
3114 **
3115 ** c=TEXT New check-in comment
3116 ** u=TEXT New user name
3117 ** newclr Apply a background color
3118 ** clr=TEXT New background color (only if newclr)
3119 ** pclr Propagate new background color (only if newclr)
@@ -3123,11 +3114,10 @@
3123 ** newbr Put the check-in on a new branch
3124 ** brname=TEXT Name of the new branch (only if newbr)
3125 ** close Close this check-in
3126 ** hide Hide this check-in
3127 ** cNNN Cancel tag with tagid=NNN
3128 **
3129 ** cancel Cancel the edit. Return to the check-in view
3130 ** preview Show a preview of the edited check-in comment
3131 ** apply Apply changes
3132 */
3133 void ci_edit_page(void){
@@ -3280,29 +3270,30 @@
3280 form_begin(0, "%R/ci_edit");
3281 login_insert_csrf_secret();
3282 @ <div><input type="hidden" name="r" value="%s(zUuid)" />
3283 @ <table border="0" cellspacing="10">
3284
3285 @ <tr><th align="right" valign="top">User:</th>
3286 @ <td valign="top">
3287 @ <input type="text" name="u" size="20" value="%h(zNewUser)" />
3288 @ </td></tr>
3289
3290 @ <tr><th align="right" valign="top">Comment:</th>
3291 @ <td valign="top">
3292 @ <textarea name="c" rows="10" cols="80">%h(zNewComment)</textarea>
3293 @ </td></tr>
3294
3295 @ <tr><th align="right" valign="top">Check-in Time:</th>
3296 @ <td valign="top">
3297 @ <input type="text" name="dt" size="20" value="%h(zNewDate)" />
3298 @ </td></tr>
3299
3300 if( zChngTime ){
3301 @ <tr><th align="right" valign="top">Timestamp of this change:</th>
 
3302 @ <td valign="top">
3303 @ <input type="text" name="chngtime" size="20" value="%h(zChngTime)" />
3304 @ </td></tr>
3305 }
3306
3307 @ <tr><th align="right" valign="top">Background&nbsp;Color:</th>
3308 @ <td valign="top">
@@ -3325,13 +3316,13 @@
3325 @ </td></tr>
3326
3327 @ <tr><th align="right" valign="top">Tags:</th>
3328 @ <td valign="top">
3329 @ <label><input type="checkbox" id="newtag" name="newtag"%s(zNewTagFlag) />
3330 @ Add the following new tag name to this check-in:</label>
3331 @ <input type="text" size='15' name="tagname" value="%h(zNewTag)" \
3332 @ id='tagname' />
3333 zBranchName = db_text(0, "SELECT value FROM tagxref, tag"
3334 " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid"
3335 " AND tagxref.tagid=%d", rid, TAG_BRANCH);
3336 db_prepare(&q,
3337 "SELECT tag.tagid, tagname, tagxref.value FROM tagxref, tag"
@@ -3380,13 +3371,13 @@
3380 }
3381 @ <tr><th align="right" valign="top">Branching:</th>
3382 @ <td valign="top">
3383 @ <label><input id="newbr" type="checkbox" name="newbr" \
3384 @ data-branch='%h(zBranchName)'%s(zNewBrFlag) />
3385 @ Make this check-in the start of a new branch named:</label>
3386 @ <input id="brname" type="text" style="width:15;" name="brname" \
3387 @ value="%h(zNewBranch)" /></td></tr>
3388 if( !fHasHidden ){
3389 @ <tr><th align="right" valign="top">Branch Hiding:</th>
3390 @ <td valign="top">
3391 @ <label><input type="checkbox" id="hidebr" name="hide"%s(zHideFlag) />
3392 @ Hide branch
@@ -3471,11 +3462,10 @@
3471 ** Usage: %fossil amend HASH OPTION ?OPTION ...?
3472 **
3473 ** Amend the tags on check-in HASH to change how it displays in the timeline.
3474 **
3475 ** Options:
3476 **
3477 ** --author USER Make USER the author for check-in
3478 ** -m|--comment COMMENT Make COMMENT the check-in comment
3479 ** -M|--message-file FILE Read the amended comment from FILE
3480 ** -e|--edit-comment Launch editor to revise comment
3481 ** --date DATETIME Make DATETIME the check-in time
@@ -3813,11 +3803,10 @@
3813 ** If VERSION and the found ancestor refer to the same commit, the last two
3814 ** components are omitted, unless --long is provided. When no fitting tagged
3815 ** ancestor is found, show only the short hash of VERSION.
3816 **
3817 ** Options:
3818 **
3819 ** --digits Display so many hex digits of the hash
3820 ** (default: the larger of 6 and the 'hash-digit' setting)
3821 ** -d|--dirty Show whether there are changes to be committed
3822 ** --long Always show all three components
3823 ** --match GLOB Consider only non-propagating tags matching GLOB
3824
--- src/info.c
+++ src/info.c
@@ -187,11 +187,10 @@
187 **
188 ** Use the "finfo" command to get information about a specific
189 ** file in a checkout.
190 **
191 ** Options:
 
192 ** -R|--repository REPO Extract info from repository REPO
193 ** -v|--verbose Show extra information about repositories
194 **
195 ** See also: [[annotate]], [[artifact]], [[finfo]], [[timeline]]
196 */
@@ -1154,11 +1153,10 @@
1153 **
1154 ** Show the difference between two check-ins identified by the from= and
1155 ** to= query parameters.
1156 **
1157 ** Query parameters:
 
1158 ** from=TAG Left side of the comparison
1159 ** to=TAG Right side of the comparison
1160 ** branch=TAG Show all changes on a particular branch
1161 ** diff=INTEGER 0: none, 1: unified, 2: side-by-side
1162 ** glob=STRING only diff files matching this glob
@@ -1656,11 +1654,10 @@
1654 ** SETTING: preferred-diff-type width=16 default=0
1655 **
1656 ** The preferred-diff-type setting determines the preferred diff format
1657 ** for web pages if the format is not otherwise specified, for example
1658 ** by a query parameter or cookie. Allowed values:
 
1659 ** 1 Unified diff
1660 ** 2 Side-by-side diff
1661 **
1662 ** If this setting is omitted or has a value of 0 or less, then it
1663 ** is ignored.
@@ -1707,11 +1704,10 @@
1704 ** the names of two files within the check-in "ci" that are diffed. If the
1705 ** "ci" parameter is omitted, then the most recent check-in ("tip") is
1706 ** used.
1707 **
1708 ** Additional parameters:
 
1709 ** dc=N Show N lines of context around each diff
1710 ** patch Use the patch diff format
1711 ** regex=REGEX Only show differences that match REGEX
1712 ** sbs=BOOLEAN Turn side-by-side diffs on and off (default: on)
1713 ** verbose=BOOLEAN Show more detail when describing artifacts
@@ -1834,11 +1830,10 @@
1830 ** WEBPAGE: raw
1831 ** URL: /raw/ARTIFACTID
1832 ** URL: /raw?ci=BRANCH&filename=NAME
1833 **
1834 ** Additional query parameters:
 
1835 ** m=MIMETYPE The mimetype is MIMETYPE
1836 ** at=FILENAME Content-disposition; attachment; filename=FILENAME;
1837 **
1838 ** Return the uninterpreted content of an artifact. Used primarily
1839 ** to view artifacts that are images.
@@ -2093,11 +2088,10 @@
2088 **
2089 ** Show the complete content of a file identified by ARTIFACTID
2090 ** as preformatted text.
2091 **
2092 ** Other parameters:
 
2093 ** verbose Show more detail when describing the object
2094 */
2095 void hexdump_page(void){
2096 int rid;
2097 Blob content;
@@ -2358,23 +2352,22 @@
2352 ** /artifact/HASH
2353 ** /whatis/HASH
2354 ** /file/NAME
2355 **
2356 ** Additional query parameters:
2357 ** ln show line numbers
2358 ** ln=N highlight line number N
2359 ** ln=M-N highlight lines M through N inclusive
2360 ** ln=M-N+Y-Z highlight lines M through N and Y through Z (inclusive)
2361 ** verbose show more detail in the description
2362 ** download redirect to the download (artifact page only)
2363 ** name=NAME filename or hash as a query parameter
2364 ** filename=NAME alternative spelling for "name="
2365 ** fn=NAME alternative spelling for "name="
2366 ** ci=VERSION The specific check-in to use with "name=" to
2367 ** identify the file.
2368 ** txt Force display of unformatted source text
 
2369 **
2370 ** The /artifact page show the complete content of a file
2371 ** identified by HASH. The /whatis page shows only a description
2372 ** of how the artifact is used. The /file page shows the most recent
2373 ** version of the file or directory called NAME, or a list of the
@@ -3105,15 +3098,13 @@
3098 ** Edit a check-in. (Check-ins are immutable and do not really change.
3099 ** This page really creates supplemental tags that affect the display
3100 ** of the check-in.)
3101 **
3102 ** Query parameters:
 
3103 ** rid=INTEGER Record ID of the check-in to edit (REQUIRED)
3104 **
3105 ** POST parameters after pressing "Preview", "Cancel", or "Apply":
 
3106 ** c=TEXT New check-in comment
3107 ** u=TEXT New user name
3108 ** newclr Apply a background color
3109 ** clr=TEXT New background color (only if newclr)
3110 ** pclr Propagate new background color (only if newclr)
@@ -3123,11 +3114,10 @@
3114 ** newbr Put the check-in on a new branch
3115 ** brname=TEXT Name of the new branch (only if newbr)
3116 ** close Close this check-in
3117 ** hide Hide this check-in
3118 ** cNNN Cancel tag with tagid=NNN
 
3119 ** cancel Cancel the edit. Return to the check-in view
3120 ** preview Show a preview of the edited check-in comment
3121 ** apply Apply changes
3122 */
3123 void ci_edit_page(void){
@@ -3280,29 +3270,30 @@
3270 form_begin(0, "%R/ci_edit");
3271 login_insert_csrf_secret();
3272 @ <div><input type="hidden" name="r" value="%s(zUuid)" />
3273 @ <table border="0" cellspacing="10">
3274
3275 @ <tr><th align="right" valign="top"><label for="u">User:</label></th>
3276 @ <td valign="top">
3277 @ <input type="text" id="u" name="u" size="20" value="%h(zNewUser)" />
3278 @ </td></tr>
3279
3280 @ <tr><th align="right" valign="top"><label for="c">Comment:</label></th>
3281 @ <td valign="top">
3282 @ <textarea id="c" name="c" rows="10" cols="80">%h(zNewComment)</textarea>
3283 @ </td></tr>
3284
3285 @ <tr><th align="right" valign="top"><label for="dt">Check-in Time:</label></th>
3286 @ <td valign="top">
3287 @ <input type="text" id="dt" name="dt" size="20" value="%h(zNewDate)" />
3288 @ </td></tr>
3289
3290 if( zChngTime ){
3291 @ <tr><th align="right" valign="top">
3292 @ <label for="chngtime">Timestamp of this change:</label></th>
3293 @ <td valign="top">
3294 @ <input type="text" id="chngtime" name="chngtime" size="20" value="%h(zChngTime)" />
3295 @ </td></tr>
3296 }
3297
3298 @ <tr><th align="right" valign="top">Background&nbsp;Color:</th>
3299 @ <td valign="top">
@@ -3325,13 +3316,13 @@
3316 @ </td></tr>
3317
3318 @ <tr><th align="right" valign="top">Tags:</th>
3319 @ <td valign="top">
3320 @ <label><input type="checkbox" id="newtag" name="newtag"%s(zNewTagFlag) />
3321 @ Add the following</label> <label>new tag name to this check-in:
3322 @ <input type="text" size='15' name="tagname" value="%h(zNewTag)" \
3323 @ id='tagname' /></label>
3324 zBranchName = db_text(0, "SELECT value FROM tagxref, tag"
3325 " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid"
3326 " AND tagxref.tagid=%d", rid, TAG_BRANCH);
3327 db_prepare(&q,
3328 "SELECT tag.tagid, tagname, tagxref.value FROM tagxref, tag"
@@ -3380,13 +3371,13 @@
3371 }
3372 @ <tr><th align="right" valign="top">Branching:</th>
3373 @ <td valign="top">
3374 @ <label><input id="newbr" type="checkbox" name="newbr" \
3375 @ data-branch='%h(zBranchName)'%s(zNewBrFlag) />
3376 @ Make this check-in the start of a</label> <label>new branch named:
3377 @ <input id="brname" type="text" style="width:15;" name="brname" \
3378 @ value="%h(zNewBranch)" /></label></td></tr>
3379 if( !fHasHidden ){
3380 @ <tr><th align="right" valign="top">Branch Hiding:</th>
3381 @ <td valign="top">
3382 @ <label><input type="checkbox" id="hidebr" name="hide"%s(zHideFlag) />
3383 @ Hide branch
@@ -3471,11 +3462,10 @@
3462 ** Usage: %fossil amend HASH OPTION ?OPTION ...?
3463 **
3464 ** Amend the tags on check-in HASH to change how it displays in the timeline.
3465 **
3466 ** Options:
 
3467 ** --author USER Make USER the author for check-in
3468 ** -m|--comment COMMENT Make COMMENT the check-in comment
3469 ** -M|--message-file FILE Read the amended comment from FILE
3470 ** -e|--edit-comment Launch editor to revise comment
3471 ** --date DATETIME Make DATETIME the check-in time
@@ -3813,11 +3803,10 @@
3803 ** If VERSION and the found ancestor refer to the same commit, the last two
3804 ** components are omitted, unless --long is provided. When no fitting tagged
3805 ** ancestor is found, show only the short hash of VERSION.
3806 **
3807 ** Options:
 
3808 ** --digits Display so many hex digits of the hash
3809 ** (default: the larger of 6 and the 'hash-digit' setting)
3810 ** -d|--dirty Show whether there are changes to be committed
3811 ** --long Always show all three components
3812 ** --match GLOB Consider only non-propagating tags matching GLOB
3813
+8 -14
--- src/interwiki.c
+++ src/interwiki.c
@@ -160,25 +160,19 @@
160160
**
161161
** Usage: %fossil interwiki COMMAND ...
162162
**
163163
** Manage the "intermap" that defines the mapping from interwiki tags
164164
** to complete URLs for interwiki links.
165
-**
166165
** > fossil interwiki delete TAG ...
167
-**
168166
** Delete one or more interwiki maps.
169
-**
170167
** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
171
-**
172168
** Create an interwiki referenced call TAG. The base URL is
173169
** the --base option, which is required. The --hash and --wiki
174170
** paths are optional. The TAG must be lower-case alphanumeric
175171
** and must be unique. A new entry is created if it does not
176172
** already exit.
177
-**
178173
** > fossil interwiki list
179
-**
180174
** Show all interwiki mappings.
181175
*/
182176
void interwiki_cmd(void){
183177
const char *zCmd;
184178
int nCmd;
@@ -397,26 +391,26 @@
397391
@ <p class="error">%h(zErr)</p>
398392
}
399393
@ <form method="POST" action="%R/intermap">
400394
login_insert_csrf_secret();
401395
@ <table border="0">
402
- @ <tr><td class="form_label" id="imtag">Tag:</td>
403
- @ <td><input type="text" id="tag" aria-labeledby="imtag" name="tag" \
396
+ @ <tr><td class="form_label"><label for="tag">Tag:</label></td>
397
+ @ <td><input type="text" id="tag" name="tag" \
404398
@ size="15" value="%h(zTag)"></td></tr>
405
- @ <tr><td class="form_label" id="imbase">Base&nbsp;URL:</td>
406
- @ <td><input type="text" id="base" aria-labeledby="imbase" name="base" \
399
+ @ <tr><td class="form_label"><label for="base">Base&nbsp;URL:</label></td>
400
+ @ <td><input type="text" id="base" name="base" \
407401
@ size="70" value="%h(zBase)"></td></tr>
408
- @ <tr><td class="form_label" id="imhash">Hash-path:</td>
409
- @ <td><input type="text" id="hash" aria-labeledby="imhash" name="hash" \
402
+ @ <tr><td class="form_label"><label for="hash">Hash-path:</label></td>
403
+ @ <td><input type="text" id="hash" name="hash" \
410404
@ size="20" value="%h(zHash)">
411405
@ (use "<tt>/info/</tt>" when the target is Fossil)</td></tr>
412
- @ <tr><td class="form_label" id="imwiki">Wiki-path:</td>
413
- @ <td><input type="text" id="wiki" aria-labeledby="imwiki" name="wiki" \
406
+ @ <tr><td class="form_label"><label for="wiki">Wiki-path:</label></td>
407
+ @ <td><input type="text" id="wiki" name="wiki" \
414408
@ size="20" value="%h(zWiki)">
415409
@ (use "<tt>/wiki?name=</tt>" when the target is Fossil)</td></tr>
416410
@ <tr><td></td>
417411
@ <td><input type="submit" name="submit" value="Apply Changes"></td></tr>
418412
@ </table>
419413
@ </form>
420414
421415
style_finish_page();
422416
}
423417
--- src/interwiki.c
+++ src/interwiki.c
@@ -160,25 +160,19 @@
160 **
161 ** Usage: %fossil interwiki COMMAND ...
162 **
163 ** Manage the "intermap" that defines the mapping from interwiki tags
164 ** to complete URLs for interwiki links.
165 **
166 ** > fossil interwiki delete TAG ...
167 **
168 ** Delete one or more interwiki maps.
169 **
170 ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
171 **
172 ** Create an interwiki referenced call TAG. The base URL is
173 ** the --base option, which is required. The --hash and --wiki
174 ** paths are optional. The TAG must be lower-case alphanumeric
175 ** and must be unique. A new entry is created if it does not
176 ** already exit.
177 **
178 ** > fossil interwiki list
179 **
180 ** Show all interwiki mappings.
181 */
182 void interwiki_cmd(void){
183 const char *zCmd;
184 int nCmd;
@@ -397,26 +391,26 @@
397 @ <p class="error">%h(zErr)</p>
398 }
399 @ <form method="POST" action="%R/intermap">
400 login_insert_csrf_secret();
401 @ <table border="0">
402 @ <tr><td class="form_label" id="imtag">Tag:</td>
403 @ <td><input type="text" id="tag" aria-labeledby="imtag" name="tag" \
404 @ size="15" value="%h(zTag)"></td></tr>
405 @ <tr><td class="form_label" id="imbase">Base&nbsp;URL:</td>
406 @ <td><input type="text" id="base" aria-labeledby="imbase" name="base" \
407 @ size="70" value="%h(zBase)"></td></tr>
408 @ <tr><td class="form_label" id="imhash">Hash-path:</td>
409 @ <td><input type="text" id="hash" aria-labeledby="imhash" name="hash" \
410 @ size="20" value="%h(zHash)">
411 @ (use "<tt>/info/</tt>" when the target is Fossil)</td></tr>
412 @ <tr><td class="form_label" id="imwiki">Wiki-path:</td>
413 @ <td><input type="text" id="wiki" aria-labeledby="imwiki" name="wiki" \
414 @ size="20" value="%h(zWiki)">
415 @ (use "<tt>/wiki?name=</tt>" when the target is Fossil)</td></tr>
416 @ <tr><td></td>
417 @ <td><input type="submit" name="submit" value="Apply Changes"></td></tr>
418 @ </table>
419 @ </form>
420
421 style_finish_page();
422 }
423
--- src/interwiki.c
+++ src/interwiki.c
@@ -160,25 +160,19 @@
160 **
161 ** Usage: %fossil interwiki COMMAND ...
162 **
163 ** Manage the "intermap" that defines the mapping from interwiki tags
164 ** to complete URLs for interwiki links.
 
165 ** > fossil interwiki delete TAG ...
 
166 ** Delete one or more interwiki maps.
 
167 ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH
 
168 ** Create an interwiki referenced call TAG. The base URL is
169 ** the --base option, which is required. The --hash and --wiki
170 ** paths are optional. The TAG must be lower-case alphanumeric
171 ** and must be unique. A new entry is created if it does not
172 ** already exit.
 
173 ** > fossil interwiki list
 
174 ** Show all interwiki mappings.
175 */
176 void interwiki_cmd(void){
177 const char *zCmd;
178 int nCmd;
@@ -397,26 +391,26 @@
391 @ <p class="error">%h(zErr)</p>
392 }
393 @ <form method="POST" action="%R/intermap">
394 login_insert_csrf_secret();
395 @ <table border="0">
396 @ <tr><td class="form_label"><label for="tag">Tag:</label></td>
397 @ <td><input type="text" id="tag" name="tag" \
398 @ size="15" value="%h(zTag)"></td></tr>
399 @ <tr><td class="form_label"><label for="base">Base&nbsp;URL:</label></td>
400 @ <td><input type="text" id="base" name="base" \
401 @ size="70" value="%h(zBase)"></td></tr>
402 @ <tr><td class="form_label"><label for="hash">Hash-path:</label></td>
403 @ <td><input type="text" id="hash" name="hash" \
404 @ size="20" value="%h(zHash)">
405 @ (use "<tt>/info/</tt>" when the target is Fossil)</td></tr>
406 @ <tr><td class="form_label"><label for="wiki">Wiki-path:</label></td>
407 @ <td><input type="text" id="wiki" name="wiki" \
408 @ size="20" value="%h(zWiki)">
409 @ (use "<tt>/wiki?name=</tt>" when the target is Fossil)</td></tr>
410 @ <tr><td></td>
411 @ <td><input type="submit" name="submit" value="Apply Changes"></td></tr>
412 @ </table>
413 @ </form>
414
415 style_finish_page();
416 }
417
+28 -32
--- src/login.c
+++ src/login.c
@@ -534,11 +534,10 @@
534534
** WEBPAGE: login
535535
** WEBPAGE: logout
536536
** WEBPAGE: my
537537
**
538538
** The login/logout page. Parameters:
539
-**
540539
** g=URL Jump back to this URL after login completes
541540
** anon The g=URL is not accessible by "nobody" but is
542541
** accessible by "anonymous"
543542
*/
544543
void login_page(void){
@@ -736,17 +735,17 @@
736735
@ <a href='%s(g.zHttpsURL)'>%h(g.zHttpsURL)</a> instead.
737736
}
738737
@ </span></td></tr>
739738
}
740739
@ <tr>
741
- @ <td class="form_label" id="userlabel1">User ID:</td>
742
- @ <td><input type="text" id="u" aria-labelledby="userlabel1" name="u" \
740
+ @ <td class="form_label" id="userlabel1"><label for="u">User ID:</label></td>
741
+ @ <td><input type="text" id="u" id="u" name="u" \
743742
@ size="30" value="%s(anonFlag?"anonymous":"")"></td>
744743
@ </tr>
745744
@ <tr>
746
- @ <td class="form_label" id="pswdlabel">Password:</td>
747
- @ <td><input aria-labelledby="pswdlabel" type="password" id="p" \
745
+ @ <td class="form_label" id="pswdlabel"><label for="p">Password:</label></td>
746
+ @ <td><input type="password" id="p" \
748747
@ name="p" value="" size="30" />\
749748
if( zAnonPw && !noAnon ){
750749
captcha_speakit_button(uSeed, "Speak password for \"anonymous\"");
751750
}
752751
@ </td>
@@ -805,18 +804,19 @@
805804
char *zRPW = fossil_random_password(12);
806805
@ <hr>
807806
@ <p>Change Password for user <b>%h(g.zLogin)</b>:</p>
808807
form_begin(0, "%R/login");
809808
@ <table>
810
- @ <tr><td class="form_label" id="oldpw">Old Password:</td>
811
- @ <td><input aria-labelledby="oldpw" type="password" name="p" \
809
+ @ <tr><td class="form_label" id="oldpw"><label for="p">Old Password:</label></td>
810
+ @ <td><input type="password" id="p" name="p" \
812811
@ size="30"/></td></tr>
813
- @ <tr><td class="form_label" id="newpw">New Password:</td>
814
- @ <td><input aria-labelledby="newpw" type="password" name="n1" \
812
+ @ <tr><td class="form_label" id="newpw"><label for="n1">New Password:</label></td>
813
+ @ <td><input type="password" id="n1" name="n1" \
815814
@ size="30" /> Suggestion: %z(zRPW)</td></tr>
816
- @ <tr><td class="form_label" id="reppw">Repeat New Password:</td>
817
- @ <td><input aria-labledby="reppw" type="password" name="n2" \
815
+ @ <tr><td class="form_label" id="reppw">
816
+ @ <label for="n2">Repeat New Password:</label></td>
817
+ @ <td><input type="password" id="n2" name="n2" \
818818
@ size="30" /></td></tr>
819819
@ <tr><td></td>
820820
@ <td><input type="submit" value="Change Password" /></td></tr>
821821
@ </table>
822822
@ </form>
@@ -1781,46 +1781,49 @@
17811781
@ <input type="hidden" name="g" value="%h(P("g"))" />
17821782
}
17831783
@ <p><input type="hidden" name="captchaseed" value="%u(uSeed)" />
17841784
@ <table class="login_out">
17851785
@ <tr>
1786
- @ <td class="form_label" align="right" id="uid">User ID:</td>
1787
- @ <td><input aria-labelledby="uid" type="text" name="u" \
1786
+ @ <td class="form_label" align="right" id="uid"><label for="u">User ID:</label></td>
1787
+ @ <td><input type="text" id="u" name="u" \
17881788
@ value="%h(zUserID)" size="30"></td>
17891789
@
17901790
if( iErrLine==1 ){
17911791
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
17921792
}
17931793
@ <tr>
1794
- @ <td class="form_label" align="right" id="dpyname">Display Name:</td>
1795
- @ <td><input aria-labelledby="dpyname" type="text" name="dn" \
1794
+ @ <td class="form_label" align="right" id="dpyname">
1795
+ @ <label for="dn">Display Name:</label></td>
1796
+ @ <td><input type="text" id="dn" name="dn" \
17961797
@ value="%h(zDName)" size="30"></td>
17971798
@ </tr>
17981799
if( iErrLine==2 ){
17991800
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
18001801
}
18011802
@ </tr>
18021803
@ <tr>
1803
- @ <td class="form_label" align="right" id="emaddr">Email Address:</td>
1804
- @ <td><input aria-labelledby="emaddr" type="text" name="ea" \
1804
+ @ <td class="form_label" align="right" id="emaddr">
1805
+ @ <label for="ea">Email Address:</label></td>
1806
+ @ <td><input type="text" id="ea" name="ea" \
18051807
@ value="%h(zEAddr)" size="30"></td>
18061808
@ </tr>
18071809
if( iErrLine==3 ){
18081810
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
18091811
}
18101812
if( canDoAlerts ){
18111813
int a = atoi(PD("alerts","1"));
18121814
@ <tr>
1813
- @ <td class="form_label" align="right" id="emalrt">Email&nbsp;Alerts?</td>
1814
- @ <td><select aria-labelledby="emalrt" size='1' name='alerts'>
1815
+ @ <td class="form_label" align="right" id="emalrt">
1816
+ @ <label for="alerts">Email&nbsp;Alerts?</label></td>
1817
+ @ <td><select size='1' id='alerts' name='alerts'>
18151818
@ <option value="1" %s(a?"selected":"")>Yes</option>
18161819
@ <option value="0" %s(!a?"selected":"")>No</option>
18171820
@ </select></td></tr>
18181821
}
18191822
@ <tr>
1820
- @ <td class="form_label" align="right" id="pswd">Password:</td>
1821
- @ <td><input aria-labelledby="pswd" type="password" name="p" \
1823
+ @ <td class="form_label" align="right" id="pswd"><label for="p">Password:</label></td>
1824
+ @ <td><input type="password" id="p" name="p" \
18221825
@ value="%h(zPasswd)" size="30"> \
18231826
if( zPasswd[0]==0 ){
18241827
char *zRPW = fossil_random_password(12);
18251828
@ Password suggestion: %z(zRPW)</td>
18261829
}else{
@@ -1829,20 +1832,20 @@
18291832
@ <tr>
18301833
if( iErrLine==4 ){
18311834
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
18321835
}
18331836
@ <tr>
1834
- @ <td class="form_label" align="right" id="pwcfrm">Confirm:</td>
1835
- @ <td><input aria-labelledby="pwcfrm" type="password" name="cp" \
1837
+ @ <td class="form_label" align="right" id="pwcfrm"><label for="cp">Confirm:</label></td>
1838
+ @ <td><input type="password" id="cp" name="cp" \
18361839
@ value="%h(zConfirm)" size="30"></td>
18371840
@ </tr>
18381841
if( iErrLine==5 ){
18391842
@ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
18401843
}
18411844
@ <tr>
1842
- @ <td class="form_label" align="right" id="cptcha">Captcha:</td>
1843
- @ <td><input type="text" name="captcha" aria-labelledby="cptcha" \
1845
+ @ <td class="form_label" align="right" id="cptcha"><label for="captcha">Captcha:</label></td>
1846
+ @ <td><input type="text" id="captcha" name="captcha" \
18441847
@ value="%h(captchaIsCorrect?zDecoded:"")" size="30">
18451848
captcha_speakit_button(uSeed, "Speak the captcha text");
18461849
@ </td>
18471850
@ </tr>
18481851
if( iErrLine==6 ){
@@ -2122,31 +2125,24 @@
21222125
**
21232126
** Usage: %fossil login-group ?SUBCOMMAND? ?OPTIONS?
21242127
**
21252128
** Run various subcommands to manage login-group related settings of the open
21262129
** repository or of the repository identified by the -R or --repository option.
2127
-**
21282130
** > fossil login-group ?-R REPO?
2129
-**
21302131
** Show the login-group to which REPO, or if invoked from within a checkout
21312132
** the repository on which the current checkout is based, belongs.
2132
-**
21332133
** > fossil login-group join ?-R? REPO ?--name NAME?
2134
-**
21352134
** This subcommand must be invoked from within a checkout to either: add
21362135
** the open repository to the login group that REPO is a member, in which
21372136
** case the optional "--name" argument is not required; or create a new
21382137
** login group between the open repository and REPO, in which case the new
21392138
** group NAME is determined by the mandatory "--name" option. REPO may be
21402139
** specified with or without the -R flag.
2141
-**
21422140
** > fossil login-group leave ?-R REPO?
2143
-**
21442141
** Take the repository REPO, or if invoked from within a checkout the
21452142
** repository on which the current checkout is based, out of whatever
21462143
** login group it is a member.
2147
-**
21482144
** About Login Groups:
21492145
**
21502146
** A login-group is a set of repositories that share user credentials.
21512147
** If a user is logged into one member of the group, then that user can
21522148
** access any other group member as long as they have an entry in the USER
21532149
--- src/login.c
+++ src/login.c
@@ -534,11 +534,10 @@
534 ** WEBPAGE: login
535 ** WEBPAGE: logout
536 ** WEBPAGE: my
537 **
538 ** The login/logout page. Parameters:
539 **
540 ** g=URL Jump back to this URL after login completes
541 ** anon The g=URL is not accessible by "nobody" but is
542 ** accessible by "anonymous"
543 */
544 void login_page(void){
@@ -736,17 +735,17 @@
736 @ <a href='%s(g.zHttpsURL)'>%h(g.zHttpsURL)</a> instead.
737 }
738 @ </span></td></tr>
739 }
740 @ <tr>
741 @ <td class="form_label" id="userlabel1">User ID:</td>
742 @ <td><input type="text" id="u" aria-labelledby="userlabel1" name="u" \
743 @ size="30" value="%s(anonFlag?"anonymous":"")"></td>
744 @ </tr>
745 @ <tr>
746 @ <td class="form_label" id="pswdlabel">Password:</td>
747 @ <td><input aria-labelledby="pswdlabel" type="password" id="p" \
748 @ name="p" value="" size="30" />\
749 if( zAnonPw && !noAnon ){
750 captcha_speakit_button(uSeed, "Speak password for \"anonymous\"");
751 }
752 @ </td>
@@ -805,18 +804,19 @@
805 char *zRPW = fossil_random_password(12);
806 @ <hr>
807 @ <p>Change Password for user <b>%h(g.zLogin)</b>:</p>
808 form_begin(0, "%R/login");
809 @ <table>
810 @ <tr><td class="form_label" id="oldpw">Old Password:</td>
811 @ <td><input aria-labelledby="oldpw" type="password" name="p" \
812 @ size="30"/></td></tr>
813 @ <tr><td class="form_label" id="newpw">New Password:</td>
814 @ <td><input aria-labelledby="newpw" type="password" name="n1" \
815 @ size="30" /> Suggestion: %z(zRPW)</td></tr>
816 @ <tr><td class="form_label" id="reppw">Repeat New Password:</td>
817 @ <td><input aria-labledby="reppw" type="password" name="n2" \
 
818 @ size="30" /></td></tr>
819 @ <tr><td></td>
820 @ <td><input type="submit" value="Change Password" /></td></tr>
821 @ </table>
822 @ </form>
@@ -1781,46 +1781,49 @@
1781 @ <input type="hidden" name="g" value="%h(P("g"))" />
1782 }
1783 @ <p><input type="hidden" name="captchaseed" value="%u(uSeed)" />
1784 @ <table class="login_out">
1785 @ <tr>
1786 @ <td class="form_label" align="right" id="uid">User ID:</td>
1787 @ <td><input aria-labelledby="uid" type="text" name="u" \
1788 @ value="%h(zUserID)" size="30"></td>
1789 @
1790 if( iErrLine==1 ){
1791 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1792 }
1793 @ <tr>
1794 @ <td class="form_label" align="right" id="dpyname">Display Name:</td>
1795 @ <td><input aria-labelledby="dpyname" type="text" name="dn" \
 
1796 @ value="%h(zDName)" size="30"></td>
1797 @ </tr>
1798 if( iErrLine==2 ){
1799 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1800 }
1801 @ </tr>
1802 @ <tr>
1803 @ <td class="form_label" align="right" id="emaddr">Email Address:</td>
1804 @ <td><input aria-labelledby="emaddr" type="text" name="ea" \
 
1805 @ value="%h(zEAddr)" size="30"></td>
1806 @ </tr>
1807 if( iErrLine==3 ){
1808 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1809 }
1810 if( canDoAlerts ){
1811 int a = atoi(PD("alerts","1"));
1812 @ <tr>
1813 @ <td class="form_label" align="right" id="emalrt">Email&nbsp;Alerts?</td>
1814 @ <td><select aria-labelledby="emalrt" size='1' name='alerts'>
 
1815 @ <option value="1" %s(a?"selected":"")>Yes</option>
1816 @ <option value="0" %s(!a?"selected":"")>No</option>
1817 @ </select></td></tr>
1818 }
1819 @ <tr>
1820 @ <td class="form_label" align="right" id="pswd">Password:</td>
1821 @ <td><input aria-labelledby="pswd" type="password" name="p" \
1822 @ value="%h(zPasswd)" size="30"> \
1823 if( zPasswd[0]==0 ){
1824 char *zRPW = fossil_random_password(12);
1825 @ Password suggestion: %z(zRPW)</td>
1826 }else{
@@ -1829,20 +1832,20 @@
1829 @ <tr>
1830 if( iErrLine==4 ){
1831 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1832 }
1833 @ <tr>
1834 @ <td class="form_label" align="right" id="pwcfrm">Confirm:</td>
1835 @ <td><input aria-labelledby="pwcfrm" type="password" name="cp" \
1836 @ value="%h(zConfirm)" size="30"></td>
1837 @ </tr>
1838 if( iErrLine==5 ){
1839 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1840 }
1841 @ <tr>
1842 @ <td class="form_label" align="right" id="cptcha">Captcha:</td>
1843 @ <td><input type="text" name="captcha" aria-labelledby="cptcha" \
1844 @ value="%h(captchaIsCorrect?zDecoded:"")" size="30">
1845 captcha_speakit_button(uSeed, "Speak the captcha text");
1846 @ </td>
1847 @ </tr>
1848 if( iErrLine==6 ){
@@ -2122,31 +2125,24 @@
2122 **
2123 ** Usage: %fossil login-group ?SUBCOMMAND? ?OPTIONS?
2124 **
2125 ** Run various subcommands to manage login-group related settings of the open
2126 ** repository or of the repository identified by the -R or --repository option.
2127 **
2128 ** > fossil login-group ?-R REPO?
2129 **
2130 ** Show the login-group to which REPO, or if invoked from within a checkout
2131 ** the repository on which the current checkout is based, belongs.
2132 **
2133 ** > fossil login-group join ?-R? REPO ?--name NAME?
2134 **
2135 ** This subcommand must be invoked from within a checkout to either: add
2136 ** the open repository to the login group that REPO is a member, in which
2137 ** case the optional "--name" argument is not required; or create a new
2138 ** login group between the open repository and REPO, in which case the new
2139 ** group NAME is determined by the mandatory "--name" option. REPO may be
2140 ** specified with or without the -R flag.
2141 **
2142 ** > fossil login-group leave ?-R REPO?
2143 **
2144 ** Take the repository REPO, or if invoked from within a checkout the
2145 ** repository on which the current checkout is based, out of whatever
2146 ** login group it is a member.
2147 **
2148 ** About Login Groups:
2149 **
2150 ** A login-group is a set of repositories that share user credentials.
2151 ** If a user is logged into one member of the group, then that user can
2152 ** access any other group member as long as they have an entry in the USER
2153
--- src/login.c
+++ src/login.c
@@ -534,11 +534,10 @@
534 ** WEBPAGE: login
535 ** WEBPAGE: logout
536 ** WEBPAGE: my
537 **
538 ** The login/logout page. Parameters:
 
539 ** g=URL Jump back to this URL after login completes
540 ** anon The g=URL is not accessible by "nobody" but is
541 ** accessible by "anonymous"
542 */
543 void login_page(void){
@@ -736,17 +735,17 @@
735 @ <a href='%s(g.zHttpsURL)'>%h(g.zHttpsURL)</a> instead.
736 }
737 @ </span></td></tr>
738 }
739 @ <tr>
740 @ <td class="form_label" id="userlabel1"><label for="u">User ID:</label></td>
741 @ <td><input type="text" id="u" id="u" name="u" \
742 @ size="30" value="%s(anonFlag?"anonymous":"")"></td>
743 @ </tr>
744 @ <tr>
745 @ <td class="form_label" id="pswdlabel"><label for="p">Password:</label></td>
746 @ <td><input type="password" id="p" \
747 @ name="p" value="" size="30" />\
748 if( zAnonPw && !noAnon ){
749 captcha_speakit_button(uSeed, "Speak password for \"anonymous\"");
750 }
751 @ </td>
@@ -805,18 +804,19 @@
804 char *zRPW = fossil_random_password(12);
805 @ <hr>
806 @ <p>Change Password for user <b>%h(g.zLogin)</b>:</p>
807 form_begin(0, "%R/login");
808 @ <table>
809 @ <tr><td class="form_label" id="oldpw"><label for="p">Old Password:</label></td>
810 @ <td><input type="password" id="p" name="p" \
811 @ size="30"/></td></tr>
812 @ <tr><td class="form_label" id="newpw"><label for="n1">New Password:</label></td>
813 @ <td><input type="password" id="n1" name="n1" \
814 @ size="30" /> Suggestion: %z(zRPW)</td></tr>
815 @ <tr><td class="form_label" id="reppw">
816 @ <label for="n2">Repeat New Password:</label></td>
817 @ <td><input type="password" id="n2" name="n2" \
818 @ size="30" /></td></tr>
819 @ <tr><td></td>
820 @ <td><input type="submit" value="Change Password" /></td></tr>
821 @ </table>
822 @ </form>
@@ -1781,46 +1781,49 @@
1781 @ <input type="hidden" name="g" value="%h(P("g"))" />
1782 }
1783 @ <p><input type="hidden" name="captchaseed" value="%u(uSeed)" />
1784 @ <table class="login_out">
1785 @ <tr>
1786 @ <td class="form_label" align="right" id="uid"><label for="u">User ID:</label></td>
1787 @ <td><input type="text" id="u" name="u" \
1788 @ value="%h(zUserID)" size="30"></td>
1789 @
1790 if( iErrLine==1 ){
1791 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1792 }
1793 @ <tr>
1794 @ <td class="form_label" align="right" id="dpyname">
1795 @ <label for="dn">Display Name:</label></td>
1796 @ <td><input type="text" id="dn" name="dn" \
1797 @ value="%h(zDName)" size="30"></td>
1798 @ </tr>
1799 if( iErrLine==2 ){
1800 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1801 }
1802 @ </tr>
1803 @ <tr>
1804 @ <td class="form_label" align="right" id="emaddr">
1805 @ <label for="ea">Email Address:</label></td>
1806 @ <td><input type="text" id="ea" name="ea" \
1807 @ value="%h(zEAddr)" size="30"></td>
1808 @ </tr>
1809 if( iErrLine==3 ){
1810 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1811 }
1812 if( canDoAlerts ){
1813 int a = atoi(PD("alerts","1"));
1814 @ <tr>
1815 @ <td class="form_label" align="right" id="emalrt">
1816 @ <label for="alerts">Email&nbsp;Alerts?</label></td>
1817 @ <td><select size='1' id='alerts' name='alerts'>
1818 @ <option value="1" %s(a?"selected":"")>Yes</option>
1819 @ <option value="0" %s(!a?"selected":"")>No</option>
1820 @ </select></td></tr>
1821 }
1822 @ <tr>
1823 @ <td class="form_label" align="right" id="pswd"><label for="p">Password:</label></td>
1824 @ <td><input type="password" id="p" name="p" \
1825 @ value="%h(zPasswd)" size="30"> \
1826 if( zPasswd[0]==0 ){
1827 char *zRPW = fossil_random_password(12);
1828 @ Password suggestion: %z(zRPW)</td>
1829 }else{
@@ -1829,20 +1832,20 @@
1832 @ <tr>
1833 if( iErrLine==4 ){
1834 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1835 }
1836 @ <tr>
1837 @ <td class="form_label" align="right" id="pwcfrm"><label for="cp">Confirm:</label></td>
1838 @ <td><input type="password" id="cp" name="cp" \
1839 @ value="%h(zConfirm)" size="30"></td>
1840 @ </tr>
1841 if( iErrLine==5 ){
1842 @ <tr><td><td><span class='loginError'>&uarr; %h(zErr)</span></td></tr>
1843 }
1844 @ <tr>
1845 @ <td class="form_label" align="right" id="cptcha"><label for="captcha">Captcha:</label></td>
1846 @ <td><input type="text" id="captcha" name="captcha" \
1847 @ value="%h(captchaIsCorrect?zDecoded:"")" size="30">
1848 captcha_speakit_button(uSeed, "Speak the captcha text");
1849 @ </td>
1850 @ </tr>
1851 if( iErrLine==6 ){
@@ -2122,31 +2125,24 @@
2125 **
2126 ** Usage: %fossil login-group ?SUBCOMMAND? ?OPTIONS?
2127 **
2128 ** Run various subcommands to manage login-group related settings of the open
2129 ** repository or of the repository identified by the -R or --repository option.
 
2130 ** > fossil login-group ?-R REPO?
 
2131 ** Show the login-group to which REPO, or if invoked from within a checkout
2132 ** the repository on which the current checkout is based, belongs.
 
2133 ** > fossil login-group join ?-R? REPO ?--name NAME?
 
2134 ** This subcommand must be invoked from within a checkout to either: add
2135 ** the open repository to the login group that REPO is a member, in which
2136 ** case the optional "--name" argument is not required; or create a new
2137 ** login group between the open repository and REPO, in which case the new
2138 ** group NAME is determined by the mandatory "--name" option. REPO may be
2139 ** specified with or without the -R flag.
 
2140 ** > fossil login-group leave ?-R REPO?
 
2141 ** Take the repository REPO, or if invoked from within a checkout the
2142 ** repository on which the current checkout is based, out of whatever
2143 ** login group it is a member.
 
2144 ** About Login Groups:
2145 **
2146 ** A login-group is a set of repositories that share user credentials.
2147 ** If a user is logged into one member of the group, then that user can
2148 ** access any other group member as long as they have an entry in the USER
2149
-19
--- src/main.c
+++ src/main.c
@@ -1324,11 +1324,10 @@
13241324
** WEBPAGE: version
13251325
**
13261326
** Show the version information for Fossil.
13271327
**
13281328
** Query parameters:
1329
-**
13301329
** verbose Show details
13311330
*/
13321331
void test_version_page(void){
13331332
Blob versionInfo;
13341333
int verboseFlag;
@@ -2224,65 +2223,49 @@
22242223
** environment variable is set to "CGI", which should always be the
22252224
** case for CGI scripts run by a webserver. Fossil ignores any lines
22262225
** that begin with "#".
22272226
**
22282227
** The following control lines are recognized:
2229
-**
22302228
** repository: PATH Name of the Fossil repository
2231
-**
22322229
** directory: PATH Name of a directory containing many Fossil
22332230
** repositories whose names all end with ".fossil".
22342231
** There should only be one of "repository:"
22352232
** or "directory:"
2236
-**
22372233
** notfound: URL When in "directory:" mode, redirect to
22382234
** URL if no suitable repository is found.
2239
-**
22402235
** repolist When in "directory:" mode, display a page
22412236
** showing a list of available repositories if
22422237
** the URL is "/".
2243
-**
22442238
** localauth Grant administrator privileges to connections
22452239
** from 127.0.0.1 or ::1.
2246
-**
22472240
** skin: LABEL Use the built-in skin called LABEL rather than
22482241
** the default. If there are no skins called LABEL
22492242
** then this line is a no-op.
2250
-**
22512243
** files: GLOBLIST GLOBLIST is a comma-separated list of GLOB
22522244
** patterns that specify files that can be
22532245
** returned verbatim. This feature allows Fossil
22542246
** to act as a web server returning static
22552247
** content.
2256
-**
22572248
** setenv: NAME VALUE Set environment variable NAME to VALUE. Or
22582249
** if VALUE is omitted, unset NAME.
2259
-**
22602250
** HOME: PATH Shorthand for "setenv: HOME PATH"
2261
-**
22622251
** cgi-debug: FILE Causing debugging information to be written
22632252
** into FILE.
2264
-**
22652253
** errorlog: FILE Warnings, errors, and panics written to FILE.
2266
-**
22672254
** timeout: SECONDS Do not run for longer than SECONDS. The default
22682255
** timeout is FOSSIL_DEFAULT_TIMEOUT (600) seconds.
2269
-**
22702256
** extroot: DIR Directory that is the root of the sub-CGI tree
22712257
** on the /ext page.
2272
-**
22732258
** redirect: REPO URL Extract the "name" query parameter and search
22742259
** REPO for a check-in or ticket that matches the
22752260
** value of "name", then redirect to URL. There
22762261
** can be multiple "redirect:" lines that are
22772262
** processed in order. If the REPO is "*", then
22782263
** an unconditional redirect to URL is taken.
2279
-**
22802264
** jsmode: VALUE Specifies the delivery mode for JavaScript
22812265
** files. See the help text for the --jsmode
22822266
** flag of the http command.
2283
-**
22842267
** mainmenu: FILE Override the mainmenu config setting with the
22852268
** contents of the given file.
22862269
**
22872270
** Most CGI files contain only a "repository:" line. It is uncommon to
22882271
** use any other option.
@@ -2609,11 +2592,10 @@
26092592
** WEBPAGE: test-pid
26102593
**
26112594
** Return the process identifier of the running Fossil server instance.
26122595
**
26132596
** Query parameters:
2614
-**
26152597
** usepidkey When present and available, also return the
26162598
** address and size, within this server process,
26172599
** of the saved database encryption key. This
26182600
** is only supported when using SEE on Windows.
26192601
*/
@@ -3424,11 +3406,10 @@
34243406
/*
34253407
** WEBPAGE: test-warning
34263408
**
34273409
** Test error and warning log operation. This webpage is accessible to
34283410
** the administrator only.
3429
-**
34303411
** case=1 Issue a fossil_warning() while generating the page.
34313412
** case=2 Extra db_begin_transaction()
34323413
** case=3 Extra db_end_transaction()
34333414
** case=4 Error during SQL processing
34343415
** case=5 Call the segfault handler
34353416
--- src/main.c
+++ src/main.c
@@ -1324,11 +1324,10 @@
1324 ** WEBPAGE: version
1325 **
1326 ** Show the version information for Fossil.
1327 **
1328 ** Query parameters:
1329 **
1330 ** verbose Show details
1331 */
1332 void test_version_page(void){
1333 Blob versionInfo;
1334 int verboseFlag;
@@ -2224,65 +2223,49 @@
2224 ** environment variable is set to "CGI", which should always be the
2225 ** case for CGI scripts run by a webserver. Fossil ignores any lines
2226 ** that begin with "#".
2227 **
2228 ** The following control lines are recognized:
2229 **
2230 ** repository: PATH Name of the Fossil repository
2231 **
2232 ** directory: PATH Name of a directory containing many Fossil
2233 ** repositories whose names all end with ".fossil".
2234 ** There should only be one of "repository:"
2235 ** or "directory:"
2236 **
2237 ** notfound: URL When in "directory:" mode, redirect to
2238 ** URL if no suitable repository is found.
2239 **
2240 ** repolist When in "directory:" mode, display a page
2241 ** showing a list of available repositories if
2242 ** the URL is "/".
2243 **
2244 ** localauth Grant administrator privileges to connections
2245 ** from 127.0.0.1 or ::1.
2246 **
2247 ** skin: LABEL Use the built-in skin called LABEL rather than
2248 ** the default. If there are no skins called LABEL
2249 ** then this line is a no-op.
2250 **
2251 ** files: GLOBLIST GLOBLIST is a comma-separated list of GLOB
2252 ** patterns that specify files that can be
2253 ** returned verbatim. This feature allows Fossil
2254 ** to act as a web server returning static
2255 ** content.
2256 **
2257 ** setenv: NAME VALUE Set environment variable NAME to VALUE. Or
2258 ** if VALUE is omitted, unset NAME.
2259 **
2260 ** HOME: PATH Shorthand for "setenv: HOME PATH"
2261 **
2262 ** cgi-debug: FILE Causing debugging information to be written
2263 ** into FILE.
2264 **
2265 ** errorlog: FILE Warnings, errors, and panics written to FILE.
2266 **
2267 ** timeout: SECONDS Do not run for longer than SECONDS. The default
2268 ** timeout is FOSSIL_DEFAULT_TIMEOUT (600) seconds.
2269 **
2270 ** extroot: DIR Directory that is the root of the sub-CGI tree
2271 ** on the /ext page.
2272 **
2273 ** redirect: REPO URL Extract the "name" query parameter and search
2274 ** REPO for a check-in or ticket that matches the
2275 ** value of "name", then redirect to URL. There
2276 ** can be multiple "redirect:" lines that are
2277 ** processed in order. If the REPO is "*", then
2278 ** an unconditional redirect to URL is taken.
2279 **
2280 ** jsmode: VALUE Specifies the delivery mode for JavaScript
2281 ** files. See the help text for the --jsmode
2282 ** flag of the http command.
2283 **
2284 ** mainmenu: FILE Override the mainmenu config setting with the
2285 ** contents of the given file.
2286 **
2287 ** Most CGI files contain only a "repository:" line. It is uncommon to
2288 ** use any other option.
@@ -2609,11 +2592,10 @@
2609 ** WEBPAGE: test-pid
2610 **
2611 ** Return the process identifier of the running Fossil server instance.
2612 **
2613 ** Query parameters:
2614 **
2615 ** usepidkey When present and available, also return the
2616 ** address and size, within this server process,
2617 ** of the saved database encryption key. This
2618 ** is only supported when using SEE on Windows.
2619 */
@@ -3424,11 +3406,10 @@
3424 /*
3425 ** WEBPAGE: test-warning
3426 **
3427 ** Test error and warning log operation. This webpage is accessible to
3428 ** the administrator only.
3429 **
3430 ** case=1 Issue a fossil_warning() while generating the page.
3431 ** case=2 Extra db_begin_transaction()
3432 ** case=3 Extra db_end_transaction()
3433 ** case=4 Error during SQL processing
3434 ** case=5 Call the segfault handler
3435
--- src/main.c
+++ src/main.c
@@ -1324,11 +1324,10 @@
1324 ** WEBPAGE: version
1325 **
1326 ** Show the version information for Fossil.
1327 **
1328 ** Query parameters:
 
1329 ** verbose Show details
1330 */
1331 void test_version_page(void){
1332 Blob versionInfo;
1333 int verboseFlag;
@@ -2224,65 +2223,49 @@
2223 ** environment variable is set to "CGI", which should always be the
2224 ** case for CGI scripts run by a webserver. Fossil ignores any lines
2225 ** that begin with "#".
2226 **
2227 ** The following control lines are recognized:
 
2228 ** repository: PATH Name of the Fossil repository
 
2229 ** directory: PATH Name of a directory containing many Fossil
2230 ** repositories whose names all end with ".fossil".
2231 ** There should only be one of "repository:"
2232 ** or "directory:"
 
2233 ** notfound: URL When in "directory:" mode, redirect to
2234 ** URL if no suitable repository is found.
 
2235 ** repolist When in "directory:" mode, display a page
2236 ** showing a list of available repositories if
2237 ** the URL is "/".
 
2238 ** localauth Grant administrator privileges to connections
2239 ** from 127.0.0.1 or ::1.
 
2240 ** skin: LABEL Use the built-in skin called LABEL rather than
2241 ** the default. If there are no skins called LABEL
2242 ** then this line is a no-op.
 
2243 ** files: GLOBLIST GLOBLIST is a comma-separated list of GLOB
2244 ** patterns that specify files that can be
2245 ** returned verbatim. This feature allows Fossil
2246 ** to act as a web server returning static
2247 ** content.
 
2248 ** setenv: NAME VALUE Set environment variable NAME to VALUE. Or
2249 ** if VALUE is omitted, unset NAME.
 
2250 ** HOME: PATH Shorthand for "setenv: HOME PATH"
 
2251 ** cgi-debug: FILE Causing debugging information to be written
2252 ** into FILE.
 
2253 ** errorlog: FILE Warnings, errors, and panics written to FILE.
 
2254 ** timeout: SECONDS Do not run for longer than SECONDS. The default
2255 ** timeout is FOSSIL_DEFAULT_TIMEOUT (600) seconds.
 
2256 ** extroot: DIR Directory that is the root of the sub-CGI tree
2257 ** on the /ext page.
 
2258 ** redirect: REPO URL Extract the "name" query parameter and search
2259 ** REPO for a check-in or ticket that matches the
2260 ** value of "name", then redirect to URL. There
2261 ** can be multiple "redirect:" lines that are
2262 ** processed in order. If the REPO is "*", then
2263 ** an unconditional redirect to URL is taken.
 
2264 ** jsmode: VALUE Specifies the delivery mode for JavaScript
2265 ** files. See the help text for the --jsmode
2266 ** flag of the http command.
 
2267 ** mainmenu: FILE Override the mainmenu config setting with the
2268 ** contents of the given file.
2269 **
2270 ** Most CGI files contain only a "repository:" line. It is uncommon to
2271 ** use any other option.
@@ -2609,11 +2592,10 @@
2592 ** WEBPAGE: test-pid
2593 **
2594 ** Return the process identifier of the running Fossil server instance.
2595 **
2596 ** Query parameters:
 
2597 ** usepidkey When present and available, also return the
2598 ** address and size, within this server process,
2599 ** of the saved database encryption key. This
2600 ** is only supported when using SEE on Windows.
2601 */
@@ -3424,11 +3406,10 @@
3406 /*
3407 ** WEBPAGE: test-warning
3408 **
3409 ** Test error and warning log operation. This webpage is accessible to
3410 ** the administrator only.
 
3411 ** case=1 Issue a fossil_warning() while generating the page.
3412 ** case=2 Extra db_begin_transaction()
3413 ** case=3 Extra db_end_transaction()
3414 ** case=4 Error during SQL processing
3415 ** case=5 Call the segfault handler
3416
--- src/manifest.c
+++ src/manifest.c
@@ -1290,11 +1290,10 @@
12901290
** artifacts and report any errors. Run this test command on historical
12911291
** repositories after making any changes to the manifest_parse()
12921292
** implementation to confirm that the changes did not break anything.
12931293
**
12941294
** Options:
1295
-**
12961295
** --limit N Parse no more than N artifacts before stopping
12971296
** --wellformed Use all BLOB table entries as input, not just
12981297
** those entries that are believed to be valid
12991298
** artifacts, and verify that the result the
13001299
** manifest_is_well_formed() agrees with the
13011300
--- src/manifest.c
+++ src/manifest.c
@@ -1290,11 +1290,10 @@
1290 ** artifacts and report any errors. Run this test command on historical
1291 ** repositories after making any changes to the manifest_parse()
1292 ** implementation to confirm that the changes did not break anything.
1293 **
1294 ** Options:
1295 **
1296 ** --limit N Parse no more than N artifacts before stopping
1297 ** --wellformed Use all BLOB table entries as input, not just
1298 ** those entries that are believed to be valid
1299 ** artifacts, and verify that the result the
1300 ** manifest_is_well_formed() agrees with the
1301
--- src/manifest.c
+++ src/manifest.c
@@ -1290,11 +1290,10 @@
1290 ** artifacts and report any errors. Run this test command on historical
1291 ** repositories after making any changes to the manifest_parse()
1292 ** implementation to confirm that the changes did not break anything.
1293 **
1294 ** Options:
 
1295 ** --limit N Parse no more than N artifacts before stopping
1296 ** --wellformed Use all BLOB table entries as input, not just
1297 ** those entries that are believed to be valid
1298 ** artifacts, and verify that the result the
1299 ** manifest_is_well_formed() agrees with the
1300
-10
--- src/merge.c
+++ src/merge.c
@@ -295,41 +295,31 @@
295295
** Only file content is merged. The result continues to use the
296296
** file and directory names from the current checkout even if those
297297
** names might have been changed in the branch being merged in.
298298
**
299299
** Options:
300
-**
301300
** --backout Do a reverse cherrypick merge against VERSION.
302301
** In other words, back out the changes that were
303302
** added by VERSION.
304
-**
305303
** --baseline BASELINE Use BASELINE as the "pivot" of the merge instead
306304
** of the nearest common ancestor. This allows
307305
** a sequence of changes in a branch to be merged
308306
** without having to merge the entire branch.
309
-**
310307
** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary
311308
** and do not try to merge parallel changes. This
312309
** option overrides the "binary-glob" setting.
313
-**
314310
** --cherrypick Do a cherrypick merge VERSION into the current
315311
** checkout. A cherrypick merge pulls in the changes
316312
** of the single check-in VERSION, rather than all
317313
** changes back to the nearest common ancestor.
318
-**
319314
** -f|--force Force the merge even if it would be a no-op.
320
-**
321315
** --force-missing Force the merge even if there is missing content.
322
-**
323316
** --integrate Merged branch will be closed when committing.
324
-**
325317
** -K|--keep-merge-files On merge conflict, retain the temporary files
326318
** used for merging, named *-baseline, *-original,
327319
** and *-merge.
328
-**
329320
** -n|--dry-run If given, display instead of run actions
330
-**
331321
** -v|--verbose Show additional details of the merge
332322
*/
333323
void merge_cmd(void){
334324
int vid; /* Current version "V" */
335325
int mid; /* Version we are merging from "M" */
336326
--- src/merge.c
+++ src/merge.c
@@ -295,41 +295,31 @@
295 ** Only file content is merged. The result continues to use the
296 ** file and directory names from the current checkout even if those
297 ** names might have been changed in the branch being merged in.
298 **
299 ** Options:
300 **
301 ** --backout Do a reverse cherrypick merge against VERSION.
302 ** In other words, back out the changes that were
303 ** added by VERSION.
304 **
305 ** --baseline BASELINE Use BASELINE as the "pivot" of the merge instead
306 ** of the nearest common ancestor. This allows
307 ** a sequence of changes in a branch to be merged
308 ** without having to merge the entire branch.
309 **
310 ** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary
311 ** and do not try to merge parallel changes. This
312 ** option overrides the "binary-glob" setting.
313 **
314 ** --cherrypick Do a cherrypick merge VERSION into the current
315 ** checkout. A cherrypick merge pulls in the changes
316 ** of the single check-in VERSION, rather than all
317 ** changes back to the nearest common ancestor.
318 **
319 ** -f|--force Force the merge even if it would be a no-op.
320 **
321 ** --force-missing Force the merge even if there is missing content.
322 **
323 ** --integrate Merged branch will be closed when committing.
324 **
325 ** -K|--keep-merge-files On merge conflict, retain the temporary files
326 ** used for merging, named *-baseline, *-original,
327 ** and *-merge.
328 **
329 ** -n|--dry-run If given, display instead of run actions
330 **
331 ** -v|--verbose Show additional details of the merge
332 */
333 void merge_cmd(void){
334 int vid; /* Current version "V" */
335 int mid; /* Version we are merging from "M" */
336
--- src/merge.c
+++ src/merge.c
@@ -295,41 +295,31 @@
295 ** Only file content is merged. The result continues to use the
296 ** file and directory names from the current checkout even if those
297 ** names might have been changed in the branch being merged in.
298 **
299 ** Options:
 
300 ** --backout Do a reverse cherrypick merge against VERSION.
301 ** In other words, back out the changes that were
302 ** added by VERSION.
 
303 ** --baseline BASELINE Use BASELINE as the "pivot" of the merge instead
304 ** of the nearest common ancestor. This allows
305 ** a sequence of changes in a branch to be merged
306 ** without having to merge the entire branch.
 
307 ** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary
308 ** and do not try to merge parallel changes. This
309 ** option overrides the "binary-glob" setting.
 
310 ** --cherrypick Do a cherrypick merge VERSION into the current
311 ** checkout. A cherrypick merge pulls in the changes
312 ** of the single check-in VERSION, rather than all
313 ** changes back to the nearest common ancestor.
 
314 ** -f|--force Force the merge even if it would be a no-op.
 
315 ** --force-missing Force the merge even if there is missing content.
 
316 ** --integrate Merged branch will be closed when committing.
 
317 ** -K|--keep-merge-files On merge conflict, retain the temporary files
318 ** used for merging, named *-baseline, *-original,
319 ** and *-merge.
 
320 ** -n|--dry-run If given, display instead of run actions
 
321 ** -v|--verbose Show additional details of the merge
322 */
323 void merge_cmd(void){
324 int vid; /* Current version "V" */
325 int mid; /* Version we are merging from "M" */
326
+2 -3
--- src/name.c
+++ src/name.c
@@ -1026,11 +1026,10 @@
10261026
** Resolve the symbol NAME into its canonical artifact hash
10271027
** artifact name and provide a description of what role that artifact
10281028
** plays.
10291029
**
10301030
** Options:
1031
-**
10321031
** --type TYPE Only find artifacts of TYPE (one of: 'ci', 't',
10331032
** 'w', 'g', or 'e')
10341033
** -v|--verbose Provide extra information (such as the RID)
10351034
*/
10361035
void whatis_cmd(void){
@@ -1442,12 +1441,13 @@
14421441
}
14431442
14441443
/*
14451444
** WEBPAGE: bloblist
14461445
**
1447
-** Return a page showing all artifacts in the repository. Query parameters:
1446
+** Return a page showing all artifacts in the repository.
14481447
**
1448
+** Query parameters:
14491449
** n=N Show N artifacts
14501450
** s=S Start with artifact number S
14511451
** priv Show only unpublished or private artifacts
14521452
** phan Show only phantom artifacts
14531453
** hclr Color code hash types (SHA1 vs SHA3)
@@ -1660,11 +1660,10 @@
16601660
/*
16611661
** WEBPAGE: bigbloblist
16621662
**
16631663
** Return a page showing the largest artifacts in the repository in order
16641664
** of decreasing size.
1665
-**
16661665
** n=N Show the top N artifacts
16671666
*/
16681667
void bigbloblist_page(void){
16691668
Stmt q;
16701669
int n = atoi(PD("n","250"));
16711670
--- src/name.c
+++ src/name.c
@@ -1026,11 +1026,10 @@
1026 ** Resolve the symbol NAME into its canonical artifact hash
1027 ** artifact name and provide a description of what role that artifact
1028 ** plays.
1029 **
1030 ** Options:
1031 **
1032 ** --type TYPE Only find artifacts of TYPE (one of: 'ci', 't',
1033 ** 'w', 'g', or 'e')
1034 ** -v|--verbose Provide extra information (such as the RID)
1035 */
1036 void whatis_cmd(void){
@@ -1442,12 +1441,13 @@
1442 }
1443
1444 /*
1445 ** WEBPAGE: bloblist
1446 **
1447 ** Return a page showing all artifacts in the repository. Query parameters:
1448 **
 
1449 ** n=N Show N artifacts
1450 ** s=S Start with artifact number S
1451 ** priv Show only unpublished or private artifacts
1452 ** phan Show only phantom artifacts
1453 ** hclr Color code hash types (SHA1 vs SHA3)
@@ -1660,11 +1660,10 @@
1660 /*
1661 ** WEBPAGE: bigbloblist
1662 **
1663 ** Return a page showing the largest artifacts in the repository in order
1664 ** of decreasing size.
1665 **
1666 ** n=N Show the top N artifacts
1667 */
1668 void bigbloblist_page(void){
1669 Stmt q;
1670 int n = atoi(PD("n","250"));
1671
--- src/name.c
+++ src/name.c
@@ -1026,11 +1026,10 @@
1026 ** Resolve the symbol NAME into its canonical artifact hash
1027 ** artifact name and provide a description of what role that artifact
1028 ** plays.
1029 **
1030 ** Options:
 
1031 ** --type TYPE Only find artifacts of TYPE (one of: 'ci', 't',
1032 ** 'w', 'g', or 'e')
1033 ** -v|--verbose Provide extra information (such as the RID)
1034 */
1035 void whatis_cmd(void){
@@ -1442,12 +1441,13 @@
1441 }
1442
1443 /*
1444 ** WEBPAGE: bloblist
1445 **
1446 ** Return a page showing all artifacts in the repository.
1447 **
1448 ** Query parameters:
1449 ** n=N Show N artifacts
1450 ** s=S Start with artifact number S
1451 ** priv Show only unpublished or private artifacts
1452 ** phan Show only phantom artifacts
1453 ** hclr Color code hash types (SHA1 vs SHA3)
@@ -1660,11 +1660,10 @@
1660 /*
1661 ** WEBPAGE: bigbloblist
1662 **
1663 ** Return a page showing the largest artifacts in the repository in order
1664 ** of decreasing size.
 
1665 ** n=N Show the top N artifacts
1666 */
1667 void bigbloblist_page(void){
1668 Stmt q;
1669 int n = atoi(PD("n","250"));
1670
+6 -23
--- src/patch.c
+++ src/patch.c
@@ -837,71 +837,54 @@
837837
**
838838
** This command is used to create, view, and apply Fossil binary patches.
839839
** A Fossil binary patch is a single (binary) file that captures all of the
840840
** uncommitted changes of a check-out. Use Fossil binary patches to transfer
841841
** proposed or incomplete changes between machines for testing or analysis.
842
-**
843842
** > fossil patch create [DIRECTORY] FILENAME
844
-**
845843
** Create a new binary patch in FILENAME that captures all uncommitted
846844
** changes in the check-out at DIRECTORY, or the current directory if
847845
** DIRECTORY is omitted. If FILENAME is "-" then the binary patch
848846
** is written to standard output.
849
-**
850
-** -f|--force Overwrite an existing patch with the same name.
851
-**
852
-** > fossil patch apply [DIRECTORY] FILENAME
853
-**
854
-** Apply the changes in FILENAME to the check-out at DIRECTORY, or
855
-** in the current directory if DIRECTORY is omitted. Options:
856
-**
847
+** -f|--force Overwrite an existing patch with the same name.
848
+** > fossil patch apply [DIRECTORY] FILENAME
849
+** Apply the changes in FILENAME to the check-out at DIRECTORY, or
850
+** in the current directory if DIRECTORY is omitted.
851
+**
852
+** Options:
857853
** -f|--force Apply the patch even though there are unsaved
858854
** changes in the current check-out. Unsaved changes
859855
** are reverted and permanently lost.
860856
** -n|--dry-run Do nothing, but print what would have happened.
861857
** -v|--verbose Extra output explaining what happens.
862
-**
863858
** > fossil patch diff [DIRECTORY] FILENAME
864
-**
865859
** Show a human-readable diff for the patch. All the usual
866860
** diff flags described at "fossil help diff" apply. In addition:
867
-**
868861
** -f|--force Continue trying to perform the diff even if
869862
** baseline information is missing from the current
870863
** repository
871
-**
872864
** > fossil patch push REMOTE-CHECKOUT
873
-**
874865
** Create a patch for the current check-out, transfer that patch to
875866
** a remote machine (using ssh) and apply the patch there. The
876867
** REMOTE-CHECKOUT is in one of the following formats:
877
-**
878868
** * DIRECTORY
879869
** * HOST:DIRECTORY
880870
** * USER@HOST:DIRECTORY
881871
**
882872
** Command-line options:
883
-**
884873
** -f|--force Apply the patch even though there are unsaved
885874
** changes in the current check-out. Unsaved
886875
** changes will be reverted and then the patch is
887876
** applied.
888877
** --fossilcmd EXE Name of the "fossil" executable on the remote
889878
** -n|--dry-run Do nothing, but print what would have happened.
890879
** -v|--verbose Extra output explaining what happens.
891
-**
892
-**
893880
** > fossil patch pull REMOTE-CHECKOUT
894
-**
895881
** Like "fossil patch push" except that the transfer is from remote
896882
** to local. All the same command-line options apply.
897
-**
898883
** > fossil patch view FILENAME
899
-**
900884
** View a summary of the changes in the binary patch FILENAME.
901885
** Use "fossil patch diff" for detailed patch content.
902
-**
903886
** -v|--verbose Show extra detail about the patch.
904887
**
905888
*/
906889
void patch_cmd(void){
907890
const char *zCmd;
908891
--- src/patch.c
+++ src/patch.c
@@ -837,71 +837,54 @@
837 **
838 ** This command is used to create, view, and apply Fossil binary patches.
839 ** A Fossil binary patch is a single (binary) file that captures all of the
840 ** uncommitted changes of a check-out. Use Fossil binary patches to transfer
841 ** proposed or incomplete changes between machines for testing or analysis.
842 **
843 ** > fossil patch create [DIRECTORY] FILENAME
844 **
845 ** Create a new binary patch in FILENAME that captures all uncommitted
846 ** changes in the check-out at DIRECTORY, or the current directory if
847 ** DIRECTORY is omitted. If FILENAME is "-" then the binary patch
848 ** is written to standard output.
849 **
850 ** -f|--force Overwrite an existing patch with the same name.
851 **
852 ** > fossil patch apply [DIRECTORY] FILENAME
853 **
854 ** Apply the changes in FILENAME to the check-out at DIRECTORY, or
855 ** in the current directory if DIRECTORY is omitted. Options:
856 **
857 ** -f|--force Apply the patch even though there are unsaved
858 ** changes in the current check-out. Unsaved changes
859 ** are reverted and permanently lost.
860 ** -n|--dry-run Do nothing, but print what would have happened.
861 ** -v|--verbose Extra output explaining what happens.
862 **
863 ** > fossil patch diff [DIRECTORY] FILENAME
864 **
865 ** Show a human-readable diff for the patch. All the usual
866 ** diff flags described at "fossil help diff" apply. In addition:
867 **
868 ** -f|--force Continue trying to perform the diff even if
869 ** baseline information is missing from the current
870 ** repository
871 **
872 ** > fossil patch push REMOTE-CHECKOUT
873 **
874 ** Create a patch for the current check-out, transfer that patch to
875 ** a remote machine (using ssh) and apply the patch there. The
876 ** REMOTE-CHECKOUT is in one of the following formats:
877 **
878 ** * DIRECTORY
879 ** * HOST:DIRECTORY
880 ** * USER@HOST:DIRECTORY
881 **
882 ** Command-line options:
883 **
884 ** -f|--force Apply the patch even though there are unsaved
885 ** changes in the current check-out. Unsaved
886 ** changes will be reverted and then the patch is
887 ** applied.
888 ** --fossilcmd EXE Name of the "fossil" executable on the remote
889 ** -n|--dry-run Do nothing, but print what would have happened.
890 ** -v|--verbose Extra output explaining what happens.
891 **
892 **
893 ** > fossil patch pull REMOTE-CHECKOUT
894 **
895 ** Like "fossil patch push" except that the transfer is from remote
896 ** to local. All the same command-line options apply.
897 **
898 ** > fossil patch view FILENAME
899 **
900 ** View a summary of the changes in the binary patch FILENAME.
901 ** Use "fossil patch diff" for detailed patch content.
902 **
903 ** -v|--verbose Show extra detail about the patch.
904 **
905 */
906 void patch_cmd(void){
907 const char *zCmd;
908
--- src/patch.c
+++ src/patch.c
@@ -837,71 +837,54 @@
837 **
838 ** This command is used to create, view, and apply Fossil binary patches.
839 ** A Fossil binary patch is a single (binary) file that captures all of the
840 ** uncommitted changes of a check-out. Use Fossil binary patches to transfer
841 ** proposed or incomplete changes between machines for testing or analysis.
 
842 ** > fossil patch create [DIRECTORY] FILENAME
 
843 ** Create a new binary patch in FILENAME that captures all uncommitted
844 ** changes in the check-out at DIRECTORY, or the current directory if
845 ** DIRECTORY is omitted. If FILENAME is "-" then the binary patch
846 ** is written to standard output.
847 ** -f|--force Overwrite an existing patch with the same name.
848 ** > fossil patch apply [DIRECTORY] FILENAME
849 ** Apply the changes in FILENAME to the check-out at DIRECTORY, or
850 ** in the current directory if DIRECTORY is omitted.
851 **
852 ** Options:
 
 
853 ** -f|--force Apply the patch even though there are unsaved
854 ** changes in the current check-out. Unsaved changes
855 ** are reverted and permanently lost.
856 ** -n|--dry-run Do nothing, but print what would have happened.
857 ** -v|--verbose Extra output explaining what happens.
 
858 ** > fossil patch diff [DIRECTORY] FILENAME
 
859 ** Show a human-readable diff for the patch. All the usual
860 ** diff flags described at "fossil help diff" apply. In addition:
 
861 ** -f|--force Continue trying to perform the diff even if
862 ** baseline information is missing from the current
863 ** repository
 
864 ** > fossil patch push REMOTE-CHECKOUT
 
865 ** Create a patch for the current check-out, transfer that patch to
866 ** a remote machine (using ssh) and apply the patch there. The
867 ** REMOTE-CHECKOUT is in one of the following formats:
 
868 ** * DIRECTORY
869 ** * HOST:DIRECTORY
870 ** * USER@HOST:DIRECTORY
871 **
872 ** Command-line options:
 
873 ** -f|--force Apply the patch even though there are unsaved
874 ** changes in the current check-out. Unsaved
875 ** changes will be reverted and then the patch is
876 ** applied.
877 ** --fossilcmd EXE Name of the "fossil" executable on the remote
878 ** -n|--dry-run Do nothing, but print what would have happened.
879 ** -v|--verbose Extra output explaining what happens.
 
 
880 ** > fossil patch pull REMOTE-CHECKOUT
 
881 ** Like "fossil patch push" except that the transfer is from remote
882 ** to local. All the same command-line options apply.
 
883 ** > fossil patch view FILENAME
 
884 ** View a summary of the changes in the binary patch FILENAME.
885 ** Use "fossil patch diff" for detailed patch content.
 
886 ** -v|--verbose Show extra detail about the patch.
887 **
888 */
889 void patch_cmd(void){
890 const char *zCmd;
891
+4 -4
--- src/piechart.c
+++ src/piechart.c
@@ -315,14 +315,14 @@
315315
piechart_render(width,height, PIE_OTHER|PIE_PERCENT);
316316
@ </svg>
317317
@ <hr />
318318
}
319319
@ <form method="POST" action='%R/test-piechart'>
320
- @ <p>Comma-separated list of slice widths:<br />
321
- @ <input type='text' name='data' size='80' value='%h(zData)'/><br />
322
- @ Width: <input type='text' size='8' name='width' value='%d(width)'/>
323
- @ Height: <input type='text' size='8' name='height' value='%d(height)'/><br />
320
+ @ <p><label>Comma-separated list of slice widths:<br />
321
+ @ <input type='text' name='data' size='80' value='%h(zData)'/></label><br />
322
+ @ <label>Width: <input type='text' size='8' name='width' value='%d(width)'/></label>
323
+ @ <label>Height: <input type='text' size='8' name='height' value='%d(height)'/></label><br />
324324
@ <input type='submit' value='Draw The Pie Chart'/>
325325
@ </form>
326326
@ <p>Interesting test cases:
327327
@ <ul>
328328
@ <li> <a href='test-piechart?data=44,2,2,2,2,2,3,2,2,2,2,2,44'>Case 1</a>
329329
--- src/piechart.c
+++ src/piechart.c
@@ -315,14 +315,14 @@
315 piechart_render(width,height, PIE_OTHER|PIE_PERCENT);
316 @ </svg>
317 @ <hr />
318 }
319 @ <form method="POST" action='%R/test-piechart'>
320 @ <p>Comma-separated list of slice widths:<br />
321 @ <input type='text' name='data' size='80' value='%h(zData)'/><br />
322 @ Width: <input type='text' size='8' name='width' value='%d(width)'/>
323 @ Height: <input type='text' size='8' name='height' value='%d(height)'/><br />
324 @ <input type='submit' value='Draw The Pie Chart'/>
325 @ </form>
326 @ <p>Interesting test cases:
327 @ <ul>
328 @ <li> <a href='test-piechart?data=44,2,2,2,2,2,3,2,2,2,2,2,44'>Case 1</a>
329
--- src/piechart.c
+++ src/piechart.c
@@ -315,14 +315,14 @@
315 piechart_render(width,height, PIE_OTHER|PIE_PERCENT);
316 @ </svg>
317 @ <hr />
318 }
319 @ <form method="POST" action='%R/test-piechart'>
320 @ <p><label>Comma-separated list of slice widths:<br />
321 @ <input type='text' name='data' size='80' value='%h(zData)'/></label><br />
322 @ <label>Width: <input type='text' size='8' name='width' value='%d(width)'/></label>
323 @ <label>Height: <input type='text' size='8' name='height' value='%d(height)'/></label><br />
324 @ <input type='submit' value='Draw The Pie Chart'/>
325 @ </form>
326 @ <p>Interesting test cases:
327 @ <ul>
328 @ <li> <a href='test-piechart?data=44,2,2,2,2,2,3,2,2,2,2,2,44'>Case 1</a>
329
+3 -17
--- src/pikchrshow.c
+++ src/pikchrshow.c
@@ -287,11 +287,11 @@
287287
"arrow <-> down from last box.s\n"
288288
"box same \"Pikchr\" \"Formatter\" \"(pikchr.c)\" fit\n";
289289
}
290290
style_header("PikchrShow Client/Server");
291291
CX("<style>"); {
292
- CX("div.content { padding-top: 0.5em }\n");
292
+ CX("main.content { padding-top: 0.5em }\n");
293293
CX("#sbs-wrapper {"
294294
"display: flex; flex-direction: column;"
295295
"}\n");
296296
CX("#sbs-wrapper > * {"
297297
"margin: 0 0.25em 0.5em 0; flex: 1 10 auto;"
@@ -341,12 +341,12 @@
341341
CX("body.pikchrshow .v-align-middle{"
342342
"vertical-align: middle"
343343
"}\n");
344344
CX(".dragover {border: 3px dotted rgba(0,255,0,0.6)}\n");
345345
} CX("</style>");
346
- CX("<div>Input pikchr code and tap Preview (or Shift-Enter) to render "
347
- "it. <a href='?wasm'>Switch to WASM mode</a>.</div>");
346
+ CX("<div><label for='content'>Input pikchr code</label> and tap Preview (or "
347
+ "Shift-Enter) to render it. <a href='?wasm'>Switch to WASM mode</a>.</div>");
348348
CX("<div id='sbs-wrapper'>"); {
349349
CX("<div id='pikchrshow-form'>"); {
350350
CX("<textarea id='content' name='content' rows='15'>"
351351
"%s</textarea>",zContent/*safe-for-%s*/);
352352
CX("<div id='pikchrshow-controls'>"); {
@@ -525,46 +525,32 @@
525525
** an SVG graphic. The INFILE and OUTFILE options default to stdin
526526
** resp. stdout, and the names "-" can be used as aliases for those
527527
** streams.
528528
**
529529
** Options:
530
-**
531530
** -div On success, add a DIV wrapper around the
532531
** resulting SVG output which limits its max-width to
533532
** its computed maximum ideal size.
534
-**
535533
** -div-indent Like -div but indent the div.
536
-**
537534
** -div-center Like -div but center the div.
538
-**
539535
** -div-left Like -div but float the div left.
540
-**
541536
** -div-right Like -div but float the div right.
542
-**
543537
** -div-toggle Set the 'toggle' CSS class on the div (used by the
544538
** JavaScript-side post-processor).
545
-**
546539
** -div-source Set the 'source' CSS class on the div, which tells
547540
** CSS to hide the SVG and reveal the source by default.
548
-**
549541
** -src Store the input pikchr's source code in the output as
550542
** a separate element adjacent to the SVG one. Implied
551543
** by -div-source.
552
-**
553
-**
554544
** -th Process the input using TH1 before passing it to pikchr.
555
-**
556545
** -th-novar Disable $var and $<var> TH1 processing. Use this if the
557546
** pikchr script uses '$' for its own purposes and that
558547
** causes issues. This only affects parsing of '$' outside
559548
** of TH1 script blocks. Code in such blocks is unaffected.
560
-**
561549
** -th-nosvg When using -th, output the post-TH1'd script
562550
** instead of the pikchr-rendered output.
563
-**
564551
** -th-trace Trace TH1 execution (for debugging purposes).
565
-**
566552
**
567553
** The -div-indent/center/left/right flags may not be combined.
568554
**
569555
** TH1-related Notes and Caveats:
570556
**
571557
--- src/pikchrshow.c
+++ src/pikchrshow.c
@@ -287,11 +287,11 @@
287 "arrow <-> down from last box.s\n"
288 "box same \"Pikchr\" \"Formatter\" \"(pikchr.c)\" fit\n";
289 }
290 style_header("PikchrShow Client/Server");
291 CX("<style>"); {
292 CX("div.content { padding-top: 0.5em }\n");
293 CX("#sbs-wrapper {"
294 "display: flex; flex-direction: column;"
295 "}\n");
296 CX("#sbs-wrapper > * {"
297 "margin: 0 0.25em 0.5em 0; flex: 1 10 auto;"
@@ -341,12 +341,12 @@
341 CX("body.pikchrshow .v-align-middle{"
342 "vertical-align: middle"
343 "}\n");
344 CX(".dragover {border: 3px dotted rgba(0,255,0,0.6)}\n");
345 } CX("</style>");
346 CX("<div>Input pikchr code and tap Preview (or Shift-Enter) to render "
347 "it. <a href='?wasm'>Switch to WASM mode</a>.</div>");
348 CX("<div id='sbs-wrapper'>"); {
349 CX("<div id='pikchrshow-form'>"); {
350 CX("<textarea id='content' name='content' rows='15'>"
351 "%s</textarea>",zContent/*safe-for-%s*/);
352 CX("<div id='pikchrshow-controls'>"); {
@@ -525,46 +525,32 @@
525 ** an SVG graphic. The INFILE and OUTFILE options default to stdin
526 ** resp. stdout, and the names "-" can be used as aliases for those
527 ** streams.
528 **
529 ** Options:
530 **
531 ** -div On success, add a DIV wrapper around the
532 ** resulting SVG output which limits its max-width to
533 ** its computed maximum ideal size.
534 **
535 ** -div-indent Like -div but indent the div.
536 **
537 ** -div-center Like -div but center the div.
538 **
539 ** -div-left Like -div but float the div left.
540 **
541 ** -div-right Like -div but float the div right.
542 **
543 ** -div-toggle Set the 'toggle' CSS class on the div (used by the
544 ** JavaScript-side post-processor).
545 **
546 ** -div-source Set the 'source' CSS class on the div, which tells
547 ** CSS to hide the SVG and reveal the source by default.
548 **
549 ** -src Store the input pikchr's source code in the output as
550 ** a separate element adjacent to the SVG one. Implied
551 ** by -div-source.
552 **
553 **
554 ** -th Process the input using TH1 before passing it to pikchr.
555 **
556 ** -th-novar Disable $var and $<var> TH1 processing. Use this if the
557 ** pikchr script uses '$' for its own purposes and that
558 ** causes issues. This only affects parsing of '$' outside
559 ** of TH1 script blocks. Code in such blocks is unaffected.
560 **
561 ** -th-nosvg When using -th, output the post-TH1'd script
562 ** instead of the pikchr-rendered output.
563 **
564 ** -th-trace Trace TH1 execution (for debugging purposes).
565 **
566 **
567 ** The -div-indent/center/left/right flags may not be combined.
568 **
569 ** TH1-related Notes and Caveats:
570 **
571
--- src/pikchrshow.c
+++ src/pikchrshow.c
@@ -287,11 +287,11 @@
287 "arrow <-> down from last box.s\n"
288 "box same \"Pikchr\" \"Formatter\" \"(pikchr.c)\" fit\n";
289 }
290 style_header("PikchrShow Client/Server");
291 CX("<style>"); {
292 CX("main.content { padding-top: 0.5em }\n");
293 CX("#sbs-wrapper {"
294 "display: flex; flex-direction: column;"
295 "}\n");
296 CX("#sbs-wrapper > * {"
297 "margin: 0 0.25em 0.5em 0; flex: 1 10 auto;"
@@ -341,12 +341,12 @@
341 CX("body.pikchrshow .v-align-middle{"
342 "vertical-align: middle"
343 "}\n");
344 CX(".dragover {border: 3px dotted rgba(0,255,0,0.6)}\n");
345 } CX("</style>");
346 CX("<div><label for='content'>Input pikchr code</label> and tap Preview (or "
347 "Shift-Enter) to render it. <a href='?wasm'>Switch to WASM mode</a>.</div>");
348 CX("<div id='sbs-wrapper'>"); {
349 CX("<div id='pikchrshow-form'>"); {
350 CX("<textarea id='content' name='content' rows='15'>"
351 "%s</textarea>",zContent/*safe-for-%s*/);
352 CX("<div id='pikchrshow-controls'>"); {
@@ -525,46 +525,32 @@
525 ** an SVG graphic. The INFILE and OUTFILE options default to stdin
526 ** resp. stdout, and the names "-" can be used as aliases for those
527 ** streams.
528 **
529 ** Options:
 
530 ** -div On success, add a DIV wrapper around the
531 ** resulting SVG output which limits its max-width to
532 ** its computed maximum ideal size.
 
533 ** -div-indent Like -div but indent the div.
 
534 ** -div-center Like -div but center the div.
 
535 ** -div-left Like -div but float the div left.
 
536 ** -div-right Like -div but float the div right.
 
537 ** -div-toggle Set the 'toggle' CSS class on the div (used by the
538 ** JavaScript-side post-processor).
 
539 ** -div-source Set the 'source' CSS class on the div, which tells
540 ** CSS to hide the SVG and reveal the source by default.
 
541 ** -src Store the input pikchr's source code in the output as
542 ** a separate element adjacent to the SVG one. Implied
543 ** by -div-source.
 
 
544 ** -th Process the input using TH1 before passing it to pikchr.
 
545 ** -th-novar Disable $var and $<var> TH1 processing. Use this if the
546 ** pikchr script uses '$' for its own purposes and that
547 ** causes issues. This only affects parsing of '$' outside
548 ** of TH1 script blocks. Code in such blocks is unaffected.
 
549 ** -th-nosvg When using -th, output the post-TH1'd script
550 ** instead of the pikchr-rendered output.
 
551 ** -th-trace Trace TH1 execution (for debugging purposes).
 
552 **
553 ** The -div-indent/center/left/right flags may not be combined.
554 **
555 ** TH1-related Notes and Caveats:
556 **
557
-19
--- src/purge.c
+++ src/purge.c
@@ -455,60 +455,41 @@
455455
** leave your repository in a goofy state. Know what you are doing!
456456
** Make a backup of your repository before using this command!
457457
**
458458
** FURTHER WARNING: This command is a work-in-progress and may yet
459459
** contain bugs.
460
-**
461460
** > fossil purge artifacts HASH... ?OPTIONS?
462
-**
463461
** Move arbitrary artifacts identified by the HASH list into the
464462
** graveyard.
465
-**
466463
** > fossil purge cat HASH...
467
-**
468464
** Write the content of one or more artifacts in the graveyard onto
469465
** standard output.
470
-**
471466
** > fossil purge checkins TAGS... ?OPTIONS?
472
-**
473467
** Move the check-ins or branches identified by TAGS and all of
474468
** their descendants out of the repository and into the graveyard.
475469
** If TAGS includes a branch name then it means all the check-ins
476470
** on the most recent occurrence of that branch.
477
-**
478471
** > fossil purge files NAME ... ?OPTIONS?
479
-**
480472
** Move all instances of files called NAME into the graveyard.
481473
** NAME should be the name of the file relative to the root of the
482474
** repository. If NAME is a directory, then all files within that
483475
** directory are moved.
484
-**
485476
** > fossil purge list|ls ?-l?
486
-**
487477
** Show the graveyard of prior purges. The -l option gives more
488478
** detail in the output.
489
-**
490479
** > fossil purge obliterate ID... ?--force?
491
-**
492480
** Remove one or more purge events from the graveyard. Once a purge
493481
** event is obliterated, it can no longer be undone. The --force
494482
** option suppresses the confirmation prompt.
495
-**
496483
** > fossil purge tickets NAME ... ?OPTIONS?
497
-**
498484
** TBD...
499
-**
500485
** > fossil purge undo ID
501
-**
502486
** Restore the content previously removed by purge ID.
503
-**
504487
** > fossil purge wiki NAME ... ?OPTIONS?
505
-**
506488
** TBD...
507489
**
508490
** COMMON OPTIONS:
509
-**
510491
** --explain Make no changes, but show what would happen
511492
** --dry-run An alias for --explain
512493
*/
513494
void purge_cmd(void){
514495
int purgeFlags = PURGE_MOVETO_GRAVEYARD | PURGE_PRINT_SUMMARY;
515496
--- src/purge.c
+++ src/purge.c
@@ -455,60 +455,41 @@
455 ** leave your repository in a goofy state. Know what you are doing!
456 ** Make a backup of your repository before using this command!
457 **
458 ** FURTHER WARNING: This command is a work-in-progress and may yet
459 ** contain bugs.
460 **
461 ** > fossil purge artifacts HASH... ?OPTIONS?
462 **
463 ** Move arbitrary artifacts identified by the HASH list into the
464 ** graveyard.
465 **
466 ** > fossil purge cat HASH...
467 **
468 ** Write the content of one or more artifacts in the graveyard onto
469 ** standard output.
470 **
471 ** > fossil purge checkins TAGS... ?OPTIONS?
472 **
473 ** Move the check-ins or branches identified by TAGS and all of
474 ** their descendants out of the repository and into the graveyard.
475 ** If TAGS includes a branch name then it means all the check-ins
476 ** on the most recent occurrence of that branch.
477 **
478 ** > fossil purge files NAME ... ?OPTIONS?
479 **
480 ** Move all instances of files called NAME into the graveyard.
481 ** NAME should be the name of the file relative to the root of the
482 ** repository. If NAME is a directory, then all files within that
483 ** directory are moved.
484 **
485 ** > fossil purge list|ls ?-l?
486 **
487 ** Show the graveyard of prior purges. The -l option gives more
488 ** detail in the output.
489 **
490 ** > fossil purge obliterate ID... ?--force?
491 **
492 ** Remove one or more purge events from the graveyard. Once a purge
493 ** event is obliterated, it can no longer be undone. The --force
494 ** option suppresses the confirmation prompt.
495 **
496 ** > fossil purge tickets NAME ... ?OPTIONS?
497 **
498 ** TBD...
499 **
500 ** > fossil purge undo ID
501 **
502 ** Restore the content previously removed by purge ID.
503 **
504 ** > fossil purge wiki NAME ... ?OPTIONS?
505 **
506 ** TBD...
507 **
508 ** COMMON OPTIONS:
509 **
510 ** --explain Make no changes, but show what would happen
511 ** --dry-run An alias for --explain
512 */
513 void purge_cmd(void){
514 int purgeFlags = PURGE_MOVETO_GRAVEYARD | PURGE_PRINT_SUMMARY;
515
--- src/purge.c
+++ src/purge.c
@@ -455,60 +455,41 @@
455 ** leave your repository in a goofy state. Know what you are doing!
456 ** Make a backup of your repository before using this command!
457 **
458 ** FURTHER WARNING: This command is a work-in-progress and may yet
459 ** contain bugs.
 
460 ** > fossil purge artifacts HASH... ?OPTIONS?
 
461 ** Move arbitrary artifacts identified by the HASH list into the
462 ** graveyard.
 
463 ** > fossil purge cat HASH...
 
464 ** Write the content of one or more artifacts in the graveyard onto
465 ** standard output.
 
466 ** > fossil purge checkins TAGS... ?OPTIONS?
 
467 ** Move the check-ins or branches identified by TAGS and all of
468 ** their descendants out of the repository and into the graveyard.
469 ** If TAGS includes a branch name then it means all the check-ins
470 ** on the most recent occurrence of that branch.
 
471 ** > fossil purge files NAME ... ?OPTIONS?
 
472 ** Move all instances of files called NAME into the graveyard.
473 ** NAME should be the name of the file relative to the root of the
474 ** repository. If NAME is a directory, then all files within that
475 ** directory are moved.
 
476 ** > fossil purge list|ls ?-l?
 
477 ** Show the graveyard of prior purges. The -l option gives more
478 ** detail in the output.
 
479 ** > fossil purge obliterate ID... ?--force?
 
480 ** Remove one or more purge events from the graveyard. Once a purge
481 ** event is obliterated, it can no longer be undone. The --force
482 ** option suppresses the confirmation prompt.
 
483 ** > fossil purge tickets NAME ... ?OPTIONS?
 
484 ** TBD...
 
485 ** > fossil purge undo ID
 
486 ** Restore the content previously removed by purge ID.
 
487 ** > fossil purge wiki NAME ... ?OPTIONS?
 
488 ** TBD...
489 **
490 ** COMMON OPTIONS:
 
491 ** --explain Make no changes, but show what would happen
492 ** --dry-run An alias for --explain
493 */
494 void purge_cmd(void){
495 int purgeFlags = PURGE_MOVETO_GRAVEYARD | PURGE_PRINT_SUMMARY;
496
--- src/regexp.c
+++ src/regexp.c
@@ -809,11 +809,10 @@
809809
**
810810
** Run a regular expression match over the named disk files, or against
811811
** standard input if no disk files are named on the command-line.
812812
**
813813
** Options:
814
-**
815814
** -i|--ignore-case Ignore case
816815
*/
817816
void re_test_grep(void){
818817
ReCompiled *pRe;
819818
const char *zErr;
@@ -853,11 +852,10 @@
853852
**
854853
** For details of the supported regular expression dialect, see
855854
** https://fossil-scm.org/fossil/doc/trunk/www/grep.md
856855
**
857856
** Options:
858
-**
859857
** -c|--count Suppress normal output; instead print a count
860858
** of the number of matching files
861859
** -i|--ignore-case Ignore case
862860
** -l|--files-with-matches List only hash for each match
863861
** --once Stop searching after the first match
864862
--- src/regexp.c
+++ src/regexp.c
@@ -809,11 +809,10 @@
809 **
810 ** Run a regular expression match over the named disk files, or against
811 ** standard input if no disk files are named on the command-line.
812 **
813 ** Options:
814 **
815 ** -i|--ignore-case Ignore case
816 */
817 void re_test_grep(void){
818 ReCompiled *pRe;
819 const char *zErr;
@@ -853,11 +852,10 @@
853 **
854 ** For details of the supported regular expression dialect, see
855 ** https://fossil-scm.org/fossil/doc/trunk/www/grep.md
856 **
857 ** Options:
858 **
859 ** -c|--count Suppress normal output; instead print a count
860 ** of the number of matching files
861 ** -i|--ignore-case Ignore case
862 ** -l|--files-with-matches List only hash for each match
863 ** --once Stop searching after the first match
864
--- src/regexp.c
+++ src/regexp.c
@@ -809,11 +809,10 @@
809 **
810 ** Run a regular expression match over the named disk files, or against
811 ** standard input if no disk files are named on the command-line.
812 **
813 ** Options:
 
814 ** -i|--ignore-case Ignore case
815 */
816 void re_test_grep(void){
817 ReCompiled *pRe;
818 const char *zErr;
@@ -853,11 +852,10 @@
852 **
853 ** For details of the supported regular expression dialect, see
854 ** https://fossil-scm.org/fossil/doc/trunk/www/grep.md
855 **
856 ** Options:
 
857 ** -c|--count Suppress normal output; instead print a count
858 ** of the number of matching files
859 ** -i|--ignore-case Ignore case
860 ** -l|--files-with-matches List only hash for each match
861 ** --once Stop searching after the first match
862
+14 -12
--- src/report.c
+++ src/report.c
@@ -380,12 +380,12 @@
380380
/*
381381
** WEBPAGE: rptnew
382382
** WEBPAGE: rptedit
383383
**
384384
** Create (/rptnew) or edit (/rptedit) a ticket report format.
385
-** Query parameters:
386385
**
386
+** Query parameters:
387387
** rn=N Ticket report number. (required)
388388
** t=TITLE Title of the report format
389389
** w=USER Owner of the report format
390390
** s=SQL SQL text used to implement the report
391391
** k=KEY Color key
@@ -511,28 +511,30 @@
511511
if( zErr ){
512512
@ <blockquote class="reportError">%h(zErr)</blockquote>
513513
}
514514
@ <form action="rptedit" method="post"><div>
515515
@ <input type="hidden" name="rn" value="%d(rn)" />
516
- @ <p>Report Title:<br />
517
- @ <input type="text" name="t" value="%h(zTitle)" size="60" /></p>
518
- @ <p>Enter a complete SQL query statement against the "TICKET" table:<br />
519
- @ <textarea name="s" rows="20" cols="80">%h(zSQL)</textarea>
516
+ @ <p><label for="t">Report Title:</label><br />
517
+ @ <input type="text" id="t" name="t" value="%h(zTitle)" size="60" /></p>
518
+ @ <p><label for="s">
519
+ @ Enter a complete SQL query statement against the "TICKET" table:</label><br />
520
+ @ <textarea id="s" name="s" rows="20" cols="80">%h(zSQL)</textarea>
520521
@ </p>
521522
login_insert_csrf_secret();
522523
if( g.perm.Admin ){
523
- @ <p>Report owner:
524
- @ <input type="text" name="w" size="20" value="%h(zOwner)" />
524
+ @ <p><label for="w">Report owner:</label>
525
+ @ <input type="text" id="w" name="w" size="20" value="%h(zOwner)" />
525526
@ </p>
526527
} else {
527528
@ <input type="hidden" name="w" value="%h(zOwner)" />
528529
}
529
- @ <p>Enter an optional color key in the following box. (If blank, no
530
+ @ <p><label for="k">
531
+ @ Enter an optional color key in the following box.</label> (If blank, no
530532
@ color key is displayed.) Each line contains the text for a single
531533
@ entry in the key. The first token of each line is the background
532534
@ color for that line.<br />
533
- @ <textarea name="k" rows="8" cols="50">%h(zClrKey)</textarea>
535
+ @ <textarea id="k" name="k" rows="8" cols="50">%h(zClrKey)</textarea>
534536
@ </p>
535537
@ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \
536538
@ Make this the default report</label></p>
537539
if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
538540
@ <p>This report format is owned by %h(zOwner). You are not allowed
@@ -560,11 +562,11 @@
560562
zSchema = db_text(0,"SELECT sql FROM sqlite_schema WHERE name='ticket'");
561563
if( zSchema==0 ){
562564
zSchema = db_text(0,"SELECT sql FROM repository.sqlite_schema"
563565
" WHERE name='ticket'");
564566
}
565
- @ <hr /><h3>TICKET Schema</h3>
567
+ @ <hr /><h2>TICKET Schema</h2>
566568
@ <blockquote><pre>
567569
@ <code class="language-sql">%h(zSchema)</code>
568570
@ </pre></blockquote>
569571
@ <h3>Notes</h3>
570572
@ <ul>
@@ -773,11 +775,11 @@
773775
for(i=0; i<nArg; i++){
774776
const char *zName = azName[i];
775777
if( i==pState->iBg ) continue;
776778
if( pState->iNewRow>=0 && i>=pState->iNewRow ){
777779
if( g.perm.Write && zTid ){
778
- @ <th>&nbsp;</th>
780
+ @ <td>&nbsp;</td>
779781
zTid = 0;
780782
}
781783
if( zName[0]=='_' ) zName++;
782784
@ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th>
783785
}else{
@@ -786,11 +788,11 @@
786788
}
787789
@ <th>%h(zName)</th>
788790
}
789791
}
790792
if( g.perm.Write && zTid ){
791
- @ <th>&nbsp;</th>
793
+ @ <td>&nbsp;</td>
792794
}
793795
@ </tr></thead><tbody>
794796
}
795797
if( azArg==0 ){
796798
@ <tr><td colspan="%d(pState->nCol)">
797799
--- src/report.c
+++ src/report.c
@@ -380,12 +380,12 @@
380 /*
381 ** WEBPAGE: rptnew
382 ** WEBPAGE: rptedit
383 **
384 ** Create (/rptnew) or edit (/rptedit) a ticket report format.
385 ** Query parameters:
386 **
 
387 ** rn=N Ticket report number. (required)
388 ** t=TITLE Title of the report format
389 ** w=USER Owner of the report format
390 ** s=SQL SQL text used to implement the report
391 ** k=KEY Color key
@@ -511,28 +511,30 @@
511 if( zErr ){
512 @ <blockquote class="reportError">%h(zErr)</blockquote>
513 }
514 @ <form action="rptedit" method="post"><div>
515 @ <input type="hidden" name="rn" value="%d(rn)" />
516 @ <p>Report Title:<br />
517 @ <input type="text" name="t" value="%h(zTitle)" size="60" /></p>
518 @ <p>Enter a complete SQL query statement against the "TICKET" table:<br />
519 @ <textarea name="s" rows="20" cols="80">%h(zSQL)</textarea>
 
520 @ </p>
521 login_insert_csrf_secret();
522 if( g.perm.Admin ){
523 @ <p>Report owner:
524 @ <input type="text" name="w" size="20" value="%h(zOwner)" />
525 @ </p>
526 } else {
527 @ <input type="hidden" name="w" value="%h(zOwner)" />
528 }
529 @ <p>Enter an optional color key in the following box. (If blank, no
 
530 @ color key is displayed.) Each line contains the text for a single
531 @ entry in the key. The first token of each line is the background
532 @ color for that line.<br />
533 @ <textarea name="k" rows="8" cols="50">%h(zClrKey)</textarea>
534 @ </p>
535 @ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \
536 @ Make this the default report</label></p>
537 if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
538 @ <p>This report format is owned by %h(zOwner). You are not allowed
@@ -560,11 +562,11 @@
560 zSchema = db_text(0,"SELECT sql FROM sqlite_schema WHERE name='ticket'");
561 if( zSchema==0 ){
562 zSchema = db_text(0,"SELECT sql FROM repository.sqlite_schema"
563 " WHERE name='ticket'");
564 }
565 @ <hr /><h3>TICKET Schema</h3>
566 @ <blockquote><pre>
567 @ <code class="language-sql">%h(zSchema)</code>
568 @ </pre></blockquote>
569 @ <h3>Notes</h3>
570 @ <ul>
@@ -773,11 +775,11 @@
773 for(i=0; i<nArg; i++){
774 const char *zName = azName[i];
775 if( i==pState->iBg ) continue;
776 if( pState->iNewRow>=0 && i>=pState->iNewRow ){
777 if( g.perm.Write && zTid ){
778 @ <th>&nbsp;</th>
779 zTid = 0;
780 }
781 if( zName[0]=='_' ) zName++;
782 @ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th>
783 }else{
@@ -786,11 +788,11 @@
786 }
787 @ <th>%h(zName)</th>
788 }
789 }
790 if( g.perm.Write && zTid ){
791 @ <th>&nbsp;</th>
792 }
793 @ </tr></thead><tbody>
794 }
795 if( azArg==0 ){
796 @ <tr><td colspan="%d(pState->nCol)">
797
--- src/report.c
+++ src/report.c
@@ -380,12 +380,12 @@
380 /*
381 ** WEBPAGE: rptnew
382 ** WEBPAGE: rptedit
383 **
384 ** Create (/rptnew) or edit (/rptedit) a ticket report format.
 
385 **
386 ** Query parameters:
387 ** rn=N Ticket report number. (required)
388 ** t=TITLE Title of the report format
389 ** w=USER Owner of the report format
390 ** s=SQL SQL text used to implement the report
391 ** k=KEY Color key
@@ -511,28 +511,30 @@
511 if( zErr ){
512 @ <blockquote class="reportError">%h(zErr)</blockquote>
513 }
514 @ <form action="rptedit" method="post"><div>
515 @ <input type="hidden" name="rn" value="%d(rn)" />
516 @ <p><label for="t">Report Title:</label><br />
517 @ <input type="text" id="t" name="t" value="%h(zTitle)" size="60" /></p>
518 @ <p><label for="s">
519 @ Enter a complete SQL query statement against the "TICKET" table:</label><br />
520 @ <textarea id="s" name="s" rows="20" cols="80">%h(zSQL)</textarea>
521 @ </p>
522 login_insert_csrf_secret();
523 if( g.perm.Admin ){
524 @ <p><label for="w">Report owner:</label>
525 @ <input type="text" id="w" name="w" size="20" value="%h(zOwner)" />
526 @ </p>
527 } else {
528 @ <input type="hidden" name="w" value="%h(zOwner)" />
529 }
530 @ <p><label for="k">
531 @ Enter an optional color key in the following box.</label> (If blank, no
532 @ color key is displayed.) Each line contains the text for a single
533 @ entry in the key. The first token of each line is the background
534 @ color for that line.<br />
535 @ <textarea id="k" name="k" rows="8" cols="50">%h(zClrKey)</textarea>
536 @ </p>
537 @ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \
538 @ Make this the default report</label></p>
539 if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){
540 @ <p>This report format is owned by %h(zOwner). You are not allowed
@@ -560,11 +562,11 @@
562 zSchema = db_text(0,"SELECT sql FROM sqlite_schema WHERE name='ticket'");
563 if( zSchema==0 ){
564 zSchema = db_text(0,"SELECT sql FROM repository.sqlite_schema"
565 " WHERE name='ticket'");
566 }
567 @ <hr /><h2>TICKET Schema</h2>
568 @ <blockquote><pre>
569 @ <code class="language-sql">%h(zSchema)</code>
570 @ </pre></blockquote>
571 @ <h3>Notes</h3>
572 @ <ul>
@@ -773,11 +775,11 @@
775 for(i=0; i<nArg; i++){
776 const char *zName = azName[i];
777 if( i==pState->iBg ) continue;
778 if( pState->iNewRow>=0 && i>=pState->iNewRow ){
779 if( g.perm.Write && zTid ){
780 @ <td>&nbsp;</td>
781 zTid = 0;
782 }
783 if( zName[0]=='_' ) zName++;
784 @ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th>
785 }else{
@@ -786,11 +788,11 @@
788 }
789 @ <th>%h(zName)</th>
790 }
791 }
792 if( g.perm.Write && zTid ){
793 @ <td>&nbsp;</td>
794 }
795 @ </tr></thead><tbody>
796 }
797 if( azArg==0 ){
798 @ <tr><td colspan="%d(pState->nCol)">
799
+2 -7
--- src/rss.c
+++ src/rss.c
@@ -230,29 +230,24 @@
230230
** COMMAND: rss*
231231
**
232232
** Usage: %fossil rss ?OPTIONS?
233233
**
234234
** The CLI variant of the /timeline.rss page, this produces an RSS
235
-** feed of the timeline to stdout. Options:
235
+** feed of the timeline to stdout.
236236
**
237
+** Options:
237238
** -type|y FLAG May be: all (default), ci (show check-ins only),
238239
** t (show tickets only), w (show wiki only).
239
-**
240240
** -limit|n LIMIT The maximum number of items to show.
241
-**
242241
** -tkt HASH Filter for only those events for the specified ticket.
243
-**
244242
** -tag TAG Filter for a tag
245
-**
246243
** -wiki NAME Filter on a specific wiki page.
247244
**
248245
** Only one of -tkt, -tag, or -wiki may be used.
249
-**
250246
** -name FILENAME Filter for a specific file. This may be combined
251247
** with one of the other filters (useful for looking
252248
** at a specific branch).
253
-**
254249
** -url STRING Set the RSS feed's root URL to the given string.
255250
** The default is "URL-PLACEHOLDER" (without quotes).
256251
*/
257252
void cmd_timeline_rss(void){
258253
Stmt q;
259254
--- src/rss.c
+++ src/rss.c
@@ -230,29 +230,24 @@
230 ** COMMAND: rss*
231 **
232 ** Usage: %fossil rss ?OPTIONS?
233 **
234 ** The CLI variant of the /timeline.rss page, this produces an RSS
235 ** feed of the timeline to stdout. Options:
236 **
 
237 ** -type|y FLAG May be: all (default), ci (show check-ins only),
238 ** t (show tickets only), w (show wiki only).
239 **
240 ** -limit|n LIMIT The maximum number of items to show.
241 **
242 ** -tkt HASH Filter for only those events for the specified ticket.
243 **
244 ** -tag TAG Filter for a tag
245 **
246 ** -wiki NAME Filter on a specific wiki page.
247 **
248 ** Only one of -tkt, -tag, or -wiki may be used.
249 **
250 ** -name FILENAME Filter for a specific file. This may be combined
251 ** with one of the other filters (useful for looking
252 ** at a specific branch).
253 **
254 ** -url STRING Set the RSS feed's root URL to the given string.
255 ** The default is "URL-PLACEHOLDER" (without quotes).
256 */
257 void cmd_timeline_rss(void){
258 Stmt q;
259
--- src/rss.c
+++ src/rss.c
@@ -230,29 +230,24 @@
230 ** COMMAND: rss*
231 **
232 ** Usage: %fossil rss ?OPTIONS?
233 **
234 ** The CLI variant of the /timeline.rss page, this produces an RSS
235 ** feed of the timeline to stdout.
236 **
237 ** Options:
238 ** -type|y FLAG May be: all (default), ci (show check-ins only),
239 ** t (show tickets only), w (show wiki only).
 
240 ** -limit|n LIMIT The maximum number of items to show.
 
241 ** -tkt HASH Filter for only those events for the specified ticket.
 
242 ** -tag TAG Filter for a tag
 
243 ** -wiki NAME Filter on a specific wiki page.
244 **
245 ** Only one of -tkt, -tag, or -wiki may be used.
 
246 ** -name FILENAME Filter for a specific file. This may be combined
247 ** with one of the other filters (useful for looking
248 ** at a specific branch).
 
249 ** -url STRING Set the RSS feed's root URL to the given string.
250 ** The default is "URL-PLACEHOLDER" (without quotes).
251 */
252 void cmd_timeline_rss(void){
253 Stmt q;
254
+6 -11
--- src/search.c
+++ src/search.c
@@ -334,11 +334,10 @@
334334
**
335335
** Run the full-scan search algorithm using SEARCHSTRING against
336336
** the text of the files listed. Output matches and snippets.
337337
**
338338
** Options:
339
-**
340339
** --begin TEXT Text to insert before each match
341340
** --end TEXT Text to insert after each match
342341
** --gap TEXT Text to indicate elided content
343342
** --html Input is HTML
344343
** --static Use the static Search object
@@ -583,11 +582,10 @@
583582
** score. The -limit option can be used to limit the number of entries
584583
** returned. The -width option can be used to set the output width used
585584
** when printing matches.
586585
**
587586
** Options:
588
-**
589587
** -a|--all Output all matches, not just best matches.
590588
** -n|--limit N Limit output to N matches.
591589
** -W|--width WIDTH Set display width to WIDTH columns, 0 for
592590
** unlimited. Defaults the terminal's width.
593591
*/
@@ -1141,11 +1139,12 @@
11411139
if( zClass ){
11421140
@ <div class='searchForm searchForm%s(zClass)'>
11431141
}else{
11441142
@ <div class='searchForm'>
11451143
}
1146
- @ <input type="text" name="s" size="40" value="%h(zPattern)"%s(zDisable1)>
1144
+ @ <label>Search for:
1145
+ @ <input type="text" name="s" size="40" value="%h(zPattern)"%s(zDisable1)></label>
11471146
if( (mFlags & 0x01)!=0 && (srchFlags & (srchFlags-1))!=0 ){
11481147
static const struct { const char *z; const char *zNm; unsigned m; } aY[] = {
11491148
{ "all", "All", SRCH_ALL },
11501149
{ "c", "Check-ins", SRCH_CKIN },
11511150
{ "d", "Docs", SRCH_DOC },
@@ -1155,21 +1154,21 @@
11551154
{ "f", "Forum", SRCH_FORUM },
11561155
};
11571156
const char *zY = PD("y","all");
11581157
unsigned newFlags = srchFlags;
11591158
int i;
1160
- @ <select size='1' name='y'>
1159
+ @ <label> Elements: <select size='1' name='y'>
11611160
for(i=0; i<count(aY); i++){
11621161
if( (aY[i].m & srchFlags)==0 ) continue;
11631162
cgi_printf("<option value='%s'", aY[i].z);
11641163
if( fossil_strcmp(zY,aY[i].z)==0 ){
11651164
newFlags &= aY[i].m;
11661165
cgi_printf(" selected");
11671166
}
11681167
cgi_printf(">%s</option>\n", aY[i].zNm);
11691168
}
1170
- @ </select>
1169
+ @ </select></label>
11711170
srchFlags = newFlags;
11721171
}
11731172
if( fDebug ){
11741173
@ <input type="hidden" name="debug" value="1">
11751174
}
@@ -1197,11 +1196,10 @@
11971196
/*
11981197
** WEBPAGE: search
11991198
**
12001199
** Search for check-in comments, documents, tickets, or wiki that
12011200
** match a user-supplied pattern.
1202
-**
12031201
** s=PATTERN Specify the full-text pattern to search for
12041202
** y=TYPE What to search.
12051203
** c -> check-ins
12061204
** d -> documentation
12071205
** t -> tickets
@@ -1850,22 +1848,19 @@
18501848
** COMMAND: fts-config*
18511849
**
18521850
** Usage: fossil fts-config ?SUBCOMMAND? ?ARGUMENT?
18531851
**
18541852
** The "fossil fts-config" command configures the full-text search capabilities
1855
-** of the repository. Subcommands:
1853
+** of the repository.
18561854
**
1855
+** Subcommands:
18571856
** reindex Rebuild the search index. This is a no-op if
18581857
** index search is disabled
1859
-**
18601858
** index (on|off) Turn the search index on or off
1861
-**
18621859
** enable cdtwe Enable various kinds of search. c=Check-ins,
18631860
** d=Documents, t=Tickets, w=Wiki, e=Tech Notes.
1864
-**
18651861
** disable cdtwe Disable various kinds of search
1866
-**
18671862
** stemmer (on|off) Turn the Porter stemmer on or off for indexed
18681863
** search. (Unindexed search is never stemmed.)
18691864
**
18701865
** The current search settings are displayed after any changes are applied.
18711866
** Run this command with no arguments to simply see the settings.
18721867
--- src/search.c
+++ src/search.c
@@ -334,11 +334,10 @@
334 **
335 ** Run the full-scan search algorithm using SEARCHSTRING against
336 ** the text of the files listed. Output matches and snippets.
337 **
338 ** Options:
339 **
340 ** --begin TEXT Text to insert before each match
341 ** --end TEXT Text to insert after each match
342 ** --gap TEXT Text to indicate elided content
343 ** --html Input is HTML
344 ** --static Use the static Search object
@@ -583,11 +582,10 @@
583 ** score. The -limit option can be used to limit the number of entries
584 ** returned. The -width option can be used to set the output width used
585 ** when printing matches.
586 **
587 ** Options:
588 **
589 ** -a|--all Output all matches, not just best matches.
590 ** -n|--limit N Limit output to N matches.
591 ** -W|--width WIDTH Set display width to WIDTH columns, 0 for
592 ** unlimited. Defaults the terminal's width.
593 */
@@ -1141,11 +1139,12 @@
1141 if( zClass ){
1142 @ <div class='searchForm searchForm%s(zClass)'>
1143 }else{
1144 @ <div class='searchForm'>
1145 }
1146 @ <input type="text" name="s" size="40" value="%h(zPattern)"%s(zDisable1)>
 
1147 if( (mFlags & 0x01)!=0 && (srchFlags & (srchFlags-1))!=0 ){
1148 static const struct { const char *z; const char *zNm; unsigned m; } aY[] = {
1149 { "all", "All", SRCH_ALL },
1150 { "c", "Check-ins", SRCH_CKIN },
1151 { "d", "Docs", SRCH_DOC },
@@ -1155,21 +1154,21 @@
1155 { "f", "Forum", SRCH_FORUM },
1156 };
1157 const char *zY = PD("y","all");
1158 unsigned newFlags = srchFlags;
1159 int i;
1160 @ <select size='1' name='y'>
1161 for(i=0; i<count(aY); i++){
1162 if( (aY[i].m & srchFlags)==0 ) continue;
1163 cgi_printf("<option value='%s'", aY[i].z);
1164 if( fossil_strcmp(zY,aY[i].z)==0 ){
1165 newFlags &= aY[i].m;
1166 cgi_printf(" selected");
1167 }
1168 cgi_printf(">%s</option>\n", aY[i].zNm);
1169 }
1170 @ </select>
1171 srchFlags = newFlags;
1172 }
1173 if( fDebug ){
1174 @ <input type="hidden" name="debug" value="1">
1175 }
@@ -1197,11 +1196,10 @@
1197 /*
1198 ** WEBPAGE: search
1199 **
1200 ** Search for check-in comments, documents, tickets, or wiki that
1201 ** match a user-supplied pattern.
1202 **
1203 ** s=PATTERN Specify the full-text pattern to search for
1204 ** y=TYPE What to search.
1205 ** c -> check-ins
1206 ** d -> documentation
1207 ** t -> tickets
@@ -1850,22 +1848,19 @@
1850 ** COMMAND: fts-config*
1851 **
1852 ** Usage: fossil fts-config ?SUBCOMMAND? ?ARGUMENT?
1853 **
1854 ** The "fossil fts-config" command configures the full-text search capabilities
1855 ** of the repository. Subcommands:
1856 **
 
1857 ** reindex Rebuild the search index. This is a no-op if
1858 ** index search is disabled
1859 **
1860 ** index (on|off) Turn the search index on or off
1861 **
1862 ** enable cdtwe Enable various kinds of search. c=Check-ins,
1863 ** d=Documents, t=Tickets, w=Wiki, e=Tech Notes.
1864 **
1865 ** disable cdtwe Disable various kinds of search
1866 **
1867 ** stemmer (on|off) Turn the Porter stemmer on or off for indexed
1868 ** search. (Unindexed search is never stemmed.)
1869 **
1870 ** The current search settings are displayed after any changes are applied.
1871 ** Run this command with no arguments to simply see the settings.
1872
--- src/search.c
+++ src/search.c
@@ -334,11 +334,10 @@
334 **
335 ** Run the full-scan search algorithm using SEARCHSTRING against
336 ** the text of the files listed. Output matches and snippets.
337 **
338 ** Options:
 
339 ** --begin TEXT Text to insert before each match
340 ** --end TEXT Text to insert after each match
341 ** --gap TEXT Text to indicate elided content
342 ** --html Input is HTML
343 ** --static Use the static Search object
@@ -583,11 +582,10 @@
582 ** score. The -limit option can be used to limit the number of entries
583 ** returned. The -width option can be used to set the output width used
584 ** when printing matches.
585 **
586 ** Options:
 
587 ** -a|--all Output all matches, not just best matches.
588 ** -n|--limit N Limit output to N matches.
589 ** -W|--width WIDTH Set display width to WIDTH columns, 0 for
590 ** unlimited. Defaults the terminal's width.
591 */
@@ -1141,11 +1139,12 @@
1139 if( zClass ){
1140 @ <div class='searchForm searchForm%s(zClass)'>
1141 }else{
1142 @ <div class='searchForm'>
1143 }
1144 @ <label>Search for:
1145 @ <input type="text" name="s" size="40" value="%h(zPattern)"%s(zDisable1)></label>
1146 if( (mFlags & 0x01)!=0 && (srchFlags & (srchFlags-1))!=0 ){
1147 static const struct { const char *z; const char *zNm; unsigned m; } aY[] = {
1148 { "all", "All", SRCH_ALL },
1149 { "c", "Check-ins", SRCH_CKIN },
1150 { "d", "Docs", SRCH_DOC },
@@ -1155,21 +1154,21 @@
1154 { "f", "Forum", SRCH_FORUM },
1155 };
1156 const char *zY = PD("y","all");
1157 unsigned newFlags = srchFlags;
1158 int i;
1159 @ <label> Elements: <select size='1' name='y'>
1160 for(i=0; i<count(aY); i++){
1161 if( (aY[i].m & srchFlags)==0 ) continue;
1162 cgi_printf("<option value='%s'", aY[i].z);
1163 if( fossil_strcmp(zY,aY[i].z)==0 ){
1164 newFlags &= aY[i].m;
1165 cgi_printf(" selected");
1166 }
1167 cgi_printf(">%s</option>\n", aY[i].zNm);
1168 }
1169 @ </select></label>
1170 srchFlags = newFlags;
1171 }
1172 if( fDebug ){
1173 @ <input type="hidden" name="debug" value="1">
1174 }
@@ -1197,11 +1196,10 @@
1196 /*
1197 ** WEBPAGE: search
1198 **
1199 ** Search for check-in comments, documents, tickets, or wiki that
1200 ** match a user-supplied pattern.
 
1201 ** s=PATTERN Specify the full-text pattern to search for
1202 ** y=TYPE What to search.
1203 ** c -> check-ins
1204 ** d -> documentation
1205 ** t -> tickets
@@ -1850,22 +1848,19 @@
1848 ** COMMAND: fts-config*
1849 **
1850 ** Usage: fossil fts-config ?SUBCOMMAND? ?ARGUMENT?
1851 **
1852 ** The "fossil fts-config" command configures the full-text search capabilities
1853 ** of the repository.
1854 **
1855 ** Subcommands:
1856 ** reindex Rebuild the search index. This is a no-op if
1857 ** index search is disabled
 
1858 ** index (on|off) Turn the search index on or off
 
1859 ** enable cdtwe Enable various kinds of search. c=Check-ins,
1860 ** d=Documents, t=Tickets, w=Wiki, e=Tech Notes.
 
1861 ** disable cdtwe Disable various kinds of search
 
1862 ** stemmer (on|off) Turn the Porter stemmer on or off for indexed
1863 ** search. (Unindexed search is never stemmed.)
1864 **
1865 ** The current search settings are displayed after any changes are applied.
1866 ** Run this command with no arguments to simply see the settings.
1867
+63 -38
--- src/setup.c
+++ src/setup.c
@@ -209,19 +209,28 @@
209209
admin_log("Set option [%q] to [%q].",
210210
zVar, iQ ? "on" : "off");
211211
iVal = iQ;
212212
}
213213
}
214
- @ <label><input type="checkbox" name="%s(zQParm)" \
215
- @ aria-label="%h(zLabel[0]?zLabel:zQParm)" \
214
+ if( zLabel[0] ) {
215
+ @ <label>
216
+ }
217
+ @ <input type="checkbox" name="%s(zQParm)" \
218
+ if( !zLabel[0] ) {
219
+ @ aria-label="%h(zLabel[0]?zLabel:zQParm)" \
220
+ }
221
+ @ title="%h(zLabel[0]?zLabel:zQParm)" \
216222
if( iVal ){
217223
@ checked="checked" \
218224
}
219225
if( disabled ){
220226
@ disabled="disabled" \
221227
}
222
- @ /> <b>%s(zLabel)</b></label>
228
+ @ />
229
+ if( zLabel[0] ) {
230
+ @&nbsp;<b>%s(zLabel)</b></label>
231
+ }
223232
}
224233
225234
/*
226235
** Generate an entry box for an attribute.
227236
*/
@@ -244,16 +253,26 @@
244253
db_protect_pop();
245254
admin_log("Set entry_attribute %Q to: %.*s%s",
246255
zVar, 20, zQ, (nZQ>20 ? "..." : ""));
247256
zVal = zQ;
248257
}
249
- @ <input aria-label="%h(zLabel[0]?zLabel:zQParm)" type="text" \
258
+ if( zLabel[0] ) {
259
+ @ <label>
260
+ }
261
+ @ <input
262
+ if( !zLabel[0] ) {
263
+ @ aria-label="%h(zLabel[0]?zLabel:zQParm)"
264
+ }
265
+ @ title="%h(zLabel[0]?zLabel:zQParm)" type="text" \
250266
@ id="%s(zQParm)" name="%s(zQParm)" value="%h(zVal)" size="%d(width)" \
251267
if( disabled ){
252268
@ disabled="disabled" \
253269
}
254
- @ /> <b>%s(zLabel)</b>
270
+ @ />
271
+ if( zLabel[0] ) {
272
+ @&nbsp;<b>%s(zLabel)</b></label>
273
+ }
255274
}
256275
257276
/*
258277
** Generate a text box for an attribute.
259278
*/
@@ -278,18 +297,24 @@
278297
admin_log("Set textarea_attribute %Q to: %.*s%s",
279298
zVar, 20, zQ, (nZQ>20 ? "..." : ""));
280299
z = zQ;
281300
}
282301
if( rows>0 && cols>0 ){
302
+ if( *zLabel ){
303
+ @ <label>
304
+ }
283305
@ <textarea id="id%s(zQP)" name="%s(zQP)" rows="%d(rows)" \
284
- @ aria-label="%h(zLabel[0]?zLabel:zQP)" \
306
+ if( !*zLabel ){
307
+ @ aria-label="%h(zLabel[0]?zLabel:zQP)" \
308
+ }
309
+ @ title="%h(zLabel[0]?zLabel:zQP)" \
285310
if( disabled ){
286311
@ disabled="disabled" \
287312
}
288313
@ cols="%d(cols)">%h(z)</textarea>
289314
if( *zLabel ){
290
- @ <span class="textareaLabel">%s(zLabel)</span>
315
+ @&nbsp;<span class="textareaLabel">%s(zLabel)</span></label>
291316
}
292317
}
293318
return z;
294319
}
295320
@@ -316,16 +341,16 @@
316341
db_protect_pop();
317342
admin_log("Set multiple_choice_attribute %Q to: %.*s%s",
318343
zVar, 20, zQ, (nZQ>20 ? "..." : ""));
319344
z = zQ;
320345
}
321
- @ <select aria-label="%h(zLabel)" size="1" name="%s(zQP)" id="id%s(zQP)">
346
+ @ <label><select title="%h(zLabel)" size="1" name="%s(zQP)" id="id%s(zQP)">
322347
for(i=0; i<nChoice*2; i+=2){
323348
const char *zSel = fossil_strcmp(azChoice[i],z)==0 ? " selected" : "";
324349
@ <option value="%h(azChoice[i])"%s(zSel)>%h(azChoice[i+1])</option>
325350
}
326
- @ </select> <b>%h(zLabel)</b>
351
+ @ </select>&nbsp;<b>%h(zLabel)</b></label>
327352
}
328353
329354
/*
330355
** Insert code into the current page that allows the user to configure
331356
** auto-hyperlink related robot defense settings.
@@ -694,30 +719,30 @@
694719
@
695720
@ <form action="%R/setup_login_group" method="post"><div>
696721
login_insert_csrf_secret();
697722
@ <blockquote><table border="0">
698723
@
699
- @ <tr><th align="right" id="rfigtj">Repository filename \
700
- @ in group to join:</th>
701
- @ <td width="5"></td><td>
702
- @ <input aria-labelledby="rfigtj" type="text" size="50" \
703
- @ value="%h(zRepo)" name="repo"></td></tr>
704
- @
705
- @ <tr><th align="right" id="lotar">Login on the above repo:</th>
706
- @ <td width="5"></td><td>
707
- @ <input aria-labelledby="lotar" type="text" size="20" \
708
- @ value="%h(zLogin)" name="login"></td></tr>
709
- @
710
- @ <tr><th align="right" id="lgpw">Password:</th>
711
- @ <td width="5"></td><td>
712
- @ <input aria-labelledby="lgpw" type="password" size="20" name="pw">\
724
+ @ <tr><th align="right" id="rfigtj"><label for="repo">Repository filename \
725
+ @ in group to join:</label></th>
726
+ @ <td width="5"></td><td>
727
+ @ <input type="text" size="50" \
728
+ @ value="%h(zRepo)" id="repo" name="repo"></td></tr>
729
+ @
730
+ @ <tr><th align="right" id="lotar"><label for="login">Login on the above repo:</label></th>
731
+ @ <td width="5"></td><td>
732
+ @ <input type="text" size="20" \
733
+ @ value="%h(zLogin)" id="login" name="login"></td></tr>
734
+ @
735
+ @ <tr><th align="right" id="lgpw"><label for="pw">Password:</label></th>
736
+ @ <td width="5"></td><td>
737
+ @ <input type="password" size="20" id="pw" name="pw">\
713738
@ </td></tr>
714739
@
715
- @ <tr><th align="right" id="nolg">Name of login-group:</th>
740
+ @ <tr><th align="right" id="nolg"><label for="newname">Name of login-group:</label></th>
716741
@ <td width="5"></td><td>
717
- @ <input aria-labelledby="nolg" type="text" size="30" \
718
- @ value="%h(zNewName)" name="newname">
742
+ @ <input type="text" size="30" \
743
+ @ value="%h(zNewName)" id="newname" name="newname">
719744
@ (only used if creating a new login-group).</td></tr>
720745
@
721746
@ <tr><td colspan="3" align="center">
722747
@ <input type="submit" value="Join" name="join"></td></tr>
723748
@ </table></blockquote></div></form>
@@ -1653,12 +1678,12 @@
16531678
@ The logo may or may not appear on each
16541679
@ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
16551680
@ <a href="setup_skinedit?w=2">header setup</a>.
16561681
@ To change the logo image, use the following form:</p>
16571682
login_insert_csrf_secret();
1658
- @ Logo Image file:
1659
- @ <input type="file" name="logoim" size="60" accept="image/*" />
1683
+ @ <label>Logo Image file:
1684
+ @ <input type="file" name="logoim" size="60" accept="image/*" /></label>
16601685
@ <p align="center">
16611686
@ <input type="submit" name="setlogo" value="Change Logo" />
16621687
@ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
16631688
@ <p>(Properties: "logo-image" and "logo-mimetype")
16641689
@ </div></form>
@@ -1677,12 +1702,12 @@
16771702
@ The background image may or may not appear on each
16781703
@ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
16791704
@ <a href="setup_skinedit?w=2">header setup</a>.
16801705
@ To change the background image, use the following form:</p>
16811706
login_insert_csrf_secret();
1682
- @ Background image file:
1683
- @ <input type="file" name="bgim" size="60" accept="image/*" />
1707
+ @ <label>Background image file:
1708
+ @ <input type="file" name="bgim" size="60" accept="image/*" /></label>
16841709
@ <p align="center">
16851710
@ <input type="submit" name="setbg" value="Change Background" />
16861711
@ <input type="submit" name="clrbg" value="Revert To Default" /></p>
16871712
@ </div></form>
16881713
@ <p>(Properties: "background-image" and "background-mimetype")
@@ -1701,12 +1726,12 @@
17011726
@ The icon image may or may not appear on each
17021727
@ page depending on the web browser in use and the MIME-Types that it
17031728
@ supports for icon images.
17041729
@ To change the icon image, use the following form:</p>
17051730
login_insert_csrf_secret();
1706
- @ Icon image file:
1707
- @ <input type="file" name="iconim" size="60" accept="image/*" />
1731
+ @ <label>Icon image file:
1732
+ @ <input type="file" name="iconim" size="60" accept="image/*" /></label>
17081733
@ <p align="center">
17091734
@ <input type="submit" name="seticon" value="Change Icon" />
17101735
@ <input type="submit" name="clricon" value="Revert To Default" /></p>
17111736
@ </div></form>
17121737
@ <p>(Properties: "icon-image" and "icon-mimetype")
@@ -1793,12 +1818,12 @@
17931818
go = 1;
17941819
}
17951820
@
17961821
@ <form method="post" action="%R/admin_sql">
17971822
login_insert_csrf_secret();
1798
- @ SQL:<br />
1799
- @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea><br />
1823
+ @ <label>SQL:<br />
1824
+ @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea></label><br />
18001825
@ <input type="submit" name="go" value="Run SQL">
18011826
@ <input type="submit" name="schema" value="Show Schema">
18021827
@ <input type="submit" name="tablelist" value="List Tables">
18031828
@ <input type="submit" name="configtab" value="CONFIG Table Query">
18041829
@ </form>
@@ -1902,12 +1927,12 @@
19021927
@ run by this page. If Tcl integration was enabled at compile-time and
19031928
@ the "tcl" setting is enabled, Tcl commands may be run as well.</p>
19041929
@
19051930
@ <form method="post" action="%R/admin_th1">
19061931
login_insert_csrf_secret();
1907
- @ TH1:<br />
1908
- @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea><br />
1932
+ @ <label>TH1:<br />
1933
+ @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea></label><br />
19091934
@ <input type="submit" name="go" value="Run TH1">
19101935
@ </form>
19111936
if( go ){
19121937
const char *zR;
19131938
int rc;
@@ -2174,13 +2199,13 @@
21742199
blob_init(&namelist, 0, 0);
21752200
while( db_step(&q)==SQLITE_ROW ){
21762201
const char *zName = db_column_text(&q, 0);
21772202
const char *zValue = db_column_text(&q, 1);
21782203
@ <tr><td>
2179
- @ <input type='text' size='20' value='%h(zName)' name='n%d(cnt)'>
2204
+ @ <input type='text' size='20' value='%h(zName)' name='n%d(cnt)' title='Alias %d(cnt)'>
21802205
@ </td><td>
2181
- @ <input type='text' size='80' value='%h(zValue)' name='v%d(cnt)'>
2206
+ @ <input type='text' size='80' value='%h(zValue)' name='v%d(cnt)' title='URI %d(cnt)'>
21822207
@ </td></tr>
21832208
cnt++;
21842209
if( blob_size(&namelist)>0 ) blob_append(&namelist, " ", 1);
21852210
blob_append(&namelist, zName, -1);
21862211
}
21872212
--- src/setup.c
+++ src/setup.c
@@ -209,19 +209,28 @@
209 admin_log("Set option [%q] to [%q].",
210 zVar, iQ ? "on" : "off");
211 iVal = iQ;
212 }
213 }
214 @ <label><input type="checkbox" name="%s(zQParm)" \
215 @ aria-label="%h(zLabel[0]?zLabel:zQParm)" \
 
 
 
 
 
 
216 if( iVal ){
217 @ checked="checked" \
218 }
219 if( disabled ){
220 @ disabled="disabled" \
221 }
222 @ /> <b>%s(zLabel)</b></label>
 
 
 
223 }
224
225 /*
226 ** Generate an entry box for an attribute.
227 */
@@ -244,16 +253,26 @@
244 db_protect_pop();
245 admin_log("Set entry_attribute %Q to: %.*s%s",
246 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
247 zVal = zQ;
248 }
249 @ <input aria-label="%h(zLabel[0]?zLabel:zQParm)" type="text" \
 
 
 
 
 
 
 
250 @ id="%s(zQParm)" name="%s(zQParm)" value="%h(zVal)" size="%d(width)" \
251 if( disabled ){
252 @ disabled="disabled" \
253 }
254 @ /> <b>%s(zLabel)</b>
 
 
 
255 }
256
257 /*
258 ** Generate a text box for an attribute.
259 */
@@ -278,18 +297,24 @@
278 admin_log("Set textarea_attribute %Q to: %.*s%s",
279 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
280 z = zQ;
281 }
282 if( rows>0 && cols>0 ){
 
 
 
283 @ <textarea id="id%s(zQP)" name="%s(zQP)" rows="%d(rows)" \
284 @ aria-label="%h(zLabel[0]?zLabel:zQP)" \
 
 
 
285 if( disabled ){
286 @ disabled="disabled" \
287 }
288 @ cols="%d(cols)">%h(z)</textarea>
289 if( *zLabel ){
290 @ <span class="textareaLabel">%s(zLabel)</span>
291 }
292 }
293 return z;
294 }
295
@@ -316,16 +341,16 @@
316 db_protect_pop();
317 admin_log("Set multiple_choice_attribute %Q to: %.*s%s",
318 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
319 z = zQ;
320 }
321 @ <select aria-label="%h(zLabel)" size="1" name="%s(zQP)" id="id%s(zQP)">
322 for(i=0; i<nChoice*2; i+=2){
323 const char *zSel = fossil_strcmp(azChoice[i],z)==0 ? " selected" : "";
324 @ <option value="%h(azChoice[i])"%s(zSel)>%h(azChoice[i+1])</option>
325 }
326 @ </select> <b>%h(zLabel)</b>
327 }
328
329 /*
330 ** Insert code into the current page that allows the user to configure
331 ** auto-hyperlink related robot defense settings.
@@ -694,30 +719,30 @@
694 @
695 @ <form action="%R/setup_login_group" method="post"><div>
696 login_insert_csrf_secret();
697 @ <blockquote><table border="0">
698 @
699 @ <tr><th align="right" id="rfigtj">Repository filename \
700 @ in group to join:</th>
701 @ <td width="5"></td><td>
702 @ <input aria-labelledby="rfigtj" type="text" size="50" \
703 @ value="%h(zRepo)" name="repo"></td></tr>
704 @
705 @ <tr><th align="right" id="lotar">Login on the above repo:</th>
706 @ <td width="5"></td><td>
707 @ <input aria-labelledby="lotar" type="text" size="20" \
708 @ value="%h(zLogin)" name="login"></td></tr>
709 @
710 @ <tr><th align="right" id="lgpw">Password:</th>
711 @ <td width="5"></td><td>
712 @ <input aria-labelledby="lgpw" type="password" size="20" name="pw">\
713 @ </td></tr>
714 @
715 @ <tr><th align="right" id="nolg">Name of login-group:</th>
716 @ <td width="5"></td><td>
717 @ <input aria-labelledby="nolg" type="text" size="30" \
718 @ value="%h(zNewName)" name="newname">
719 @ (only used if creating a new login-group).</td></tr>
720 @
721 @ <tr><td colspan="3" align="center">
722 @ <input type="submit" value="Join" name="join"></td></tr>
723 @ </table></blockquote></div></form>
@@ -1653,12 +1678,12 @@
1653 @ The logo may or may not appear on each
1654 @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
1655 @ <a href="setup_skinedit?w=2">header setup</a>.
1656 @ To change the logo image, use the following form:</p>
1657 login_insert_csrf_secret();
1658 @ Logo Image file:
1659 @ <input type="file" name="logoim" size="60" accept="image/*" />
1660 @ <p align="center">
1661 @ <input type="submit" name="setlogo" value="Change Logo" />
1662 @ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
1663 @ <p>(Properties: "logo-image" and "logo-mimetype")
1664 @ </div></form>
@@ -1677,12 +1702,12 @@
1677 @ The background image may or may not appear on each
1678 @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
1679 @ <a href="setup_skinedit?w=2">header setup</a>.
1680 @ To change the background image, use the following form:</p>
1681 login_insert_csrf_secret();
1682 @ Background image file:
1683 @ <input type="file" name="bgim" size="60" accept="image/*" />
1684 @ <p align="center">
1685 @ <input type="submit" name="setbg" value="Change Background" />
1686 @ <input type="submit" name="clrbg" value="Revert To Default" /></p>
1687 @ </div></form>
1688 @ <p>(Properties: "background-image" and "background-mimetype")
@@ -1701,12 +1726,12 @@
1701 @ The icon image may or may not appear on each
1702 @ page depending on the web browser in use and the MIME-Types that it
1703 @ supports for icon images.
1704 @ To change the icon image, use the following form:</p>
1705 login_insert_csrf_secret();
1706 @ Icon image file:
1707 @ <input type="file" name="iconim" size="60" accept="image/*" />
1708 @ <p align="center">
1709 @ <input type="submit" name="seticon" value="Change Icon" />
1710 @ <input type="submit" name="clricon" value="Revert To Default" /></p>
1711 @ </div></form>
1712 @ <p>(Properties: "icon-image" and "icon-mimetype")
@@ -1793,12 +1818,12 @@
1793 go = 1;
1794 }
1795 @
1796 @ <form method="post" action="%R/admin_sql">
1797 login_insert_csrf_secret();
1798 @ SQL:<br />
1799 @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea><br />
1800 @ <input type="submit" name="go" value="Run SQL">
1801 @ <input type="submit" name="schema" value="Show Schema">
1802 @ <input type="submit" name="tablelist" value="List Tables">
1803 @ <input type="submit" name="configtab" value="CONFIG Table Query">
1804 @ </form>
@@ -1902,12 +1927,12 @@
1902 @ run by this page. If Tcl integration was enabled at compile-time and
1903 @ the "tcl" setting is enabled, Tcl commands may be run as well.</p>
1904 @
1905 @ <form method="post" action="%R/admin_th1">
1906 login_insert_csrf_secret();
1907 @ TH1:<br />
1908 @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea><br />
1909 @ <input type="submit" name="go" value="Run TH1">
1910 @ </form>
1911 if( go ){
1912 const char *zR;
1913 int rc;
@@ -2174,13 +2199,13 @@
2174 blob_init(&namelist, 0, 0);
2175 while( db_step(&q)==SQLITE_ROW ){
2176 const char *zName = db_column_text(&q, 0);
2177 const char *zValue = db_column_text(&q, 1);
2178 @ <tr><td>
2179 @ <input type='text' size='20' value='%h(zName)' name='n%d(cnt)'>
2180 @ </td><td>
2181 @ <input type='text' size='80' value='%h(zValue)' name='v%d(cnt)'>
2182 @ </td></tr>
2183 cnt++;
2184 if( blob_size(&namelist)>0 ) blob_append(&namelist, " ", 1);
2185 blob_append(&namelist, zName, -1);
2186 }
2187
--- src/setup.c
+++ src/setup.c
@@ -209,19 +209,28 @@
209 admin_log("Set option [%q] to [%q].",
210 zVar, iQ ? "on" : "off");
211 iVal = iQ;
212 }
213 }
214 if( zLabel[0] ) {
215 @ <label>
216 }
217 @ <input type="checkbox" name="%s(zQParm)" \
218 if( !zLabel[0] ) {
219 @ aria-label="%h(zLabel[0]?zLabel:zQParm)" \
220 }
221 @ title="%h(zLabel[0]?zLabel:zQParm)" \
222 if( iVal ){
223 @ checked="checked" \
224 }
225 if( disabled ){
226 @ disabled="disabled" \
227 }
228 @ />
229 if( zLabel[0] ) {
230 @&nbsp;<b>%s(zLabel)</b></label>
231 }
232 }
233
234 /*
235 ** Generate an entry box for an attribute.
236 */
@@ -244,16 +253,26 @@
253 db_protect_pop();
254 admin_log("Set entry_attribute %Q to: %.*s%s",
255 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
256 zVal = zQ;
257 }
258 if( zLabel[0] ) {
259 @ <label>
260 }
261 @ <input
262 if( !zLabel[0] ) {
263 @ aria-label="%h(zLabel[0]?zLabel:zQParm)"
264 }
265 @ title="%h(zLabel[0]?zLabel:zQParm)" type="text" \
266 @ id="%s(zQParm)" name="%s(zQParm)" value="%h(zVal)" size="%d(width)" \
267 if( disabled ){
268 @ disabled="disabled" \
269 }
270 @ />
271 if( zLabel[0] ) {
272 @&nbsp;<b>%s(zLabel)</b></label>
273 }
274 }
275
276 /*
277 ** Generate a text box for an attribute.
278 */
@@ -278,18 +297,24 @@
297 admin_log("Set textarea_attribute %Q to: %.*s%s",
298 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
299 z = zQ;
300 }
301 if( rows>0 && cols>0 ){
302 if( *zLabel ){
303 @ <label>
304 }
305 @ <textarea id="id%s(zQP)" name="%s(zQP)" rows="%d(rows)" \
306 if( !*zLabel ){
307 @ aria-label="%h(zLabel[0]?zLabel:zQP)" \
308 }
309 @ title="%h(zLabel[0]?zLabel:zQP)" \
310 if( disabled ){
311 @ disabled="disabled" \
312 }
313 @ cols="%d(cols)">%h(z)</textarea>
314 if( *zLabel ){
315 @&nbsp;<span class="textareaLabel">%s(zLabel)</span></label>
316 }
317 }
318 return z;
319 }
320
@@ -316,16 +341,16 @@
341 db_protect_pop();
342 admin_log("Set multiple_choice_attribute %Q to: %.*s%s",
343 zVar, 20, zQ, (nZQ>20 ? "..." : ""));
344 z = zQ;
345 }
346 @ <label><select title="%h(zLabel)" size="1" name="%s(zQP)" id="id%s(zQP)">
347 for(i=0; i<nChoice*2; i+=2){
348 const char *zSel = fossil_strcmp(azChoice[i],z)==0 ? " selected" : "";
349 @ <option value="%h(azChoice[i])"%s(zSel)>%h(azChoice[i+1])</option>
350 }
351 @ </select>&nbsp;<b>%h(zLabel)</b></label>
352 }
353
354 /*
355 ** Insert code into the current page that allows the user to configure
356 ** auto-hyperlink related robot defense settings.
@@ -694,30 +719,30 @@
719 @
720 @ <form action="%R/setup_login_group" method="post"><div>
721 login_insert_csrf_secret();
722 @ <blockquote><table border="0">
723 @
724 @ <tr><th align="right" id="rfigtj"><label for="repo">Repository filename \
725 @ in group to join:</label></th>
726 @ <td width="5"></td><td>
727 @ <input type="text" size="50" \
728 @ value="%h(zRepo)" id="repo" name="repo"></td></tr>
729 @
730 @ <tr><th align="right" id="lotar"><label for="login">Login on the above repo:</label></th>
731 @ <td width="5"></td><td>
732 @ <input type="text" size="20" \
733 @ value="%h(zLogin)" id="login" name="login"></td></tr>
734 @
735 @ <tr><th align="right" id="lgpw"><label for="pw">Password:</label></th>
736 @ <td width="5"></td><td>
737 @ <input type="password" size="20" id="pw" name="pw">\
738 @ </td></tr>
739 @
740 @ <tr><th align="right" id="nolg"><label for="newname">Name of login-group:</label></th>
741 @ <td width="5"></td><td>
742 @ <input type="text" size="30" \
743 @ value="%h(zNewName)" id="newname" name="newname">
744 @ (only used if creating a new login-group).</td></tr>
745 @
746 @ <tr><td colspan="3" align="center">
747 @ <input type="submit" value="Join" name="join"></td></tr>
748 @ </table></blockquote></div></form>
@@ -1653,12 +1678,12 @@
1678 @ The logo may or may not appear on each
1679 @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
1680 @ <a href="setup_skinedit?w=2">header setup</a>.
1681 @ To change the logo image, use the following form:</p>
1682 login_insert_csrf_secret();
1683 @ <label>Logo Image file:
1684 @ <input type="file" name="logoim" size="60" accept="image/*" /></label>
1685 @ <p align="center">
1686 @ <input type="submit" name="setlogo" value="Change Logo" />
1687 @ <input type="submit" name="clrlogo" value="Revert To Default" /></p>
1688 @ <p>(Properties: "logo-image" and "logo-mimetype")
1689 @ </div></form>
@@ -1677,12 +1702,12 @@
1702 @ The background image may or may not appear on each
1703 @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and
1704 @ <a href="setup_skinedit?w=2">header setup</a>.
1705 @ To change the background image, use the following form:</p>
1706 login_insert_csrf_secret();
1707 @ <label>Background image file:
1708 @ <input type="file" name="bgim" size="60" accept="image/*" /></label>
1709 @ <p align="center">
1710 @ <input type="submit" name="setbg" value="Change Background" />
1711 @ <input type="submit" name="clrbg" value="Revert To Default" /></p>
1712 @ </div></form>
1713 @ <p>(Properties: "background-image" and "background-mimetype")
@@ -1701,12 +1726,12 @@
1726 @ The icon image may or may not appear on each
1727 @ page depending on the web browser in use and the MIME-Types that it
1728 @ supports for icon images.
1729 @ To change the icon image, use the following form:</p>
1730 login_insert_csrf_secret();
1731 @ <label>Icon image file:
1732 @ <input type="file" name="iconim" size="60" accept="image/*" /></label>
1733 @ <p align="center">
1734 @ <input type="submit" name="seticon" value="Change Icon" />
1735 @ <input type="submit" name="clricon" value="Revert To Default" /></p>
1736 @ </div></form>
1737 @ <p>(Properties: "icon-image" and "icon-mimetype")
@@ -1793,12 +1818,12 @@
1818 go = 1;
1819 }
1820 @
1821 @ <form method="post" action="%R/admin_sql">
1822 login_insert_csrf_secret();
1823 @ <label>SQL:<br />
1824 @ <textarea name="q" rows="8" cols="80">%h(zQ)</textarea></label><br />
1825 @ <input type="submit" name="go" value="Run SQL">
1826 @ <input type="submit" name="schema" value="Show Schema">
1827 @ <input type="submit" name="tablelist" value="List Tables">
1828 @ <input type="submit" name="configtab" value="CONFIG Table Query">
1829 @ </form>
@@ -1902,12 +1927,12 @@
1927 @ run by this page. If Tcl integration was enabled at compile-time and
1928 @ the "tcl" setting is enabled, Tcl commands may be run as well.</p>
1929 @
1930 @ <form method="post" action="%R/admin_th1">
1931 login_insert_csrf_secret();
1932 @ <label>TH1:<br />
1933 @ <textarea name="q" rows="5" cols="80">%h(zQ)</textarea></label><br />
1934 @ <input type="submit" name="go" value="Run TH1">
1935 @ </form>
1936 if( go ){
1937 const char *zR;
1938 int rc;
@@ -2174,13 +2199,13 @@
2199 blob_init(&namelist, 0, 0);
2200 while( db_step(&q)==SQLITE_ROW ){
2201 const char *zName = db_column_text(&q, 0);
2202 const char *zValue = db_column_text(&q, 1);
2203 @ <tr><td>
2204 @ <input type='text' size='20' value='%h(zName)' name='n%d(cnt)' title='Alias %d(cnt)'>
2205 @ </td><td>
2206 @ <input type='text' size='80' value='%h(zValue)' name='v%d(cnt)' title='URI %d(cnt)'>
2207 @ </td></tr>
2208 cnt++;
2209 if( blob_size(&namelist)>0 ) blob_append(&namelist, " ", 1);
2210 blob_append(&namelist, zName, -1);
2211 }
2212
+12 -12
--- src/setupuser.c
+++ src/setupuser.c
@@ -31,11 +31,10 @@
3131
**
3232
** Show a list of users. Clicking on any user jumps to the edit
3333
** screen for that user. Requires Admin privileges.
3434
**
3535
** Query parameters:
36
-**
3736
** with=CAP Only show users that have one or more capabilities in CAP.
3837
** ubg Color backgrounds by username hash
3938
*/
4039
void setup_ulist(void){
4140
Stmt s;
@@ -604,26 +603,26 @@
604603
@ <input type="hidden" name="pw" value="*">
605604
}
606605
@ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))">
607606
@ <table width="100%%">
608607
@ <tr>
609
- @ <td class="usetupEditLabel" id="suuid">User ID:</td>
608
+ @ <td class="usetupEditLabel" id="suuid"><label for="id">User ID:</label></td>
610609
if( uid ){
611
- @ <td>%d(uid) <input aria-labelledby="suuid" type="hidden" \
610
+ @ <td>%d(uid) <input type="hidden" \
612611
@ name="id" value="%d(uid)"/>\
613612
@ </td>
614613
}else{
615
- @ <td>(new user)<input aria-labelledby="suuid" type="hidden" name="id" \
614
+ @ <td>(new user)<input type="hidden" name="id" \
616615
@ value="0" /></td>
617616
}
618617
@ </tr>
619618
@ <tr>
620
- @ <td class="usetupEditLabel" id="sulgn">Login:</td>
619
+ @ <td class="usetupEditLabel" id="sulgn"><label for="login">Login:</label></td>
621620
if( login_is_special(zLogin) ){
622621
@ <td><b>%h(zLogin)</b></td>
623622
}else{
624
- @ <td><input aria-labelledby="sulgn" type="text" name="login" \
623
+ @ <td><input type="text" id="login" name="login" \
625624
@ value="%h(zLogin)" />
626625
if( alert_tables_exist() ){
627626
int sid;
628627
sid = db_int(0, "SELECT subscriberId FROM subscriber"
629628
" WHERE suname=%Q", zLogin);
@@ -632,12 +631,13 @@
632631
@ (subscription info for %h(zLogin))</a>\
633632
}
634633
}
635634
@ </td></tr>
636635
@ <tr>
637
- @ <td class="usetupEditLabel" id="sucnfo">Contact&nbsp;Info:</td>
638
- @ <td><textarea aria-labelledby="sucnfo" name="info" cols="40" \
636
+ @ <td class="usetupEditLabel" id="sucnfo">
637
+ @ <label for="info">Contact&nbsp;Info:</label></td>
638
+ @ <td><textarea id="info" name="info" cols="40" \
639639
@ rows="2">%h(zInfo)</textarea></td>
640640
}
641641
@ </tr>
642642
@ <tr>
643643
@ <td class="usetupEditLabel">Capabilities:</td>
@@ -729,19 +729,19 @@
729729
@ <a href="%R/setup_ucap_list">(key)</a>
730730
@ </td>
731731
@ </tr>
732732
if( !login_is_special(zLogin) ){
733733
@ <tr>
734
- @ <td align="right" id="supw">Password:</td>
734
+ @ <td align="right" id="supw"><label for="pw">Password:</label></td>
735735
if( zPw[0] ){
736736
/* Obscure the password for all users */
737
- @ <td><input aria-labelledby="supw" type="password" autocomplete="off" \
738
- @ name="pw" value="**********" /></td>
737
+ @ <td><input type="password" autocomplete="off" \
738
+ @ id="pw" name="pw" value="**********" /></td>
739739
}else{
740740
/* Show an empty password as an empty input field */
741741
char *zRPW = fossil_random_password(12);
742
- @ <td><input aria-labelledby="supw" type="password" name="pw" \
742
+ @ <td><input type="password" id="pw" name="pw" \
743743
@ autocomplete="off" value="" /> Password suggestion: %z(zRPW)</td>
744744
}
745745
@ </tr>
746746
}
747747
zGroup = login_group_name();
748748
--- src/setupuser.c
+++ src/setupuser.c
@@ -31,11 +31,10 @@
31 **
32 ** Show a list of users. Clicking on any user jumps to the edit
33 ** screen for that user. Requires Admin privileges.
34 **
35 ** Query parameters:
36 **
37 ** with=CAP Only show users that have one or more capabilities in CAP.
38 ** ubg Color backgrounds by username hash
39 */
40 void setup_ulist(void){
41 Stmt s;
@@ -604,26 +603,26 @@
604 @ <input type="hidden" name="pw" value="*">
605 }
606 @ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))">
607 @ <table width="100%%">
608 @ <tr>
609 @ <td class="usetupEditLabel" id="suuid">User ID:</td>
610 if( uid ){
611 @ <td>%d(uid) <input aria-labelledby="suuid" type="hidden" \
612 @ name="id" value="%d(uid)"/>\
613 @ </td>
614 }else{
615 @ <td>(new user)<input aria-labelledby="suuid" type="hidden" name="id" \
616 @ value="0" /></td>
617 }
618 @ </tr>
619 @ <tr>
620 @ <td class="usetupEditLabel" id="sulgn">Login:</td>
621 if( login_is_special(zLogin) ){
622 @ <td><b>%h(zLogin)</b></td>
623 }else{
624 @ <td><input aria-labelledby="sulgn" type="text" name="login" \
625 @ value="%h(zLogin)" />
626 if( alert_tables_exist() ){
627 int sid;
628 sid = db_int(0, "SELECT subscriberId FROM subscriber"
629 " WHERE suname=%Q", zLogin);
@@ -632,12 +631,13 @@
632 @ (subscription info for %h(zLogin))</a>\
633 }
634 }
635 @ </td></tr>
636 @ <tr>
637 @ <td class="usetupEditLabel" id="sucnfo">Contact&nbsp;Info:</td>
638 @ <td><textarea aria-labelledby="sucnfo" name="info" cols="40" \
 
639 @ rows="2">%h(zInfo)</textarea></td>
640 }
641 @ </tr>
642 @ <tr>
643 @ <td class="usetupEditLabel">Capabilities:</td>
@@ -729,19 +729,19 @@
729 @ <a href="%R/setup_ucap_list">(key)</a>
730 @ </td>
731 @ </tr>
732 if( !login_is_special(zLogin) ){
733 @ <tr>
734 @ <td align="right" id="supw">Password:</td>
735 if( zPw[0] ){
736 /* Obscure the password for all users */
737 @ <td><input aria-labelledby="supw" type="password" autocomplete="off" \
738 @ name="pw" value="**********" /></td>
739 }else{
740 /* Show an empty password as an empty input field */
741 char *zRPW = fossil_random_password(12);
742 @ <td><input aria-labelledby="supw" type="password" name="pw" \
743 @ autocomplete="off" value="" /> Password suggestion: %z(zRPW)</td>
744 }
745 @ </tr>
746 }
747 zGroup = login_group_name();
748
--- src/setupuser.c
+++ src/setupuser.c
@@ -31,11 +31,10 @@
31 **
32 ** Show a list of users. Clicking on any user jumps to the edit
33 ** screen for that user. Requires Admin privileges.
34 **
35 ** Query parameters:
 
36 ** with=CAP Only show users that have one or more capabilities in CAP.
37 ** ubg Color backgrounds by username hash
38 */
39 void setup_ulist(void){
40 Stmt s;
@@ -604,26 +603,26 @@
603 @ <input type="hidden" name="pw" value="*">
604 }
605 @ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))">
606 @ <table width="100%%">
607 @ <tr>
608 @ <td class="usetupEditLabel" id="suuid"><label for="id">User ID:</label></td>
609 if( uid ){
610 @ <td>%d(uid) <input type="hidden" \
611 @ name="id" value="%d(uid)"/>\
612 @ </td>
613 }else{
614 @ <td>(new user)<input type="hidden" name="id" \
615 @ value="0" /></td>
616 }
617 @ </tr>
618 @ <tr>
619 @ <td class="usetupEditLabel" id="sulgn"><label for="login">Login:</label></td>
620 if( login_is_special(zLogin) ){
621 @ <td><b>%h(zLogin)</b></td>
622 }else{
623 @ <td><input type="text" id="login" name="login" \
624 @ value="%h(zLogin)" />
625 if( alert_tables_exist() ){
626 int sid;
627 sid = db_int(0, "SELECT subscriberId FROM subscriber"
628 " WHERE suname=%Q", zLogin);
@@ -632,12 +631,13 @@
631 @ (subscription info for %h(zLogin))</a>\
632 }
633 }
634 @ </td></tr>
635 @ <tr>
636 @ <td class="usetupEditLabel" id="sucnfo">
637 @ <label for="info">Contact&nbsp;Info:</label></td>
638 @ <td><textarea id="info" name="info" cols="40" \
639 @ rows="2">%h(zInfo)</textarea></td>
640 }
641 @ </tr>
642 @ <tr>
643 @ <td class="usetupEditLabel">Capabilities:</td>
@@ -729,19 +729,19 @@
729 @ <a href="%R/setup_ucap_list">(key)</a>
730 @ </td>
731 @ </tr>
732 if( !login_is_special(zLogin) ){
733 @ <tr>
734 @ <td align="right" id="supw"><label for="pw">Password:</label></td>
735 if( zPw[0] ){
736 /* Obscure the password for all users */
737 @ <td><input type="password" autocomplete="off" \
738 @ id="pw" name="pw" value="**********" /></td>
739 }else{
740 /* Show an empty password as an empty input field */
741 char *zRPW = fossil_random_password(12);
742 @ <td><input type="password" id="pw" name="pw" \
743 @ autocomplete="off" value="" /> Password suggestion: %z(zRPW)</td>
744 }
745 @ </tr>
746 }
747 zGroup = login_group_name();
748
+1 -1
--- src/sha1.c
+++ src/sha1.c
@@ -501,12 +501,12 @@
501501
**
502502
** Usage: %fossil sha1sum FILE...
503503
**
504504
** Compute an SHA1 checksum of all files named on the command-line.
505505
** If a file is named "-" then take its content from standard input.
506
-** Options:
507506
**
507
+** Options:
508508
** -h|--dereference If FILE is a symbolic link, compute the hash
509509
** on the object that the link points to. Normally,
510510
** the hash is over the name of the object that
511511
** the link points to.
512512
**
513513
--- src/sha1.c
+++ src/sha1.c
@@ -501,12 +501,12 @@
501 **
502 ** Usage: %fossil sha1sum FILE...
503 **
504 ** Compute an SHA1 checksum of all files named on the command-line.
505 ** If a file is named "-" then take its content from standard input.
506 ** Options:
507 **
 
508 ** -h|--dereference If FILE is a symbolic link, compute the hash
509 ** on the object that the link points to. Normally,
510 ** the hash is over the name of the object that
511 ** the link points to.
512 **
513
--- src/sha1.c
+++ src/sha1.c
@@ -501,12 +501,12 @@
501 **
502 ** Usage: %fossil sha1sum FILE...
503 **
504 ** Compute an SHA1 checksum of all files named on the command-line.
505 ** If a file is named "-" then take its content from standard input.
 
506 **
507 ** Options:
508 ** -h|--dereference If FILE is a symbolic link, compute the hash
509 ** on the object that the link points to. Normally,
510 ** the hash is over the name of the object that
511 ** the link points to.
512 **
513
-1
--- src/sha3.c
+++ src/sha3.c
@@ -628,11 +628,10 @@
628628
**
629629
** To be clear: The official NIST FIPS-202 implementation of SHA3
630630
** with the added 01 padding is used, not the original Keccak submission.
631631
**
632632
** Options:
633
-**
634633
** --224 Compute a SHA3-224 hash
635634
** --256 Compute a SHA3-256 hash (the default)
636635
** --384 Compute a SHA3-384 hash
637636
** --512 Compute a SHA3-512 hash
638637
** --size N An N-bit hash. N must be a multiple of 32 between
639638
--- src/sha3.c
+++ src/sha3.c
@@ -628,11 +628,10 @@
628 **
629 ** To be clear: The official NIST FIPS-202 implementation of SHA3
630 ** with the added 01 padding is used, not the original Keccak submission.
631 **
632 ** Options:
633 **
634 ** --224 Compute a SHA3-224 hash
635 ** --256 Compute a SHA3-256 hash (the default)
636 ** --384 Compute a SHA3-384 hash
637 ** --512 Compute a SHA3-512 hash
638 ** --size N An N-bit hash. N must be a multiple of 32 between
639
--- src/sha3.c
+++ src/sha3.c
@@ -628,11 +628,10 @@
628 **
629 ** To be clear: The official NIST FIPS-202 implementation of SHA3
630 ** with the added 01 padding is used, not the original Keccak submission.
631 **
632 ** Options:
 
633 ** --224 Compute a SHA3-224 hash
634 ** --256 Compute a SHA3-256 hash (the default)
635 ** --384 Compute a SHA3-384 hash
636 ** --512 Compute a SHA3-512 hash
637 ** --size N An N-bit hash. N must be a multiple of 32 between
638
+6 -6
--- src/shun.c
+++ src/shun.c
@@ -168,13 +168,13 @@
168168
@ artifact content will be purged from the repository the next time the
169169
@ repository is rebuilt. A list of shunned artifacts can be seen at the
170170
@ bottom of this page.</p>
171171
@
172172
@ <a name="addshun"></a>
173
- @ <p>To shun artifacts, enter their artifact hashes (the 40- or
173
+ @ <p><label for="shun-uuid">To shun artifacts, enter their artifact hashes (the 40- or
174174
@ 64-character lowercase hexadecimal hash of the artifact content) in the
175
- @ following box and press the "Shun" button. This will cause the artifacts
175
+ @ following box and press the "Shun" button.</label> This will cause the artifacts
176176
@ to be removed from the repository and will prevent the artifacts from being
177177
@ readded to the repository by subsequent sync operation.</p>
178178
@
179179
@ <p>Note that you must enter full artifact hashes, not abbreviations
180180
@ or symbolic tags.</p>
@@ -187,11 +187,11 @@
187187
@ sight - set the "hidden" tag on such artifacts instead.</p>
188188
@
189189
@ <blockquote>
190190
@ <form method="post" action="%R/%s(g.zPath)"><div>
191191
login_insert_csrf_secret();
192
- @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid">
192
+ @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid" id="shun-uuid">
193193
if( zShun ){
194194
if( strlen(zShun) ){
195195
@ %h(zShun)
196196
}else if( nRcvid ){
197197
db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
@@ -205,20 +205,20 @@
205205
@ <input type="submit" name="add" value="Shun" />
206206
@ </div></form>
207207
@ </blockquote>
208208
@
209209
@ <a name="delshun"></a>
210
- @ <p>Enter the UUIDs of previously shunned artifacts to cause them to be
211
- @ accepted again in the repository. The artifacts content is not
210
+ @ <p><label for="accept-uuid">Enter the UUIDs of previously shunned artifacts to cause them to be
211
+ @ accepted again in the repository.</label> The artifacts content is not
212212
@ restored because the content is unknown. The only change is that
213213
@ the formerly shunned artifacts will be accepted on subsequent sync
214214
@ operations.</p>
215215
@
216216
@ <blockquote>
217217
@ <form method="post" action="%R/%s(g.zPath)"><div>
218218
login_insert_csrf_secret();
219
- @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid">
219
+ @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid" id="accept-uuid">
220220
if( zAccept ){
221221
if( strlen(zAccept) ){
222222
@ %h(zAccept)
223223
}else if( nRcvid ){
224224
db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
225225
--- src/shun.c
+++ src/shun.c
@@ -168,13 +168,13 @@
168 @ artifact content will be purged from the repository the next time the
169 @ repository is rebuilt. A list of shunned artifacts can be seen at the
170 @ bottom of this page.</p>
171 @
172 @ <a name="addshun"></a>
173 @ <p>To shun artifacts, enter their artifact hashes (the 40- or
174 @ 64-character lowercase hexadecimal hash of the artifact content) in the
175 @ following box and press the "Shun" button. This will cause the artifacts
176 @ to be removed from the repository and will prevent the artifacts from being
177 @ readded to the repository by subsequent sync operation.</p>
178 @
179 @ <p>Note that you must enter full artifact hashes, not abbreviations
180 @ or symbolic tags.</p>
@@ -187,11 +187,11 @@
187 @ sight - set the "hidden" tag on such artifacts instead.</p>
188 @
189 @ <blockquote>
190 @ <form method="post" action="%R/%s(g.zPath)"><div>
191 login_insert_csrf_secret();
192 @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid">
193 if( zShun ){
194 if( strlen(zShun) ){
195 @ %h(zShun)
196 }else if( nRcvid ){
197 db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
@@ -205,20 +205,20 @@
205 @ <input type="submit" name="add" value="Shun" />
206 @ </div></form>
207 @ </blockquote>
208 @
209 @ <a name="delshun"></a>
210 @ <p>Enter the UUIDs of previously shunned artifacts to cause them to be
211 @ accepted again in the repository. The artifacts content is not
212 @ restored because the content is unknown. The only change is that
213 @ the formerly shunned artifacts will be accepted on subsequent sync
214 @ operations.</p>
215 @
216 @ <blockquote>
217 @ <form method="post" action="%R/%s(g.zPath)"><div>
218 login_insert_csrf_secret();
219 @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid">
220 if( zAccept ){
221 if( strlen(zAccept) ){
222 @ %h(zAccept)
223 }else if( nRcvid ){
224 db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
225
--- src/shun.c
+++ src/shun.c
@@ -168,13 +168,13 @@
168 @ artifact content will be purged from the repository the next time the
169 @ repository is rebuilt. A list of shunned artifacts can be seen at the
170 @ bottom of this page.</p>
171 @
172 @ <a name="addshun"></a>
173 @ <p><label for="shun-uuid">To shun artifacts, enter their artifact hashes (the 40- or
174 @ 64-character lowercase hexadecimal hash of the artifact content) in the
175 @ following box and press the "Shun" button.</label> This will cause the artifacts
176 @ to be removed from the repository and will prevent the artifacts from being
177 @ readded to the repository by subsequent sync operation.</p>
178 @
179 @ <p>Note that you must enter full artifact hashes, not abbreviations
180 @ or symbolic tags.</p>
@@ -187,11 +187,11 @@
187 @ sight - set the "hidden" tag on such artifacts instead.</p>
188 @
189 @ <blockquote>
190 @ <form method="post" action="%R/%s(g.zPath)"><div>
191 login_insert_csrf_secret();
192 @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid" id="shun-uuid">
193 if( zShun ){
194 if( strlen(zShun) ){
195 @ %h(zShun)
196 }else if( nRcvid ){
197 db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
@@ -205,20 +205,20 @@
205 @ <input type="submit" name="add" value="Shun" />
206 @ </div></form>
207 @ </blockquote>
208 @
209 @ <a name="delshun"></a>
210 @ <p><label for="accept-uuid">Enter the UUIDs of previously shunned artifacts to cause them to be
211 @ accepted again in the repository.</label> The artifacts content is not
212 @ restored because the content is unknown. The only change is that
213 @ the formerly shunned artifacts will be accepted on subsequent sync
214 @ operations.</p>
215 @
216 @ <blockquote>
217 @ <form method="post" action="%R/%s(g.zPath)"><div>
218 login_insert_csrf_secret();
219 @ <textarea class="fullsize-text" cols="70" rows="%d(numRows)" name="uuid" id="accept-uuid">
220 if( zAccept ){
221 if( strlen(zAccept) ){
222 @ %h(zAccept)
223 }else if( nRcvid ){
224 db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid);
225
+1 -1
--- src/sitemap.c
+++ src/sitemap.c
@@ -165,11 +165,11 @@
165165
@ Trunk Check-in</a></li>
166166
@ <li>%z(href("%R/tree?type=flat"))Flat-view</a></li>
167167
@ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li>
168168
@ <li>%z(href("%R/uvlist"))Unversioned Files</a>
169169
if( g.perm.Write && zEditGlob[0]!=0 ){
170
- @ <li>%z(href("%R/fileedit"))On-line File Editor</li>
170
+ @ <li>%z(href("%R/fileedit"))On-line File Editor</a></li>
171171
}
172172
@ </ul>
173173
}
174174
if( g.perm.Read ){
175175
@ <li>%z(href("%R/timeline"))Project Timeline</a>
176176
--- src/sitemap.c
+++ src/sitemap.c
@@ -165,11 +165,11 @@
165 @ Trunk Check-in</a></li>
166 @ <li>%z(href("%R/tree?type=flat"))Flat-view</a></li>
167 @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li>
168 @ <li>%z(href("%R/uvlist"))Unversioned Files</a>
169 if( g.perm.Write && zEditGlob[0]!=0 ){
170 @ <li>%z(href("%R/fileedit"))On-line File Editor</li>
171 }
172 @ </ul>
173 }
174 if( g.perm.Read ){
175 @ <li>%z(href("%R/timeline"))Project Timeline</a>
176
--- src/sitemap.c
+++ src/sitemap.c
@@ -165,11 +165,11 @@
165 @ Trunk Check-in</a></li>
166 @ <li>%z(href("%R/tree?type=flat"))Flat-view</a></li>
167 @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li>
168 @ <li>%z(href("%R/uvlist"))Unversioned Files</a>
169 if( g.perm.Write && zEditGlob[0]!=0 ){
170 @ <li>%z(href("%R/fileedit"))On-line File Editor</a></li>
171 }
172 @ </ul>
173 }
174 if( g.perm.Read ){
175 @ <li>%z(href("%R/timeline"))Project Timeline</a>
176
+18 -18
--- src/skins.c
+++ src/skins.c
@@ -441,12 +441,12 @@
441441
@ named "%h(zNewName)". Choose a different name.</span></p>
442442
}
443443
@ <form action="%R/setup_skin_admin" method="post"><div>
444444
@ <table border="0"><tr>
445445
@ <tr><td align="right">Current name:<td align="left"><b>%h(zOldName)</b>
446
- @ <tr><td align="right">New name:<td align="left">
447
- @ <input type="text" size="35" name="newname" value="%h(zNewName)">
446
+ @ <tr><td align="right"><label for="newname">New name:</label><td align="left">
447
+ @ <input type="text" size="35" id="newname" name="newname" value="%h(zNewName)">
448448
@ <tr><td><td>
449449
@ <input type="hidden" name="sn" value="%h(zOldName)">
450450
@ <input type="submit" name="rename" value="Rename">
451451
@ <input type="submit" name="canren" value="Cancel">
452452
@ </table>
@@ -483,12 +483,12 @@
483483
@ <p><span class="generalError">There is already another skin
484484
@ named "%h(zNewName)". Choose a different name.</span></p>
485485
}
486486
@ <form action="%R/setup_skin_admin" method="post"><div>
487487
@ <table border="0"><tr>
488
- @ <tr><td align="right">Name for this skin:<td align="left">
489
- @ <input type="text" size="35" name="svname" value="%h(zNewName)">
488
+ @ <tr><td align="right"><label for="svname">Name for this skin:</label><td align="left">
489
+ @ <input type="text" size="35" id="svname" name="svname" value="%h(zNewName)">
490490
@ <tr><td><td>
491491
@ <input type="submit" name="save" value="Save">
492492
@ <input type="submit" name="cansave" value="Cancel">
493493
@ </table>
494494
login_insert_csrf_secret();
@@ -774,11 +774,10 @@
774774
/*
775775
** WEBPAGE: setup_skinedit
776776
**
777777
** Edit aspects of a skin determined by the w= query parameter.
778778
** Requires Admin or Setup privileges.
779
-**
780779
** w=NUM -- 0=CSS, 1=footer, 2=header, 3=details, 4=js
781780
** sk=NUM -- the draft skin number
782781
*/
783782
void setup_skinedit(void){
784783
static const struct sSkinAddr {
@@ -853,26 +852,27 @@
853852
}
854853
@ <form action="%R/setup_skinedit" method="post"><div>
855854
login_insert_csrf_secret();
856855
@ <input type='hidden' name='w' value='%d(ii)'>
857856
@ <input type='hidden' name='sk' value='%d(iSkin)'>
858
- @ <h2>Edit %s(zTitle):</h2>
857
+ @ <h2><label for="%s(zFile)">Edit %s(zTitle):</label></h2>
859858
if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){
860859
db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
861860
}
862
- @ <textarea name="%s(zFile)" rows="10" cols="80">\
861
+ @ <textarea id="%s(zFile)" name="%s(zFile)" rows="10" cols="80">\
863862
@ %h(zContent)</textarea>
864863
@ <br />
865864
@ <input type="submit" name="submit" value="Apply Changes" />
866865
if( isRevert ){
867866
@ &larr; Press to complete reversion to "%s(zBasis)"
868867
}else if( fossil_strcmp(zContent,zDflt)!=0 ){
869868
@ <input type="submit" name="revert" value='Revert To "%s(zBasis)"' />
870869
}
871870
@ <hr />
872
- @ Baseline: \
871
+ @ <label>Baseline: \
873872
skin_emit_skin_selector("basis", zBasis, zDraft);
873
+ @ </label>
874874
@ <input type="submit" name="diff" value="Unified Diff" />
875875
@ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
876876
if( P("diff")!=0 || P("sbsdiff")!=0 ){
877877
Blob from, to, out;
878878
DiffConfig DCfg;
@@ -1032,20 +1032,20 @@
10321032
@ edits are made to one of nine draft skins. A draft skin can then
10331033
@ be published to become the default skin.
10341034
@ Nine separate drafts are available to facilitate A/B testing.</p>
10351035
@
10361036
@ <form method='POST' action='%R/setup_skin#step2' id='f01'>
1037
- @ <p class='skinInput'>Draft skin to edit:
1037
+ @ <p class='skinInput'><label>Draft skin to edit:
10381038
@ <select size='1' name='sk' id='skStep1'>
10391039
for(i=1; i<=9; i++){
10401040
if( i==iSkin ){
10411041
@ <option value='%d(i)' selected>draft%d(i)</option>
10421042
}else{
10431043
@ <option value='%d(i)'>draft%d(i)</option>
10441044
}
10451045
}
1046
- @ </select>
1046
+ @ </select></label>
10471047
@ </p>
10481048
@
10491049
@ <a name='step2'></a>
10501050
@ <h1>Step 2: Authenticate</h1>
10511051
@
@@ -1057,13 +1057,13 @@
10571057
@ the draft%d(iSkin) skin:
10581058
@
10591059
@ <form method='POST' action='%R/setup_skin#step2' id='f02'>
10601060
@ <p class='skinInput'>
10611061
@ <input type='hidden' name='sk' value='%d(iSkin)'>
1062
- @ Authorized editors for skin draft%d(iSkin):
1062
+ @ <label>Authorized editors for skin draft%d(iSkin):
10631063
@ <input type='text' name='editors' value='%h(zAllowedEditors)'\
1064
- @ width='40'>
1064
+ @ width='40'></label>
10651065
@ <input type='submit' name='submit2' value='Change'>
10661066
@ </p>
10671067
@ </form>
10681068
}else if( isEditor ){
10691069
@ <p>You are authorized to make changes to the draft%d(iSkin) skin.
@@ -1085,13 +1085,13 @@
10851085
@ or a preexisting skin, to use as a baseline.</p>
10861086
@
10871087
@ <form method='POST' action='%R/setup_skin#step4' id='f03'>
10881088
@ <p class='skinInput'>
10891089
@ <input type='hidden' name='sk' value='%d(iSkin)'>
1090
- @ Initialize skin <b>draft%d(iSkin)</b> using
1090
+ @ <label>Initialize skin <b>draft%d(iSkin)</b> using
10911091
skin_emit_skin_selector("initskin", "current", 0);
1092
- @ <input type='submit' name='init3' value='Go'>
1092
+ @ </label><input type='submit' name='init3' value='Go'>
10931093
@ </p>
10941094
@ </form>
10951095
}
10961096
@
10971097
@ <a name='step4'></a>
@@ -1155,14 +1155,14 @@
11551155
@ pressing the button below:</p>
11561156
@
11571157
@ <form method='POST' action='%R/setup_skin#step7'>
11581158
@ <p class='skinInput'>
11591159
@ <input type='hidden' name='sk' value='%d(iSkin)'>
1160
- @ <input type='checkbox' name='pub7ck1' value='yes'>\
1161
- @ Skin draft%d(iSkin) has been tested and found ready for production.<br>
1162
- @ <input type='checkbox' name='pub7ck2' value='yes'>\
1163
- @ The current skin should be overwritten with draft%d(iSkin).<br>
1160
+ @ <label><input type='checkbox' name='pub7ck1' value='yes'>\
1161
+ @ Skin draft%d(iSkin) has been tested and found ready for production.</label><br>
1162
+ @ <label><input type='checkbox' name='pub7ck2' value='yes'>\
1163
+ @ The current skin should be overwritten with draft%d(iSkin).</label><br>
11641164
@ <input type='submit' name='pub7' value='Publish Draft%d(iSkin)'>
11651165
@ </p></form>
11661166
@
11671167
@ <p>You will probably need to press Reload on your browser after
11681168
@ publishing the new skin.</p>
11691169
--- src/skins.c
+++ src/skins.c
@@ -441,12 +441,12 @@
441 @ named "%h(zNewName)". Choose a different name.</span></p>
442 }
443 @ <form action="%R/setup_skin_admin" method="post"><div>
444 @ <table border="0"><tr>
445 @ <tr><td align="right">Current name:<td align="left"><b>%h(zOldName)</b>
446 @ <tr><td align="right">New name:<td align="left">
447 @ <input type="text" size="35" name="newname" value="%h(zNewName)">
448 @ <tr><td><td>
449 @ <input type="hidden" name="sn" value="%h(zOldName)">
450 @ <input type="submit" name="rename" value="Rename">
451 @ <input type="submit" name="canren" value="Cancel">
452 @ </table>
@@ -483,12 +483,12 @@
483 @ <p><span class="generalError">There is already another skin
484 @ named "%h(zNewName)". Choose a different name.</span></p>
485 }
486 @ <form action="%R/setup_skin_admin" method="post"><div>
487 @ <table border="0"><tr>
488 @ <tr><td align="right">Name for this skin:<td align="left">
489 @ <input type="text" size="35" name="svname" value="%h(zNewName)">
490 @ <tr><td><td>
491 @ <input type="submit" name="save" value="Save">
492 @ <input type="submit" name="cansave" value="Cancel">
493 @ </table>
494 login_insert_csrf_secret();
@@ -774,11 +774,10 @@
774 /*
775 ** WEBPAGE: setup_skinedit
776 **
777 ** Edit aspects of a skin determined by the w= query parameter.
778 ** Requires Admin or Setup privileges.
779 **
780 ** w=NUM -- 0=CSS, 1=footer, 2=header, 3=details, 4=js
781 ** sk=NUM -- the draft skin number
782 */
783 void setup_skinedit(void){
784 static const struct sSkinAddr {
@@ -853,26 +852,27 @@
853 }
854 @ <form action="%R/setup_skinedit" method="post"><div>
855 login_insert_csrf_secret();
856 @ <input type='hidden' name='w' value='%d(ii)'>
857 @ <input type='hidden' name='sk' value='%d(iSkin)'>
858 @ <h2>Edit %s(zTitle):</h2>
859 if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){
860 db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
861 }
862 @ <textarea name="%s(zFile)" rows="10" cols="80">\
863 @ %h(zContent)</textarea>
864 @ <br />
865 @ <input type="submit" name="submit" value="Apply Changes" />
866 if( isRevert ){
867 @ &larr; Press to complete reversion to "%s(zBasis)"
868 }else if( fossil_strcmp(zContent,zDflt)!=0 ){
869 @ <input type="submit" name="revert" value='Revert To "%s(zBasis)"' />
870 }
871 @ <hr />
872 @ Baseline: \
873 skin_emit_skin_selector("basis", zBasis, zDraft);
 
874 @ <input type="submit" name="diff" value="Unified Diff" />
875 @ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
876 if( P("diff")!=0 || P("sbsdiff")!=0 ){
877 Blob from, to, out;
878 DiffConfig DCfg;
@@ -1032,20 +1032,20 @@
1032 @ edits are made to one of nine draft skins. A draft skin can then
1033 @ be published to become the default skin.
1034 @ Nine separate drafts are available to facilitate A/B testing.</p>
1035 @
1036 @ <form method='POST' action='%R/setup_skin#step2' id='f01'>
1037 @ <p class='skinInput'>Draft skin to edit:
1038 @ <select size='1' name='sk' id='skStep1'>
1039 for(i=1; i<=9; i++){
1040 if( i==iSkin ){
1041 @ <option value='%d(i)' selected>draft%d(i)</option>
1042 }else{
1043 @ <option value='%d(i)'>draft%d(i)</option>
1044 }
1045 }
1046 @ </select>
1047 @ </p>
1048 @
1049 @ <a name='step2'></a>
1050 @ <h1>Step 2: Authenticate</h1>
1051 @
@@ -1057,13 +1057,13 @@
1057 @ the draft%d(iSkin) skin:
1058 @
1059 @ <form method='POST' action='%R/setup_skin#step2' id='f02'>
1060 @ <p class='skinInput'>
1061 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1062 @ Authorized editors for skin draft%d(iSkin):
1063 @ <input type='text' name='editors' value='%h(zAllowedEditors)'\
1064 @ width='40'>
1065 @ <input type='submit' name='submit2' value='Change'>
1066 @ </p>
1067 @ </form>
1068 }else if( isEditor ){
1069 @ <p>You are authorized to make changes to the draft%d(iSkin) skin.
@@ -1085,13 +1085,13 @@
1085 @ or a preexisting skin, to use as a baseline.</p>
1086 @
1087 @ <form method='POST' action='%R/setup_skin#step4' id='f03'>
1088 @ <p class='skinInput'>
1089 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1090 @ Initialize skin <b>draft%d(iSkin)</b> using
1091 skin_emit_skin_selector("initskin", "current", 0);
1092 @ <input type='submit' name='init3' value='Go'>
1093 @ </p>
1094 @ </form>
1095 }
1096 @
1097 @ <a name='step4'></a>
@@ -1155,14 +1155,14 @@
1155 @ pressing the button below:</p>
1156 @
1157 @ <form method='POST' action='%R/setup_skin#step7'>
1158 @ <p class='skinInput'>
1159 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1160 @ <input type='checkbox' name='pub7ck1' value='yes'>\
1161 @ Skin draft%d(iSkin) has been tested and found ready for production.<br>
1162 @ <input type='checkbox' name='pub7ck2' value='yes'>\
1163 @ The current skin should be overwritten with draft%d(iSkin).<br>
1164 @ <input type='submit' name='pub7' value='Publish Draft%d(iSkin)'>
1165 @ </p></form>
1166 @
1167 @ <p>You will probably need to press Reload on your browser after
1168 @ publishing the new skin.</p>
1169
--- src/skins.c
+++ src/skins.c
@@ -441,12 +441,12 @@
441 @ named "%h(zNewName)". Choose a different name.</span></p>
442 }
443 @ <form action="%R/setup_skin_admin" method="post"><div>
444 @ <table border="0"><tr>
445 @ <tr><td align="right">Current name:<td align="left"><b>%h(zOldName)</b>
446 @ <tr><td align="right"><label for="newname">New name:</label><td align="left">
447 @ <input type="text" size="35" id="newname" name="newname" value="%h(zNewName)">
448 @ <tr><td><td>
449 @ <input type="hidden" name="sn" value="%h(zOldName)">
450 @ <input type="submit" name="rename" value="Rename">
451 @ <input type="submit" name="canren" value="Cancel">
452 @ </table>
@@ -483,12 +483,12 @@
483 @ <p><span class="generalError">There is already another skin
484 @ named "%h(zNewName)". Choose a different name.</span></p>
485 }
486 @ <form action="%R/setup_skin_admin" method="post"><div>
487 @ <table border="0"><tr>
488 @ <tr><td align="right"><label for="svname">Name for this skin:</label><td align="left">
489 @ <input type="text" size="35" id="svname" name="svname" value="%h(zNewName)">
490 @ <tr><td><td>
491 @ <input type="submit" name="save" value="Save">
492 @ <input type="submit" name="cansave" value="Cancel">
493 @ </table>
494 login_insert_csrf_secret();
@@ -774,11 +774,10 @@
774 /*
775 ** WEBPAGE: setup_skinedit
776 **
777 ** Edit aspects of a skin determined by the w= query parameter.
778 ** Requires Admin or Setup privileges.
 
779 ** w=NUM -- 0=CSS, 1=footer, 2=header, 3=details, 4=js
780 ** sk=NUM -- the draft skin number
781 */
782 void setup_skinedit(void){
783 static const struct sSkinAddr {
@@ -853,26 +852,27 @@
852 }
853 @ <form action="%R/setup_skinedit" method="post"><div>
854 login_insert_csrf_secret();
855 @ <input type='hidden' name='w' value='%d(ii)'>
856 @ <input type='hidden' name='sk' value='%d(iSkin)'>
857 @ <h2><label for="%s(zFile)">Edit %s(zTitle):</label></h2>
858 if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){
859 db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile);
860 }
861 @ <textarea id="%s(zFile)" name="%s(zFile)" rows="10" cols="80">\
862 @ %h(zContent)</textarea>
863 @ <br />
864 @ <input type="submit" name="submit" value="Apply Changes" />
865 if( isRevert ){
866 @ &larr; Press to complete reversion to "%s(zBasis)"
867 }else if( fossil_strcmp(zContent,zDflt)!=0 ){
868 @ <input type="submit" name="revert" value='Revert To "%s(zBasis)"' />
869 }
870 @ <hr />
871 @ <label>Baseline: \
872 skin_emit_skin_selector("basis", zBasis, zDraft);
873 @ </label>
874 @ <input type="submit" name="diff" value="Unified Diff" />
875 @ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" />
876 if( P("diff")!=0 || P("sbsdiff")!=0 ){
877 Blob from, to, out;
878 DiffConfig DCfg;
@@ -1032,20 +1032,20 @@
1032 @ edits are made to one of nine draft skins. A draft skin can then
1033 @ be published to become the default skin.
1034 @ Nine separate drafts are available to facilitate A/B testing.</p>
1035 @
1036 @ <form method='POST' action='%R/setup_skin#step2' id='f01'>
1037 @ <p class='skinInput'><label>Draft skin to edit:
1038 @ <select size='1' name='sk' id='skStep1'>
1039 for(i=1; i<=9; i++){
1040 if( i==iSkin ){
1041 @ <option value='%d(i)' selected>draft%d(i)</option>
1042 }else{
1043 @ <option value='%d(i)'>draft%d(i)</option>
1044 }
1045 }
1046 @ </select></label>
1047 @ </p>
1048 @
1049 @ <a name='step2'></a>
1050 @ <h1>Step 2: Authenticate</h1>
1051 @
@@ -1057,13 +1057,13 @@
1057 @ the draft%d(iSkin) skin:
1058 @
1059 @ <form method='POST' action='%R/setup_skin#step2' id='f02'>
1060 @ <p class='skinInput'>
1061 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1062 @ <label>Authorized editors for skin draft%d(iSkin):
1063 @ <input type='text' name='editors' value='%h(zAllowedEditors)'\
1064 @ width='40'></label>
1065 @ <input type='submit' name='submit2' value='Change'>
1066 @ </p>
1067 @ </form>
1068 }else if( isEditor ){
1069 @ <p>You are authorized to make changes to the draft%d(iSkin) skin.
@@ -1085,13 +1085,13 @@
1085 @ or a preexisting skin, to use as a baseline.</p>
1086 @
1087 @ <form method='POST' action='%R/setup_skin#step4' id='f03'>
1088 @ <p class='skinInput'>
1089 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1090 @ <label>Initialize skin <b>draft%d(iSkin)</b> using
1091 skin_emit_skin_selector("initskin", "current", 0);
1092 @ </label><input type='submit' name='init3' value='Go'>
1093 @ </p>
1094 @ </form>
1095 }
1096 @
1097 @ <a name='step4'></a>
@@ -1155,14 +1155,14 @@
1155 @ pressing the button below:</p>
1156 @
1157 @ <form method='POST' action='%R/setup_skin#step7'>
1158 @ <p class='skinInput'>
1159 @ <input type='hidden' name='sk' value='%d(iSkin)'>
1160 @ <label><input type='checkbox' name='pub7ck1' value='yes'>\
1161 @ Skin draft%d(iSkin) has been tested and found ready for production.</label><br>
1162 @ <label><input type='checkbox' name='pub7ck2' value='yes'>\
1163 @ The current skin should be overwritten with draft%d(iSkin).</label><br>
1164 @ <input type='submit' name='pub7' value='Publish Draft%d(iSkin)'>
1165 @ </p></form>
1166 @
1167 @ <p>You will probably need to press Reload on your browser after
1168 @ publishing the new skin.</p>
1169
-2
--- src/smtp.c
+++ src/smtp.c
@@ -423,11 +423,10 @@
423423
** Interact with the SMTP server for DOMAIN by setting up a connection
424424
** and then immediately shutting it back down. Log all interaction
425425
** on the console. Use ME as the domain name of the sender.
426426
**
427427
** Options:
428
-**
429428
** --direct Use DOMAIN directly without going through MX
430429
** --port N Talk on TCP port N
431430
*/
432431
void test_smtp_probe(void){
433432
SmtpSession *p;
@@ -596,11 +595,10 @@
596595
**
597596
** Use SMTP to send the email message contained in the file named EMAIL
598597
** to the list of users TO. FROM is the sender of the email.
599598
**
600599
** Options:
601
-**
602600
** --direct Go directly to the TO domain. Bypass MX lookup
603601
** --relayhost R Use R as relay host directly for delivery.
604602
** --port N Use TCP port N instead of 25
605603
** --trace Show the SMTP conversation on the console
606604
*/
607605
--- src/smtp.c
+++ src/smtp.c
@@ -423,11 +423,10 @@
423 ** Interact with the SMTP server for DOMAIN by setting up a connection
424 ** and then immediately shutting it back down. Log all interaction
425 ** on the console. Use ME as the domain name of the sender.
426 **
427 ** Options:
428 **
429 ** --direct Use DOMAIN directly without going through MX
430 ** --port N Talk on TCP port N
431 */
432 void test_smtp_probe(void){
433 SmtpSession *p;
@@ -596,11 +595,10 @@
596 **
597 ** Use SMTP to send the email message contained in the file named EMAIL
598 ** to the list of users TO. FROM is the sender of the email.
599 **
600 ** Options:
601 **
602 ** --direct Go directly to the TO domain. Bypass MX lookup
603 ** --relayhost R Use R as relay host directly for delivery.
604 ** --port N Use TCP port N instead of 25
605 ** --trace Show the SMTP conversation on the console
606 */
607
--- src/smtp.c
+++ src/smtp.c
@@ -423,11 +423,10 @@
423 ** Interact with the SMTP server for DOMAIN by setting up a connection
424 ** and then immediately shutting it back down. Log all interaction
425 ** on the console. Use ME as the domain name of the sender.
426 **
427 ** Options:
 
428 ** --direct Use DOMAIN directly without going through MX
429 ** --port N Talk on TCP port N
430 */
431 void test_smtp_probe(void){
432 SmtpSession *p;
@@ -596,11 +595,10 @@
595 **
596 ** Use SMTP to send the email message contained in the file named EMAIL
597 ** to the list of users TO. FROM is the sender of the email.
598 **
599 ** Options:
 
600 ** --direct Go directly to the TO domain. Bypass MX lookup
601 ** --relayhost R Use R as relay host directly for delivery.
602 ** --port N Use TCP port N instead of 25
603 ** --trace Show the SMTP conversation on the console
604 */
605
-20
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -330,78 +330,58 @@
330330
** in ways that are unrecoverable. Be sure you know what you are doing before
331331
** running any SQL commands that modify the repository database. Use the
332332
** --readonly option to prevent accidental damage to the repository.
333333
**
334334
** Options:
335
-**
336335
** --no-repository Skip opening the repository database.
337
-**
338336
** --readonly Open the repository read-only. No changes
339337
** are allowed. This is a recommended safety
340338
** precaution to prevent repository damage.
341
-**
342339
** -R REPOSITORY Use REPOSITORY as the repository database
343
-**
344340
** --test Enable some testing and analysis features
345341
** that are normally disabled.
346342
**
347343
** All of the standard sqlite3 command-line shell options should also
348344
** work.
349345
**
350346
** The following SQL extensions are provided with this Fossil-enhanced
351347
** version of the sqlite3 command-line shell:
352
-**
353348
** builtin A virtual table that contains one row for
354349
** each datafile that is built into the Fossil
355350
** binary.
356
-**
357351
** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID)
358352
** found in check-in X (another BLOB.RID value).
359
-**
360353
** compress(X) Compress text X with the same algorithm used
361354
** to compress artifacts in the BLOB table.
362
-**
363355
** content(X) Return the content of artifact X. X can be an
364356
** artifact hash or hash prefix or a tag. Artifacts
365357
** are stored compressed and deltaed. This function
366358
** does all necessary decompression and undeltaing.
367
-**
368359
** decompress(X) Decompress text X. Undoes the work of
369360
** compress(X).
370
-**
371361
** delta_apply(X,D) Apply delta D to source blob X and return
372362
** the result.
373
-**
374363
** delta_create(X,Y) Create and return a delta that will convert
375364
** X into Y.
376
-**
377365
** delta_output_size(D) Return the number of bytes of output to expect
378366
** when applying delta D
379
-**
380367
** delta_parse(D) A table-valued function that deconstructs
381368
** delta D and returns rows for each element of
382369
** that delta.
383
-**
384370
** files_of_checkin(X) A table-valued function that returns info on
385371
** all files contained in check-in X. Example:
386
-**
387372
** SELECT * FROM files_of_checkin('trunk');
388
-**
389373
** helptext A virtual table with one row for each command,
390374
** webpage, and setting together with the built-in
391375
** help text.
392
-**
393376
** now() Return the number of seconds since 1970.
394
-**
395377
** obscure(T) Obfuscate the text password T so that its
396378
** original value is not readily visible. Fossil
397379
** uses this same algorithm when storing passwords
398380
** of remote URLs.
399
-**
400381
** regexp The REGEXP operator works, unlike in
401382
** standard SQLite.
402
-**
403383
** symbolic_name_to_rid(X) Return the BLOB.RID corresponding to symbolic
404384
** name X.
405385
*/
406386
void cmd_sqlite3(void){
407387
int noRepository;
408388
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -330,78 +330,58 @@
330 ** in ways that are unrecoverable. Be sure you know what you are doing before
331 ** running any SQL commands that modify the repository database. Use the
332 ** --readonly option to prevent accidental damage to the repository.
333 **
334 ** Options:
335 **
336 ** --no-repository Skip opening the repository database.
337 **
338 ** --readonly Open the repository read-only. No changes
339 ** are allowed. This is a recommended safety
340 ** precaution to prevent repository damage.
341 **
342 ** -R REPOSITORY Use REPOSITORY as the repository database
343 **
344 ** --test Enable some testing and analysis features
345 ** that are normally disabled.
346 **
347 ** All of the standard sqlite3 command-line shell options should also
348 ** work.
349 **
350 ** The following SQL extensions are provided with this Fossil-enhanced
351 ** version of the sqlite3 command-line shell:
352 **
353 ** builtin A virtual table that contains one row for
354 ** each datafile that is built into the Fossil
355 ** binary.
356 **
357 ** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID)
358 ** found in check-in X (another BLOB.RID value).
359 **
360 ** compress(X) Compress text X with the same algorithm used
361 ** to compress artifacts in the BLOB table.
362 **
363 ** content(X) Return the content of artifact X. X can be an
364 ** artifact hash or hash prefix or a tag. Artifacts
365 ** are stored compressed and deltaed. This function
366 ** does all necessary decompression and undeltaing.
367 **
368 ** decompress(X) Decompress text X. Undoes the work of
369 ** compress(X).
370 **
371 ** delta_apply(X,D) Apply delta D to source blob X and return
372 ** the result.
373 **
374 ** delta_create(X,Y) Create and return a delta that will convert
375 ** X into Y.
376 **
377 ** delta_output_size(D) Return the number of bytes of output to expect
378 ** when applying delta D
379 **
380 ** delta_parse(D) A table-valued function that deconstructs
381 ** delta D and returns rows for each element of
382 ** that delta.
383 **
384 ** files_of_checkin(X) A table-valued function that returns info on
385 ** all files contained in check-in X. Example:
386 **
387 ** SELECT * FROM files_of_checkin('trunk');
388 **
389 ** helptext A virtual table with one row for each command,
390 ** webpage, and setting together with the built-in
391 ** help text.
392 **
393 ** now() Return the number of seconds since 1970.
394 **
395 ** obscure(T) Obfuscate the text password T so that its
396 ** original value is not readily visible. Fossil
397 ** uses this same algorithm when storing passwords
398 ** of remote URLs.
399 **
400 ** regexp The REGEXP operator works, unlike in
401 ** standard SQLite.
402 **
403 ** symbolic_name_to_rid(X) Return the BLOB.RID corresponding to symbolic
404 ** name X.
405 */
406 void cmd_sqlite3(void){
407 int noRepository;
408
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -330,78 +330,58 @@
330 ** in ways that are unrecoverable. Be sure you know what you are doing before
331 ** running any SQL commands that modify the repository database. Use the
332 ** --readonly option to prevent accidental damage to the repository.
333 **
334 ** Options:
 
335 ** --no-repository Skip opening the repository database.
 
336 ** --readonly Open the repository read-only. No changes
337 ** are allowed. This is a recommended safety
338 ** precaution to prevent repository damage.
 
339 ** -R REPOSITORY Use REPOSITORY as the repository database
 
340 ** --test Enable some testing and analysis features
341 ** that are normally disabled.
342 **
343 ** All of the standard sqlite3 command-line shell options should also
344 ** work.
345 **
346 ** The following SQL extensions are provided with this Fossil-enhanced
347 ** version of the sqlite3 command-line shell:
 
348 ** builtin A virtual table that contains one row for
349 ** each datafile that is built into the Fossil
350 ** binary.
 
351 ** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID)
352 ** found in check-in X (another BLOB.RID value).
 
353 ** compress(X) Compress text X with the same algorithm used
354 ** to compress artifacts in the BLOB table.
 
355 ** content(X) Return the content of artifact X. X can be an
356 ** artifact hash or hash prefix or a tag. Artifacts
357 ** are stored compressed and deltaed. This function
358 ** does all necessary decompression and undeltaing.
 
359 ** decompress(X) Decompress text X. Undoes the work of
360 ** compress(X).
 
361 ** delta_apply(X,D) Apply delta D to source blob X and return
362 ** the result.
 
363 ** delta_create(X,Y) Create and return a delta that will convert
364 ** X into Y.
 
365 ** delta_output_size(D) Return the number of bytes of output to expect
366 ** when applying delta D
 
367 ** delta_parse(D) A table-valued function that deconstructs
368 ** delta D and returns rows for each element of
369 ** that delta.
 
370 ** files_of_checkin(X) A table-valued function that returns info on
371 ** all files contained in check-in X. Example:
 
372 ** SELECT * FROM files_of_checkin('trunk');
 
373 ** helptext A virtual table with one row for each command,
374 ** webpage, and setting together with the built-in
375 ** help text.
 
376 ** now() Return the number of seconds since 1970.
 
377 ** obscure(T) Obfuscate the text password T so that its
378 ** original value is not readily visible. Fossil
379 ** uses this same algorithm when storing passwords
380 ** of remote URLs.
 
381 ** regexp The REGEXP operator works, unlike in
382 ** standard SQLite.
 
383 ** symbolic_name_to_rid(X) Return the BLOB.RID corresponding to symbolic
384 ** name X.
385 */
386 void cmd_sqlite3(void){
387 int noRepository;
388
-14
--- src/stash.c
+++ src/stash.c
@@ -503,57 +503,43 @@
503503
504504
/*
505505
** COMMAND: stash
506506
**
507507
** Usage: %fossil stash SUBCOMMAND ARGS...
508
-**
509508
** > fossil stash
510509
** > fossil stash save ?-m|--comment COMMENT? ?FILES...?
511510
** > fossil stash snapshot ?-m|--comment COMMENT? ?FILES...?
512
-**
513511
** Save the current changes in the working tree as a new stash.
514512
** Then revert the changes back to the last check-in. If FILES
515513
** are listed, then only stash and revert the named files. The
516514
** "save" verb can be omitted if and only if there are no other
517515
** arguments. The "snapshot" verb works the same as "save" but
518516
** omits the revert, keeping the checkout unchanged.
519
-**
520517
** > fossil stash list|ls ?-v|--verbose? ?-W|--width NUM?
521
-**
522518
** List all changes sets currently stashed. Show information about
523519
** individual files in each changeset if -v or --verbose is used.
524
-**
525520
** > fossil stash show|cat ?STASHID? ?DIFF-OPTIONS?
526521
** > fossil stash gshow|gcat ?STASHID? ?DIFF-OPTIONS?
527
-**
528522
** Show the contents of a stash as a diff against its baseline.
529523
** With gshow and gcat, gdiff-command is used instead of internal
530524
** diff logic.
531
-**
532525
** > fossil stash pop
533526
** > fossil stash apply ?STASHID?
534
-**
535527
** Apply STASHID or the most recently created stash to the current
536528
** working checkout. The "pop" command deletes that changeset from
537529
** the stash after applying it but the "apply" command retains the
538530
** changeset.
539
-**
540531
** > fossil stash goto ?STASHID?
541
-**
542532
** Update to the baseline checkout for STASHID then apply the
543533
** changes of STASHID. Keep STASHID so that it can be reused
544534
** This command is undoable.
545
-**
546535
** > fossil stash drop|rm ?STASHID? ?-a|--all?
547
-**
548536
** Forget everything about STASHID. Forget the whole stash if the
549537
** -a|--all flag is used. Individual drops are undoable but -a|--all
550538
** is not.
551
-**
552539
** > fossil stash diff ?STASHID? ?DIFF-OPTIONS?
553540
** > fossil stash gdiff ?STASHID? ?DIFF-OPTIONS?
554
-**
555541
** Show diffs of the current working directory and what that
556542
** directory would be if STASHID were applied. With gdiff,
557543
** gdiff-command is used instead of internal diff logic.
558544
*/
559545
void stash_cmd(void){
560546
--- src/stash.c
+++ src/stash.c
@@ -503,57 +503,43 @@
503
504 /*
505 ** COMMAND: stash
506 **
507 ** Usage: %fossil stash SUBCOMMAND ARGS...
508 **
509 ** > fossil stash
510 ** > fossil stash save ?-m|--comment COMMENT? ?FILES...?
511 ** > fossil stash snapshot ?-m|--comment COMMENT? ?FILES...?
512 **
513 ** Save the current changes in the working tree as a new stash.
514 ** Then revert the changes back to the last check-in. If FILES
515 ** are listed, then only stash and revert the named files. The
516 ** "save" verb can be omitted if and only if there are no other
517 ** arguments. The "snapshot" verb works the same as "save" but
518 ** omits the revert, keeping the checkout unchanged.
519 **
520 ** > fossil stash list|ls ?-v|--verbose? ?-W|--width NUM?
521 **
522 ** List all changes sets currently stashed. Show information about
523 ** individual files in each changeset if -v or --verbose is used.
524 **
525 ** > fossil stash show|cat ?STASHID? ?DIFF-OPTIONS?
526 ** > fossil stash gshow|gcat ?STASHID? ?DIFF-OPTIONS?
527 **
528 ** Show the contents of a stash as a diff against its baseline.
529 ** With gshow and gcat, gdiff-command is used instead of internal
530 ** diff logic.
531 **
532 ** > fossil stash pop
533 ** > fossil stash apply ?STASHID?
534 **
535 ** Apply STASHID or the most recently created stash to the current
536 ** working checkout. The "pop" command deletes that changeset from
537 ** the stash after applying it but the "apply" command retains the
538 ** changeset.
539 **
540 ** > fossil stash goto ?STASHID?
541 **
542 ** Update to the baseline checkout for STASHID then apply the
543 ** changes of STASHID. Keep STASHID so that it can be reused
544 ** This command is undoable.
545 **
546 ** > fossil stash drop|rm ?STASHID? ?-a|--all?
547 **
548 ** Forget everything about STASHID. Forget the whole stash if the
549 ** -a|--all flag is used. Individual drops are undoable but -a|--all
550 ** is not.
551 **
552 ** > fossil stash diff ?STASHID? ?DIFF-OPTIONS?
553 ** > fossil stash gdiff ?STASHID? ?DIFF-OPTIONS?
554 **
555 ** Show diffs of the current working directory and what that
556 ** directory would be if STASHID were applied. With gdiff,
557 ** gdiff-command is used instead of internal diff logic.
558 */
559 void stash_cmd(void){
560
--- src/stash.c
+++ src/stash.c
@@ -503,57 +503,43 @@
503
504 /*
505 ** COMMAND: stash
506 **
507 ** Usage: %fossil stash SUBCOMMAND ARGS...
 
508 ** > fossil stash
509 ** > fossil stash save ?-m|--comment COMMENT? ?FILES...?
510 ** > fossil stash snapshot ?-m|--comment COMMENT? ?FILES...?
 
511 ** Save the current changes in the working tree as a new stash.
512 ** Then revert the changes back to the last check-in. If FILES
513 ** are listed, then only stash and revert the named files. The
514 ** "save" verb can be omitted if and only if there are no other
515 ** arguments. The "snapshot" verb works the same as "save" but
516 ** omits the revert, keeping the checkout unchanged.
 
517 ** > fossil stash list|ls ?-v|--verbose? ?-W|--width NUM?
 
518 ** List all changes sets currently stashed. Show information about
519 ** individual files in each changeset if -v or --verbose is used.
 
520 ** > fossil stash show|cat ?STASHID? ?DIFF-OPTIONS?
521 ** > fossil stash gshow|gcat ?STASHID? ?DIFF-OPTIONS?
 
522 ** Show the contents of a stash as a diff against its baseline.
523 ** With gshow and gcat, gdiff-command is used instead of internal
524 ** diff logic.
 
525 ** > fossil stash pop
526 ** > fossil stash apply ?STASHID?
 
527 ** Apply STASHID or the most recently created stash to the current
528 ** working checkout. The "pop" command deletes that changeset from
529 ** the stash after applying it but the "apply" command retains the
530 ** changeset.
 
531 ** > fossil stash goto ?STASHID?
 
532 ** Update to the baseline checkout for STASHID then apply the
533 ** changes of STASHID. Keep STASHID so that it can be reused
534 ** This command is undoable.
 
535 ** > fossil stash drop|rm ?STASHID? ?-a|--all?
 
536 ** Forget everything about STASHID. Forget the whole stash if the
537 ** -a|--all flag is used. Individual drops are undoable but -a|--all
538 ** is not.
 
539 ** > fossil stash diff ?STASHID? ?DIFF-OPTIONS?
540 ** > fossil stash gdiff ?STASHID? ?DIFF-OPTIONS?
 
541 ** Show diffs of the current working directory and what that
542 ** directory would be if STASHID were applied. With gdiff,
543 ** gdiff-command is used instead of internal diff logic.
544 */
545 void stash_cmd(void){
546
-1
--- src/stat.c
+++ src/stat.c
@@ -333,11 +333,10 @@
333333
**
334334
** Shows statistics and global information about the repository and/or
335335
** verify the integrity of a repository.
336336
**
337337
** Options:
338
-**
339338
** -b|--brief Only show essential elements.
340339
** --db-check Run "PRAGMA quick_check" on the repository database.
341340
** --db-verify Run a full verification of the repository integrity.
342341
** This involves decoding and reparsing all artifacts
343342
** and can take significant time.
344343
--- src/stat.c
+++ src/stat.c
@@ -333,11 +333,10 @@
333 **
334 ** Shows statistics and global information about the repository and/or
335 ** verify the integrity of a repository.
336 **
337 ** Options:
338 **
339 ** -b|--brief Only show essential elements.
340 ** --db-check Run "PRAGMA quick_check" on the repository database.
341 ** --db-verify Run a full verification of the repository integrity.
342 ** This involves decoding and reparsing all artifacts
343 ** and can take significant time.
344
--- src/stat.c
+++ src/stat.c
@@ -333,11 +333,10 @@
333 **
334 ** Shows statistics and global information about the repository and/or
335 ** verify the integrity of a repository.
336 **
337 ** Options:
 
338 ** -b|--brief Only show essential elements.
339 ** --db-check Run "PRAGMA quick_check" on the repository database.
340 ** --db-verify Run a full verification of the repository integrity.
341 ** This involves decoding and reparsing all artifacts
342 ** and can take significant time.
343
+16 -18
--- src/statrep.c
+++ src/statrep.c
@@ -223,11 +223,11 @@
223223
@ class='statistics-report-table-events'>
224224
}
225225
@ <thead>
226226
@ <th>%s(zTimeLabel)</th>
227227
@ <th>Events</th>
228
- @ <th width='90%%'><!-- relative commits graph --></th>
228
+ @ <th width='90%%'>Graph</th>
229229
@ </thead><tbody>
230230
/*
231231
Run the query twice. The first time we calculate the maximum
232232
number of events for a given row. Maybe someone with better SQL
233233
Fu can re-implement this with a single query.
@@ -362,11 +362,11 @@
362362
@ <table class='statistics-report-table-events sortable' border='0' \
363363
@ cellpadding='2' cellspacing='0' data-column-types='tkx' data-init-sort='2'>
364364
@ <thead><tr>
365365
@ <th>User</th>
366366
@ <th>Events</th>
367
- @ <th width='90%%'><!-- relative commits graph --></th>
367
+ @ <th width='90%%'>Graph</th>
368368
@ </tr></thead><tbody>
369369
db_prepare(&query,
370370
"SELECT ifnull(euser,user), "
371371
"COUNT(*) AS eventCount "
372372
"FROM v_reports "
@@ -438,11 +438,11 @@
438438
@ <table class='statistics-report-table-events sortable' border='0' \
439439
@ cellpadding='2' cellspacing='0' data-column-types='tNx' data-init-sort='2'>
440440
@ <thead><tr>
441441
@ <th>File</th>
442442
@ <th>Check-ins</th>
443
- @ <th width='90%%'><!-- relative commits graph --></th>
443
+ @ <th width='90%%'>Graph</th>
444444
@ </tr></thead><tbody>
445445
while( SQLITE_ROW == db_step(&query) ){
446446
const char *zFile = db_column_text(&query, 0);
447447
const int n = db_column_int(&query, 1);
448448
int sz;
@@ -519,11 +519,11 @@
519519
@ cellpadding='2' cellspacing='0' data-column-types='ntnx' data-init-sort='1'>
520520
@ <thead><tr>
521521
@ <th>DoW</th>
522522
@ <th>Day</th>
523523
@ <th>Events</th>
524
- @ <th width='90%%'><!-- relative commits graph --></th>
524
+ @ <th width='90%%'>Graph</th>
525525
@ </tr></thead><tbody>
526526
while( SQLITE_ROW == db_step(&query) ){
527527
const int nCount = db_column_int(&query, 1);
528528
if(nCount>nMaxEvents){
529529
nMaxEvents = nCount;
@@ -595,11 +595,11 @@
595595
@ <table class='statistics-report-table-events sortable' border='0' \
596596
@ cellpadding='2' cellspacing='0' data-column-types='nnx' data-init-sort='1'>
597597
@ <thead><tr>
598598
@ <th>Hour</th>
599599
@ <th>Events</th>
600
- @ <th width='90%%'><!-- relative commits graph --></th>
600
+ @ <th width='90%%'>Graph</th>
601601
@ </tr></thead><tbody>
602602
while( SQLITE_ROW == db_step(&query) ){
603603
const int nCount = db_column_int(&query, 1);
604604
if(nCount>nMaxEvents){
605605
nMaxEvents = nCount;
@@ -643,11 +643,11 @@
643643
int iterations = 0; /* # of active time periods. */
644644
int rowCount = 0;
645645
int total = 0;
646646
647647
stats_report_init_view();
648
- style_submenu_sql("y", "Year:",
648
+ style_submenu_sql("y", "Year",
649649
"WITH RECURSIVE a(b) AS ("
650650
" SELECT substr(date('now'),1,4) UNION ALL"
651651
" SELECT b-1 FROM a"
652652
" WHERE b>0+(SELECT substr(date(min(mtime)),1,4) FROM event)"
653653
") SELECT b, b FROM a ORDER BY b DESC");
@@ -674,11 +674,11 @@
674674
"border='0' cellpadding='2' width='100%%' "
675675
"cellspacing='0' data-column-types='tnx' data-init-sort='0'>");
676676
cgi_printf("<thead><tr>"
677677
"<th>Week</th>"
678678
"<th>Events</th>"
679
- "<th width='90%%'><!-- relative commits graph --></th>"
679
+ "<th width='90%%'>Graph</th>"
680680
"</tr></thead>"
681681
"<tbody>");
682682
while( SQLITE_ROW == db_step(&q) ){
683683
const int nCount = db_column_int(&q, 1);
684684
if(nCount>nMaxEvents){
@@ -784,21 +784,19 @@
784784
** WEBPAGE: reports
785785
**
786786
** Shows activity reports for the repository.
787787
**
788788
** Query Parameters:
789
-**
790789
** view=REPORT_NAME Valid values: bymonth, byyear, byuser
791790
** user=NAME Restricts statistics to the given user
792791
** type=TYPE Restricts the report to a specific event type:
793792
** ci (check-in), f (forum), w (wiki), t (ticket), g (tag)
794793
** Defaulting to all event types.
795794
**
796795
** The view-specific query parameters include:
797796
**
798797
** view=byweek:
799
-**
800798
** y=YYYY The year to report (default is the server's
801799
** current year).
802800
*/
803801
void stats_report_page(){
804802
const char *zView = P("view"); /* Which view/report to show. */
@@ -811,16 +809,16 @@
811809
const char *zVal; /* Value of view= query parameter */
812810
int eType; /* Corresponding RPT_* define */
813811
} aViewType[] = {
814812
{ "File Changes","byfile", RPT_BYFILE },
815813
{ "Last Change", "lastchng", RPT_LASTCHNG },
816
- { "By Month", "bymonth", RPT_BYMONTH },
817
- { "By User", "byuser", RPT_BYUSER },
818
- { "By Week", "byweek", RPT_BYWEEK },
819
- { "By Weekday", "byweekday", RPT_BYWEEKDAY },
820
- { "By Year", "byyear", RPT_BYYEAR },
821
- { "By Hour", "byhour", RPT_BYHOUR },
814
+ { "Month", "bymonth", RPT_BYMONTH },
815
+ { "User", "byuser", RPT_BYUSER },
816
+ { "Week", "byweek", RPT_BYWEEK },
817
+ { "Weekday", "byweekday", RPT_BYWEEKDAY },
818
+ { "Year", "byyear", RPT_BYYEAR },
819
+ { "Hour", "byhour", RPT_BYHOUR },
822820
};
823821
static const char *const azType[] = {
824822
"a", "All Changes",
825823
"ci", "Check-ins",
826824
"f", "Forum Posts",
@@ -850,15 +848,15 @@
850848
for(i=0; i<count(aViewType); i++){
851849
azView[nView++] = aViewType[i].zVal;
852850
azView[nView++] = aViewType[i].zName;
853851
}
854852
if( eType!=RPT_BYFILE ){
855
- style_submenu_multichoice("type", count(azType)/2, azType, 0);
853
+ style_submenu_multichoice("type", "Type", count(azType)/2, azType, 0);
856854
}
857
- style_submenu_multichoice("view", nView/2, azView, 0);
855
+ style_submenu_multichoice("view", "Group By", nView/2, azView, 0);
858856
if( eType!=RPT_BYUSER && eType!=RPT_LASTCHNG ){
859
- style_submenu_sql("user","User:",
857
+ style_submenu_sql("user","User",
860858
"SELECT '', 'All Users' UNION ALL "
861859
"SELECT x, x FROM ("
862860
" SELECT DISTINCT trim(coalesce(euser,user)) AS x FROM event %s"
863861
" ORDER BY 1 COLLATE nocase) WHERE x!=''",
864862
eType==RPT_BYFILE ? "WHERE type='ci'" : ""
865863
--- src/statrep.c
+++ src/statrep.c
@@ -223,11 +223,11 @@
223 @ class='statistics-report-table-events'>
224 }
225 @ <thead>
226 @ <th>%s(zTimeLabel)</th>
227 @ <th>Events</th>
228 @ <th width='90%%'><!-- relative commits graph --></th>
229 @ </thead><tbody>
230 /*
231 Run the query twice. The first time we calculate the maximum
232 number of events for a given row. Maybe someone with better SQL
233 Fu can re-implement this with a single query.
@@ -362,11 +362,11 @@
362 @ <table class='statistics-report-table-events sortable' border='0' \
363 @ cellpadding='2' cellspacing='0' data-column-types='tkx' data-init-sort='2'>
364 @ <thead><tr>
365 @ <th>User</th>
366 @ <th>Events</th>
367 @ <th width='90%%'><!-- relative commits graph --></th>
368 @ </tr></thead><tbody>
369 db_prepare(&query,
370 "SELECT ifnull(euser,user), "
371 "COUNT(*) AS eventCount "
372 "FROM v_reports "
@@ -438,11 +438,11 @@
438 @ <table class='statistics-report-table-events sortable' border='0' \
439 @ cellpadding='2' cellspacing='0' data-column-types='tNx' data-init-sort='2'>
440 @ <thead><tr>
441 @ <th>File</th>
442 @ <th>Check-ins</th>
443 @ <th width='90%%'><!-- relative commits graph --></th>
444 @ </tr></thead><tbody>
445 while( SQLITE_ROW == db_step(&query) ){
446 const char *zFile = db_column_text(&query, 0);
447 const int n = db_column_int(&query, 1);
448 int sz;
@@ -519,11 +519,11 @@
519 @ cellpadding='2' cellspacing='0' data-column-types='ntnx' data-init-sort='1'>
520 @ <thead><tr>
521 @ <th>DoW</th>
522 @ <th>Day</th>
523 @ <th>Events</th>
524 @ <th width='90%%'><!-- relative commits graph --></th>
525 @ </tr></thead><tbody>
526 while( SQLITE_ROW == db_step(&query) ){
527 const int nCount = db_column_int(&query, 1);
528 if(nCount>nMaxEvents){
529 nMaxEvents = nCount;
@@ -595,11 +595,11 @@
595 @ <table class='statistics-report-table-events sortable' border='0' \
596 @ cellpadding='2' cellspacing='0' data-column-types='nnx' data-init-sort='1'>
597 @ <thead><tr>
598 @ <th>Hour</th>
599 @ <th>Events</th>
600 @ <th width='90%%'><!-- relative commits graph --></th>
601 @ </tr></thead><tbody>
602 while( SQLITE_ROW == db_step(&query) ){
603 const int nCount = db_column_int(&query, 1);
604 if(nCount>nMaxEvents){
605 nMaxEvents = nCount;
@@ -643,11 +643,11 @@
643 int iterations = 0; /* # of active time periods. */
644 int rowCount = 0;
645 int total = 0;
646
647 stats_report_init_view();
648 style_submenu_sql("y", "Year:",
649 "WITH RECURSIVE a(b) AS ("
650 " SELECT substr(date('now'),1,4) UNION ALL"
651 " SELECT b-1 FROM a"
652 " WHERE b>0+(SELECT substr(date(min(mtime)),1,4) FROM event)"
653 ") SELECT b, b FROM a ORDER BY b DESC");
@@ -674,11 +674,11 @@
674 "border='0' cellpadding='2' width='100%%' "
675 "cellspacing='0' data-column-types='tnx' data-init-sort='0'>");
676 cgi_printf("<thead><tr>"
677 "<th>Week</th>"
678 "<th>Events</th>"
679 "<th width='90%%'><!-- relative commits graph --></th>"
680 "</tr></thead>"
681 "<tbody>");
682 while( SQLITE_ROW == db_step(&q) ){
683 const int nCount = db_column_int(&q, 1);
684 if(nCount>nMaxEvents){
@@ -784,21 +784,19 @@
784 ** WEBPAGE: reports
785 **
786 ** Shows activity reports for the repository.
787 **
788 ** Query Parameters:
789 **
790 ** view=REPORT_NAME Valid values: bymonth, byyear, byuser
791 ** user=NAME Restricts statistics to the given user
792 ** type=TYPE Restricts the report to a specific event type:
793 ** ci (check-in), f (forum), w (wiki), t (ticket), g (tag)
794 ** Defaulting to all event types.
795 **
796 ** The view-specific query parameters include:
797 **
798 ** view=byweek:
799 **
800 ** y=YYYY The year to report (default is the server's
801 ** current year).
802 */
803 void stats_report_page(){
804 const char *zView = P("view"); /* Which view/report to show. */
@@ -811,16 +809,16 @@
811 const char *zVal; /* Value of view= query parameter */
812 int eType; /* Corresponding RPT_* define */
813 } aViewType[] = {
814 { "File Changes","byfile", RPT_BYFILE },
815 { "Last Change", "lastchng", RPT_LASTCHNG },
816 { "By Month", "bymonth", RPT_BYMONTH },
817 { "By User", "byuser", RPT_BYUSER },
818 { "By Week", "byweek", RPT_BYWEEK },
819 { "By Weekday", "byweekday", RPT_BYWEEKDAY },
820 { "By Year", "byyear", RPT_BYYEAR },
821 { "By Hour", "byhour", RPT_BYHOUR },
822 };
823 static const char *const azType[] = {
824 "a", "All Changes",
825 "ci", "Check-ins",
826 "f", "Forum Posts",
@@ -850,15 +848,15 @@
850 for(i=0; i<count(aViewType); i++){
851 azView[nView++] = aViewType[i].zVal;
852 azView[nView++] = aViewType[i].zName;
853 }
854 if( eType!=RPT_BYFILE ){
855 style_submenu_multichoice("type", count(azType)/2, azType, 0);
856 }
857 style_submenu_multichoice("view", nView/2, azView, 0);
858 if( eType!=RPT_BYUSER && eType!=RPT_LASTCHNG ){
859 style_submenu_sql("user","User:",
860 "SELECT '', 'All Users' UNION ALL "
861 "SELECT x, x FROM ("
862 " SELECT DISTINCT trim(coalesce(euser,user)) AS x FROM event %s"
863 " ORDER BY 1 COLLATE nocase) WHERE x!=''",
864 eType==RPT_BYFILE ? "WHERE type='ci'" : ""
865
--- src/statrep.c
+++ src/statrep.c
@@ -223,11 +223,11 @@
223 @ class='statistics-report-table-events'>
224 }
225 @ <thead>
226 @ <th>%s(zTimeLabel)</th>
227 @ <th>Events</th>
228 @ <th width='90%%'>Graph</th>
229 @ </thead><tbody>
230 /*
231 Run the query twice. The first time we calculate the maximum
232 number of events for a given row. Maybe someone with better SQL
233 Fu can re-implement this with a single query.
@@ -362,11 +362,11 @@
362 @ <table class='statistics-report-table-events sortable' border='0' \
363 @ cellpadding='2' cellspacing='0' data-column-types='tkx' data-init-sort='2'>
364 @ <thead><tr>
365 @ <th>User</th>
366 @ <th>Events</th>
367 @ <th width='90%%'>Graph</th>
368 @ </tr></thead><tbody>
369 db_prepare(&query,
370 "SELECT ifnull(euser,user), "
371 "COUNT(*) AS eventCount "
372 "FROM v_reports "
@@ -438,11 +438,11 @@
438 @ <table class='statistics-report-table-events sortable' border='0' \
439 @ cellpadding='2' cellspacing='0' data-column-types='tNx' data-init-sort='2'>
440 @ <thead><tr>
441 @ <th>File</th>
442 @ <th>Check-ins</th>
443 @ <th width='90%%'>Graph</th>
444 @ </tr></thead><tbody>
445 while( SQLITE_ROW == db_step(&query) ){
446 const char *zFile = db_column_text(&query, 0);
447 const int n = db_column_int(&query, 1);
448 int sz;
@@ -519,11 +519,11 @@
519 @ cellpadding='2' cellspacing='0' data-column-types='ntnx' data-init-sort='1'>
520 @ <thead><tr>
521 @ <th>DoW</th>
522 @ <th>Day</th>
523 @ <th>Events</th>
524 @ <th width='90%%'>Graph</th>
525 @ </tr></thead><tbody>
526 while( SQLITE_ROW == db_step(&query) ){
527 const int nCount = db_column_int(&query, 1);
528 if(nCount>nMaxEvents){
529 nMaxEvents = nCount;
@@ -595,11 +595,11 @@
595 @ <table class='statistics-report-table-events sortable' border='0' \
596 @ cellpadding='2' cellspacing='0' data-column-types='nnx' data-init-sort='1'>
597 @ <thead><tr>
598 @ <th>Hour</th>
599 @ <th>Events</th>
600 @ <th width='90%%'>Graph</th>
601 @ </tr></thead><tbody>
602 while( SQLITE_ROW == db_step(&query) ){
603 const int nCount = db_column_int(&query, 1);
604 if(nCount>nMaxEvents){
605 nMaxEvents = nCount;
@@ -643,11 +643,11 @@
643 int iterations = 0; /* # of active time periods. */
644 int rowCount = 0;
645 int total = 0;
646
647 stats_report_init_view();
648 style_submenu_sql("y", "Year",
649 "WITH RECURSIVE a(b) AS ("
650 " SELECT substr(date('now'),1,4) UNION ALL"
651 " SELECT b-1 FROM a"
652 " WHERE b>0+(SELECT substr(date(min(mtime)),1,4) FROM event)"
653 ") SELECT b, b FROM a ORDER BY b DESC");
@@ -674,11 +674,11 @@
674 "border='0' cellpadding='2' width='100%%' "
675 "cellspacing='0' data-column-types='tnx' data-init-sort='0'>");
676 cgi_printf("<thead><tr>"
677 "<th>Week</th>"
678 "<th>Events</th>"
679 "<th width='90%%'>Graph</th>"
680 "</tr></thead>"
681 "<tbody>");
682 while( SQLITE_ROW == db_step(&q) ){
683 const int nCount = db_column_int(&q, 1);
684 if(nCount>nMaxEvents){
@@ -784,21 +784,19 @@
784 ** WEBPAGE: reports
785 **
786 ** Shows activity reports for the repository.
787 **
788 ** Query Parameters:
 
789 ** view=REPORT_NAME Valid values: bymonth, byyear, byuser
790 ** user=NAME Restricts statistics to the given user
791 ** type=TYPE Restricts the report to a specific event type:
792 ** ci (check-in), f (forum), w (wiki), t (ticket), g (tag)
793 ** Defaulting to all event types.
794 **
795 ** The view-specific query parameters include:
796 **
797 ** view=byweek:
 
798 ** y=YYYY The year to report (default is the server's
799 ** current year).
800 */
801 void stats_report_page(){
802 const char *zView = P("view"); /* Which view/report to show. */
@@ -811,16 +809,16 @@
809 const char *zVal; /* Value of view= query parameter */
810 int eType; /* Corresponding RPT_* define */
811 } aViewType[] = {
812 { "File Changes","byfile", RPT_BYFILE },
813 { "Last Change", "lastchng", RPT_LASTCHNG },
814 { "Month", "bymonth", RPT_BYMONTH },
815 { "User", "byuser", RPT_BYUSER },
816 { "Week", "byweek", RPT_BYWEEK },
817 { "Weekday", "byweekday", RPT_BYWEEKDAY },
818 { "Year", "byyear", RPT_BYYEAR },
819 { "Hour", "byhour", RPT_BYHOUR },
820 };
821 static const char *const azType[] = {
822 "a", "All Changes",
823 "ci", "Check-ins",
824 "f", "Forum Posts",
@@ -850,15 +848,15 @@
848 for(i=0; i<count(aViewType); i++){
849 azView[nView++] = aViewType[i].zVal;
850 azView[nView++] = aViewType[i].zName;
851 }
852 if( eType!=RPT_BYFILE ){
853 style_submenu_multichoice("type", "Type", count(azType)/2, azType, 0);
854 }
855 style_submenu_multichoice("view", "Group By", nView/2, azView, 0);
856 if( eType!=RPT_BYUSER && eType!=RPT_LASTCHNG ){
857 style_submenu_sql("user","User",
858 "SELECT '', 'All Users' UNION ALL "
859 "SELECT x, x FROM ("
860 " SELECT DISTINCT trim(coalesce(euser,user)) AS x FROM event %s"
861 " ORDER BY 1 COLLATE nocase) WHERE x!=''",
862 eType==RPT_BYFILE ? "WHERE type='ci'" : ""
863
+19 -16
--- src/style.c
+++ src/style.c
@@ -44,15 +44,16 @@
4444
const char *zLink; /* Jump to this link when button is pressed */
4545
} aSubmenu[30];
4646
static int nSubmenu = 0; /* Number of buttons */
4747
static struct SubmenuCtrl {
4848
const char *zName; /* Form query parameter */
49
- const char *zLabel; /* Label. Might be NULL for FF_MULTI */
49
+ const char *zLabel; /* Label */
5050
unsigned char eType; /* FF_ENTRY, FF_MULTI, FF_CHECKBOX */
5151
unsigned char eVisible; /* STYLE_NORMAL or STYLE_DISABLED */
5252
short int iSize; /* Width for FF_ENTRY. Count for FF_MULTI */
5353
const char *const *azChoice; /* value/display pairs for FF_MULTI */
54
+ const char *zTrue; /* FF_BINARY label when true */
5455
const char *zFalse; /* FF_BINARY label when false */
5556
const char *zJS; /* Javascript to run on toggle */
5657
} aSubmenuCtrl[20];
5758
static int nSubmenuCtrl = 0;
5859
#define FF_ENTRY 1 /* Text entry box */
@@ -307,30 +308,34 @@
307308
aSubmenuCtrl[nSubmenuCtrl].eType = FF_CHECKBOX;
308309
nSubmenuCtrl++;
309310
}
310311
void style_submenu_binary(
311312
const char *zName, /* Query parameter name */
313
+ const char *zLabel, /* Label of parameter */
312314
const char *zTrue, /* Label to show when parameter is true */
313315
const char *zFalse, /* Label to show when the parameter is false */
314316
int eVisible /* Visible or disabled */
315317
){
316318
assert( nSubmenuCtrl < count(aSubmenuCtrl) );
317319
aSubmenuCtrl[nSubmenuCtrl].zName = zName;
318
- aSubmenuCtrl[nSubmenuCtrl].zLabel = zTrue;
320
+ aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel;
321
+ aSubmenuCtrl[nSubmenuCtrl].zTrue = zTrue;
319322
aSubmenuCtrl[nSubmenuCtrl].zFalse = zFalse;
320323
aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
321324
aSubmenuCtrl[nSubmenuCtrl].eType = FF_BINARY;
322325
nSubmenuCtrl++;
323326
}
324327
void style_submenu_multichoice(
325328
const char *zName, /* Query parameter name */
329
+ const char *zLabel, /* Label of parameter */
326330
int nChoice, /* Number of options */
327331
const char *const *azChoice, /* value/display pairs. 2*nChoice entries */
328332
int eVisible /* Visible or disabled */
329333
){
330334
assert( nSubmenuCtrl < count(aSubmenuCtrl) );
331335
aSubmenuCtrl[nSubmenuCtrl].zName = zName;
336
+ aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel;
332337
aSubmenuCtrl[nSubmenuCtrl].iSize = nChoice;
333338
aSubmenuCtrl[nSubmenuCtrl].azChoice = azChoice;
334339
aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
335340
aSubmenuCtrl[nSubmenuCtrl].eType = FF_MULTI;
336341
nSubmenuCtrl++;
@@ -645,11 +650,11 @@
645650
** Default HTML page header text through <body>. If the repository-specific
646651
** header template lacks a <body> tag, then all of the following is
647652
** prepended.
648653
*/
649654
static const char zDfltHeader[] =
650
-@ <html>
655
+@ <html lang="en">
651656
@ <head>
652657
@ <meta charset="UTF-8">
653658
@ <base href="$baseurl/$current_page" />
654659
@ <meta http-equiv="Content-Security-Policy" content="$default_csp" />
655660
@ <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -987,11 +992,11 @@
987992
if( nSubmenuCtrl ){
988993
@ <form id='f01' method='GET' action='%R/%s(g.zPath)'>
989994
@ <input type='hidden' name='udc' value='1'>
990995
cgi_tag_query_parameter("udc");
991996
}
992
- @ <div class="submenu">
997
+ @ <nav id="submenu" class="submenu" title="Submenu">
993998
if( nSubmenu>0 ){
994999
qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare);
9951000
for(i=0; i<nSubmenu; i++){
9961001
struct Submenu *p = &aSubmenu[i];
9971002
style_derive_classname(p->zLabel, zClass, sizeof zClass);
@@ -1018,29 +1023,27 @@
10181023
}
10191024
style_derive_classname(zQPN, zClass+4, sizeof(zClass)-4);
10201025
switch( aSubmenuCtrl[i].eType ){
10211026
case FF_ENTRY:
10221027
@ <span class='submenuctrl%s(zXtraClass) %s(zClass)'>\
1023
- @ &nbsp;%h(aSubmenuCtrl[i].zLabel)\
1028
+ @ &nbsp;<label>%h(aSubmenuCtrl[i].zLabel):&nbsp;\
10241029
@ <input type='text' name='%s(zQPN)' value='%h(PD(zQPN, ""))' \
10251030
if( aSubmenuCtrl[i].iSize<0 ){
10261031
@ size='%d(-aSubmenuCtrl[i].iSize)' \
10271032
}else if( aSubmenuCtrl[i].iSize>0 ){
10281033
@ size='%d(aSubmenuCtrl[i].iSize)' \
10291034
@ maxlength='%d(aSubmenuCtrl[i].iSize)' \
10301035
}
1031
- @ id='submenuctrl-%d(i)'%s(zDisabled)></span>
1036
+ @ id='submenuctrl-%d(i)'%s(zDisabled)></label></span>
10321037
break;
10331038
case FF_MULTI: {
10341039
int j;
10351040
const char *zVal = P(zQPN);
10361041
if( zXtraClass[0] ){
10371042
@ <span class='%s(zXtraClass+1) %s(zClass)'>
10381043
}
1039
- if( aSubmenuCtrl[i].zLabel ){
1040
- @ &nbsp;%h(aSubmenuCtrl[i].zLabel)\
1041
- }
1044
+ @ &nbsp;<label>%h(aSubmenuCtrl[i].zLabel):&nbsp;\
10421045
@ <select class='submenuctrl %s(zClass)' size='1' name='%s(zQPN)' \
10431046
@ id='submenuctrl-%d(i)'%s(zDisabled)>
10441047
for(j=0; j<aSubmenuCtrl[i].iSize*2; j+=2){
10451048
const char *zQPV = aSubmenuCtrl[i].azChoice[j];
10461049
@ <option value='%h(zQPV)'\
@@ -1048,30 +1051,33 @@
10481051
@ selected\
10491052
}
10501053
@ >%h(aSubmenuCtrl[i].azChoice[j+1])</option>
10511054
}
10521055
@ </select>
1056
+ @ </label>
10531057
if( zXtraClass[0] ){
10541058
@ </span>
10551059
}
10561060
break;
10571061
}
10581062
case FF_BINARY: {
10591063
int isTrue = PB(zQPN);
1064
+ @ <label for='submenuctrl-%d(i)'>%h(aSubmenuCtrl[i].zLabel):&nbsp;
10601065
@ <select class='submenuctrl%s(zXtraClass)' size='1' \
10611066
@ name='%s(zQPN)' id='submenuctrl-%d(i)'%s(zDisabled)>
10621067
@ <option value='1'\
10631068
if( isTrue ){
10641069
@ selected\
10651070
}
1066
- @ >%h(aSubmenuCtrl[i].zLabel)</option>
1071
+ @ >%h(aSubmenuCtrl[i].zTrue)</option>
10671072
@ <option value='0'\
10681073
if( !isTrue ){
10691074
@ selected\
10701075
}
10711076
@ >%h(aSubmenuCtrl[i].zFalse)</option>
10721077
@ </select>
1078
+ @ </label>
10731079
break;
10741080
}
10751081
case FF_CHECKBOX: {
10761082
@ <label class='submenuctrl submenuckbox%s(zXtraClass) %s(zClass)'>\
10771083
@ <input type='checkbox' name='%s(zQPN)' id='submenuctrl-%d(i)' \
@@ -1086,11 +1092,11 @@
10861092
@ %h(aSubmenuCtrl[i].zLabel)</label>
10871093
break;
10881094
}
10891095
}
10901096
}
1091
- @ </div>
1097
+ @ </nav>
10921098
if( nSubmenuCtrl ){
10931099
cgi_query_parameters_to_hidden();
10941100
cgi_tag_query_parameter(0);
10951101
@ </form>
10961102
builtin_request_js("menu.js");
@@ -1107,17 +1113,17 @@
11071113
@ <div class="adunit_banner">
11081114
cgi_append_content(zAd, -1);
11091115
@ </div>
11101116
}
11111117
1112
- @ <div class="content"><span id="debugMsg"></span>
1118
+ @ <main class="content"><span id="debugMsg"></span>
11131119
cgi_destination(CGI_BODY);
11141120
11151121
if( sideboxUsed ){
11161122
@ <div class="endContent"></div>
11171123
}
1118
- @ </div>
1124
+ @ </main>
11191125
11201126
/* Put the footer at the bottom of the page. */
11211127
zFooter = skin_get("footer");
11221128
if( sqlite3_strlike("%</body>%", zFooter, 0)==0 ){
11231129
style_load_all_js_files();
@@ -1265,18 +1271,15 @@
12651271
/*
12661272
** WEBPAGE: style.css loadavg-exempt
12671273
**
12681274
** Return the style sheet. The style sheet is assemblied from
12691275
** multiple sources, in order:
1270
-**
12711276
** (1) The built-in "default.css" style sheet containing basic defaults.
1272
-**
12731277
** (2) The page-specific style sheet taken from the built-in
12741278
** called "PAGENAME.css" where PAGENAME is the value of the name=
12751279
** or page= query parameters. If neither name= nor page= exist,
12761280
** then this section is a no-op.
1277
-**
12781281
** (3) The skin-specific "css.txt" file, if there one.
12791282
**
12801283
** All of (1), (2), and (3) above (or as many as exist) are concatenated.
12811284
** The result is then run through TH1 with the following variables set:
12821285
**
12831286
--- src/style.c
+++ src/style.c
@@ -44,15 +44,16 @@
44 const char *zLink; /* Jump to this link when button is pressed */
45 } aSubmenu[30];
46 static int nSubmenu = 0; /* Number of buttons */
47 static struct SubmenuCtrl {
48 const char *zName; /* Form query parameter */
49 const char *zLabel; /* Label. Might be NULL for FF_MULTI */
50 unsigned char eType; /* FF_ENTRY, FF_MULTI, FF_CHECKBOX */
51 unsigned char eVisible; /* STYLE_NORMAL or STYLE_DISABLED */
52 short int iSize; /* Width for FF_ENTRY. Count for FF_MULTI */
53 const char *const *azChoice; /* value/display pairs for FF_MULTI */
 
54 const char *zFalse; /* FF_BINARY label when false */
55 const char *zJS; /* Javascript to run on toggle */
56 } aSubmenuCtrl[20];
57 static int nSubmenuCtrl = 0;
58 #define FF_ENTRY 1 /* Text entry box */
@@ -307,30 +308,34 @@
307 aSubmenuCtrl[nSubmenuCtrl].eType = FF_CHECKBOX;
308 nSubmenuCtrl++;
309 }
310 void style_submenu_binary(
311 const char *zName, /* Query parameter name */
 
312 const char *zTrue, /* Label to show when parameter is true */
313 const char *zFalse, /* Label to show when the parameter is false */
314 int eVisible /* Visible or disabled */
315 ){
316 assert( nSubmenuCtrl < count(aSubmenuCtrl) );
317 aSubmenuCtrl[nSubmenuCtrl].zName = zName;
318 aSubmenuCtrl[nSubmenuCtrl].zLabel = zTrue;
 
319 aSubmenuCtrl[nSubmenuCtrl].zFalse = zFalse;
320 aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
321 aSubmenuCtrl[nSubmenuCtrl].eType = FF_BINARY;
322 nSubmenuCtrl++;
323 }
324 void style_submenu_multichoice(
325 const char *zName, /* Query parameter name */
 
326 int nChoice, /* Number of options */
327 const char *const *azChoice, /* value/display pairs. 2*nChoice entries */
328 int eVisible /* Visible or disabled */
329 ){
330 assert( nSubmenuCtrl < count(aSubmenuCtrl) );
331 aSubmenuCtrl[nSubmenuCtrl].zName = zName;
 
332 aSubmenuCtrl[nSubmenuCtrl].iSize = nChoice;
333 aSubmenuCtrl[nSubmenuCtrl].azChoice = azChoice;
334 aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
335 aSubmenuCtrl[nSubmenuCtrl].eType = FF_MULTI;
336 nSubmenuCtrl++;
@@ -645,11 +650,11 @@
645 ** Default HTML page header text through <body>. If the repository-specific
646 ** header template lacks a <body> tag, then all of the following is
647 ** prepended.
648 */
649 static const char zDfltHeader[] =
650 @ <html>
651 @ <head>
652 @ <meta charset="UTF-8">
653 @ <base href="$baseurl/$current_page" />
654 @ <meta http-equiv="Content-Security-Policy" content="$default_csp" />
655 @ <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -987,11 +992,11 @@
987 if( nSubmenuCtrl ){
988 @ <form id='f01' method='GET' action='%R/%s(g.zPath)'>
989 @ <input type='hidden' name='udc' value='1'>
990 cgi_tag_query_parameter("udc");
991 }
992 @ <div class="submenu">
993 if( nSubmenu>0 ){
994 qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare);
995 for(i=0; i<nSubmenu; i++){
996 struct Submenu *p = &aSubmenu[i];
997 style_derive_classname(p->zLabel, zClass, sizeof zClass);
@@ -1018,29 +1023,27 @@
1018 }
1019 style_derive_classname(zQPN, zClass+4, sizeof(zClass)-4);
1020 switch( aSubmenuCtrl[i].eType ){
1021 case FF_ENTRY:
1022 @ <span class='submenuctrl%s(zXtraClass) %s(zClass)'>\
1023 @ &nbsp;%h(aSubmenuCtrl[i].zLabel)\
1024 @ <input type='text' name='%s(zQPN)' value='%h(PD(zQPN, ""))' \
1025 if( aSubmenuCtrl[i].iSize<0 ){
1026 @ size='%d(-aSubmenuCtrl[i].iSize)' \
1027 }else if( aSubmenuCtrl[i].iSize>0 ){
1028 @ size='%d(aSubmenuCtrl[i].iSize)' \
1029 @ maxlength='%d(aSubmenuCtrl[i].iSize)' \
1030 }
1031 @ id='submenuctrl-%d(i)'%s(zDisabled)></span>
1032 break;
1033 case FF_MULTI: {
1034 int j;
1035 const char *zVal = P(zQPN);
1036 if( zXtraClass[0] ){
1037 @ <span class='%s(zXtraClass+1) %s(zClass)'>
1038 }
1039 if( aSubmenuCtrl[i].zLabel ){
1040 @ &nbsp;%h(aSubmenuCtrl[i].zLabel)\
1041 }
1042 @ <select class='submenuctrl %s(zClass)' size='1' name='%s(zQPN)' \
1043 @ id='submenuctrl-%d(i)'%s(zDisabled)>
1044 for(j=0; j<aSubmenuCtrl[i].iSize*2; j+=2){
1045 const char *zQPV = aSubmenuCtrl[i].azChoice[j];
1046 @ <option value='%h(zQPV)'\
@@ -1048,30 +1051,33 @@
1048 @ selected\
1049 }
1050 @ >%h(aSubmenuCtrl[i].azChoice[j+1])</option>
1051 }
1052 @ </select>
 
1053 if( zXtraClass[0] ){
1054 @ </span>
1055 }
1056 break;
1057 }
1058 case FF_BINARY: {
1059 int isTrue = PB(zQPN);
 
1060 @ <select class='submenuctrl%s(zXtraClass)' size='1' \
1061 @ name='%s(zQPN)' id='submenuctrl-%d(i)'%s(zDisabled)>
1062 @ <option value='1'\
1063 if( isTrue ){
1064 @ selected\
1065 }
1066 @ >%h(aSubmenuCtrl[i].zLabel)</option>
1067 @ <option value='0'\
1068 if( !isTrue ){
1069 @ selected\
1070 }
1071 @ >%h(aSubmenuCtrl[i].zFalse)</option>
1072 @ </select>
 
1073 break;
1074 }
1075 case FF_CHECKBOX: {
1076 @ <label class='submenuctrl submenuckbox%s(zXtraClass) %s(zClass)'>\
1077 @ <input type='checkbox' name='%s(zQPN)' id='submenuctrl-%d(i)' \
@@ -1086,11 +1092,11 @@
1086 @ %h(aSubmenuCtrl[i].zLabel)</label>
1087 break;
1088 }
1089 }
1090 }
1091 @ </div>
1092 if( nSubmenuCtrl ){
1093 cgi_query_parameters_to_hidden();
1094 cgi_tag_query_parameter(0);
1095 @ </form>
1096 builtin_request_js("menu.js");
@@ -1107,17 +1113,17 @@
1107 @ <div class="adunit_banner">
1108 cgi_append_content(zAd, -1);
1109 @ </div>
1110 }
1111
1112 @ <div class="content"><span id="debugMsg"></span>
1113 cgi_destination(CGI_BODY);
1114
1115 if( sideboxUsed ){
1116 @ <div class="endContent"></div>
1117 }
1118 @ </div>
1119
1120 /* Put the footer at the bottom of the page. */
1121 zFooter = skin_get("footer");
1122 if( sqlite3_strlike("%</body>%", zFooter, 0)==0 ){
1123 style_load_all_js_files();
@@ -1265,18 +1271,15 @@
1265 /*
1266 ** WEBPAGE: style.css loadavg-exempt
1267 **
1268 ** Return the style sheet. The style sheet is assemblied from
1269 ** multiple sources, in order:
1270 **
1271 ** (1) The built-in "default.css" style sheet containing basic defaults.
1272 **
1273 ** (2) The page-specific style sheet taken from the built-in
1274 ** called "PAGENAME.css" where PAGENAME is the value of the name=
1275 ** or page= query parameters. If neither name= nor page= exist,
1276 ** then this section is a no-op.
1277 **
1278 ** (3) The skin-specific "css.txt" file, if there one.
1279 **
1280 ** All of (1), (2), and (3) above (or as many as exist) are concatenated.
1281 ** The result is then run through TH1 with the following variables set:
1282 **
1283
--- src/style.c
+++ src/style.c
@@ -44,15 +44,16 @@
44 const char *zLink; /* Jump to this link when button is pressed */
45 } aSubmenu[30];
46 static int nSubmenu = 0; /* Number of buttons */
47 static struct SubmenuCtrl {
48 const char *zName; /* Form query parameter */
49 const char *zLabel; /* Label */
50 unsigned char eType; /* FF_ENTRY, FF_MULTI, FF_CHECKBOX */
51 unsigned char eVisible; /* STYLE_NORMAL or STYLE_DISABLED */
52 short int iSize; /* Width for FF_ENTRY. Count for FF_MULTI */
53 const char *const *azChoice; /* value/display pairs for FF_MULTI */
54 const char *zTrue; /* FF_BINARY label when true */
55 const char *zFalse; /* FF_BINARY label when false */
56 const char *zJS; /* Javascript to run on toggle */
57 } aSubmenuCtrl[20];
58 static int nSubmenuCtrl = 0;
59 #define FF_ENTRY 1 /* Text entry box */
@@ -307,30 +308,34 @@
308 aSubmenuCtrl[nSubmenuCtrl].eType = FF_CHECKBOX;
309 nSubmenuCtrl++;
310 }
311 void style_submenu_binary(
312 const char *zName, /* Query parameter name */
313 const char *zLabel, /* Label of parameter */
314 const char *zTrue, /* Label to show when parameter is true */
315 const char *zFalse, /* Label to show when the parameter is false */
316 int eVisible /* Visible or disabled */
317 ){
318 assert( nSubmenuCtrl < count(aSubmenuCtrl) );
319 aSubmenuCtrl[nSubmenuCtrl].zName = zName;
320 aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel;
321 aSubmenuCtrl[nSubmenuCtrl].zTrue = zTrue;
322 aSubmenuCtrl[nSubmenuCtrl].zFalse = zFalse;
323 aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
324 aSubmenuCtrl[nSubmenuCtrl].eType = FF_BINARY;
325 nSubmenuCtrl++;
326 }
327 void style_submenu_multichoice(
328 const char *zName, /* Query parameter name */
329 const char *zLabel, /* Label of parameter */
330 int nChoice, /* Number of options */
331 const char *const *azChoice, /* value/display pairs. 2*nChoice entries */
332 int eVisible /* Visible or disabled */
333 ){
334 assert( nSubmenuCtrl < count(aSubmenuCtrl) );
335 aSubmenuCtrl[nSubmenuCtrl].zName = zName;
336 aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel;
337 aSubmenuCtrl[nSubmenuCtrl].iSize = nChoice;
338 aSubmenuCtrl[nSubmenuCtrl].azChoice = azChoice;
339 aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible;
340 aSubmenuCtrl[nSubmenuCtrl].eType = FF_MULTI;
341 nSubmenuCtrl++;
@@ -645,11 +650,11 @@
650 ** Default HTML page header text through <body>. If the repository-specific
651 ** header template lacks a <body> tag, then all of the following is
652 ** prepended.
653 */
654 static const char zDfltHeader[] =
655 @ <html lang="en">
656 @ <head>
657 @ <meta charset="UTF-8">
658 @ <base href="$baseurl/$current_page" />
659 @ <meta http-equiv="Content-Security-Policy" content="$default_csp" />
660 @ <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -987,11 +992,11 @@
992 if( nSubmenuCtrl ){
993 @ <form id='f01' method='GET' action='%R/%s(g.zPath)'>
994 @ <input type='hidden' name='udc' value='1'>
995 cgi_tag_query_parameter("udc");
996 }
997 @ <nav id="submenu" class="submenu" title="Submenu">
998 if( nSubmenu>0 ){
999 qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare);
1000 for(i=0; i<nSubmenu; i++){
1001 struct Submenu *p = &aSubmenu[i];
1002 style_derive_classname(p->zLabel, zClass, sizeof zClass);
@@ -1018,29 +1023,27 @@
1023 }
1024 style_derive_classname(zQPN, zClass+4, sizeof(zClass)-4);
1025 switch( aSubmenuCtrl[i].eType ){
1026 case FF_ENTRY:
1027 @ <span class='submenuctrl%s(zXtraClass) %s(zClass)'>\
1028 @ &nbsp;<label>%h(aSubmenuCtrl[i].zLabel):&nbsp;\
1029 @ <input type='text' name='%s(zQPN)' value='%h(PD(zQPN, ""))' \
1030 if( aSubmenuCtrl[i].iSize<0 ){
1031 @ size='%d(-aSubmenuCtrl[i].iSize)' \
1032 }else if( aSubmenuCtrl[i].iSize>0 ){
1033 @ size='%d(aSubmenuCtrl[i].iSize)' \
1034 @ maxlength='%d(aSubmenuCtrl[i].iSize)' \
1035 }
1036 @ id='submenuctrl-%d(i)'%s(zDisabled)></label></span>
1037 break;
1038 case FF_MULTI: {
1039 int j;
1040 const char *zVal = P(zQPN);
1041 if( zXtraClass[0] ){
1042 @ <span class='%s(zXtraClass+1) %s(zClass)'>
1043 }
1044 @ &nbsp;<label>%h(aSubmenuCtrl[i].zLabel):&nbsp;\
 
 
1045 @ <select class='submenuctrl %s(zClass)' size='1' name='%s(zQPN)' \
1046 @ id='submenuctrl-%d(i)'%s(zDisabled)>
1047 for(j=0; j<aSubmenuCtrl[i].iSize*2; j+=2){
1048 const char *zQPV = aSubmenuCtrl[i].azChoice[j];
1049 @ <option value='%h(zQPV)'\
@@ -1048,30 +1051,33 @@
1051 @ selected\
1052 }
1053 @ >%h(aSubmenuCtrl[i].azChoice[j+1])</option>
1054 }
1055 @ </select>
1056 @ </label>
1057 if( zXtraClass[0] ){
1058 @ </span>
1059 }
1060 break;
1061 }
1062 case FF_BINARY: {
1063 int isTrue = PB(zQPN);
1064 @ <label for='submenuctrl-%d(i)'>%h(aSubmenuCtrl[i].zLabel):&nbsp;
1065 @ <select class='submenuctrl%s(zXtraClass)' size='1' \
1066 @ name='%s(zQPN)' id='submenuctrl-%d(i)'%s(zDisabled)>
1067 @ <option value='1'\
1068 if( isTrue ){
1069 @ selected\
1070 }
1071 @ >%h(aSubmenuCtrl[i].zTrue)</option>
1072 @ <option value='0'\
1073 if( !isTrue ){
1074 @ selected\
1075 }
1076 @ >%h(aSubmenuCtrl[i].zFalse)</option>
1077 @ </select>
1078 @ </label>
1079 break;
1080 }
1081 case FF_CHECKBOX: {
1082 @ <label class='submenuctrl submenuckbox%s(zXtraClass) %s(zClass)'>\
1083 @ <input type='checkbox' name='%s(zQPN)' id='submenuctrl-%d(i)' \
@@ -1086,11 +1092,11 @@
1092 @ %h(aSubmenuCtrl[i].zLabel)</label>
1093 break;
1094 }
1095 }
1096 }
1097 @ </nav>
1098 if( nSubmenuCtrl ){
1099 cgi_query_parameters_to_hidden();
1100 cgi_tag_query_parameter(0);
1101 @ </form>
1102 builtin_request_js("menu.js");
@@ -1107,17 +1113,17 @@
1113 @ <div class="adunit_banner">
1114 cgi_append_content(zAd, -1);
1115 @ </div>
1116 }
1117
1118 @ <main class="content"><span id="debugMsg"></span>
1119 cgi_destination(CGI_BODY);
1120
1121 if( sideboxUsed ){
1122 @ <div class="endContent"></div>
1123 }
1124 @ </main>
1125
1126 /* Put the footer at the bottom of the page. */
1127 zFooter = skin_get("footer");
1128 if( sqlite3_strlike("%</body>%", zFooter, 0)==0 ){
1129 style_load_all_js_files();
@@ -1265,18 +1271,15 @@
1271 /*
1272 ** WEBPAGE: style.css loadavg-exempt
1273 **
1274 ** Return the style sheet. The style sheet is assemblied from
1275 ** multiple sources, in order:
 
1276 ** (1) The built-in "default.css" style sheet containing basic defaults.
 
1277 ** (2) The page-specific style sheet taken from the built-in
1278 ** called "PAGENAME.css" where PAGENAME is the value of the name=
1279 ** or page= query parameters. If neither name= nor page= exist,
1280 ** then this section is a no-op.
 
1281 ** (3) The skin-specific "css.txt" file, if there one.
1282 **
1283 ** All of (1), (2), and (3) above (or as many as exist) are concatenated.
1284 ** The result is then run through TH1 with the following variables set:
1285 **
1286
--- src/style.chat.css
+++ src/style.chat.css
@@ -199,11 +199,11 @@
199199
}
200200
body.chat #chat-messages-wrapper.loading > * {
201201
/* An attempt at reducing flicker when loading lots of messages. */
202202
visibility: hidden;
203203
}
204
-body.chat div.content {
204
+body.chat main.content {
205205
margin: 0;
206206
padding: 0;
207207
display: flex;
208208
flex-direction: column-reverse;
209209
/* ^^^^ In order to get good automatic scrolling of new messages on
210210
--- src/style.chat.css
+++ src/style.chat.css
@@ -199,11 +199,11 @@
199 }
200 body.chat #chat-messages-wrapper.loading > * {
201 /* An attempt at reducing flicker when loading lots of messages. */
202 visibility: hidden;
203 }
204 body.chat div.content {
205 margin: 0;
206 padding: 0;
207 display: flex;
208 flex-direction: column-reverse;
209 /* ^^^^ In order to get good automatic scrolling of new messages on
210
--- src/style.chat.css
+++ src/style.chat.css
@@ -199,11 +199,11 @@
199 }
200 body.chat #chat-messages-wrapper.loading > * {
201 /* An attempt at reducing flicker when loading lots of messages. */
202 visibility: hidden;
203 }
204 body.chat main.content {
205 margin: 0;
206 padding: 0;
207 display: flex;
208 flex-direction: column-reverse;
209 /* ^^^^ In order to get good automatic scrolling of new messages on
210
-24
--- src/sync.c
+++ src/sync.c
@@ -319,11 +319,10 @@
319319
** If URL is not specified, then the URL from the most recent clone, push,
320320
** pull, remote, or sync command is used. See "fossil help clone" for
321321
** details on the URL formats.
322322
**
323323
** Options:
324
-**
325324
** --all Pull from all remotes, not just the default
326325
** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
327326
** if required by the remote website
328327
** --from-parent-project Pull content from the parent project
329328
** --ipv4 Use only IPv4, not IPv6
@@ -374,11 +373,10 @@
374373
** If URL is not specified, then the URL from the most recent clone, push,
375374
** pull, remote, or sync command is used. See "fossil help clone" for
376375
** details on the URL formats.
377376
**
378377
** Options:
379
-**
380378
** --all Push to all remotes, not just the default
381379
** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
382380
** if required by the remote website
383381
** --ipv4 Use only IPv4, not IPv6
384382
** --no-http-compression Do not compress HTTP traffic
@@ -423,11 +421,10 @@
423421
** If URL is not specified, then the URL from the most recent clone, push,
424422
** pull, remote, or sync command is used. See "fossil help clone" for
425423
** details on the URL formats.
426424
**
427425
** Options:
428
-**
429426
** --all Sync with all remotes, not just the default
430427
** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
431428
** if required by the remote website
432429
** --ipv4 Use only IPv4, not IPv6
433430
** --no-http-compression Do not compress HTTP traffic
@@ -485,49 +482,35 @@
485482
** View or modify the URLs of remote repositories used for syncing.
486483
** The "default" remote is specially named by Fossil and corresponds to
487484
** the URL used in the most recent "sync", "push", "pull", "clone", or
488485
** similar command. As such, the default remote can be updated by
489486
** Fossil with each sync command. Other named remotes are persistent.
490
-**
491487
** > fossil remote
492
-**
493488
** With no arguments, this command shows the current default remote
494489
** URL. If there is no default, it shows "off".
495
-**
496490
** > fossil remote add NAME URL
497
-**
498491
** Add a new named URL. Afterwards, NAME can be used as a short
499492
** symbolic name for URL in contexts where a URL is required. The
500493
** URL argument can be "default" or a prior symbolic name to make
501494
** a copy of an existing URL under the new NAME. The "default"
502495
** remote cannot be defined with this subcommand; instead,
503496
** use 'fossil remote REF' as documented below.
504
-**
505497
** > fossil remote config-data
506
-**
507498
** DEBUG USE ONLY - Show the name and value of every CONFIG table
508499
** entry in the repository that is associated with the remote URL store.
509500
** Passwords are obscured in the output.
510
-**
511501
** > fossil remote delete NAME
512
-**
513502
** Delete a named URL previously created by the "add" subcommand.
514
-**
515503
** > fossil remote hyperlink ?FILENAME? ?LINENUM? ?LINENUM?
516
-**
517504
** Print a URL that will access the current checkout on the remote
518505
** repository. Or if the FILENAME argument is included, print the
519506
** URL to access that particular file within the current checkout.
520507
** If one or two linenumber arguments are provided after the filename,
521508
** then the URL is for the line or range of lines specified.
522
-**
523509
** > fossil remote list|ls
524
-**
525510
** Show all remote repository URLs.
526
-**
527511
** > fossil remote off
528
-**
529512
** Forget the default URL. This disables autosync.
530513
**
531514
** This is a convenient way to enter "airplane mode". To enter
532515
** airplane mode, first save the current default URL, then turn the
533516
** default off. Perhaps like this:
@@ -536,28 +519,22 @@
536519
** fossil remote off
537520
**
538521
** To exit airplane mode and turn autosync back on again:
539522
**
540523
** fossil remote main
541
-**
542524
** > fossil remote scrub
543
-**
544525
** Forget any saved passwords for remote repositories, but continue
545526
** to remember the URLs themselves. You will be prompted for the
546527
** password the next time it is needed.
547
-**
548528
** > fossil remote ui ?FILENAME? ?LINENUM? ?LINENUM?
549
-**
550529
** Bring up a web browser pointing at the remote repository, and
551530
** specifically to the page that describes the current checkout
552531
** on that remote repository. Or if FILENAME and/or LINENUM arguments
553532
** are provided, to the specific file and range of lines. This
554533
** command is similar to "fossil remote hyperlink" except that instead
555534
** of printing the URL, it passes the URL off to the web browser.
556
-**
557535
** > fossil remote REF
558
-**
559536
** Make REF the new default URL, replacing the prior default.
560537
** REF may be a URL or a NAME from a prior "add".
561538
*/
562539
void remote_url_cmd(void){
563540
char *zUrl, *zArg;
@@ -820,11 +797,10 @@
820797
** Only the main repository database is backed up by this command. The
821798
** open checkout file (if any) is not saved. Nor is the global configuration
822799
** database.
823800
**
824801
** Options:
825
-**
826802
** --overwrite OK to overwrite an existing file
827803
** -R NAME Filename of the repository to backup
828804
*/
829805
void backup_cmd(void){
830806
char *zDest;
831807
--- src/sync.c
+++ src/sync.c
@@ -319,11 +319,10 @@
319 ** If URL is not specified, then the URL from the most recent clone, push,
320 ** pull, remote, or sync command is used. See "fossil help clone" for
321 ** details on the URL formats.
322 **
323 ** Options:
324 **
325 ** --all Pull from all remotes, not just the default
326 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
327 ** if required by the remote website
328 ** --from-parent-project Pull content from the parent project
329 ** --ipv4 Use only IPv4, not IPv6
@@ -374,11 +373,10 @@
374 ** If URL is not specified, then the URL from the most recent clone, push,
375 ** pull, remote, or sync command is used. See "fossil help clone" for
376 ** details on the URL formats.
377 **
378 ** Options:
379 **
380 ** --all Push to all remotes, not just the default
381 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
382 ** if required by the remote website
383 ** --ipv4 Use only IPv4, not IPv6
384 ** --no-http-compression Do not compress HTTP traffic
@@ -423,11 +421,10 @@
423 ** If URL is not specified, then the URL from the most recent clone, push,
424 ** pull, remote, or sync command is used. See "fossil help clone" for
425 ** details on the URL formats.
426 **
427 ** Options:
428 **
429 ** --all Sync with all remotes, not just the default
430 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
431 ** if required by the remote website
432 ** --ipv4 Use only IPv4, not IPv6
433 ** --no-http-compression Do not compress HTTP traffic
@@ -485,49 +482,35 @@
485 ** View or modify the URLs of remote repositories used for syncing.
486 ** The "default" remote is specially named by Fossil and corresponds to
487 ** the URL used in the most recent "sync", "push", "pull", "clone", or
488 ** similar command. As such, the default remote can be updated by
489 ** Fossil with each sync command. Other named remotes are persistent.
490 **
491 ** > fossil remote
492 **
493 ** With no arguments, this command shows the current default remote
494 ** URL. If there is no default, it shows "off".
495 **
496 ** > fossil remote add NAME URL
497 **
498 ** Add a new named URL. Afterwards, NAME can be used as a short
499 ** symbolic name for URL in contexts where a URL is required. The
500 ** URL argument can be "default" or a prior symbolic name to make
501 ** a copy of an existing URL under the new NAME. The "default"
502 ** remote cannot be defined with this subcommand; instead,
503 ** use 'fossil remote REF' as documented below.
504 **
505 ** > fossil remote config-data
506 **
507 ** DEBUG USE ONLY - Show the name and value of every CONFIG table
508 ** entry in the repository that is associated with the remote URL store.
509 ** Passwords are obscured in the output.
510 **
511 ** > fossil remote delete NAME
512 **
513 ** Delete a named URL previously created by the "add" subcommand.
514 **
515 ** > fossil remote hyperlink ?FILENAME? ?LINENUM? ?LINENUM?
516 **
517 ** Print a URL that will access the current checkout on the remote
518 ** repository. Or if the FILENAME argument is included, print the
519 ** URL to access that particular file within the current checkout.
520 ** If one or two linenumber arguments are provided after the filename,
521 ** then the URL is for the line or range of lines specified.
522 **
523 ** > fossil remote list|ls
524 **
525 ** Show all remote repository URLs.
526 **
527 ** > fossil remote off
528 **
529 ** Forget the default URL. This disables autosync.
530 **
531 ** This is a convenient way to enter "airplane mode". To enter
532 ** airplane mode, first save the current default URL, then turn the
533 ** default off. Perhaps like this:
@@ -536,28 +519,22 @@
536 ** fossil remote off
537 **
538 ** To exit airplane mode and turn autosync back on again:
539 **
540 ** fossil remote main
541 **
542 ** > fossil remote scrub
543 **
544 ** Forget any saved passwords for remote repositories, but continue
545 ** to remember the URLs themselves. You will be prompted for the
546 ** password the next time it is needed.
547 **
548 ** > fossil remote ui ?FILENAME? ?LINENUM? ?LINENUM?
549 **
550 ** Bring up a web browser pointing at the remote repository, and
551 ** specifically to the page that describes the current checkout
552 ** on that remote repository. Or if FILENAME and/or LINENUM arguments
553 ** are provided, to the specific file and range of lines. This
554 ** command is similar to "fossil remote hyperlink" except that instead
555 ** of printing the URL, it passes the URL off to the web browser.
556 **
557 ** > fossil remote REF
558 **
559 ** Make REF the new default URL, replacing the prior default.
560 ** REF may be a URL or a NAME from a prior "add".
561 */
562 void remote_url_cmd(void){
563 char *zUrl, *zArg;
@@ -820,11 +797,10 @@
820 ** Only the main repository database is backed up by this command. The
821 ** open checkout file (if any) is not saved. Nor is the global configuration
822 ** database.
823 **
824 ** Options:
825 **
826 ** --overwrite OK to overwrite an existing file
827 ** -R NAME Filename of the repository to backup
828 */
829 void backup_cmd(void){
830 char *zDest;
831
--- src/sync.c
+++ src/sync.c
@@ -319,11 +319,10 @@
319 ** If URL is not specified, then the URL from the most recent clone, push,
320 ** pull, remote, or sync command is used. See "fossil help clone" for
321 ** details on the URL formats.
322 **
323 ** Options:
 
324 ** --all Pull from all remotes, not just the default
325 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
326 ** if required by the remote website
327 ** --from-parent-project Pull content from the parent project
328 ** --ipv4 Use only IPv4, not IPv6
@@ -374,11 +373,10 @@
373 ** If URL is not specified, then the URL from the most recent clone, push,
374 ** pull, remote, or sync command is used. See "fossil help clone" for
375 ** details on the URL formats.
376 **
377 ** Options:
 
378 ** --all Push to all remotes, not just the default
379 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
380 ** if required by the remote website
381 ** --ipv4 Use only IPv4, not IPv6
382 ** --no-http-compression Do not compress HTTP traffic
@@ -423,11 +421,10 @@
421 ** If URL is not specified, then the URL from the most recent clone, push,
422 ** pull, remote, or sync command is used. See "fossil help clone" for
423 ** details on the URL formats.
424 **
425 ** Options:
 
426 ** --all Sync with all remotes, not just the default
427 ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol,
428 ** if required by the remote website
429 ** --ipv4 Use only IPv4, not IPv6
430 ** --no-http-compression Do not compress HTTP traffic
@@ -485,49 +482,35 @@
482 ** View or modify the URLs of remote repositories used for syncing.
483 ** The "default" remote is specially named by Fossil and corresponds to
484 ** the URL used in the most recent "sync", "push", "pull", "clone", or
485 ** similar command. As such, the default remote can be updated by
486 ** Fossil with each sync command. Other named remotes are persistent.
 
487 ** > fossil remote
 
488 ** With no arguments, this command shows the current default remote
489 ** URL. If there is no default, it shows "off".
 
490 ** > fossil remote add NAME URL
 
491 ** Add a new named URL. Afterwards, NAME can be used as a short
492 ** symbolic name for URL in contexts where a URL is required. The
493 ** URL argument can be "default" or a prior symbolic name to make
494 ** a copy of an existing URL under the new NAME. The "default"
495 ** remote cannot be defined with this subcommand; instead,
496 ** use 'fossil remote REF' as documented below.
 
497 ** > fossil remote config-data
 
498 ** DEBUG USE ONLY - Show the name and value of every CONFIG table
499 ** entry in the repository that is associated with the remote URL store.
500 ** Passwords are obscured in the output.
 
501 ** > fossil remote delete NAME
 
502 ** Delete a named URL previously created by the "add" subcommand.
 
503 ** > fossil remote hyperlink ?FILENAME? ?LINENUM? ?LINENUM?
 
504 ** Print a URL that will access the current checkout on the remote
505 ** repository. Or if the FILENAME argument is included, print the
506 ** URL to access that particular file within the current checkout.
507 ** If one or two linenumber arguments are provided after the filename,
508 ** then the URL is for the line or range of lines specified.
 
509 ** > fossil remote list|ls
 
510 ** Show all remote repository URLs.
 
511 ** > fossil remote off
 
512 ** Forget the default URL. This disables autosync.
513 **
514 ** This is a convenient way to enter "airplane mode". To enter
515 ** airplane mode, first save the current default URL, then turn the
516 ** default off. Perhaps like this:
@@ -536,28 +519,22 @@
519 ** fossil remote off
520 **
521 ** To exit airplane mode and turn autosync back on again:
522 **
523 ** fossil remote main
 
524 ** > fossil remote scrub
 
525 ** Forget any saved passwords for remote repositories, but continue
526 ** to remember the URLs themselves. You will be prompted for the
527 ** password the next time it is needed.
 
528 ** > fossil remote ui ?FILENAME? ?LINENUM? ?LINENUM?
 
529 ** Bring up a web browser pointing at the remote repository, and
530 ** specifically to the page that describes the current checkout
531 ** on that remote repository. Or if FILENAME and/or LINENUM arguments
532 ** are provided, to the specific file and range of lines. This
533 ** command is similar to "fossil remote hyperlink" except that instead
534 ** of printing the URL, it passes the URL off to the web browser.
 
535 ** > fossil remote REF
 
536 ** Make REF the new default URL, replacing the prior default.
537 ** REF may be a URL or a NAME from a prior "add".
538 */
539 void remote_url_cmd(void){
540 char *zUrl, *zArg;
@@ -820,11 +797,10 @@
797 ** Only the main repository database is backed up by this command. The
798 ** open checkout file (if any) is not saved. Nor is the global configuration
799 ** database.
800 **
801 ** Options:
 
802 ** --overwrite OK to overwrite an existing file
803 ** -R NAME Filename of the repository to backup
804 */
805 void backup_cmd(void){
806 char *zDest;
807
-10
--- src/tag.c
+++ src/tag.c
@@ -391,13 +391,11 @@
391391
** COMMAND: tag
392392
**
393393
** Usage: %fossil tag SUBCOMMAND ...
394394
**
395395
** Run various subcommands to control tags and properties.
396
-**
397396
** > fossil tag add ?OPTIONS? TAGNAME ARTIFACT-ID ?VALUE?
398
-**
399397
** Add a new tag or property to an artifact referenced by
400398
** ARTIFACT-ID. For checkins, the tag will be usable instead
401399
** of a CHECK-IN in commands such as update and merge. If the
402400
** --propagate flag is present and ARTIFACT-ID refers to a
403401
** wiki page, forum post, technote, or check-in, the tag
@@ -417,13 +415,11 @@
417415
** the form 'YYYY-MMM-DD HH:MM:SS'.
418416
**
419417
** Note that fossil uses some tag prefixes internally and this
420418
** command will reject tags with these prefixes to avoid
421419
** causing problems or confusion: "wiki-", "tkt-", "event-".
422
-**
423420
** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
424
-**
425421
** Remove the tag TAGNAME from the artifact referenced by
426422
** ARTIFACT-ID, and also remove the propagation of the tag to
427423
** any descendants. Use the the -n|--dry-run option to see
428424
** what would have happened. Certain tag name prefixes are
429425
** forbidden, as documented for the 'add' subcommand.
@@ -433,13 +429,11 @@
433429
** non-CHECK-IN artifacts.
434430
** --date-override DATETIME Set date and time deleted.
435431
** --user-override USER Name USER when deleting the tag.
436432
** -n|--dry-run Display the control artifact, but do
437433
** not insert it into the database.
438
-**
439434
** > fossil tag find ?OPTIONS? TAGNAME
440
-**
441435
** List all objects that use TAGNAME.
442436
**
443437
** Options:
444438
** --raw Interprets tag as a raw name instead of a
445439
** branch name and matches any type of artifact.
@@ -448,13 +442,11 @@
448442
** -t|--type TYPE One of: ci (check-in), w (wiki),
449443
** e (event/technote), f (forum post),
450444
** t (ticket). Default is all types. Ignored
451445
** if --raw is used.
452446
** -n|--limit N Limit to N results.
453
-**
454447
** > fossil tag list|ls ?OPTIONS? ?ARTIFACT-ID?
455
-**
456448
** List all tags or, if ARTIFACT-ID is supplied, all tags and
457449
** their values for that artifact. The tagtype option accepts
458450
** one of: propagated, singleton, cancel. For historical
459451
** scripting compatibility, the internal tag types "wiki-",
460452
** "tkt-", and "event-" (technote) are elided by default
@@ -747,11 +739,10 @@
747739
** two or more separate repositories. You should never need to reparent
748740
** during normal operations.
749741
**
750742
** Reparenting is accomplished by adding a parent tag. So to undo the
751743
** reparenting operation, simply delete the tag.
752
-**
753744
** --test Make database entries but do not add the tag artifact.
754745
** So the reparent operation will be undone by the next
755746
** "fossil rebuild" command.
756747
** -n|--dry-run Print the tag that would have been created but do not
757748
** actually change the database in any way.
@@ -841,11 +832,10 @@
841832
**
842833
** Render a timeline with all check-ins that contain non-propagating
843834
** symbolic tags.
844835
**
845836
** Query parameters:
846
-**
847837
** ng No graph
848838
** nohidden Hide check-ins with "hidden" tag
849839
** onlyhidden Show only check-ins with "hidden" tag
850840
** brbg Background color by branch name
851841
** ubg Background color by user name
852842
--- src/tag.c
+++ src/tag.c
@@ -391,13 +391,11 @@
391 ** COMMAND: tag
392 **
393 ** Usage: %fossil tag SUBCOMMAND ...
394 **
395 ** Run various subcommands to control tags and properties.
396 **
397 ** > fossil tag add ?OPTIONS? TAGNAME ARTIFACT-ID ?VALUE?
398 **
399 ** Add a new tag or property to an artifact referenced by
400 ** ARTIFACT-ID. For checkins, the tag will be usable instead
401 ** of a CHECK-IN in commands such as update and merge. If the
402 ** --propagate flag is present and ARTIFACT-ID refers to a
403 ** wiki page, forum post, technote, or check-in, the tag
@@ -417,13 +415,11 @@
417 ** the form 'YYYY-MMM-DD HH:MM:SS'.
418 **
419 ** Note that fossil uses some tag prefixes internally and this
420 ** command will reject tags with these prefixes to avoid
421 ** causing problems or confusion: "wiki-", "tkt-", "event-".
422 **
423 ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
424 **
425 ** Remove the tag TAGNAME from the artifact referenced by
426 ** ARTIFACT-ID, and also remove the propagation of the tag to
427 ** any descendants. Use the the -n|--dry-run option to see
428 ** what would have happened. Certain tag name prefixes are
429 ** forbidden, as documented for the 'add' subcommand.
@@ -433,13 +429,11 @@
433 ** non-CHECK-IN artifacts.
434 ** --date-override DATETIME Set date and time deleted.
435 ** --user-override USER Name USER when deleting the tag.
436 ** -n|--dry-run Display the control artifact, but do
437 ** not insert it into the database.
438 **
439 ** > fossil tag find ?OPTIONS? TAGNAME
440 **
441 ** List all objects that use TAGNAME.
442 **
443 ** Options:
444 ** --raw Interprets tag as a raw name instead of a
445 ** branch name and matches any type of artifact.
@@ -448,13 +442,11 @@
448 ** -t|--type TYPE One of: ci (check-in), w (wiki),
449 ** e (event/technote), f (forum post),
450 ** t (ticket). Default is all types. Ignored
451 ** if --raw is used.
452 ** -n|--limit N Limit to N results.
453 **
454 ** > fossil tag list|ls ?OPTIONS? ?ARTIFACT-ID?
455 **
456 ** List all tags or, if ARTIFACT-ID is supplied, all tags and
457 ** their values for that artifact. The tagtype option accepts
458 ** one of: propagated, singleton, cancel. For historical
459 ** scripting compatibility, the internal tag types "wiki-",
460 ** "tkt-", and "event-" (technote) are elided by default
@@ -747,11 +739,10 @@
747 ** two or more separate repositories. You should never need to reparent
748 ** during normal operations.
749 **
750 ** Reparenting is accomplished by adding a parent tag. So to undo the
751 ** reparenting operation, simply delete the tag.
752 **
753 ** --test Make database entries but do not add the tag artifact.
754 ** So the reparent operation will be undone by the next
755 ** "fossil rebuild" command.
756 ** -n|--dry-run Print the tag that would have been created but do not
757 ** actually change the database in any way.
@@ -841,11 +832,10 @@
841 **
842 ** Render a timeline with all check-ins that contain non-propagating
843 ** symbolic tags.
844 **
845 ** Query parameters:
846 **
847 ** ng No graph
848 ** nohidden Hide check-ins with "hidden" tag
849 ** onlyhidden Show only check-ins with "hidden" tag
850 ** brbg Background color by branch name
851 ** ubg Background color by user name
852
--- src/tag.c
+++ src/tag.c
@@ -391,13 +391,11 @@
391 ** COMMAND: tag
392 **
393 ** Usage: %fossil tag SUBCOMMAND ...
394 **
395 ** Run various subcommands to control tags and properties.
 
396 ** > fossil tag add ?OPTIONS? TAGNAME ARTIFACT-ID ?VALUE?
 
397 ** Add a new tag or property to an artifact referenced by
398 ** ARTIFACT-ID. For checkins, the tag will be usable instead
399 ** of a CHECK-IN in commands such as update and merge. If the
400 ** --propagate flag is present and ARTIFACT-ID refers to a
401 ** wiki page, forum post, technote, or check-in, the tag
@@ -417,13 +415,11 @@
415 ** the form 'YYYY-MMM-DD HH:MM:SS'.
416 **
417 ** Note that fossil uses some tag prefixes internally and this
418 ** command will reject tags with these prefixes to avoid
419 ** causing problems or confusion: "wiki-", "tkt-", "event-".
 
420 ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID
 
421 ** Remove the tag TAGNAME from the artifact referenced by
422 ** ARTIFACT-ID, and also remove the propagation of the tag to
423 ** any descendants. Use the the -n|--dry-run option to see
424 ** what would have happened. Certain tag name prefixes are
425 ** forbidden, as documented for the 'add' subcommand.
@@ -433,13 +429,11 @@
429 ** non-CHECK-IN artifacts.
430 ** --date-override DATETIME Set date and time deleted.
431 ** --user-override USER Name USER when deleting the tag.
432 ** -n|--dry-run Display the control artifact, but do
433 ** not insert it into the database.
 
434 ** > fossil tag find ?OPTIONS? TAGNAME
 
435 ** List all objects that use TAGNAME.
436 **
437 ** Options:
438 ** --raw Interprets tag as a raw name instead of a
439 ** branch name and matches any type of artifact.
@@ -448,13 +442,11 @@
442 ** -t|--type TYPE One of: ci (check-in), w (wiki),
443 ** e (event/technote), f (forum post),
444 ** t (ticket). Default is all types. Ignored
445 ** if --raw is used.
446 ** -n|--limit N Limit to N results.
 
447 ** > fossil tag list|ls ?OPTIONS? ?ARTIFACT-ID?
 
448 ** List all tags or, if ARTIFACT-ID is supplied, all tags and
449 ** their values for that artifact. The tagtype option accepts
450 ** one of: propagated, singleton, cancel. For historical
451 ** scripting compatibility, the internal tag types "wiki-",
452 ** "tkt-", and "event-" (technote) are elided by default
@@ -747,11 +739,10 @@
739 ** two or more separate repositories. You should never need to reparent
740 ** during normal operations.
741 **
742 ** Reparenting is accomplished by adding a parent tag. So to undo the
743 ** reparenting operation, simply delete the tag.
 
744 ** --test Make database entries but do not add the tag artifact.
745 ** So the reparent operation will be undone by the next
746 ** "fossil rebuild" command.
747 ** -n|--dry-run Print the tag that would have been created but do not
748 ** actually change the database in any way.
@@ -841,11 +832,10 @@
832 **
833 ** Render a timeline with all check-ins that contain non-propagating
834 ** symbolic tags.
835 **
836 ** Query parameters:
 
837 ** ng No graph
838 ** nohidden Hide check-ins with "hidden" tag
839 ** onlyhidden Show only check-ins with "hidden" tag
840 ** brbg Background color by branch name
841 ** ubg Background color by user name
842
-4
--- src/tar.c
+++ src/tar.c
@@ -719,28 +719,24 @@
719719
** /tarball?r=release&name=xyz.tar.gz
720720
** /tarball/xyz.tar.gz?r=release
721721
** /tarball?name=release/xyz.tar.gz
722722
**
723723
** Query parameters:
724
-**
725724
** name=NAME[.tar.gz] The base name of the output file. The default
726725
** value is a configuration parameter in the project
727726
** settings. A prefix of the name, omitting the
728727
** extension, is used as the top-most directory name.
729
-**
730728
** r=TAG The check-in that is turned into a compressed tarball.
731729
** Defaults to "trunk". This query parameter used to
732730
** be called "uuid" and "uuid" is still accepted for
733731
** backwards compatibility. If the name= query parameter
734732
** contains one "/" character then the part before the /
735733
** is the TAG and the part after the / is the true name.
736734
** If no TAG is specified by any of the above means, then
737735
** "trunk" is used as the default.
738
-**
739736
** in=PATTERN Only include files that match the comma-separate
740737
** list of GLOB patterns in PATTERN, as with ex=
741
-**
742738
** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
743739
** comma-separated list of GLOB patterns, where each
744740
** pattern can optionally be quoted using ".." or '..'.
745741
** Any file matching both ex= and in= is excluded.
746742
*/
747743
--- src/tar.c
+++ src/tar.c
@@ -719,28 +719,24 @@
719 ** /tarball?r=release&name=xyz.tar.gz
720 ** /tarball/xyz.tar.gz?r=release
721 ** /tarball?name=release/xyz.tar.gz
722 **
723 ** Query parameters:
724 **
725 ** name=NAME[.tar.gz] The base name of the output file. The default
726 ** value is a configuration parameter in the project
727 ** settings. A prefix of the name, omitting the
728 ** extension, is used as the top-most directory name.
729 **
730 ** r=TAG The check-in that is turned into a compressed tarball.
731 ** Defaults to "trunk". This query parameter used to
732 ** be called "uuid" and "uuid" is still accepted for
733 ** backwards compatibility. If the name= query parameter
734 ** contains one "/" character then the part before the /
735 ** is the TAG and the part after the / is the true name.
736 ** If no TAG is specified by any of the above means, then
737 ** "trunk" is used as the default.
738 **
739 ** in=PATTERN Only include files that match the comma-separate
740 ** list of GLOB patterns in PATTERN, as with ex=
741 **
742 ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
743 ** comma-separated list of GLOB patterns, where each
744 ** pattern can optionally be quoted using ".." or '..'.
745 ** Any file matching both ex= and in= is excluded.
746 */
747
--- src/tar.c
+++ src/tar.c
@@ -719,28 +719,24 @@
719 ** /tarball?r=release&name=xyz.tar.gz
720 ** /tarball/xyz.tar.gz?r=release
721 ** /tarball?name=release/xyz.tar.gz
722 **
723 ** Query parameters:
 
724 ** name=NAME[.tar.gz] The base name of the output file. The default
725 ** value is a configuration parameter in the project
726 ** settings. A prefix of the name, omitting the
727 ** extension, is used as the top-most directory name.
 
728 ** r=TAG The check-in that is turned into a compressed tarball.
729 ** Defaults to "trunk". This query parameter used to
730 ** be called "uuid" and "uuid" is still accepted for
731 ** backwards compatibility. If the name= query parameter
732 ** contains one "/" character then the part before the /
733 ** is the TAG and the part after the / is the true name.
734 ** If no TAG is specified by any of the above means, then
735 ** "trunk" is used as the default.
 
736 ** in=PATTERN Only include files that match the comma-separate
737 ** list of GLOB patterns in PATTERN, as with ex=
 
738 ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
739 ** comma-separated list of GLOB patterns, where each
740 ** pattern can optionally be quoted using ".." or '..'.
741 ** Any file matching both ex= and in= is excluded.
742 */
743
--- src/th_main.c
+++ src/th_main.c
@@ -2906,11 +2906,10 @@
29062906
** Read the content of the file named "FILE" as if it were a header or
29072907
** footer or ticket rendering script, evaluate it, and show the results
29082908
** on standard output.
29092909
**
29102910
** Options:
2911
-**
29122911
** --cgi Include a CGI response header in the output
29132912
** --http Include an HTTP response header in the output
29142913
** --open-config Open the configuration database
29152914
** --set-anon-caps Set anonymous login capabilities
29162915
** --set-user-caps Set user login capabilities
@@ -2956,11 +2955,10 @@
29562955
** Evaluate SCRIPT as if it were a header or footer or ticket rendering
29572956
** script and show the results on standard output. SCRIPT may be either
29582957
** a filename or a string of th1 script code.
29592958
**
29602959
** Options:
2961
-**
29622960
** --cgi Include a CGI response header in the output
29632961
** --http Include an HTTP response header in the output
29642962
** --open-config Open the configuration database
29652963
** --set-anon-caps Set anonymous login capabilities
29662964
** --set-user-caps Set user login capabilities
@@ -3017,11 +3015,10 @@
30173015
** Evaluate the contents of the file named "FILE" as if it were a header
30183016
** or footer or ticket rendering script and show the results on standard
30193017
** output.
30203018
**
30213019
** Options:
3022
-**
30233020
** --cgi Include a CGI response header in the output
30243021
** --http Include an HTTP response header in the output
30253022
** --open-config Open the configuration database
30263023
** --set-anon-caps Set anonymous login capabilities
30273024
** --set-user-caps Set user login capabilities
@@ -3086,25 +3083,21 @@
30863083
** TYPE argument must be one of the following:
30873084
**
30883085
** cmdhook Executes the TH1 procedure [command_hook], after
30893086
** setting the TH1 variables "cmd_name", "cmd_args",
30903087
** and "cmd_flags" to appropriate values.
3091
-**
30923088
** cmdnotify Executes the TH1 procedure [command_notify], after
30933089
** setting the TH1 variables "cmd_name", "cmd_args",
30943090
** and "cmd_flags" to appropriate values.
3095
-**
30963091
** webhook Executes the TH1 procedure [webpage_hook], after
30973092
** setting the TH1 variables "web_name", "web_args",
30983093
** and "web_flags" to appropriate values.
3099
-**
31003094
** webnotify Executes the TH1 procedure [webpage_notify], after
31013095
** setting the TH1 variables "web_name", "web_args",
31023096
** and "web_flags" to appropriate values.
31033097
**
31043098
** Options:
3105
-**
31063099
** --cgi Include a CGI response header in the output
31073100
** --http Include an HTTP response header in the output
31083101
** --th-trace Trace TH1 execution (for debugging purposes)
31093102
*/
31103103
void test_th_hook(void){
31113104
--- src/th_main.c
+++ src/th_main.c
@@ -2906,11 +2906,10 @@
2906 ** Read the content of the file named "FILE" as if it were a header or
2907 ** footer or ticket rendering script, evaluate it, and show the results
2908 ** on standard output.
2909 **
2910 ** Options:
2911 **
2912 ** --cgi Include a CGI response header in the output
2913 ** --http Include an HTTP response header in the output
2914 ** --open-config Open the configuration database
2915 ** --set-anon-caps Set anonymous login capabilities
2916 ** --set-user-caps Set user login capabilities
@@ -2956,11 +2955,10 @@
2956 ** Evaluate SCRIPT as if it were a header or footer or ticket rendering
2957 ** script and show the results on standard output. SCRIPT may be either
2958 ** a filename or a string of th1 script code.
2959 **
2960 ** Options:
2961 **
2962 ** --cgi Include a CGI response header in the output
2963 ** --http Include an HTTP response header in the output
2964 ** --open-config Open the configuration database
2965 ** --set-anon-caps Set anonymous login capabilities
2966 ** --set-user-caps Set user login capabilities
@@ -3017,11 +3015,10 @@
3017 ** Evaluate the contents of the file named "FILE" as if it were a header
3018 ** or footer or ticket rendering script and show the results on standard
3019 ** output.
3020 **
3021 ** Options:
3022 **
3023 ** --cgi Include a CGI response header in the output
3024 ** --http Include an HTTP response header in the output
3025 ** --open-config Open the configuration database
3026 ** --set-anon-caps Set anonymous login capabilities
3027 ** --set-user-caps Set user login capabilities
@@ -3086,25 +3083,21 @@
3086 ** TYPE argument must be one of the following:
3087 **
3088 ** cmdhook Executes the TH1 procedure [command_hook], after
3089 ** setting the TH1 variables "cmd_name", "cmd_args",
3090 ** and "cmd_flags" to appropriate values.
3091 **
3092 ** cmdnotify Executes the TH1 procedure [command_notify], after
3093 ** setting the TH1 variables "cmd_name", "cmd_args",
3094 ** and "cmd_flags" to appropriate values.
3095 **
3096 ** webhook Executes the TH1 procedure [webpage_hook], after
3097 ** setting the TH1 variables "web_name", "web_args",
3098 ** and "web_flags" to appropriate values.
3099 **
3100 ** webnotify Executes the TH1 procedure [webpage_notify], after
3101 ** setting the TH1 variables "web_name", "web_args",
3102 ** and "web_flags" to appropriate values.
3103 **
3104 ** Options:
3105 **
3106 ** --cgi Include a CGI response header in the output
3107 ** --http Include an HTTP response header in the output
3108 ** --th-trace Trace TH1 execution (for debugging purposes)
3109 */
3110 void test_th_hook(void){
3111
--- src/th_main.c
+++ src/th_main.c
@@ -2906,11 +2906,10 @@
2906 ** Read the content of the file named "FILE" as if it were a header or
2907 ** footer or ticket rendering script, evaluate it, and show the results
2908 ** on standard output.
2909 **
2910 ** Options:
 
2911 ** --cgi Include a CGI response header in the output
2912 ** --http Include an HTTP response header in the output
2913 ** --open-config Open the configuration database
2914 ** --set-anon-caps Set anonymous login capabilities
2915 ** --set-user-caps Set user login capabilities
@@ -2956,11 +2955,10 @@
2955 ** Evaluate SCRIPT as if it were a header or footer or ticket rendering
2956 ** script and show the results on standard output. SCRIPT may be either
2957 ** a filename or a string of th1 script code.
2958 **
2959 ** Options:
 
2960 ** --cgi Include a CGI response header in the output
2961 ** --http Include an HTTP response header in the output
2962 ** --open-config Open the configuration database
2963 ** --set-anon-caps Set anonymous login capabilities
2964 ** --set-user-caps Set user login capabilities
@@ -3017,11 +3015,10 @@
3015 ** Evaluate the contents of the file named "FILE" as if it were a header
3016 ** or footer or ticket rendering script and show the results on standard
3017 ** output.
3018 **
3019 ** Options:
 
3020 ** --cgi Include a CGI response header in the output
3021 ** --http Include an HTTP response header in the output
3022 ** --open-config Open the configuration database
3023 ** --set-anon-caps Set anonymous login capabilities
3024 ** --set-user-caps Set user login capabilities
@@ -3086,25 +3083,21 @@
3083 ** TYPE argument must be one of the following:
3084 **
3085 ** cmdhook Executes the TH1 procedure [command_hook], after
3086 ** setting the TH1 variables "cmd_name", "cmd_args",
3087 ** and "cmd_flags" to appropriate values.
 
3088 ** cmdnotify Executes the TH1 procedure [command_notify], after
3089 ** setting the TH1 variables "cmd_name", "cmd_args",
3090 ** and "cmd_flags" to appropriate values.
 
3091 ** webhook Executes the TH1 procedure [webpage_hook], after
3092 ** setting the TH1 variables "web_name", "web_args",
3093 ** and "web_flags" to appropriate values.
 
3094 ** webnotify Executes the TH1 procedure [webpage_notify], after
3095 ** setting the TH1 variables "web_name", "web_args",
3096 ** and "web_flags" to appropriate values.
3097 **
3098 ** Options:
 
3099 ** --cgi Include a CGI response header in the output
3100 ** --http Include an HTTP response header in the output
3101 ** --th-trace Trace TH1 execution (for debugging purposes)
3102 */
3103 void test_th_hook(void){
3104
+14 -15
--- src/timeline.c
+++ src/timeline.c
@@ -443,11 +443,11 @@
443443
** background color of the timeline entry */
444444
gidx = graph_add_row(pGraph, rid, -1, 0, 0, zBr, zBgClr, zUuid, 0);
445445
@ <div id="m%d(gidx)" class="tl-nodemark"></div>
446446
}
447447
@</td>
448
- if( !isSelectedOrCurrent ){
448
+ if( !isSelectedOrCurrent && gidx>0 ){
449449
@ <td class="timeline%s(zStyle)Cell%s(zExtraClass)" id='mc%d(gidx)'>
450450
}else{
451451
@ <td class="timeline%s(zStyle)Cell%s(zExtraClass)">
452452
}
453453
if( pGraph ){
@@ -570,11 +570,11 @@
570570
if( drawDetailEllipsis ){
571571
@ <span class='timelineEllipsis' id='ellipsis-%d(rid)' \
572572
@ data-id='%d(rid)'>...</span>
573573
}
574574
if( tmFlags & TIMELINE_COLUMNAR ){
575
- if( !isSelectedOrCurrent ){
575
+ if( !isSelectedOrCurrent && gidx>0 ){
576576
@ <td class="timelineDetailCell%s(zExtraClass)" id='md%d(gidx)'>
577577
}else{
578578
@ <td class="timelineDetailCell%s(zExtraClass)">
579579
}
580580
}
@@ -1156,11 +1156,11 @@
11561156
static void timeline_y_submenu(int isDisabled){
11571157
static int i = 0;
11581158
static const char *az[16];
11591159
if( i==0 ){
11601160
az[0] = "all";
1161
- az[1] = "Any Type";
1161
+ az[1] = "Any";
11621162
i = 2;
11631163
if( g.perm.Read ){
11641164
az[i++] = "ci";
11651165
az[i++] = "Check-ins";
11661166
az[i++] = "g";
@@ -1185,11 +1185,11 @@
11851185
az[i++] = "Forum";
11861186
}
11871187
assert( i<=count(az) );
11881188
}
11891189
if( i>2 ){
1190
- style_submenu_multichoice("y", i/2, az, isDisabled);
1190
+ style_submenu_multichoice("y", "Elements", i/2, az, isDisabled);
11911191
}
11921192
}
11931193
11941194
/*
11951195
** Return the default value for the "ss" cookie or query parameter.
@@ -1222,15 +1222,15 @@
12221222
12231223
/* Available timeline display styles, together with their y= query
12241224
** parameter names.
12251225
*/
12261226
const char *const timeline_view_styles[] = {
1227
- "m", "Modern View",
1228
- "j", "Columnar View",
1229
- "c", "Compact View",
1230
- "v", "Verbose View",
1231
- "x", "Classic View",
1227
+ "m", "Modern",
1228
+ "j", "Columnar",
1229
+ "c", "Compact",
1230
+ "v", "Verbose",
1231
+ "x", "Classic",
12321232
};
12331233
#if INTERFACE
12341234
# define N_TIMELINE_VIEW_STYLE 5
12351235
#endif
12361236
@@ -1241,10 +1241,11 @@
12411241
** Return the TIMELINE_* value appropriate for the view-style.
12421242
*/
12431243
int timeline_ss_submenu(void){
12441244
cookie_link_parameter("ss","ss",timeline_default_ss());
12451245
style_submenu_multichoice("ss",
1246
+ "View",
12461247
N_TIMELINE_VIEW_STYLE,
12471248
timeline_view_styles, 0);
12481249
return timeline_ss_cookie();
12491250
}
12501251
@@ -1541,11 +1542,10 @@
15411542
15421543
/*
15431544
** WEBPAGE: timeline
15441545
**
15451546
** Query parameters:
1546
-**
15471547
** a=TIMEORTAG Show events after TIMEORTAG
15481548
** b=TIMEORTAG Show events before TIMEORTAG
15491549
** c=TIMEORTAG Show events that happen "circa" TIMEORTAG
15501550
** cf=FILEHASH Show events around the time of the first use of
15511551
** the file with FILEHASH
@@ -2139,11 +2139,11 @@
21392139
}
21402140
}
21412141
if( advancedMenu ){
21422142
style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
21432143
}
2144
- style_submenu_entry("n","Max:",4,0);
2144
+ style_submenu_entry("n","Max",4,0);
21452145
timeline_y_submenu(1);
21462146
}else if( f_rid && g.perm.Read ){
21472147
/* If f= is present, ignore all other parameters other than n= */
21482148
char *zUuid;
21492149
db_multi_exec(
@@ -2669,15 +2669,15 @@
26692669
if( zType[0]=='a' || zType[0]=='c' ){
26702670
style_submenu_checkbox("unhide", "Unhide", 0, 0);
26712671
}
26722672
style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
26732673
}
2674
- style_submenu_entry("n","Max:",4,0);
2674
+ style_submenu_entry("n","Max",4,0);
26752675
timeline_y_submenu(disableY);
26762676
if( advancedMenu ){
2677
- style_submenu_entry("t", "Tag Filter:", -8, 0);
2678
- style_submenu_multichoice("ms", count(azMatchStyles)/2,azMatchStyles,0);
2677
+ style_submenu_entry("t", "Tag Filter", -8, 0);
2678
+ style_submenu_multichoice("ms", "Match Style", count(azMatchStyles)/2,azMatchStyles,0);
26792679
}
26802680
}
26812681
blob_zero(&cond);
26822682
}
26832683
if( PB("showsql") ){
@@ -3383,11 +3383,10 @@
33833383
**
33843384
** Generate a vanity page that shows project activity for the current
33853385
** day of the year for various years in the history of the project.
33863386
**
33873387
** Query parameters:
3388
-**
33893388
** today=DATE Use DATE as today's date
33903389
*/
33913390
void thisdayinhistory_page(void){
33923391
static int aYearsAgo[] = { 1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50, 75, 100 };
33933392
const char *zToday;
33943393
--- src/timeline.c
+++ src/timeline.c
@@ -443,11 +443,11 @@
443 ** background color of the timeline entry */
444 gidx = graph_add_row(pGraph, rid, -1, 0, 0, zBr, zBgClr, zUuid, 0);
445 @ <div id="m%d(gidx)" class="tl-nodemark"></div>
446 }
447 @</td>
448 if( !isSelectedOrCurrent ){
449 @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)" id='mc%d(gidx)'>
450 }else{
451 @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)">
452 }
453 if( pGraph ){
@@ -570,11 +570,11 @@
570 if( drawDetailEllipsis ){
571 @ <span class='timelineEllipsis' id='ellipsis-%d(rid)' \
572 @ data-id='%d(rid)'>...</span>
573 }
574 if( tmFlags & TIMELINE_COLUMNAR ){
575 if( !isSelectedOrCurrent ){
576 @ <td class="timelineDetailCell%s(zExtraClass)" id='md%d(gidx)'>
577 }else{
578 @ <td class="timelineDetailCell%s(zExtraClass)">
579 }
580 }
@@ -1156,11 +1156,11 @@
1156 static void timeline_y_submenu(int isDisabled){
1157 static int i = 0;
1158 static const char *az[16];
1159 if( i==0 ){
1160 az[0] = "all";
1161 az[1] = "Any Type";
1162 i = 2;
1163 if( g.perm.Read ){
1164 az[i++] = "ci";
1165 az[i++] = "Check-ins";
1166 az[i++] = "g";
@@ -1185,11 +1185,11 @@
1185 az[i++] = "Forum";
1186 }
1187 assert( i<=count(az) );
1188 }
1189 if( i>2 ){
1190 style_submenu_multichoice("y", i/2, az, isDisabled);
1191 }
1192 }
1193
1194 /*
1195 ** Return the default value for the "ss" cookie or query parameter.
@@ -1222,15 +1222,15 @@
1222
1223 /* Available timeline display styles, together with their y= query
1224 ** parameter names.
1225 */
1226 const char *const timeline_view_styles[] = {
1227 "m", "Modern View",
1228 "j", "Columnar View",
1229 "c", "Compact View",
1230 "v", "Verbose View",
1231 "x", "Classic View",
1232 };
1233 #if INTERFACE
1234 # define N_TIMELINE_VIEW_STYLE 5
1235 #endif
1236
@@ -1241,10 +1241,11 @@
1241 ** Return the TIMELINE_* value appropriate for the view-style.
1242 */
1243 int timeline_ss_submenu(void){
1244 cookie_link_parameter("ss","ss",timeline_default_ss());
1245 style_submenu_multichoice("ss",
 
1246 N_TIMELINE_VIEW_STYLE,
1247 timeline_view_styles, 0);
1248 return timeline_ss_cookie();
1249 }
1250
@@ -1541,11 +1542,10 @@
1541
1542 /*
1543 ** WEBPAGE: timeline
1544 **
1545 ** Query parameters:
1546 **
1547 ** a=TIMEORTAG Show events after TIMEORTAG
1548 ** b=TIMEORTAG Show events before TIMEORTAG
1549 ** c=TIMEORTAG Show events that happen "circa" TIMEORTAG
1550 ** cf=FILEHASH Show events around the time of the first use of
1551 ** the file with FILEHASH
@@ -2139,11 +2139,11 @@
2139 }
2140 }
2141 if( advancedMenu ){
2142 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
2143 }
2144 style_submenu_entry("n","Max:",4,0);
2145 timeline_y_submenu(1);
2146 }else if( f_rid && g.perm.Read ){
2147 /* If f= is present, ignore all other parameters other than n= */
2148 char *zUuid;
2149 db_multi_exec(
@@ -2669,15 +2669,15 @@
2669 if( zType[0]=='a' || zType[0]=='c' ){
2670 style_submenu_checkbox("unhide", "Unhide", 0, 0);
2671 }
2672 style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
2673 }
2674 style_submenu_entry("n","Max:",4,0);
2675 timeline_y_submenu(disableY);
2676 if( advancedMenu ){
2677 style_submenu_entry("t", "Tag Filter:", -8, 0);
2678 style_submenu_multichoice("ms", count(azMatchStyles)/2,azMatchStyles,0);
2679 }
2680 }
2681 blob_zero(&cond);
2682 }
2683 if( PB("showsql") ){
@@ -3383,11 +3383,10 @@
3383 **
3384 ** Generate a vanity page that shows project activity for the current
3385 ** day of the year for various years in the history of the project.
3386 **
3387 ** Query parameters:
3388 **
3389 ** today=DATE Use DATE as today's date
3390 */
3391 void thisdayinhistory_page(void){
3392 static int aYearsAgo[] = { 1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50, 75, 100 };
3393 const char *zToday;
3394
--- src/timeline.c
+++ src/timeline.c
@@ -443,11 +443,11 @@
443 ** background color of the timeline entry */
444 gidx = graph_add_row(pGraph, rid, -1, 0, 0, zBr, zBgClr, zUuid, 0);
445 @ <div id="m%d(gidx)" class="tl-nodemark"></div>
446 }
447 @</td>
448 if( !isSelectedOrCurrent && gidx>0 ){
449 @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)" id='mc%d(gidx)'>
450 }else{
451 @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)">
452 }
453 if( pGraph ){
@@ -570,11 +570,11 @@
570 if( drawDetailEllipsis ){
571 @ <span class='timelineEllipsis' id='ellipsis-%d(rid)' \
572 @ data-id='%d(rid)'>...</span>
573 }
574 if( tmFlags & TIMELINE_COLUMNAR ){
575 if( !isSelectedOrCurrent && gidx>0 ){
576 @ <td class="timelineDetailCell%s(zExtraClass)" id='md%d(gidx)'>
577 }else{
578 @ <td class="timelineDetailCell%s(zExtraClass)">
579 }
580 }
@@ -1156,11 +1156,11 @@
1156 static void timeline_y_submenu(int isDisabled){
1157 static int i = 0;
1158 static const char *az[16];
1159 if( i==0 ){
1160 az[0] = "all";
1161 az[1] = "Any";
1162 i = 2;
1163 if( g.perm.Read ){
1164 az[i++] = "ci";
1165 az[i++] = "Check-ins";
1166 az[i++] = "g";
@@ -1185,11 +1185,11 @@
1185 az[i++] = "Forum";
1186 }
1187 assert( i<=count(az) );
1188 }
1189 if( i>2 ){
1190 style_submenu_multichoice("y", "Elements", i/2, az, isDisabled);
1191 }
1192 }
1193
1194 /*
1195 ** Return the default value for the "ss" cookie or query parameter.
@@ -1222,15 +1222,15 @@
1222
1223 /* Available timeline display styles, together with their y= query
1224 ** parameter names.
1225 */
1226 const char *const timeline_view_styles[] = {
1227 "m", "Modern",
1228 "j", "Columnar",
1229 "c", "Compact",
1230 "v", "Verbose",
1231 "x", "Classic",
1232 };
1233 #if INTERFACE
1234 # define N_TIMELINE_VIEW_STYLE 5
1235 #endif
1236
@@ -1241,10 +1241,11 @@
1241 ** Return the TIMELINE_* value appropriate for the view-style.
1242 */
1243 int timeline_ss_submenu(void){
1244 cookie_link_parameter("ss","ss",timeline_default_ss());
1245 style_submenu_multichoice("ss",
1246 "View",
1247 N_TIMELINE_VIEW_STYLE,
1248 timeline_view_styles, 0);
1249 return timeline_ss_cookie();
1250 }
1251
@@ -1541,11 +1542,10 @@
1542
1543 /*
1544 ** WEBPAGE: timeline
1545 **
1546 ** Query parameters:
 
1547 ** a=TIMEORTAG Show events after TIMEORTAG
1548 ** b=TIMEORTAG Show events before TIMEORTAG
1549 ** c=TIMEORTAG Show events that happen "circa" TIMEORTAG
1550 ** cf=FILEHASH Show events around the time of the first use of
1551 ** the file with FILEHASH
@@ -2139,11 +2139,11 @@
2139 }
2140 }
2141 if( advancedMenu ){
2142 style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0);
2143 }
2144 style_submenu_entry("n","Max",4,0);
2145 timeline_y_submenu(1);
2146 }else if( f_rid && g.perm.Read ){
2147 /* If f= is present, ignore all other parameters other than n= */
2148 char *zUuid;
2149 db_multi_exec(
@@ -2669,15 +2669,15 @@
2669 if( zType[0]=='a' || zType[0]=='c' ){
2670 style_submenu_checkbox("unhide", "Unhide", 0, 0);
2671 }
2672 style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0);
2673 }
2674 style_submenu_entry("n","Max",4,0);
2675 timeline_y_submenu(disableY);
2676 if( advancedMenu ){
2677 style_submenu_entry("t", "Tag Filter", -8, 0);
2678 style_submenu_multichoice("ms", "Match Style", count(azMatchStyles)/2,azMatchStyles,0);
2679 }
2680 }
2681 blob_zero(&cond);
2682 }
2683 if( PB("showsql") ){
@@ -3383,11 +3383,10 @@
3383 **
3384 ** Generate a vanity page that shows project activity for the current
3385 ** day of the year for various years in the history of the project.
3386 **
3387 ** Query parameters:
 
3388 ** today=DATE Use DATE as today's date
3389 */
3390 void thisdayinhistory_page(void){
3391 static int aYearsAgo[] = { 1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50, 75, 100 };
3392 const char *zToday;
3393
+10 -26
--- src/tkt.c
+++ src/tkt.c
@@ -715,12 +715,12 @@
715715
/*
716716
** WEBPAGE: tktview
717717
** URL: tktview?name=HASH
718718
**
719719
** View a ticket identified by the name= query parameter.
720
-** Other query parameters:
721720
**
721
+** Other query parameters:
722722
** tl Show a timeline of the ticket above the status
723723
*/
724724
void tktview_page(void){
725725
const char *zScript;
726726
char *zFullName;
@@ -1194,11 +1194,10 @@
11941194
** URL: /tkttimeline/TICKETUUID
11951195
**
11961196
** Show the change history for a single ticket in timeline format.
11971197
**
11981198
** Query parameters:
1199
-**
12001199
** y=ci Show only check-ins associated with the ticket
12011200
*/
12021201
void tkttimeline_page(void){
12031202
char *zTitle;
12041203
const char *zUuid;
@@ -1475,53 +1474,42 @@
14751474
** COMMAND: ticket*
14761475
**
14771476
** Usage: %fossil ticket SUBCOMMAND ...
14781477
**
14791478
** Run various subcommands to control tickets
1480
-**
14811479
** > fossil ticket show (REPORTTITLE|REPORTNR) ?TICKETFILTER? ?OPTIONS?
1480
+** Run the ticket report, identified by the report format title
1481
+** used in the GUI. The data is written as flat file on stdout,
1482
+** using TAB as separator.
14821483
**
14831484
** Options:
1484
-** -l|--limit LIMITCHAR
1485
-** -q|--quote
1485
+** -l|--limit LIMITCHAR Specify a different separator
1486
+** -q|--quote If --quote is used, the tickets are encoded by quoting special
1487
+** chars (space -> \\s, tab -> \\t, newline -> \\n, cr -> \\r,
1488
+** formfeed -> \\f, vtab -> \\v, nul -> \\0, \\ -> \\\\).
1489
+** Otherwise, the simplified encoding as on the show report raw page
1490
+** in the GUI is used. This has no effect in JSON mode.
14861491
** -R|--repository REPO
14871492
**
1488
-** Run the ticket report, identified by the report format title
1489
-** used in the GUI. The data is written as flat file on stdout,
1490
-** using TAB as separator. The separator can be changed using
1491
-** the -l or --limit option.
1492
-**
14931493
** If TICKETFILTER is given on the commandline, the query is
14941494
** limited with a new WHERE-condition.
14951495
** example: Report lists a column # with the uuid
14961496
** TICKETFILTER may be [#]='uuuuuuuuu'
14971497
** example: Report only lists rows with status not open
14981498
** TICKETFILTER: status != 'open'
14991499
**
1500
-** If --quote is used, the tickets are encoded by quoting special
1501
-** chars (space -> \\s, tab -> \\t, newline -> \\n, cr -> \\r,
1502
-** formfeed -> \\f, vtab -> \\v, nul -> \\0, \\ -> \\\\).
1503
-** Otherwise, the simplified encoding as on the show report raw page
1504
-** in the GUI is used. This has no effect in JSON mode.
1505
-**
15061500
** Instead of the report title it's possible to use the report
15071501
** number; the special report number 0 lists all columns defined in
15081502
** the ticket table.
1509
-**
15101503
** > fossil ticket list fields
15111504
** > fossil ticket ls fields
1512
-**
15131505
** List all fields defined for ticket in the fossil repository.
1514
-**
15151506
** > fossil ticket list reports
15161507
** > fossil ticket ls reports
1517
-**
15181508
** List all ticket reports defined in the fossil repository.
1519
-**
15201509
** > fossil ticket set TICKETUUID (FIELD VALUE)+ ?-q|--quote?
15211510
** > fossil ticket change TICKETUUID (FIELD VALUE)+ ?-q|--quote?
1522
-**
15231511
** Change ticket identified by TICKETUUID to set the values of
15241512
** each field FIELD to VALUE.
15251513
**
15261514
** Field names as defined in the TICKET table. By default, these
15271515
** names include: type, status, subsystem, priority, severity, foundin,
@@ -1531,17 +1519,13 @@
15311519
** If you use +FIELD, the VALUE is appended to the field FIELD. You
15321520
** can use more than one field/value pair on the commandline. Using
15331521
** --quote enables the special character decoding as in "ticket
15341522
** show", which allows setting multiline text or text with special
15351523
** characters.
1536
-**
15371524
** > fossil ticket add FIELD VALUE ?FIELD VALUE .. ? ?-q|--quote?
1538
-**
15391525
** Like set, but create a new ticket with the given values.
1540
-**
15411526
** > fossil ticket history TICKETUUID
1542
-**
15431527
** Show the complete change history for the ticket
15441528
**
15451529
** Note that the values in set|add are not validated against the
15461530
** definitions given in "Ticket Common Script".
15471531
*/
15481532
--- src/tkt.c
+++ src/tkt.c
@@ -715,12 +715,12 @@
715 /*
716 ** WEBPAGE: tktview
717 ** URL: tktview?name=HASH
718 **
719 ** View a ticket identified by the name= query parameter.
720 ** Other query parameters:
721 **
 
722 ** tl Show a timeline of the ticket above the status
723 */
724 void tktview_page(void){
725 const char *zScript;
726 char *zFullName;
@@ -1194,11 +1194,10 @@
1194 ** URL: /tkttimeline/TICKETUUID
1195 **
1196 ** Show the change history for a single ticket in timeline format.
1197 **
1198 ** Query parameters:
1199 **
1200 ** y=ci Show only check-ins associated with the ticket
1201 */
1202 void tkttimeline_page(void){
1203 char *zTitle;
1204 const char *zUuid;
@@ -1475,53 +1474,42 @@
1475 ** COMMAND: ticket*
1476 **
1477 ** Usage: %fossil ticket SUBCOMMAND ...
1478 **
1479 ** Run various subcommands to control tickets
1480 **
1481 ** > fossil ticket show (REPORTTITLE|REPORTNR) ?TICKETFILTER? ?OPTIONS?
 
 
 
1482 **
1483 ** Options:
1484 ** -l|--limit LIMITCHAR
1485 ** -q|--quote
 
 
 
 
1486 ** -R|--repository REPO
1487 **
1488 ** Run the ticket report, identified by the report format title
1489 ** used in the GUI. The data is written as flat file on stdout,
1490 ** using TAB as separator. The separator can be changed using
1491 ** the -l or --limit option.
1492 **
1493 ** If TICKETFILTER is given on the commandline, the query is
1494 ** limited with a new WHERE-condition.
1495 ** example: Report lists a column # with the uuid
1496 ** TICKETFILTER may be [#]='uuuuuuuuu'
1497 ** example: Report only lists rows with status not open
1498 ** TICKETFILTER: status != 'open'
1499 **
1500 ** If --quote is used, the tickets are encoded by quoting special
1501 ** chars (space -> \\s, tab -> \\t, newline -> \\n, cr -> \\r,
1502 ** formfeed -> \\f, vtab -> \\v, nul -> \\0, \\ -> \\\\).
1503 ** Otherwise, the simplified encoding as on the show report raw page
1504 ** in the GUI is used. This has no effect in JSON mode.
1505 **
1506 ** Instead of the report title it's possible to use the report
1507 ** number; the special report number 0 lists all columns defined in
1508 ** the ticket table.
1509 **
1510 ** > fossil ticket list fields
1511 ** > fossil ticket ls fields
1512 **
1513 ** List all fields defined for ticket in the fossil repository.
1514 **
1515 ** > fossil ticket list reports
1516 ** > fossil ticket ls reports
1517 **
1518 ** List all ticket reports defined in the fossil repository.
1519 **
1520 ** > fossil ticket set TICKETUUID (FIELD VALUE)+ ?-q|--quote?
1521 ** > fossil ticket change TICKETUUID (FIELD VALUE)+ ?-q|--quote?
1522 **
1523 ** Change ticket identified by TICKETUUID to set the values of
1524 ** each field FIELD to VALUE.
1525 **
1526 ** Field names as defined in the TICKET table. By default, these
1527 ** names include: type, status, subsystem, priority, severity, foundin,
@@ -1531,17 +1519,13 @@
1531 ** If you use +FIELD, the VALUE is appended to the field FIELD. You
1532 ** can use more than one field/value pair on the commandline. Using
1533 ** --quote enables the special character decoding as in "ticket
1534 ** show", which allows setting multiline text or text with special
1535 ** characters.
1536 **
1537 ** > fossil ticket add FIELD VALUE ?FIELD VALUE .. ? ?-q|--quote?
1538 **
1539 ** Like set, but create a new ticket with the given values.
1540 **
1541 ** > fossil ticket history TICKETUUID
1542 **
1543 ** Show the complete change history for the ticket
1544 **
1545 ** Note that the values in set|add are not validated against the
1546 ** definitions given in "Ticket Common Script".
1547 */
1548
--- src/tkt.c
+++ src/tkt.c
@@ -715,12 +715,12 @@
715 /*
716 ** WEBPAGE: tktview
717 ** URL: tktview?name=HASH
718 **
719 ** View a ticket identified by the name= query parameter.
 
720 **
721 ** Other query parameters:
722 ** tl Show a timeline of the ticket above the status
723 */
724 void tktview_page(void){
725 const char *zScript;
726 char *zFullName;
@@ -1194,11 +1194,10 @@
1194 ** URL: /tkttimeline/TICKETUUID
1195 **
1196 ** Show the change history for a single ticket in timeline format.
1197 **
1198 ** Query parameters:
 
1199 ** y=ci Show only check-ins associated with the ticket
1200 */
1201 void tkttimeline_page(void){
1202 char *zTitle;
1203 const char *zUuid;
@@ -1475,53 +1474,42 @@
1474 ** COMMAND: ticket*
1475 **
1476 ** Usage: %fossil ticket SUBCOMMAND ...
1477 **
1478 ** Run various subcommands to control tickets
 
1479 ** > fossil ticket show (REPORTTITLE|REPORTNR) ?TICKETFILTER? ?OPTIONS?
1480 ** Run the ticket report, identified by the report format title
1481 ** used in the GUI. The data is written as flat file on stdout,
1482 ** using TAB as separator.
1483 **
1484 ** Options:
1485 ** -l|--limit LIMITCHAR Specify a different separator
1486 ** -q|--quote If --quote is used, the tickets are encoded by quoting special
1487 ** chars (space -> \\s, tab -> \\t, newline -> \\n, cr -> \\r,
1488 ** formfeed -> \\f, vtab -> \\v, nul -> \\0, \\ -> \\\\).
1489 ** Otherwise, the simplified encoding as on the show report raw page
1490 ** in the GUI is used. This has no effect in JSON mode.
1491 ** -R|--repository REPO
1492 **
 
 
 
 
 
1493 ** If TICKETFILTER is given on the commandline, the query is
1494 ** limited with a new WHERE-condition.
1495 ** example: Report lists a column # with the uuid
1496 ** TICKETFILTER may be [#]='uuuuuuuuu'
1497 ** example: Report only lists rows with status not open
1498 ** TICKETFILTER: status != 'open'
1499 **
 
 
 
 
 
 
1500 ** Instead of the report title it's possible to use the report
1501 ** number; the special report number 0 lists all columns defined in
1502 ** the ticket table.
 
1503 ** > fossil ticket list fields
1504 ** > fossil ticket ls fields
 
1505 ** List all fields defined for ticket in the fossil repository.
 
1506 ** > fossil ticket list reports
1507 ** > fossil ticket ls reports
 
1508 ** List all ticket reports defined in the fossil repository.
 
1509 ** > fossil ticket set TICKETUUID (FIELD VALUE)+ ?-q|--quote?
1510 ** > fossil ticket change TICKETUUID (FIELD VALUE)+ ?-q|--quote?
 
1511 ** Change ticket identified by TICKETUUID to set the values of
1512 ** each field FIELD to VALUE.
1513 **
1514 ** Field names as defined in the TICKET table. By default, these
1515 ** names include: type, status, subsystem, priority, severity, foundin,
@@ -1531,17 +1519,13 @@
1519 ** If you use +FIELD, the VALUE is appended to the field FIELD. You
1520 ** can use more than one field/value pair on the commandline. Using
1521 ** --quote enables the special character decoding as in "ticket
1522 ** show", which allows setting multiline text or text with special
1523 ** characters.
 
1524 ** > fossil ticket add FIELD VALUE ?FIELD VALUE .. ? ?-q|--quote?
 
1525 ** Like set, but create a new ticket with the given values.
 
1526 ** > fossil ticket history TICKETUUID
 
1527 ** Show the complete change history for the ticket
1528 **
1529 ** Note that the values in set|add are not validated against the
1530 ** definitions given in "Ticket Common Script".
1531 */
1532
+30 -29
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -153,12 +153,12 @@
153153
cgi_redirect("tktsetup");
154154
}
155155
}
156156
@ <form action="%R/%s(g.zPath)" method="post"><div>
157157
login_insert_csrf_secret();
158
- @ <p>%s(zDesc)</p>
159
- @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea>
158
+ @ <p><label for="x">%s(zDesc)</label></p>
159
+ @ <textarea id="x" name="x" rows="%d(height)" cols="80">%h(z)</textarea>
160160
@ <blockquote><p>
161161
@ <input type="submit" name="submit" value="Apply Changes" />
162162
@ <input type="submit" name="clear" value="Revert To Default" />
163163
@ <input type="submit" name="setup" value="Cancel" />
164164
@ </p></blockquote>
@@ -324,57 +324,57 @@
324324
@ </th1>
325325
@ <h1 style="text-align: center;">Enter A New Ticket</h1>
326326
@ <table cellpadding="5">
327327
@ <tr>
328328
@ <td colspan="3">
329
-@ Enter a one-line summary of the ticket:<br />
330
-@ <input type="text" name="title" size="60" value="$<title>" />
329
+@ <label>Enter a one-line summary of the ticket:<br />
330
+@ <input type="text" name="title" size="60" value="$<title>" /></label>
331331
@ </td>
332332
@ </tr>
333333
@
334334
@ <tr>
335
-@ <td align="right">Type:</td>
335
+@ <td align="right"><label for="type">Type:</label></td>
336336
@ <td align="left"><th1>combobox type $type_choices 1</th1></td>
337337
@ <td align="left">What type of ticket is this?</td>
338338
@ </tr>
339339
@
340340
@ <tr>
341
-@ <td align="right">Version:</td>
341
+@ <td align="right"><label for="foundin">Version:</label></td>
342342
@ <td align="left">
343
-@ <input type="text" name="foundin" size="20" value="$<foundin>" />
343
+@ <input type="text" id="foundin" name="foundin" size="20" value="$<foundin>" />
344344
@ </td>
345345
@ <td align="left">In what version or build number do you observe
346346
@ the problem?</td>
347347
@ </tr>
348348
@
349349
@ <tr>
350
-@ <td align="right">Severity:</td>
350
+@ <td align="right"><label for="severity">Severity:</label></td>
351351
@ <td align="left"><th1>combobox severity $severity_choices 1</th1></td>
352352
@ <td align="left">How debilitating is the problem? How badly does the problem
353353
@ affect the operation of the product?</td>
354354
@ </tr>
355355
@
356356
@ <tr>
357
-@ <td align="right">EMail:</td>
357
+@ <td align="right"><label for="private_contact">EMail:</label></td>
358358
@ <td align="left">
359
-@ <input type="text" name="private_contact" value="$<private_contact>"
359
+@ <input type="text" id="private_contact" name="private_contact" value="$<private_contact>"
360360
@ size="30" />
361361
@ </td>
362362
@ <td align="left"><u>Not publicly visible</u>
363363
@ Used by developers to contact you with questions.</td>
364364
@ </tr>
365365
@
366366
@ <tr>
367367
@ <td colspan="3">
368
-@ Enter a detailed description of the problem.
368
+@ <label for="icomment">Enter a detailed description of the problem.</label>
369369
@ For code defects, be sure to provide details on exactly how
370370
@ the problem can be reproduced. Provide as much detail as
371
-@ possible. Format:
371
+@ possible. <label for="mutype">Format:</label>
372372
@ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
373373
@ <br />
374374
@ <th1>set nline [linecount $comment 50 10]</th1>
375
-@ <textarea name="icomment" cols="80" rows="$nline"
375
+@ <textarea id="icomment" name="icomment" cols="80" rows="$nline"
376376
@ wrap="virtual" class="wikiedit">$<icomment></textarea><br />
377377
@ </tr>
378378
@
379379
@ <th1>enable_output [info exists preview]</th1>
380380
@ <tr><td colspan="3">
@@ -615,55 +615,56 @@
615615
@ submit_ticket
616616
@ set preview 1
617617
@ }
618618
@ </th1>
619619
@ <table cellpadding="5">
620
-@ <tr><td class="tktDspLabel">Title:</td><td>
621
-@ <input type="text" name="title" value="$<title>" size="60" />
620
+@ <tr><td class="tktDspLabel"><label for="title">Title:</label></td><td>
621
+@ <input type="text" id="title" name="title" value="$<title>" size="60" />
622622
@ </td></tr>
623623
@
624
-@ <tr><td class="tktDspLabel">Status:</td><td>
624
+@ <tr><td class="tktDspLabel"><label for="status">Status:</label></td><td>
625625
@ <th1>combobox status $status_choices 1</th1>
626626
@ </td></tr>
627627
@
628
-@ <tr><td class="tktDspLabel">Type:</td><td>
628
+@ <tr><td class="tktDspLabel"><label for="type">Type:</label></td><td>
629629
@ <th1>combobox type $type_choices 1</th1>
630630
@ </td></tr>
631631
@
632
-@ <tr><td class="tktDspLabel">Severity:</td><td>
632
+@ <tr><td class="tktDspLabel"><label for="severity">Severity:</label></td><td>
633633
@ <th1>combobox severity $severity_choices 1</th1>
634634
@ </td></tr>
635635
@
636
-@ <tr><td class="tktDspLabel">Priority:</td><td>
636
+@ <tr><td class="tktDspLabel"><label for="priority">Priority:</label></td><td>
637637
@ <th1>combobox priority $priority_choices 1</th1>
638638
@ </td></tr>
639639
@
640
-@ <tr><td class="tktDspLabel">Resolution:</td><td>
640
+@ <tr><td class="tktDspLabel"><label for="resolution">Resolution:</label></td><td>
641641
@ <th1>combobox resolution $resolution_choices 1</th1>
642642
@ </td></tr>
643643
@
644
-@ <tr><td class="tktDspLabel">Subsystem:</td><td>
644
+@ <tr><td class="tktDspLabel"><label for="subsystem">Subsystem:</label></td><td>
645645
@ <th1>combobox subsystem $subsystem_choices 1</th1>
646646
@ </td></tr>
647647
@
648648
@ <th1>enable_output [hascap e]</th1>
649
-@ <tr><td class="tktDspLabel">Contact:</td><td>
650
-@ <input type="text" name="private_contact" size="40"
649
+@ <tr><td class="tktDspLabel"><label for="private_contact">Contact:</label></td><td>
650
+@ <input type="text" id="private_contact" name="private_contact" size="40"
651651
@ value="$<private_contact>" />
652652
@ </td></tr>
653653
@ <th1>enable_output 1</th1>
654654
@
655
-@ <tr><td class="tktDspLabel">Version&nbsp;Found&nbsp;In:</td><td>
656
-@ <input type="text" name="foundin" size="50" value="$<foundin>" />
655
+@ <tr><td class="tktDspLabel"><label for="foundin">
656
+@ Version&nbsp;Found&nbsp;In:</label></td><td>
657
+@ <input type="text" id="foundin" name="foundin" size="50" value="$<foundin>" />
657658
@ </td></tr>
658659
@
659660
@ <tr><td colspan="2">
660
-@ Append Remark with format
661
+@ <label for="icomment">Append Remark</label> with <label for="mutype">format</label>
661662
@ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
662
-@ from
663
-@ <input type="text" name="username" value="$<username>" size="30" />:<br />
664
-@ <textarea name="icomment" cols="80" rows="15"
663
+@ <label for="username">from</label>
664
+@ <input type="text" id="username" name="username" value="$<username>" size="30" />:<br />
665
+@ <textarea id="icomment" name="icomment" cols="80" rows="15"
665666
@ wrap="virtual" class="wikiedit">$<icomment></textarea>
666667
@ </td></tr>
667668
@
668669
@ <th1>enable_output [info exists preview]</th1>
669670
@ <tr><td colspan="2">
670671
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -153,12 +153,12 @@
153 cgi_redirect("tktsetup");
154 }
155 }
156 @ <form action="%R/%s(g.zPath)" method="post"><div>
157 login_insert_csrf_secret();
158 @ <p>%s(zDesc)</p>
159 @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea>
160 @ <blockquote><p>
161 @ <input type="submit" name="submit" value="Apply Changes" />
162 @ <input type="submit" name="clear" value="Revert To Default" />
163 @ <input type="submit" name="setup" value="Cancel" />
164 @ </p></blockquote>
@@ -324,57 +324,57 @@
324 @ </th1>
325 @ <h1 style="text-align: center;">Enter A New Ticket</h1>
326 @ <table cellpadding="5">
327 @ <tr>
328 @ <td colspan="3">
329 @ Enter a one-line summary of the ticket:<br />
330 @ <input type="text" name="title" size="60" value="$<title>" />
331 @ </td>
332 @ </tr>
333 @
334 @ <tr>
335 @ <td align="right">Type:</td>
336 @ <td align="left"><th1>combobox type $type_choices 1</th1></td>
337 @ <td align="left">What type of ticket is this?</td>
338 @ </tr>
339 @
340 @ <tr>
341 @ <td align="right">Version:</td>
342 @ <td align="left">
343 @ <input type="text" name="foundin" size="20" value="$<foundin>" />
344 @ </td>
345 @ <td align="left">In what version or build number do you observe
346 @ the problem?</td>
347 @ </tr>
348 @
349 @ <tr>
350 @ <td align="right">Severity:</td>
351 @ <td align="left"><th1>combobox severity $severity_choices 1</th1></td>
352 @ <td align="left">How debilitating is the problem? How badly does the problem
353 @ affect the operation of the product?</td>
354 @ </tr>
355 @
356 @ <tr>
357 @ <td align="right">EMail:</td>
358 @ <td align="left">
359 @ <input type="text" name="private_contact" value="$<private_contact>"
360 @ size="30" />
361 @ </td>
362 @ <td align="left"><u>Not publicly visible</u>
363 @ Used by developers to contact you with questions.</td>
364 @ </tr>
365 @
366 @ <tr>
367 @ <td colspan="3">
368 @ Enter a detailed description of the problem.
369 @ For code defects, be sure to provide details on exactly how
370 @ the problem can be reproduced. Provide as much detail as
371 @ possible. Format:
372 @ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
373 @ <br />
374 @ <th1>set nline [linecount $comment 50 10]</th1>
375 @ <textarea name="icomment" cols="80" rows="$nline"
376 @ wrap="virtual" class="wikiedit">$<icomment></textarea><br />
377 @ </tr>
378 @
379 @ <th1>enable_output [info exists preview]</th1>
380 @ <tr><td colspan="3">
@@ -615,55 +615,56 @@
615 @ submit_ticket
616 @ set preview 1
617 @ }
618 @ </th1>
619 @ <table cellpadding="5">
620 @ <tr><td class="tktDspLabel">Title:</td><td>
621 @ <input type="text" name="title" value="$<title>" size="60" />
622 @ </td></tr>
623 @
624 @ <tr><td class="tktDspLabel">Status:</td><td>
625 @ <th1>combobox status $status_choices 1</th1>
626 @ </td></tr>
627 @
628 @ <tr><td class="tktDspLabel">Type:</td><td>
629 @ <th1>combobox type $type_choices 1</th1>
630 @ </td></tr>
631 @
632 @ <tr><td class="tktDspLabel">Severity:</td><td>
633 @ <th1>combobox severity $severity_choices 1</th1>
634 @ </td></tr>
635 @
636 @ <tr><td class="tktDspLabel">Priority:</td><td>
637 @ <th1>combobox priority $priority_choices 1</th1>
638 @ </td></tr>
639 @
640 @ <tr><td class="tktDspLabel">Resolution:</td><td>
641 @ <th1>combobox resolution $resolution_choices 1</th1>
642 @ </td></tr>
643 @
644 @ <tr><td class="tktDspLabel">Subsystem:</td><td>
645 @ <th1>combobox subsystem $subsystem_choices 1</th1>
646 @ </td></tr>
647 @
648 @ <th1>enable_output [hascap e]</th1>
649 @ <tr><td class="tktDspLabel">Contact:</td><td>
650 @ <input type="text" name="private_contact" size="40"
651 @ value="$<private_contact>" />
652 @ </td></tr>
653 @ <th1>enable_output 1</th1>
654 @
655 @ <tr><td class="tktDspLabel">Version&nbsp;Found&nbsp;In:</td><td>
656 @ <input type="text" name="foundin" size="50" value="$<foundin>" />
 
657 @ </td></tr>
658 @
659 @ <tr><td colspan="2">
660 @ Append Remark with format
661 @ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
662 @ from
663 @ <input type="text" name="username" value="$<username>" size="30" />:<br />
664 @ <textarea name="icomment" cols="80" rows="15"
665 @ wrap="virtual" class="wikiedit">$<icomment></textarea>
666 @ </td></tr>
667 @
668 @ <th1>enable_output [info exists preview]</th1>
669 @ <tr><td colspan="2">
670
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -153,12 +153,12 @@
153 cgi_redirect("tktsetup");
154 }
155 }
156 @ <form action="%R/%s(g.zPath)" method="post"><div>
157 login_insert_csrf_secret();
158 @ <p><label for="x">%s(zDesc)</label></p>
159 @ <textarea id="x" name="x" rows="%d(height)" cols="80">%h(z)</textarea>
160 @ <blockquote><p>
161 @ <input type="submit" name="submit" value="Apply Changes" />
162 @ <input type="submit" name="clear" value="Revert To Default" />
163 @ <input type="submit" name="setup" value="Cancel" />
164 @ </p></blockquote>
@@ -324,57 +324,57 @@
324 @ </th1>
325 @ <h1 style="text-align: center;">Enter A New Ticket</h1>
326 @ <table cellpadding="5">
327 @ <tr>
328 @ <td colspan="3">
329 @ <label>Enter a one-line summary of the ticket:<br />
330 @ <input type="text" name="title" size="60" value="$<title>" /></label>
331 @ </td>
332 @ </tr>
333 @
334 @ <tr>
335 @ <td align="right"><label for="type">Type:</label></td>
336 @ <td align="left"><th1>combobox type $type_choices 1</th1></td>
337 @ <td align="left">What type of ticket is this?</td>
338 @ </tr>
339 @
340 @ <tr>
341 @ <td align="right"><label for="foundin">Version:</label></td>
342 @ <td align="left">
343 @ <input type="text" id="foundin" name="foundin" size="20" value="$<foundin>" />
344 @ </td>
345 @ <td align="left">In what version or build number do you observe
346 @ the problem?</td>
347 @ </tr>
348 @
349 @ <tr>
350 @ <td align="right"><label for="severity">Severity:</label></td>
351 @ <td align="left"><th1>combobox severity $severity_choices 1</th1></td>
352 @ <td align="left">How debilitating is the problem? How badly does the problem
353 @ affect the operation of the product?</td>
354 @ </tr>
355 @
356 @ <tr>
357 @ <td align="right"><label for="private_contact">EMail:</label></td>
358 @ <td align="left">
359 @ <input type="text" id="private_contact" name="private_contact" value="$<private_contact>"
360 @ size="30" />
361 @ </td>
362 @ <td align="left"><u>Not publicly visible</u>
363 @ Used by developers to contact you with questions.</td>
364 @ </tr>
365 @
366 @ <tr>
367 @ <td colspan="3">
368 @ <label for="icomment">Enter a detailed description of the problem.</label>
369 @ For code defects, be sure to provide details on exactly how
370 @ the problem can be reproduced. Provide as much detail as
371 @ possible. <label for="mutype">Format:</label>
372 @ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
373 @ <br />
374 @ <th1>set nline [linecount $comment 50 10]</th1>
375 @ <textarea id="icomment" name="icomment" cols="80" rows="$nline"
376 @ wrap="virtual" class="wikiedit">$<icomment></textarea><br />
377 @ </tr>
378 @
379 @ <th1>enable_output [info exists preview]</th1>
380 @ <tr><td colspan="3">
@@ -615,55 +615,56 @@
615 @ submit_ticket
616 @ set preview 1
617 @ }
618 @ </th1>
619 @ <table cellpadding="5">
620 @ <tr><td class="tktDspLabel"><label for="title">Title:</label></td><td>
621 @ <input type="text" id="title" name="title" value="$<title>" size="60" />
622 @ </td></tr>
623 @
624 @ <tr><td class="tktDspLabel"><label for="status">Status:</label></td><td>
625 @ <th1>combobox status $status_choices 1</th1>
626 @ </td></tr>
627 @
628 @ <tr><td class="tktDspLabel"><label for="type">Type:</label></td><td>
629 @ <th1>combobox type $type_choices 1</th1>
630 @ </td></tr>
631 @
632 @ <tr><td class="tktDspLabel"><label for="severity">Severity:</label></td><td>
633 @ <th1>combobox severity $severity_choices 1</th1>
634 @ </td></tr>
635 @
636 @ <tr><td class="tktDspLabel"><label for="priority">Priority:</label></td><td>
637 @ <th1>combobox priority $priority_choices 1</th1>
638 @ </td></tr>
639 @
640 @ <tr><td class="tktDspLabel"><label for="resolution">Resolution:</label></td><td>
641 @ <th1>combobox resolution $resolution_choices 1</th1>
642 @ </td></tr>
643 @
644 @ <tr><td class="tktDspLabel"><label for="subsystem">Subsystem:</label></td><td>
645 @ <th1>combobox subsystem $subsystem_choices 1</th1>
646 @ </td></tr>
647 @
648 @ <th1>enable_output [hascap e]</th1>
649 @ <tr><td class="tktDspLabel"><label for="private_contact">Contact:</label></td><td>
650 @ <input type="text" id="private_contact" name="private_contact" size="40"
651 @ value="$<private_contact>" />
652 @ </td></tr>
653 @ <th1>enable_output 1</th1>
654 @
655 @ <tr><td class="tktDspLabel"><label for="foundin">
656 @ Version&nbsp;Found&nbsp;In:</label></td><td>
657 @ <input type="text" id="foundin" name="foundin" size="50" value="$<foundin>" />
658 @ </td></tr>
659 @
660 @ <tr><td colspan="2">
661 @ <label for="icomment">Append Remark</label> with <label for="mutype">format</label>
662 @ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1>
663 @ <label for="username">from</label>
664 @ <input type="text" id="username" name="username" value="$<username>" size="30" />:<br />
665 @ <textarea id="icomment" name="icomment" cols="80" rows="15"
666 @ wrap="virtual" class="wikiedit">$<icomment></textarea>
667 @ </td></tr>
668 @
669 @ <th1>enable_output [info exists preview]</th1>
670 @ <tr><td colspan="2">
671
--- src/unversioned.c
+++ src/unversioned.c
@@ -230,67 +230,58 @@
230230
** for download but which do not preserve history. Only the most recent version
231231
** of each UV-file is retained. Changes to an UV-file are permanent and cannot
232232
** be undone, so use appropriate caution with this command.
233233
**
234234
** Subcommands:
235
-**
236235
** add FILE ... Add or update one or more unversioned files in
237236
** the local repository so that they match FILEs
238237
** on disk. Changes are not pushed to other
239238
** repositories until the next sync.
240
-**
241239
** add FILE --as UVFILE Add or update a single file named FILE on disk
242240
** and UVFILE in the repository unversioned file
243241
** namespace. This variant of the 'add' command allows
244242
** the name to be different in the repository versus
245243
** what appears on disk, but it only allows adding
246244
** a single file at a time.
247
-**
248245
** cat FILE ... Concatenate the content of FILEs to stdout.
249
-**
250246
** edit FILE Bring up FILE in a text editor for modification.
251
-**
252247
** export FILE OUTPUT Write the content of FILE into OUTPUT on disk
253
-**
254248
** list | ls Show all unversioned files held in the local
255
-** repository. Options:
249
+** repository.
256250
**
251
+** Options:
257252
** --glob PATTERN Show only files that match
258253
** --like PATTERN Show only files that match
259254
** -l Show additional details for
260255
** files that match. Implied
261256
** when 'list' is used.
262
-**
263257
** revert ?URL? Restore the state of all unversioned files in the
264258
** local repository to match the remote repository
265259
** URL.
266260
**
267261
** Options:
268262
** -v|--verbose Extra diagnostic output
269263
** -n|--dry-run Show what would have happened
270
-**
271264
** remove|rm|delete FILE ...
272265
** Remove unversioned files from the local repository.
273266
** Changes are not pushed to other repositories until
274
-** the next sync. Options:
267
+** the next sync.
275268
**
269
+** Options:
276270
** --glob PATTERN Remove files that match
277271
** --like PATTERN Remove files that match
278
-**
279272
** sync ?URL? Synchronize the state of all unversioned files with
280273
** the remote repository URL. The most recent version
281274
** of each file is propagated to all repositories and
282275
** all prior versions are permanently forgotten.
283276
**
284277
** Options:
285278
** -v|--verbose Extra diagnostic output
286279
** -n|--dry-run Show what would have happened
287
-**
288280
** touch FILE ... Update the TIMESTAMP on all of the listed files
289281
**
290282
** Options:
291
-**
292283
** --mtime TIMESTAMP Use TIMESTAMP instead of "now" for the "add",
293284
** "edit", "remove", and "touch" subcommands.
294285
** -R|--repository REPO Use FILE as the repository
295286
*/
296287
void unversioned_cmd(void){
@@ -523,12 +514,12 @@
523514
524515
/*
525516
** WEBPAGE: uvlist
526517
**
527518
** Display a list of all unversioned files in the repository.
528
-** Query parameters:
529519
**
520
+** Query parameters:
530521
** byage=1 Order the initial display be decreasing age
531522
** showdel=0 Show deleted files
532523
*/
533524
void uvlist_page(void){
534525
Stmt q;
535526
--- src/unversioned.c
+++ src/unversioned.c
@@ -230,67 +230,58 @@
230 ** for download but which do not preserve history. Only the most recent version
231 ** of each UV-file is retained. Changes to an UV-file are permanent and cannot
232 ** be undone, so use appropriate caution with this command.
233 **
234 ** Subcommands:
235 **
236 ** add FILE ... Add or update one or more unversioned files in
237 ** the local repository so that they match FILEs
238 ** on disk. Changes are not pushed to other
239 ** repositories until the next sync.
240 **
241 ** add FILE --as UVFILE Add or update a single file named FILE on disk
242 ** and UVFILE in the repository unversioned file
243 ** namespace. This variant of the 'add' command allows
244 ** the name to be different in the repository versus
245 ** what appears on disk, but it only allows adding
246 ** a single file at a time.
247 **
248 ** cat FILE ... Concatenate the content of FILEs to stdout.
249 **
250 ** edit FILE Bring up FILE in a text editor for modification.
251 **
252 ** export FILE OUTPUT Write the content of FILE into OUTPUT on disk
253 **
254 ** list | ls Show all unversioned files held in the local
255 ** repository. Options:
256 **
 
257 ** --glob PATTERN Show only files that match
258 ** --like PATTERN Show only files that match
259 ** -l Show additional details for
260 ** files that match. Implied
261 ** when 'list' is used.
262 **
263 ** revert ?URL? Restore the state of all unversioned files in the
264 ** local repository to match the remote repository
265 ** URL.
266 **
267 ** Options:
268 ** -v|--verbose Extra diagnostic output
269 ** -n|--dry-run Show what would have happened
270 **
271 ** remove|rm|delete FILE ...
272 ** Remove unversioned files from the local repository.
273 ** Changes are not pushed to other repositories until
274 ** the next sync. Options:
275 **
 
276 ** --glob PATTERN Remove files that match
277 ** --like PATTERN Remove files that match
278 **
279 ** sync ?URL? Synchronize the state of all unversioned files with
280 ** the remote repository URL. The most recent version
281 ** of each file is propagated to all repositories and
282 ** all prior versions are permanently forgotten.
283 **
284 ** Options:
285 ** -v|--verbose Extra diagnostic output
286 ** -n|--dry-run Show what would have happened
287 **
288 ** touch FILE ... Update the TIMESTAMP on all of the listed files
289 **
290 ** Options:
291 **
292 ** --mtime TIMESTAMP Use TIMESTAMP instead of "now" for the "add",
293 ** "edit", "remove", and "touch" subcommands.
294 ** -R|--repository REPO Use FILE as the repository
295 */
296 void unversioned_cmd(void){
@@ -523,12 +514,12 @@
523
524 /*
525 ** WEBPAGE: uvlist
526 **
527 ** Display a list of all unversioned files in the repository.
528 ** Query parameters:
529 **
 
530 ** byage=1 Order the initial display be decreasing age
531 ** showdel=0 Show deleted files
532 */
533 void uvlist_page(void){
534 Stmt q;
535
--- src/unversioned.c
+++ src/unversioned.c
@@ -230,67 +230,58 @@
230 ** for download but which do not preserve history. Only the most recent version
231 ** of each UV-file is retained. Changes to an UV-file are permanent and cannot
232 ** be undone, so use appropriate caution with this command.
233 **
234 ** Subcommands:
 
235 ** add FILE ... Add or update one or more unversioned files in
236 ** the local repository so that they match FILEs
237 ** on disk. Changes are not pushed to other
238 ** repositories until the next sync.
 
239 ** add FILE --as UVFILE Add or update a single file named FILE on disk
240 ** and UVFILE in the repository unversioned file
241 ** namespace. This variant of the 'add' command allows
242 ** the name to be different in the repository versus
243 ** what appears on disk, but it only allows adding
244 ** a single file at a time.
 
245 ** cat FILE ... Concatenate the content of FILEs to stdout.
 
246 ** edit FILE Bring up FILE in a text editor for modification.
 
247 ** export FILE OUTPUT Write the content of FILE into OUTPUT on disk
 
248 ** list | ls Show all unversioned files held in the local
249 ** repository.
250 **
251 ** Options:
252 ** --glob PATTERN Show only files that match
253 ** --like PATTERN Show only files that match
254 ** -l Show additional details for
255 ** files that match. Implied
256 ** when 'list' is used.
 
257 ** revert ?URL? Restore the state of all unversioned files in the
258 ** local repository to match the remote repository
259 ** URL.
260 **
261 ** Options:
262 ** -v|--verbose Extra diagnostic output
263 ** -n|--dry-run Show what would have happened
 
264 ** remove|rm|delete FILE ...
265 ** Remove unversioned files from the local repository.
266 ** Changes are not pushed to other repositories until
267 ** the next sync.
268 **
269 ** Options:
270 ** --glob PATTERN Remove files that match
271 ** --like PATTERN Remove files that match
 
272 ** sync ?URL? Synchronize the state of all unversioned files with
273 ** the remote repository URL. The most recent version
274 ** of each file is propagated to all repositories and
275 ** all prior versions are permanently forgotten.
276 **
277 ** Options:
278 ** -v|--verbose Extra diagnostic output
279 ** -n|--dry-run Show what would have happened
 
280 ** touch FILE ... Update the TIMESTAMP on all of the listed files
281 **
282 ** Options:
 
283 ** --mtime TIMESTAMP Use TIMESTAMP instead of "now" for the "add",
284 ** "edit", "remove", and "touch" subcommands.
285 ** -R|--repository REPO Use FILE as the repository
286 */
287 void unversioned_cmd(void){
@@ -523,12 +514,12 @@
514
515 /*
516 ** WEBPAGE: uvlist
517 **
518 ** Display a list of all unversioned files in the repository.
 
519 **
520 ** Query parameters:
521 ** byage=1 Order the initial display be decreasing age
522 ** showdel=0 Show deleted files
523 */
524 void uvlist_page(void){
525 Stmt q;
526
-17
--- src/user.c
+++ src/user.c
@@ -317,37 +317,25 @@
317317
**
318318
** Usage: %fossil user SUBCOMMAND ... ?-R|--repository REPO?
319319
**
320320
** Run various subcommands on users of the open repository or of
321321
** the repository identified by the -R or --repository option.
322
-**
323322
** > fossil user capabilities USERNAME ?STRING?
324
-**
325323
** Query or set the capabilities for user USERNAME
326
-**
327324
** > fossil user contact USERNAME ?CONTACT-INFO?
328
-**
329325
** Query or set contact information for user USERNAME
330
-**
331326
** > fossil user default ?USERNAME?
332
-**
333327
** Query or set the default user. The default user is the
334328
** user for command-line interaction.
335
-**
336329
** > fossil user list
337330
** > fossil user ls
338
-**
339331
** List all users known to the repository
340
-**
341332
** > fossil user new ?USERNAME? ?CONTACT-INFO? ?PASSWORD?
342
-**
343333
** Create a new user in the repository. Users can never be
344334
** deleted. They can be denied all access but they must continue
345335
** to exist in the database.
346
-**
347336
** > fossil user password USERNAME ?PASSWORD?
348
-**
349337
** Change the web access password for a user.
350338
*/
351339
void user_cmd(void){
352340
int n;
353341
db_find_and_open_repository(0, 0);
@@ -618,18 +606,14 @@
618606
** Usage: %fossil test-prompt-password PROMPT VERIFY
619607
**
620608
** Prompts the user for a password and then prints it verbatim.
621609
**
622610
** Behavior is controlled by the VERIFY parameter:
623
-**
624611
** 0 Just ask once.
625
-**
626612
** 1 If the first answer is a non-empty string, ask for
627613
** verification. Repeat if the two strings do not match.
628
-**
629614
** 2 Ask twice, repeat if the strings do not match.
630
-
631615
*/
632616
void test_prompt_password_cmd(void){
633617
Blob answer;
634618
int iVerify = 0;
635619
if( g.argc!=4 ) usage("PROMPT VERIFY");
@@ -643,11 +627,10 @@
643627
**
644628
** Show login attempts, including timestamp and IP address.
645629
** Requires Admin privileges.
646630
**
647631
** Query parameters:
648
-**
649632
** y=N 1: success only. 2: failure only. 3: both (default: 3)
650633
** n=N Number of entries to show (default: 200)
651634
** o=N Skip this many entries (default: 0)
652635
*/
653636
void access_log_page(void){
654637
--- src/user.c
+++ src/user.c
@@ -317,37 +317,25 @@
317 **
318 ** Usage: %fossil user SUBCOMMAND ... ?-R|--repository REPO?
319 **
320 ** Run various subcommands on users of the open repository or of
321 ** the repository identified by the -R or --repository option.
322 **
323 ** > fossil user capabilities USERNAME ?STRING?
324 **
325 ** Query or set the capabilities for user USERNAME
326 **
327 ** > fossil user contact USERNAME ?CONTACT-INFO?
328 **
329 ** Query or set contact information for user USERNAME
330 **
331 ** > fossil user default ?USERNAME?
332 **
333 ** Query or set the default user. The default user is the
334 ** user for command-line interaction.
335 **
336 ** > fossil user list
337 ** > fossil user ls
338 **
339 ** List all users known to the repository
340 **
341 ** > fossil user new ?USERNAME? ?CONTACT-INFO? ?PASSWORD?
342 **
343 ** Create a new user in the repository. Users can never be
344 ** deleted. They can be denied all access but they must continue
345 ** to exist in the database.
346 **
347 ** > fossil user password USERNAME ?PASSWORD?
348 **
349 ** Change the web access password for a user.
350 */
351 void user_cmd(void){
352 int n;
353 db_find_and_open_repository(0, 0);
@@ -618,18 +606,14 @@
618 ** Usage: %fossil test-prompt-password PROMPT VERIFY
619 **
620 ** Prompts the user for a password and then prints it verbatim.
621 **
622 ** Behavior is controlled by the VERIFY parameter:
623 **
624 ** 0 Just ask once.
625 **
626 ** 1 If the first answer is a non-empty string, ask for
627 ** verification. Repeat if the two strings do not match.
628 **
629 ** 2 Ask twice, repeat if the strings do not match.
630
631 */
632 void test_prompt_password_cmd(void){
633 Blob answer;
634 int iVerify = 0;
635 if( g.argc!=4 ) usage("PROMPT VERIFY");
@@ -643,11 +627,10 @@
643 **
644 ** Show login attempts, including timestamp and IP address.
645 ** Requires Admin privileges.
646 **
647 ** Query parameters:
648 **
649 ** y=N 1: success only. 2: failure only. 3: both (default: 3)
650 ** n=N Number of entries to show (default: 200)
651 ** o=N Skip this many entries (default: 0)
652 */
653 void access_log_page(void){
654
--- src/user.c
+++ src/user.c
@@ -317,37 +317,25 @@
317 **
318 ** Usage: %fossil user SUBCOMMAND ... ?-R|--repository REPO?
319 **
320 ** Run various subcommands on users of the open repository or of
321 ** the repository identified by the -R or --repository option.
 
322 ** > fossil user capabilities USERNAME ?STRING?
 
323 ** Query or set the capabilities for user USERNAME
 
324 ** > fossil user contact USERNAME ?CONTACT-INFO?
 
325 ** Query or set contact information for user USERNAME
 
326 ** > fossil user default ?USERNAME?
 
327 ** Query or set the default user. The default user is the
328 ** user for command-line interaction.
 
329 ** > fossil user list
330 ** > fossil user ls
 
331 ** List all users known to the repository
 
332 ** > fossil user new ?USERNAME? ?CONTACT-INFO? ?PASSWORD?
 
333 ** Create a new user in the repository. Users can never be
334 ** deleted. They can be denied all access but they must continue
335 ** to exist in the database.
 
336 ** > fossil user password USERNAME ?PASSWORD?
 
337 ** Change the web access password for a user.
338 */
339 void user_cmd(void){
340 int n;
341 db_find_and_open_repository(0, 0);
@@ -618,18 +606,14 @@
606 ** Usage: %fossil test-prompt-password PROMPT VERIFY
607 **
608 ** Prompts the user for a password and then prints it verbatim.
609 **
610 ** Behavior is controlled by the VERIFY parameter:
 
611 ** 0 Just ask once.
 
612 ** 1 If the first answer is a non-empty string, ask for
613 ** verification. Repeat if the two strings do not match.
 
614 ** 2 Ask twice, repeat if the strings do not match.
 
615 */
616 void test_prompt_password_cmd(void){
617 Blob answer;
618 int iVerify = 0;
619 if( g.argc!=4 ) usage("PROMPT VERIFY");
@@ -643,11 +627,10 @@
627 **
628 ** Show login attempts, including timestamp and IP address.
629 ** Requires Admin privileges.
630 **
631 ** Query parameters:
 
632 ** y=N 1: success only. 2: failure only. 3: both (default: 3)
633 ** n=N Number of entries to show (default: 200)
634 ** o=N Skip this many entries (default: 0)
635 */
636 void access_log_page(void){
637
+14 -22
--- src/wiki.c
+++ src/wiki.c
@@ -523,11 +523,10 @@
523523
** WEBPAGE: wiki
524524
**
525525
** Display a wiki page. Example: /wiki?name=PAGENAME
526526
**
527527
** Query parameters:
528
-**
529528
** name=NAME Name of the wiki page to display. Required.
530529
** nsm Omit the submenu if present. (Mnemonic: No SubMenu)
531530
** p Always show just the wiki page. For special
532531
** pages for check-ins, branches, or tags, there will
533532
** be a redirect to the associated /info page unless
@@ -650,11 +649,11 @@
650649
** Output a selection box from which the user can select the
651650
** wiki mimetype.
652651
*/
653652
void mimetype_option_menu(const char *zMimetype){
654653
unsigned i;
655
- @ <select name="mimetype" size="1">
654
+ @ <select id="mimetype" name="mimetype" size="1">
656655
for(i=0; i<count(azStyles); i+=3){
657656
if( fossil_strcmp(zMimetype,azStyles[i])==0 ){
658657
@ <option value="%s(azStyles[i])" selected>%s(azStyles[i+1])</option>
659658
}else{
660659
@ <option value="%s(azStyles[i])">%s(azStyles[i+1])</option>
@@ -1333,13 +1332,13 @@
13331332
"class='hidden'"
13341333
">");
13351334
CX("<div class='"
13361335
"wikiedit-options flex-container flex-row child-gap-small'>");
13371336
CX("<div class='input-with-label'>"
1338
- "<label>Mime type</label>");
1337
+ "<label>Mime type&nbsp;");
13391338
mimetype_option_menu("text/x-markdown");
1340
- CX("</div>");
1339
+ CX("</label></div>");
13411340
style_select_list_int("select-font-size",
13421341
"editor_font_size", "Editor font size",
13431342
NULL/*tooltip*/,
13441343
100,
13451344
"100%", 100, "125%", 125,
@@ -1370,11 +1369,11 @@
13701369
"</div>");
13711370
13721371
CX("</div>");
13731372
CX("<div class='flex-container flex-column stretch'>");
13741373
CX("<textarea name='content' id='wikiedit-content-editor' "
1375
- "class='wikiedit' rows='25'>");
1374
+ "class='wikiedit' rows='25' aria-label='Content' title='Content'>");
13761375
CX("</textarea>");
13771376
CX("</div>"/*textarea wrapper*/);
13781377
CX("</div>"/*#tab-file-content*/);
13791378
}
13801379
/****** Preview tab ******/
@@ -1532,15 +1531,17 @@
15321531
style_header("Create A New Wiki Page");
15331532
wiki_standard_submenu(W_ALL_BUT(W_NEW));
15341533
@ <p>Rules for wiki page names:</p>
15351534
well_formed_wiki_name_rules();
15361535
form_begin(0, "%R/wikinew");
1537
- @ <p>Name of new wiki page:
1538
- @ <input style="width: 35;" type="text" name="name" value="%h(zName)" /><br />
1539
- @ %z(href("%R/markup_help"))Markup style</a>:
1536
+ @ <p><label>Name of new wiki page:
1537
+ @ <input style="width: 35;" type="text" name="name" value="%h(zName)" /></label><br />
1538
+ @ <label>Markup style
1539
+ @ %z(href("%R/markup_help"))
1540
+ @ <span class="help-buttonlet processed" title="Help"></span></a>:
15401541
mimetype_option_menu("text/x-markdown");
1541
- @ <br /><input type="submit" value="Create" />
1542
+ @ </label><br /><input type="submit" value="Create" />
15421543
@ </p></form>
15431544
if( zName[0] ){
15441545
@ <p><span class="wikiError">
15451546
@ "%h(zName)" is not a valid wiki page name!</span></p>
15461547
}
@@ -1693,16 +1694,16 @@
16931694
zUser = PD("u", g.zLogin);
16941695
form_begin(0, "%R/wikiappend");
16951696
login_insert_csrf_secret();
16961697
@ <input type="hidden" name="name" value="%h(zPageName)" />
16971698
@ <input type="hidden" name="mimetype" value="%h(zMimetype)" />
1698
- @ Your Name:
1699
- @ <input type="text" name="u" size="20" value="%h(zUser)" /><br />
1699
+ @ <label>Your Name:
1700
+ @ <input type="text" name="u" size="20" value="%h(zUser)" /></label><br />
17001701
zFormat = mimetype_common_name(zMimetype);
1701
- @ Comment to append (formatted as %s(zFormat)):<br />
1702
+ @ <label>Comment to append (formatted as %s(zFormat)):<br />
17021703
@ <textarea name="r" class="wikiedit" cols="80"
1703
- @ rows="10" wrap="virtual">%h(PD("r",""))</textarea>
1704
+ @ rows="10" wrap="virtual">%h(PD("r",""))</textarea></label>
17041705
@ <br />
17051706
@ <input type="submit" name="preview" value="Preview Your Comment" />
17061707
@ <input type="submit" name="submit" value="Append Your Changes" />
17071708
@ <input type="submit" name="cancel" value="Cancel" />
17081709
captcha_generate(0);
@@ -1714,11 +1715,10 @@
17141715
/*
17151716
** WEBPAGE: whistory
17161717
** URL: /whistory?name=PAGENAME
17171718
**
17181719
** Additional parameters:
1719
-**
17201720
** showid Show RID values
17211721
**
17221722
** Show the complete change history for a single wiki page.
17231723
*/
17241724
void whistory_page(void){
@@ -1807,11 +1807,10 @@
18071807
** WEBPAGE: wdiff
18081808
**
18091809
** Show the changes to a wiki page.
18101810
**
18111811
** Query parameters:
1812
-**
18131812
** id=HASH Hash prefix for the child version to be diffed.
18141813
** rid=INTEGER RecordID for the child version
18151814
** pid=HASH Hash prefix for the parent.
18161815
**
18171816
** The "id" query parameter is required. "pid" is optional. If "pid"
@@ -2126,14 +2125,12 @@
21262125
** COMMAND: wiki*
21272126
**
21282127
** Usage: %fossil wiki (export|create|commit|list) WikiName
21292128
**
21302129
** Run various subcommands to work with wiki entries or tech notes.
2131
-**
21322130
** > fossil wiki export ?OPTIONS? PAGENAME ?FILE?
21332131
** > fossil wiki export ?OPTIONS? -t|--technote DATETIME|TECHNOTE-ID|TAG ?FILE?
2134
-**
21352132
** Sends the latest version of either a wiki page or of a tech
21362133
** note to the given file or standard output. A filename of "-"
21372134
** writes the output to standard output. The directory parts of
21382135
** the output filename are created if needed.
21392136
** If PAGENAME is provided, the named wiki page will be output.
@@ -2150,13 +2147,11 @@
21502147
** -H|--HTML Works like -h|-html but wraps the output in
21512148
** <html><body>...</body></html>.
21522149
** -p|--pre If -h|-H is used and the page or technote has
21532150
** the text/plain mimetype, its HTML-escaped output
21542151
** will be wrapped in <pre>...</pre>.
2155
-**
21562152
** > fossil wiki (create|commit) (PAGENAME | TECHNOTE-COMMENT) ?FILE? ?OPTIONS?
2157
-**
21582153
** Create a new or commit changes to an existing wiki page or
21592154
** technote from FILE or from standard input. PAGENAME is the
21602155
** name of the wiki entry. TECHNOTE-COMMENT is the timeline comment of
21612156
** the technote.
21622157
**
@@ -2182,14 +2177,12 @@
21822177
** updated by its technote id, which is
21832178
** its UUID.
21842179
** --technote-tags TAGS The set of tags for a technote.
21852180
** --technote-bgcolor COLOR The color used for the technote
21862181
** on the timeline.
2187
-**
21882182
** > fossil wiki list ?OPTIONS?
21892183
** > fossil wiki ls ?OPTIONS?
2190
-**
21912184
** Lists all wiki entries, one per line, ordered
21922185
** case-insensitively by name. Wiki pages associated with
21932186
** check-ins and branches are NOT shown, unless -a is given.
21942187
**
21952188
** Options:
@@ -2204,11 +2197,10 @@
22042197
** -s|--show-technote-ids The id of the tech note will be listed
22052198
** along side the timestamp. The tech note
22062199
** id will be the first word on each line.
22072200
** This option only applies if the
22082201
** --technote option is also specified.
2209
-**
22102202
** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
22112203
** year-month-day form, it may be truncated, the "T" may be replaced by
22122204
** a space, and it may also name a timezone offset from UTC as "-HH:MM"
22132205
** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
22142206
** means UTC.
22152207
--- src/wiki.c
+++ src/wiki.c
@@ -523,11 +523,10 @@
523 ** WEBPAGE: wiki
524 **
525 ** Display a wiki page. Example: /wiki?name=PAGENAME
526 **
527 ** Query parameters:
528 **
529 ** name=NAME Name of the wiki page to display. Required.
530 ** nsm Omit the submenu if present. (Mnemonic: No SubMenu)
531 ** p Always show just the wiki page. For special
532 ** pages for check-ins, branches, or tags, there will
533 ** be a redirect to the associated /info page unless
@@ -650,11 +649,11 @@
650 ** Output a selection box from which the user can select the
651 ** wiki mimetype.
652 */
653 void mimetype_option_menu(const char *zMimetype){
654 unsigned i;
655 @ <select name="mimetype" size="1">
656 for(i=0; i<count(azStyles); i+=3){
657 if( fossil_strcmp(zMimetype,azStyles[i])==0 ){
658 @ <option value="%s(azStyles[i])" selected>%s(azStyles[i+1])</option>
659 }else{
660 @ <option value="%s(azStyles[i])">%s(azStyles[i+1])</option>
@@ -1333,13 +1332,13 @@
1333 "class='hidden'"
1334 ">");
1335 CX("<div class='"
1336 "wikiedit-options flex-container flex-row child-gap-small'>");
1337 CX("<div class='input-with-label'>"
1338 "<label>Mime type</label>");
1339 mimetype_option_menu("text/x-markdown");
1340 CX("</div>");
1341 style_select_list_int("select-font-size",
1342 "editor_font_size", "Editor font size",
1343 NULL/*tooltip*/,
1344 100,
1345 "100%", 100, "125%", 125,
@@ -1370,11 +1369,11 @@
1370 "</div>");
1371
1372 CX("</div>");
1373 CX("<div class='flex-container flex-column stretch'>");
1374 CX("<textarea name='content' id='wikiedit-content-editor' "
1375 "class='wikiedit' rows='25'>");
1376 CX("</textarea>");
1377 CX("</div>"/*textarea wrapper*/);
1378 CX("</div>"/*#tab-file-content*/);
1379 }
1380 /****** Preview tab ******/
@@ -1532,15 +1531,17 @@
1532 style_header("Create A New Wiki Page");
1533 wiki_standard_submenu(W_ALL_BUT(W_NEW));
1534 @ <p>Rules for wiki page names:</p>
1535 well_formed_wiki_name_rules();
1536 form_begin(0, "%R/wikinew");
1537 @ <p>Name of new wiki page:
1538 @ <input style="width: 35;" type="text" name="name" value="%h(zName)" /><br />
1539 @ %z(href("%R/markup_help"))Markup style</a>:
 
 
1540 mimetype_option_menu("text/x-markdown");
1541 @ <br /><input type="submit" value="Create" />
1542 @ </p></form>
1543 if( zName[0] ){
1544 @ <p><span class="wikiError">
1545 @ "%h(zName)" is not a valid wiki page name!</span></p>
1546 }
@@ -1693,16 +1694,16 @@
1693 zUser = PD("u", g.zLogin);
1694 form_begin(0, "%R/wikiappend");
1695 login_insert_csrf_secret();
1696 @ <input type="hidden" name="name" value="%h(zPageName)" />
1697 @ <input type="hidden" name="mimetype" value="%h(zMimetype)" />
1698 @ Your Name:
1699 @ <input type="text" name="u" size="20" value="%h(zUser)" /><br />
1700 zFormat = mimetype_common_name(zMimetype);
1701 @ Comment to append (formatted as %s(zFormat)):<br />
1702 @ <textarea name="r" class="wikiedit" cols="80"
1703 @ rows="10" wrap="virtual">%h(PD("r",""))</textarea>
1704 @ <br />
1705 @ <input type="submit" name="preview" value="Preview Your Comment" />
1706 @ <input type="submit" name="submit" value="Append Your Changes" />
1707 @ <input type="submit" name="cancel" value="Cancel" />
1708 captcha_generate(0);
@@ -1714,11 +1715,10 @@
1714 /*
1715 ** WEBPAGE: whistory
1716 ** URL: /whistory?name=PAGENAME
1717 **
1718 ** Additional parameters:
1719 **
1720 ** showid Show RID values
1721 **
1722 ** Show the complete change history for a single wiki page.
1723 */
1724 void whistory_page(void){
@@ -1807,11 +1807,10 @@
1807 ** WEBPAGE: wdiff
1808 **
1809 ** Show the changes to a wiki page.
1810 **
1811 ** Query parameters:
1812 **
1813 ** id=HASH Hash prefix for the child version to be diffed.
1814 ** rid=INTEGER RecordID for the child version
1815 ** pid=HASH Hash prefix for the parent.
1816 **
1817 ** The "id" query parameter is required. "pid" is optional. If "pid"
@@ -2126,14 +2125,12 @@
2126 ** COMMAND: wiki*
2127 **
2128 ** Usage: %fossil wiki (export|create|commit|list) WikiName
2129 **
2130 ** Run various subcommands to work with wiki entries or tech notes.
2131 **
2132 ** > fossil wiki export ?OPTIONS? PAGENAME ?FILE?
2133 ** > fossil wiki export ?OPTIONS? -t|--technote DATETIME|TECHNOTE-ID|TAG ?FILE?
2134 **
2135 ** Sends the latest version of either a wiki page or of a tech
2136 ** note to the given file or standard output. A filename of "-"
2137 ** writes the output to standard output. The directory parts of
2138 ** the output filename are created if needed.
2139 ** If PAGENAME is provided, the named wiki page will be output.
@@ -2150,13 +2147,11 @@
2150 ** -H|--HTML Works like -h|-html but wraps the output in
2151 ** <html><body>...</body></html>.
2152 ** -p|--pre If -h|-H is used and the page or technote has
2153 ** the text/plain mimetype, its HTML-escaped output
2154 ** will be wrapped in <pre>...</pre>.
2155 **
2156 ** > fossil wiki (create|commit) (PAGENAME | TECHNOTE-COMMENT) ?FILE? ?OPTIONS?
2157 **
2158 ** Create a new or commit changes to an existing wiki page or
2159 ** technote from FILE or from standard input. PAGENAME is the
2160 ** name of the wiki entry. TECHNOTE-COMMENT is the timeline comment of
2161 ** the technote.
2162 **
@@ -2182,14 +2177,12 @@
2182 ** updated by its technote id, which is
2183 ** its UUID.
2184 ** --technote-tags TAGS The set of tags for a technote.
2185 ** --technote-bgcolor COLOR The color used for the technote
2186 ** on the timeline.
2187 **
2188 ** > fossil wiki list ?OPTIONS?
2189 ** > fossil wiki ls ?OPTIONS?
2190 **
2191 ** Lists all wiki entries, one per line, ordered
2192 ** case-insensitively by name. Wiki pages associated with
2193 ** check-ins and branches are NOT shown, unless -a is given.
2194 **
2195 ** Options:
@@ -2204,11 +2197,10 @@
2204 ** -s|--show-technote-ids The id of the tech note will be listed
2205 ** along side the timestamp. The tech note
2206 ** id will be the first word on each line.
2207 ** This option only applies if the
2208 ** --technote option is also specified.
2209 **
2210 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2211 ** year-month-day form, it may be truncated, the "T" may be replaced by
2212 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2213 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2214 ** means UTC.
2215
--- src/wiki.c
+++ src/wiki.c
@@ -523,11 +523,10 @@
523 ** WEBPAGE: wiki
524 **
525 ** Display a wiki page. Example: /wiki?name=PAGENAME
526 **
527 ** Query parameters:
 
528 ** name=NAME Name of the wiki page to display. Required.
529 ** nsm Omit the submenu if present. (Mnemonic: No SubMenu)
530 ** p Always show just the wiki page. For special
531 ** pages for check-ins, branches, or tags, there will
532 ** be a redirect to the associated /info page unless
@@ -650,11 +649,11 @@
649 ** Output a selection box from which the user can select the
650 ** wiki mimetype.
651 */
652 void mimetype_option_menu(const char *zMimetype){
653 unsigned i;
654 @ <select id="mimetype" name="mimetype" size="1">
655 for(i=0; i<count(azStyles); i+=3){
656 if( fossil_strcmp(zMimetype,azStyles[i])==0 ){
657 @ <option value="%s(azStyles[i])" selected>%s(azStyles[i+1])</option>
658 }else{
659 @ <option value="%s(azStyles[i])">%s(azStyles[i+1])</option>
@@ -1333,13 +1332,13 @@
1332 "class='hidden'"
1333 ">");
1334 CX("<div class='"
1335 "wikiedit-options flex-container flex-row child-gap-small'>");
1336 CX("<div class='input-with-label'>"
1337 "<label>Mime type&nbsp;");
1338 mimetype_option_menu("text/x-markdown");
1339 CX("</label></div>");
1340 style_select_list_int("select-font-size",
1341 "editor_font_size", "Editor font size",
1342 NULL/*tooltip*/,
1343 100,
1344 "100%", 100, "125%", 125,
@@ -1370,11 +1369,11 @@
1369 "</div>");
1370
1371 CX("</div>");
1372 CX("<div class='flex-container flex-column stretch'>");
1373 CX("<textarea name='content' id='wikiedit-content-editor' "
1374 "class='wikiedit' rows='25' aria-label='Content' title='Content'>");
1375 CX("</textarea>");
1376 CX("</div>"/*textarea wrapper*/);
1377 CX("</div>"/*#tab-file-content*/);
1378 }
1379 /****** Preview tab ******/
@@ -1532,15 +1531,17 @@
1531 style_header("Create A New Wiki Page");
1532 wiki_standard_submenu(W_ALL_BUT(W_NEW));
1533 @ <p>Rules for wiki page names:</p>
1534 well_formed_wiki_name_rules();
1535 form_begin(0, "%R/wikinew");
1536 @ <p><label>Name of new wiki page:
1537 @ <input style="width: 35;" type="text" name="name" value="%h(zName)" /></label><br />
1538 @ <label>Markup style
1539 @ %z(href("%R/markup_help"))
1540 @ <span class="help-buttonlet processed" title="Help"></span></a>:
1541 mimetype_option_menu("text/x-markdown");
1542 @ </label><br /><input type="submit" value="Create" />
1543 @ </p></form>
1544 if( zName[0] ){
1545 @ <p><span class="wikiError">
1546 @ "%h(zName)" is not a valid wiki page name!</span></p>
1547 }
@@ -1693,16 +1694,16 @@
1694 zUser = PD("u", g.zLogin);
1695 form_begin(0, "%R/wikiappend");
1696 login_insert_csrf_secret();
1697 @ <input type="hidden" name="name" value="%h(zPageName)" />
1698 @ <input type="hidden" name="mimetype" value="%h(zMimetype)" />
1699 @ <label>Your Name:
1700 @ <input type="text" name="u" size="20" value="%h(zUser)" /></label><br />
1701 zFormat = mimetype_common_name(zMimetype);
1702 @ <label>Comment to append (formatted as %s(zFormat)):<br />
1703 @ <textarea name="r" class="wikiedit" cols="80"
1704 @ rows="10" wrap="virtual">%h(PD("r",""))</textarea></label>
1705 @ <br />
1706 @ <input type="submit" name="preview" value="Preview Your Comment" />
1707 @ <input type="submit" name="submit" value="Append Your Changes" />
1708 @ <input type="submit" name="cancel" value="Cancel" />
1709 captcha_generate(0);
@@ -1714,11 +1715,10 @@
1715 /*
1716 ** WEBPAGE: whistory
1717 ** URL: /whistory?name=PAGENAME
1718 **
1719 ** Additional parameters:
 
1720 ** showid Show RID values
1721 **
1722 ** Show the complete change history for a single wiki page.
1723 */
1724 void whistory_page(void){
@@ -1807,11 +1807,10 @@
1807 ** WEBPAGE: wdiff
1808 **
1809 ** Show the changes to a wiki page.
1810 **
1811 ** Query parameters:
 
1812 ** id=HASH Hash prefix for the child version to be diffed.
1813 ** rid=INTEGER RecordID for the child version
1814 ** pid=HASH Hash prefix for the parent.
1815 **
1816 ** The "id" query parameter is required. "pid" is optional. If "pid"
@@ -2126,14 +2125,12 @@
2125 ** COMMAND: wiki*
2126 **
2127 ** Usage: %fossil wiki (export|create|commit|list) WikiName
2128 **
2129 ** Run various subcommands to work with wiki entries or tech notes.
 
2130 ** > fossil wiki export ?OPTIONS? PAGENAME ?FILE?
2131 ** > fossil wiki export ?OPTIONS? -t|--technote DATETIME|TECHNOTE-ID|TAG ?FILE?
 
2132 ** Sends the latest version of either a wiki page or of a tech
2133 ** note to the given file or standard output. A filename of "-"
2134 ** writes the output to standard output. The directory parts of
2135 ** the output filename are created if needed.
2136 ** If PAGENAME is provided, the named wiki page will be output.
@@ -2150,13 +2147,11 @@
2147 ** -H|--HTML Works like -h|-html but wraps the output in
2148 ** <html><body>...</body></html>.
2149 ** -p|--pre If -h|-H is used and the page or technote has
2150 ** the text/plain mimetype, its HTML-escaped output
2151 ** will be wrapped in <pre>...</pre>.
 
2152 ** > fossil wiki (create|commit) (PAGENAME | TECHNOTE-COMMENT) ?FILE? ?OPTIONS?
 
2153 ** Create a new or commit changes to an existing wiki page or
2154 ** technote from FILE or from standard input. PAGENAME is the
2155 ** name of the wiki entry. TECHNOTE-COMMENT is the timeline comment of
2156 ** the technote.
2157 **
@@ -2182,14 +2177,12 @@
2177 ** updated by its technote id, which is
2178 ** its UUID.
2179 ** --technote-tags TAGS The set of tags for a technote.
2180 ** --technote-bgcolor COLOR The color used for the technote
2181 ** on the timeline.
 
2182 ** > fossil wiki list ?OPTIONS?
2183 ** > fossil wiki ls ?OPTIONS?
 
2184 ** Lists all wiki entries, one per line, ordered
2185 ** case-insensitively by name. Wiki pages associated with
2186 ** check-ins and branches are NOT shown, unless -a is given.
2187 **
2188 ** Options:
@@ -2204,11 +2197,10 @@
2197 ** -s|--show-technote-ids The id of the tech note will be listed
2198 ** along side the timestamp. The tech note
2199 ** id will be the first word on each line.
2200 ** This option only applies if the
2201 ** --technote option is also specified.
 
2202 ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in
2203 ** year-month-day form, it may be truncated, the "T" may be replaced by
2204 ** a space, and it may also name a timezone offset from UTC as "-HH:MM"
2205 ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z"
2206 ** means UTC.
2207
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -1896,12 +1896,12 @@
18961896
** COMMAND: test-markdown-render
18971897
**
18981898
** Usage: %fossil test-markdown-render FILE ...
18991899
**
19001900
** Render markdown in FILE as HTML on stdout.
1901
-** Options:
19021901
**
1902
+** Options:
19031903
** --safe Restrict the output to use only "safe" HTML
19041904
** --lint-footnotes Print stats for footnotes-related issues
19051905
*/
19061906
void test_markdown_render(void){
19071907
Blob in, out;
@@ -2769,11 +2769,10 @@
27692769
** This setting controls whether or not unsafe HTML elements
27702770
** (such as SCRIPT or STYLE tags) are allowed in Markdown-formatted
27712771
** documents. Unsafe HTML is disabled by default. If this setting
27722772
** exists and is a string, then letters in that string can enable
27732773
** unsafe HTML in various contexts:
2774
-**
27752774
** - b Unsafe HTML allowed in embedded documentation
27762775
** - f Unsafe HTML allowed in forum posts
27772776
** - t Unsafe HTML allowed in tickets
27782777
** - w Unsafe HTML allowed on wiki pages
27792778
*/
27802779
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -1896,12 +1896,12 @@
1896 ** COMMAND: test-markdown-render
1897 **
1898 ** Usage: %fossil test-markdown-render FILE ...
1899 **
1900 ** Render markdown in FILE as HTML on stdout.
1901 ** Options:
1902 **
 
1903 ** --safe Restrict the output to use only "safe" HTML
1904 ** --lint-footnotes Print stats for footnotes-related issues
1905 */
1906 void test_markdown_render(void){
1907 Blob in, out;
@@ -2769,11 +2769,10 @@
2769 ** This setting controls whether or not unsafe HTML elements
2770 ** (such as SCRIPT or STYLE tags) are allowed in Markdown-formatted
2771 ** documents. Unsafe HTML is disabled by default. If this setting
2772 ** exists and is a string, then letters in that string can enable
2773 ** unsafe HTML in various contexts:
2774 **
2775 ** - b Unsafe HTML allowed in embedded documentation
2776 ** - f Unsafe HTML allowed in forum posts
2777 ** - t Unsafe HTML allowed in tickets
2778 ** - w Unsafe HTML allowed on wiki pages
2779 */
2780
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -1896,12 +1896,12 @@
1896 ** COMMAND: test-markdown-render
1897 **
1898 ** Usage: %fossil test-markdown-render FILE ...
1899 **
1900 ** Render markdown in FILE as HTML on stdout.
 
1901 **
1902 ** Options:
1903 ** --safe Restrict the output to use only "safe" HTML
1904 ** --lint-footnotes Print stats for footnotes-related issues
1905 */
1906 void test_markdown_render(void){
1907 Blob in, out;
@@ -2769,11 +2769,10 @@
2769 ** This setting controls whether or not unsafe HTML elements
2770 ** (such as SCRIPT or STYLE tags) are allowed in Markdown-formatted
2771 ** documents. Unsafe HTML is disabled by default. If this setting
2772 ** exists and is a string, then letters in that string can enable
2773 ** unsafe HTML in various contexts:
 
2774 ** - b Unsafe HTML allowed in embedded documentation
2775 ** - f Unsafe HTML allowed in forum posts
2776 ** - t Unsafe HTML allowed in tickets
2777 ** - w Unsafe HTML allowed on wiki pages
2778 */
2779
-1
--- src/xfer.c
+++ src/xfer.c
@@ -1872,11 +1872,10 @@
18721872
** as necessary to generate an appropriate XFERFILE test case. Then run:
18731873
**
18741874
** fossil test-xfer xferfile.txt
18751875
**
18761876
** Options:
1877
-**
18781877
** --host HOSTNAME Supply a server hostname used to populate
18791878
** g.zBaseURL and similar.
18801879
*/
18811880
void cmd_test_xfer(void){
18821881
const char *zHost;
18831882
--- src/xfer.c
+++ src/xfer.c
@@ -1872,11 +1872,10 @@
1872 ** as necessary to generate an appropriate XFERFILE test case. Then run:
1873 **
1874 ** fossil test-xfer xferfile.txt
1875 **
1876 ** Options:
1877 **
1878 ** --host HOSTNAME Supply a server hostname used to populate
1879 ** g.zBaseURL and similar.
1880 */
1881 void cmd_test_xfer(void){
1882 const char *zHost;
1883
--- src/xfer.c
+++ src/xfer.c
@@ -1872,11 +1872,10 @@
1872 ** as necessary to generate an appropriate XFERFILE test case. Then run:
1873 **
1874 ** fossil test-xfer xferfile.txt
1875 **
1876 ** Options:
 
1877 ** --host HOSTNAME Supply a server hostname used to populate
1878 ** g.zBaseURL and similar.
1879 */
1880 void cmd_test_xfer(void){
1881 const char *zHost;
1882
+2 -2
--- src/xfersetup.c
+++ src/xfersetup.c
@@ -136,12 +136,12 @@
136136
cgi_redirect("xfersetup");
137137
}
138138
}
139139
@ <form action="%R/%s(g.zPath)" method="post"><div>
140140
login_insert_csrf_secret();
141
- @ <p>%s(zDesc)</p>
142
- @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea>
141
+ @ <p><label for="x">%s(zDesc)</label></p>
142
+ @ <textarea id="x" name="x" rows="%d(height)" cols="80">%h(z)</textarea>
143143
@ <p>
144144
@ <input type="submit" name="submit" value="Apply Changes" />
145145
@ <input type="submit" name="clear" value="Revert To Default" />
146146
@ <input type="submit" name="setup" value="Cancel" />
147147
@ </p>
148148
--- src/xfersetup.c
+++ src/xfersetup.c
@@ -136,12 +136,12 @@
136 cgi_redirect("xfersetup");
137 }
138 }
139 @ <form action="%R/%s(g.zPath)" method="post"><div>
140 login_insert_csrf_secret();
141 @ <p>%s(zDesc)</p>
142 @ <textarea name="x" rows="%d(height)" cols="80">%h(z)</textarea>
143 @ <p>
144 @ <input type="submit" name="submit" value="Apply Changes" />
145 @ <input type="submit" name="clear" value="Revert To Default" />
146 @ <input type="submit" name="setup" value="Cancel" />
147 @ </p>
148
--- src/xfersetup.c
+++ src/xfersetup.c
@@ -136,12 +136,12 @@
136 cgi_redirect("xfersetup");
137 }
138 }
139 @ <form action="%R/%s(g.zPath)" method="post"><div>
140 login_insert_csrf_secret();
141 @ <p><label for="x">%s(zDesc)</label></p>
142 @ <textarea id="x" name="x" rows="%d(height)" cols="80">%h(z)</textarea>
143 @ <p>
144 @ <input type="submit" name="submit" value="Apply Changes" />
145 @ <input type="submit" name="clear" value="Revert To Default" />
146 @ <input type="submit" name="setup" value="Cancel" />
147 @ </p>
148
-5
--- src/zip.c
+++ src/zip.c
@@ -870,33 +870,28 @@
870870
** query parameter. Return the archive as the HTTP reply content.
871871
**
872872
** If the NAME contains one "/" then the part before the "/" is taken
873873
** as the TAG and the part after the "/" becomes the true name. Hence,
874874
** the following URLs are all equivalent:
875
-**
876875
** /sqlar/508c42a6398f8/download.sqlar
877876
** /sqlar?r=508c42a6398f8&name=download.sqlar
878877
** /sqlar/download.sqlar?r=508c42a6398f8
879878
** /sqlar?name=508c42a6398f8/download.sqlar
880879
**
881880
** Query parameters:
882
-**
883881
** name=NAME The base name of the output file. The default
884882
** value is a configuration parameter in the project
885883
** settings. A prefix of the name, omitting the
886884
** extension, is used as the top-most directory name.
887
-**
888885
** r=TAG The check-in that is turned into a ZIP archive.
889886
** Defaults to "trunk". This query parameter used to
890887
** be called "uuid" and the older "uuid" name is still
891888
** accepted for backwards compatibility. If this
892889
** query parameter is omitted, the latest "trunk"
893890
** check-in is used.
894
-**
895891
** in=PATTERN Only include files that match the comma-separate
896892
** list of GLOB patterns in PATTERN, as with ex=
897
-**
898893
** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
899894
** comma-separated list of GLOB patterns, where each
900895
** pattern can optionally be quoted using ".." or '..'.
901896
** Any file matching both ex= and in= is excluded.
902897
*/
903898
--- src/zip.c
+++ src/zip.c
@@ -870,33 +870,28 @@
870 ** query parameter. Return the archive as the HTTP reply content.
871 **
872 ** If the NAME contains one "/" then the part before the "/" is taken
873 ** as the TAG and the part after the "/" becomes the true name. Hence,
874 ** the following URLs are all equivalent:
875 **
876 ** /sqlar/508c42a6398f8/download.sqlar
877 ** /sqlar?r=508c42a6398f8&name=download.sqlar
878 ** /sqlar/download.sqlar?r=508c42a6398f8
879 ** /sqlar?name=508c42a6398f8/download.sqlar
880 **
881 ** Query parameters:
882 **
883 ** name=NAME The base name of the output file. The default
884 ** value is a configuration parameter in the project
885 ** settings. A prefix of the name, omitting the
886 ** extension, is used as the top-most directory name.
887 **
888 ** r=TAG The check-in that is turned into a ZIP archive.
889 ** Defaults to "trunk". This query parameter used to
890 ** be called "uuid" and the older "uuid" name is still
891 ** accepted for backwards compatibility. If this
892 ** query parameter is omitted, the latest "trunk"
893 ** check-in is used.
894 **
895 ** in=PATTERN Only include files that match the comma-separate
896 ** list of GLOB patterns in PATTERN, as with ex=
897 **
898 ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
899 ** comma-separated list of GLOB patterns, where each
900 ** pattern can optionally be quoted using ".." or '..'.
901 ** Any file matching both ex= and in= is excluded.
902 */
903
--- src/zip.c
+++ src/zip.c
@@ -870,33 +870,28 @@
870 ** query parameter. Return the archive as the HTTP reply content.
871 **
872 ** If the NAME contains one "/" then the part before the "/" is taken
873 ** as the TAG and the part after the "/" becomes the true name. Hence,
874 ** the following URLs are all equivalent:
 
875 ** /sqlar/508c42a6398f8/download.sqlar
876 ** /sqlar?r=508c42a6398f8&name=download.sqlar
877 ** /sqlar/download.sqlar?r=508c42a6398f8
878 ** /sqlar?name=508c42a6398f8/download.sqlar
879 **
880 ** Query parameters:
 
881 ** name=NAME The base name of the output file. The default
882 ** value is a configuration parameter in the project
883 ** settings. A prefix of the name, omitting the
884 ** extension, is used as the top-most directory name.
 
885 ** r=TAG The check-in that is turned into a ZIP archive.
886 ** Defaults to "trunk". This query parameter used to
887 ** be called "uuid" and the older "uuid" name is still
888 ** accepted for backwards compatibility. If this
889 ** query parameter is omitted, the latest "trunk"
890 ** check-in is used.
 
891 ** in=PATTERN Only include files that match the comma-separate
892 ** list of GLOB patterns in PATTERN, as with ex=
 
893 ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
894 ** comma-separated list of GLOB patterns, where each
895 ** pattern can optionally be quoted using ".." or '..'.
896 ** Any file matching both ex= and in= is excluded.
897 */
898
+11 -11
--- www/customskin.md
+++ www/customskin.md
@@ -103,15 +103,15 @@
103103
In most cases, it is best to leave the Fossil-generated HTML Header
104104
alone. (One exception is when the administrator needs to include links
105105
to additional CSS files.) The configurable part of the skin begins
106106
with the Content Header section which should follow this template:
107107
108
- <div class="header">
108
+ <header class="header">
109109
... top banner and menu bar ...
110110
</div>
111111
112
-Note that `<div class="header">` and `</div>` tags must be included in
112
+Note that `<header class="header">` and `</div>` tags must be included in
113113
the Content Header text of the skin. In other words, you, the
114114
administrator, need to supply that text as part of your skin
115115
customization.
116116
117117
The Fossil-generated Content section immediately follows the Content Header.
@@ -122,11 +122,11 @@
122122
</div>
123123
124124
After the Content is the custom Content Footer section which should
125125
follow this template:
126126
127
- <div class="footer">
127
+ <footer class="footer">
128128
... skin-specific stuff here ...
129129
</div>
130130
131131
As with the Content Header, the template elements of the Content Footer
132132
should appear exactly as they are shown.
@@ -140,11 +140,11 @@
140140
## <a id="mainmenu"></a>Changing the Main Menu Contents
141141
142142
As of Fossil 2.15, the actual text content of the skin’s main menu is no
143143
longer part of the skin proper if you’re using one of the stock skins.
144144
If you look at the Header section of the skin, you’ll find a
145
-`<div class="mainmenu">` element whose contents are set by a short
145
+`<nav class="mainmenu">` element whose contents are set by a short
146146
[TH1](./th1.md) script from the contents of the **Main Menu** section of
147147
the Setup → Configuration screen.
148148
149149
This feature allows the main menu contents to stay the same across
150150
different skins, so you no longer have to reapply menu customizations
@@ -334,16 +334,16 @@
334334
the value of the TH1 variable NAME.
335335
336336
For example, first few lines of a typical Content Header will look
337337
like this:
338338
339
- <div class="header">
339
+ <header class="header">
340340
<div class="title"><h1>$<project_name></h1>$<title>/div>
341341
342342
After variables are substituted by TH1, that will look more like this:
343343
344
- <div class="header">
344
+ <header class="header">
345345
<div class="title"><h1>Project Name</h1>Page Title</div>
346346
347347
As you can see, two TH1 variable substitutions were done.
348348
349349
The same TH1 interpreter is used for both the header and the footer
@@ -375,20 +375,20 @@
375375
376376
The hbmenu.js script requires
377377
the following `<div>` element somewhere in your header, in which to build
378378
the hamburger menu.
379379
380
- <div id='hbdrop'></div>
380
+ <nav id='hbdrop'></nav>
381381
382382
Out of the box, the contents of the panel is populated with the [Site
383383
Map](/sitemap), but only if the panel does not already contain any HTML
384384
elements (that is, not just comments, plain text or non-presentational white
385
-space). So the hamburger menu can be customized by replacing the empty `<div
386
-id='hbdrop'></div>` element with a menu structure knitted according to the
385
+space). So the hamburger menu can be customized by replacing the empty `<nav
386
+id='hbdrop'></nav>` element with a menu structure knitted according to the
387387
following template:
388388
389
- <div id="hbdrop" data-anim-ms="400">
389
+ <nav id="hbdrop" data-anim-ms="400">
390390
<ul class="columns" style="column-width: 20em; column-count: auto">
391391
<!-- NEW GROUP WITH HEADING LINK -->
392392
<li>
393393
<a href="$home$index_page">Link: Home</a>
394394
<ul>
@@ -404,11 +404,11 @@
404404
<li><a href="$home/doc/trunk/www/th1.md">Link: TH1 Scripts</a></li>
405405
</ul>
406406
</li>
407407
<!-- NEXT GROUP GOES HERE -->
408408
</ul>
409
- </div>
409
+ </nav>
410410
411411
The custom `data-anim-ms` attribute can be added to the panel element to direct
412412
the Javascript logic to override the default menu animation duration of 400 ms.
413413
A faster animation duration of 80-200 ms may be preferred for smaller menus. The
414414
animation is disabled by setting the attribute to `"0"`.
415415
--- www/customskin.md
+++ www/customskin.md
@@ -103,15 +103,15 @@
103 In most cases, it is best to leave the Fossil-generated HTML Header
104 alone. (One exception is when the administrator needs to include links
105 to additional CSS files.) The configurable part of the skin begins
106 with the Content Header section which should follow this template:
107
108 <div class="header">
109 ... top banner and menu bar ...
110 </div>
111
112 Note that `<div class="header">` and `</div>` tags must be included in
113 the Content Header text of the skin. In other words, you, the
114 administrator, need to supply that text as part of your skin
115 customization.
116
117 The Fossil-generated Content section immediately follows the Content Header.
@@ -122,11 +122,11 @@
122 </div>
123
124 After the Content is the custom Content Footer section which should
125 follow this template:
126
127 <div class="footer">
128 ... skin-specific stuff here ...
129 </div>
130
131 As with the Content Header, the template elements of the Content Footer
132 should appear exactly as they are shown.
@@ -140,11 +140,11 @@
140 ## <a id="mainmenu"></a>Changing the Main Menu Contents
141
142 As of Fossil 2.15, the actual text content of the skin’s main menu is no
143 longer part of the skin proper if you’re using one of the stock skins.
144 If you look at the Header section of the skin, you’ll find a
145 `<div class="mainmenu">` element whose contents are set by a short
146 [TH1](./th1.md) script from the contents of the **Main Menu** section of
147 the Setup → Configuration screen.
148
149 This feature allows the main menu contents to stay the same across
150 different skins, so you no longer have to reapply menu customizations
@@ -334,16 +334,16 @@
334 the value of the TH1 variable NAME.
335
336 For example, first few lines of a typical Content Header will look
337 like this:
338
339 <div class="header">
340 <div class="title"><h1>$<project_name></h1>$<title>/div>
341
342 After variables are substituted by TH1, that will look more like this:
343
344 <div class="header">
345 <div class="title"><h1>Project Name</h1>Page Title</div>
346
347 As you can see, two TH1 variable substitutions were done.
348
349 The same TH1 interpreter is used for both the header and the footer
@@ -375,20 +375,20 @@
375
376 The hbmenu.js script requires
377 the following `<div>` element somewhere in your header, in which to build
378 the hamburger menu.
379
380 <div id='hbdrop'></div>
381
382 Out of the box, the contents of the panel is populated with the [Site
383 Map](/sitemap), but only if the panel does not already contain any HTML
384 elements (that is, not just comments, plain text or non-presentational white
385 space). So the hamburger menu can be customized by replacing the empty `<div
386 id='hbdrop'></div>` element with a menu structure knitted according to the
387 following template:
388
389 <div id="hbdrop" data-anim-ms="400">
390 <ul class="columns" style="column-width: 20em; column-count: auto">
391 <!-- NEW GROUP WITH HEADING LINK -->
392 <li>
393 <a href="$home$index_page">Link: Home</a>
394 <ul>
@@ -404,11 +404,11 @@
404 <li><a href="$home/doc/trunk/www/th1.md">Link: TH1 Scripts</a></li>
405 </ul>
406 </li>
407 <!-- NEXT GROUP GOES HERE -->
408 </ul>
409 </div>
410
411 The custom `data-anim-ms` attribute can be added to the panel element to direct
412 the Javascript logic to override the default menu animation duration of 400 ms.
413 A faster animation duration of 80-200 ms may be preferred for smaller menus. The
414 animation is disabled by setting the attribute to `"0"`.
415
--- www/customskin.md
+++ www/customskin.md
@@ -103,15 +103,15 @@
103 In most cases, it is best to leave the Fossil-generated HTML Header
104 alone. (One exception is when the administrator needs to include links
105 to additional CSS files.) The configurable part of the skin begins
106 with the Content Header section which should follow this template:
107
108 <header class="header">
109 ... top banner and menu bar ...
110 </div>
111
112 Note that `<header class="header">` and `</div>` tags must be included in
113 the Content Header text of the skin. In other words, you, the
114 administrator, need to supply that text as part of your skin
115 customization.
116
117 The Fossil-generated Content section immediately follows the Content Header.
@@ -122,11 +122,11 @@
122 </div>
123
124 After the Content is the custom Content Footer section which should
125 follow this template:
126
127 <footer class="footer">
128 ... skin-specific stuff here ...
129 </div>
130
131 As with the Content Header, the template elements of the Content Footer
132 should appear exactly as they are shown.
@@ -140,11 +140,11 @@
140 ## <a id="mainmenu"></a>Changing the Main Menu Contents
141
142 As of Fossil 2.15, the actual text content of the skin’s main menu is no
143 longer part of the skin proper if you’re using one of the stock skins.
144 If you look at the Header section of the skin, you’ll find a
145 `<nav class="mainmenu">` element whose contents are set by a short
146 [TH1](./th1.md) script from the contents of the **Main Menu** section of
147 the Setup → Configuration screen.
148
149 This feature allows the main menu contents to stay the same across
150 different skins, so you no longer have to reapply menu customizations
@@ -334,16 +334,16 @@
334 the value of the TH1 variable NAME.
335
336 For example, first few lines of a typical Content Header will look
337 like this:
338
339 <header class="header">
340 <div class="title"><h1>$<project_name></h1>$<title>/div>
341
342 After variables are substituted by TH1, that will look more like this:
343
344 <header class="header">
345 <div class="title"><h1>Project Name</h1>Page Title</div>
346
347 As you can see, two TH1 variable substitutions were done.
348
349 The same TH1 interpreter is used for both the header and the footer
@@ -375,20 +375,20 @@
375
376 The hbmenu.js script requires
377 the following `<div>` element somewhere in your header, in which to build
378 the hamburger menu.
379
380 <nav id='hbdrop'></nav>
381
382 Out of the box, the contents of the panel is populated with the [Site
383 Map](/sitemap), but only if the panel does not already contain any HTML
384 elements (that is, not just comments, plain text or non-presentational white
385 space). So the hamburger menu can be customized by replacing the empty `<nav
386 id='hbdrop'></nav>` element with a menu structure knitted according to the
387 following template:
388
389 <nav id="hbdrop" data-anim-ms="400">
390 <ul class="columns" style="column-width: 20em; column-count: auto">
391 <!-- NEW GROUP WITH HEADING LINK -->
392 <li>
393 <a href="$home$index_page">Link: Home</a>
394 <ul>
@@ -404,11 +404,11 @@
404 <li><a href="$home/doc/trunk/www/th1.md">Link: TH1 Scripts</a></li>
405 </ul>
406 </li>
407 <!-- NEXT GROUP GOES HERE -->
408 </ul>
409 </nav>
410
411 The custom `data-anim-ms` attribute can be added to the panel element to direct
412 the Javascript logic to override the default menu animation duration of 400 ms.
413 A faster animation duration of 80-200 ms may be preferred for smaller menus. The
414 animation is disabled by setting the attribute to `"0"`.
415

Keyboard Shortcuts

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