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
Commit
1f231db380dd1d3965f3c3360450ee2614b35e90152d620fa8b40fae804f9d38
Parent
0d61fd23101299a…
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
+1
-1
| --- skins/ardoise/css.txt | ||
| +++ skins/ardoise/css.txt | ||
| @@ -728,11 +728,11 @@ | ||
| 728 | 728 | border-radius: 5px |
| 729 | 729 | } |
| 730 | 730 | .mainmenu li:hover a { |
| 731 | 731 | color: #000 |
| 732 | 732 | } |
| 733 | -div#hbdrop { | |
| 733 | +nav#hbdrop { | |
| 734 | 734 | background-color: #161819; |
| 735 | 735 | border-radius: 15px; |
| 736 | 736 | display: none; |
| 737 | 737 | width: 100%; |
| 738 | 738 | position: absolute; |
| 739 | 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 | 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 |
+2
-2
| --- skins/ardoise/footer.txt | ||
| +++ skins/ardoise/footer.txt | ||
| @@ -3,13 +3,13 @@ | ||
| 3 | 3 | html "</div>" |
| 4 | 4 | } |
| 5 | 5 | </th1> |
| 6 | 6 | </div> <!-- end div container --> |
| 7 | 7 | </div> <!-- end div middle max-full-width --> |
| 8 | -<div class="footer"> | |
| 8 | +<footer class="footer"> | |
| 9 | 9 | <div class="container"> |
| 10 | 10 | <div class="pull-right"> |
| 11 | 11 | <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> |
| 12 | 12 | </div> |
| 13 | 13 | This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s |
| 14 | 14 | </div> |
| 15 | -</div> | |
| 15 | +</footer> | |
| 16 | 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 | <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 |
+5
-5
| --- skins/ardoise/header.txt | ||
| +++ skins/ardoise/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="container"> |
| 3 | 3 | <div class="login pull-right"> |
| 4 | 4 | <th1> |
| 5 | 5 | if {[info exists login]} { |
| 6 | 6 | html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n" |
| @@ -18,11 +18,11 @@ | ||
| 18 | 18 | </th1> |
| 19 | 19 | <small> $<title></small></h1> |
| 20 | 20 | </div> |
| 21 | 21 | |
| 22 | 22 | <!-- Main Menu --> |
| 23 | - <div class="mainmenu"> | |
| 23 | + <nav class="mainmenu"> | |
| 24 | 24 | <ul> |
| 25 | 25 | <th1> |
| 26 | 26 | html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a></li>\n" |
| 27 | 27 | builtin_request_js hbmenu.js |
| 28 | 28 | set once 1 |
| @@ -35,16 +35,16 @@ | ||
| 35 | 35 | html "<li class='$class'>" |
| 36 | 36 | if {[string match /* $url]} {set url $home$url} |
| 37 | 37 | html "<a href='$url'>$name</a></li>\n" |
| 38 | 38 | } |
| 39 | 39 | </th1></ul> |
| 40 | - </div> <!-- end div mainmenu --> | |
| 41 | - <div id="hbdrop"></div> | |
| 40 | + </nav> <!-- end div mainmenu --> | |
| 41 | + <nav id='hbdrop' title="Sitemap"></nav> | |
| 42 | 42 | </div> <!-- end div container --> |
| 43 | - </div> <!-- end div header --> | |
| 43 | + </header> <!-- end div header --> | |
| 44 | 44 | <div class="middle max-full-width"> |
| 45 | 45 | <div class="container"> |
| 46 | 46 | <th1> |
| 47 | 47 | if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} { |
| 48 | 48 | html "<div class=\"artifact_content\">" |
| 49 | 49 | } |
| 50 | 50 | </th1> |
| 51 | 51 |
| --- 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> $<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'>☰</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> $<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'>☰</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 |
+11
-11
| --- skins/black_and_white/css.txt | ||
| +++ skins/black_and_white/css.txt | ||
| @@ -49,11 +49,11 @@ | ||
| 49 | 49 | font-weight: bold; |
| 50 | 50 | white-space: nowrap; |
| 51 | 51 | } |
| 52 | 52 | |
| 53 | 53 | /* The header across the top of the page */ |
| 54 | -div.header { | |
| 54 | +header.header { | |
| 55 | 55 | margin:10px 0px 10px 0px; |
| 56 | 56 | padding:1px 0px 0px 20px; |
| 57 | 57 | border-style:solid; |
| 58 | 58 | border-color:black; |
| 59 | 59 | border-width:1px 0px; |
| @@ -60,11 +60,11 @@ | ||
| 60 | 60 | background-color:#eee; |
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | /* The main menu bar that appears at the top left of the page beneath |
| 64 | 64 | ** the header. Width must be co-ordinated with the container below */ |
| 65 | -div.mainmenu { | |
| 65 | +nav.mainmenu { | |
| 66 | 66 | float: left; |
| 67 | 67 | margin-left: 10px; |
| 68 | 68 | margin-right: 20px; |
| 69 | 69 | font-size: 0.9em; |
| 70 | 70 | font-weight: bold; |
| @@ -73,20 +73,20 @@ | ||
| 73 | 73 | border:1px solid #999; |
| 74 | 74 | width:6em; |
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | /* Main menu is now a list */ |
| 78 | -div.mainmenu ul { | |
| 78 | +nav.mainmenu ul { | |
| 79 | 79 | padding: 0; |
| 80 | 80 | list-style:none; |
| 81 | 81 | } |
| 82 | -div.mainmenu a, div.mainmenu a:visited{ | |
| 82 | +nav.mainmenu a, nav.mainmenu a:visited{ | |
| 83 | 83 | padding: 1px 10px 1px 10px; |
| 84 | 84 | color: #333; |
| 85 | 85 | text-decoration: none; |
| 86 | 86 | } |
| 87 | -div.mainmenu a:hover { | |
| 87 | +nav.mainmenu a:hover { | |
| 88 | 88 | color: #eee; |
| 89 | 89 | background-color: #333; |
| 90 | 90 | } |
| 91 | 91 | |
| 92 | 92 | /* Container for the sub-menu and content so they don't spread |
| @@ -94,33 +94,33 @@ | ||
| 94 | 94 | #container { |
| 95 | 95 | padding-left: 9em; |
| 96 | 96 | } |
| 97 | 97 | |
| 98 | 98 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 99 | -div.submenu, div.sectionmenu { | |
| 99 | +nav.submenu, div.sectionmenu { | |
| 100 | 100 | padding: 3px 10px 3px 10px; |
| 101 | 101 | font-size: 0.9em; |
| 102 | 102 | text-align: center; |
| 103 | 103 | border:1px solid #999; |
| 104 | 104 | border-width:1px 0px; |
| 105 | 105 | background-color: #eee; |
| 106 | 106 | color: #333; |
| 107 | 107 | } |
| 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 { | |
| 110 | 110 | padding: 3px 10px 3px 10px; |
| 111 | 111 | color: #333; |
| 112 | 112 | text-decoration: none; |
| 113 | 113 | } |
| 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 { | |
| 115 | 115 | color: #eee; |
| 116 | 116 | background-color: #333; |
| 117 | 117 | } |
| 118 | 118 | |
| 119 | 119 | /* All page content from the bottom of the menu or submenu down to |
| 120 | 120 | ** the footer */ |
| 121 | -div.content { | |
| 121 | +main.content { | |
| 122 | 122 | padding: 2ex 1ex 0ex 2ex; |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | 125 | /* Some pages have section dividers */ |
| 126 | 126 | div.section { |
| @@ -149,11 +149,11 @@ | ||
| 149 | 149 | color: #333; |
| 150 | 150 | white-space: nowrap; |
| 151 | 151 | } |
| 152 | 152 | |
| 153 | 153 | /* The footer at the very bottom of the page */ |
| 154 | -div.footer { | |
| 154 | +footer.footer { | |
| 155 | 155 | font-size: 0.8em; |
| 156 | 156 | margin-top: 12px; |
| 157 | 157 | padding: 5px 10px 5px 10px; |
| 158 | 158 | text-align: right; |
| 159 | 159 | background-color: #eee; |
| 160 | 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 | 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 |
+2
-2
| --- skins/black_and_white/footer.txt | ||
| +++ skins/black_and_white/footer.txt | ||
| @@ -1,3 +1,3 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | Fossil $release_version $manifest_version $manifest_date |
| 3 | -</div> | |
| 3 | +</footer> | |
| 4 | 4 |
| --- 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 |
+4
-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"> | |
| 2 | 2 | <div class="logo"> |
| 3 | 3 | <img src="$logo_image_url" alt="logo"> |
| 4 | 4 | <br />$<project_name> |
| 5 | 5 | </div> |
| 6 | 6 | <div class="title">$<title></div> |
| @@ -9,12 +9,12 @@ | ||
| 9 | 9 | puts "Logged in as $login" |
| 10 | 10 | } else { |
| 11 | 11 | puts "Not logged in" |
| 12 | 12 | } |
| 13 | 13 | </th1></div> |
| 14 | -</div> | |
| 15 | -<div class="mainmenu"> | |
| 14 | +</header> | |
| 15 | +<nav class="mainmenu"> | |
| 16 | 16 | <th1> |
| 17 | 17 | set sitemap 0 |
| 18 | 18 | foreach {name url expr class} $mainmenu { |
| 19 | 19 | if {![capexpr $expr]} continue |
| 20 | 20 | if {[string match /* $url]} {set url $home$url} |
| @@ -22,6 +22,6 @@ | ||
| 22 | 22 | if {[string match /sitemap $url]} {set sitemap 1} |
| 23 | 23 | } |
| 24 | 24 | if {!$sitemap} { |
| 25 | 25 | html "<a href='$home/sitemap'>Sitemap</a>\n" |
| 26 | 26 | } |
| 27 | -</th1></div> | |
| 27 | +</th1></nav> | |
| 28 | 28 |
| --- 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 |
+3
-3
| --- skins/blitz/css.txt | ||
| +++ skins/blitz/css.txt | ||
| @@ -866,25 +866,25 @@ | ||
| 866 | 866 | background-repeat: no-repeat; |
| 867 | 867 | background-position: center bottom; |
| 868 | 868 | } |
| 869 | 869 | |
| 870 | 870 | .mainmenu li a, |
| 871 | -div#hbdrop a { | |
| 871 | +nav#hbdrop a { | |
| 872 | 872 | color: #3b5c6b; |
| 873 | 873 | padding: 10px 15px; |
| 874 | 874 | } |
| 875 | 875 | |
| 876 | 876 | .mainmenu li.active a { |
| 877 | 877 | font-weight: bold; |
| 878 | 878 | } |
| 879 | 879 | |
| 880 | 880 | .mainmenu li:hover |
| 881 | -div#hbdrop a:hover { | |
| 881 | +nav#hbdrop a:hover { | |
| 882 | 882 | background-color: #eee; |
| 883 | 883 | } |
| 884 | 884 | |
| 885 | -div#hbdrop { | |
| 885 | +nav#hbdrop { | |
| 886 | 886 | background-color: white; |
| 887 | 887 | border: 2px solid #ccc; |
| 888 | 888 | display: none; |
| 889 | 889 | width: 100%; |
| 890 | 890 | position: absolute; |
| 891 | 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 | 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 |
+2
-2
| --- skins/blitz/footer.txt | ||
| +++ skins/blitz/footer.txt | ||
| @@ -1,10 +1,10 @@ | ||
| 1 | 1 | </div> <!-- end div container --> |
| 2 | 2 | </div> <!-- end div middle max-full-width --> |
| 3 | -<div class="footer"> | |
| 3 | +<footer class="footer"> | |
| 4 | 4 | <div class="container"> |
| 5 | 5 | <div class="pull-right"> |
| 6 | 6 | <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> |
| 7 | 7 | </div> |
| 8 | 8 | This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s |
| 9 | 9 | </div> |
| 10 | -</div> | |
| 10 | +</footer> | |
| 11 | 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 | <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 |
+5
-5
| --- skins/blitz/header.txt | ||
| +++ skins/blitz/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="container"> |
| 3 | 3 | |
| 4 | 4 | <!-- Header --> |
| 5 | 5 | <div class="login pull-right"> |
| 6 | 6 | <th1> |
| @@ -20,11 +20,11 @@ | ||
| 20 | 20 | </th1> |
| 21 | 21 | <small> $<title></small></h1> |
| 22 | 22 | </div> |
| 23 | 23 | |
| 24 | 24 | <!-- Main Menu --> |
| 25 | - <div class="mainmenu"> | |
| 25 | + <nav class="mainmenu"> | |
| 26 | 26 | <ul><th1> |
| 27 | 27 | html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a></li>\n" |
| 28 | 28 | builtin_request_js hbmenu.js |
| 29 | 29 | set once 1 |
| 30 | 30 | foreach {name url expr class} $mainmenu { |
| @@ -36,11 +36,11 @@ | ||
| 36 | 36 | html "<li class='$class'>" |
| 37 | 37 | if {[string match /* $url]} {set url $home$url} |
| 38 | 38 | html "<a href='$url'>$name</a></li>\n" |
| 39 | 39 | } |
| 40 | 40 | </th1></ul> |
| 41 | - </div> <!-- end div mainmenu --> | |
| 42 | - <div id="hbdrop"></div> | |
| 41 | + </nav> <!-- end div mainmenu --> | |
| 42 | + <nav id='hbdrop' title="Sitemap"></nav> | |
| 43 | 43 | </div> <!-- end div container --> |
| 44 | - </div> <!-- end div header --> | |
| 44 | + </header> <!-- end div header --> | |
| 45 | 45 | <div class="middle max-full-width"> |
| 46 | 46 | <div class="container"> |
| 47 | 47 |
| --- 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> $<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'>☰</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> $<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'>☰</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 |
+11
-11
| --- skins/darkmode/css.txt | ||
| +++ skins/darkmode/css.txt | ||
| @@ -34,28 +34,28 @@ | ||
| 34 | 34 | div.leftoftitle { |
| 35 | 35 | visibility: hidden; |
| 36 | 36 | } |
| 37 | 37 | |
| 38 | 38 | /* The header across the top of the page */ |
| 39 | -div.header { | |
| 39 | +header.header { | |
| 40 | 40 | display: table; |
| 41 | 41 | width: 100%; |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | /* The main menu bar that appears at the top of the page beneath |
| 45 | 45 | ** the header */ |
| 46 | -div.mainmenu { | |
| 46 | +nav.mainmenu { | |
| 47 | 47 | padding: 0.25em 0.5em; |
| 48 | 48 | font-size: 0.9em; |
| 49 | 49 | font-weight: bold; |
| 50 | 50 | text-align: center; |
| 51 | 51 | border-top-left-radius: 0.5em; |
| 52 | 52 | border-top-right-radius: 0.5em; |
| 53 | 53 | border-bottom: 1px dotted rgba(200,200,200,0.3); |
| 54 | 54 | z-index: 21; /* just above hbdrop */ |
| 55 | 55 | } |
| 56 | -div#hbdrop { | |
| 56 | +nav#hbdrop { | |
| 57 | 57 | background-color: #1f1f1f; |
| 58 | 58 | border: 2px solid #303536; |
| 59 | 59 | border-radius: 0 0 0.5em 0.5em; |
| 60 | 60 | display: none; |
| 61 | 61 | left: 2em; |
| @@ -62,16 +62,16 @@ | ||
| 62 | 62 | width: calc(100% - 4em); |
| 63 | 63 | position: absolute; |
| 64 | 64 | z-index: 20; /* just below mainmenu, but above timeline bubbles */ |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | -div.mainmenu, div.submenu, div.sectionmenu { | |
| 67 | +nav.mainmenu, nav.submenu, div.sectionmenu { | |
| 68 | 68 | color: #ffffffcc; |
| 69 | 69 | background-color: #303536/*#0000ff60*/; |
| 70 | 70 | } |
| 71 | 71 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 72 | -div.submenu, div.sectionmenu { | |
| 72 | +nav.submenu, div.sectionmenu { | |
| 73 | 73 | padding: 0.15em 0.5em 0.15em 0; |
| 74 | 74 | font-size: 0.9em; |
| 75 | 75 | text-align: center; |
| 76 | 76 | border-bottom-left-radius: 0.5em; |
| 77 | 77 | border-bottom-right-radius: 0.5em; |
| @@ -80,16 +80,16 @@ | ||
| 80 | 80 | color: rgba(127, 201, 255, 0.9); |
| 81 | 81 | display: inline; |
| 82 | 82 | text-decoration: none; |
| 83 | 83 | } |
| 84 | 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 { | |
| 85 | +nav.mainmenu a, nav.submenu a, | |
| 86 | +div.sectionmenu>a.button, nav.submenu label, | |
| 87 | +footer.footer a { | |
| 88 | 88 | padding: 0.15em 0.5em; |
| 89 | 89 | } |
| 90 | -div.mainmenu a.active { | |
| 90 | +nav.mainmenu a.active { | |
| 91 | 91 | border-bottom: 1px solid #FF4500f0; |
| 92 | 92 | } |
| 93 | 93 | a:hover, |
| 94 | 94 | a:visited:hover { |
| 95 | 95 | background-color: #FF4500f0; |
| @@ -137,11 +137,11 @@ | ||
| 137 | 137 | border-color: #888; |
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | /* All page content from the bottom of the menu or submenu down to |
| 141 | 141 | ** the footer */ |
| 142 | -div.content { | |
| 142 | +main.content { | |
| 143 | 143 | padding: 0ex 1ex 1ex 1ex; |
| 144 | 144 | } |
| 145 | 145 | |
| 146 | 146 | /* Some pages have section dividers */ |
| 147 | 147 | div.section { |
| @@ -168,11 +168,11 @@ | ||
| 168 | 168 | clear: left; |
| 169 | 169 | white-space: nowrap; |
| 170 | 170 | } |
| 171 | 171 | |
| 172 | 172 | /* The footer at the very bottom of the page */ |
| 173 | -div.footer { | |
| 173 | +footer.footer { | |
| 174 | 174 | clear: both; |
| 175 | 175 | font-size: 0.8em; |
| 176 | 176 | padding: 0.15em 0.5em; |
| 177 | 177 | text-align: right; |
| 178 | 178 | background-color: #303536/*#0000ff60*/; |
| 179 | 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 | 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 |
+2
-2
| --- skins/darkmode/footer.txt | ||
| +++ skins/darkmode/footer.txt | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | <div class="container"> |
| 3 | 3 | <div class="pull-right"> |
| 4 | 4 | <a href="https://www.fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> |
| 5 | 5 | </div> |
| 6 | 6 | This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s |
| 7 | 7 | </div> |
| 8 | -</div> | |
| 8 | +</footer> | |
| 9 | 9 |
| --- 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 |
+5
-5
| --- skins/darkmode/header.txt | ||
| +++ skins/darkmode/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="status leftoftitle"><th1> |
| 3 | 3 | if {[info exists login]} { |
| 4 | 4 | set logintext "<a href='$home/login'>$login</a>\n" |
| 5 | 5 | } else { |
| 6 | 6 | set logintext "<a href='$home/login'>Login</a>\n" |
| @@ -9,12 +9,12 @@ | ||
| 9 | 9 | </th1></div> |
| 10 | 10 | <div class="title">$<title></div> |
| 11 | 11 | <div class="status"><nobr><th1> |
| 12 | 12 | html $logintext |
| 13 | 13 | </th1></nobr></div> |
| 14 | -</div> | |
| 15 | -<div class="mainmenu"> | |
| 14 | +</header> | |
| 15 | +<nav class="mainmenu"> | |
| 16 | 16 | <th1> |
| 17 | 17 | html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" |
| 18 | 18 | builtin_request_js hbmenu.js |
| 19 | 19 | foreach {name url expr class} $mainmenu { |
| 20 | 20 | if {![capexpr $expr]} continue |
| @@ -24,7 +24,7 @@ | ||
| 24 | 24 | } |
| 25 | 25 | set url $home$url |
| 26 | 26 | } |
| 27 | 27 | html "<a href='$url' class='$class'>$name</a>\n" |
| 28 | 28 | } |
| 29 | -</th1></div> | |
| 30 | -<div id='hbdrop'></div> | |
| 29 | +</th1></nav> | |
| 30 | +<nav id='hbdrop' title="Sitemap"></nav> | |
| 31 | 31 |
| --- 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'>☰</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'>☰</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 |
+28
-9
| --- skins/default/css.txt | ||
| +++ skins/default/css.txt | ||
| @@ -9,31 +9,31 @@ | ||
| 9 | 9 | -mx-text-size-adjust: none; |
| 10 | 10 | -webkit-text-size-adjust: none; |
| 11 | 11 | } |
| 12 | 12 | |
| 13 | 13 | a { |
| 14 | - color: #4183C4; | |
| 14 | + color: #2D5486; | |
| 15 | 15 | text-decoration: none; |
| 16 | 16 | } |
| 17 | 17 | a:hover { |
| 18 | - color: #4183C4; | |
| 18 | + color: #2D5486; | |
| 19 | 19 | text-decoration: underline; |
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | |
| 23 | 23 | /* Page title, above menu bars */ |
| 24 | 24 | |
| 25 | 25 | .title { |
| 26 | - color: #4183C4; | |
| 26 | + color: #3A76BB; | |
| 27 | 27 | float: left; |
| 28 | 28 | } |
| 29 | 29 | .title h1 { |
| 30 | 30 | display: inline; |
| 31 | 31 | } |
| 32 | 32 | .title h1:after { |
| 33 | 33 | content: " / "; |
| 34 | - color: #777; | |
| 34 | + color: #6B6B6B; | |
| 35 | 35 | font-weight: normal; |
| 36 | 36 | } |
| 37 | 37 | .status { |
| 38 | 38 | float: right; |
| 39 | 39 | font-size: 0.7em; |
| @@ -53,19 +53,19 @@ | ||
| 53 | 53 | white-space: nowrap; |
| 54 | 54 | z-index: 21; /* just above hbdrop */ |
| 55 | 55 | } |
| 56 | 56 | .mainmenu a { |
| 57 | 57 | text-decoration: none; |
| 58 | - color: #777; | |
| 58 | + color: #6B6B6B; | |
| 59 | 59 | border-right: 1px solid #eaeaea; |
| 60 | 60 | } |
| 61 | 61 | .mainmenu a.active, |
| 62 | 62 | .mainmenu a:hover { |
| 63 | 63 | color: #000; |
| 64 | 64 | border-bottom: 2px solid #D26911; |
| 65 | 65 | } |
| 66 | -div#hbdrop { | |
| 66 | +nav#hbdrop { | |
| 67 | 67 | background-color: white; |
| 68 | 68 | border: 1px solid black; |
| 69 | 69 | border-top: white; |
| 70 | 70 | border-radius: 0 0 0.5em 0.5em; |
| 71 | 71 | display: none; |
| @@ -83,11 +83,11 @@ | ||
| 83 | 83 | border-bottom: 1px solid #ccc; |
| 84 | 84 | } |
| 85 | 85 | .submenu a, .submenu label { |
| 86 | 86 | padding: 10px 11px; |
| 87 | 87 | text-decoration: none; |
| 88 | - color: #777; | |
| 88 | + color: #6B6B6B; | |
| 89 | 89 | } |
| 90 | 90 | .submenu label { |
| 91 | 91 | white-space: nowrap; |
| 92 | 92 | } |
| 93 | 93 | .submenu a:hover, .submenu label:hover { |
| @@ -95,16 +95,35 @@ | ||
| 95 | 95 | border: 1px solid #ccc; |
| 96 | 96 | border-radius: 5px; |
| 97 | 97 | color: #000; |
| 98 | 98 | } |
| 99 | 99 | span.submenuctrl, span.submenuctrl input, select.submenuctrl { |
| 100 | - color: #777; | |
| 100 | + color: #6B6B6B; | |
| 101 | 101 | } |
| 102 | 102 | span.submenuctrl { |
| 103 | 103 | white-space: nowrap; |
| 104 | 104 | } |
| 105 | 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 | +} | |
| 106 | 125 | |
| 107 | 126 | /* Main document area; elements common to most pages. */ |
| 108 | 127 | |
| 109 | 128 | .content { |
| 110 | 129 | padding-top: 10px; |
| @@ -156,11 +175,11 @@ | ||
| 156 | 175 | .footer { |
| 157 | 176 | border-top: 1px solid #ccc; |
| 158 | 177 | padding: 10px; |
| 159 | 178 | font-size: 0.7em; |
| 160 | 179 | margin-top: 10px; |
| 161 | - color: #ccc; | |
| 180 | + color: #757575; | |
| 162 | 181 | } |
| 163 | 182 | |
| 164 | 183 | /* Forum */ |
| 165 | 184 | |
| 166 | 185 | .forum a:visited { |
| 167 | 186 |
| --- 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 |
+2
-2
| --- skins/default/footer.txt | ||
| +++ skins/default/footer.txt | ||
| @@ -1,5 +1,5 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | This page was generated in about |
| 3 | 3 | <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by |
| 4 | 4 | Fossil $release_version $manifest_version $manifest_date |
| 5 | -</div> | |
| 5 | +</footer> | |
| 6 | 6 |
| --- 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 |
+7
-7
| --- skins/default/header.txt | ||
| +++ skins/default/header.txt | ||
| @@ -1,18 +1,18 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="title"><h1>$<project_name></h1>$<title></div> |
| 3 | 3 | <div class="status"><th1> |
| 4 | 4 | if {[info exists login]} { |
| 5 | - html "<a href='$home/login'>$login</a>\n" | |
| 5 | + html "<a href='$home/login' title='Logout'>$login</a>\n" | |
| 6 | 6 | } else { |
| 7 | 7 | html "<a href='$home/login'>Login</a>\n" |
| 8 | 8 | } |
| 9 | 9 | </th1></div> |
| 10 | -</div> | |
| 11 | -<div class="mainmenu"> | |
| 10 | +</header> | |
| 11 | +<nav class="mainmenu" title="Main Menu"> | |
| 12 | 12 | <th1> |
| 13 | -html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" | |
| 13 | +html "<a id='hbbtn' href='$home/sitemap' title='Site Map'>☰</a>" | |
| 14 | 14 | builtin_request_js hbmenu.js |
| 15 | 15 | foreach {name url expr class} $mainmenu { |
| 16 | 16 | if {![capexpr $expr]} continue |
| 17 | 17 | if {[string match /* $url]} { |
| 18 | 18 | if {[string match $url\[/?#\]* /$current_page/]} { |
| @@ -20,7 +20,7 @@ | ||
| 20 | 20 | } |
| 21 | 21 | set url $home$url |
| 22 | 22 | } |
| 23 | 23 | html "<a href='$url' class='$class'>$name</a>\n" |
| 24 | 24 | } |
| 25 | -</th1></div> | |
| 26 | -<div id='hbdrop'></div> | |
| 25 | +</th1></nav> | |
| 26 | +<nav id='hbdrop' title="Sitemap"></nav> | |
| 27 | 27 |
| --- 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'>☰</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'>☰</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 |
+10
-10
| --- skins/eagle/css.txt | ||
| +++ skins/eagle/css.txt | ||
| @@ -47,18 +47,18 @@ | ||
| 47 | 47 | font-weight: bold; |
| 48 | 48 | white-space: nowrap; |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 | /* The header across the top of the page */ |
| 52 | -div.header { | |
| 52 | +header.header { | |
| 53 | 53 | display: table; |
| 54 | 54 | width: 100%; |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | 57 | /* The main menu bar that appears at the top of the page beneath |
| 58 | 58 | ** the header */ |
| 59 | -div.mainmenu { | |
| 59 | +nav.mainmenu { | |
| 60 | 60 | padding: 5px 10px 5px 10px; |
| 61 | 61 | font-size: 0.9em; |
| 62 | 62 | font-weight: bold; |
| 63 | 63 | text-align: center; |
| 64 | 64 | letter-spacing: 1px; |
| @@ -66,11 +66,11 @@ | ||
| 66 | 66 | border-top-left-radius: 8px; |
| 67 | 67 | border-top-right-radius: 8px; |
| 68 | 68 | color: white; |
| 69 | 69 | } |
| 70 | 70 | |
| 71 | -div#hbdrop { | |
| 71 | +nav#hbdrop { | |
| 72 | 72 | background-color: #485D7B; |
| 73 | 73 | border-radius: 0 0 15px 15px; |
| 74 | 74 | border-left: 0.5em solid #76869d; |
| 75 | 75 | border-bottom: 1.2em solid #76869d; |
| 76 | 76 | display: none; |
| @@ -79,33 +79,33 @@ | ||
| 79 | 79 | z-index: 20; |
| 80 | 80 | } |
| 81 | 81 | |
| 82 | 82 | |
| 83 | 83 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 84 | -div.submenu, div.sectionmenu { | |
| 84 | +nav.submenu, div.sectionmenu { | |
| 85 | 85 | padding: 3px 10px 3px 0px; |
| 86 | 86 | font-size: 0.9em; |
| 87 | 87 | font-weight: bold; |
| 88 | 88 | text-align: center; |
| 89 | 89 | background-color: #485D7B; |
| 90 | 90 | color: white; |
| 91 | 91 | } |
| 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, | |
| 93 | 93 | div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, |
| 94 | -div.submenu label { | |
| 94 | +nav.submenu label { | |
| 95 | 95 | padding: 3px 10px 3px 10px; |
| 96 | 96 | color: white; |
| 97 | 97 | text-decoration: none; |
| 98 | 98 | } |
| 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 { | |
| 101 | 101 | text-decoration: underline; |
| 102 | 102 | } |
| 103 | 103 | |
| 104 | 104 | /* All page content from the bottom of the menu or submenu down to |
| 105 | 105 | ** the footer */ |
| 106 | -div.content { | |
| 106 | +main.content { | |
| 107 | 107 | padding: 0ex 1ex 0ex 2ex; |
| 108 | 108 | } |
| 109 | 109 | |
| 110 | 110 | /* Some pages have section dividers */ |
| 111 | 111 | div.section { |
| @@ -131,11 +131,11 @@ | ||
| 131 | 131 | clear: left; |
| 132 | 132 | white-space: nowrap; |
| 133 | 133 | } |
| 134 | 134 | |
| 135 | 135 | /* The footer at the very bottom of the page */ |
| 136 | -div.footer { | |
| 136 | +footer.footer { | |
| 137 | 137 | clear: both; |
| 138 | 138 | font-size: 0.8em; |
| 139 | 139 | margin-top: 12px; |
| 140 | 140 | padding: 5px 10px 5px 10px; |
| 141 | 141 | text-align: right; |
| 142 | 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 | 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 |
+2
-2
| --- skins/eagle/footer.txt | ||
| +++ skins/eagle/footer.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | <th1> |
| 3 | 3 | proc getTclVersion {} { |
| 4 | 4 | if {[catch {tclEval info patchlevel} tclVersion] == 0} { |
| 5 | 5 | return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion" |
| 6 | 6 | } |
| @@ -19,6 +19,6 @@ | ||
| 19 | 19 | <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by |
| 20 | 20 | <a href="$fossilUrl/">Fossil</a> |
| 21 | 21 | version $release_version $tclVersion |
| 22 | 22 | <a href="$fossilUrl/index.html/info/$version">$manifest_version</a> |
| 23 | 23 | <a href="$fossilUrl/index.html/timeline?c=$fossilDate&y=ci">$manifest_date</a> |
| 24 | -</div> | |
| 24 | +</footer> | |
| 25 | 25 |
| --- 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&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&y=ci">$manifest_date</a> |
| 24 | </footer> |
| 25 |
+5
-5
| --- skins/eagle/header.txt | ||
| +++ skins/eagle/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="logo"> |
| 3 | 3 | <th1> |
| 4 | 4 | ## |
| 5 | 5 | ## NOTE: The purpose of this procedure is to take the base URL of the |
| 6 | 6 | ## Fossil project and return the root of the entire web site using |
| @@ -76,11 +76,11 @@ | ||
| 76 | 76 | puts "Logged in as $login" |
| 77 | 77 | } else { |
| 78 | 78 | puts "Not logged in" |
| 79 | 79 | } |
| 80 | 80 | </th1></nobr><small><div id="clock"></div></small></div> |
| 81 | -</div> | |
| 81 | +</header> | |
| 82 | 82 | <th1>html "<script nonce='$nonce'>"</th1> |
| 83 | 83 | (function updateClock(){ |
| 84 | 84 | var e = document.getElementById("clock"); |
| 85 | 85 | if(!e) return; |
| 86 | 86 | if(!updateClock.fmt){ |
| @@ -95,15 +95,15 @@ | ||
| 95 | 95 | updateClock.fmt(d.getUTCHours()) + ':' + |
| 96 | 96 | updateClock.fmt(d.getUTCMinutes()); |
| 97 | 97 | setTimeout(updateClock,(60-d.getUTCSeconds())*1000); |
| 98 | 98 | })(); |
| 99 | 99 | </script> |
| 100 | -<div class="mainmenu"><th1> | |
| 100 | +<nav class="mainmenu"><th1> | |
| 101 | 101 | html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>\n" |
| 102 | 102 | builtin_request_js hbmenu.js |
| 103 | 103 | foreach {name url expr class} $mainmenu { |
| 104 | 104 | if {![capexpr $expr]} continue |
| 105 | 105 | if {[string match /* $url]} {set url $home$url} |
| 106 | 106 | html "<a href='$url' class='$class'>$name</a>\n" |
| 107 | 107 | } |
| 108 | -</th1></div> | |
| 109 | -<div id="hbdrop"></div> | |
| 108 | +</th1></nav> | |
| 109 | +<nav id='hbdrop' title="Sitemap"></nav> | |
| 110 | 110 |
| --- 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'>☰</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'>☰</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 |
+18
-18
| --- skins/khaki/css.txt | ||
| +++ skins/khaki/css.txt | ||
| @@ -41,28 +41,28 @@ | ||
| 41 | 41 | font-weight: bold; |
| 42 | 42 | white-space: nowrap; |
| 43 | 43 | } |
| 44 | 44 | |
| 45 | 45 | /* The header across the top of the page */ |
| 46 | -div.header { | |
| 46 | +header.header { | |
| 47 | 47 | display: table; |
| 48 | 48 | width: 100%; |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 | /* The main menu bar that appears at the top of the page beneath |
| 52 | 52 | ** the header */ |
| 53 | -div.mainmenu { | |
| 53 | +nav.mainmenu { | |
| 54 | 54 | padding: 5px 10px 5px 10px; |
| 55 | 55 | font-size: 0.9em; |
| 56 | 56 | font-weight: bold; |
| 57 | 57 | text-align: center; |
| 58 | 58 | letter-spacing: 1px; |
| 59 | 59 | background-color: #a09048; |
| 60 | 60 | color: black; |
| 61 | 61 | z-index: 21; /* just above hbdrop */ |
| 62 | 62 | } |
| 63 | -div#hbdrop { | |
| 63 | +nav#hbdrop { | |
| 64 | 64 | background-color: #fef3bc; |
| 65 | 65 | border: 2px solid #a09048; |
| 66 | 66 | border-radius: 0 0 0.5em 0.5em; |
| 67 | 67 | display: none; |
| 68 | 68 | left: 2em; |
| @@ -72,39 +72,39 @@ | ||
| 72 | 72 | z-index: 20; /* just below mainmenu, but above timeline bubbles */ |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | 75 | |
| 76 | 76 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 77 | -div.submenu, div.sectionmenu { | |
| 77 | +nav.submenu, div.sectionmenu { | |
| 78 | 78 | padding: 3px 10px 3px 0px; |
| 79 | 79 | font-size: 0.9em; |
| 80 | 80 | text-align: center; |
| 81 | 81 | background-color: #c0af58; |
| 82 | 82 | color: white; |
| 83 | 83 | } |
| 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, | |
| 85 | 85 | div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, |
| 86 | -div.submenu label { | |
| 86 | +nav.submenu label { | |
| 87 | 87 | padding: 3px 10px 3px 10px; |
| 88 | 88 | color: white; |
| 89 | 89 | text-decoration: none; |
| 90 | 90 | } |
| 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 { | |
| 93 | 93 | color: #a09048; |
| 94 | 94 | background-color: white; |
| 95 | 95 | } |
| 96 | 96 | |
| 97 | 97 | /* All page content from the bottom of the menu or submenu down to |
| 98 | 98 | ** the footer */ |
| 99 | -div.content { | |
| 99 | +main.content { | |
| 100 | 100 | padding: 1ex 5px; |
| 101 | 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 { | |
| 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 | 106 | background-color: white; color: #706532; |
| 107 | 107 | } |
| 108 | 108 | a, a:visited { |
| 109 | 109 | text-decoration: none; |
| 110 | 110 | } |
| @@ -133,24 +133,24 @@ | ||
| 133 | 133 | clear: left; |
| 134 | 134 | white-space: nowrap; |
| 135 | 135 | } |
| 136 | 136 | |
| 137 | 137 | /* The footer at the very bottom of the page */ |
| 138 | -div.footer { | |
| 138 | +footer.footer { | |
| 139 | 139 | font-size: 0.8em; |
| 140 | 140 | margin-top: 12px; |
| 141 | 141 | padding: 5px 10px 5px 10px; |
| 142 | 142 | text-align: right; |
| 143 | 143 | background-color: #a09048; |
| 144 | 144 | color: white; |
| 145 | 145 | } |
| 146 | 146 | |
| 147 | 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; } | |
| 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 | 152 | |
| 153 | 153 | /* <verbatim> blocks */ |
| 154 | 154 | pre.verbatim { |
| 155 | 155 | background-color: #f5f5f5; |
| 156 | 156 | padding: 0.5em; |
| 157 | 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 | 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 |
+2
-2
| --- skins/khaki/footer.txt | ||
| +++ skins/khaki/footer.txt | ||
| @@ -1,3 +1,3 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | Fossil $release_version $manifest_version $manifest_date |
| 3 | -</div> | |
| 3 | +</footer> | |
| 4 | 4 |
| --- 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 |
+5
-5
| --- skins/khaki/header.txt | ||
| +++ skins/khaki/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="title">$<title></div> |
| 3 | 3 | <div class="status"> |
| 4 | 4 | <div class="logo">$<project_name></div><br/> |
| 5 | 5 | <th1> |
| 6 | 6 | if {[info exists login]} { |
| @@ -7,16 +7,16 @@ | ||
| 7 | 7 | puts "Logged in as $login" |
| 8 | 8 | } else { |
| 9 | 9 | puts "Not logged in" |
| 10 | 10 | } |
| 11 | 11 | </th1></div> |
| 12 | -</div> | |
| 13 | -<div class="mainmenu"><th1> | |
| 12 | +</header> | |
| 13 | +<nav class="mainmenu"><th1> | |
| 14 | 14 | html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" |
| 15 | 15 | builtin_request_js hbmenu.js |
| 16 | 16 | foreach {name url expr class} $mainmenu { |
| 17 | 17 | if {![capexpr $expr]} continue |
| 18 | 18 | if {[string match /* $url]} {set url $home$url} |
| 19 | 19 | html "<a href='$url' class='$class'>$name</a>\n" |
| 20 | 20 | } |
| 21 | -</th1></div> | |
| 22 | -<div id='hbdrop'></div> | |
| 21 | +</th1></nav> | |
| 22 | +<nav id='hbdrop' title="Sitemap"></nav> | |
| 23 | 23 |
| --- 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'>☰</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'>☰</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 |
+13
-13
| --- skins/original/css.txt | ||
| +++ skins/original/css.txt | ||
| @@ -42,18 +42,18 @@ | ||
| 42 | 42 | font-weight: bold; |
| 43 | 43 | white-space: nowrap; |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | 46 | /* The header across the top of the page */ |
| 47 | -div.header { | |
| 47 | +header.header { | |
| 48 | 48 | display: table; |
| 49 | 49 | width: 100%; |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | /* The main menu bar that appears at the top of the page beneath |
| 53 | 53 | ** the header */ |
| 54 | -div.mainmenu { | |
| 54 | +nav.mainmenu { | |
| 55 | 55 | padding: 5px; |
| 56 | 56 | font-size: 0.9em; |
| 57 | 57 | font-weight: bold; |
| 58 | 58 | text-align: center; |
| 59 | 59 | letter-spacing: 1px; |
| @@ -62,33 +62,33 @@ | ||
| 62 | 62 | border-top-right-radius: 8px; |
| 63 | 63 | color: white; |
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 67 | -div.submenu, div.sectionmenu { | |
| 67 | +nav.submenu, div.sectionmenu { | |
| 68 | 68 | padding: 3px 10px 3px 0px; |
| 69 | 69 | font-size: 0.9em; |
| 70 | 70 | text-align: center; |
| 71 | 71 | background-color: #456878; |
| 72 | 72 | color: white; |
| 73 | 73 | } |
| 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, | |
| 75 | 75 | div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, |
| 76 | -div.submenu label { | |
| 76 | +nav.submenu label { | |
| 77 | 77 | padding: 3px 10px 3px 10px; |
| 78 | 78 | color: white; |
| 79 | 79 | text-decoration: none; |
| 80 | 80 | } |
| 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 { | |
| 83 | 83 | color: #558195; |
| 84 | 84 | background-color: white; |
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | /* All page content from the bottom of the menu or submenu down to |
| 88 | 88 | ** the footer */ |
| 89 | -div.content { | |
| 89 | +main.content { | |
| 90 | 90 | padding: 0ex 1ex 1ex 1ex; |
| 91 | 91 | border: solid #aaa; |
| 92 | 92 | border-width: 1px; |
| 93 | 93 | } |
| 94 | 94 | |
| @@ -115,11 +115,11 @@ | ||
| 115 | 115 | clear: left; |
| 116 | 116 | white-space: nowrap; |
| 117 | 117 | } |
| 118 | 118 | |
| 119 | 119 | /* The footer at the very bottom of the page */ |
| 120 | -div.footer { | |
| 120 | +footer.footer { | |
| 121 | 121 | clear: both; |
| 122 | 122 | font-size: 0.8em; |
| 123 | 123 | padding: 5px 10px 5px 10px; |
| 124 | 124 | text-align: right; |
| 125 | 125 | background-color: #558195; |
| @@ -127,14 +127,14 @@ | ||
| 127 | 127 | border-bottom-right-radius: 8px; |
| 128 | 128 | color: white; |
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 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; } | |
| 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 | 136 | |
| 137 | 137 | /* verbatim blocks */ |
| 138 | 138 | pre.verbatim { |
| 139 | 139 | background-color: #f5f5f5; |
| 140 | 140 | padding: 0.5em; |
| 141 | 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 | 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 |
+2
-2
| --- skins/original/footer.txt | ||
| +++ skins/original/footer.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | <th1> |
| 3 | 3 | proc getTclVersion {} { |
| 4 | 4 | if {[catch {tclEval info patchlevel} tclVersion] == 0} { |
| 5 | 5 | return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion" |
| 6 | 6 | } |
| @@ -19,6 +19,6 @@ | ||
| 19 | 19 | <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by |
| 20 | 20 | <a href="$fossilUrl/">Fossil</a> |
| 21 | 21 | version $release_version $tclVersion |
| 22 | 22 | <a href="$fossilUrl/index.html/info/$version">$manifest_version</a> |
| 23 | 23 | <a href="$fossilUrl/index.html/timeline?c=$fossilDate&y=ci">$manifest_date</a> |
| 24 | -</div> | |
| 24 | +</footer> | |
| 25 | 25 |
| --- 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&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&y=ci">$manifest_date</a> |
| 24 | </footer> |
| 25 |
+4
-4
| --- skins/original/header.txt | ||
| +++ skins/original/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="logo"> |
| 3 | 3 | <th1> |
| 4 | 4 | ## |
| 5 | 5 | ## NOTE: The purpose of this procedure is to take the base URL of the |
| 6 | 6 | ## Fossil project and return the root of the entire web site using |
| @@ -70,11 +70,11 @@ | ||
| 70 | 70 | puts "Logged in as $login" |
| 71 | 71 | } else { |
| 72 | 72 | puts "Not logged in" |
| 73 | 73 | } |
| 74 | 74 | </th1></nobr><small><div id="clock"></div></small></div> |
| 75 | -</div> | |
| 75 | +</header> | |
| 76 | 76 | <th1>html "<script nonce='$nonce'>"</th1> |
| 77 | 77 | function updateClock(){ |
| 78 | 78 | var e = document.getElementById("clock"); |
| 79 | 79 | if(e){ |
| 80 | 80 | var d = new Date(); |
| @@ -89,11 +89,11 @@ | ||
| 89 | 89 | setTimeout(updateClock,(60-d.getUTCSeconds())*1000); |
| 90 | 90 | } |
| 91 | 91 | } |
| 92 | 92 | updateClock(); |
| 93 | 93 | </script> |
| 94 | -<div class="mainmenu"><th1> | |
| 94 | +<nav class="mainmenu"><th1> | |
| 95 | 95 | set sitemap 0 |
| 96 | 96 | foreach {name url expr class} $mainmenu { |
| 97 | 97 | if {![capexpr $expr]} continue |
| 98 | 98 | if {[string match /* $url]} {set url $home$url} |
| 99 | 99 | html "<a href='$url' class='$class'>$name</a>\n" |
| @@ -100,6 +100,6 @@ | ||
| 100 | 100 | if {[string match */sitemap $url]} {set sitemap 1} |
| 101 | 101 | } |
| 102 | 102 | if {!$sitemap} { |
| 103 | 103 | html "<a href='$home/sitemap'>...</a>" |
| 104 | 104 | } |
| 105 | -</th1></div> | |
| 105 | +</th1></nav> | |
| 106 | 106 |
| --- 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 |
+19
-19
| --- skins/plain_gray/css.txt | ||
| +++ skins/plain_gray/css.txt | ||
| @@ -28,18 +28,18 @@ | ||
| 28 | 28 | font-weight: bold; |
| 29 | 29 | white-space: nowrap; |
| 30 | 30 | } |
| 31 | 31 | |
| 32 | 32 | /* The header across the top of the page */ |
| 33 | -div.header { | |
| 33 | +header.header { | |
| 34 | 34 | display: table; |
| 35 | 35 | width: 100%; |
| 36 | 36 | } |
| 37 | 37 | |
| 38 | 38 | /* The main menu bar that appears at the top of the page beneath |
| 39 | 39 | ** the header */ |
| 40 | -div.mainmenu { | |
| 40 | +nav.mainmenu { | |
| 41 | 41 | padding: 5px 10px 5px 10px; |
| 42 | 42 | font-size: 0.9em; |
| 43 | 43 | font-weight: bold; |
| 44 | 44 | text-align: center; |
| 45 | 45 | letter-spacing: 1px; |
| @@ -54,54 +54,54 @@ | ||
| 54 | 54 | display: none; |
| 55 | 55 | width: 95%; |
| 56 | 56 | position: absolute; |
| 57 | 57 | z-index: 20; /* just below mainmenu, but above timeline bubbles */ |
| 58 | 58 | } |
| 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; } | |
| 62 | 62 | |
| 63 | 63 | |
| 64 | 64 | /* The submenu bar that *sometimes* appears below the main menu */ |
| 65 | -div.submenu, div.sectionmenu { | |
| 65 | +nav.submenu, div.sectionmenu { | |
| 66 | 66 | padding: 3px 10px 3px 0px; |
| 67 | 67 | font-size: 0.9em; |
| 68 | 68 | text-align: center; |
| 69 | 69 | background-color: #606060; |
| 70 | 70 | color: white; |
| 71 | 71 | } |
| 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, | |
| 76 | 76 | div.sectionmenu>a.button:link, |
| 77 | 77 | div.sectionmenu>a.button:visited, |
| 78 | -div.submenu label { | |
| 78 | +nav.submenu label { | |
| 79 | 79 | padding: 3px 10px 3px 10px; |
| 80 | 80 | color: white; |
| 81 | 81 | text-decoration: none; |
| 82 | 82 | } |
| 83 | -div.mainmenu a:hover, | |
| 84 | -div.submenu a:hover, | |
| 83 | +nav.mainmenu a:hover, | |
| 84 | +nav.submenu a:hover, | |
| 85 | 85 | div.sectionmenu>a.button:hover, |
| 86 | -div.submenu label:hover { | |
| 86 | +nav.submenu label:hover { | |
| 87 | 87 | color: #404040; |
| 88 | 88 | background-color: white; |
| 89 | 89 | } |
| 90 | 90 | a, a:visited { |
| 91 | 91 | text-decoration: none; |
| 92 | 92 | } |
| 93 | 93 | |
| 94 | 94 | /* All page content from the bottom of the menu or submenu down to |
| 95 | 95 | ** the footer */ |
| 96 | -div.content { | |
| 96 | +main.content { | |
| 97 | 97 | padding: 0ex 0ex 0ex 0ex; |
| 98 | 98 | } |
| 99 | 99 | /* 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; } | |
| 103 | 103 | |
| 104 | 104 | /* <verbatim> blocks */ |
| 105 | 105 | pre.verbatim { |
| 106 | 106 | background-color: #ffffff; |
| 107 | 107 | padding: 0.5em; |
| @@ -131,11 +131,11 @@ | ||
| 131 | 131 | clear: left; |
| 132 | 132 | white-space: nowrap; |
| 133 | 133 | } |
| 134 | 134 | |
| 135 | 135 | /* The footer at the very bottom of the page */ |
| 136 | -div.footer { | |
| 136 | +footer.footer { | |
| 137 | 137 | font-size: 0.8em; |
| 138 | 138 | margin-top: 12px; |
| 139 | 139 | padding: 5px 10px 5px 10px; |
| 140 | 140 | text-align: right; |
| 141 | 141 | background-color: #404040; |
| 142 | 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 | 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 |
+2
-2
| --- skins/plain_gray/footer.txt | ||
| +++ skins/plain_gray/footer.txt | ||
| @@ -1,3 +1,3 @@ | ||
| 1 | -<div class="footer"> | |
| 1 | +<footer class="footer"> | |
| 2 | 2 | Fossil $release_version $manifest_version $manifest_date |
| 3 | -</div> | |
| 3 | +</footer> | |
| 4 | 4 |
| --- 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 |
+5
-5
| --- skins/plain_gray/header.txt | ||
| +++ skins/plain_gray/header.txt | ||
| @@ -1,14 +1,14 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="title">$<project_name>: $<title></div> |
| 3 | -</div> | |
| 4 | -<div class="mainmenu"> | |
| 3 | +</header> | |
| 4 | +<nav class="mainmenu"> | |
| 5 | 5 | <th1> |
| 6 | 6 | html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" |
| 7 | 7 | builtin_request_js hbmenu.js |
| 8 | 8 | foreach {name url expr class} $mainmenu { |
| 9 | 9 | if {![capexpr $expr]} continue |
| 10 | 10 | if {[string match /* $url]} {set url $home$url} |
| 11 | 11 | html "<a href='$url' class='$class'>$name</a>\n" |
| 12 | 12 | } |
| 13 | -</th1></div> | |
| 14 | -<div id='hbdrop' class='hbdrop'></div> | |
| 13 | +</th1></nav> | |
| 14 | +<nav id='hbdrop' class='hbdrop' title="Sitemap"></nav> | |
| 15 | 15 |
| --- 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'>☰</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'>☰</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 |
+22
-22
| --- skins/xekri/css.txt | ||
| +++ skins/xekri/css.txt | ||
| @@ -75,11 +75,11 @@ | ||
| 75 | 75 | |
| 76 | 76 | /************************************** |
| 77 | 77 | * Main Area |
| 78 | 78 | */ |
| 79 | 79 | |
| 80 | -div.header, div.mainmenu, div.submenu, div.content, div.footer { | |
| 80 | +header.header, nav.mainmenu, nav.submenu, main.content, footer.footer { | |
| 81 | 81 | clear: both; |
| 82 | 82 | margin: 0 auto; |
| 83 | 83 | max-width: 90%; |
| 84 | 84 | padding: 0.25rem 1rem; |
| 85 | 85 | } |
| @@ -87,11 +87,11 @@ | ||
| 87 | 87 | |
| 88 | 88 | /************************************** |
| 89 | 89 | * Main Area: Header |
| 90 | 90 | */ |
| 91 | 91 | |
| 92 | -div.header { | |
| 92 | +header.header { | |
| 93 | 93 | margin: 0.5rem auto 0 auto; |
| 94 | 94 | display: flex; |
| 95 | 95 | flex-direction: row; |
| 96 | 96 | align-items: center; |
| 97 | 97 | flex-wrap: wrap; |
| @@ -146,73 +146,73 @@ | ||
| 146 | 146 | |
| 147 | 147 | /************************************** |
| 148 | 148 | * Main Area: Global Menu |
| 149 | 149 | */ |
| 150 | 150 | |
| 151 | -div.mainmenu, div.submenu { | |
| 151 | +nav.mainmenu, nav.submenu { | |
| 152 | 152 | background-color: #080; |
| 153 | 153 | border-radius: 1rem 1rem 0 0; |
| 154 | 154 | box-shadow: 3px 4px 1px #000; |
| 155 | 155 | color: #000; |
| 156 | 156 | font-weight: bold; |
| 157 | 157 | font-size: 1.1rem; |
| 158 | 158 | text-align: center; |
| 159 | 159 | } |
| 160 | 160 | |
| 161 | -div.mainmenu { | |
| 161 | +nav.mainmenu { | |
| 162 | 162 | padding-top: 0.33rem; |
| 163 | 163 | padding-bottom: 0.25rem; |
| 164 | 164 | } |
| 165 | 165 | |
| 166 | -div.submenu { | |
| 166 | +nav.submenu { | |
| 167 | 167 | border-top: 1px solid #0a0; |
| 168 | 168 | border-radius: 0; |
| 169 | 169 | display: block; |
| 170 | 170 | } |
| 171 | 171 | |
| 172 | -div.mainmenu a, div.submenu a, div.submenu label { | |
| 172 | +nav.mainmenu a, nav.submenu a, nav.submenu label { | |
| 173 | 173 | color: #000; |
| 174 | 174 | padding: 0 0.75rem; |
| 175 | 175 | text-decoration: none; |
| 176 | 176 | } |
| 177 | 177 | |
| 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 { | |
| 179 | 179 | color: #fff; |
| 180 | 180 | text-shadow: 0px 0px 6px #0f0; |
| 181 | 181 | } |
| 182 | 182 | |
| 183 | -div.submenu * { | |
| 183 | +nav.submenu * { | |
| 184 | 184 | margin: 0 0.5rem; |
| 185 | 185 | vertical-align: middle; |
| 186 | 186 | } |
| 187 | 187 | |
| 188 | -div.submenu select, div.submenu input { | |
| 188 | +nav.submenu select, nav.submenu input { | |
| 189 | 189 | background-color: #222; |
| 190 | 190 | border: 1px inset #080; |
| 191 | 191 | color: #eee; |
| 192 | 192 | cursor: pointer; |
| 193 | 193 | font-size: 0.9rem; |
| 194 | 194 | } |
| 195 | 195 | |
| 196 | -div.submenu select { | |
| 196 | +nav.submenu select { | |
| 197 | 197 | height: 1.75rem; |
| 198 | 198 | } |
| 199 | 199 | |
| 200 | 200 | /************************************** |
| 201 | 201 | * Main Area: Content |
| 202 | 202 | */ |
| 203 | 203 | |
| 204 | -div.content { | |
| 204 | +main.content { | |
| 205 | 205 | background-color: #222; |
| 206 | 206 | border-radius: 0 0 1rem 1rem; |
| 207 | 207 | box-shadow: 3px 3px 1px #000; |
| 208 | 208 | min-height:40%; |
| 209 | 209 | padding-bottom: 1rem; |
| 210 | 210 | padding-top: 0.5rem; |
| 211 | 211 | } |
| 212 | 212 | |
| 213 | -div.content table[bgcolor="white"] { | |
| 213 | +main.content table[bgcolor="white"] { | |
| 214 | 214 | color: #000; |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | 217 | .piechartLabel { |
| 218 | 218 | fill: white; |
| @@ -223,40 +223,40 @@ | ||
| 223 | 223 | |
| 224 | 224 | /************************************** |
| 225 | 225 | * Main Area: Footer |
| 226 | 226 | */ |
| 227 | 227 | |
| 228 | -div.footer { | |
| 228 | +footer.footer { | |
| 229 | 229 | color: #ee0; |
| 230 | 230 | font-size: 0.75rem; |
| 231 | 231 | padding: 0; |
| 232 | 232 | text-align: right; |
| 233 | 233 | width: 75%; |
| 234 | 234 | } |
| 235 | 235 | |
| 236 | 236 | |
| 237 | -div.footer div { | |
| 237 | +footer.footer div { | |
| 238 | 238 | background-color: #222; |
| 239 | 239 | box-shadow: 3px 3px 1px #000; |
| 240 | 240 | border-radius: 0 0 1rem 1rem; |
| 241 | 241 | margin: 0 0 10px 0; |
| 242 | 242 | padding: 0.25rem 0.75rem; |
| 243 | 243 | } |
| 244 | 244 | |
| 245 | -div.footer div.page-time { | |
| 245 | +footer.footer div.page-time { | |
| 246 | 246 | float: left; |
| 247 | 247 | } |
| 248 | 248 | |
| 249 | -div.footer div.fossil-info { | |
| 249 | +footer.footer div.fossil-info { | |
| 250 | 250 | float: right; |
| 251 | 251 | } |
| 252 | 252 | |
| 253 | -div.footer a, div.footer a:link, div.footer a:visited { | |
| 253 | +footer.footer a, footer.footer a:link, footer.footer a:visited { | |
| 254 | 254 | color: #ee0; |
| 255 | 255 | } |
| 256 | 256 | |
| 257 | -div.footer a:hover { | |
| 257 | +footer.footer a:hover { | |
| 258 | 258 | color: #fff; |
| 259 | 259 | text-shadow: 0px 0px 6px #ee0; |
| 260 | 260 | } |
| 261 | 261 | |
| 262 | 262 | |
| @@ -1152,18 +1152,18 @@ | ||
| 1152 | 1152 | body.branch .brlist > table > tbody > tr:hover:not(.selected), |
| 1153 | 1153 | body.branch .brlist > table > tbody > tr.selected { |
| 1154 | 1154 | background-color: #444; |
| 1155 | 1155 | } |
| 1156 | 1156 | |
| 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 { | |
| 1160 | 1160 | margin-left: 0.5em; |
| 1161 | 1161 | margin-right: 0.5em; |
| 1162 | 1162 | margin-top: auto/*eliminates unnecessary scrollbars*/; |
| 1163 | 1163 | } |
| 1164 | -body.chat.chat-only-mode div.content { | |
| 1164 | +body.chat.chat-only-mode main.content { | |
| 1165 | 1165 | max-width: revert; |
| 1166 | 1166 | } |
| 1167 | 1167 | body.chat #chat-user-list .chat-user{ |
| 1168 | 1168 | color: white; |
| 1169 | 1169 | } |
| 1170 | 1170 |
| --- 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 |
+2
-2
| --- skins/xekri/footer.txt | ||
| +++ skins/xekri/footer.txt | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | </div> |
| 2 | -<div class="footer"> | |
| 2 | +<footer class="footer"> | |
| 3 | 3 | <div class="page-time"> |
| 4 | 4 | Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s |
| 5 | 5 | </div> |
| 6 | 6 | <div class="fossil-info"> |
| 7 | 7 | Fossil v$release_version $manifest_version |
| 8 | 8 | </div> |
| 9 | -</div> | |
| 9 | +</footer> | |
| 10 | 10 |
| --- 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 |
+4
-4
| --- skins/xekri/header.txt | ||
| +++ skins/xekri/header.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -<div class="header"> | |
| 1 | +<header class="header"> | |
| 2 | 2 | <div class="logo"> |
| 3 | 3 | <th1> |
| 4 | 4 | ## |
| 5 | 5 | ## NOTE: The purpose of this procedure is to take the base URL of the |
| 6 | 6 | ## Fossil project and return the root of the entire web site using |
| @@ -76,11 +76,11 @@ | ||
| 76 | 76 | puts "Logged in as $login" |
| 77 | 77 | } else { |
| 78 | 78 | puts "Not logged in" |
| 79 | 79 | } |
| 80 | 80 | </th1></nobr><small><div id="clock"></div></small></div> |
| 81 | -</div> | |
| 81 | +</header> | |
| 82 | 82 | <th1>html "<script nonce='$nonce'>"</th1> |
| 83 | 83 | function updateClock(){ |
| 84 | 84 | var e = document.getElementById("clock"); |
| 85 | 85 | if(e){ |
| 86 | 86 | var d = new Date(); |
| @@ -95,11 +95,11 @@ | ||
| 95 | 95 | setTimeout(updateClock,(60-d.getUTCSeconds())*1000); |
| 96 | 96 | } |
| 97 | 97 | } |
| 98 | 98 | updateClock(); |
| 99 | 99 | </script> |
| 100 | -<div class="mainmenu"><th1> | |
| 100 | +<nav class="mainmenu"><th1> | |
| 101 | 101 | set sitemap 0 |
| 102 | 102 | foreach {name url expr class} $mainmenu { |
| 103 | 103 | if {![capexpr $expr]} continue |
| 104 | 104 | if {[string match /* $url]} { |
| 105 | 105 | if {[string match $url\[/?#\]* /$current_page/]} { |
| @@ -111,6 +111,6 @@ | ||
| 111 | 111 | if {[string match */sitemap $url]} {set sitemap 1} |
| 112 | 112 | } |
| 113 | 113 | if {!$sitemap} { |
| 114 | 114 | html "<a href='$home/sitemap'>...</a>\n" |
| 115 | 115 | } |
| 116 | -</th1></div> | |
| 116 | +</th1></nav> | |
| 117 | 117 |
| --- 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 |
+1
| --- src/accordion.js | ||
| +++ src/accordion.js | ||
| @@ -40,10 +40,11 @@ | ||
| 40 | 40 | img.className = "accordion_btn accordion_btn_plus"; |
| 41 | 41 | a[i].insertBefore(img,a[i].firstChild); |
| 42 | 42 | img = document.createElement("img"); |
| 43 | 43 | img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1]; |
| 44 | 44 | img.className = "accordion_btn accordion_btn_minus"; |
| 45 | + img.alt = "Open/Close Section"; | |
| 45 | 46 | a[i].insertBefore(img,a[i].firstChild); |
| 46 | 47 | a[i].addEventListener("click",function(){ |
| 47 | 48 | var x = this.nextElementSibling; |
| 48 | 49 | if( this.classList.contains("accordion_closed") ){ |
| 49 | 50 | x.style.maxHeight = x.scrollHeight + "px"; |
| 50 | 51 |
| --- 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 @@ | ||
| 362 | 362 | ** The --case-sensitive option determines whether or not filenames should |
| 363 | 363 | ** be treated case sensitive or not. If the option is not given, the default |
| 364 | 364 | ** depends on the global setting, or the operating system default, if not set. |
| 365 | 365 | ** |
| 366 | 366 | ** Options: |
| 367 | -** | |
| 368 | 367 | ** --case-sensitive BOOL Override the case-sensitive setting |
| 369 | 368 | ** --dotfiles Include files beginning with a dot (".") |
| 370 | 369 | ** -f|--force Add files without prompting |
| 371 | 370 | ** --ignore CSG Ignore unmanaged files matching patterns from |
| 372 | 371 | ** the Comma Separated Glob (CSG) pattern list |
| 373 | 372 |
| --- 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 @@ | ||
| 291 | 291 | @ <h1>Status</h1> |
| 292 | 292 | @ <table class="label-value"> |
| 293 | 293 | if( alert_enabled() ){ |
| 294 | 294 | stats_for_email(); |
| 295 | 295 | }else{ |
| 296 | - @ <th>Disabled</th> | |
| 296 | + @ <td>Disabled</td> | |
| 297 | 297 | } |
| 298 | 298 | @ </table> |
| 299 | 299 | @ <hr> |
| 300 | 300 | @ <h1> Configuration </h1> |
| 301 | 301 | @ <form action="%R/setup_notification" method="post"><div> |
| @@ -1112,47 +1112,40 @@ | ||
| 1112 | 1112 | ** COMMAND: alerts* |
| 1113 | 1113 | ** |
| 1114 | 1114 | ** Usage: %fossil alerts SUBCOMMAND ARGS... |
| 1115 | 1115 | ** |
| 1116 | 1116 | ** Subcommands: |
| 1117 | -** | |
| 1118 | 1117 | ** pending Show all pending alerts. Useful for debugging. |
| 1119 | -** | |
| 1120 | 1118 | ** reset Hard reset of all email notification tables |
| 1121 | 1119 | ** in the repository. This erases all subscription |
| 1122 | 1120 | ** information. ** Use with extreme care ** |
| 1123 | -** | |
| 1124 | 1121 | ** send Compose and send pending email alerts. |
| 1125 | 1122 | ** Some installations may want to do this via |
| 1126 | 1123 | ** a cron-job to make sure alerts are sent |
| 1127 | 1124 | ** in a timely manner. |
| 1128 | -** Options: | |
| 1129 | 1125 | ** |
| 1126 | +** Options: | |
| 1130 | 1127 | ** --digest Send digests |
| 1131 | 1128 | ** --renewal Send subscription renewal |
| 1132 | 1129 | ** notices |
| 1133 | 1130 | ** --test Write to standard output |
| 1134 | -** | |
| 1135 | 1131 | ** settings [NAME VALUE] With no arguments, list all email settings. |
| 1136 | 1132 | ** Or change the value of a single email setting. |
| 1137 | -** | |
| 1138 | 1133 | ** status Report on the status of the email alert |
| 1139 | 1134 | ** subsystem |
| 1140 | -** | |
| 1141 | 1135 | ** subscribers [PATTERN] List all subscribers matching PATTERN. Either |
| 1142 | 1136 | ** LIKE or GLOB wildcards can be used in PATTERN. |
| 1143 | -** | |
| 1144 | 1137 | ** test-message TO [OPTS] Send a single email message using whatever |
| 1145 | 1138 | ** email sending mechanism is currently configured. |
| 1146 | 1139 | ** Use this for testing the email notification |
| 1147 | -** configuration. Options: | |
| 1140 | +** configuration. | |
| 1148 | 1141 | ** |
| 1142 | +** Options: | |
| 1149 | 1143 | ** --body FILENAME Content from FILENAME |
| 1150 | 1144 | ** --smtp-trace Trace SMTP processing |
| 1151 | 1145 | ** --stdout Send msg to stdout |
| 1152 | 1146 | ** -S|--subject SUBJECT Message "subject:" |
| 1153 | -** | |
| 1154 | 1147 | ** unsubscribe EMAIL Remove a single subscriber with the given EMAIL. |
| 1155 | 1148 | */ |
| 1156 | 1149 | void alert_cmd(void){ |
| 1157 | 1150 | const char *zCmd; |
| 1158 | 1151 | int nCmd; |
| @@ -1603,12 +1596,12 @@ | ||
| 1603 | 1596 | @ <p>To receive email notifications for changes to this |
| 1604 | 1597 | @ repository, fill out the form below and press the "Submit" button.</p> |
| 1605 | 1598 | form_begin(0, "%R/subscribe"); |
| 1606 | 1599 | @ <table class="subscribe"> |
| 1607 | 1600 | @ <tr> |
| 1608 | - @ <td class="form_label">Email 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 Address:</label></td> | |
| 1602 | + @ <td><input type="text" id="e" name="e" value="%h(PD("e",""))" size="30"></td> | |
| 1610 | 1603 | @ <tr> |
| 1611 | 1604 | if( eErr==1 ){ |
| 1612 | 1605 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1613 | 1606 | } |
| 1614 | 1607 | @ </tr> |
| @@ -1621,12 +1614,12 @@ | ||
| 1621 | 1614 | uSeed = captcha_seed(); |
| 1622 | 1615 | } |
| 1623 | 1616 | zDecoded = captcha_decode(uSeed); |
| 1624 | 1617 | zCaptcha = captcha_render(zDecoded); |
| 1625 | 1618 | @ <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"> | |
| 1628 | 1621 | captcha_speakit_button(uSeed, "Speak the code"); |
| 1629 | 1622 | @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td> |
| 1630 | 1623 | @ </tr> |
| 1631 | 1624 | if( eErr==2 ){ |
| 1632 | 1625 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| @@ -1633,13 +1626,13 @@ | ||
| 1633 | 1626 | } |
| 1634 | 1627 | @ </tr> |
| 1635 | 1628 | } |
| 1636 | 1629 | if( g.perm.Admin ){ |
| 1637 | 1630 | @ <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> | |
| 1641 | 1634 | @ </tr> |
| 1642 | 1635 | if( eErr==3 ){ |
| 1643 | 1636 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1644 | 1637 | } |
| 1645 | 1638 | @ </tr> |
| @@ -1667,12 +1660,12 @@ | ||
| 1667 | 1660 | @ Wiki</label><br> |
| 1668 | 1661 | } |
| 1669 | 1662 | di = PB("di"); |
| 1670 | 1663 | @ </td></tr> |
| 1671 | 1664 | @ <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"> | |
| 1674 | 1667 | @ <option value="0" %s(di?"":"selected")>Individual Emails</option> |
| 1675 | 1668 | @ <option value="1" %s(di?"selected":"")>Daily Digest</option> |
| 1676 | 1669 | @ </select></td> |
| 1677 | 1670 | @ </tr> |
| 1678 | 1671 | if( g.perm.Admin ){ |
| @@ -1972,13 +1965,13 @@ | ||
| 1972 | 1965 | zHalfCode = db_text("x","SELECT hex(substr(subscriberCode,1,16))" |
| 1973 | 1966 | " FROM subscriber WHERE subscriberId=%d", sid); |
| 1974 | 1967 | @ <input type="hidden" name="name" value="%h(zHalfCode)"> |
| 1975 | 1968 | @ <table class="subscribe"> |
| 1976 | 1969 | @ <tr> |
| 1977 | - @ <td class="form_label">Email Address:</td> | |
| 1970 | + @ <td class="form_label"><label for="semail">Email Address:</label></td> | |
| 1978 | 1971 | 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">\ | |
| 1980 | 1973 | if( eErr==8 ){ |
| 1981 | 1974 | @ <span class='loginError'>← not a valid email address!</span> |
| 1982 | 1975 | }else if( g.perm.Admin ){ |
| 1983 | 1976 | @ <a href="%R/announce?to=%t(semail)">\ |
| 1984 | 1977 | @ (Send a message to %h(semail))</a>\ |
| @@ -2009,13 +2002,13 @@ | ||
| 2009 | 2002 | @ <tr> |
| 2010 | 2003 | @ <td class='form_label'>Last Contact:</td> |
| 2011 | 2004 | @ <td>%h(db_column_text(&q,10)) ← \ |
| 2012 | 2005 | @ %,d(db_column_int(&q,11)) days ago</td> |
| 2013 | 2006 | @ </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">\ | |
| 2017 | 2010 | uid = db_int(0, "SELECT uid FROM user WHERE login=%Q", suname); |
| 2018 | 2011 | if( uid ){ |
| 2019 | 2012 | @ <a href='%R/setup_uedit?id=%d(uid)'>\ |
| 2020 | 2013 | @ (login info for %h(suname))</a>\ |
| 2021 | 2014 | } |
| @@ -2043,12 +2036,12 @@ | ||
| 2043 | 2036 | @ <label><input type="checkbox" name="sw" %s(sw?"checked":"")>\ |
| 2044 | 2037 | @ Wiki</label> |
| 2045 | 2038 | } |
| 2046 | 2039 | @ </td></tr> |
| 2047 | 2040 | @ <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"> | |
| 2050 | 2043 | @ <option value="0" %s(sdigest?"":"selected")>Individual Emails</option> |
| 2051 | 2044 | @ <option value="1" %s(sdigest?"selected":"")>Daily Digest</option> |
| 2052 | 2045 | @ </select></td> |
| 2053 | 2046 | @ </tr> |
| 2054 | 2047 | if( g.perm.Admin ){ |
| @@ -2276,22 +2269,22 @@ | ||
| 2276 | 2269 | @ explain how to unsubscribe and/or change your subscription settings.</p> |
| 2277 | 2270 | @ |
| 2278 | 2271 | form_begin(0, "%R/unsubscribe"); |
| 2279 | 2272 | @ <table class="subscribe"> |
| 2280 | 2273 | @ <tr> |
| 2281 | - @ <td class="form_label">Email Address:</td> | |
| 2282 | - @ <td><input type="text" name="e" value="%h(zEAddr)" size="30"></td> | |
| 2274 | + @ <td class="form_label"><label for="e">Email Address:</label></td> | |
| 2275 | + @ <td><input type="text" id="e" name="e" value="%h(zEAddr)" size="30"></td> | |
| 2283 | 2276 | if( eErr==1 ){ |
| 2284 | 2277 | @ <td><span class="loginError">← %h(zErr)</span></td> |
| 2285 | 2278 | } |
| 2286 | 2279 | @ </tr> |
| 2287 | 2280 | uSeed = captcha_seed(); |
| 2288 | 2281 | zDecoded = captcha_decode(uSeed); |
| 2289 | 2282 | zCaptcha = captcha_render(zDecoded); |
| 2290 | 2283 | @ <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"> | |
| 2293 | 2286 | captcha_speakit_button(uSeed, "Speak the code"); |
| 2294 | 2287 | @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td> |
| 2295 | 2288 | if( eErr==2 ){ |
| 2296 | 2289 | @ <td><span class="loginError">← %h(zErr)</span></td> |
| 2297 | 2290 | } |
| @@ -2698,11 +2691,10 @@ | ||
| 2698 | 2691 | ** for check-in, forum, ticket, or wiki. The remaining text is a |
| 2699 | 2692 | ** integer that references the EVENT.OBJID value for the event. |
| 2700 | 2693 | ** Run /timeline?showid to see these OBJID values. |
| 2701 | 2694 | ** |
| 2702 | 2695 | ** Options: |
| 2703 | -** | |
| 2704 | 2696 | ** --digest Generate digest alert text |
| 2705 | 2697 | ** --needmod Assume all events are pending moderator approval |
| 2706 | 2698 | */ |
| 2707 | 2699 | void test_alert_cmd(void){ |
| 2708 | 2700 | Blob out; |
| @@ -2759,19 +2751,16 @@ | ||
| 2759 | 2751 | ** for check-in, forum, ticket, or wiki. The remaining text is a |
| 2760 | 2752 | ** integer that references the EVENT.OBJID value for the event. |
| 2761 | 2753 | ** Run /timeline?showid to see these OBJID values. |
| 2762 | 2754 | ** |
| 2763 | 2755 | ** Options: |
| 2764 | -** | |
| 2765 | 2756 | ** --backoffice Run alert_backoffice() after all alerts have |
| 2766 | 2757 | ** been added. This will cause the alerts to be |
| 2767 | 2758 | ** sent out with the SENDALERT_TRACE option. |
| 2768 | -** | |
| 2769 | 2759 | ** --debug Like --backoffice, but add the SENDALERT_STDOUT |
| 2770 | 2760 | ** so that emails are printed to standard output |
| 2771 | 2761 | ** rather than being sent. |
| 2772 | -** | |
| 2773 | 2762 | ** --digest Process emails using SENDALERT_DIGEST |
| 2774 | 2763 | */ |
| 2775 | 2764 | void test_add_alert_cmd(void){ |
| 2776 | 2765 | int i; |
| 2777 | 2766 | int doAuto = find_option("backoffice",0,0)!=0; |
| @@ -3226,28 +3215,28 @@ | ||
| 3226 | 3215 | form_begin(0, "%R/contact_admin"); |
| 3227 | 3216 | @ <p>Enter a message to the repository administrator below:</p> |
| 3228 | 3217 | @ <table class="subscribe"> |
| 3229 | 3218 | if( zCaptcha ){ |
| 3230 | 3219 | @ <tr> |
| 3231 | - @ <td class="form_label">Security Code:</td> | |
| 3232 | - @ <td><input type="text" name="captcha" value="" size="10"> | |
| 3220 | + @ <td class="form_label"><label for="captcha">Security Code:</label></td> | |
| 3221 | + @ <td><input type="text" id="captcha" name="captcha" value="" size="10"> | |
| 3233 | 3222 | captcha_speakit_button(uSeed, "Speak the code"); |
| 3234 | 3223 | @ <input type="hidden" name="captchaseed" value="%u(uSeed)"></td> |
| 3235 | 3224 | @ </tr> |
| 3236 | 3225 | } |
| 3237 | 3226 | @ <tr> |
| 3238 | - @ <td class="form_label">Your Email 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 Email Address:</label></td> | |
| 3228 | + @ <td><input type="text" id="from" name="from" value="%h(PT("from"))" size="30"></td> | |
| 3240 | 3229 | @ </tr> |
| 3241 | 3230 | @ <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"))"\ | |
| 3244 | 3233 | @ size="80"></td> |
| 3245 | 3234 | @ </tr> |
| 3246 | 3235 | @ <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">\ | |
| 3249 | 3238 | @ %h(PT("msg"))</textarea> |
| 3250 | 3239 | @ </tr> |
| 3251 | 3240 | @ <tr> |
| 3252 | 3241 | @ <td></td> |
| 3253 | 3242 | @ <td><input type="submit" name="submit" value="Send Message"> |
| @@ -3397,12 +3386,12 @@ | ||
| 3397 | 3386 | int aMod = PB("mods"); |
| 3398 | 3387 | const char *aack = aa ? "checked" : ""; |
| 3399 | 3388 | const char *allck = all ? "checked" : ""; |
| 3400 | 3389 | const char *modck = aMod ? "checked" : ""; |
| 3401 | 3390 | @ <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> | |
| 3404 | 3393 | @ <label><input type="checkbox" name="aa" %s(aack)> \ |
| 3405 | 3394 | @ All "announcement" subscribers</label> \ |
| 3406 | 3395 | @ <a href="%R/subscribers?only=a" target="_blank">(list)</a><br> |
| 3407 | 3396 | @ <label><input type="checkbox" name="all" %s(allck)> \ |
| 3408 | 3397 | @ All subscribers</label> \ |
| @@ -3411,17 +3400,17 @@ | ||
| 3411 | 3400 | @ All moderators</label> \ |
| 3412 | 3401 | @ <a href="%R/setup_ulist?with=5" target="_blank">(list)</a><br></td> |
| 3413 | 3402 | @ </tr> |
| 3414 | 3403 | } |
| 3415 | 3404 | @ <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"))"\ | |
| 3418 | 3407 | @ size="80"></td> |
| 3419 | 3408 | @ </tr> |
| 3420 | 3409 | @ <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">\ | |
| 3423 | 3412 | @ %h(PT("msg"))</textarea> |
| 3424 | 3413 | @ </tr> |
| 3425 | 3414 | @ <tr> |
| 3426 | 3415 | @ <td></td> |
| 3427 | 3416 | if( fossil_strcmp(P("name"),"test2")==0 ){ |
| 3428 | 3417 |
| --- 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 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'>↑ %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'>↑ %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'>↑ %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 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'>← not a valid email address!</span> |
| 1982 | }else if( g.perm.Admin ){ |
| 1983 | @ <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)) ← \ |
| 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 | @ <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 Address:</td> |
| 2282 | @ <td><input type="text" name="e" value="%h(zEAddr)" size="30"></td> |
| 2283 | if( eErr==1 ){ |
| 2284 | @ <td><span class="loginError">← %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">← %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 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 Email 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 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'>↑ %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'>↑ %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'>↑ %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 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'>← not a valid email address!</span> |
| 1975 | }else if( g.perm.Admin ){ |
| 1976 | @ <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)) ← \ |
| 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 | @ <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 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">← %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">← %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 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 Email 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 |
-22
| --- src/allrepo.c | ||
| +++ src/allrepo.c | ||
| @@ -61,88 +61,66 @@ | ||
| 61 | 61 | ** |
| 62 | 62 | ** On Win32 systems, the file is named "_fossil" and is located in |
| 63 | 63 | ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%. |
| 64 | 64 | ** |
| 65 | 65 | ** Available operations are: |
| 66 | -** | |
| 67 | 66 | ** backup Backup all repositories. The argument must be the name of |
| 68 | 67 | ** a directory into which all backup repositories are written. |
| 69 | -** | |
| 70 | 68 | ** cache Manages the cache used for potentially expensive web |
| 71 | 69 | ** pages. Any additional arguments are passed on verbatim |
| 72 | 70 | ** to the cache command. |
| 73 | -** | |
| 74 | 71 | ** changes Shows all local checkouts that have uncommitted changes. |
| 75 | 72 | ** This operation has no additional options. |
| 76 | -** | |
| 77 | 73 | ** clean Delete all "extra" files in all local checkouts. Extreme |
| 78 | 74 | ** caution should be exercised with this command because its |
| 79 | 75 | ** effects cannot be undone. Use of the --dry-run option to |
| 80 | 76 | ** carefully review the local checkouts to be operated upon |
| 81 | 77 | ** and the --whatif option to carefully review the files to |
| 82 | 78 | ** be deleted beforehand is highly recommended. The command |
| 83 | 79 | ** line options supported by the clean command itself, if any |
| 84 | 80 | ** are present, are passed along verbatim. |
| 85 | -** | |
| 86 | 81 | ** config Only the "config pull AREA" command works. |
| 87 | -** | |
| 88 | 82 | ** dbstat Run the "dbstat" command on all repositories. |
| 89 | -** | |
| 90 | 83 | ** extras Shows "extra" files from all local checkouts. The command |
| 91 | 84 | ** line options supported by the extra command itself, if any |
| 92 | 85 | ** are present, are passed along verbatim. |
| 93 | -** | |
| 94 | 86 | ** fts-config Run the "fts-config" command on all repositories. |
| 95 | -** | |
| 96 | 87 | ** git CMD Do the "git export" or "git status" command (whichever |
| 97 | 88 | ** is specified by CMD) on all repositories for which |
| 98 | 89 | ** a Git mirror has been previously established. |
| 99 | -** | |
| 100 | 90 | ** info Run the "info" command on all repositories. |
| 101 | -** | |
| 102 | 91 | ** pull Run a "pull" operation on all repositories. Only the |
| 103 | 92 | ** --verbose and --share-links options are supported. |
| 104 | -** | |
| 105 | 93 | ** push Run a "push" on all repositories. Only the --verbose |
| 106 | 94 | ** option is supported. |
| 107 | -** | |
| 108 | 95 | ** rebuild Rebuild on all repositories. The command line options |
| 109 | 96 | ** supported by the rebuild command itself, if any are |
| 110 | 97 | ** present, are passed along verbatim. The --force and |
| 111 | 98 | ** --randomize options are not supported. |
| 112 | -** | |
| 113 | 99 | ** sync Run a "sync" on all repositories. Only the --verbose |
| 114 | 100 | ** and --unversioned and --share-links options are supported. |
| 115 | -** | |
| 116 | 101 | ** set Run the "setting" or "set" commands on all |
| 117 | 102 | ** repositories. These command are particularly useful in |
| 118 | 103 | ** conjunction with the "max-loadavg" setting which cannot |
| 119 | 104 | ** otherwise be set globally. |
| 120 | -** | |
| 121 | 105 | ** unset Run the "unset" command on all repositories |
| 122 | -** | |
| 123 | 106 | ** server Run the "server" commands on all repositories. |
| 124 | 107 | ** The root URI gives a listing of all repos. |
| 125 | -** | |
| 126 | 108 | ** ui Run the "ui" command on all repositories. Like "server" |
| 127 | 109 | ** but bind to the loopback TCP address only, enable |
| 128 | 110 | ** the --localauth option and automatically launch a |
| 129 | 111 | ** web-browser |
| 130 | 112 | ** |
| 131 | -** | |
| 132 | 113 | ** In addition, the following maintenance operations are supported: |
| 133 | -** | |
| 134 | 114 | ** add Add all the repositories named to the set of repositories |
| 135 | 115 | ** tracked by Fossil. Normally Fossil is able to keep up with |
| 136 | 116 | ** this list by itself, but sometimes it can benefit from this |
| 137 | 117 | ** hint if you rename repositories. |
| 138 | -** | |
| 139 | 118 | ** ignore Arguments are repositories that should be ignored by |
| 140 | 119 | ** subsequent clean, extras, list, pull, push, rebuild, and |
| 141 | 120 | ** sync operations. The -c|--ckout option causes the listed |
| 142 | 121 | ** local checkouts to be ignored instead. |
| 143 | -** | |
| 144 | 122 | ** list | ls Display the location of all repositories. The -c|--ckout |
| 145 | 123 | ** option causes all local checkouts to be listed instead. |
| 146 | 124 | ** |
| 147 | 125 | ** Repositories are automatically added to the set of known repositories |
| 148 | 126 | ** when one of the following commands are run against the repository: |
| 149 | 127 |
| --- 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 @@ | ||
| 398 | 398 | @ <h2>Add Attachment To %s(zTargetType)</h2> |
| 399 | 399 | form_begin("enctype='multipart/form-data'", "%R/attachadd"); |
| 400 | 400 | @ <div> |
| 401 | 401 | @ File to Attach: |
| 402 | 402 | @ <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 /> | |
| 405 | 405 | if( zTkt ){ |
| 406 | 406 | @ <input type="hidden" name="tkt" value="%h(zTkt)" /> |
| 407 | 407 | }else if( zTechNote ){ |
| 408 | 408 | @ <input type="hidden" name="technote" value="%h(zTechNote)" /> |
| 409 | 409 | }else{ |
| @@ -678,18 +678,17 @@ | ||
| 678 | 678 | ** COMMAND: attachment* |
| 679 | 679 | ** |
| 680 | 680 | ** Usage: %fossil attachment add ?PAGENAME? FILENAME ?OPTIONS? |
| 681 | 681 | ** |
| 682 | 682 | ** Add an attachment to an existing wiki page or tech note. |
| 683 | -** Options: | |
| 684 | 683 | ** |
| 684 | +** Options: | |
| 685 | 685 | ** -t|--technote DATETIME Specifies the timestamp of |
| 686 | 686 | ** the technote to which the attachment |
| 687 | 687 | ** is to be made. The attachment will be |
| 688 | 688 | ** to the most recently modified tech note |
| 689 | 689 | ** with the specified timestamp. |
| 690 | -** | |
| 691 | 690 | ** -t|--technote TECHNOTE-ID Specifies the technote to be |
| 692 | 691 | ** updated by its technote id. |
| 693 | 692 | ** |
| 694 | 693 | ** One of PAGENAME, DATETIME or TECHNOTE-ID must be specified. |
| 695 | 694 | ** |
| @@ -792,11 +791,10 @@ | ||
| 792 | 791 | ** name arguments are glob prefixes for the attachment.target |
| 793 | 792 | ** field. If no names are provided then a prefix of [a-zA-Z] is used, |
| 794 | 793 | ** which will match most wiki page names and some ticket hashes. |
| 795 | 794 | ** |
| 796 | 795 | ** Options: |
| 797 | -** | |
| 798 | 796 | ** -latest List only the latest version of a given attachment. |
| 799 | 797 | ** |
| 800 | 798 | */ |
| 801 | 799 | void test_list_attachments(void){ |
| 802 | 800 | Stmt q; |
| 803 | 801 |
| --- 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 |
-7
| --- src/backoffice.c | ||
| +++ src/backoffice.c | ||
| @@ -679,34 +679,27 @@ | ||
| 679 | 679 | ** backoffice work is done in-process. But if there are multiple repositories |
| 680 | 680 | ** or if --poll is used, a separate sub-process is started for each poll of |
| 681 | 681 | ** each repository. |
| 682 | 682 | ** |
| 683 | 683 | ** Standard options: |
| 684 | -** | |
| 685 | 684 | ** --debug Show what this command is doing. |
| 686 | -** | |
| 687 | 685 | ** --logfile FILE Append a log of backoffice actions onto FILE. |
| 688 | -** | |
| 689 | 686 | ** --min N When polling, invoke backoffice at least |
| 690 | 687 | ** once every N seconds even if the repository |
| 691 | 688 | ** never changes. 0 or negative means disable |
| 692 | 689 | ** this feature. Default: 3600 (once per hour). |
| 693 | -** | |
| 694 | 690 | ** --poll N Repeat backoffice calls for repositories that |
| 695 | 691 | ** change in appoximately N-second intervals. |
| 696 | 692 | ** N less than 1 turns polling off (the default). |
| 697 | 693 | ** Recommended polling interval: 60 seconds. |
| 698 | -** | |
| 699 | 694 | ** --trace Enable debugging output on stderr |
| 700 | 695 | ** |
| 701 | 696 | ** Options intended for internal use only which may change or be |
| 702 | 697 | ** discontinued in future releases: |
| 703 | -** | |
| 704 | 698 | ** --nodelay Do not queue up or wait for a backoffice job |
| 705 | 699 | ** to complete. If no work is available or if |
| 706 | 700 | ** backoffice has run recently, return immediately. |
| 707 | -** | |
| 708 | 701 | ** --nolease Always run backoffice, even if there is a lease |
| 709 | 702 | ** conflict. This option implies --nodelay. This |
| 710 | 703 | ** option is added to secondary backoffice commands |
| 711 | 704 | ** that are invoked by the --poll option. |
| 712 | 705 | */ |
| 713 | 706 |
| --- 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 @@ | ||
| 470 | 470 | ** |
| 471 | 471 | ** Usage: %fossil bisect SUBCOMMAND ... |
| 472 | 472 | ** |
| 473 | 473 | ** Run various subcommands useful for searching back through the change |
| 474 | 474 | ** history for a particular checkin that causes or fixes a problem. |
| 475 | -** | |
| 476 | 475 | ** > fossil bisect bad ?VERSION? |
| 477 | -** | |
| 478 | 476 | ** Identify version VERSION as non-working. If VERSION is omitted, |
| 479 | 477 | ** the current checkout is marked as non-working. |
| 480 | -** | |
| 481 | 478 | ** > fossil bisect good ?VERSION? |
| 482 | -** | |
| 483 | 479 | ** Identify version VERSION as working. If VERSION is omitted, |
| 484 | 480 | ** the current checkout is marked as working. |
| 485 | -** | |
| 486 | 481 | ** > fossil bisect log |
| 487 | 482 | ** > fossil bisect chart |
| 488 | -** | |
| 489 | 483 | ** Show a log of "good", "bad", and "skip" versions. "bisect log" |
| 490 | 484 | ** shows the events in the order that they were tested. |
| 491 | 485 | ** "bisect chart" shows them in order of check-in. |
| 492 | -** | |
| 493 | 486 | ** > fossil bisect next |
| 494 | -** | |
| 495 | 487 | ** Update to the next version that is halfway between the working and |
| 496 | 488 | ** non-working versions. |
| 497 | -** | |
| 498 | 489 | ** > fossil bisect options ?NAME? ?VALUE? |
| 499 | -** | |
| 500 | 490 | ** List all bisect options, or the value of a single option, or set the |
| 501 | 491 | ** value of a bisect option. |
| 502 | -** | |
| 503 | 492 | ** > fossil bisect reset |
| 504 | -** | |
| 505 | 493 | ** Reinitialize a bisect session. This cancels prior bisect history |
| 506 | 494 | ** and allows a bisect session to start over from the beginning. |
| 507 | -** | |
| 508 | 495 | ** > fossil bisect run [OPTIONS] COMMAND |
| 509 | -** | |
| 510 | 496 | ** Invoke COMMAND repeatedly to run the bisect. The exit code for |
| 511 | 497 | ** COMMAND should be 0 for "good", 125 for "skip", and any other value |
| 512 | -** for "bad". Options: | |
| 498 | +** for "bad". | |
| 513 | 499 | ** |
| 500 | +** Options: | |
| 514 | 501 | ** -i|--interactive Prompt the user for the good/bad/skip decision |
| 515 | 502 | ** after each step, rather than using the exit |
| 516 | 503 | ** code from COMMAND |
| 517 | -** | |
| 518 | 504 | ** > fossil bisect skip ?VERSION? |
| 519 | -** | |
| 520 | 505 | ** Cause VERSION (or the current checkout if VERSION is omitted) to |
| 521 | 506 | ** be ignored for the purpose of the current bisect. This might |
| 522 | 507 | ** be done, for example, because VERSION does not compile correctly |
| 523 | 508 | ** or is otherwise unsuitable to participate in this bisect. |
| 524 | -** | |
| 525 | 509 | ** > fossil bisect vlist|ls|status ?-a|--all? |
| 526 | -** | |
| 527 | 510 | ** List the versions in between the inner-most "bad" and "good". |
| 528 | -** | |
| 529 | 511 | ** > fossil bisect ui |
| 530 | -** | |
| 531 | 512 | ** Like "fossil ui" except start on a timeline that shows only the |
| 532 | 513 | ** check-ins that are part of the current bisect. |
| 533 | -** | |
| 534 | 514 | ** > fossil bisect undo |
| 535 | -** | |
| 536 | 515 | ** Undo the most recent "good", "bad", or "skip" command. |
| 537 | 516 | */ |
| 538 | 517 | void bisect_cmd(void){ |
| 539 | 518 | int n; |
| 540 | 519 | const char *zCmd; |
| 541 | 520 |
| --- 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 @@ | ||
| 1635 | 1635 | ** result. Append each argument to "fossil test-echo" and run that |
| 1636 | 1636 | ** using fossil_system() to verify that it really does get escaped |
| 1637 | 1637 | ** correctly. |
| 1638 | 1638 | ** |
| 1639 | 1639 | ** Other options: |
| 1640 | -** | |
| 1641 | 1640 | ** --filename-args BOOL Subsequent arguments are assumed to be |
| 1642 | 1641 | ** filenames if BOOL is true, or not if BOOL |
| 1643 | 1642 | ** is false. Defaults on. |
| 1644 | -** | |
| 1645 | 1643 | ** --hex HEX Skip the --hex flag and instead decode HEX |
| 1646 | 1644 | ** into ascii. This provides a way to insert |
| 1647 | 1645 | ** unusual characters as an argument for testing. |
| 1648 | -** | |
| 1649 | 1646 | ** --compare HEX ASCII Verify that argument ASCII is identical to |
| 1650 | 1647 | ** to decoded HEX. |
| 1651 | -** | |
| 1652 | 1648 | ** --fuzz N Run N fuzz cases. Each cases is a call |
| 1653 | 1649 | ** to "fossil test-escaped-arg --compare HEX ARG" |
| 1654 | 1650 | ** where HEX and ARG are the same argument. |
| 1655 | 1651 | ** The argument is chosen at random. |
| 1656 | 1652 | */ |
| 1657 | 1653 |
| --- 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 @@ | ||
| 584 | 584 | ** |
| 585 | 585 | ** Usage: %fossil branch SUBCOMMAND ... ?OPTIONS? |
| 586 | 586 | ** |
| 587 | 587 | ** Run various subcommands to manage branches of the open repository or |
| 588 | 588 | ** of the repository identified by the -R or --repository option. |
| 589 | -** | |
| 590 | 589 | ** > fossil branch close|reopen ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES? |
| 591 | -** | |
| 592 | 590 | ** Adds or cancels the "closed" tag to one or more branches. |
| 593 | 591 | ** It accepts arbitrary unambiguous symbolic names but |
| 594 | 592 | ** will only resolve checkin names and skips any which resolve |
| 595 | -** to non-leaf checkins. Options: | |
| 593 | +** to non-leaf checkins. | |
| 594 | +** | |
| 595 | +** Options: | |
| 596 | 596 | ** -n|--dry-run do not commit changes and dump artifact |
| 597 | 597 | ** to stdout |
| 598 | 598 | ** -v|--verbose output more information |
| 599 | 599 | ** --date-override DATE DATE to use instead of 'now' |
| 600 | 600 | ** --user-override USER USER to use instead of the current default |
| 601 | -** | |
| 602 | 601 | ** > fossil branch current |
| 603 | -** | |
| 604 | 602 | ** Print the name of the branch for the current check-out |
| 605 | -** | |
| 606 | 603 | ** > fossil branch hide|unhide ?OPTIONS? BRANCH-NAME ?...BRANCH-NAMES? |
| 607 | -** | |
| 608 | 604 | ** Adds or cancels the "hidden" tag for the specified branches or |
| 609 | 605 | ** or checkin IDs. Accepts the same options as the close |
| 610 | 606 | ** subcommand. |
| 611 | -** | |
| 612 | 607 | ** > fossil branch info BRANCH-NAME |
| 613 | -** | |
| 614 | 608 | ** Print information about a branch |
| 615 | -** | |
| 616 | 609 | ** > fossil branch list|ls ?OPTIONS? ?GLOB? |
| 617 | 610 | ** > fossil branch lsh ?OPTIONS? ?LIMIT? |
| 611 | +** List all branches. | |
| 618 | 612 | ** |
| 619 | -** List all branches. Options: | |
| 613 | +** Options: | |
| 620 | 614 | ** -a|--all List all branches. Default show only open branches |
| 621 | 615 | ** -c|--closed List closed branches. |
| 622 | 616 | ** -p List only private branches. |
| 623 | 617 | ** -r Reverse the sort order |
| 624 | 618 | ** -t Show recently changed branches first |
| @@ -630,13 +624,11 @@ | ||
| 630 | 624 | ** |
| 631 | 625 | ** The "lsh" variant of this subcommand shows recently changed branches, |
| 632 | 626 | ** and accepts an optional LIMIT argument (defaults to 5) to cap output, |
| 633 | 627 | ** but no GLOB argument. All other options are supported, with -t being |
| 634 | 628 | ** an implied no-op. |
| 635 | -** | |
| 636 | 629 | ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS? |
| 637 | -** | |
| 638 | 630 | ** Create a new branch BRANCH-NAME off of check-in BASIS. |
| 639 | 631 | ** Supported options for this subcommand include: |
| 640 | 632 | ** --private branch is private (i.e., remains local) |
| 641 | 633 | ** --bgcolor COLOR use COLOR instead of automatic background |
| 642 | 634 | ** ("auto" lets Fossil choose it automatically, |
| @@ -650,11 +642,10 @@ | ||
| 650 | 642 | ** replaced by a space, and it may also name a timezone offset |
| 651 | 643 | ** from UTC as "-HH:MM" (westward) or "+HH:MM" (eastward). |
| 652 | 644 | ** Either no timezone suffix or "Z" means UTC. |
| 653 | 645 | ** |
| 654 | 646 | ** Options valid for all subcommands: |
| 655 | -** | |
| 656 | 647 | ** -R|--repository REPO Run commands on repository REPO |
| 657 | 648 | */ |
| 658 | 649 | void branch_cmd(void){ |
| 659 | 650 | int n; |
| 660 | 651 | const char *zCmd = "list"; |
| @@ -809,12 +800,12 @@ | ||
| 809 | 800 | if( zBgClr && zBgClr[0] && show_colors ){ |
| 810 | 801 | @ <tr style="background-color:%s(zBgClr)"> |
| 811 | 802 | }else{ |
| 812 | 803 | @ <tr> |
| 813 | 804 | } |
| 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> | |
| 816 | 807 | @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td> |
| 817 | 808 | @ <td>%d(nCkin)</td> |
| 818 | 809 | fossil_free(zAge); |
| 819 | 810 | @ <td>%s(isClosed?"closed":"")</td> |
| 820 | 811 | if( zMergeTo ){ |
| @@ -837,11 +828,10 @@ | ||
| 837 | 828 | ** Show a list of branches. With no query parameters, a sortable table |
| 838 | 829 | ** is used to show all branches. If query parameters are present a |
| 839 | 830 | ** fixed bullet list is shown. |
| 840 | 831 | ** |
| 841 | 832 | ** Query parameters: |
| 842 | -** | |
| 843 | 833 | ** all Show all branches |
| 844 | 834 | ** closed Show only closed branches |
| 845 | 835 | ** open Show only open branches |
| 846 | 836 | ** colortest Show all branches with automatic color |
| 847 | 837 | ** |
| @@ -968,11 +958,10 @@ | ||
| 968 | 958 | ** WEBPAGE: brtimeline |
| 969 | 959 | ** |
| 970 | 960 | ** Show a timeline of all branches |
| 971 | 961 | ** |
| 972 | 962 | ** Query parameters: |
| 973 | -** | |
| 974 | 963 | ** ng No graph |
| 975 | 964 | ** nohidden Hide check-ins with "hidden" tag |
| 976 | 965 | ** onlyhidden Show only check-ins with "hidden" tag |
| 977 | 966 | ** brbg Background color by branch name |
| 978 | 967 | ** ubg Background color by user name |
| 979 | 968 |
| --- 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 @@ | ||
| 126 | 126 | ** source tree. Only files for a single check-in are shown if the ci= |
| 127 | 127 | ** query parameter is present. If ci= is missing, the union of files |
| 128 | 128 | ** across all check-ins is shown. |
| 129 | 129 | ** |
| 130 | 130 | ** Query parameters: |
| 131 | -** | |
| 132 | 131 | ** ci=LABEL Show only files in this check-in. Optional. |
| 133 | 132 | ** name=PATH Directory to display. Optional. Top-level if missing |
| 134 | 133 | ** re=REGEXP Show only files matching REGEXP |
| 135 | 134 | ** type=TYPE TYPE=flat: use this display |
| 136 | 135 | ** TYPE=tree: use the /tree display instead |
| @@ -640,11 +639,10 @@ | ||
| 640 | 639 | ** |
| 641 | 640 | ** The type=tree query parameter is required or else the /dir format is |
| 642 | 641 | ** used. |
| 643 | 642 | ** |
| 644 | 643 | ** Query parameters: |
| 645 | -** | |
| 646 | 644 | ** type=tree Required to prevent use of /dir format |
| 647 | 645 | ** name=PATH Directory to display. Optional |
| 648 | 646 | ** ci=LABEL Show only files in this check-in. Optional. |
| 649 | 647 | ** re=REGEXP Show only files matching REGEXP. Optional. |
| 650 | 648 | ** expand Begin with the tree fully expanded. |
| @@ -764,11 +762,11 @@ | ||
| 764 | 762 | style_submenu_element("Top-Level", "%s", |
| 765 | 763 | url_render(&sURI, "name", 0, 0, 0)); |
| 766 | 764 | }else if( zRE ){ |
| 767 | 765 | blob_appendf(&dirname, "matching \"%s\"", zRE); |
| 768 | 766 | } |
| 769 | - style_submenu_binary("mtime","Sort By Time","Sort By Filename", 0); | |
| 767 | + style_submenu_binary("mtime","Sort By","Time","Filename", 0); | |
| 770 | 768 | if( zCI ){ |
| 771 | 769 | style_submenu_element("All", "%s", url_render(&sURI, "ci", 0, 0, 0)); |
| 772 | 770 | if( nD==0 && !showDirOnly ){ |
| 773 | 771 | style_submenu_element("File Ages", "%R/fileage?name=%T", zCI); |
| 774 | 772 | } |
| 775 | 773 |
| --- 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 @@ | ||
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | /* |
| 160 | 160 | ** WEBPAGE: builtin loadavg-exempt |
| 161 | 161 | ** |
| 162 | -** Return one of many built-in content files. Query parameters: | |
| 162 | +** Return one of many built-in content files. | |
| 163 | 163 | ** |
| 164 | +** Query parameters: | |
| 164 | 165 | ** name=FILENAME Return the single file whose name is FILENAME. |
| 165 | 166 | ** mimetype=TYPE Override the mimetype in the returned file to |
| 166 | 167 | ** be TYPE. If this query parameter is omitted |
| 167 | 168 | ** (the usual case) then the mimetype is inferred |
| 168 | 169 | ** from the suffix on FILENAME |
| 169 | 170 |
| --- 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 @@ | ||
| 719 | 719 | |
| 720 | 720 | /* |
| 721 | 721 | ** COMMAND: bundle* |
| 722 | 722 | ** |
| 723 | 723 | ** Usage: %fossil bundle SUBCOMMAND ARGS... |
| 724 | -** | |
| 725 | 724 | ** > fossil bundle append BUNDLE FILE... |
| 726 | -** | |
| 727 | 725 | ** Add files named on the command line to BUNDLE. This subcommand has |
| 728 | 726 | ** little practical use and is mostly intended for testing. |
| 729 | -** | |
| 730 | 727 | ** > fossil bundle cat BUNDLE HASH... |
| 731 | -** | |
| 732 | 728 | ** Extract one or more artifacts from the bundle and write them |
| 733 | 729 | ** consecutively on standard output. This subcommand was designed |
| 734 | 730 | ** for testing and introspection of bundles and is not something |
| 735 | 731 | ** commonly used. |
| 736 | -** | |
| 737 | 732 | ** > fossil bundle export BUNDLE ?OPTIONS? |
| 738 | -** | |
| 739 | 733 | ** Generate a new bundle, in the file named BUNDLE, that contains a |
| 740 | 734 | ** subset of the check-ins in the repository (usually a single branch) |
| 741 | 735 | ** described by the --branch, --from, --to, and/or --checkin options, |
| 742 | 736 | ** at least one of which is required. If BUNDLE already exists, the |
| 743 | 737 | ** specified content is added to the bundle. |
| 744 | -** | |
| 745 | 738 | ** --branch BRANCH Package all check-ins on BRANCH |
| 746 | 739 | ** --from TAG1 --to TAG2 Package check-ins between TAG1 and TAG2 |
| 747 | 740 | ** --checkin TAG Package the single check-in TAG |
| 748 | 741 | ** --standalone Do no use delta-encoding against |
| 749 | 742 | ** artifacts not in the bundle |
| 750 | -** | |
| 751 | 743 | ** > fossil bundle extend BUNDLE |
| 752 | -** | |
| 753 | 744 | ** The BUNDLE must already exist. This subcommand adds to the bundle |
| 754 | 745 | ** any check-ins that are descendants of check-ins already in the bundle, |
| 755 | 746 | ** and any tags that apply to artifacts in the bundle. |
| 756 | -** | |
| 757 | 747 | ** > fossil bundle import BUNDLE ?--publish? |
| 758 | -** | |
| 759 | 748 | ** Import all content from BUNDLE into the repository. By default, the |
| 760 | 749 | ** imported files are private and will not sync. Use the --publish |
| 761 | 750 | ** option to make the import public. |
| 762 | -** | |
| 763 | 751 | ** > fossil bundle ls BUNDLE |
| 764 | -** | |
| 765 | 752 | ** List the contents of BUNDLE on standard output |
| 766 | -** | |
| 767 | 753 | ** > fossil bundle purge BUNDLE |
| 768 | -** | |
| 769 | 754 | ** Remove from the repository all files that are used exclusively |
| 770 | 755 | ** by check-ins in BUNDLE. This has the effect of undoing a |
| 771 | 756 | ** "fossil bundle import". |
| 772 | 757 | ** |
| 773 | 758 | ** See also: [[publish]] |
| 774 | 759 |
| --- 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 @@ | ||
| 260 | 260 | ** COMMAND: cache* |
| 261 | 261 | ** |
| 262 | 262 | ** Usage: %fossil cache SUBCOMMAND |
| 263 | 263 | ** |
| 264 | 264 | ** Manage the cache used for potentially expensive web pages such as |
| 265 | -** /zip and /tarball. SUBCOMMAND can be: | |
| 265 | +** /zip and /tarball. | |
| 266 | 266 | ** |
| 267 | +** SUBCOMMAND can be: | |
| 267 | 268 | ** clear Remove all entries from the cache. |
| 268 | -** | |
| 269 | 269 | ** init Create the cache file if it does not already exist. |
| 270 | -** | |
| 271 | 270 | ** list|ls List the keys and content sizes and other stats for |
| 272 | 271 | ** all entries currently in the cache. |
| 273 | -** | |
| 274 | 272 | ** size ?N? Query or set the maximum number of entries in the cache. |
| 275 | -** | |
| 276 | 273 | ** status Show a summary of the cache status. |
| 277 | 274 | ** |
| 278 | 275 | ** The cache is stored in a file that is distinct from the repository |
| 279 | 276 | ** but that is held in the same directory as the repository. The cache |
| 280 | 277 | ** file can be deleted in order to completely disable the cache. |
| 281 | 278 |
| --- 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 |
+1
-1
| --- src/capabilities.c | ||
| +++ src/capabilities.c | ||
| @@ -393,11 +393,11 @@ | ||
| 393 | 393 | " WHERE cap GLOB '*[as]*'" |
| 394 | 394 | " ORDER BY 3 ASC", |
| 395 | 395 | zSelfCap, hasPubPages, zSelfCap |
| 396 | 396 | ); |
| 397 | 397 | @ <table id='capabilitySummary' cellpadding="0" cellspacing="0" border="1"> |
| 398 | - @ <tr><th> <th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\ | |
| 398 | + @ <tr><th>Role<th>Code<th>Forum<th>Tickets<th>Wiki<th>Chat\ | |
| 399 | 399 | @ <th>Unversioned Content</th></tr> |
| 400 | 400 | while( db_step(&q)==SQLITE_ROW ){ |
| 401 | 401 | const char *zId = db_column_text(&q, 0); |
| 402 | 402 | const char *zCap = db_column_text(&q, 1); |
| 403 | 403 | int n = db_column_int(&q, 3); |
| 404 | 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> <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 @@ | ||
| 543 | 543 | zDecoded = captcha_decode(uSeed); |
| 544 | 544 | zCaptcha = captcha_render(zDecoded); |
| 545 | 545 | @ <div class="captcha"><table class="captcha"><tr><td><pre class="captcha"> |
| 546 | 546 | @ %h(zCaptcha) |
| 547 | 547 | @ </pre> |
| 548 | - @ Enter security code shown above: | |
| 548 | + @ <label for="captcha">Enter security code shown above:</label> | |
| 549 | 549 | @ <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 /> | |
| 551 | 551 | if( showButton ){ |
| 552 | 552 | @ <input type="submit" value="Submit"> |
| 553 | 553 | } |
| 554 | 554 | @ <br/>\ |
| 555 | 555 | captcha_speakit_button(uSeed, 0); |
| @@ -559,11 +559,11 @@ | ||
| 559 | 559 | /* |
| 560 | 560 | ** Add a "Speak the captcha" button. |
| 561 | 561 | */ |
| 562 | 562 | void captcha_speakit_button(unsigned int uSeed, const char *zMsg){ |
| 563 | 563 | 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)" \ | |
| 565 | 565 | @ id="speakthetext"> |
| 566 | 566 | @ <script nonce="%h(style_nonce())">/* captcha_speakit_button() */ |
| 567 | 567 | @ document.getElementById("speakthetext").onclick = function(){ |
| 568 | 568 | @ var audio = window.fossilAudioCaptcha \ |
| 569 | 569 | @ || new Audio("%R/captcha-audio/%u(uSeed)"); |
| @@ -574,10 +574,11 @@ | ||
| 574 | 574 | @ </script> |
| 575 | 575 | } |
| 576 | 576 | |
| 577 | 577 | /* |
| 578 | 578 | ** WEBPAGE: test-captcha |
| 579 | +** | |
| 579 | 580 | ** Test the captcha-generator by rendering the value of the name= query |
| 580 | 581 | ** parameter using ascii-art. If name= is omitted, show a random 16-digit |
| 581 | 582 | ** hexadecimal number. |
| 582 | 583 | */ |
| 583 | 584 | void captcha_test(void){ |
| 584 | 585 |
| --- 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 @@ | ||
| 701 | 701 | ** /chat-fetch-one/N |
| 702 | 702 | ** |
| 703 | 703 | ** Fetches a single message with the given ID, if available. |
| 704 | 704 | ** |
| 705 | 705 | ** Options: |
| 706 | -** | |
| 707 | 706 | ** raw = the xmsg field will be returned unparsed. |
| 708 | 707 | ** |
| 709 | 708 | ** Response is either a single object in the format returned by |
| 710 | 709 | ** /chat-poll (without the wrapper array) or a JSON-format error |
| 711 | 710 | ** response, as documented for ajax_route_error(). |
| @@ -971,45 +970,35 @@ | ||
| 971 | 970 | ** specified by the --remote option. If there is no default remote |
| 972 | 971 | ** Fossil repository and the --remote option is omitted, then this |
| 973 | 972 | ** command fails with an error. |
| 974 | 973 | ** |
| 975 | 974 | ** Subcommands: |
| 976 | -** | |
| 977 | 975 | ** > fossil chat |
| 978 | -** | |
| 979 | 976 | ** When there is no SUBCOMMAND (when this command is simply "fossil chat") |
| 980 | 977 | ** the response is to bring up a web-browser window to the chatroom |
| 981 | 978 | ** on the default system web-browser. You can accomplish the same by |
| 982 | 979 | ** typing the appropriate URL into the web-browser yourself. This |
| 983 | 980 | ** command is merely a convenience for command-line oriented people. |
| 984 | -** | |
| 985 | 981 | ** > fossil chat pull |
| 986 | -** | |
| 987 | 982 | ** Copy chat content from the server down into the local clone, |
| 988 | 983 | ** as a backup or archive. Setup privilege is required on the server. |
| 989 | -** | |
| 990 | 984 | ** --all Download all chat content. Normally only |
| 991 | 985 | ** previously undownloaded content is retrieved. |
| 992 | 986 | ** --debug Additional debugging output. |
| 993 | 987 | ** --out DATABASE Store CHAT table in separate database file |
| 994 | 988 | ** DATABASE rather that adding to local clone |
| 995 | 989 | ** --unsafe Allow the use of unencrypted http:// |
| 996 | -** | |
| 997 | 990 | ** > fossil chat send [ARGUMENTS] |
| 998 | -** | |
| 999 | 991 | ** This command sends a new message to the chatroom. The message |
| 1000 | 992 | ** to be sent is determined by arguments as follows: |
| 1001 | -** | |
| 1002 | 993 | ** -f|--file FILENAME File to attach to the message |
| 1003 | 994 | ** --as FILENAME2 Causes --file FILENAME to be sent with |
| 1004 | 995 | ** the attachment name FILENAME2 |
| 1005 | 996 | ** -m|--message TEXT Text of the chat message |
| 1006 | 997 | ** --remote URL Send to this remote URL |
| 1007 | 998 | ** --unsafe Allow the use of unencrypted http:// |
| 1008 | -** | |
| 1009 | 999 | ** > fossil chat url |
| 1010 | -** | |
| 1011 | 1000 | ** Show the default URL used to access the chat server. |
| 1012 | 1001 | ** |
| 1013 | 1002 | ** Additional subcommands may be added in the future. |
| 1014 | 1003 | */ |
| 1015 | 1004 | void chat_command(void){ |
| 1016 | 1005 |
| --- 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 @@ | ||
| 169 | 169 | @ <p>Enter candidate branch names below and see them displayed in their |
| 170 | 170 | @ default background colors above.</p> |
| 171 | 171 | for(i=0; i<10; i++){ |
| 172 | 172 | sqlite3_snprintf(sizeof(zNm),zNm,"b%d",i); |
| 173 | 173 | 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 /> | |
| 175 | 177 | } |
| 176 | 178 | @ <input type="submit" value="Submit"> |
| 177 | 179 | @ <input type="submit" name="rand" value="Random"> |
| 178 | 180 | @ </form> |
| 179 | 181 | style_finish_page(); |
| 180 | 182 |
| --- 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 @@ | ||
| 724 | 724 | ** COMMAND: configuration* |
| 725 | 725 | ** |
| 726 | 726 | ** Usage: %fossil configuration METHOD ... ?OPTIONS? |
| 727 | 727 | ** |
| 728 | 728 | ** Where METHOD is one of: export import merge pull push reset. |
| 729 | -** | |
| 730 | 729 | ** > fossil configuration export AREA FILENAME |
| 731 | -** | |
| 732 | 730 | ** Write to FILENAME exported configuration information for AREA. |
| 733 | -** AREA can be one of: | |
| 734 | 731 | ** |
| 732 | +** AREA can be one of: | |
| 735 | 733 | ** all email interwiki project shun skin |
| 736 | 734 | ** ticket user alias subscriber |
| 737 | -** | |
| 738 | 735 | ** > fossil configuration import FILENAME |
| 739 | -** | |
| 740 | 736 | ** Read a configuration from FILENAME, overwriting the current |
| 741 | 737 | ** configuration. |
| 742 | -** | |
| 743 | 738 | ** > fossil configuration merge FILENAME |
| 744 | -** | |
| 745 | 739 | ** Read a configuration from FILENAME and merge its values into |
| 746 | 740 | ** the current configuration. Existing values take priority over |
| 747 | 741 | ** values read from FILENAME. |
| 748 | -** | |
| 749 | 742 | ** > fossil configuration pull AREA ?URL? |
| 750 | -** | |
| 751 | 743 | ** Pull and install the configuration from a different server |
| 752 | 744 | ** identified by URL. If no URL is specified, then the default |
| 753 | 745 | ** server is used. Use the --overwrite flag to completely |
| 754 | 746 | ** replace local settings with content received from URL. |
| 755 | -** | |
| 756 | 747 | ** > fossil configuration push AREA ?URL? |
| 757 | -** | |
| 758 | 748 | ** Push the local configuration into the remote server identified |
| 759 | 749 | ** by URL. Admin privilege is required on the remote server for |
| 760 | 750 | ** this to work. When the same record exists both locally and on |
| 761 | 751 | ** the remote end, the one that was most recently changed wins. |
| 762 | -** | |
| 763 | 752 | ** > fossil configuration reset AREA |
| 764 | -** | |
| 765 | 753 | ** Restore the configuration to the default. AREA as above. |
| 766 | -** | |
| 767 | 754 | ** > fossil configuration sync AREA ?URL? |
| 768 | -** | |
| 769 | 755 | ** Synchronize configuration changes in the local repository with |
| 770 | 756 | ** the remote repository at URL. |
| 771 | 757 | ** |
| 772 | 758 | ** Options: |
| 773 | 759 | ** -R|--repository REPO Affect repository REPO with changes |
| 774 | 760 |
| --- 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 |
-4
| --- src/content.c | ||
| +++ src/content.c | ||
| @@ -957,17 +957,14 @@ | ||
| 957 | 957 | ** Verify that all content can be extracted from the BLOB table correctly. |
| 958 | 958 | ** If the BLOB table is correct, then the repository can always be |
| 959 | 959 | ** successfully reconstructed using "fossil rebuild". |
| 960 | 960 | ** |
| 961 | 961 | ** Options: |
| 962 | -** | |
| 963 | 962 | ** -d|--db-only Run "PRAGMA integrity_check" on the database only. |
| 964 | 963 | ** No other validation is performed. |
| 965 | -** | |
| 966 | 964 | ** --parse Parse all manifests, wikis, tickets, events, and |
| 967 | 965 | ** so forth, reporting any errors found. |
| 968 | -** | |
| 969 | 966 | ** -q|--quick Run "PRAGMA quick_check" on the database only. |
| 970 | 967 | ** No other validation is performed. |
| 971 | 968 | */ |
| 972 | 969 | void test_integrity(void){ |
| 973 | 970 | Stmt q; |
| @@ -1197,11 +1194,10 @@ | ||
| 1197 | 1194 | ** Look at every artifact in the repository and verify that |
| 1198 | 1195 | ** all references are satisfied. Report any referenced artifacts |
| 1199 | 1196 | ** that are missing or shunned. |
| 1200 | 1197 | ** |
| 1201 | 1198 | ** Options: |
| 1202 | -** | |
| 1203 | 1199 | ** --notshunned Do not report shunned artifacts |
| 1204 | 1200 | ** --quiet Only show output if there are errors |
| 1205 | 1201 | */ |
| 1206 | 1202 | void test_missing(void){ |
| 1207 | 1203 | Stmt q; |
| 1208 | 1204 |
| --- 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 |
M
src/db.c
-2
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -867,11 +867,10 @@ | ||
| 867 | 867 | /* |
| 868 | 868 | ** COMMAND: test-db-prepare |
| 869 | 869 | ** Usage: %fossil test-db-prepare ?OPTIONS? SQL-STATEMENT |
| 870 | 870 | ** |
| 871 | 871 | ** Options: |
| 872 | -** | |
| 873 | 872 | ** --auth-report Enable the ticket report query authorizer. |
| 874 | 873 | ** --auth-ticket Enable the ticket schema query authorizer. |
| 875 | 874 | ** |
| 876 | 875 | ** Invoke db_prepare() on the SQL input. Report any errors encountered. |
| 877 | 876 | ** This command is used to verify error detection logic in the db_prepare() |
| @@ -4623,11 +4622,10 @@ | ||
| 4623 | 4622 | ** on the local settings. Use the --global option to change global settings. |
| 4624 | 4623 | ** |
| 4625 | 4624 | ** Options: |
| 4626 | 4625 | ** --global set or unset the given property globally instead of |
| 4627 | 4626 | ** setting or unsetting it for the open repository only. |
| 4628 | -** | |
| 4629 | 4627 | ** --exact only consider exact name matches. |
| 4630 | 4628 | ** |
| 4631 | 4629 | ** See also: [[configuration]] |
| 4632 | 4630 | */ |
| 4633 | 4631 | void setting_cmd(void){ |
| 4634 | 4632 |
| --- 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 @@ | ||
| 86 | 86 | } |
| 87 | 87 | .timelineModernDetail { |
| 88 | 88 | font-size: 80%; |
| 89 | 89 | text-align: right; |
| 90 | 90 | float: right; |
| 91 | - opacity: 0.75; | |
| 92 | 91 | margin-top: 0.5em; |
| 93 | 92 | margin-left: 1em; |
| 94 | 93 | } |
| 95 | 94 | .tl-canvas { |
| 96 | 95 | margin: 0 6px 0 10px; |
| @@ -461,11 +460,11 @@ | ||
| 461 | 460 | } |
| 462 | 461 | td.tktTlOpen { |
| 463 | 462 | color: #800; |
| 464 | 463 | } |
| 465 | 464 | td.tktTlClosed { |
| 466 | - color: #888; | |
| 465 | + color: #757575; | |
| 467 | 466 | } |
| 468 | 467 | span.tktError { |
| 469 | 468 | color: red; |
| 470 | 469 | font-weight: bold; |
| 471 | 470 | } |
| @@ -563,11 +562,11 @@ | ||
| 563 | 562 | /* ^^^ attempt to keep mobile from inflating some text */; |
| 564 | 563 | } |
| 565 | 564 | table.diff pre > ins, |
| 566 | 565 | table.diff pre > del { |
| 567 | 566 | /* Fill platform-dependent color gaps caused by |
| 568 | - inflated line-height */; | |
| 567 | + inflated line-height */ | |
| 569 | 568 | padding: 0.062em 0 0.062em 0; |
| 570 | 569 | } |
| 571 | 570 | table.diff pre > ins > *, |
| 572 | 571 | table.diff pre > del > *{ |
| 573 | 572 | /* Avoid odd-looking color swatches in conjunction with |
| @@ -707,18 +706,18 @@ | ||
| 707 | 706 | td.difftxt ins > ins.edit { |
| 708 | 707 | background-color: #c0c0ff; |
| 709 | 708 | text-decoration: none; |
| 710 | 709 | font-weight: bold; |
| 711 | 710 | } |
| 712 | -body.tkt div.content li > table.udiff { | |
| 711 | +body.tkt main.content li > table.udiff { | |
| 713 | 712 | margin-left: 1.5em; |
| 714 | 713 | margin-top: 0.5em; |
| 715 | 714 | } |
| 716 | -body.tkt div.content ol.tkt-changes > li:target > p > span { | |
| 715 | +body.tkt main.content ol.tkt-changes > li:target > p > span { | |
| 717 | 716 | border-bottom: 3px solid gold; |
| 718 | 717 | } |
| 719 | -body.tkt div.content ol.tkt-changes > li:target > ol { | |
| 718 | +body.tkt main.content ol.tkt-changes > li:target > ol { | |
| 720 | 719 | border-left: 1px solid gold; |
| 721 | 720 | } |
| 722 | 721 | |
| 723 | 722 | span.modpending { |
| 724 | 723 | color: #b03800; |
| 725 | 724 |
| --- 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 |
-1
| --- src/descendants.c | ||
| +++ src/descendants.c | ||
| @@ -536,11 +536,10 @@ | ||
| 536 | 536 | ** A "leaf" is a check-in with no children in the same branch. A |
| 537 | 537 | ** "closed leaf" is a leaf that has a "closed" tag. An "open leaf" |
| 538 | 538 | ** is a leaf without a "closed" tag. |
| 539 | 539 | ** |
| 540 | 540 | ** Query parameters: |
| 541 | -** | |
| 542 | 541 | ** all Show all leaves |
| 543 | 542 | ** closed Show only closed leaves |
| 544 | 543 | ** ng No graph |
| 545 | 544 | ** nohidden Hide check-ins with "hidden" tag |
| 546 | 545 | ** onlyhidden Show only check-ins with "hidden" tag |
| 547 | 546 |
| --- 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 @@ | ||
| 3539 | 3539 | ** that alternative origin. Thus using "origin=trunk" on an historical |
| 3540 | 3540 | ** version of the file shows the first time each line in the file was changed |
| 3541 | 3541 | ** or removed by any subsequent check-in. |
| 3542 | 3542 | ** |
| 3543 | 3543 | ** Query parameters: |
| 3544 | -** | |
| 3545 | 3544 | ** checkin=ID The check-in at which to start the annotation |
| 3546 | 3545 | ** filename=FILENAME The filename. |
| 3547 | 3546 | ** filevers=BOOLEAN Show file versions rather than check-in versions |
| 3548 | 3547 | ** limit=LIMIT Limit the amount of analysis. LIMIT can be one of: |
| 3549 | 3548 | ** none No limit |
| 3550 | 3549 |
| --- 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 @@ | ||
| 798 | 798 | ** WEBPAGE: help |
| 799 | 799 | ** URL: /help?name=CMD |
| 800 | 800 | ** |
| 801 | 801 | ** Show the built-in help text for CMD. CMD can be a command-line interface |
| 802 | 802 | ** command or a page name from the web interface or a setting. |
| 803 | -** Query parameters: | |
| 804 | 803 | ** |
| 804 | +** Query parameters: | |
| 805 | 805 | ** name=CMD Show help for CMD where CMD is a command name or |
| 806 | 806 | ** webpage name or setting name. |
| 807 | -** | |
| 808 | 807 | ** plaintext Show the help within <pre>...</pre>, as if it were |
| 809 | 808 | ** displayed using the "fossil help" command. |
| 810 | -** | |
| 811 | 809 | ** raw Show the raw help text without any formatting. |
| 812 | 810 | ** (Used for debugging.) |
| 813 | 811 | */ |
| 814 | 812 | void help_page(void){ |
| 815 | 813 | const char *zCmd = P("cmd"); |
| @@ -1141,11 +1139,10 @@ | ||
| 1141 | 1139 | ** Display information on how to use TOPIC, which may be a command, webpage, or |
| 1142 | 1140 | ** setting. Webpage names begin with "/". If TOPIC is omitted, a list of |
| 1143 | 1141 | ** topics is returned. |
| 1144 | 1142 | ** |
| 1145 | 1143 | ** The following options can be used when TOPIC is omitted: |
| 1146 | -** | |
| 1147 | 1144 | ** -a|--all List both common and auxiliary commands |
| 1148 | 1145 | ** -o|--options List command-line options common to all commands |
| 1149 | 1146 | ** -s|--setting List setting names |
| 1150 | 1147 | ** -t|--test List unsupported "test" commands |
| 1151 | 1148 | ** -v|--verbose List both names and help text |
| @@ -1155,11 +1152,10 @@ | ||
| 1155 | 1152 | ** and unsupported "test" commands), options, |
| 1156 | 1153 | ** settings, and web pages |
| 1157 | 1154 | ** -e|--everything List all help on all topics |
| 1158 | 1155 | ** |
| 1159 | 1156 | ** These options can be used when TOPIC is present: |
| 1160 | -** | |
| 1161 | 1157 | ** -h|--html Format output as HTML rather than plain text |
| 1162 | 1158 | ** -c|--commands Restrict TOPIC search to commands |
| 1163 | 1159 | */ |
| 1164 | 1160 | void help_cmd(void){ |
| 1165 | 1161 | int rc; |
| 1166 | 1162 |
| --- 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 @@ | ||
| 866 | 866 | ** URL: /doc/CHECKIN/FILE |
| 867 | 867 | ** |
| 868 | 868 | ** CHECKIN can be either tag or hash prefix or timestamp identifying a |
| 869 | 869 | ** particular check-in, or the name of a branch (meaning the most recent |
| 870 | 870 | ** check-in on that branch) or one of various magic words: |
| 871 | -** | |
| 872 | 871 | ** "tip" means the most recent check-in |
| 873 | -** | |
| 874 | 872 | ** "ckout" means the current check-out, if the server is run from |
| 875 | 873 | ** within a check-out, otherwise it is the same as "tip" |
| 876 | -** | |
| 877 | 874 | ** "latest" means use the most recent check-in for the document |
| 878 | 875 | ** regardless of what branch it occurs on. |
| 879 | 876 | ** |
| 880 | 877 | ** FILE is the name of a file to delivered up as a webpage. FILE is relative |
| 881 | 878 | ** to the root of the source tree of the repository. The FILE must |
| @@ -1228,15 +1225,14 @@ | ||
| 1228 | 1225 | ** Search for documents that match a user-supplied full-text search pattern. |
| 1229 | 1226 | ** If no pattern is specified (by the s= query parameter) then the user |
| 1230 | 1227 | ** is prompted to enter a search string. |
| 1231 | 1228 | ** |
| 1232 | 1229 | ** Query parameters: |
| 1233 | -** | |
| 1234 | 1230 | ** s=PATTERN Search for PATTERN |
| 1235 | 1231 | */ |
| 1236 | 1232 | void doc_search_page(void){ |
| 1237 | 1233 | const int isSearch = P("s")!=0; |
| 1238 | 1234 | login_check_credentials(); |
| 1239 | 1235 | style_header("Document Search%s", isSearch ? " Results" : ""); |
| 1240 | 1236 | search_screen(SRCH_DOC, 0); |
| 1241 | 1237 | style_finish_page(); |
| 1242 | 1238 | } |
| 1243 | 1239 |
| --- 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 @@ | ||
| 252 | 252 | ** Usage: fossil test-etag -key KEY-NUMBER -hash HASH |
| 253 | 253 | ** |
| 254 | 254 | ** Generate an etag given a KEY-NUMBER and/or a HASH. |
| 255 | 255 | ** |
| 256 | 256 | ** KEY-NUMBER is some combination of: |
| 257 | -** | |
| 258 | 257 | ** 1 ETAG_CONFIG The config table version number |
| 259 | 258 | ** 2 ETAG_DATA The event table version number |
| 260 | 259 | ** 4 ETAG_COOKIE The display cookie |
| 261 | 260 | */ |
| 262 | 261 | void test_etag_cmd(void){ |
| 263 | 262 |
| --- 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 @@ | ||
| 52 | 52 | ** WEBPAGE: event |
| 53 | 53 | ** |
| 54 | 54 | ** Display a technical note (formerly called an "event"). |
| 55 | 55 | ** |
| 56 | 56 | ** PARAMETERS: |
| 57 | -** | |
| 58 | 57 | ** name=ID Identify the technical note to display. ID must be |
| 59 | 58 | ** complete. |
| 60 | 59 | ** aid=ARTIFACTID Which specific version of the tech-note. Optional. |
| 61 | 60 | ** v=BOOLEAN Show details if TRUE. Default is FALSE. Optional. |
| 62 | 61 | ** |
| @@ -346,16 +345,14 @@ | ||
| 346 | 345 | ** WEBPAGE: eventedit |
| 347 | 346 | ** |
| 348 | 347 | ** Revise or create a technical note (formerly called an "event"). |
| 349 | 348 | ** |
| 350 | 349 | ** Required query parameter: |
| 351 | -** | |
| 352 | 350 | ** name=ID Hex hash ID of the technote. If omitted, a new |
| 353 | 351 | ** tech-note is created. |
| 354 | 352 | ** |
| 355 | 353 | ** POST parameters from the "Cancel", "Preview", or "Submit" buttons: |
| 356 | -** | |
| 357 | 354 | ** w=TEXT Complete text of the technote. |
| 358 | 355 | ** t=TEXT Time of the technote on the timeline (ISO 8601) |
| 359 | 356 | ** c=TEXT Timeline comment |
| 360 | 357 | ** g=TEXT Tags associated with this technote |
| 361 | 358 | ** mimetype=TEXT Mimetype for w= text |
| @@ -526,42 +523,45 @@ | ||
| 526 | 523 | @ <form method="post" action="%R/technoteedit"><div> |
| 527 | 524 | login_insert_csrf_secret(); |
| 528 | 525 | @ <input type="hidden" name="name" value="%h(zId)" /> |
| 529 | 526 | @ <table border="0" cellspacing="10"> |
| 530 | 527 | |
| 531 | - @ <tr><th align="right" valign="top">Timestamp (UTC):</th> | |
| 528 | + @ <tr><th align="right" valign="top"><label for="t">Timestamp (UTC):</label></th> | |
| 532 | 529 | @ <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)" /> | |
| 534 | 531 | @ </td></tr> |
| 535 | 532 | |
| 536 | - @ <tr><th align="right" valign="top">Timeline Comment:</th> | |
| 533 | + @ <tr><th align="right" valign="top"><label for="c">Timeline Comment:</label></th> | |
| 537 | 534 | @ <td valign="top"> |
| 538 | - @ <textarea name="c" class="technoteedit" cols="80" | |
| 535 | + @ <textarea id="c" name="c" class="technoteedit" cols="80" | |
| 539 | 536 | @ rows="3" wrap="virtual">%h(zComment)</textarea> |
| 540 | 537 | @ </td></tr> |
| 541 | 538 | |
| 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> | |
| 543 | 541 | @ <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> | |
| 547 | 545 | @ </td></tr> |
| 548 | 546 | |
| 549 | - @ <tr><th align="right" valign="top">Tags:</th> | |
| 547 | + @ <tr><th align="right" valign="top"><label for="g">Tags:</label></th> | |
| 550 | 548 | @ <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)" /> | |
| 552 | 550 | @ </td></tr> |
| 553 | 551 | |
| 554 | 552 | @ <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>: | |
| 556 | 556 | @ <td valign="top"> |
| 557 | 557 | mimetype_option_menu(zMimetype); |
| 558 | 558 | @ </td></tr> |
| 559 | 559 | |
| 560 | - @ <tr><th align="right" valign="top">Page Content:</th> | |
| 560 | + @ <tr><th align="right" valign="top"><label for="w">Page Content:</label></th> | |
| 561 | 561 | @ <td valign="top"> |
| 562 | - @ <textarea name="w" class="technoteedit" cols="80" | |
| 562 | + @ <textarea id="w" name="w" class="technoteedit" cols="80" | |
| 563 | 563 | @ rows="%d(n)" wrap="virtual">%h(zBody)</textarea> |
| 564 | 564 | @ </td></tr> |
| 565 | 565 | |
| 566 | 566 | @ <tr><td colspan="2"> |
| 567 | 567 | @ <input type="submit" name="cancel" value="Cancel" /> |
| 568 | 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 | ** |
| 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 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 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 |
-7
| --- src/export.c | ||
| +++ src/export.c | ||
| @@ -1816,13 +1816,11 @@ | ||
| 1816 | 1816 | ** |
| 1817 | 1817 | ** Usage: %fossil git SUBCOMMAND |
| 1818 | 1818 | ** |
| 1819 | 1819 | ** Do incremental import or export operations between Fossil and Git. |
| 1820 | 1820 | ** Subcommands: |
| 1821 | -** | |
| 1822 | 1821 | ** > fossil git export [MIRROR] [OPTIONS] |
| 1823 | -** | |
| 1824 | 1822 | ** Write content from the Fossil repository into the Git repository |
| 1825 | 1823 | ** in directory MIRROR. The Git repository is created if it does not |
| 1826 | 1824 | ** already exist. If the Git repository does already exist, then |
| 1827 | 1825 | ** new content added to fossil since the previous export is appended. |
| 1828 | 1826 | ** |
| @@ -1852,19 +1850,14 @@ | ||
| 1852 | 1850 | ** The "trunk" branch of the Fossil repository is |
| 1853 | 1851 | ** mapped into this name. "master" is used if |
| 1854 | 1852 | ** this option is omitted. |
| 1855 | 1853 | ** -q|--quiet Reduce output. Repeat for even less output. |
| 1856 | 1854 | ** -v|--verbose More output. |
| 1857 | -** | |
| 1858 | 1855 | ** > fossil git import MIRROR |
| 1859 | -** | |
| 1860 | 1856 | ** TBD... |
| 1861 | -** | |
| 1862 | 1857 | ** > fossil git status |
| 1863 | -** | |
| 1864 | 1858 | ** Show the status of the current Git mirror, if there is one. |
| 1865 | -** | |
| 1866 | 1859 | ** -q|--quiet No output if there is nothing to report |
| 1867 | 1860 | */ |
| 1868 | 1861 | void gitmirror_command(void){ |
| 1869 | 1862 | char *zCmd; |
| 1870 | 1863 | int nCmd; |
| 1871 | 1864 |
| --- 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 @@ | ||
| 1475 | 1475 | ** |
| 1476 | 1476 | ** Display the effective file handling subsystem "settings" and then |
| 1477 | 1477 | ** display file system information about the files specified, if any. |
| 1478 | 1478 | ** |
| 1479 | 1479 | ** Options: |
| 1480 | -** | |
| 1481 | 1480 | ** --allow-symlinks BOOLEAN Temporarily turn allow-symlinks on/off |
| 1482 | 1481 | ** --open-config Open the configuration database first. |
| 1483 | 1482 | ** --reset Reset cached stat() info for each file. |
| 1484 | 1483 | ** --root ROOT Use ROOT as the root of the checkout |
| 1485 | 1484 | ** --slash Trailing slashes, if any, are retained. |
| 1486 | 1485 |
| --- 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 @@ | ||
| 698 | 698 | ** |
| 699 | 699 | ** where FILENAME is a repo-relative name as it would appear in the |
| 700 | 700 | ** vfile table. |
| 701 | 701 | ** |
| 702 | 702 | ** Options: |
| 703 | -** | |
| 704 | 703 | ** -R|--repository REPO The repository file to commit to. |
| 705 | 704 | ** --as FILENAME The repository-side name of the input |
| 706 | 705 | ** file, relative to the top of the |
| 707 | 706 | ** repository. Default is the same as the |
| 708 | 707 | ** input file name. |
| @@ -1538,11 +1537,10 @@ | ||
| 1538 | 1537 | ** Note that fileedit-glob, by design, is a local-only setting. |
| 1539 | 1538 | ** It does not sync across repository clones, and must be explicitly |
| 1540 | 1539 | ** set on any repositories where this page should be activated. |
| 1541 | 1540 | ** |
| 1542 | 1541 | ** Optional query parameters: |
| 1543 | -** | |
| 1544 | 1542 | ** filename=FILENAME Repo-relative path to the file. |
| 1545 | 1543 | ** checkin=VERSION Checkin version, using any unambiguous |
| 1546 | 1544 | ** symbolic version name. |
| 1547 | 1545 | ** |
| 1548 | 1546 | ** If passed a filename but no checkin then it will attempt to |
| @@ -1728,11 +1726,11 @@ | ||
| 1728 | 1726 | "150%", 150, "175%", 175, |
| 1729 | 1727 | "200%", 200, NULL); |
| 1730 | 1728 | CX("</div>"); |
| 1731 | 1729 | CX("<div class='flex-container flex-column stretch'>"); |
| 1732 | 1730 | CX("<textarea name='content' id='fileedit-content-editor' " |
| 1733 | - "class='fileedit' rows='25'>"); | |
| 1731 | + "class='fileedit' rows='25' aria-label='Content' title='Content'>"); | |
| 1734 | 1732 | CX("</textarea>"); |
| 1735 | 1733 | CX("</div>"/*textarea wrapper*/); |
| 1736 | 1734 | CX("</div>"/*#tab-file-content*/); |
| 1737 | 1735 | } |
| 1738 | 1736 | |
| @@ -1906,11 +1904,11 @@ | ||
| 1906 | 1904 | CX("</div>"/*checkboxes*/); |
| 1907 | 1905 | } |
| 1908 | 1906 | |
| 1909 | 1907 | { /******* Commit comment, button, and result manifest *******/ |
| 1910 | 1908 | 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"); | |
| 1912 | 1910 | /* We have two comment input fields, defaulting to single-line |
| 1913 | 1911 | ** mode. JS code sets up the ability to toggle between single- |
| 1914 | 1912 | ** and multi-line modes. */ |
| 1915 | 1913 | CX("<input type='text' name='comment' " |
| 1916 | 1914 | "id='fileedit-comment'></input>"); |
| 1917 | 1915 |
| --- 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 @@ | ||
| 302 | 302 | /* Values for the debug= query parameter to finfo */ |
| 303 | 303 | #define FINFO_DEBUG_MLINK 0x01 |
| 304 | 304 | |
| 305 | 305 | /* |
| 306 | 306 | ** WEBPAGE: finfo |
| 307 | +** | |
| 307 | 308 | ** Usage: |
| 308 | 309 | ** * /finfo?name=FILENAME |
| 309 | 310 | ** * /finfo?name=FILENAME&ci=HASH |
| 310 | 311 | ** |
| 311 | 312 | ** Show the change history for a single file. The name=FILENAME query |
| @@ -316,11 +317,10 @@ | ||
| 316 | 317 | ** If only the name=FILENAME parameter is supplied (if ci=HASH is omitted) |
| 317 | 318 | ** then the graph shows all changes to any file while it happened |
| 318 | 319 | ** to be called FILENAME and changes are not tracked across renames. |
| 319 | 320 | ** |
| 320 | 321 | ** Additional query parameters: |
| 321 | -** | |
| 322 | 322 | ** a=DATETIME Only show changes after DATETIME |
| 323 | 323 | ** b=DATETIME Only show changes before DATETIME |
| 324 | 324 | ** ci=HASH identify a particular version of a file and then |
| 325 | 325 | ** track changes to that file across renames |
| 326 | 326 | ** m=HASH Mark this particular file version. |
| 327 | 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 | ** 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 @@ | ||
| 501 | 501 | zDate = db_text(0, "SELECT datetime(%.17g,toLocal())", p->rDate); |
| 502 | 502 | if( p->pEditPrev ){ |
| 503 | 503 | zPosterName = forum_post_display_name(p->pEditHead, 0); |
| 504 | 504 | zEditorName = forum_post_display_name(p, pManifest); |
| 505 | 505 | zHist = bHist ? "" : zQuery[0]==0 ? "?hist" : "&hist"; |
| 506 | - @ <h3 class='forumPostHdr'>(%d(p->sid)\ | |
| 506 | + @ <h2 class='forumPostHdr'>(%d(p->sid)\ | |
| 507 | 507 | @ .%0*d(fossil_num_digits(p->nEdit))(p->rev)) \ |
| 508 | 508 | if( fossil_strcmp(zPosterName, zEditorName)==0 ){ |
| 509 | 509 | @ By %s(zPosterName) on %h(zDate) edited from \ |
| 510 | 510 | @ %z(href("%R/forumpost/%S?%s%s",p->pEditPrev->zUuid,zQuery,zHist))\ |
| 511 | 511 | @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a> |
| @@ -515,11 +515,11 @@ | ||
| 515 | 515 | @ %z(href("%R/forumpost/%S%s%s",p->pEditPrev->zUuid,zQuery,zHist))\ |
| 516 | 516 | @ %d(p->sid).%0*d(fossil_num_digits(p->nEdit))(p->pEditPrev->rev)</a> |
| 517 | 517 | } |
| 518 | 518 | }else{ |
| 519 | 519 | zPosterName = forum_post_display_name(p, pManifest); |
| 520 | - @ <h3 class='forumPostHdr'>(%d(p->sid)) \ | |
| 520 | + @ <h2 class='forumPostHdr'>(%d(p->sid)) \ | |
| 521 | 521 | @ By %s(zPosterName) on %h(zDate) |
| 522 | 522 | } |
| 523 | 523 | fossil_free(zDate); |
| 524 | 524 | |
| 525 | 525 | |
| @@ -553,11 +553,11 @@ | ||
| 553 | 553 | |
| 554 | 554 | /* Provide a link to the raw source code. */ |
| 555 | 555 | if( !bUnf ){ |
| 556 | 556 | @ %z(href("%R/forumpost/%!S?raw",p->zUuid))[source]</a> |
| 557 | 557 | } |
| 558 | - @ </h3> | |
| 558 | + @ </h2> | |
| 559 | 559 | } |
| 560 | 560 | |
| 561 | 561 | /* Check if this post is approved, also if it's by the current user. */ |
| 562 | 562 | bPrivate = content_is_private(p->fpid); |
| 563 | 563 | bSameUser = login_is_individual() |
| @@ -793,11 +793,10 @@ | ||
| 793 | 793 | ** its entire thread. The selected posting is enclosed within |
| 794 | 794 | ** <div class='forumSel'>...</div>. Javascript is used to move the |
| 795 | 795 | ** selected posting into view after the page loads. |
| 796 | 796 | ** |
| 797 | 797 | ** Query parameters: |
| 798 | -** | |
| 799 | 798 | ** name=X REQUIRED. The hash of the post to display. |
| 800 | 799 | ** t=a Automatic display mode, i.e. hierarchical for |
| 801 | 800 | ** desktop and chronological for mobile. This is the |
| 802 | 801 | ** default if the "t" query parameter is omitted. |
| 803 | 802 | ** t=c Show posts in the order they were written. |
| @@ -820,11 +819,10 @@ | ||
| 820 | 819 | ** Show all forum messages associated with a particular message thread. |
| 821 | 820 | ** The result is basically the same as /forumpost except that none of |
| 822 | 821 | ** the postings in the thread are selected. |
| 823 | 822 | ** |
| 824 | 823 | ** Query parameters: |
| 825 | -** | |
| 826 | 824 | ** name=X REQUIRED. The hash of any post of the thread. |
| 827 | 825 | ** t=a Automatic display mode, i.e. hierarchical for |
| 828 | 826 | ** desktop and chronological for mobile. This is the |
| 829 | 827 | ** default if the "t" query parameter is omitted. |
| 830 | 828 | ** t=c Show posts in the order they were written. |
| @@ -1055,17 +1053,19 @@ | ||
| 1055 | 1053 | const char *zTitle, |
| 1056 | 1054 | const char *zMimetype, |
| 1057 | 1055 | const char *zContent |
| 1058 | 1056 | ){ |
| 1059 | 1057 | 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> | |
| 1062 | 1060 | } |
| 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>: | |
| 1064 | 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> | |
| 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 | 1067 | } |
| 1068 | 1068 | |
| 1069 | 1069 | /* |
| 1070 | 1070 | ** WEBPAGE: forumnew |
| 1071 | 1071 | ** WEBPAGE: forumedit |
| @@ -1189,12 +1189,12 @@ | ||
| 1189 | 1189 | |
| 1190 | 1190 | /* |
| 1191 | 1191 | ** WEBPAGE: forume2 |
| 1192 | 1192 | ** |
| 1193 | 1193 | ** Edit an existing forum message. |
| 1194 | -** Query parameters: | |
| 1195 | 1194 | ** |
| 1195 | +** Query parameters: | |
| 1196 | 1196 | ** fpid=X Hash of the post to be edited. REQUIRED |
| 1197 | 1197 | */ |
| 1198 | 1198 | void forumedit_page(void){ |
| 1199 | 1199 | int fpid; |
| 1200 | 1200 | int froot; |
| @@ -1379,11 +1379,10 @@ | ||
| 1379 | 1379 | ** The main page for the forum feature. Show a list of recent forum |
| 1380 | 1380 | ** threads. Also show a search box at the top if search is enabled, |
| 1381 | 1381 | ** and a button for creating a new thread, if enabled. |
| 1382 | 1382 | ** |
| 1383 | 1383 | ** Query parameters: |
| 1384 | -** | |
| 1385 | 1384 | ** n=N The number of threads to show on each page |
| 1386 | 1385 | ** x=X Skip the first X threads |
| 1387 | 1386 | ** s=Y Search for term Y. |
| 1388 | 1387 | */ |
| 1389 | 1388 | void forum_main_page(void){ |
| 1390 | 1389 |
| --- 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 |
+3
-1
| --- src/fossil.diff.js | ||
| +++ src/fossil.diff.js | ||
| @@ -10,10 +10,12 @@ | ||
| 10 | 10 | const D = window.fossil.dom; |
| 11 | 11 | const addToggle = function(diffElem){ |
| 12 | 12 | const sib = diffElem.previousElementSibling, |
| 13 | 13 | btn = sib ? D.addClass(D.checkbox(true), 'diff-toggle') : 0; |
| 14 | 14 | if(!sib) return; |
| 15 | + D.attr(btn,'aria-label','Toggle Diff') | |
| 16 | + D.attr(btn,'title','Toggle Diff') | |
| 15 | 17 | D.append(sib,btn); |
| 16 | 18 | btn.addEventListener('click', function(){ |
| 17 | 19 | diffElem.classList.toggle('hidden'); |
| 18 | 20 | }, false); |
| 19 | 21 | }; |
| @@ -638,11 +640,11 @@ | ||
| 638 | 640 | const SCROLL_LEN = 25; |
| 639 | 641 | const F = window.fossil, D = F.dom, Diff = F.diff; |
| 640 | 642 | var lastWidth; |
| 641 | 643 | Diff.checkTableWidth = function f(force){ |
| 642 | 644 | if(undefined === f.contentNode){ |
| 643 | - f.contentNode = document.querySelector('div.content'); | |
| 645 | + f.contentNode = document.querySelector('main.content'); | |
| 644 | 646 | } |
| 645 | 647 | force = true; |
| 646 | 648 | const parentCS = window.getComputedStyle(f.contentNode); |
| 647 | 649 | const parentWidth = ( |
| 648 | 650 | //document.body.clientWidth; |
| 649 | 651 |
| --- 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 @@ | ||
| 262 | 262 | element added to it. If legendText is an HTMLElement then is is |
| 263 | 263 | assumed to be a LEGEND and is appended as-is, else it is assumed |
| 264 | 264 | (if truthy) to be a value suitable for passing to |
| 265 | 265 | dom.append(aLegendElement,...). |
| 266 | 266 | */ |
| 267 | - dom.fieldset = function(legendText){ | |
| 267 | + dom.fieldset = function(legendText, labelFor){ | |
| 268 | 268 | const fs = this.create('fieldset'); |
| 269 | 269 | 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 | + } | |
| 276 | 285 | } |
| 277 | 286 | return fs; |
| 278 | 287 | }; |
| 279 | 288 | /** |
| 280 | 289 | Returns a new LEGEND legend element. The given argument, if |
| 281 | 290 | not falsy, is append()ed to the element (so it may be a string |
| 282 | 291 | or DOM element. |
| 283 | 292 | */ |
| 284 | - dom.legend = function(legendText){ | |
| 293 | + dom.legend = function(legendText, labelFor){ | |
| 285 | 294 | 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 | + } | |
| 287 | 301 | return rc; |
| 288 | 302 | }; |
| 289 | 303 | |
| 290 | 304 | /** |
| 291 | 305 | Appends each argument after the first to the first argument |
| @@ -318,12 +332,16 @@ | ||
| 318 | 332 | parent.appendChild(e); |
| 319 | 333 | } |
| 320 | 334 | return parent; |
| 321 | 335 | }; |
| 322 | 336 | |
| 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 | + } | |
| 325 | 343 | }; |
| 326 | 344 | /** |
| 327 | 345 | Returns a new CHECKBOX input element. |
| 328 | 346 | |
| 329 | 347 | Usages: |
| 330 | 348 |
| --- 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 |
+1
-1
| --- src/fossil.page.brlist.js | ||
| +++ src/fossil.page.brlist.js | ||
| @@ -10,11 +10,11 @@ | ||
| 10 | 10 | * For the time being, continueing without 'const' and 'indexOf' |
| 11 | 11 | * (but that may be reconsidered later). |
| 12 | 12 | */ |
| 13 | 13 | window.addEventListener( 'load', function() { |
| 14 | 14 | |
| 15 | -var submenu = document.querySelector("div.submenu"); | |
| 15 | +var submenu = document.querySelector("nav.submenu"); | |
| 16 | 16 | var anchor = document.createElement("A"); |
| 17 | 17 | var brlistDataObj = document.getElementById("brlist-data"); |
| 18 | 18 | var brlistDataTxt = brlistDataObj.textContent || brlistDataObj.innerText; |
| 19 | 19 | var brlistData = JSON.parse(brlistDataTxt); |
| 20 | 20 | anchor.classList.add("label"); |
| 21 | 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("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 |
+12
-11
| --- src/fossil.page.chat.js | ||
| +++ src/fossil.page.chat.js | ||
| @@ -76,16 +76,16 @@ | ||
| 76 | 76 | |
| 77 | 77 | While we're here, we also use this to cap the max-height |
| 78 | 78 | of the input field so that pasting huge text does not scroll |
| 79 | 79 | the upper area of the input widget off-screen. */ |
| 80 | 80 | 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'), | |
| 83 | 83 | document.querySelector('body > #hbdrop'), |
| 84 | - document.querySelector('body > div.footer') | |
| 84 | + document.querySelector('body > footer.footer') | |
| 85 | 85 | ]; |
| 86 | - const contentArea = E1('div.content'); | |
| 86 | + const contentArea = E1('main.content'); | |
| 87 | 87 | const bcl = document.body.classList; |
| 88 | 88 | const resized = function f(){ |
| 89 | 89 | if(f.$disabled) return; |
| 90 | 90 | const wh = window.innerHeight, |
| 91 | 91 | com = bcl.contains('chat-only-mode'); |
| @@ -137,11 +137,11 @@ | ||
| 137 | 137 | btnAttach: E1('#chat-button-attach'), |
| 138 | 138 | inputX: E1('#chat-input-field-x'), |
| 139 | 139 | input1: E1('#chat-input-field-single'), |
| 140 | 140 | inputM: E1('#chat-input-field-multi'), |
| 141 | 141 | inputFile: E1('#chat-input-file'), |
| 142 | - contentDiv: E1('div.content'), | |
| 142 | + contentDiv: E1('main.content'), | |
| 143 | 143 | viewConfig: E1('#chat-config'), |
| 144 | 144 | viewPreview: E1('#chat-preview'), |
| 145 | 145 | previewContent: E1('#chat-preview-content'), |
| 146 | 146 | btnPreview: E1('#chat-button-preview'), |
| 147 | 147 | views: document.querySelectorAll('.chat-view'), |
| @@ -324,13 +324,13 @@ | ||
| 324 | 324 | */ |
| 325 | 325 | chatOnlyMode: function f(yes){ |
| 326 | 326 | if(undefined === f.elemsToToggle){ |
| 327 | 327 | f.elemsToToggle = []; |
| 328 | 328 | 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", | |
| 332 | 332 | "#debugMsg" |
| 333 | 333 | ].join(',') |
| 334 | 334 | ).forEach((e)=>f.elemsToToggle.push(e)); |
| 335 | 335 | } |
| 336 | 336 | if(!arguments.length) yes = true; |
| @@ -1724,16 +1724,18 @@ | ||
| 1724 | 1724 | const label = op.label |
| 1725 | 1725 | ? D.append(D.label(),op.label) : undefined; |
| 1726 | 1726 | const labelWrapper = D.addClass(D.div(), 'label-wrapper'); |
| 1727 | 1727 | var hint; |
| 1728 | 1728 | 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); | |
| 1730 | 1730 | } |
| 1731 | 1731 | if(op.hasOwnProperty('select')){ |
| 1732 | 1732 | const col0 = D.addClass(D.span(/*empty, but for spacing*/), |
| 1733 | 1733 | 'toggle-wrapper'); |
| 1734 | 1734 | D.append(menuEntry, labelWrapper, col0); |
| 1735 | + D.attr(op.select,'aria-label',op.hint); | |
| 1736 | + D.attr(op.select,'title',op.hint); | |
| 1735 | 1737 | D.append(labelWrapper, op.select); |
| 1736 | 1738 | if(hint) D.append(labelWrapper, hint); |
| 1737 | 1739 | if(label) D.append(label); |
| 1738 | 1740 | if(op.callback){ |
| 1739 | 1741 | op.select.addEventListener('change', (ev)=>op.callback(ev), false); |
| @@ -1745,12 +1747,11 @@ | ||
| 1745 | 1747 | const key = op.boolValue; |
| 1746 | 1748 | op.boolValue = ()=>Chat.settings.getBool(key); |
| 1747 | 1749 | op.persistentSetting = key; |
| 1748 | 1750 | } |
| 1749 | 1751 | 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())); | |
| 1752 | 1753 | const id = 'cfgopt'+f.$id; |
| 1753 | 1754 | const col0 = D.addClass(D.span(), 'toggle-wrapper'); |
| 1754 | 1755 | check.checked = op.boolValue(); |
| 1755 | 1756 | op.checkbox = check; |
| 1756 | 1757 | D.attr(check, 'id', id); |
| 1757 | 1758 |
| --- 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 |
+9
-6
| --- src/fossil.page.fileedit.js | ||
| +++ src/fossil.page.fileedit.js | ||
| @@ -392,24 +392,26 @@ | ||
| 392 | 392 | selFiles = this.e.selectFiles |
| 393 | 393 | = D.addClass(D.select(), 'file-list'), |
| 394 | 394 | btnLoad = this.e.btnLoadFile = |
| 395 | 395 | D.addClass(D.button("Load file"), "flex-shrink"), |
| 396 | 396 | 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'), | |
| 398 | 398 | ciLabelWrapper = D.addClass( |
| 399 | 399 | D.div(), 'flex-container','flex-row', 'flex-shrink', |
| 400 | 400 | 'stretch', 'child-gap-small' |
| 401 | 401 | ), |
| 402 | 402 | btnReload = D.addClass( |
| 403 | 403 | D.button('Reload'), 'flex-shrink' |
| 404 | 404 | ), |
| 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') | |
| 407 | 407 | ; |
| 408 | + D.attr(selCi, 'id',"open-leaf-list"); | |
| 408 | 409 | D.attr(selCi, 'title',"The list of opened leaves."); |
| 409 | 410 | D.attr(selFiles, 'title', |
| 410 | 411 | "The list of editable files for the selected checkin."); |
| 412 | + D.attr(selFiles, 'id',"editable-file-list"); | |
| 411 | 413 | D.attr(btnLoad, 'title', |
| 412 | 414 | "Load the selected file into the editor."); |
| 413 | 415 | D.disable(selCi, selFiles, btnLoad); |
| 414 | 416 | D.attr(selFiles, 'size', 12); |
| 415 | 417 | D.append( |
| @@ -472,13 +474,14 @@ | ||
| 472 | 474 | 'Locally-edited files. Timestamps are the last local edit time. ', |
| 473 | 475 | 'Only the ',P.config.defaultMaxStashSize,' most recent files ', |
| 474 | 476 | 'are retained. Saving or reloading a file removes it from this list. ', |
| 475 | 477 | D.append(D.code(),F.storage.storageImplName()), |
| 476 | 478 | ' = ',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, " (", | |
| 480 | 483 | D.append(D.code(), |
| 481 | 484 | F.storage.storageImplName()), |
| 482 | 485 | "):", |
| 483 | 486 | btnHelp, sel, btnClear); |
| 484 | 487 | F.helpButtonlets.setup(btnHelp); |
| 485 | 488 |
| --- 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 @@ | ||
| 146 | 146 | const selectScript = P.e.selectScript = D.select(), |
| 147 | 147 | cbAutoPreview = P.e.cbAutoPreview = |
| 148 | 148 | D.attr(D.checkbox(true),'id', 'cb-auto-preview'), |
| 149 | 149 | cbWrap = D.addClass(D.div(),'input-with-label') |
| 150 | 150 | ; |
| 151 | + D.attr(selectScript, 'aria-label', 'Example Scripts'); | |
| 152 | + D.attr(selectScript, 'title', 'Example Scripts'); | |
| 151 | 153 | D.append( |
| 152 | 154 | cbWrap, |
| 153 | 155 | selectScript, |
| 154 | 156 | cbAutoPreview, |
| 155 | 157 | D.label(cbAutoPreview,"Auto-preview?"), |
| 156 | 158 |
| --- 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 |
+5
-3
| --- src/fossil.page.pikchrshowasm.js | ||
| +++ src/fossil.page.pikchrshowasm.js | ||
| @@ -371,10 +371,12 @@ | ||
| 371 | 371 | |
| 372 | 372 | //////////////////////////////////////////////////////////// |
| 373 | 373 | // Set up selection list of predefined scripts... |
| 374 | 374 | if(true){ |
| 375 | 375 | const selectScript = PS.e.selectScript = D.select(); |
| 376 | + D.attr(selectScript, 'aria-label', 'Example Scripts'); | |
| 377 | + D.attr(selectScript, 'title', 'Example Scripts'); | |
| 376 | 378 | D.append(PS.e.zoneInputButtons, selectScript); |
| 377 | 379 | PS.predefinedPiks.forEach(function(script,ndx){ |
| 378 | 380 | const opt = D.option(script.code ? script.code.trim() :'', script.name); |
| 379 | 381 | D.append(selectScript, opt); |
| 380 | 382 | if(!ndx) selectScript.selectedIndex = 0 /*timing/ordering workaround*/; |
| @@ -479,13 +481,13 @@ | ||
| 479 | 481 | off-screen. */ |
| 480 | 482 | const appViews = EAll('.app-view'); |
| 481 | 483 | const elemsToCount = [ |
| 482 | 484 | /* Elements which we need to always count in the |
| 483 | 485 | 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') | |
| 487 | 489 | ]; |
| 488 | 490 | const resized = function f(){ |
| 489 | 491 | if(f.$disabled) return; |
| 490 | 492 | const wh = window.innerHeight; |
| 491 | 493 | var ht; |
| 492 | 494 |
| --- 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 |
+8
-5
| --- src/fossil.page.wikiedit.js | ||
| +++ src/fossil.page.wikiedit.js | ||
| @@ -550,14 +550,15 @@ | ||
| 550 | 550 | this.e.select = sel; |
| 551 | 551 | D.addClass(parentElem, 'WikiList'); |
| 552 | 552 | D.clearElement(parentElem); |
| 553 | 553 | D.append( |
| 554 | 554 | parentElem, |
| 555 | - D.append(D.fieldset("Select a page to edit"), | |
| 555 | + D.append(D.fieldset("Select a page to edit", 'select-page'), | |
| 556 | 556 | sel) |
| 557 | 557 | ); |
| 558 | 558 | D.attr(sel, 'size', 12); |
| 559 | + D.attr(sel, 'id', 'select-page'); | |
| 559 | 560 | D.option(D.disable(D.clearElement(sel)), undefined, "Loading..."); |
| 560 | 561 | |
| 561 | 562 | /** Set up filter checkboxes for the various types |
| 562 | 563 | of wiki pages... */ |
| 563 | 564 | const fsFilter = D.addClass(D.fieldset("Page types"),"page-types-list"), |
| @@ -627,13 +628,13 @@ | ||
| 627 | 628 | D.append(D.span(), getEditMarker(getEditMarker.NEW,false)," = new/unsaved"), |
| 628 | 629 | D.append(D.span(), getEditMarker(getEditMarker.MODIFIED,false)," = has local edits"), |
| 629 | 630 | D.append(D.span(), getEditMarker(getEditMarker.DELETED,false)," = is empty (deleted)") |
| 630 | 631 | ); |
| 631 | 632 | |
| 632 | - const fsNewPage = D.fieldset("Create new page"), | |
| 633 | + const fsNewPage = D.fieldset("Create new page", 'new-page'), | |
| 633 | 634 | fsNewPageBody = D.div(), |
| 634 | - newPageName = D.input('text'), | |
| 635 | + newPageName = D.input('text', 'new-page'), | |
| 635 | 636 | newPageBtn = D.button("Add page locally") |
| 636 | 637 | ; |
| 637 | 638 | D.append(parentElem, fsNewPage); |
| 638 | 639 | D.append(fsNewPage, fsNewPageBody); |
| 639 | 640 | D.addClass(fsNewPageBody, 'flex-container', 'flex-column', 'new-page'); |
| @@ -697,12 +698,14 @@ | ||
| 697 | 698 | 'Locally-edited wiki pages. Timestamps are the last local edit time. ', |
| 698 | 699 | 'Only the ',P.config.defaultMaxStashSize,' most recent pages ', |
| 699 | 700 | 'are retained. Saving or reloading a file removes it from this list. ', |
| 700 | 701 | D.append(D.code(),F.storage.storageImplName()), |
| 701 | 702 | ' = ',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, " (", | |
| 704 | 707 | D.append(D.code(), |
| 705 | 708 | F.storage.storageImplName()), |
| 706 | 709 | "):", |
| 707 | 710 | btnHelp, sel, btnClear); |
| 708 | 711 | F.helpButtonlets.setup(btnHelp); |
| 709 | 712 |
| --- 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 @@ | ||
| 24 | 24 | ** Operation: |
| 25 | 25 | ** |
| 26 | 26 | ** This script request that the HTML contain two elements: |
| 27 | 27 | ** |
| 28 | 28 | ** <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 | |
| 30 | 30 | ** |
| 31 | 31 | ** Bindings are made on hbbtn so that when it is clicked, the following |
| 32 | 32 | ** happens: |
| 33 | 33 | ** |
| 34 | 34 | ** 1. An XHR is made to /sitemap?popup to fetch the HTML for the |
| 35 | 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 | ** <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 |
-5
| --- src/hname.c | ||
| +++ src/hname.c | ||
| @@ -234,23 +234,18 @@ | ||
| 234 | 234 | ** |
| 235 | 235 | ** Usage: fossil hash-policy ?NEW-POLICY? |
| 236 | 236 | ** |
| 237 | 237 | ** Query or set the hash policy for the current repository. Available hash |
| 238 | 238 | ** policies are as follows: |
| 239 | -** | |
| 240 | 239 | ** sha1 New artifact names are created using SHA1 |
| 241 | -** | |
| 242 | 240 | ** auto New artifact names are created using SHA1, but |
| 243 | 241 | ** automatically change the policy to "sha3" when |
| 244 | 242 | ** any SHA3 artifact enters the repository. |
| 245 | -** | |
| 246 | 243 | ** sha3 New artifact names are created using SHA3, but |
| 247 | 244 | ** older artifacts with SHA1 names may be reused. |
| 248 | -** | |
| 249 | 245 | ** sha3-only Use only SHA3 artifact names. Do not reuse legacy |
| 250 | 246 | ** SHA1 names. |
| 251 | -** | |
| 252 | 247 | ** shun-sha1 Shun any SHA1 artifacts received by sync operations |
| 253 | 248 | ** other than clones. Older legacy SHA1 artifacts are |
| 254 | 249 | ** allowed during a clone. |
| 255 | 250 | ** |
| 256 | 251 | ** The default hash policy for existing repositories is "auto", which will |
| 257 | 252 |
| --- 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 @@ | ||
| 197 | 197 | ** COMMAND: hook* |
| 198 | 198 | ** |
| 199 | 199 | ** Usage: %fossil hook COMMAND ... |
| 200 | 200 | ** |
| 201 | 201 | ** Commands include: |
| 202 | -** | |
| 203 | 202 | ** > fossil hook add --command COMMAND --type TYPE --sequence NUMBER |
| 204 | -** | |
| 205 | 203 | ** Create a new hook. The --command and --type arguments are |
| 206 | 204 | ** required. --sequence is optional. |
| 207 | -** | |
| 208 | 205 | ** > fossil hook delete ID ... |
| 209 | -** | |
| 210 | 206 | ** Delete one or more hooks by their IDs. ID can be "all" |
| 211 | 207 | ** to delete all hooks. Caution: There is no "undo" for |
| 212 | 208 | ** this operation. Deleted hooks are permanently lost. |
| 213 | -** | |
| 214 | 209 | ** > fossil hook edit --command COMMAND --type TYPE --sequence NUMBER ID ... |
| 215 | -** | |
| 216 | 210 | ** Make changes to one or more existing hooks. The ID argument |
| 217 | 211 | ** is either a hook-id, or a list of hook-ids, or the keyword |
| 218 | 212 | ** "all". For example, to disable hook number 2, use: |
| 219 | 213 | ** |
| 220 | 214 | ** fossil hook edit --type disabled 2 |
| 221 | -** | |
| 222 | 215 | ** > fossil hook list |
| 223 | -** | |
| 224 | 216 | ** Show all current hooks |
| 225 | -** | |
| 226 | 217 | ** > fossil hook status |
| 227 | -** | |
| 228 | 218 | ** Print the values of CONFIG table entries that are relevant to |
| 229 | 219 | ** hook processing. Used for debugging. |
| 230 | -** | |
| 231 | 220 | ** > fossil hook test [OPTIONS] ID |
| 221 | +** Run the hook script given by ID for testing purposes. | |
| 232 | 222 | ** |
| 233 | -** Run the hook script given by ID for testing purposes. | |
| 234 | 223 | ** Options: |
| 235 | -** | |
| 236 | 224 | ** --dry-run Print the script on stdout rather than run it |
| 237 | 225 | ** --base-rcvid N Pretend that the hook-last-rcvid value is N |
| 238 | 226 | ** --new-rcvid M Pretend that the last rcvid valud is M |
| 239 | 227 | ** --aux-file NAME NAME is substituted for %A in the script |
| 240 | -** | |
| 241 | 228 | ** The --base-rcvid and --new-rcvid options are silently ignored if |
| 242 | 229 | ** the hook type is not "after-receive". The default values for |
| 243 | 230 | ** --base-rcvid and --new-rcvid cause the last receive to be processed. |
| 244 | 231 | */ |
| 245 | 232 | void hook_cmd(void){ |
| 246 | 233 |
| --- 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 @@ | ||
| 540 | 540 | ** is written into that second file instead of being written on standard |
| 541 | 541 | ** output. Use the "--out OUTPUT" option to specify an output file for |
| 542 | 542 | ** a GET request where there is no PAYLOAD. |
| 543 | 543 | ** |
| 544 | 544 | ** Options: |
| 545 | -** | |
| 546 | 545 | ** --compress Use ZLIB compression on the payload |
| 547 | 546 | ** --mimetype TYPE Mimetype of the payload |
| 548 | 547 | ** --out FILE Store the reply in FILE |
| 549 | 548 | ** -v Verbose output |
| 550 | 549 | ** --xfer PAYLOAD in a Fossil xfer protocol message |
| 551 | 550 |
| --- 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 |
-3
| --- src/http_ssl.c | ||
| +++ src/http_ssl.c | ||
| @@ -905,19 +905,16 @@ | ||
| 905 | 905 | ** This command is used to view or modify the TLS (Transport Layer |
| 906 | 906 | ** Security) configuration for Fossil. TLS (formerly SSL) is the |
| 907 | 907 | ** encryption technology used for secure HTTPS transport. |
| 908 | 908 | ** |
| 909 | 909 | ** Sub-commands: |
| 910 | -** | |
| 911 | 910 | ** remove-exception DOMAINS Remove TLS cert exceptions for the domains |
| 912 | 911 | ** listed. Or remove them all if the --all |
| 913 | 912 | ** option is specified. |
| 914 | -** | |
| 915 | 913 | ** scrub ?--force? Remove all SSL configuration data from the |
| 916 | 914 | ** repository. Use --force to omit the |
| 917 | 915 | ** confirmation. |
| 918 | -** | |
| 919 | 916 | ** show ?-v? Show the TLS configuration. Add -v to see |
| 920 | 917 | ** additional explaination |
| 921 | 918 | */ |
| 922 | 919 | void test_tlsconfig_info(void){ |
| 923 | 920 | const char *zCmd; |
| 924 | 921 |
| --- 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 @@ | ||
| 1661 | 1661 | ** construct a new Fossil repository named by the NEW-REPOSITORY |
| 1662 | 1662 | ** argument. If no input file is supplied the interchange format |
| 1663 | 1663 | ** data is read from standard input. |
| 1664 | 1664 | ** |
| 1665 | 1665 | ** The following formats are currently understood by this command |
| 1666 | -** | |
| 1667 | 1666 | ** --git Import from the git-fast-export file format (default) |
| 1667 | +** | |
| 1668 | 1668 | ** Options: |
| 1669 | 1669 | ** --import-marks FILE Restore marks table from FILE |
| 1670 | 1670 | ** --export-marks FILE Save marks table to FILE |
| 1671 | 1671 | ** --rename-master NAME Renames the master branch to NAME |
| 1672 | 1672 | ** --use-author Uses author as the committer |
| 1673 | 1673 | ** --attribute "EMAIL USER" Attribute commits to USER |
| 1674 | 1674 | ** instead of Git committer EMAIL address |
| 1675 | -** | |
| 1676 | 1675 | ** --svn Import from the svnadmin-dump file format. The default |
| 1677 | 1676 | ** behaviour (unless overridden by --flat) is to treat 3 |
| 1678 | 1677 | ** folders in the SVN root as special, following the |
| 1679 | 1678 | ** common layout of SVN repositories. These are (by |
| 1680 | 1679 | ** default) trunk/, branches/ and tags/. The SVN --deltas |
| 1681 | 1680 | ** format is supported but not required. |
| 1681 | +** | |
| 1682 | 1682 | ** Options: |
| 1683 | 1683 | ** --trunk FOLDER Name of trunk folder |
| 1684 | 1684 | ** --branches FOLDER Name of branches folder |
| 1685 | 1685 | ** --tags FOLDER Name of tags folder |
| 1686 | 1686 | ** --base PATH Path to project root in repository |
| @@ -1687,11 +1687,10 @@ | ||
| 1687 | 1687 | ** --flat The whole dump is a single branch |
| 1688 | 1688 | ** --rev-tags Tag each revision, implied by -i |
| 1689 | 1689 | ** --no-rev-tags Disables tagging effect of -i |
| 1690 | 1690 | ** --rename-rev PAT Rev tag names, default "svn-rev-%" |
| 1691 | 1691 | ** --ignore-tree DIR Ignores subtree rooted at DIR |
| 1692 | -** | |
| 1693 | 1692 | ** Common Options: |
| 1694 | 1693 | ** -i|--incremental allow importing into an existing repository |
| 1695 | 1694 | ** -f|--force overwrite repository if already exists |
| 1696 | 1695 | ** -q|--quiet omit progress output |
| 1697 | 1696 | ** --no-rebuild skip the "rebuilding metadata" step |
| 1698 | 1697 |
| --- 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 @@ | ||
| 187 | 187 | ** |
| 188 | 188 | ** Use the "finfo" command to get information about a specific |
| 189 | 189 | ** file in a checkout. |
| 190 | 190 | ** |
| 191 | 191 | ** Options: |
| 192 | -** | |
| 193 | 192 | ** -R|--repository REPO Extract info from repository REPO |
| 194 | 193 | ** -v|--verbose Show extra information about repositories |
| 195 | 194 | ** |
| 196 | 195 | ** See also: [[annotate]], [[artifact]], [[finfo]], [[timeline]] |
| 197 | 196 | */ |
| @@ -1154,11 +1153,10 @@ | ||
| 1154 | 1153 | ** |
| 1155 | 1154 | ** Show the difference between two check-ins identified by the from= and |
| 1156 | 1155 | ** to= query parameters. |
| 1157 | 1156 | ** |
| 1158 | 1157 | ** Query parameters: |
| 1159 | -** | |
| 1160 | 1158 | ** from=TAG Left side of the comparison |
| 1161 | 1159 | ** to=TAG Right side of the comparison |
| 1162 | 1160 | ** branch=TAG Show all changes on a particular branch |
| 1163 | 1161 | ** diff=INTEGER 0: none, 1: unified, 2: side-by-side |
| 1164 | 1162 | ** glob=STRING only diff files matching this glob |
| @@ -1656,11 +1654,10 @@ | ||
| 1656 | 1654 | ** SETTING: preferred-diff-type width=16 default=0 |
| 1657 | 1655 | ** |
| 1658 | 1656 | ** The preferred-diff-type setting determines the preferred diff format |
| 1659 | 1657 | ** for web pages if the format is not otherwise specified, for example |
| 1660 | 1658 | ** by a query parameter or cookie. Allowed values: |
| 1661 | -** | |
| 1662 | 1659 | ** 1 Unified diff |
| 1663 | 1660 | ** 2 Side-by-side diff |
| 1664 | 1661 | ** |
| 1665 | 1662 | ** If this setting is omitted or has a value of 0 or less, then it |
| 1666 | 1663 | ** is ignored. |
| @@ -1707,11 +1704,10 @@ | ||
| 1707 | 1704 | ** the names of two files within the check-in "ci" that are diffed. If the |
| 1708 | 1705 | ** "ci" parameter is omitted, then the most recent check-in ("tip") is |
| 1709 | 1706 | ** used. |
| 1710 | 1707 | ** |
| 1711 | 1708 | ** Additional parameters: |
| 1712 | -** | |
| 1713 | 1709 | ** dc=N Show N lines of context around each diff |
| 1714 | 1710 | ** patch Use the patch diff format |
| 1715 | 1711 | ** regex=REGEX Only show differences that match REGEX |
| 1716 | 1712 | ** sbs=BOOLEAN Turn side-by-side diffs on and off (default: on) |
| 1717 | 1713 | ** verbose=BOOLEAN Show more detail when describing artifacts |
| @@ -1834,11 +1830,10 @@ | ||
| 1834 | 1830 | ** WEBPAGE: raw |
| 1835 | 1831 | ** URL: /raw/ARTIFACTID |
| 1836 | 1832 | ** URL: /raw?ci=BRANCH&filename=NAME |
| 1837 | 1833 | ** |
| 1838 | 1834 | ** Additional query parameters: |
| 1839 | -** | |
| 1840 | 1835 | ** m=MIMETYPE The mimetype is MIMETYPE |
| 1841 | 1836 | ** at=FILENAME Content-disposition; attachment; filename=FILENAME; |
| 1842 | 1837 | ** |
| 1843 | 1838 | ** Return the uninterpreted content of an artifact. Used primarily |
| 1844 | 1839 | ** to view artifacts that are images. |
| @@ -2093,11 +2088,10 @@ | ||
| 2093 | 2088 | ** |
| 2094 | 2089 | ** Show the complete content of a file identified by ARTIFACTID |
| 2095 | 2090 | ** as preformatted text. |
| 2096 | 2091 | ** |
| 2097 | 2092 | ** Other parameters: |
| 2098 | -** | |
| 2099 | 2093 | ** verbose Show more detail when describing the object |
| 2100 | 2094 | */ |
| 2101 | 2095 | void hexdump_page(void){ |
| 2102 | 2096 | int rid; |
| 2103 | 2097 | Blob content; |
| @@ -2358,23 +2352,22 @@ | ||
| 2358 | 2352 | ** /artifact/HASH |
| 2359 | 2353 | ** /whatis/HASH |
| 2360 | 2354 | ** /file/NAME |
| 2361 | 2355 | ** |
| 2362 | 2356 | ** 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 | |
| 2376 | 2369 | ** |
| 2377 | 2370 | ** The /artifact page show the complete content of a file |
| 2378 | 2371 | ** identified by HASH. The /whatis page shows only a description |
| 2379 | 2372 | ** of how the artifact is used. The /file page shows the most recent |
| 2380 | 2373 | ** version of the file or directory called NAME, or a list of the |
| @@ -3105,15 +3098,13 @@ | ||
| 3105 | 3098 | ** Edit a check-in. (Check-ins are immutable and do not really change. |
| 3106 | 3099 | ** This page really creates supplemental tags that affect the display |
| 3107 | 3100 | ** of the check-in.) |
| 3108 | 3101 | ** |
| 3109 | 3102 | ** Query parameters: |
| 3110 | -** | |
| 3111 | 3103 | ** rid=INTEGER Record ID of the check-in to edit (REQUIRED) |
| 3112 | 3104 | ** |
| 3113 | 3105 | ** POST parameters after pressing "Preview", "Cancel", or "Apply": |
| 3114 | -** | |
| 3115 | 3106 | ** c=TEXT New check-in comment |
| 3116 | 3107 | ** u=TEXT New user name |
| 3117 | 3108 | ** newclr Apply a background color |
| 3118 | 3109 | ** clr=TEXT New background color (only if newclr) |
| 3119 | 3110 | ** pclr Propagate new background color (only if newclr) |
| @@ -3123,11 +3114,10 @@ | ||
| 3123 | 3114 | ** newbr Put the check-in on a new branch |
| 3124 | 3115 | ** brname=TEXT Name of the new branch (only if newbr) |
| 3125 | 3116 | ** close Close this check-in |
| 3126 | 3117 | ** hide Hide this check-in |
| 3127 | 3118 | ** cNNN Cancel tag with tagid=NNN |
| 3128 | -** | |
| 3129 | 3119 | ** cancel Cancel the edit. Return to the check-in view |
| 3130 | 3120 | ** preview Show a preview of the edited check-in comment |
| 3131 | 3121 | ** apply Apply changes |
| 3132 | 3122 | */ |
| 3133 | 3123 | void ci_edit_page(void){ |
| @@ -3280,29 +3270,30 @@ | ||
| 3280 | 3270 | form_begin(0, "%R/ci_edit"); |
| 3281 | 3271 | login_insert_csrf_secret(); |
| 3282 | 3272 | @ <div><input type="hidden" name="r" value="%s(zUuid)" /> |
| 3283 | 3273 | @ <table border="0" cellspacing="10"> |
| 3284 | 3274 | |
| 3285 | - @ <tr><th align="right" valign="top">User:</th> | |
| 3275 | + @ <tr><th align="right" valign="top"><label for="u">User:</label></th> | |
| 3286 | 3276 | @ <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)" /> | |
| 3288 | 3278 | @ </td></tr> |
| 3289 | 3279 | |
| 3290 | - @ <tr><th align="right" valign="top">Comment:</th> | |
| 3280 | + @ <tr><th align="right" valign="top"><label for="c">Comment:</label></th> | |
| 3291 | 3281 | @ <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> | |
| 3293 | 3283 | @ </td></tr> |
| 3294 | 3284 | |
| 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> | |
| 3296 | 3286 | @ <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)" /> | |
| 3298 | 3288 | @ </td></tr> |
| 3299 | 3289 | |
| 3300 | 3290 | 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> | |
| 3302 | 3293 | @ <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)" /> | |
| 3304 | 3295 | @ </td></tr> |
| 3305 | 3296 | } |
| 3306 | 3297 | |
| 3307 | 3298 | @ <tr><th align="right" valign="top">Background Color:</th> |
| 3308 | 3299 | @ <td valign="top"> |
| @@ -3325,13 +3316,13 @@ | ||
| 3325 | 3316 | @ </td></tr> |
| 3326 | 3317 | |
| 3327 | 3318 | @ <tr><th align="right" valign="top">Tags:</th> |
| 3328 | 3319 | @ <td valign="top"> |
| 3329 | 3320 | @ <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: | |
| 3331 | 3322 | @ <input type="text" size='15' name="tagname" value="%h(zNewTag)" \ |
| 3332 | - @ id='tagname' /> | |
| 3323 | + @ id='tagname' /></label> | |
| 3333 | 3324 | zBranchName = db_text(0, "SELECT value FROM tagxref, tag" |
| 3334 | 3325 | " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid" |
| 3335 | 3326 | " AND tagxref.tagid=%d", rid, TAG_BRANCH); |
| 3336 | 3327 | db_prepare(&q, |
| 3337 | 3328 | "SELECT tag.tagid, tagname, tagxref.value FROM tagxref, tag" |
| @@ -3380,13 +3371,13 @@ | ||
| 3380 | 3371 | } |
| 3381 | 3372 | @ <tr><th align="right" valign="top">Branching:</th> |
| 3382 | 3373 | @ <td valign="top"> |
| 3383 | 3374 | @ <label><input id="newbr" type="checkbox" name="newbr" \ |
| 3384 | 3375 | @ 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: | |
| 3386 | 3377 | @ <input id="brname" type="text" style="width:15;" name="brname" \ |
| 3387 | - @ value="%h(zNewBranch)" /></td></tr> | |
| 3378 | + @ value="%h(zNewBranch)" /></label></td></tr> | |
| 3388 | 3379 | if( !fHasHidden ){ |
| 3389 | 3380 | @ <tr><th align="right" valign="top">Branch Hiding:</th> |
| 3390 | 3381 | @ <td valign="top"> |
| 3391 | 3382 | @ <label><input type="checkbox" id="hidebr" name="hide"%s(zHideFlag) /> |
| 3392 | 3383 | @ Hide branch |
| @@ -3471,11 +3462,10 @@ | ||
| 3471 | 3462 | ** Usage: %fossil amend HASH OPTION ?OPTION ...? |
| 3472 | 3463 | ** |
| 3473 | 3464 | ** Amend the tags on check-in HASH to change how it displays in the timeline. |
| 3474 | 3465 | ** |
| 3475 | 3466 | ** Options: |
| 3476 | -** | |
| 3477 | 3467 | ** --author USER Make USER the author for check-in |
| 3478 | 3468 | ** -m|--comment COMMENT Make COMMENT the check-in comment |
| 3479 | 3469 | ** -M|--message-file FILE Read the amended comment from FILE |
| 3480 | 3470 | ** -e|--edit-comment Launch editor to revise comment |
| 3481 | 3471 | ** --date DATETIME Make DATETIME the check-in time |
| @@ -3813,11 +3803,10 @@ | ||
| 3813 | 3803 | ** If VERSION and the found ancestor refer to the same commit, the last two |
| 3814 | 3804 | ** components are omitted, unless --long is provided. When no fitting tagged |
| 3815 | 3805 | ** ancestor is found, show only the short hash of VERSION. |
| 3816 | 3806 | ** |
| 3817 | 3807 | ** Options: |
| 3818 | -** | |
| 3819 | 3808 | ** --digits Display so many hex digits of the hash |
| 3820 | 3809 | ** (default: the larger of 6 and the 'hash-digit' setting) |
| 3821 | 3810 | ** -d|--dirty Show whether there are changes to be committed |
| 3822 | 3811 | ** --long Always show all three components |
| 3823 | 3812 | ** --match GLOB Consider only non-propagating tags matching GLOB |
| 3824 | 3813 |
| --- 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 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 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 @@ | ||
| 160 | 160 | ** |
| 161 | 161 | ** Usage: %fossil interwiki COMMAND ... |
| 162 | 162 | ** |
| 163 | 163 | ** Manage the "intermap" that defines the mapping from interwiki tags |
| 164 | 164 | ** to complete URLs for interwiki links. |
| 165 | -** | |
| 166 | 165 | ** > fossil interwiki delete TAG ... |
| 167 | -** | |
| 168 | 166 | ** Delete one or more interwiki maps. |
| 169 | -** | |
| 170 | 167 | ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH |
| 171 | -** | |
| 172 | 168 | ** Create an interwiki referenced call TAG. The base URL is |
| 173 | 169 | ** the --base option, which is required. The --hash and --wiki |
| 174 | 170 | ** paths are optional. The TAG must be lower-case alphanumeric |
| 175 | 171 | ** and must be unique. A new entry is created if it does not |
| 176 | 172 | ** already exit. |
| 177 | -** | |
| 178 | 173 | ** > fossil interwiki list |
| 179 | -** | |
| 180 | 174 | ** Show all interwiki mappings. |
| 181 | 175 | */ |
| 182 | 176 | void interwiki_cmd(void){ |
| 183 | 177 | const char *zCmd; |
| 184 | 178 | int nCmd; |
| @@ -397,26 +391,26 @@ | ||
| 397 | 391 | @ <p class="error">%h(zErr)</p> |
| 398 | 392 | } |
| 399 | 393 | @ <form method="POST" action="%R/intermap"> |
| 400 | 394 | login_insert_csrf_secret(); |
| 401 | 395 | @ <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" \ | |
| 404 | 398 | @ size="15" value="%h(zTag)"></td></tr> |
| 405 | - @ <tr><td class="form_label" id="imbase">Base URL:</td> | |
| 406 | - @ <td><input type="text" id="base" aria-labeledby="imbase" name="base" \ | |
| 399 | + @ <tr><td class="form_label"><label for="base">Base URL:</label></td> | |
| 400 | + @ <td><input type="text" id="base" name="base" \ | |
| 407 | 401 | @ 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" \ | |
| 410 | 404 | @ size="20" value="%h(zHash)"> |
| 411 | 405 | @ (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" \ | |
| 414 | 408 | @ size="20" value="%h(zWiki)"> |
| 415 | 409 | @ (use "<tt>/wiki?name=</tt>" when the target is Fossil)</td></tr> |
| 416 | 410 | @ <tr><td></td> |
| 417 | 411 | @ <td><input type="submit" name="submit" value="Apply Changes"></td></tr> |
| 418 | 412 | @ </table> |
| 419 | 413 | @ </form> |
| 420 | 414 | |
| 421 | 415 | style_finish_page(); |
| 422 | 416 | } |
| 423 | 417 |
| --- 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 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 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 @@ | ||
| 534 | 534 | ** WEBPAGE: login |
| 535 | 535 | ** WEBPAGE: logout |
| 536 | 536 | ** WEBPAGE: my |
| 537 | 537 | ** |
| 538 | 538 | ** The login/logout page. Parameters: |
| 539 | -** | |
| 540 | 539 | ** g=URL Jump back to this URL after login completes |
| 541 | 540 | ** anon The g=URL is not accessible by "nobody" but is |
| 542 | 541 | ** accessible by "anonymous" |
| 543 | 542 | */ |
| 544 | 543 | void login_page(void){ |
| @@ -736,17 +735,17 @@ | ||
| 736 | 735 | @ <a href='%s(g.zHttpsURL)'>%h(g.zHttpsURL)</a> instead. |
| 737 | 736 | } |
| 738 | 737 | @ </span></td></tr> |
| 739 | 738 | } |
| 740 | 739 | @ <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" \ | |
| 743 | 742 | @ size="30" value="%s(anonFlag?"anonymous":"")"></td> |
| 744 | 743 | @ </tr> |
| 745 | 744 | @ <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" \ | |
| 748 | 747 | @ name="p" value="" size="30" />\ |
| 749 | 748 | if( zAnonPw && !noAnon ){ |
| 750 | 749 | captcha_speakit_button(uSeed, "Speak password for \"anonymous\""); |
| 751 | 750 | } |
| 752 | 751 | @ </td> |
| @@ -805,18 +804,19 @@ | ||
| 805 | 804 | char *zRPW = fossil_random_password(12); |
| 806 | 805 | @ <hr> |
| 807 | 806 | @ <p>Change Password for user <b>%h(g.zLogin)</b>:</p> |
| 808 | 807 | form_begin(0, "%R/login"); |
| 809 | 808 | @ <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" \ | |
| 812 | 811 | @ 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" \ | |
| 815 | 814 | @ 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" \ | |
| 818 | 818 | @ size="30" /></td></tr> |
| 819 | 819 | @ <tr><td></td> |
| 820 | 820 | @ <td><input type="submit" value="Change Password" /></td></tr> |
| 821 | 821 | @ </table> |
| 822 | 822 | @ </form> |
| @@ -1781,46 +1781,49 @@ | ||
| 1781 | 1781 | @ <input type="hidden" name="g" value="%h(P("g"))" /> |
| 1782 | 1782 | } |
| 1783 | 1783 | @ <p><input type="hidden" name="captchaseed" value="%u(uSeed)" /> |
| 1784 | 1784 | @ <table class="login_out"> |
| 1785 | 1785 | @ <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" \ | |
| 1788 | 1788 | @ value="%h(zUserID)" size="30"></td> |
| 1789 | 1789 | @ |
| 1790 | 1790 | if( iErrLine==1 ){ |
| 1791 | 1791 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1792 | 1792 | } |
| 1793 | 1793 | @ <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" \ | |
| 1796 | 1797 | @ value="%h(zDName)" size="30"></td> |
| 1797 | 1798 | @ </tr> |
| 1798 | 1799 | if( iErrLine==2 ){ |
| 1799 | 1800 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1800 | 1801 | } |
| 1801 | 1802 | @ </tr> |
| 1802 | 1803 | @ <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" \ | |
| 1805 | 1807 | @ value="%h(zEAddr)" size="30"></td> |
| 1806 | 1808 | @ </tr> |
| 1807 | 1809 | if( iErrLine==3 ){ |
| 1808 | 1810 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1809 | 1811 | } |
| 1810 | 1812 | if( canDoAlerts ){ |
| 1811 | 1813 | int a = atoi(PD("alerts","1")); |
| 1812 | 1814 | @ <tr> |
| 1813 | - @ <td class="form_label" align="right" id="emalrt">Email 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 Alerts?</label></td> | |
| 1817 | + @ <td><select size='1' id='alerts' name='alerts'> | |
| 1815 | 1818 | @ <option value="1" %s(a?"selected":"")>Yes</option> |
| 1816 | 1819 | @ <option value="0" %s(!a?"selected":"")>No</option> |
| 1817 | 1820 | @ </select></td></tr> |
| 1818 | 1821 | } |
| 1819 | 1822 | @ <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" \ | |
| 1822 | 1825 | @ value="%h(zPasswd)" size="30"> \ |
| 1823 | 1826 | if( zPasswd[0]==0 ){ |
| 1824 | 1827 | char *zRPW = fossil_random_password(12); |
| 1825 | 1828 | @ Password suggestion: %z(zRPW)</td> |
| 1826 | 1829 | }else{ |
| @@ -1829,20 +1832,20 @@ | ||
| 1829 | 1832 | @ <tr> |
| 1830 | 1833 | if( iErrLine==4 ){ |
| 1831 | 1834 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1832 | 1835 | } |
| 1833 | 1836 | @ <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" \ | |
| 1836 | 1839 | @ value="%h(zConfirm)" size="30"></td> |
| 1837 | 1840 | @ </tr> |
| 1838 | 1841 | if( iErrLine==5 ){ |
| 1839 | 1842 | @ <tr><td><td><span class='loginError'>↑ %h(zErr)</span></td></tr> |
| 1840 | 1843 | } |
| 1841 | 1844 | @ <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" \ | |
| 1844 | 1847 | @ value="%h(captchaIsCorrect?zDecoded:"")" size="30"> |
| 1845 | 1848 | captcha_speakit_button(uSeed, "Speak the captcha text"); |
| 1846 | 1849 | @ </td> |
| 1847 | 1850 | @ </tr> |
| 1848 | 1851 | if( iErrLine==6 ){ |
| @@ -2122,31 +2125,24 @@ | ||
| 2122 | 2125 | ** |
| 2123 | 2126 | ** Usage: %fossil login-group ?SUBCOMMAND? ?OPTIONS? |
| 2124 | 2127 | ** |
| 2125 | 2128 | ** Run various subcommands to manage login-group related settings of the open |
| 2126 | 2129 | ** repository or of the repository identified by the -R or --repository option. |
| 2127 | -** | |
| 2128 | 2130 | ** > fossil login-group ?-R REPO? |
| 2129 | -** | |
| 2130 | 2131 | ** Show the login-group to which REPO, or if invoked from within a checkout |
| 2131 | 2132 | ** the repository on which the current checkout is based, belongs. |
| 2132 | -** | |
| 2133 | 2133 | ** > fossil login-group join ?-R? REPO ?--name NAME? |
| 2134 | -** | |
| 2135 | 2134 | ** This subcommand must be invoked from within a checkout to either: add |
| 2136 | 2135 | ** the open repository to the login group that REPO is a member, in which |
| 2137 | 2136 | ** case the optional "--name" argument is not required; or create a new |
| 2138 | 2137 | ** login group between the open repository and REPO, in which case the new |
| 2139 | 2138 | ** group NAME is determined by the mandatory "--name" option. REPO may be |
| 2140 | 2139 | ** specified with or without the -R flag. |
| 2141 | -** | |
| 2142 | 2140 | ** > fossil login-group leave ?-R REPO? |
| 2143 | -** | |
| 2144 | 2141 | ** Take the repository REPO, or if invoked from within a checkout the |
| 2145 | 2142 | ** repository on which the current checkout is based, out of whatever |
| 2146 | 2143 | ** login group it is a member. |
| 2147 | -** | |
| 2148 | 2144 | ** About Login Groups: |
| 2149 | 2145 | ** |
| 2150 | 2146 | ** A login-group is a set of repositories that share user credentials. |
| 2151 | 2147 | ** If a user is logged into one member of the group, then that user can |
| 2152 | 2148 | ** access any other group member as long as they have an entry in the USER |
| 2153 | 2149 |
| --- 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'>↑ %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'>↑ %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'>↑ %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 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'>↑ %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'>↑ %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'>↑ %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'>↑ %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'>↑ %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 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'>↑ %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'>↑ %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 @@ | ||
| 1324 | 1324 | ** WEBPAGE: version |
| 1325 | 1325 | ** |
| 1326 | 1326 | ** Show the version information for Fossil. |
| 1327 | 1327 | ** |
| 1328 | 1328 | ** Query parameters: |
| 1329 | -** | |
| 1330 | 1329 | ** verbose Show details |
| 1331 | 1330 | */ |
| 1332 | 1331 | void test_version_page(void){ |
| 1333 | 1332 | Blob versionInfo; |
| 1334 | 1333 | int verboseFlag; |
| @@ -2224,65 +2223,49 @@ | ||
| 2224 | 2223 | ** environment variable is set to "CGI", which should always be the |
| 2225 | 2224 | ** case for CGI scripts run by a webserver. Fossil ignores any lines |
| 2226 | 2225 | ** that begin with "#". |
| 2227 | 2226 | ** |
| 2228 | 2227 | ** The following control lines are recognized: |
| 2229 | -** | |
| 2230 | 2228 | ** repository: PATH Name of the Fossil repository |
| 2231 | -** | |
| 2232 | 2229 | ** directory: PATH Name of a directory containing many Fossil |
| 2233 | 2230 | ** repositories whose names all end with ".fossil". |
| 2234 | 2231 | ** There should only be one of "repository:" |
| 2235 | 2232 | ** or "directory:" |
| 2236 | -** | |
| 2237 | 2233 | ** notfound: URL When in "directory:" mode, redirect to |
| 2238 | 2234 | ** URL if no suitable repository is found. |
| 2239 | -** | |
| 2240 | 2235 | ** repolist When in "directory:" mode, display a page |
| 2241 | 2236 | ** showing a list of available repositories if |
| 2242 | 2237 | ** the URL is "/". |
| 2243 | -** | |
| 2244 | 2238 | ** localauth Grant administrator privileges to connections |
| 2245 | 2239 | ** from 127.0.0.1 or ::1. |
| 2246 | -** | |
| 2247 | 2240 | ** skin: LABEL Use the built-in skin called LABEL rather than |
| 2248 | 2241 | ** the default. If there are no skins called LABEL |
| 2249 | 2242 | ** then this line is a no-op. |
| 2250 | -** | |
| 2251 | 2243 | ** files: GLOBLIST GLOBLIST is a comma-separated list of GLOB |
| 2252 | 2244 | ** patterns that specify files that can be |
| 2253 | 2245 | ** returned verbatim. This feature allows Fossil |
| 2254 | 2246 | ** to act as a web server returning static |
| 2255 | 2247 | ** content. |
| 2256 | -** | |
| 2257 | 2248 | ** setenv: NAME VALUE Set environment variable NAME to VALUE. Or |
| 2258 | 2249 | ** if VALUE is omitted, unset NAME. |
| 2259 | -** | |
| 2260 | 2250 | ** HOME: PATH Shorthand for "setenv: HOME PATH" |
| 2261 | -** | |
| 2262 | 2251 | ** cgi-debug: FILE Causing debugging information to be written |
| 2263 | 2252 | ** into FILE. |
| 2264 | -** | |
| 2265 | 2253 | ** errorlog: FILE Warnings, errors, and panics written to FILE. |
| 2266 | -** | |
| 2267 | 2254 | ** timeout: SECONDS Do not run for longer than SECONDS. The default |
| 2268 | 2255 | ** timeout is FOSSIL_DEFAULT_TIMEOUT (600) seconds. |
| 2269 | -** | |
| 2270 | 2256 | ** extroot: DIR Directory that is the root of the sub-CGI tree |
| 2271 | 2257 | ** on the /ext page. |
| 2272 | -** | |
| 2273 | 2258 | ** redirect: REPO URL Extract the "name" query parameter and search |
| 2274 | 2259 | ** REPO for a check-in or ticket that matches the |
| 2275 | 2260 | ** value of "name", then redirect to URL. There |
| 2276 | 2261 | ** can be multiple "redirect:" lines that are |
| 2277 | 2262 | ** processed in order. If the REPO is "*", then |
| 2278 | 2263 | ** an unconditional redirect to URL is taken. |
| 2279 | -** | |
| 2280 | 2264 | ** jsmode: VALUE Specifies the delivery mode for JavaScript |
| 2281 | 2265 | ** files. See the help text for the --jsmode |
| 2282 | 2266 | ** flag of the http command. |
| 2283 | -** | |
| 2284 | 2267 | ** mainmenu: FILE Override the mainmenu config setting with the |
| 2285 | 2268 | ** contents of the given file. |
| 2286 | 2269 | ** |
| 2287 | 2270 | ** Most CGI files contain only a "repository:" line. It is uncommon to |
| 2288 | 2271 | ** use any other option. |
| @@ -2609,11 +2592,10 @@ | ||
| 2609 | 2592 | ** WEBPAGE: test-pid |
| 2610 | 2593 | ** |
| 2611 | 2594 | ** Return the process identifier of the running Fossil server instance. |
| 2612 | 2595 | ** |
| 2613 | 2596 | ** Query parameters: |
| 2614 | -** | |
| 2615 | 2597 | ** usepidkey When present and available, also return the |
| 2616 | 2598 | ** address and size, within this server process, |
| 2617 | 2599 | ** of the saved database encryption key. This |
| 2618 | 2600 | ** is only supported when using SEE on Windows. |
| 2619 | 2601 | */ |
| @@ -3424,11 +3406,10 @@ | ||
| 3424 | 3406 | /* |
| 3425 | 3407 | ** WEBPAGE: test-warning |
| 3426 | 3408 | ** |
| 3427 | 3409 | ** Test error and warning log operation. This webpage is accessible to |
| 3428 | 3410 | ** the administrator only. |
| 3429 | -** | |
| 3430 | 3411 | ** case=1 Issue a fossil_warning() while generating the page. |
| 3431 | 3412 | ** case=2 Extra db_begin_transaction() |
| 3432 | 3413 | ** case=3 Extra db_end_transaction() |
| 3433 | 3414 | ** case=4 Error during SQL processing |
| 3434 | 3415 | ** case=5 Call the segfault handler |
| 3435 | 3416 |
| --- 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 |
-1
| --- src/manifest.c | ||
| +++ src/manifest.c | ||
| @@ -1290,11 +1290,10 @@ | ||
| 1290 | 1290 | ** artifacts and report any errors. Run this test command on historical |
| 1291 | 1291 | ** repositories after making any changes to the manifest_parse() |
| 1292 | 1292 | ** implementation to confirm that the changes did not break anything. |
| 1293 | 1293 | ** |
| 1294 | 1294 | ** Options: |
| 1295 | -** | |
| 1296 | 1295 | ** --limit N Parse no more than N artifacts before stopping |
| 1297 | 1296 | ** --wellformed Use all BLOB table entries as input, not just |
| 1298 | 1297 | ** those entries that are believed to be valid |
| 1299 | 1298 | ** artifacts, and verify that the result the |
| 1300 | 1299 | ** manifest_is_well_formed() agrees with the |
| 1301 | 1300 |
| --- 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 @@ | ||
| 295 | 295 | ** Only file content is merged. The result continues to use the |
| 296 | 296 | ** file and directory names from the current checkout even if those |
| 297 | 297 | ** names might have been changed in the branch being merged in. |
| 298 | 298 | ** |
| 299 | 299 | ** Options: |
| 300 | -** | |
| 301 | 300 | ** --backout Do a reverse cherrypick merge against VERSION. |
| 302 | 301 | ** In other words, back out the changes that were |
| 303 | 302 | ** added by VERSION. |
| 304 | -** | |
| 305 | 303 | ** --baseline BASELINE Use BASELINE as the "pivot" of the merge instead |
| 306 | 304 | ** of the nearest common ancestor. This allows |
| 307 | 305 | ** a sequence of changes in a branch to be merged |
| 308 | 306 | ** without having to merge the entire branch. |
| 309 | -** | |
| 310 | 307 | ** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary |
| 311 | 308 | ** and do not try to merge parallel changes. This |
| 312 | 309 | ** option overrides the "binary-glob" setting. |
| 313 | -** | |
| 314 | 310 | ** --cherrypick Do a cherrypick merge VERSION into the current |
| 315 | 311 | ** checkout. A cherrypick merge pulls in the changes |
| 316 | 312 | ** of the single check-in VERSION, rather than all |
| 317 | 313 | ** changes back to the nearest common ancestor. |
| 318 | -** | |
| 319 | 314 | ** -f|--force Force the merge even if it would be a no-op. |
| 320 | -** | |
| 321 | 315 | ** --force-missing Force the merge even if there is missing content. |
| 322 | -** | |
| 323 | 316 | ** --integrate Merged branch will be closed when committing. |
| 324 | -** | |
| 325 | 317 | ** -K|--keep-merge-files On merge conflict, retain the temporary files |
| 326 | 318 | ** used for merging, named *-baseline, *-original, |
| 327 | 319 | ** and *-merge. |
| 328 | -** | |
| 329 | 320 | ** -n|--dry-run If given, display instead of run actions |
| 330 | -** | |
| 331 | 321 | ** -v|--verbose Show additional details of the merge |
| 332 | 322 | */ |
| 333 | 323 | void merge_cmd(void){ |
| 334 | 324 | int vid; /* Current version "V" */ |
| 335 | 325 | int mid; /* Version we are merging from "M" */ |
| 336 | 326 |
| --- 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 @@ | ||
| 1026 | 1026 | ** Resolve the symbol NAME into its canonical artifact hash |
| 1027 | 1027 | ** artifact name and provide a description of what role that artifact |
| 1028 | 1028 | ** plays. |
| 1029 | 1029 | ** |
| 1030 | 1030 | ** Options: |
| 1031 | -** | |
| 1032 | 1031 | ** --type TYPE Only find artifacts of TYPE (one of: 'ci', 't', |
| 1033 | 1032 | ** 'w', 'g', or 'e') |
| 1034 | 1033 | ** -v|--verbose Provide extra information (such as the RID) |
| 1035 | 1034 | */ |
| 1036 | 1035 | void whatis_cmd(void){ |
| @@ -1442,12 +1441,13 @@ | ||
| 1442 | 1441 | } |
| 1443 | 1442 | |
| 1444 | 1443 | /* |
| 1445 | 1444 | ** WEBPAGE: bloblist |
| 1446 | 1445 | ** |
| 1447 | -** Return a page showing all artifacts in the repository. Query parameters: | |
| 1446 | +** Return a page showing all artifacts in the repository. | |
| 1448 | 1447 | ** |
| 1448 | +** Query parameters: | |
| 1449 | 1449 | ** n=N Show N artifacts |
| 1450 | 1450 | ** s=S Start with artifact number S |
| 1451 | 1451 | ** priv Show only unpublished or private artifacts |
| 1452 | 1452 | ** phan Show only phantom artifacts |
| 1453 | 1453 | ** hclr Color code hash types (SHA1 vs SHA3) |
| @@ -1660,11 +1660,10 @@ | ||
| 1660 | 1660 | /* |
| 1661 | 1661 | ** WEBPAGE: bigbloblist |
| 1662 | 1662 | ** |
| 1663 | 1663 | ** Return a page showing the largest artifacts in the repository in order |
| 1664 | 1664 | ** of decreasing size. |
| 1665 | -** | |
| 1666 | 1665 | ** n=N Show the top N artifacts |
| 1667 | 1666 | */ |
| 1668 | 1667 | void bigbloblist_page(void){ |
| 1669 | 1668 | Stmt q; |
| 1670 | 1669 | int n = atoi(PD("n","250")); |
| 1671 | 1670 |
| --- 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 @@ | ||
| 837 | 837 | ** |
| 838 | 838 | ** This command is used to create, view, and apply Fossil binary patches. |
| 839 | 839 | ** A Fossil binary patch is a single (binary) file that captures all of the |
| 840 | 840 | ** uncommitted changes of a check-out. Use Fossil binary patches to transfer |
| 841 | 841 | ** proposed or incomplete changes between machines for testing or analysis. |
| 842 | -** | |
| 843 | 842 | ** > fossil patch create [DIRECTORY] FILENAME |
| 844 | -** | |
| 845 | 843 | ** Create a new binary patch in FILENAME that captures all uncommitted |
| 846 | 844 | ** changes in the check-out at DIRECTORY, or the current directory if |
| 847 | 845 | ** DIRECTORY is omitted. If FILENAME is "-" then the binary patch |
| 848 | 846 | ** 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: | |
| 857 | 853 | ** -f|--force Apply the patch even though there are unsaved |
| 858 | 854 | ** changes in the current check-out. Unsaved changes |
| 859 | 855 | ** are reverted and permanently lost. |
| 860 | 856 | ** -n|--dry-run Do nothing, but print what would have happened. |
| 861 | 857 | ** -v|--verbose Extra output explaining what happens. |
| 862 | -** | |
| 863 | 858 | ** > fossil patch diff [DIRECTORY] FILENAME |
| 864 | -** | |
| 865 | 859 | ** Show a human-readable diff for the patch. All the usual |
| 866 | 860 | ** diff flags described at "fossil help diff" apply. In addition: |
| 867 | -** | |
| 868 | 861 | ** -f|--force Continue trying to perform the diff even if |
| 869 | 862 | ** baseline information is missing from the current |
| 870 | 863 | ** repository |
| 871 | -** | |
| 872 | 864 | ** > fossil patch push REMOTE-CHECKOUT |
| 873 | -** | |
| 874 | 865 | ** Create a patch for the current check-out, transfer that patch to |
| 875 | 866 | ** a remote machine (using ssh) and apply the patch there. The |
| 876 | 867 | ** REMOTE-CHECKOUT is in one of the following formats: |
| 877 | -** | |
| 878 | 868 | ** * DIRECTORY |
| 879 | 869 | ** * HOST:DIRECTORY |
| 880 | 870 | ** * USER@HOST:DIRECTORY |
| 881 | 871 | ** |
| 882 | 872 | ** Command-line options: |
| 883 | -** | |
| 884 | 873 | ** -f|--force Apply the patch even though there are unsaved |
| 885 | 874 | ** changes in the current check-out. Unsaved |
| 886 | 875 | ** changes will be reverted and then the patch is |
| 887 | 876 | ** applied. |
| 888 | 877 | ** --fossilcmd EXE Name of the "fossil" executable on the remote |
| 889 | 878 | ** -n|--dry-run Do nothing, but print what would have happened. |
| 890 | 879 | ** -v|--verbose Extra output explaining what happens. |
| 891 | -** | |
| 892 | -** | |
| 893 | 880 | ** > fossil patch pull REMOTE-CHECKOUT |
| 894 | -** | |
| 895 | 881 | ** Like "fossil patch push" except that the transfer is from remote |
| 896 | 882 | ** to local. All the same command-line options apply. |
| 897 | -** | |
| 898 | 883 | ** > fossil patch view FILENAME |
| 899 | -** | |
| 900 | 884 | ** View a summary of the changes in the binary patch FILENAME. |
| 901 | 885 | ** Use "fossil patch diff" for detailed patch content. |
| 902 | -** | |
| 903 | 886 | ** -v|--verbose Show extra detail about the patch. |
| 904 | 887 | ** |
| 905 | 888 | */ |
| 906 | 889 | void patch_cmd(void){ |
| 907 | 890 | const char *zCmd; |
| 908 | 891 |
| --- 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 @@ | ||
| 315 | 315 | piechart_render(width,height, PIE_OTHER|PIE_PERCENT); |
| 316 | 316 | @ </svg> |
| 317 | 317 | @ <hr /> |
| 318 | 318 | } |
| 319 | 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 /> | |
| 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 | 324 | @ <input type='submit' value='Draw The Pie Chart'/> |
| 325 | 325 | @ </form> |
| 326 | 326 | @ <p>Interesting test cases: |
| 327 | 327 | @ <ul> |
| 328 | 328 | @ <li> <a href='test-piechart?data=44,2,2,2,2,2,3,2,2,2,2,2,44'>Case 1</a> |
| 329 | 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>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 @@ | ||
| 287 | 287 | "arrow <-> down from last box.s\n" |
| 288 | 288 | "box same \"Pikchr\" \"Formatter\" \"(pikchr.c)\" fit\n"; |
| 289 | 289 | } |
| 290 | 290 | style_header("PikchrShow Client/Server"); |
| 291 | 291 | CX("<style>"); { |
| 292 | - CX("div.content { padding-top: 0.5em }\n"); | |
| 292 | + CX("main.content { padding-top: 0.5em }\n"); | |
| 293 | 293 | CX("#sbs-wrapper {" |
| 294 | 294 | "display: flex; flex-direction: column;" |
| 295 | 295 | "}\n"); |
| 296 | 296 | CX("#sbs-wrapper > * {" |
| 297 | 297 | "margin: 0 0.25em 0.5em 0; flex: 1 10 auto;" |
| @@ -341,12 +341,12 @@ | ||
| 341 | 341 | CX("body.pikchrshow .v-align-middle{" |
| 342 | 342 | "vertical-align: middle" |
| 343 | 343 | "}\n"); |
| 344 | 344 | CX(".dragover {border: 3px dotted rgba(0,255,0,0.6)}\n"); |
| 345 | 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>"); | |
| 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 | 348 | CX("<div id='sbs-wrapper'>"); { |
| 349 | 349 | CX("<div id='pikchrshow-form'>"); { |
| 350 | 350 | CX("<textarea id='content' name='content' rows='15'>" |
| 351 | 351 | "%s</textarea>",zContent/*safe-for-%s*/); |
| 352 | 352 | CX("<div id='pikchrshow-controls'>"); { |
| @@ -525,46 +525,32 @@ | ||
| 525 | 525 | ** an SVG graphic. The INFILE and OUTFILE options default to stdin |
| 526 | 526 | ** resp. stdout, and the names "-" can be used as aliases for those |
| 527 | 527 | ** streams. |
| 528 | 528 | ** |
| 529 | 529 | ** Options: |
| 530 | -** | |
| 531 | 530 | ** -div On success, add a DIV wrapper around the |
| 532 | 531 | ** resulting SVG output which limits its max-width to |
| 533 | 532 | ** its computed maximum ideal size. |
| 534 | -** | |
| 535 | 533 | ** -div-indent Like -div but indent the div. |
| 536 | -** | |
| 537 | 534 | ** -div-center Like -div but center the div. |
| 538 | -** | |
| 539 | 535 | ** -div-left Like -div but float the div left. |
| 540 | -** | |
| 541 | 536 | ** -div-right Like -div but float the div right. |
| 542 | -** | |
| 543 | 537 | ** -div-toggle Set the 'toggle' CSS class on the div (used by the |
| 544 | 538 | ** JavaScript-side post-processor). |
| 545 | -** | |
| 546 | 539 | ** -div-source Set the 'source' CSS class on the div, which tells |
| 547 | 540 | ** CSS to hide the SVG and reveal the source by default. |
| 548 | -** | |
| 549 | 541 | ** -src Store the input pikchr's source code in the output as |
| 550 | 542 | ** a separate element adjacent to the SVG one. Implied |
| 551 | 543 | ** by -div-source. |
| 552 | -** | |
| 553 | -** | |
| 554 | 544 | ** -th Process the input using TH1 before passing it to pikchr. |
| 555 | -** | |
| 556 | 545 | ** -th-novar Disable $var and $<var> TH1 processing. Use this if the |
| 557 | 546 | ** pikchr script uses '$' for its own purposes and that |
| 558 | 547 | ** causes issues. This only affects parsing of '$' outside |
| 559 | 548 | ** of TH1 script blocks. Code in such blocks is unaffected. |
| 560 | -** | |
| 561 | 549 | ** -th-nosvg When using -th, output the post-TH1'd script |
| 562 | 550 | ** instead of the pikchr-rendered output. |
| 563 | -** | |
| 564 | 551 | ** -th-trace Trace TH1 execution (for debugging purposes). |
| 565 | -** | |
| 566 | 552 | ** |
| 567 | 553 | ** The -div-indent/center/left/right flags may not be combined. |
| 568 | 554 | ** |
| 569 | 555 | ** TH1-related Notes and Caveats: |
| 570 | 556 | ** |
| 571 | 557 |
| --- 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 @@ | ||
| 455 | 455 | ** leave your repository in a goofy state. Know what you are doing! |
| 456 | 456 | ** Make a backup of your repository before using this command! |
| 457 | 457 | ** |
| 458 | 458 | ** FURTHER WARNING: This command is a work-in-progress and may yet |
| 459 | 459 | ** contain bugs. |
| 460 | -** | |
| 461 | 460 | ** > fossil purge artifacts HASH... ?OPTIONS? |
| 462 | -** | |
| 463 | 461 | ** Move arbitrary artifacts identified by the HASH list into the |
| 464 | 462 | ** graveyard. |
| 465 | -** | |
| 466 | 463 | ** > fossil purge cat HASH... |
| 467 | -** | |
| 468 | 464 | ** Write the content of one or more artifacts in the graveyard onto |
| 469 | 465 | ** standard output. |
| 470 | -** | |
| 471 | 466 | ** > fossil purge checkins TAGS... ?OPTIONS? |
| 472 | -** | |
| 473 | 467 | ** Move the check-ins or branches identified by TAGS and all of |
| 474 | 468 | ** their descendants out of the repository and into the graveyard. |
| 475 | 469 | ** If TAGS includes a branch name then it means all the check-ins |
| 476 | 470 | ** on the most recent occurrence of that branch. |
| 477 | -** | |
| 478 | 471 | ** > fossil purge files NAME ... ?OPTIONS? |
| 479 | -** | |
| 480 | 472 | ** Move all instances of files called NAME into the graveyard. |
| 481 | 473 | ** NAME should be the name of the file relative to the root of the |
| 482 | 474 | ** repository. If NAME is a directory, then all files within that |
| 483 | 475 | ** directory are moved. |
| 484 | -** | |
| 485 | 476 | ** > fossil purge list|ls ?-l? |
| 486 | -** | |
| 487 | 477 | ** Show the graveyard of prior purges. The -l option gives more |
| 488 | 478 | ** detail in the output. |
| 489 | -** | |
| 490 | 479 | ** > fossil purge obliterate ID... ?--force? |
| 491 | -** | |
| 492 | 480 | ** Remove one or more purge events from the graveyard. Once a purge |
| 493 | 481 | ** event is obliterated, it can no longer be undone. The --force |
| 494 | 482 | ** option suppresses the confirmation prompt. |
| 495 | -** | |
| 496 | 483 | ** > fossil purge tickets NAME ... ?OPTIONS? |
| 497 | -** | |
| 498 | 484 | ** TBD... |
| 499 | -** | |
| 500 | 485 | ** > fossil purge undo ID |
| 501 | -** | |
| 502 | 486 | ** Restore the content previously removed by purge ID. |
| 503 | -** | |
| 504 | 487 | ** > fossil purge wiki NAME ... ?OPTIONS? |
| 505 | -** | |
| 506 | 488 | ** TBD... |
| 507 | 489 | ** |
| 508 | 490 | ** COMMON OPTIONS: |
| 509 | -** | |
| 510 | 491 | ** --explain Make no changes, but show what would happen |
| 511 | 492 | ** --dry-run An alias for --explain |
| 512 | 493 | */ |
| 513 | 494 | void purge_cmd(void){ |
| 514 | 495 | int purgeFlags = PURGE_MOVETO_GRAVEYARD | PURGE_PRINT_SUMMARY; |
| 515 | 496 |
| --- 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 |
-2
| --- src/regexp.c | ||
| +++ src/regexp.c | ||
| @@ -809,11 +809,10 @@ | ||
| 809 | 809 | ** |
| 810 | 810 | ** Run a regular expression match over the named disk files, or against |
| 811 | 811 | ** standard input if no disk files are named on the command-line. |
| 812 | 812 | ** |
| 813 | 813 | ** Options: |
| 814 | -** | |
| 815 | 814 | ** -i|--ignore-case Ignore case |
| 816 | 815 | */ |
| 817 | 816 | void re_test_grep(void){ |
| 818 | 817 | ReCompiled *pRe; |
| 819 | 818 | const char *zErr; |
| @@ -853,11 +852,10 @@ | ||
| 853 | 852 | ** |
| 854 | 853 | ** For details of the supported regular expression dialect, see |
| 855 | 854 | ** https://fossil-scm.org/fossil/doc/trunk/www/grep.md |
| 856 | 855 | ** |
| 857 | 856 | ** Options: |
| 858 | -** | |
| 859 | 857 | ** -c|--count Suppress normal output; instead print a count |
| 860 | 858 | ** of the number of matching files |
| 861 | 859 | ** -i|--ignore-case Ignore case |
| 862 | 860 | ** -l|--files-with-matches List only hash for each match |
| 863 | 861 | ** --once Stop searching after the first match |
| 864 | 862 |
| --- 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 @@ | ||
| 380 | 380 | /* |
| 381 | 381 | ** WEBPAGE: rptnew |
| 382 | 382 | ** WEBPAGE: rptedit |
| 383 | 383 | ** |
| 384 | 384 | ** Create (/rptnew) or edit (/rptedit) a ticket report format. |
| 385 | -** Query parameters: | |
| 386 | 385 | ** |
| 386 | +** Query parameters: | |
| 387 | 387 | ** rn=N Ticket report number. (required) |
| 388 | 388 | ** t=TITLE Title of the report format |
| 389 | 389 | ** w=USER Owner of the report format |
| 390 | 390 | ** s=SQL SQL text used to implement the report |
| 391 | 391 | ** k=KEY Color key |
| @@ -511,28 +511,30 @@ | ||
| 511 | 511 | if( zErr ){ |
| 512 | 512 | @ <blockquote class="reportError">%h(zErr)</blockquote> |
| 513 | 513 | } |
| 514 | 514 | @ <form action="rptedit" method="post"><div> |
| 515 | 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> | |
| 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> | |
| 520 | 521 | @ </p> |
| 521 | 522 | login_insert_csrf_secret(); |
| 522 | 523 | 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)" /> | |
| 525 | 526 | @ </p> |
| 526 | 527 | } else { |
| 527 | 528 | @ <input type="hidden" name="w" value="%h(zOwner)" /> |
| 528 | 529 | } |
| 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 | |
| 530 | 532 | @ color key is displayed.) Each line contains the text for a single |
| 531 | 533 | @ entry in the key. The first token of each line is the background |
| 532 | 534 | @ 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> | |
| 534 | 536 | @ </p> |
| 535 | 537 | @ <p><label><input type="checkbox" name="dflt" %s(dflt?"checked":"")> \ |
| 536 | 538 | @ Make this the default report</label></p> |
| 537 | 539 | if( !g.perm.Admin && fossil_strcmp(zOwner,g.zLogin)!=0 ){ |
| 538 | 540 | @ <p>This report format is owned by %h(zOwner). You are not allowed |
| @@ -560,11 +562,11 @@ | ||
| 560 | 562 | zSchema = db_text(0,"SELECT sql FROM sqlite_schema WHERE name='ticket'"); |
| 561 | 563 | if( zSchema==0 ){ |
| 562 | 564 | zSchema = db_text(0,"SELECT sql FROM repository.sqlite_schema" |
| 563 | 565 | " WHERE name='ticket'"); |
| 564 | 566 | } |
| 565 | - @ <hr /><h3>TICKET Schema</h3> | |
| 567 | + @ <hr /><h2>TICKET Schema</h2> | |
| 566 | 568 | @ <blockquote><pre> |
| 567 | 569 | @ <code class="language-sql">%h(zSchema)</code> |
| 568 | 570 | @ </pre></blockquote> |
| 569 | 571 | @ <h3>Notes</h3> |
| 570 | 572 | @ <ul> |
| @@ -773,11 +775,11 @@ | ||
| 773 | 775 | for(i=0; i<nArg; i++){ |
| 774 | 776 | const char *zName = azName[i]; |
| 775 | 777 | if( i==pState->iBg ) continue; |
| 776 | 778 | if( pState->iNewRow>=0 && i>=pState->iNewRow ){ |
| 777 | 779 | if( g.perm.Write && zTid ){ |
| 778 | - @ <th> </th> | |
| 780 | + @ <td> </td> | |
| 779 | 781 | zTid = 0; |
| 780 | 782 | } |
| 781 | 783 | if( zName[0]=='_' ) zName++; |
| 782 | 784 | @ </tr><tr><th colspan=%d(pState->nCol)>%h(zName)</th> |
| 783 | 785 | }else{ |
| @@ -786,11 +788,11 @@ | ||
| 786 | 788 | } |
| 787 | 789 | @ <th>%h(zName)</th> |
| 788 | 790 | } |
| 789 | 791 | } |
| 790 | 792 | if( g.perm.Write && zTid ){ |
| 791 | - @ <th> </th> | |
| 793 | + @ <td> </td> | |
| 792 | 794 | } |
| 793 | 795 | @ </tr></thead><tbody> |
| 794 | 796 | } |
| 795 | 797 | if( azArg==0 ){ |
| 796 | 798 | @ <tr><td colspan="%d(pState->nCol)"> |
| 797 | 799 |
| --- 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> </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> </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> </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> </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 @@ | ||
| 230 | 230 | ** COMMAND: rss* |
| 231 | 231 | ** |
| 232 | 232 | ** Usage: %fossil rss ?OPTIONS? |
| 233 | 233 | ** |
| 234 | 234 | ** 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. | |
| 236 | 236 | ** |
| 237 | +** Options: | |
| 237 | 238 | ** -type|y FLAG May be: all (default), ci (show check-ins only), |
| 238 | 239 | ** t (show tickets only), w (show wiki only). |
| 239 | -** | |
| 240 | 240 | ** -limit|n LIMIT The maximum number of items to show. |
| 241 | -** | |
| 242 | 241 | ** -tkt HASH Filter for only those events for the specified ticket. |
| 243 | -** | |
| 244 | 242 | ** -tag TAG Filter for a tag |
| 245 | -** | |
| 246 | 243 | ** -wiki NAME Filter on a specific wiki page. |
| 247 | 244 | ** |
| 248 | 245 | ** Only one of -tkt, -tag, or -wiki may be used. |
| 249 | -** | |
| 250 | 246 | ** -name FILENAME Filter for a specific file. This may be combined |
| 251 | 247 | ** with one of the other filters (useful for looking |
| 252 | 248 | ** at a specific branch). |
| 253 | -** | |
| 254 | 249 | ** -url STRING Set the RSS feed's root URL to the given string. |
| 255 | 250 | ** The default is "URL-PLACEHOLDER" (without quotes). |
| 256 | 251 | */ |
| 257 | 252 | void cmd_timeline_rss(void){ |
| 258 | 253 | Stmt q; |
| 259 | 254 |
| --- 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 @@ | ||
| 334 | 334 | ** |
| 335 | 335 | ** Run the full-scan search algorithm using SEARCHSTRING against |
| 336 | 336 | ** the text of the files listed. Output matches and snippets. |
| 337 | 337 | ** |
| 338 | 338 | ** Options: |
| 339 | -** | |
| 340 | 339 | ** --begin TEXT Text to insert before each match |
| 341 | 340 | ** --end TEXT Text to insert after each match |
| 342 | 341 | ** --gap TEXT Text to indicate elided content |
| 343 | 342 | ** --html Input is HTML |
| 344 | 343 | ** --static Use the static Search object |
| @@ -583,11 +582,10 @@ | ||
| 583 | 582 | ** score. The -limit option can be used to limit the number of entries |
| 584 | 583 | ** returned. The -width option can be used to set the output width used |
| 585 | 584 | ** when printing matches. |
| 586 | 585 | ** |
| 587 | 586 | ** Options: |
| 588 | -** | |
| 589 | 587 | ** -a|--all Output all matches, not just best matches. |
| 590 | 588 | ** -n|--limit N Limit output to N matches. |
| 591 | 589 | ** -W|--width WIDTH Set display width to WIDTH columns, 0 for |
| 592 | 590 | ** unlimited. Defaults the terminal's width. |
| 593 | 591 | */ |
| @@ -1141,11 +1139,12 @@ | ||
| 1141 | 1139 | if( zClass ){ |
| 1142 | 1140 | @ <div class='searchForm searchForm%s(zClass)'> |
| 1143 | 1141 | }else{ |
| 1144 | 1142 | @ <div class='searchForm'> |
| 1145 | 1143 | } |
| 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> | |
| 1147 | 1146 | if( (mFlags & 0x01)!=0 && (srchFlags & (srchFlags-1))!=0 ){ |
| 1148 | 1147 | static const struct { const char *z; const char *zNm; unsigned m; } aY[] = { |
| 1149 | 1148 | { "all", "All", SRCH_ALL }, |
| 1150 | 1149 | { "c", "Check-ins", SRCH_CKIN }, |
| 1151 | 1150 | { "d", "Docs", SRCH_DOC }, |
| @@ -1155,21 +1154,21 @@ | ||
| 1155 | 1154 | { "f", "Forum", SRCH_FORUM }, |
| 1156 | 1155 | }; |
| 1157 | 1156 | const char *zY = PD("y","all"); |
| 1158 | 1157 | unsigned newFlags = srchFlags; |
| 1159 | 1158 | int i; |
| 1160 | - @ <select size='1' name='y'> | |
| 1159 | + @ <label> Elements: <select size='1' name='y'> | |
| 1161 | 1160 | for(i=0; i<count(aY); i++){ |
| 1162 | 1161 | if( (aY[i].m & srchFlags)==0 ) continue; |
| 1163 | 1162 | cgi_printf("<option value='%s'", aY[i].z); |
| 1164 | 1163 | if( fossil_strcmp(zY,aY[i].z)==0 ){ |
| 1165 | 1164 | newFlags &= aY[i].m; |
| 1166 | 1165 | cgi_printf(" selected"); |
| 1167 | 1166 | } |
| 1168 | 1167 | cgi_printf(">%s</option>\n", aY[i].zNm); |
| 1169 | 1168 | } |
| 1170 | - @ </select> | |
| 1169 | + @ </select></label> | |
| 1171 | 1170 | srchFlags = newFlags; |
| 1172 | 1171 | } |
| 1173 | 1172 | if( fDebug ){ |
| 1174 | 1173 | @ <input type="hidden" name="debug" value="1"> |
| 1175 | 1174 | } |
| @@ -1197,11 +1196,10 @@ | ||
| 1197 | 1196 | /* |
| 1198 | 1197 | ** WEBPAGE: search |
| 1199 | 1198 | ** |
| 1200 | 1199 | ** Search for check-in comments, documents, tickets, or wiki that |
| 1201 | 1200 | ** match a user-supplied pattern. |
| 1202 | -** | |
| 1203 | 1201 | ** s=PATTERN Specify the full-text pattern to search for |
| 1204 | 1202 | ** y=TYPE What to search. |
| 1205 | 1203 | ** c -> check-ins |
| 1206 | 1204 | ** d -> documentation |
| 1207 | 1205 | ** t -> tickets |
| @@ -1850,22 +1848,19 @@ | ||
| 1850 | 1848 | ** COMMAND: fts-config* |
| 1851 | 1849 | ** |
| 1852 | 1850 | ** Usage: fossil fts-config ?SUBCOMMAND? ?ARGUMENT? |
| 1853 | 1851 | ** |
| 1854 | 1852 | ** The "fossil fts-config" command configures the full-text search capabilities |
| 1855 | -** of the repository. Subcommands: | |
| 1853 | +** of the repository. | |
| 1856 | 1854 | ** |
| 1855 | +** Subcommands: | |
| 1857 | 1856 | ** reindex Rebuild the search index. This is a no-op if |
| 1858 | 1857 | ** index search is disabled |
| 1859 | -** | |
| 1860 | 1858 | ** index (on|off) Turn the search index on or off |
| 1861 | -** | |
| 1862 | 1859 | ** enable cdtwe Enable various kinds of search. c=Check-ins, |
| 1863 | 1860 | ** d=Documents, t=Tickets, w=Wiki, e=Tech Notes. |
| 1864 | -** | |
| 1865 | 1861 | ** disable cdtwe Disable various kinds of search |
| 1866 | -** | |
| 1867 | 1862 | ** stemmer (on|off) Turn the Porter stemmer on or off for indexed |
| 1868 | 1863 | ** search. (Unindexed search is never stemmed.) |
| 1869 | 1864 | ** |
| 1870 | 1865 | ** The current search settings are displayed after any changes are applied. |
| 1871 | 1866 | ** Run this command with no arguments to simply see the settings. |
| 1872 | 1867 |
| --- 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 @@ | ||
| 209 | 209 | admin_log("Set option [%q] to [%q].", |
| 210 | 210 | zVar, iQ ? "on" : "off"); |
| 211 | 211 | iVal = iQ; |
| 212 | 212 | } |
| 213 | 213 | } |
| 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)" \ | |
| 216 | 222 | if( iVal ){ |
| 217 | 223 | @ checked="checked" \ |
| 218 | 224 | } |
| 219 | 225 | if( disabled ){ |
| 220 | 226 | @ disabled="disabled" \ |
| 221 | 227 | } |
| 222 | - @ /> <b>%s(zLabel)</b></label> | |
| 228 | + @ /> | |
| 229 | + if( zLabel[0] ) { | |
| 230 | + @ <b>%s(zLabel)</b></label> | |
| 231 | + } | |
| 223 | 232 | } |
| 224 | 233 | |
| 225 | 234 | /* |
| 226 | 235 | ** Generate an entry box for an attribute. |
| 227 | 236 | */ |
| @@ -244,16 +253,26 @@ | ||
| 244 | 253 | db_protect_pop(); |
| 245 | 254 | admin_log("Set entry_attribute %Q to: %.*s%s", |
| 246 | 255 | zVar, 20, zQ, (nZQ>20 ? "..." : "")); |
| 247 | 256 | zVal = zQ; |
| 248 | 257 | } |
| 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" \ | |
| 250 | 266 | @ id="%s(zQParm)" name="%s(zQParm)" value="%h(zVal)" size="%d(width)" \ |
| 251 | 267 | if( disabled ){ |
| 252 | 268 | @ disabled="disabled" \ |
| 253 | 269 | } |
| 254 | - @ /> <b>%s(zLabel)</b> | |
| 270 | + @ /> | |
| 271 | + if( zLabel[0] ) { | |
| 272 | + @ <b>%s(zLabel)</b></label> | |
| 273 | + } | |
| 255 | 274 | } |
| 256 | 275 | |
| 257 | 276 | /* |
| 258 | 277 | ** Generate a text box for an attribute. |
| 259 | 278 | */ |
| @@ -278,18 +297,24 @@ | ||
| 278 | 297 | admin_log("Set textarea_attribute %Q to: %.*s%s", |
| 279 | 298 | zVar, 20, zQ, (nZQ>20 ? "..." : "")); |
| 280 | 299 | z = zQ; |
| 281 | 300 | } |
| 282 | 301 | if( rows>0 && cols>0 ){ |
| 302 | + if( *zLabel ){ | |
| 303 | + @ <label> | |
| 304 | + } | |
| 283 | 305 | @ <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)" \ | |
| 285 | 310 | if( disabled ){ |
| 286 | 311 | @ disabled="disabled" \ |
| 287 | 312 | } |
| 288 | 313 | @ cols="%d(cols)">%h(z)</textarea> |
| 289 | 314 | if( *zLabel ){ |
| 290 | - @ <span class="textareaLabel">%s(zLabel)</span> | |
| 315 | + @ <span class="textareaLabel">%s(zLabel)</span></label> | |
| 291 | 316 | } |
| 292 | 317 | } |
| 293 | 318 | return z; |
| 294 | 319 | } |
| 295 | 320 | |
| @@ -316,16 +341,16 @@ | ||
| 316 | 341 | db_protect_pop(); |
| 317 | 342 | admin_log("Set multiple_choice_attribute %Q to: %.*s%s", |
| 318 | 343 | zVar, 20, zQ, (nZQ>20 ? "..." : "")); |
| 319 | 344 | z = zQ; |
| 320 | 345 | } |
| 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)"> | |
| 322 | 347 | for(i=0; i<nChoice*2; i+=2){ |
| 323 | 348 | const char *zSel = fossil_strcmp(azChoice[i],z)==0 ? " selected" : ""; |
| 324 | 349 | @ <option value="%h(azChoice[i])"%s(zSel)>%h(azChoice[i+1])</option> |
| 325 | 350 | } |
| 326 | - @ </select> <b>%h(zLabel)</b> | |
| 351 | + @ </select> <b>%h(zLabel)</b></label> | |
| 327 | 352 | } |
| 328 | 353 | |
| 329 | 354 | /* |
| 330 | 355 | ** Insert code into the current page that allows the user to configure |
| 331 | 356 | ** auto-hyperlink related robot defense settings. |
| @@ -694,30 +719,30 @@ | ||
| 694 | 719 | @ |
| 695 | 720 | @ <form action="%R/setup_login_group" method="post"><div> |
| 696 | 721 | login_insert_csrf_secret(); |
| 697 | 722 | @ <blockquote><table border="0"> |
| 698 | 723 | @ |
| 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">\ | |
| 713 | 738 | @ </td></tr> |
| 714 | 739 | @ |
| 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> | |
| 716 | 741 | @ <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"> | |
| 719 | 744 | @ (only used if creating a new login-group).</td></tr> |
| 720 | 745 | @ |
| 721 | 746 | @ <tr><td colspan="3" align="center"> |
| 722 | 747 | @ <input type="submit" value="Join" name="join"></td></tr> |
| 723 | 748 | @ </table></blockquote></div></form> |
| @@ -1653,12 +1678,12 @@ | ||
| 1653 | 1678 | @ The logo may or may not appear on each |
| 1654 | 1679 | @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and |
| 1655 | 1680 | @ <a href="setup_skinedit?w=2">header setup</a>. |
| 1656 | 1681 | @ To change the logo image, use the following form:</p> |
| 1657 | 1682 | 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> | |
| 1660 | 1685 | @ <p align="center"> |
| 1661 | 1686 | @ <input type="submit" name="setlogo" value="Change Logo" /> |
| 1662 | 1687 | @ <input type="submit" name="clrlogo" value="Revert To Default" /></p> |
| 1663 | 1688 | @ <p>(Properties: "logo-image" and "logo-mimetype") |
| 1664 | 1689 | @ </div></form> |
| @@ -1677,12 +1702,12 @@ | ||
| 1677 | 1702 | @ The background image may or may not appear on each |
| 1678 | 1703 | @ page depending on the <a href="setup_skinedit?w=0">CSS</a> and |
| 1679 | 1704 | @ <a href="setup_skinedit?w=2">header setup</a>. |
| 1680 | 1705 | @ To change the background image, use the following form:</p> |
| 1681 | 1706 | 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> | |
| 1684 | 1709 | @ <p align="center"> |
| 1685 | 1710 | @ <input type="submit" name="setbg" value="Change Background" /> |
| 1686 | 1711 | @ <input type="submit" name="clrbg" value="Revert To Default" /></p> |
| 1687 | 1712 | @ </div></form> |
| 1688 | 1713 | @ <p>(Properties: "background-image" and "background-mimetype") |
| @@ -1701,12 +1726,12 @@ | ||
| 1701 | 1726 | @ The icon image may or may not appear on each |
| 1702 | 1727 | @ page depending on the web browser in use and the MIME-Types that it |
| 1703 | 1728 | @ supports for icon images. |
| 1704 | 1729 | @ To change the icon image, use the following form:</p> |
| 1705 | 1730 | 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> | |
| 1708 | 1733 | @ <p align="center"> |
| 1709 | 1734 | @ <input type="submit" name="seticon" value="Change Icon" /> |
| 1710 | 1735 | @ <input type="submit" name="clricon" value="Revert To Default" /></p> |
| 1711 | 1736 | @ </div></form> |
| 1712 | 1737 | @ <p>(Properties: "icon-image" and "icon-mimetype") |
| @@ -1793,12 +1818,12 @@ | ||
| 1793 | 1818 | go = 1; |
| 1794 | 1819 | } |
| 1795 | 1820 | @ |
| 1796 | 1821 | @ <form method="post" action="%R/admin_sql"> |
| 1797 | 1822 | 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 /> | |
| 1800 | 1825 | @ <input type="submit" name="go" value="Run SQL"> |
| 1801 | 1826 | @ <input type="submit" name="schema" value="Show Schema"> |
| 1802 | 1827 | @ <input type="submit" name="tablelist" value="List Tables"> |
| 1803 | 1828 | @ <input type="submit" name="configtab" value="CONFIG Table Query"> |
| 1804 | 1829 | @ </form> |
| @@ -1902,12 +1927,12 @@ | ||
| 1902 | 1927 | @ run by this page. If Tcl integration was enabled at compile-time and |
| 1903 | 1928 | @ the "tcl" setting is enabled, Tcl commands may be run as well.</p> |
| 1904 | 1929 | @ |
| 1905 | 1930 | @ <form method="post" action="%R/admin_th1"> |
| 1906 | 1931 | 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 /> | |
| 1909 | 1934 | @ <input type="submit" name="go" value="Run TH1"> |
| 1910 | 1935 | @ </form> |
| 1911 | 1936 | if( go ){ |
| 1912 | 1937 | const char *zR; |
| 1913 | 1938 | int rc; |
| @@ -2174,13 +2199,13 @@ | ||
| 2174 | 2199 | blob_init(&namelist, 0, 0); |
| 2175 | 2200 | while( db_step(&q)==SQLITE_ROW ){ |
| 2176 | 2201 | const char *zName = db_column_text(&q, 0); |
| 2177 | 2202 | const char *zValue = db_column_text(&q, 1); |
| 2178 | 2203 | @ <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)'> | |
| 2180 | 2205 | @ </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)'> | |
| 2182 | 2207 | @ </td></tr> |
| 2183 | 2208 | cnt++; |
| 2184 | 2209 | if( blob_size(&namelist)>0 ) blob_append(&namelist, " ", 1); |
| 2185 | 2210 | blob_append(&namelist, zName, -1); |
| 2186 | 2211 | } |
| 2187 | 2212 |
| --- 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 | @ <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 | @ <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 | @ <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> <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 @@ | ||
| 31 | 31 | ** |
| 32 | 32 | ** Show a list of users. Clicking on any user jumps to the edit |
| 33 | 33 | ** screen for that user. Requires Admin privileges. |
| 34 | 34 | ** |
| 35 | 35 | ** Query parameters: |
| 36 | -** | |
| 37 | 36 | ** with=CAP Only show users that have one or more capabilities in CAP. |
| 38 | 37 | ** ubg Color backgrounds by username hash |
| 39 | 38 | */ |
| 40 | 39 | void setup_ulist(void){ |
| 41 | 40 | Stmt s; |
| @@ -604,26 +603,26 @@ | ||
| 604 | 603 | @ <input type="hidden" name="pw" value="*"> |
| 605 | 604 | } |
| 606 | 605 | @ <input type="hidden" name="referer" value="%h(cgi_referer("setup_ulist"))"> |
| 607 | 606 | @ <table width="100%%"> |
| 608 | 607 | @ <tr> |
| 609 | - @ <td class="usetupEditLabel" id="suuid">User ID:</td> | |
| 608 | + @ <td class="usetupEditLabel" id="suuid"><label for="id">User ID:</label></td> | |
| 610 | 609 | if( uid ){ |
| 611 | - @ <td>%d(uid) <input aria-labelledby="suuid" type="hidden" \ | |
| 610 | + @ <td>%d(uid) <input type="hidden" \ | |
| 612 | 611 | @ name="id" value="%d(uid)"/>\ |
| 613 | 612 | @ </td> |
| 614 | 613 | }else{ |
| 615 | - @ <td>(new user)<input aria-labelledby="suuid" type="hidden" name="id" \ | |
| 614 | + @ <td>(new user)<input type="hidden" name="id" \ | |
| 616 | 615 | @ value="0" /></td> |
| 617 | 616 | } |
| 618 | 617 | @ </tr> |
| 619 | 618 | @ <tr> |
| 620 | - @ <td class="usetupEditLabel" id="sulgn">Login:</td> | |
| 619 | + @ <td class="usetupEditLabel" id="sulgn"><label for="login">Login:</label></td> | |
| 621 | 620 | if( login_is_special(zLogin) ){ |
| 622 | 621 | @ <td><b>%h(zLogin)</b></td> |
| 623 | 622 | }else{ |
| 624 | - @ <td><input aria-labelledby="sulgn" type="text" name="login" \ | |
| 623 | + @ <td><input type="text" id="login" name="login" \ | |
| 625 | 624 | @ value="%h(zLogin)" /> |
| 626 | 625 | if( alert_tables_exist() ){ |
| 627 | 626 | int sid; |
| 628 | 627 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 629 | 628 | " WHERE suname=%Q", zLogin); |
| @@ -632,12 +631,13 @@ | ||
| 632 | 631 | @ (subscription info for %h(zLogin))</a>\ |
| 633 | 632 | } |
| 634 | 633 | } |
| 635 | 634 | @ </td></tr> |
| 636 | 635 | @ <tr> |
| 637 | - @ <td class="usetupEditLabel" id="sucnfo">Contact Info:</td> | |
| 638 | - @ <td><textarea aria-labelledby="sucnfo" name="info" cols="40" \ | |
| 636 | + @ <td class="usetupEditLabel" id="sucnfo"> | |
| 637 | + @ <label for="info">Contact Info:</label></td> | |
| 638 | + @ <td><textarea id="info" name="info" cols="40" \ | |
| 639 | 639 | @ rows="2">%h(zInfo)</textarea></td> |
| 640 | 640 | } |
| 641 | 641 | @ </tr> |
| 642 | 642 | @ <tr> |
| 643 | 643 | @ <td class="usetupEditLabel">Capabilities:</td> |
| @@ -729,19 +729,19 @@ | ||
| 729 | 729 | @ <a href="%R/setup_ucap_list">(key)</a> |
| 730 | 730 | @ </td> |
| 731 | 731 | @ </tr> |
| 732 | 732 | if( !login_is_special(zLogin) ){ |
| 733 | 733 | @ <tr> |
| 734 | - @ <td align="right" id="supw">Password:</td> | |
| 734 | + @ <td align="right" id="supw"><label for="pw">Password:</label></td> | |
| 735 | 735 | if( zPw[0] ){ |
| 736 | 736 | /* 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> | |
| 739 | 739 | }else{ |
| 740 | 740 | /* Show an empty password as an empty input field */ |
| 741 | 741 | 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" \ | |
| 743 | 743 | @ autocomplete="off" value="" /> Password suggestion: %z(zRPW)</td> |
| 744 | 744 | } |
| 745 | 745 | @ </tr> |
| 746 | 746 | } |
| 747 | 747 | zGroup = login_group_name(); |
| 748 | 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 | ** |
| 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 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 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 @@ | ||
| 501 | 501 | ** |
| 502 | 502 | ** Usage: %fossil sha1sum FILE... |
| 503 | 503 | ** |
| 504 | 504 | ** Compute an SHA1 checksum of all files named on the command-line. |
| 505 | 505 | ** If a file is named "-" then take its content from standard input. |
| 506 | -** Options: | |
| 507 | 506 | ** |
| 507 | +** Options: | |
| 508 | 508 | ** -h|--dereference If FILE is a symbolic link, compute the hash |
| 509 | 509 | ** on the object that the link points to. Normally, |
| 510 | 510 | ** the hash is over the name of the object that |
| 511 | 511 | ** the link points to. |
| 512 | 512 | ** |
| 513 | 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 | ** 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 @@ | ||
| 628 | 628 | ** |
| 629 | 629 | ** To be clear: The official NIST FIPS-202 implementation of SHA3 |
| 630 | 630 | ** with the added 01 padding is used, not the original Keccak submission. |
| 631 | 631 | ** |
| 632 | 632 | ** Options: |
| 633 | -** | |
| 634 | 633 | ** --224 Compute a SHA3-224 hash |
| 635 | 634 | ** --256 Compute a SHA3-256 hash (the default) |
| 636 | 635 | ** --384 Compute a SHA3-384 hash |
| 637 | 636 | ** --512 Compute a SHA3-512 hash |
| 638 | 637 | ** --size N An N-bit hash. N must be a multiple of 32 between |
| 639 | 638 |
| --- 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 @@ | ||
| 168 | 168 | @ artifact content will be purged from the repository the next time the |
| 169 | 169 | @ repository is rebuilt. A list of shunned artifacts can be seen at the |
| 170 | 170 | @ bottom of this page.</p> |
| 171 | 171 | @ |
| 172 | 172 | @ <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 | |
| 174 | 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 | |
| 175 | + @ following box and press the "Shun" button.</label> This will cause the artifacts | |
| 176 | 176 | @ to be removed from the repository and will prevent the artifacts from being |
| 177 | 177 | @ readded to the repository by subsequent sync operation.</p> |
| 178 | 178 | @ |
| 179 | 179 | @ <p>Note that you must enter full artifact hashes, not abbreviations |
| 180 | 180 | @ or symbolic tags.</p> |
| @@ -187,11 +187,11 @@ | ||
| 187 | 187 | @ sight - set the "hidden" tag on such artifacts instead.</p> |
| 188 | 188 | @ |
| 189 | 189 | @ <blockquote> |
| 190 | 190 | @ <form method="post" action="%R/%s(g.zPath)"><div> |
| 191 | 191 | 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"> | |
| 193 | 193 | if( zShun ){ |
| 194 | 194 | if( strlen(zShun) ){ |
| 195 | 195 | @ %h(zShun) |
| 196 | 196 | }else if( nRcvid ){ |
| 197 | 197 | db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid); |
| @@ -205,20 +205,20 @@ | ||
| 205 | 205 | @ <input type="submit" name="add" value="Shun" /> |
| 206 | 206 | @ </div></form> |
| 207 | 207 | @ </blockquote> |
| 208 | 208 | @ |
| 209 | 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 | |
| 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 | 212 | @ restored because the content is unknown. The only change is that |
| 213 | 213 | @ the formerly shunned artifacts will be accepted on subsequent sync |
| 214 | 214 | @ operations.</p> |
| 215 | 215 | @ |
| 216 | 216 | @ <blockquote> |
| 217 | 217 | @ <form method="post" action="%R/%s(g.zPath)"><div> |
| 218 | 218 | 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"> | |
| 220 | 220 | if( zAccept ){ |
| 221 | 221 | if( strlen(zAccept) ){ |
| 222 | 222 | @ %h(zAccept) |
| 223 | 223 | }else if( nRcvid ){ |
| 224 | 224 | db_prepare(&q, "SELECT uuid FROM blob WHERE rcvid=%d", nRcvid); |
| 225 | 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>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 @@ | ||
| 165 | 165 | @ Trunk Check-in</a></li> |
| 166 | 166 | @ <li>%z(href("%R/tree?type=flat"))Flat-view</a></li> |
| 167 | 167 | @ <li>%z(href("%R/fileage?name=trunk"))File ages for Trunk</a></li> |
| 168 | 168 | @ <li>%z(href("%R/uvlist"))Unversioned Files</a> |
| 169 | 169 | 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> | |
| 171 | 171 | } |
| 172 | 172 | @ </ul> |
| 173 | 173 | } |
| 174 | 174 | if( g.perm.Read ){ |
| 175 | 175 | @ <li>%z(href("%R/timeline"))Project Timeline</a> |
| 176 | 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</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 @@ | ||
| 441 | 441 | @ named "%h(zNewName)". Choose a different name.</span></p> |
| 442 | 442 | } |
| 443 | 443 | @ <form action="%R/setup_skin_admin" method="post"><div> |
| 444 | 444 | @ <table border="0"><tr> |
| 445 | 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)"> | |
| 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 | 448 | @ <tr><td><td> |
| 449 | 449 | @ <input type="hidden" name="sn" value="%h(zOldName)"> |
| 450 | 450 | @ <input type="submit" name="rename" value="Rename"> |
| 451 | 451 | @ <input type="submit" name="canren" value="Cancel"> |
| 452 | 452 | @ </table> |
| @@ -483,12 +483,12 @@ | ||
| 483 | 483 | @ <p><span class="generalError">There is already another skin |
| 484 | 484 | @ named "%h(zNewName)". Choose a different name.</span></p> |
| 485 | 485 | } |
| 486 | 486 | @ <form action="%R/setup_skin_admin" method="post"><div> |
| 487 | 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)"> | |
| 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 | 490 | @ <tr><td><td> |
| 491 | 491 | @ <input type="submit" name="save" value="Save"> |
| 492 | 492 | @ <input type="submit" name="cansave" value="Cancel"> |
| 493 | 493 | @ </table> |
| 494 | 494 | login_insert_csrf_secret(); |
| @@ -774,11 +774,10 @@ | ||
| 774 | 774 | /* |
| 775 | 775 | ** WEBPAGE: setup_skinedit |
| 776 | 776 | ** |
| 777 | 777 | ** Edit aspects of a skin determined by the w= query parameter. |
| 778 | 778 | ** Requires Admin or Setup privileges. |
| 779 | -** | |
| 780 | 779 | ** w=NUM -- 0=CSS, 1=footer, 2=header, 3=details, 4=js |
| 781 | 780 | ** sk=NUM -- the draft skin number |
| 782 | 781 | */ |
| 783 | 782 | void setup_skinedit(void){ |
| 784 | 783 | static const struct sSkinAddr { |
| @@ -853,26 +852,27 @@ | ||
| 853 | 852 | } |
| 854 | 853 | @ <form action="%R/setup_skinedit" method="post"><div> |
| 855 | 854 | login_insert_csrf_secret(); |
| 856 | 855 | @ <input type='hidden' name='w' value='%d(ii)'> |
| 857 | 856 | @ <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> | |
| 859 | 858 | if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){ |
| 860 | 859 | db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile); |
| 861 | 860 | } |
| 862 | - @ <textarea name="%s(zFile)" rows="10" cols="80">\ | |
| 861 | + @ <textarea id="%s(zFile)" name="%s(zFile)" rows="10" cols="80">\ | |
| 863 | 862 | @ %h(zContent)</textarea> |
| 864 | 863 | @ <br /> |
| 865 | 864 | @ <input type="submit" name="submit" value="Apply Changes" /> |
| 866 | 865 | if( isRevert ){ |
| 867 | 866 | @ ← Press to complete reversion to "%s(zBasis)" |
| 868 | 867 | }else if( fossil_strcmp(zContent,zDflt)!=0 ){ |
| 869 | 868 | @ <input type="submit" name="revert" value='Revert To "%s(zBasis)"' /> |
| 870 | 869 | } |
| 871 | 870 | @ <hr /> |
| 872 | - @ Baseline: \ | |
| 871 | + @ <label>Baseline: \ | |
| 873 | 872 | skin_emit_skin_selector("basis", zBasis, zDraft); |
| 873 | + @ </label> | |
| 874 | 874 | @ <input type="submit" name="diff" value="Unified Diff" /> |
| 875 | 875 | @ <input type="submit" name="sbsdiff" value="Side-by-Side Diff" /> |
| 876 | 876 | if( P("diff")!=0 || P("sbsdiff")!=0 ){ |
| 877 | 877 | Blob from, to, out; |
| 878 | 878 | DiffConfig DCfg; |
| @@ -1032,20 +1032,20 @@ | ||
| 1032 | 1032 | @ edits are made to one of nine draft skins. A draft skin can then |
| 1033 | 1033 | @ be published to become the default skin. |
| 1034 | 1034 | @ Nine separate drafts are available to facilitate A/B testing.</p> |
| 1035 | 1035 | @ |
| 1036 | 1036 | @ <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: | |
| 1038 | 1038 | @ <select size='1' name='sk' id='skStep1'> |
| 1039 | 1039 | for(i=1; i<=9; i++){ |
| 1040 | 1040 | if( i==iSkin ){ |
| 1041 | 1041 | @ <option value='%d(i)' selected>draft%d(i)</option> |
| 1042 | 1042 | }else{ |
| 1043 | 1043 | @ <option value='%d(i)'>draft%d(i)</option> |
| 1044 | 1044 | } |
| 1045 | 1045 | } |
| 1046 | - @ </select> | |
| 1046 | + @ </select></label> | |
| 1047 | 1047 | @ </p> |
| 1048 | 1048 | @ |
| 1049 | 1049 | @ <a name='step2'></a> |
| 1050 | 1050 | @ <h1>Step 2: Authenticate</h1> |
| 1051 | 1051 | @ |
| @@ -1057,13 +1057,13 @@ | ||
| 1057 | 1057 | @ the draft%d(iSkin) skin: |
| 1058 | 1058 | @ |
| 1059 | 1059 | @ <form method='POST' action='%R/setup_skin#step2' id='f02'> |
| 1060 | 1060 | @ <p class='skinInput'> |
| 1061 | 1061 | @ <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): | |
| 1063 | 1063 | @ <input type='text' name='editors' value='%h(zAllowedEditors)'\ |
| 1064 | - @ width='40'> | |
| 1064 | + @ width='40'></label> | |
| 1065 | 1065 | @ <input type='submit' name='submit2' value='Change'> |
| 1066 | 1066 | @ </p> |
| 1067 | 1067 | @ </form> |
| 1068 | 1068 | }else if( isEditor ){ |
| 1069 | 1069 | @ <p>You are authorized to make changes to the draft%d(iSkin) skin. |
| @@ -1085,13 +1085,13 @@ | ||
| 1085 | 1085 | @ or a preexisting skin, to use as a baseline.</p> |
| 1086 | 1086 | @ |
| 1087 | 1087 | @ <form method='POST' action='%R/setup_skin#step4' id='f03'> |
| 1088 | 1088 | @ <p class='skinInput'> |
| 1089 | 1089 | @ <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 | |
| 1091 | 1091 | skin_emit_skin_selector("initskin", "current", 0); |
| 1092 | - @ <input type='submit' name='init3' value='Go'> | |
| 1092 | + @ </label><input type='submit' name='init3' value='Go'> | |
| 1093 | 1093 | @ </p> |
| 1094 | 1094 | @ </form> |
| 1095 | 1095 | } |
| 1096 | 1096 | @ |
| 1097 | 1097 | @ <a name='step4'></a> |
| @@ -1155,14 +1155,14 @@ | ||
| 1155 | 1155 | @ pressing the button below:</p> |
| 1156 | 1156 | @ |
| 1157 | 1157 | @ <form method='POST' action='%R/setup_skin#step7'> |
| 1158 | 1158 | @ <p class='skinInput'> |
| 1159 | 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> | |
| 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 | 1164 | @ <input type='submit' name='pub7' value='Publish Draft%d(iSkin)'> |
| 1165 | 1165 | @ </p></form> |
| 1166 | 1166 | @ |
| 1167 | 1167 | @ <p>You will probably need to press Reload on your browser after |
| 1168 | 1168 | @ publishing the new skin.</p> |
| 1169 | 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">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 | @ ← 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 | @ ← 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 @@ | ||
| 423 | 423 | ** Interact with the SMTP server for DOMAIN by setting up a connection |
| 424 | 424 | ** and then immediately shutting it back down. Log all interaction |
| 425 | 425 | ** on the console. Use ME as the domain name of the sender. |
| 426 | 426 | ** |
| 427 | 427 | ** Options: |
| 428 | -** | |
| 429 | 428 | ** --direct Use DOMAIN directly without going through MX |
| 430 | 429 | ** --port N Talk on TCP port N |
| 431 | 430 | */ |
| 432 | 431 | void test_smtp_probe(void){ |
| 433 | 432 | SmtpSession *p; |
| @@ -596,11 +595,10 @@ | ||
| 596 | 595 | ** |
| 597 | 596 | ** Use SMTP to send the email message contained in the file named EMAIL |
| 598 | 597 | ** to the list of users TO. FROM is the sender of the email. |
| 599 | 598 | ** |
| 600 | 599 | ** Options: |
| 601 | -** | |
| 602 | 600 | ** --direct Go directly to the TO domain. Bypass MX lookup |
| 603 | 601 | ** --relayhost R Use R as relay host directly for delivery. |
| 604 | 602 | ** --port N Use TCP port N instead of 25 |
| 605 | 603 | ** --trace Show the SMTP conversation on the console |
| 606 | 604 | */ |
| 607 | 605 |
| --- 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 @@ | ||
| 330 | 330 | ** in ways that are unrecoverable. Be sure you know what you are doing before |
| 331 | 331 | ** running any SQL commands that modify the repository database. Use the |
| 332 | 332 | ** --readonly option to prevent accidental damage to the repository. |
| 333 | 333 | ** |
| 334 | 334 | ** Options: |
| 335 | -** | |
| 336 | 335 | ** --no-repository Skip opening the repository database. |
| 337 | -** | |
| 338 | 336 | ** --readonly Open the repository read-only. No changes |
| 339 | 337 | ** are allowed. This is a recommended safety |
| 340 | 338 | ** precaution to prevent repository damage. |
| 341 | -** | |
| 342 | 339 | ** -R REPOSITORY Use REPOSITORY as the repository database |
| 343 | -** | |
| 344 | 340 | ** --test Enable some testing and analysis features |
| 345 | 341 | ** that are normally disabled. |
| 346 | 342 | ** |
| 347 | 343 | ** All of the standard sqlite3 command-line shell options should also |
| 348 | 344 | ** work. |
| 349 | 345 | ** |
| 350 | 346 | ** The following SQL extensions are provided with this Fossil-enhanced |
| 351 | 347 | ** version of the sqlite3 command-line shell: |
| 352 | -** | |
| 353 | 348 | ** builtin A virtual table that contains one row for |
| 354 | 349 | ** each datafile that is built into the Fossil |
| 355 | 350 | ** binary. |
| 356 | -** | |
| 357 | 351 | ** checkin_mtime(X,Y) Return the mtime for the file Y (a BLOB.RID) |
| 358 | 352 | ** found in check-in X (another BLOB.RID value). |
| 359 | -** | |
| 360 | 353 | ** compress(X) Compress text X with the same algorithm used |
| 361 | 354 | ** to compress artifacts in the BLOB table. |
| 362 | -** | |
| 363 | 355 | ** content(X) Return the content of artifact X. X can be an |
| 364 | 356 | ** artifact hash or hash prefix or a tag. Artifacts |
| 365 | 357 | ** are stored compressed and deltaed. This function |
| 366 | 358 | ** does all necessary decompression and undeltaing. |
| 367 | -** | |
| 368 | 359 | ** decompress(X) Decompress text X. Undoes the work of |
| 369 | 360 | ** compress(X). |
| 370 | -** | |
| 371 | 361 | ** delta_apply(X,D) Apply delta D to source blob X and return |
| 372 | 362 | ** the result. |
| 373 | -** | |
| 374 | 363 | ** delta_create(X,Y) Create and return a delta that will convert |
| 375 | 364 | ** X into Y. |
| 376 | -** | |
| 377 | 365 | ** delta_output_size(D) Return the number of bytes of output to expect |
| 378 | 366 | ** when applying delta D |
| 379 | -** | |
| 380 | 367 | ** delta_parse(D) A table-valued function that deconstructs |
| 381 | 368 | ** delta D and returns rows for each element of |
| 382 | 369 | ** that delta. |
| 383 | -** | |
| 384 | 370 | ** files_of_checkin(X) A table-valued function that returns info on |
| 385 | 371 | ** all files contained in check-in X. Example: |
| 386 | -** | |
| 387 | 372 | ** SELECT * FROM files_of_checkin('trunk'); |
| 388 | -** | |
| 389 | 373 | ** helptext A virtual table with one row for each command, |
| 390 | 374 | ** webpage, and setting together with the built-in |
| 391 | 375 | ** help text. |
| 392 | -** | |
| 393 | 376 | ** now() Return the number of seconds since 1970. |
| 394 | -** | |
| 395 | 377 | ** obscure(T) Obfuscate the text password T so that its |
| 396 | 378 | ** original value is not readily visible. Fossil |
| 397 | 379 | ** uses this same algorithm when storing passwords |
| 398 | 380 | ** of remote URLs. |
| 399 | -** | |
| 400 | 381 | ** regexp The REGEXP operator works, unlike in |
| 401 | 382 | ** standard SQLite. |
| 402 | -** | |
| 403 | 383 | ** symbolic_name_to_rid(X) Return the BLOB.RID corresponding to symbolic |
| 404 | 384 | ** name X. |
| 405 | 385 | */ |
| 406 | 386 | void cmd_sqlite3(void){ |
| 407 | 387 | int noRepository; |
| 408 | 388 |
| --- 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 @@ | ||
| 503 | 503 | |
| 504 | 504 | /* |
| 505 | 505 | ** COMMAND: stash |
| 506 | 506 | ** |
| 507 | 507 | ** Usage: %fossil stash SUBCOMMAND ARGS... |
| 508 | -** | |
| 509 | 508 | ** > fossil stash |
| 510 | 509 | ** > fossil stash save ?-m|--comment COMMENT? ?FILES...? |
| 511 | 510 | ** > fossil stash snapshot ?-m|--comment COMMENT? ?FILES...? |
| 512 | -** | |
| 513 | 511 | ** Save the current changes in the working tree as a new stash. |
| 514 | 512 | ** Then revert the changes back to the last check-in. If FILES |
| 515 | 513 | ** are listed, then only stash and revert the named files. The |
| 516 | 514 | ** "save" verb can be omitted if and only if there are no other |
| 517 | 515 | ** arguments. The "snapshot" verb works the same as "save" but |
| 518 | 516 | ** omits the revert, keeping the checkout unchanged. |
| 519 | -** | |
| 520 | 517 | ** > fossil stash list|ls ?-v|--verbose? ?-W|--width NUM? |
| 521 | -** | |
| 522 | 518 | ** List all changes sets currently stashed. Show information about |
| 523 | 519 | ** individual files in each changeset if -v or --verbose is used. |
| 524 | -** | |
| 525 | 520 | ** > fossil stash show|cat ?STASHID? ?DIFF-OPTIONS? |
| 526 | 521 | ** > fossil stash gshow|gcat ?STASHID? ?DIFF-OPTIONS? |
| 527 | -** | |
| 528 | 522 | ** Show the contents of a stash as a diff against its baseline. |
| 529 | 523 | ** With gshow and gcat, gdiff-command is used instead of internal |
| 530 | 524 | ** diff logic. |
| 531 | -** | |
| 532 | 525 | ** > fossil stash pop |
| 533 | 526 | ** > fossil stash apply ?STASHID? |
| 534 | -** | |
| 535 | 527 | ** Apply STASHID or the most recently created stash to the current |
| 536 | 528 | ** working checkout. The "pop" command deletes that changeset from |
| 537 | 529 | ** the stash after applying it but the "apply" command retains the |
| 538 | 530 | ** changeset. |
| 539 | -** | |
| 540 | 531 | ** > fossil stash goto ?STASHID? |
| 541 | -** | |
| 542 | 532 | ** Update to the baseline checkout for STASHID then apply the |
| 543 | 533 | ** changes of STASHID. Keep STASHID so that it can be reused |
| 544 | 534 | ** This command is undoable. |
| 545 | -** | |
| 546 | 535 | ** > fossil stash drop|rm ?STASHID? ?-a|--all? |
| 547 | -** | |
| 548 | 536 | ** Forget everything about STASHID. Forget the whole stash if the |
| 549 | 537 | ** -a|--all flag is used. Individual drops are undoable but -a|--all |
| 550 | 538 | ** is not. |
| 551 | -** | |
| 552 | 539 | ** > fossil stash diff ?STASHID? ?DIFF-OPTIONS? |
| 553 | 540 | ** > fossil stash gdiff ?STASHID? ?DIFF-OPTIONS? |
| 554 | -** | |
| 555 | 541 | ** Show diffs of the current working directory and what that |
| 556 | 542 | ** directory would be if STASHID were applied. With gdiff, |
| 557 | 543 | ** gdiff-command is used instead of internal diff logic. |
| 558 | 544 | */ |
| 559 | 545 | void stash_cmd(void){ |
| 560 | 546 |
| --- 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 @@ | ||
| 333 | 333 | ** |
| 334 | 334 | ** Shows statistics and global information about the repository and/or |
| 335 | 335 | ** verify the integrity of a repository. |
| 336 | 336 | ** |
| 337 | 337 | ** Options: |
| 338 | -** | |
| 339 | 338 | ** -b|--brief Only show essential elements. |
| 340 | 339 | ** --db-check Run "PRAGMA quick_check" on the repository database. |
| 341 | 340 | ** --db-verify Run a full verification of the repository integrity. |
| 342 | 341 | ** This involves decoding and reparsing all artifacts |
| 343 | 342 | ** and can take significant time. |
| 344 | 343 |
| --- 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 @@ | ||
| 223 | 223 | @ class='statistics-report-table-events'> |
| 224 | 224 | } |
| 225 | 225 | @ <thead> |
| 226 | 226 | @ <th>%s(zTimeLabel)</th> |
| 227 | 227 | @ <th>Events</th> |
| 228 | - @ <th width='90%%'><!-- relative commits graph --></th> | |
| 228 | + @ <th width='90%%'>Graph</th> | |
| 229 | 229 | @ </thead><tbody> |
| 230 | 230 | /* |
| 231 | 231 | Run the query twice. The first time we calculate the maximum |
| 232 | 232 | number of events for a given row. Maybe someone with better SQL |
| 233 | 233 | Fu can re-implement this with a single query. |
| @@ -362,11 +362,11 @@ | ||
| 362 | 362 | @ <table class='statistics-report-table-events sortable' border='0' \ |
| 363 | 363 | @ cellpadding='2' cellspacing='0' data-column-types='tkx' data-init-sort='2'> |
| 364 | 364 | @ <thead><tr> |
| 365 | 365 | @ <th>User</th> |
| 366 | 366 | @ <th>Events</th> |
| 367 | - @ <th width='90%%'><!-- relative commits graph --></th> | |
| 367 | + @ <th width='90%%'>Graph</th> | |
| 368 | 368 | @ </tr></thead><tbody> |
| 369 | 369 | db_prepare(&query, |
| 370 | 370 | "SELECT ifnull(euser,user), " |
| 371 | 371 | "COUNT(*) AS eventCount " |
| 372 | 372 | "FROM v_reports " |
| @@ -438,11 +438,11 @@ | ||
| 438 | 438 | @ <table class='statistics-report-table-events sortable' border='0' \ |
| 439 | 439 | @ cellpadding='2' cellspacing='0' data-column-types='tNx' data-init-sort='2'> |
| 440 | 440 | @ <thead><tr> |
| 441 | 441 | @ <th>File</th> |
| 442 | 442 | @ <th>Check-ins</th> |
| 443 | - @ <th width='90%%'><!-- relative commits graph --></th> | |
| 443 | + @ <th width='90%%'>Graph</th> | |
| 444 | 444 | @ </tr></thead><tbody> |
| 445 | 445 | while( SQLITE_ROW == db_step(&query) ){ |
| 446 | 446 | const char *zFile = db_column_text(&query, 0); |
| 447 | 447 | const int n = db_column_int(&query, 1); |
| 448 | 448 | int sz; |
| @@ -519,11 +519,11 @@ | ||
| 519 | 519 | @ cellpadding='2' cellspacing='0' data-column-types='ntnx' data-init-sort='1'> |
| 520 | 520 | @ <thead><tr> |
| 521 | 521 | @ <th>DoW</th> |
| 522 | 522 | @ <th>Day</th> |
| 523 | 523 | @ <th>Events</th> |
| 524 | - @ <th width='90%%'><!-- relative commits graph --></th> | |
| 524 | + @ <th width='90%%'>Graph</th> | |
| 525 | 525 | @ </tr></thead><tbody> |
| 526 | 526 | while( SQLITE_ROW == db_step(&query) ){ |
| 527 | 527 | const int nCount = db_column_int(&query, 1); |
| 528 | 528 | if(nCount>nMaxEvents){ |
| 529 | 529 | nMaxEvents = nCount; |
| @@ -595,11 +595,11 @@ | ||
| 595 | 595 | @ <table class='statistics-report-table-events sortable' border='0' \ |
| 596 | 596 | @ cellpadding='2' cellspacing='0' data-column-types='nnx' data-init-sort='1'> |
| 597 | 597 | @ <thead><tr> |
| 598 | 598 | @ <th>Hour</th> |
| 599 | 599 | @ <th>Events</th> |
| 600 | - @ <th width='90%%'><!-- relative commits graph --></th> | |
| 600 | + @ <th width='90%%'>Graph</th> | |
| 601 | 601 | @ </tr></thead><tbody> |
| 602 | 602 | while( SQLITE_ROW == db_step(&query) ){ |
| 603 | 603 | const int nCount = db_column_int(&query, 1); |
| 604 | 604 | if(nCount>nMaxEvents){ |
| 605 | 605 | nMaxEvents = nCount; |
| @@ -643,11 +643,11 @@ | ||
| 643 | 643 | int iterations = 0; /* # of active time periods. */ |
| 644 | 644 | int rowCount = 0; |
| 645 | 645 | int total = 0; |
| 646 | 646 | |
| 647 | 647 | stats_report_init_view(); |
| 648 | - style_submenu_sql("y", "Year:", | |
| 648 | + style_submenu_sql("y", "Year", | |
| 649 | 649 | "WITH RECURSIVE a(b) AS (" |
| 650 | 650 | " SELECT substr(date('now'),1,4) UNION ALL" |
| 651 | 651 | " SELECT b-1 FROM a" |
| 652 | 652 | " WHERE b>0+(SELECT substr(date(min(mtime)),1,4) FROM event)" |
| 653 | 653 | ") SELECT b, b FROM a ORDER BY b DESC"); |
| @@ -674,11 +674,11 @@ | ||
| 674 | 674 | "border='0' cellpadding='2' width='100%%' " |
| 675 | 675 | "cellspacing='0' data-column-types='tnx' data-init-sort='0'>"); |
| 676 | 676 | cgi_printf("<thead><tr>" |
| 677 | 677 | "<th>Week</th>" |
| 678 | 678 | "<th>Events</th>" |
| 679 | - "<th width='90%%'><!-- relative commits graph --></th>" | |
| 679 | + "<th width='90%%'>Graph</th>" | |
| 680 | 680 | "</tr></thead>" |
| 681 | 681 | "<tbody>"); |
| 682 | 682 | while( SQLITE_ROW == db_step(&q) ){ |
| 683 | 683 | const int nCount = db_column_int(&q, 1); |
| 684 | 684 | if(nCount>nMaxEvents){ |
| @@ -784,21 +784,19 @@ | ||
| 784 | 784 | ** WEBPAGE: reports |
| 785 | 785 | ** |
| 786 | 786 | ** Shows activity reports for the repository. |
| 787 | 787 | ** |
| 788 | 788 | ** Query Parameters: |
| 789 | -** | |
| 790 | 789 | ** view=REPORT_NAME Valid values: bymonth, byyear, byuser |
| 791 | 790 | ** user=NAME Restricts statistics to the given user |
| 792 | 791 | ** type=TYPE Restricts the report to a specific event type: |
| 793 | 792 | ** ci (check-in), f (forum), w (wiki), t (ticket), g (tag) |
| 794 | 793 | ** Defaulting to all event types. |
| 795 | 794 | ** |
| 796 | 795 | ** The view-specific query parameters include: |
| 797 | 796 | ** |
| 798 | 797 | ** view=byweek: |
| 799 | -** | |
| 800 | 798 | ** y=YYYY The year to report (default is the server's |
| 801 | 799 | ** current year). |
| 802 | 800 | */ |
| 803 | 801 | void stats_report_page(){ |
| 804 | 802 | const char *zView = P("view"); /* Which view/report to show. */ |
| @@ -811,16 +809,16 @@ | ||
| 811 | 809 | const char *zVal; /* Value of view= query parameter */ |
| 812 | 810 | int eType; /* Corresponding RPT_* define */ |
| 813 | 811 | } aViewType[] = { |
| 814 | 812 | { "File Changes","byfile", RPT_BYFILE }, |
| 815 | 813 | { "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 }, | |
| 822 | 820 | }; |
| 823 | 821 | static const char *const azType[] = { |
| 824 | 822 | "a", "All Changes", |
| 825 | 823 | "ci", "Check-ins", |
| 826 | 824 | "f", "Forum Posts", |
| @@ -850,15 +848,15 @@ | ||
| 850 | 848 | for(i=0; i<count(aViewType); i++){ |
| 851 | 849 | azView[nView++] = aViewType[i].zVal; |
| 852 | 850 | azView[nView++] = aViewType[i].zName; |
| 853 | 851 | } |
| 854 | 852 | 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); | |
| 856 | 854 | } |
| 857 | - style_submenu_multichoice("view", nView/2, azView, 0); | |
| 855 | + style_submenu_multichoice("view", "Group By", nView/2, azView, 0); | |
| 858 | 856 | if( eType!=RPT_BYUSER && eType!=RPT_LASTCHNG ){ |
| 859 | - style_submenu_sql("user","User:", | |
| 857 | + style_submenu_sql("user","User", | |
| 860 | 858 | "SELECT '', 'All Users' UNION ALL " |
| 861 | 859 | "SELECT x, x FROM (" |
| 862 | 860 | " SELECT DISTINCT trim(coalesce(euser,user)) AS x FROM event %s" |
| 863 | 861 | " ORDER BY 1 COLLATE nocase) WHERE x!=''", |
| 864 | 862 | eType==RPT_BYFILE ? "WHERE type='ci'" : "" |
| 865 | 863 |
| --- 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 @@ | ||
| 44 | 44 | const char *zLink; /* Jump to this link when button is pressed */ |
| 45 | 45 | } aSubmenu[30]; |
| 46 | 46 | static int nSubmenu = 0; /* Number of buttons */ |
| 47 | 47 | static struct SubmenuCtrl { |
| 48 | 48 | const char *zName; /* Form query parameter */ |
| 49 | - const char *zLabel; /* Label. Might be NULL for FF_MULTI */ | |
| 49 | + const char *zLabel; /* Label */ | |
| 50 | 50 | unsigned char eType; /* FF_ENTRY, FF_MULTI, FF_CHECKBOX */ |
| 51 | 51 | unsigned char eVisible; /* STYLE_NORMAL or STYLE_DISABLED */ |
| 52 | 52 | short int iSize; /* Width for FF_ENTRY. Count for FF_MULTI */ |
| 53 | 53 | const char *const *azChoice; /* value/display pairs for FF_MULTI */ |
| 54 | + const char *zTrue; /* FF_BINARY label when true */ | |
| 54 | 55 | const char *zFalse; /* FF_BINARY label when false */ |
| 55 | 56 | const char *zJS; /* Javascript to run on toggle */ |
| 56 | 57 | } aSubmenuCtrl[20]; |
| 57 | 58 | static int nSubmenuCtrl = 0; |
| 58 | 59 | #define FF_ENTRY 1 /* Text entry box */ |
| @@ -307,30 +308,34 @@ | ||
| 307 | 308 | aSubmenuCtrl[nSubmenuCtrl].eType = FF_CHECKBOX; |
| 308 | 309 | nSubmenuCtrl++; |
| 309 | 310 | } |
| 310 | 311 | void style_submenu_binary( |
| 311 | 312 | const char *zName, /* Query parameter name */ |
| 313 | + const char *zLabel, /* Label of parameter */ | |
| 312 | 314 | const char *zTrue, /* Label to show when parameter is true */ |
| 313 | 315 | const char *zFalse, /* Label to show when the parameter is false */ |
| 314 | 316 | int eVisible /* Visible or disabled */ |
| 315 | 317 | ){ |
| 316 | 318 | assert( nSubmenuCtrl < count(aSubmenuCtrl) ); |
| 317 | 319 | aSubmenuCtrl[nSubmenuCtrl].zName = zName; |
| 318 | - aSubmenuCtrl[nSubmenuCtrl].zLabel = zTrue; | |
| 320 | + aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel; | |
| 321 | + aSubmenuCtrl[nSubmenuCtrl].zTrue = zTrue; | |
| 319 | 322 | aSubmenuCtrl[nSubmenuCtrl].zFalse = zFalse; |
| 320 | 323 | aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible; |
| 321 | 324 | aSubmenuCtrl[nSubmenuCtrl].eType = FF_BINARY; |
| 322 | 325 | nSubmenuCtrl++; |
| 323 | 326 | } |
| 324 | 327 | void style_submenu_multichoice( |
| 325 | 328 | const char *zName, /* Query parameter name */ |
| 329 | + const char *zLabel, /* Label of parameter */ | |
| 326 | 330 | int nChoice, /* Number of options */ |
| 327 | 331 | const char *const *azChoice, /* value/display pairs. 2*nChoice entries */ |
| 328 | 332 | int eVisible /* Visible or disabled */ |
| 329 | 333 | ){ |
| 330 | 334 | assert( nSubmenuCtrl < count(aSubmenuCtrl) ); |
| 331 | 335 | aSubmenuCtrl[nSubmenuCtrl].zName = zName; |
| 336 | + aSubmenuCtrl[nSubmenuCtrl].zLabel = zLabel; | |
| 332 | 337 | aSubmenuCtrl[nSubmenuCtrl].iSize = nChoice; |
| 333 | 338 | aSubmenuCtrl[nSubmenuCtrl].azChoice = azChoice; |
| 334 | 339 | aSubmenuCtrl[nSubmenuCtrl].eVisible = eVisible; |
| 335 | 340 | aSubmenuCtrl[nSubmenuCtrl].eType = FF_MULTI; |
| 336 | 341 | nSubmenuCtrl++; |
| @@ -645,11 +650,11 @@ | ||
| 645 | 650 | ** Default HTML page header text through <body>. If the repository-specific |
| 646 | 651 | ** header template lacks a <body> tag, then all of the following is |
| 647 | 652 | ** prepended. |
| 648 | 653 | */ |
| 649 | 654 | static const char zDfltHeader[] = |
| 650 | -@ <html> | |
| 655 | +@ <html lang="en"> | |
| 651 | 656 | @ <head> |
| 652 | 657 | @ <meta charset="UTF-8"> |
| 653 | 658 | @ <base href="$baseurl/$current_page" /> |
| 654 | 659 | @ <meta http-equiv="Content-Security-Policy" content="$default_csp" /> |
| 655 | 660 | @ <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| @@ -987,11 +992,11 @@ | ||
| 987 | 992 | if( nSubmenuCtrl ){ |
| 988 | 993 | @ <form id='f01' method='GET' action='%R/%s(g.zPath)'> |
| 989 | 994 | @ <input type='hidden' name='udc' value='1'> |
| 990 | 995 | cgi_tag_query_parameter("udc"); |
| 991 | 996 | } |
| 992 | - @ <div class="submenu"> | |
| 997 | + @ <nav id="submenu" class="submenu" title="Submenu"> | |
| 993 | 998 | if( nSubmenu>0 ){ |
| 994 | 999 | qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare); |
| 995 | 1000 | for(i=0; i<nSubmenu; i++){ |
| 996 | 1001 | struct Submenu *p = &aSubmenu[i]; |
| 997 | 1002 | style_derive_classname(p->zLabel, zClass, sizeof zClass); |
| @@ -1018,29 +1023,27 @@ | ||
| 1018 | 1023 | } |
| 1019 | 1024 | style_derive_classname(zQPN, zClass+4, sizeof(zClass)-4); |
| 1020 | 1025 | switch( aSubmenuCtrl[i].eType ){ |
| 1021 | 1026 | case FF_ENTRY: |
| 1022 | 1027 | @ <span class='submenuctrl%s(zXtraClass) %s(zClass)'>\ |
| 1023 | - @ %h(aSubmenuCtrl[i].zLabel)\ | |
| 1028 | + @ <label>%h(aSubmenuCtrl[i].zLabel): \ | |
| 1024 | 1029 | @ <input type='text' name='%s(zQPN)' value='%h(PD(zQPN, ""))' \ |
| 1025 | 1030 | if( aSubmenuCtrl[i].iSize<0 ){ |
| 1026 | 1031 | @ size='%d(-aSubmenuCtrl[i].iSize)' \ |
| 1027 | 1032 | }else if( aSubmenuCtrl[i].iSize>0 ){ |
| 1028 | 1033 | @ size='%d(aSubmenuCtrl[i].iSize)' \ |
| 1029 | 1034 | @ maxlength='%d(aSubmenuCtrl[i].iSize)' \ |
| 1030 | 1035 | } |
| 1031 | - @ id='submenuctrl-%d(i)'%s(zDisabled)></span> | |
| 1036 | + @ id='submenuctrl-%d(i)'%s(zDisabled)></label></span> | |
| 1032 | 1037 | break; |
| 1033 | 1038 | case FF_MULTI: { |
| 1034 | 1039 | int j; |
| 1035 | 1040 | const char *zVal = P(zQPN); |
| 1036 | 1041 | if( zXtraClass[0] ){ |
| 1037 | 1042 | @ <span class='%s(zXtraClass+1) %s(zClass)'> |
| 1038 | 1043 | } |
| 1039 | - if( aSubmenuCtrl[i].zLabel ){ | |
| 1040 | - @ %h(aSubmenuCtrl[i].zLabel)\ | |
| 1041 | - } | |
| 1044 | + @ <label>%h(aSubmenuCtrl[i].zLabel): \ | |
| 1042 | 1045 | @ <select class='submenuctrl %s(zClass)' size='1' name='%s(zQPN)' \ |
| 1043 | 1046 | @ id='submenuctrl-%d(i)'%s(zDisabled)> |
| 1044 | 1047 | for(j=0; j<aSubmenuCtrl[i].iSize*2; j+=2){ |
| 1045 | 1048 | const char *zQPV = aSubmenuCtrl[i].azChoice[j]; |
| 1046 | 1049 | @ <option value='%h(zQPV)'\ |
| @@ -1048,30 +1051,33 @@ | ||
| 1048 | 1051 | @ selected\ |
| 1049 | 1052 | } |
| 1050 | 1053 | @ >%h(aSubmenuCtrl[i].azChoice[j+1])</option> |
| 1051 | 1054 | } |
| 1052 | 1055 | @ </select> |
| 1056 | + @ </label> | |
| 1053 | 1057 | if( zXtraClass[0] ){ |
| 1054 | 1058 | @ </span> |
| 1055 | 1059 | } |
| 1056 | 1060 | break; |
| 1057 | 1061 | } |
| 1058 | 1062 | case FF_BINARY: { |
| 1059 | 1063 | int isTrue = PB(zQPN); |
| 1064 | + @ <label for='submenuctrl-%d(i)'>%h(aSubmenuCtrl[i].zLabel): | |
| 1060 | 1065 | @ <select class='submenuctrl%s(zXtraClass)' size='1' \ |
| 1061 | 1066 | @ name='%s(zQPN)' id='submenuctrl-%d(i)'%s(zDisabled)> |
| 1062 | 1067 | @ <option value='1'\ |
| 1063 | 1068 | if( isTrue ){ |
| 1064 | 1069 | @ selected\ |
| 1065 | 1070 | } |
| 1066 | - @ >%h(aSubmenuCtrl[i].zLabel)</option> | |
| 1071 | + @ >%h(aSubmenuCtrl[i].zTrue)</option> | |
| 1067 | 1072 | @ <option value='0'\ |
| 1068 | 1073 | if( !isTrue ){ |
| 1069 | 1074 | @ selected\ |
| 1070 | 1075 | } |
| 1071 | 1076 | @ >%h(aSubmenuCtrl[i].zFalse)</option> |
| 1072 | 1077 | @ </select> |
| 1078 | + @ </label> | |
| 1073 | 1079 | break; |
| 1074 | 1080 | } |
| 1075 | 1081 | case FF_CHECKBOX: { |
| 1076 | 1082 | @ <label class='submenuctrl submenuckbox%s(zXtraClass) %s(zClass)'>\ |
| 1077 | 1083 | @ <input type='checkbox' name='%s(zQPN)' id='submenuctrl-%d(i)' \ |
| @@ -1086,11 +1092,11 @@ | ||
| 1086 | 1092 | @ %h(aSubmenuCtrl[i].zLabel)</label> |
| 1087 | 1093 | break; |
| 1088 | 1094 | } |
| 1089 | 1095 | } |
| 1090 | 1096 | } |
| 1091 | - @ </div> | |
| 1097 | + @ </nav> | |
| 1092 | 1098 | if( nSubmenuCtrl ){ |
| 1093 | 1099 | cgi_query_parameters_to_hidden(); |
| 1094 | 1100 | cgi_tag_query_parameter(0); |
| 1095 | 1101 | @ </form> |
| 1096 | 1102 | builtin_request_js("menu.js"); |
| @@ -1107,17 +1113,17 @@ | ||
| 1107 | 1113 | @ <div class="adunit_banner"> |
| 1108 | 1114 | cgi_append_content(zAd, -1); |
| 1109 | 1115 | @ </div> |
| 1110 | 1116 | } |
| 1111 | 1117 | |
| 1112 | - @ <div class="content"><span id="debugMsg"></span> | |
| 1118 | + @ <main class="content"><span id="debugMsg"></span> | |
| 1113 | 1119 | cgi_destination(CGI_BODY); |
| 1114 | 1120 | |
| 1115 | 1121 | if( sideboxUsed ){ |
| 1116 | 1122 | @ <div class="endContent"></div> |
| 1117 | 1123 | } |
| 1118 | - @ </div> | |
| 1124 | + @ </main> | |
| 1119 | 1125 | |
| 1120 | 1126 | /* Put the footer at the bottom of the page. */ |
| 1121 | 1127 | zFooter = skin_get("footer"); |
| 1122 | 1128 | if( sqlite3_strlike("%</body>%", zFooter, 0)==0 ){ |
| 1123 | 1129 | style_load_all_js_files(); |
| @@ -1265,18 +1271,15 @@ | ||
| 1265 | 1271 | /* |
| 1266 | 1272 | ** WEBPAGE: style.css loadavg-exempt |
| 1267 | 1273 | ** |
| 1268 | 1274 | ** Return the style sheet. The style sheet is assemblied from |
| 1269 | 1275 | ** multiple sources, in order: |
| 1270 | -** | |
| 1271 | 1276 | ** (1) The built-in "default.css" style sheet containing basic defaults. |
| 1272 | -** | |
| 1273 | 1277 | ** (2) The page-specific style sheet taken from the built-in |
| 1274 | 1278 | ** called "PAGENAME.css" where PAGENAME is the value of the name= |
| 1275 | 1279 | ** or page= query parameters. If neither name= nor page= exist, |
| 1276 | 1280 | ** then this section is a no-op. |
| 1277 | -** | |
| 1278 | 1281 | ** (3) The skin-specific "css.txt" file, if there one. |
| 1279 | 1282 | ** |
| 1280 | 1283 | ** All of (1), (2), and (3) above (or as many as exist) are concatenated. |
| 1281 | 1284 | ** The result is then run through TH1 with the following variables set: |
| 1282 | 1285 | ** |
| 1283 | 1286 |
| --- 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 | @ %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 | @ %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 | @ <label>%h(aSubmenuCtrl[i].zLabel): \ |
| 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 | @ <label>%h(aSubmenuCtrl[i].zLabel): \ |
| 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): |
| 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 |
+1
-1
| --- src/style.chat.css | ||
| +++ src/style.chat.css | ||
| @@ -199,11 +199,11 @@ | ||
| 199 | 199 | } |
| 200 | 200 | body.chat #chat-messages-wrapper.loading > * { |
| 201 | 201 | /* An attempt at reducing flicker when loading lots of messages. */ |
| 202 | 202 | visibility: hidden; |
| 203 | 203 | } |
| 204 | -body.chat div.content { | |
| 204 | +body.chat main.content { | |
| 205 | 205 | margin: 0; |
| 206 | 206 | padding: 0; |
| 207 | 207 | display: flex; |
| 208 | 208 | flex-direction: column-reverse; |
| 209 | 209 | /* ^^^^ In order to get good automatic scrolling of new messages on |
| 210 | 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 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 @@ | ||
| 319 | 319 | ** If URL is not specified, then the URL from the most recent clone, push, |
| 320 | 320 | ** pull, remote, or sync command is used. See "fossil help clone" for |
| 321 | 321 | ** details on the URL formats. |
| 322 | 322 | ** |
| 323 | 323 | ** Options: |
| 324 | -** | |
| 325 | 324 | ** --all Pull from all remotes, not just the default |
| 326 | 325 | ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol, |
| 327 | 326 | ** if required by the remote website |
| 328 | 327 | ** --from-parent-project Pull content from the parent project |
| 329 | 328 | ** --ipv4 Use only IPv4, not IPv6 |
| @@ -374,11 +373,10 @@ | ||
| 374 | 373 | ** If URL is not specified, then the URL from the most recent clone, push, |
| 375 | 374 | ** pull, remote, or sync command is used. See "fossil help clone" for |
| 376 | 375 | ** details on the URL formats. |
| 377 | 376 | ** |
| 378 | 377 | ** Options: |
| 379 | -** | |
| 380 | 378 | ** --all Push to all remotes, not just the default |
| 381 | 379 | ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol, |
| 382 | 380 | ** if required by the remote website |
| 383 | 381 | ** --ipv4 Use only IPv4, not IPv6 |
| 384 | 382 | ** --no-http-compression Do not compress HTTP traffic |
| @@ -423,11 +421,10 @@ | ||
| 423 | 421 | ** If URL is not specified, then the URL from the most recent clone, push, |
| 424 | 422 | ** pull, remote, or sync command is used. See "fossil help clone" for |
| 425 | 423 | ** details on the URL formats. |
| 426 | 424 | ** |
| 427 | 425 | ** Options: |
| 428 | -** | |
| 429 | 426 | ** --all Sync with all remotes, not just the default |
| 430 | 427 | ** -B|--httpauth USER:PASS Credentials for the simple HTTP auth protocol, |
| 431 | 428 | ** if required by the remote website |
| 432 | 429 | ** --ipv4 Use only IPv4, not IPv6 |
| 433 | 430 | ** --no-http-compression Do not compress HTTP traffic |
| @@ -485,49 +482,35 @@ | ||
| 485 | 482 | ** View or modify the URLs of remote repositories used for syncing. |
| 486 | 483 | ** The "default" remote is specially named by Fossil and corresponds to |
| 487 | 484 | ** the URL used in the most recent "sync", "push", "pull", "clone", or |
| 488 | 485 | ** similar command. As such, the default remote can be updated by |
| 489 | 486 | ** Fossil with each sync command. Other named remotes are persistent. |
| 490 | -** | |
| 491 | 487 | ** > fossil remote |
| 492 | -** | |
| 493 | 488 | ** With no arguments, this command shows the current default remote |
| 494 | 489 | ** URL. If there is no default, it shows "off". |
| 495 | -** | |
| 496 | 490 | ** > fossil remote add NAME URL |
| 497 | -** | |
| 498 | 491 | ** Add a new named URL. Afterwards, NAME can be used as a short |
| 499 | 492 | ** symbolic name for URL in contexts where a URL is required. The |
| 500 | 493 | ** URL argument can be "default" or a prior symbolic name to make |
| 501 | 494 | ** a copy of an existing URL under the new NAME. The "default" |
| 502 | 495 | ** remote cannot be defined with this subcommand; instead, |
| 503 | 496 | ** use 'fossil remote REF' as documented below. |
| 504 | -** | |
| 505 | 497 | ** > fossil remote config-data |
| 506 | -** | |
| 507 | 498 | ** DEBUG USE ONLY - Show the name and value of every CONFIG table |
| 508 | 499 | ** entry in the repository that is associated with the remote URL store. |
| 509 | 500 | ** Passwords are obscured in the output. |
| 510 | -** | |
| 511 | 501 | ** > fossil remote delete NAME |
| 512 | -** | |
| 513 | 502 | ** Delete a named URL previously created by the "add" subcommand. |
| 514 | -** | |
| 515 | 503 | ** > fossil remote hyperlink ?FILENAME? ?LINENUM? ?LINENUM? |
| 516 | -** | |
| 517 | 504 | ** Print a URL that will access the current checkout on the remote |
| 518 | 505 | ** repository. Or if the FILENAME argument is included, print the |
| 519 | 506 | ** URL to access that particular file within the current checkout. |
| 520 | 507 | ** If one or two linenumber arguments are provided after the filename, |
| 521 | 508 | ** then the URL is for the line or range of lines specified. |
| 522 | -** | |
| 523 | 509 | ** > fossil remote list|ls |
| 524 | -** | |
| 525 | 510 | ** Show all remote repository URLs. |
| 526 | -** | |
| 527 | 511 | ** > fossil remote off |
| 528 | -** | |
| 529 | 512 | ** Forget the default URL. This disables autosync. |
| 530 | 513 | ** |
| 531 | 514 | ** This is a convenient way to enter "airplane mode". To enter |
| 532 | 515 | ** airplane mode, first save the current default URL, then turn the |
| 533 | 516 | ** default off. Perhaps like this: |
| @@ -536,28 +519,22 @@ | ||
| 536 | 519 | ** fossil remote off |
| 537 | 520 | ** |
| 538 | 521 | ** To exit airplane mode and turn autosync back on again: |
| 539 | 522 | ** |
| 540 | 523 | ** fossil remote main |
| 541 | -** | |
| 542 | 524 | ** > fossil remote scrub |
| 543 | -** | |
| 544 | 525 | ** Forget any saved passwords for remote repositories, but continue |
| 545 | 526 | ** to remember the URLs themselves. You will be prompted for the |
| 546 | 527 | ** password the next time it is needed. |
| 547 | -** | |
| 548 | 528 | ** > fossil remote ui ?FILENAME? ?LINENUM? ?LINENUM? |
| 549 | -** | |
| 550 | 529 | ** Bring up a web browser pointing at the remote repository, and |
| 551 | 530 | ** specifically to the page that describes the current checkout |
| 552 | 531 | ** on that remote repository. Or if FILENAME and/or LINENUM arguments |
| 553 | 532 | ** are provided, to the specific file and range of lines. This |
| 554 | 533 | ** command is similar to "fossil remote hyperlink" except that instead |
| 555 | 534 | ** of printing the URL, it passes the URL off to the web browser. |
| 556 | -** | |
| 557 | 535 | ** > fossil remote REF |
| 558 | -** | |
| 559 | 536 | ** Make REF the new default URL, replacing the prior default. |
| 560 | 537 | ** REF may be a URL or a NAME from a prior "add". |
| 561 | 538 | */ |
| 562 | 539 | void remote_url_cmd(void){ |
| 563 | 540 | char *zUrl, *zArg; |
| @@ -820,11 +797,10 @@ | ||
| 820 | 797 | ** Only the main repository database is backed up by this command. The |
| 821 | 798 | ** open checkout file (if any) is not saved. Nor is the global configuration |
| 822 | 799 | ** database. |
| 823 | 800 | ** |
| 824 | 801 | ** Options: |
| 825 | -** | |
| 826 | 802 | ** --overwrite OK to overwrite an existing file |
| 827 | 803 | ** -R NAME Filename of the repository to backup |
| 828 | 804 | */ |
| 829 | 805 | void backup_cmd(void){ |
| 830 | 806 | char *zDest; |
| 831 | 807 |
| --- 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 @@ | ||
| 391 | 391 | ** COMMAND: tag |
| 392 | 392 | ** |
| 393 | 393 | ** Usage: %fossil tag SUBCOMMAND ... |
| 394 | 394 | ** |
| 395 | 395 | ** Run various subcommands to control tags and properties. |
| 396 | -** | |
| 397 | 396 | ** > fossil tag add ?OPTIONS? TAGNAME ARTIFACT-ID ?VALUE? |
| 398 | -** | |
| 399 | 397 | ** Add a new tag or property to an artifact referenced by |
| 400 | 398 | ** ARTIFACT-ID. For checkins, the tag will be usable instead |
| 401 | 399 | ** of a CHECK-IN in commands such as update and merge. If the |
| 402 | 400 | ** --propagate flag is present and ARTIFACT-ID refers to a |
| 403 | 401 | ** wiki page, forum post, technote, or check-in, the tag |
| @@ -417,13 +415,11 @@ | ||
| 417 | 415 | ** the form 'YYYY-MMM-DD HH:MM:SS'. |
| 418 | 416 | ** |
| 419 | 417 | ** Note that fossil uses some tag prefixes internally and this |
| 420 | 418 | ** command will reject tags with these prefixes to avoid |
| 421 | 419 | ** causing problems or confusion: "wiki-", "tkt-", "event-". |
| 422 | -** | |
| 423 | 420 | ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID |
| 424 | -** | |
| 425 | 421 | ** Remove the tag TAGNAME from the artifact referenced by |
| 426 | 422 | ** ARTIFACT-ID, and also remove the propagation of the tag to |
| 427 | 423 | ** any descendants. Use the the -n|--dry-run option to see |
| 428 | 424 | ** what would have happened. Certain tag name prefixes are |
| 429 | 425 | ** forbidden, as documented for the 'add' subcommand. |
| @@ -433,13 +429,11 @@ | ||
| 433 | 429 | ** non-CHECK-IN artifacts. |
| 434 | 430 | ** --date-override DATETIME Set date and time deleted. |
| 435 | 431 | ** --user-override USER Name USER when deleting the tag. |
| 436 | 432 | ** -n|--dry-run Display the control artifact, but do |
| 437 | 433 | ** not insert it into the database. |
| 438 | -** | |
| 439 | 434 | ** > fossil tag find ?OPTIONS? TAGNAME |
| 440 | -** | |
| 441 | 435 | ** List all objects that use TAGNAME. |
| 442 | 436 | ** |
| 443 | 437 | ** Options: |
| 444 | 438 | ** --raw Interprets tag as a raw name instead of a |
| 445 | 439 | ** branch name and matches any type of artifact. |
| @@ -448,13 +442,11 @@ | ||
| 448 | 442 | ** -t|--type TYPE One of: ci (check-in), w (wiki), |
| 449 | 443 | ** e (event/technote), f (forum post), |
| 450 | 444 | ** t (ticket). Default is all types. Ignored |
| 451 | 445 | ** if --raw is used. |
| 452 | 446 | ** -n|--limit N Limit to N results. |
| 453 | -** | |
| 454 | 447 | ** > fossil tag list|ls ?OPTIONS? ?ARTIFACT-ID? |
| 455 | -** | |
| 456 | 448 | ** List all tags or, if ARTIFACT-ID is supplied, all tags and |
| 457 | 449 | ** their values for that artifact. The tagtype option accepts |
| 458 | 450 | ** one of: propagated, singleton, cancel. For historical |
| 459 | 451 | ** scripting compatibility, the internal tag types "wiki-", |
| 460 | 452 | ** "tkt-", and "event-" (technote) are elided by default |
| @@ -747,11 +739,10 @@ | ||
| 747 | 739 | ** two or more separate repositories. You should never need to reparent |
| 748 | 740 | ** during normal operations. |
| 749 | 741 | ** |
| 750 | 742 | ** Reparenting is accomplished by adding a parent tag. So to undo the |
| 751 | 743 | ** reparenting operation, simply delete the tag. |
| 752 | -** | |
| 753 | 744 | ** --test Make database entries but do not add the tag artifact. |
| 754 | 745 | ** So the reparent operation will be undone by the next |
| 755 | 746 | ** "fossil rebuild" command. |
| 756 | 747 | ** -n|--dry-run Print the tag that would have been created but do not |
| 757 | 748 | ** actually change the database in any way. |
| @@ -841,11 +832,10 @@ | ||
| 841 | 832 | ** |
| 842 | 833 | ** Render a timeline with all check-ins that contain non-propagating |
| 843 | 834 | ** symbolic tags. |
| 844 | 835 | ** |
| 845 | 836 | ** Query parameters: |
| 846 | -** | |
| 847 | 837 | ** ng No graph |
| 848 | 838 | ** nohidden Hide check-ins with "hidden" tag |
| 849 | 839 | ** onlyhidden Show only check-ins with "hidden" tag |
| 850 | 840 | ** brbg Background color by branch name |
| 851 | 841 | ** ubg Background color by user name |
| 852 | 842 |
| --- 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 @@ | ||
| 719 | 719 | ** /tarball?r=release&name=xyz.tar.gz |
| 720 | 720 | ** /tarball/xyz.tar.gz?r=release |
| 721 | 721 | ** /tarball?name=release/xyz.tar.gz |
| 722 | 722 | ** |
| 723 | 723 | ** Query parameters: |
| 724 | -** | |
| 725 | 724 | ** name=NAME[.tar.gz] The base name of the output file. The default |
| 726 | 725 | ** value is a configuration parameter in the project |
| 727 | 726 | ** settings. A prefix of the name, omitting the |
| 728 | 727 | ** extension, is used as the top-most directory name. |
| 729 | -** | |
| 730 | 728 | ** r=TAG The check-in that is turned into a compressed tarball. |
| 731 | 729 | ** Defaults to "trunk". This query parameter used to |
| 732 | 730 | ** be called "uuid" and "uuid" is still accepted for |
| 733 | 731 | ** backwards compatibility. If the name= query parameter |
| 734 | 732 | ** contains one "/" character then the part before the / |
| 735 | 733 | ** is the TAG and the part after the / is the true name. |
| 736 | 734 | ** If no TAG is specified by any of the above means, then |
| 737 | 735 | ** "trunk" is used as the default. |
| 738 | -** | |
| 739 | 736 | ** in=PATTERN Only include files that match the comma-separate |
| 740 | 737 | ** list of GLOB patterns in PATTERN, as with ex= |
| 741 | -** | |
| 742 | 738 | ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a |
| 743 | 739 | ** comma-separated list of GLOB patterns, where each |
| 744 | 740 | ** pattern can optionally be quoted using ".." or '..'. |
| 745 | 741 | ** Any file matching both ex= and in= is excluded. |
| 746 | 742 | */ |
| 747 | 743 |
| --- 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 |
-7
| --- src/th_main.c | ||
| +++ src/th_main.c | ||
| @@ -2906,11 +2906,10 @@ | ||
| 2906 | 2906 | ** Read the content of the file named "FILE" as if it were a header or |
| 2907 | 2907 | ** footer or ticket rendering script, evaluate it, and show the results |
| 2908 | 2908 | ** on standard output. |
| 2909 | 2909 | ** |
| 2910 | 2910 | ** Options: |
| 2911 | -** | |
| 2912 | 2911 | ** --cgi Include a CGI response header in the output |
| 2913 | 2912 | ** --http Include an HTTP response header in the output |
| 2914 | 2913 | ** --open-config Open the configuration database |
| 2915 | 2914 | ** --set-anon-caps Set anonymous login capabilities |
| 2916 | 2915 | ** --set-user-caps Set user login capabilities |
| @@ -2956,11 +2955,10 @@ | ||
| 2956 | 2955 | ** Evaluate SCRIPT as if it were a header or footer or ticket rendering |
| 2957 | 2956 | ** script and show the results on standard output. SCRIPT may be either |
| 2958 | 2957 | ** a filename or a string of th1 script code. |
| 2959 | 2958 | ** |
| 2960 | 2959 | ** Options: |
| 2961 | -** | |
| 2962 | 2960 | ** --cgi Include a CGI response header in the output |
| 2963 | 2961 | ** --http Include an HTTP response header in the output |
| 2964 | 2962 | ** --open-config Open the configuration database |
| 2965 | 2963 | ** --set-anon-caps Set anonymous login capabilities |
| 2966 | 2964 | ** --set-user-caps Set user login capabilities |
| @@ -3017,11 +3015,10 @@ | ||
| 3017 | 3015 | ** Evaluate the contents of the file named "FILE" as if it were a header |
| 3018 | 3016 | ** or footer or ticket rendering script and show the results on standard |
| 3019 | 3017 | ** output. |
| 3020 | 3018 | ** |
| 3021 | 3019 | ** Options: |
| 3022 | -** | |
| 3023 | 3020 | ** --cgi Include a CGI response header in the output |
| 3024 | 3021 | ** --http Include an HTTP response header in the output |
| 3025 | 3022 | ** --open-config Open the configuration database |
| 3026 | 3023 | ** --set-anon-caps Set anonymous login capabilities |
| 3027 | 3024 | ** --set-user-caps Set user login capabilities |
| @@ -3086,25 +3083,21 @@ | ||
| 3086 | 3083 | ** TYPE argument must be one of the following: |
| 3087 | 3084 | ** |
| 3088 | 3085 | ** cmdhook Executes the TH1 procedure [command_hook], after |
| 3089 | 3086 | ** setting the TH1 variables "cmd_name", "cmd_args", |
| 3090 | 3087 | ** and "cmd_flags" to appropriate values. |
| 3091 | -** | |
| 3092 | 3088 | ** cmdnotify Executes the TH1 procedure [command_notify], after |
| 3093 | 3089 | ** setting the TH1 variables "cmd_name", "cmd_args", |
| 3094 | 3090 | ** and "cmd_flags" to appropriate values. |
| 3095 | -** | |
| 3096 | 3091 | ** webhook Executes the TH1 procedure [webpage_hook], after |
| 3097 | 3092 | ** setting the TH1 variables "web_name", "web_args", |
| 3098 | 3093 | ** and "web_flags" to appropriate values. |
| 3099 | -** | |
| 3100 | 3094 | ** webnotify Executes the TH1 procedure [webpage_notify], after |
| 3101 | 3095 | ** setting the TH1 variables "web_name", "web_args", |
| 3102 | 3096 | ** and "web_flags" to appropriate values. |
| 3103 | 3097 | ** |
| 3104 | 3098 | ** Options: |
| 3105 | -** | |
| 3106 | 3099 | ** --cgi Include a CGI response header in the output |
| 3107 | 3100 | ** --http Include an HTTP response header in the output |
| 3108 | 3101 | ** --th-trace Trace TH1 execution (for debugging purposes) |
| 3109 | 3102 | */ |
| 3110 | 3103 | void test_th_hook(void){ |
| 3111 | 3104 |
| --- 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 @@ | ||
| 443 | 443 | ** background color of the timeline entry */ |
| 444 | 444 | gidx = graph_add_row(pGraph, rid, -1, 0, 0, zBr, zBgClr, zUuid, 0); |
| 445 | 445 | @ <div id="m%d(gidx)" class="tl-nodemark"></div> |
| 446 | 446 | } |
| 447 | 447 | @</td> |
| 448 | - if( !isSelectedOrCurrent ){ | |
| 448 | + if( !isSelectedOrCurrent && gidx>0 ){ | |
| 449 | 449 | @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)" id='mc%d(gidx)'> |
| 450 | 450 | }else{ |
| 451 | 451 | @ <td class="timeline%s(zStyle)Cell%s(zExtraClass)"> |
| 452 | 452 | } |
| 453 | 453 | if( pGraph ){ |
| @@ -570,11 +570,11 @@ | ||
| 570 | 570 | if( drawDetailEllipsis ){ |
| 571 | 571 | @ <span class='timelineEllipsis' id='ellipsis-%d(rid)' \ |
| 572 | 572 | @ data-id='%d(rid)'>...</span> |
| 573 | 573 | } |
| 574 | 574 | if( tmFlags & TIMELINE_COLUMNAR ){ |
| 575 | - if( !isSelectedOrCurrent ){ | |
| 575 | + if( !isSelectedOrCurrent && gidx>0 ){ | |
| 576 | 576 | @ <td class="timelineDetailCell%s(zExtraClass)" id='md%d(gidx)'> |
| 577 | 577 | }else{ |
| 578 | 578 | @ <td class="timelineDetailCell%s(zExtraClass)"> |
| 579 | 579 | } |
| 580 | 580 | } |
| @@ -1156,11 +1156,11 @@ | ||
| 1156 | 1156 | static void timeline_y_submenu(int isDisabled){ |
| 1157 | 1157 | static int i = 0; |
| 1158 | 1158 | static const char *az[16]; |
| 1159 | 1159 | if( i==0 ){ |
| 1160 | 1160 | az[0] = "all"; |
| 1161 | - az[1] = "Any Type"; | |
| 1161 | + az[1] = "Any"; | |
| 1162 | 1162 | i = 2; |
| 1163 | 1163 | if( g.perm.Read ){ |
| 1164 | 1164 | az[i++] = "ci"; |
| 1165 | 1165 | az[i++] = "Check-ins"; |
| 1166 | 1166 | az[i++] = "g"; |
| @@ -1185,11 +1185,11 @@ | ||
| 1185 | 1185 | az[i++] = "Forum"; |
| 1186 | 1186 | } |
| 1187 | 1187 | assert( i<=count(az) ); |
| 1188 | 1188 | } |
| 1189 | 1189 | if( i>2 ){ |
| 1190 | - style_submenu_multichoice("y", i/2, az, isDisabled); | |
| 1190 | + style_submenu_multichoice("y", "Elements", i/2, az, isDisabled); | |
| 1191 | 1191 | } |
| 1192 | 1192 | } |
| 1193 | 1193 | |
| 1194 | 1194 | /* |
| 1195 | 1195 | ** Return the default value for the "ss" cookie or query parameter. |
| @@ -1222,15 +1222,15 @@ | ||
| 1222 | 1222 | |
| 1223 | 1223 | /* Available timeline display styles, together with their y= query |
| 1224 | 1224 | ** parameter names. |
| 1225 | 1225 | */ |
| 1226 | 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", | |
| 1227 | + "m", "Modern", | |
| 1228 | + "j", "Columnar", | |
| 1229 | + "c", "Compact", | |
| 1230 | + "v", "Verbose", | |
| 1231 | + "x", "Classic", | |
| 1232 | 1232 | }; |
| 1233 | 1233 | #if INTERFACE |
| 1234 | 1234 | # define N_TIMELINE_VIEW_STYLE 5 |
| 1235 | 1235 | #endif |
| 1236 | 1236 | |
| @@ -1241,10 +1241,11 @@ | ||
| 1241 | 1241 | ** Return the TIMELINE_* value appropriate for the view-style. |
| 1242 | 1242 | */ |
| 1243 | 1243 | int timeline_ss_submenu(void){ |
| 1244 | 1244 | cookie_link_parameter("ss","ss",timeline_default_ss()); |
| 1245 | 1245 | style_submenu_multichoice("ss", |
| 1246 | + "View", | |
| 1246 | 1247 | N_TIMELINE_VIEW_STYLE, |
| 1247 | 1248 | timeline_view_styles, 0); |
| 1248 | 1249 | return timeline_ss_cookie(); |
| 1249 | 1250 | } |
| 1250 | 1251 | |
| @@ -1541,11 +1542,10 @@ | ||
| 1541 | 1542 | |
| 1542 | 1543 | /* |
| 1543 | 1544 | ** WEBPAGE: timeline |
| 1544 | 1545 | ** |
| 1545 | 1546 | ** Query parameters: |
| 1546 | -** | |
| 1547 | 1547 | ** a=TIMEORTAG Show events after TIMEORTAG |
| 1548 | 1548 | ** b=TIMEORTAG Show events before TIMEORTAG |
| 1549 | 1549 | ** c=TIMEORTAG Show events that happen "circa" TIMEORTAG |
| 1550 | 1550 | ** cf=FILEHASH Show events around the time of the first use of |
| 1551 | 1551 | ** the file with FILEHASH |
| @@ -2139,11 +2139,11 @@ | ||
| 2139 | 2139 | } |
| 2140 | 2140 | } |
| 2141 | 2141 | if( advancedMenu ){ |
| 2142 | 2142 | style_submenu_checkbox("v", "Files", (zType[0]!='a' && zType[0]!='c'),0); |
| 2143 | 2143 | } |
| 2144 | - style_submenu_entry("n","Max:",4,0); | |
| 2144 | + style_submenu_entry("n","Max",4,0); | |
| 2145 | 2145 | timeline_y_submenu(1); |
| 2146 | 2146 | }else if( f_rid && g.perm.Read ){ |
| 2147 | 2147 | /* If f= is present, ignore all other parameters other than n= */ |
| 2148 | 2148 | char *zUuid; |
| 2149 | 2149 | db_multi_exec( |
| @@ -2669,15 +2669,15 @@ | ||
| 2669 | 2669 | if( zType[0]=='a' || zType[0]=='c' ){ |
| 2670 | 2670 | style_submenu_checkbox("unhide", "Unhide", 0, 0); |
| 2671 | 2671 | } |
| 2672 | 2672 | style_submenu_checkbox("v", "Files",(zType[0]!='a' && zType[0]!='c'),0); |
| 2673 | 2673 | } |
| 2674 | - style_submenu_entry("n","Max:",4,0); | |
| 2674 | + style_submenu_entry("n","Max",4,0); | |
| 2675 | 2675 | timeline_y_submenu(disableY); |
| 2676 | 2676 | 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); | |
| 2679 | 2679 | } |
| 2680 | 2680 | } |
| 2681 | 2681 | blob_zero(&cond); |
| 2682 | 2682 | } |
| 2683 | 2683 | if( PB("showsql") ){ |
| @@ -3383,11 +3383,10 @@ | ||
| 3383 | 3383 | ** |
| 3384 | 3384 | ** Generate a vanity page that shows project activity for the current |
| 3385 | 3385 | ** day of the year for various years in the history of the project. |
| 3386 | 3386 | ** |
| 3387 | 3387 | ** Query parameters: |
| 3388 | -** | |
| 3389 | 3388 | ** today=DATE Use DATE as today's date |
| 3390 | 3389 | */ |
| 3391 | 3390 | void thisdayinhistory_page(void){ |
| 3392 | 3391 | static int aYearsAgo[] = { 1, 2, 3, 4, 5, 10, 15, 20, 30, 40, 50, 75, 100 }; |
| 3393 | 3392 | const char *zToday; |
| 3394 | 3393 |
| --- 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 @@ | ||
| 715 | 715 | /* |
| 716 | 716 | ** WEBPAGE: tktview |
| 717 | 717 | ** URL: tktview?name=HASH |
| 718 | 718 | ** |
| 719 | 719 | ** View a ticket identified by the name= query parameter. |
| 720 | -** Other query parameters: | |
| 721 | 720 | ** |
| 721 | +** Other query parameters: | |
| 722 | 722 | ** tl Show a timeline of the ticket above the status |
| 723 | 723 | */ |
| 724 | 724 | void tktview_page(void){ |
| 725 | 725 | const char *zScript; |
| 726 | 726 | char *zFullName; |
| @@ -1194,11 +1194,10 @@ | ||
| 1194 | 1194 | ** URL: /tkttimeline/TICKETUUID |
| 1195 | 1195 | ** |
| 1196 | 1196 | ** Show the change history for a single ticket in timeline format. |
| 1197 | 1197 | ** |
| 1198 | 1198 | ** Query parameters: |
| 1199 | -** | |
| 1200 | 1199 | ** y=ci Show only check-ins associated with the ticket |
| 1201 | 1200 | */ |
| 1202 | 1201 | void tkttimeline_page(void){ |
| 1203 | 1202 | char *zTitle; |
| 1204 | 1203 | const char *zUuid; |
| @@ -1475,53 +1474,42 @@ | ||
| 1475 | 1474 | ** COMMAND: ticket* |
| 1476 | 1475 | ** |
| 1477 | 1476 | ** Usage: %fossil ticket SUBCOMMAND ... |
| 1478 | 1477 | ** |
| 1479 | 1478 | ** Run various subcommands to control tickets |
| 1480 | -** | |
| 1481 | 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. | |
| 1482 | 1483 | ** |
| 1483 | 1484 | ** 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. | |
| 1486 | 1491 | ** -R|--repository REPO |
| 1487 | 1492 | ** |
| 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 | 1493 | ** If TICKETFILTER is given on the commandline, the query is |
| 1494 | 1494 | ** limited with a new WHERE-condition. |
| 1495 | 1495 | ** example: Report lists a column # with the uuid |
| 1496 | 1496 | ** TICKETFILTER may be [#]='uuuuuuuuu' |
| 1497 | 1497 | ** example: Report only lists rows with status not open |
| 1498 | 1498 | ** TICKETFILTER: status != 'open' |
| 1499 | 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 | 1500 | ** Instead of the report title it's possible to use the report |
| 1507 | 1501 | ** number; the special report number 0 lists all columns defined in |
| 1508 | 1502 | ** the ticket table. |
| 1509 | -** | |
| 1510 | 1503 | ** > fossil ticket list fields |
| 1511 | 1504 | ** > fossil ticket ls fields |
| 1512 | -** | |
| 1513 | 1505 | ** List all fields defined for ticket in the fossil repository. |
| 1514 | -** | |
| 1515 | 1506 | ** > fossil ticket list reports |
| 1516 | 1507 | ** > fossil ticket ls reports |
| 1517 | -** | |
| 1518 | 1508 | ** List all ticket reports defined in the fossil repository. |
| 1519 | -** | |
| 1520 | 1509 | ** > fossil ticket set TICKETUUID (FIELD VALUE)+ ?-q|--quote? |
| 1521 | 1510 | ** > fossil ticket change TICKETUUID (FIELD VALUE)+ ?-q|--quote? |
| 1522 | -** | |
| 1523 | 1511 | ** Change ticket identified by TICKETUUID to set the values of |
| 1524 | 1512 | ** each field FIELD to VALUE. |
| 1525 | 1513 | ** |
| 1526 | 1514 | ** Field names as defined in the TICKET table. By default, these |
| 1527 | 1515 | ** names include: type, status, subsystem, priority, severity, foundin, |
| @@ -1531,17 +1519,13 @@ | ||
| 1531 | 1519 | ** If you use +FIELD, the VALUE is appended to the field FIELD. You |
| 1532 | 1520 | ** can use more than one field/value pair on the commandline. Using |
| 1533 | 1521 | ** --quote enables the special character decoding as in "ticket |
| 1534 | 1522 | ** show", which allows setting multiline text or text with special |
| 1535 | 1523 | ** characters. |
| 1536 | -** | |
| 1537 | 1524 | ** > fossil ticket add FIELD VALUE ?FIELD VALUE .. ? ?-q|--quote? |
| 1538 | -** | |
| 1539 | 1525 | ** Like set, but create a new ticket with the given values. |
| 1540 | -** | |
| 1541 | 1526 | ** > fossil ticket history TICKETUUID |
| 1542 | -** | |
| 1543 | 1527 | ** Show the complete change history for the ticket |
| 1544 | 1528 | ** |
| 1545 | 1529 | ** Note that the values in set|add are not validated against the |
| 1546 | 1530 | ** definitions given in "Ticket Common Script". |
| 1547 | 1531 | */ |
| 1548 | 1532 |
| --- 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 @@ | ||
| 153 | 153 | cgi_redirect("tktsetup"); |
| 154 | 154 | } |
| 155 | 155 | } |
| 156 | 156 | @ <form action="%R/%s(g.zPath)" method="post"><div> |
| 157 | 157 | 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> | |
| 160 | 160 | @ <blockquote><p> |
| 161 | 161 | @ <input type="submit" name="submit" value="Apply Changes" /> |
| 162 | 162 | @ <input type="submit" name="clear" value="Revert To Default" /> |
| 163 | 163 | @ <input type="submit" name="setup" value="Cancel" /> |
| 164 | 164 | @ </p></blockquote> |
| @@ -324,57 +324,57 @@ | ||
| 324 | 324 | @ </th1> |
| 325 | 325 | @ <h1 style="text-align: center;">Enter A New Ticket</h1> |
| 326 | 326 | @ <table cellpadding="5"> |
| 327 | 327 | @ <tr> |
| 328 | 328 | @ <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> | |
| 331 | 331 | @ </td> |
| 332 | 332 | @ </tr> |
| 333 | 333 | @ |
| 334 | 334 | @ <tr> |
| 335 | -@ <td align="right">Type:</td> | |
| 335 | +@ <td align="right"><label for="type">Type:</label></td> | |
| 336 | 336 | @ <td align="left"><th1>combobox type $type_choices 1</th1></td> |
| 337 | 337 | @ <td align="left">What type of ticket is this?</td> |
| 338 | 338 | @ </tr> |
| 339 | 339 | @ |
| 340 | 340 | @ <tr> |
| 341 | -@ <td align="right">Version:</td> | |
| 341 | +@ <td align="right"><label for="foundin">Version:</label></td> | |
| 342 | 342 | @ <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>" /> | |
| 344 | 344 | @ </td> |
| 345 | 345 | @ <td align="left">In what version or build number do you observe |
| 346 | 346 | @ the problem?</td> |
| 347 | 347 | @ </tr> |
| 348 | 348 | @ |
| 349 | 349 | @ <tr> |
| 350 | -@ <td align="right">Severity:</td> | |
| 350 | +@ <td align="right"><label for="severity">Severity:</label></td> | |
| 351 | 351 | @ <td align="left"><th1>combobox severity $severity_choices 1</th1></td> |
| 352 | 352 | @ <td align="left">How debilitating is the problem? How badly does the problem |
| 353 | 353 | @ affect the operation of the product?</td> |
| 354 | 354 | @ </tr> |
| 355 | 355 | @ |
| 356 | 356 | @ <tr> |
| 357 | -@ <td align="right">EMail:</td> | |
| 357 | +@ <td align="right"><label for="private_contact">EMail:</label></td> | |
| 358 | 358 | @ <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>" | |
| 360 | 360 | @ size="30" /> |
| 361 | 361 | @ </td> |
| 362 | 362 | @ <td align="left"><u>Not publicly visible</u> |
| 363 | 363 | @ Used by developers to contact you with questions.</td> |
| 364 | 364 | @ </tr> |
| 365 | 365 | @ |
| 366 | 366 | @ <tr> |
| 367 | 367 | @ <td colspan="3"> |
| 368 | -@ Enter a detailed description of the problem. | |
| 368 | +@ <label for="icomment">Enter a detailed description of the problem.</label> | |
| 369 | 369 | @ For code defects, be sure to provide details on exactly how |
| 370 | 370 | @ the problem can be reproduced. Provide as much detail as |
| 371 | -@ possible. Format: | |
| 371 | +@ possible. <label for="mutype">Format:</label> | |
| 372 | 372 | @ <th1>combobox mutype {HTML {[links only]} Markdown {Plain Text} Wiki} 1</th1> |
| 373 | 373 | @ <br /> |
| 374 | 374 | @ <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" | |
| 376 | 376 | @ wrap="virtual" class="wikiedit">$<icomment></textarea><br /> |
| 377 | 377 | @ </tr> |
| 378 | 378 | @ |
| 379 | 379 | @ <th1>enable_output [info exists preview]</th1> |
| 380 | 380 | @ <tr><td colspan="3"> |
| @@ -615,55 +615,56 @@ | ||
| 615 | 615 | @ submit_ticket |
| 616 | 616 | @ set preview 1 |
| 617 | 617 | @ } |
| 618 | 618 | @ </th1> |
| 619 | 619 | @ <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" /> | |
| 622 | 622 | @ </td></tr> |
| 623 | 623 | @ |
| 624 | -@ <tr><td class="tktDspLabel">Status:</td><td> | |
| 624 | +@ <tr><td class="tktDspLabel"><label for="status">Status:</label></td><td> | |
| 625 | 625 | @ <th1>combobox status $status_choices 1</th1> |
| 626 | 626 | @ </td></tr> |
| 627 | 627 | @ |
| 628 | -@ <tr><td class="tktDspLabel">Type:</td><td> | |
| 628 | +@ <tr><td class="tktDspLabel"><label for="type">Type:</label></td><td> | |
| 629 | 629 | @ <th1>combobox type $type_choices 1</th1> |
| 630 | 630 | @ </td></tr> |
| 631 | 631 | @ |
| 632 | -@ <tr><td class="tktDspLabel">Severity:</td><td> | |
| 632 | +@ <tr><td class="tktDspLabel"><label for="severity">Severity:</label></td><td> | |
| 633 | 633 | @ <th1>combobox severity $severity_choices 1</th1> |
| 634 | 634 | @ </td></tr> |
| 635 | 635 | @ |
| 636 | -@ <tr><td class="tktDspLabel">Priority:</td><td> | |
| 636 | +@ <tr><td class="tktDspLabel"><label for="priority">Priority:</label></td><td> | |
| 637 | 637 | @ <th1>combobox priority $priority_choices 1</th1> |
| 638 | 638 | @ </td></tr> |
| 639 | 639 | @ |
| 640 | -@ <tr><td class="tktDspLabel">Resolution:</td><td> | |
| 640 | +@ <tr><td class="tktDspLabel"><label for="resolution">Resolution:</label></td><td> | |
| 641 | 641 | @ <th1>combobox resolution $resolution_choices 1</th1> |
| 642 | 642 | @ </td></tr> |
| 643 | 643 | @ |
| 644 | -@ <tr><td class="tktDspLabel">Subsystem:</td><td> | |
| 644 | +@ <tr><td class="tktDspLabel"><label for="subsystem">Subsystem:</label></td><td> | |
| 645 | 645 | @ <th1>combobox subsystem $subsystem_choices 1</th1> |
| 646 | 646 | @ </td></tr> |
| 647 | 647 | @ |
| 648 | 648 | @ <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" | |
| 651 | 651 | @ value="$<private_contact>" /> |
| 652 | 652 | @ </td></tr> |
| 653 | 653 | @ <th1>enable_output 1</th1> |
| 654 | 654 | @ |
| 655 | -@ <tr><td class="tktDspLabel">Version Found In:</td><td> | |
| 656 | -@ <input type="text" name="foundin" size="50" value="$<foundin>" /> | |
| 655 | +@ <tr><td class="tktDspLabel"><label for="foundin"> | |
| 656 | +@ Version Found In:</label></td><td> | |
| 657 | +@ <input type="text" id="foundin" name="foundin" size="50" value="$<foundin>" /> | |
| 657 | 658 | @ </td></tr> |
| 658 | 659 | @ |
| 659 | 660 | @ <tr><td colspan="2"> |
| 660 | -@ Append Remark with format | |
| 661 | +@ <label for="icomment">Append Remark</label> with <label for="mutype">format</label> | |
| 661 | 662 | @ <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" | |
| 665 | 666 | @ wrap="virtual" class="wikiedit">$<icomment></textarea> |
| 666 | 667 | @ </td></tr> |
| 667 | 668 | @ |
| 668 | 669 | @ <th1>enable_output [info exists preview]</th1> |
| 669 | 670 | @ <tr><td colspan="2"> |
| 670 | 671 |
| --- 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 Found 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 Found 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 |
+5
-14
| --- src/unversioned.c | ||
| +++ src/unversioned.c | ||
| @@ -230,67 +230,58 @@ | ||
| 230 | 230 | ** for download but which do not preserve history. Only the most recent version |
| 231 | 231 | ** of each UV-file is retained. Changes to an UV-file are permanent and cannot |
| 232 | 232 | ** be undone, so use appropriate caution with this command. |
| 233 | 233 | ** |
| 234 | 234 | ** Subcommands: |
| 235 | -** | |
| 236 | 235 | ** add FILE ... Add or update one or more unversioned files in |
| 237 | 236 | ** the local repository so that they match FILEs |
| 238 | 237 | ** on disk. Changes are not pushed to other |
| 239 | 238 | ** repositories until the next sync. |
| 240 | -** | |
| 241 | 239 | ** add FILE --as UVFILE Add or update a single file named FILE on disk |
| 242 | 240 | ** and UVFILE in the repository unversioned file |
| 243 | 241 | ** namespace. This variant of the 'add' command allows |
| 244 | 242 | ** the name to be different in the repository versus |
| 245 | 243 | ** what appears on disk, but it only allows adding |
| 246 | 244 | ** a single file at a time. |
| 247 | -** | |
| 248 | 245 | ** cat FILE ... Concatenate the content of FILEs to stdout. |
| 249 | -** | |
| 250 | 246 | ** edit FILE Bring up FILE in a text editor for modification. |
| 251 | -** | |
| 252 | 247 | ** export FILE OUTPUT Write the content of FILE into OUTPUT on disk |
| 253 | -** | |
| 254 | 248 | ** list | ls Show all unversioned files held in the local |
| 255 | -** repository. Options: | |
| 249 | +** repository. | |
| 256 | 250 | ** |
| 251 | +** Options: | |
| 257 | 252 | ** --glob PATTERN Show only files that match |
| 258 | 253 | ** --like PATTERN Show only files that match |
| 259 | 254 | ** -l Show additional details for |
| 260 | 255 | ** files that match. Implied |
| 261 | 256 | ** when 'list' is used. |
| 262 | -** | |
| 263 | 257 | ** revert ?URL? Restore the state of all unversioned files in the |
| 264 | 258 | ** local repository to match the remote repository |
| 265 | 259 | ** URL. |
| 266 | 260 | ** |
| 267 | 261 | ** Options: |
| 268 | 262 | ** -v|--verbose Extra diagnostic output |
| 269 | 263 | ** -n|--dry-run Show what would have happened |
| 270 | -** | |
| 271 | 264 | ** remove|rm|delete FILE ... |
| 272 | 265 | ** Remove unversioned files from the local repository. |
| 273 | 266 | ** Changes are not pushed to other repositories until |
| 274 | -** the next sync. Options: | |
| 267 | +** the next sync. | |
| 275 | 268 | ** |
| 269 | +** Options: | |
| 276 | 270 | ** --glob PATTERN Remove files that match |
| 277 | 271 | ** --like PATTERN Remove files that match |
| 278 | -** | |
| 279 | 272 | ** sync ?URL? Synchronize the state of all unversioned files with |
| 280 | 273 | ** the remote repository URL. The most recent version |
| 281 | 274 | ** of each file is propagated to all repositories and |
| 282 | 275 | ** all prior versions are permanently forgotten. |
| 283 | 276 | ** |
| 284 | 277 | ** Options: |
| 285 | 278 | ** -v|--verbose Extra diagnostic output |
| 286 | 279 | ** -n|--dry-run Show what would have happened |
| 287 | -** | |
| 288 | 280 | ** touch FILE ... Update the TIMESTAMP on all of the listed files |
| 289 | 281 | ** |
| 290 | 282 | ** Options: |
| 291 | -** | |
| 292 | 283 | ** --mtime TIMESTAMP Use TIMESTAMP instead of "now" for the "add", |
| 293 | 284 | ** "edit", "remove", and "touch" subcommands. |
| 294 | 285 | ** -R|--repository REPO Use FILE as the repository |
| 295 | 286 | */ |
| 296 | 287 | void unversioned_cmd(void){ |
| @@ -523,12 +514,12 @@ | ||
| 523 | 514 | |
| 524 | 515 | /* |
| 525 | 516 | ** WEBPAGE: uvlist |
| 526 | 517 | ** |
| 527 | 518 | ** Display a list of all unversioned files in the repository. |
| 528 | -** Query parameters: | |
| 529 | 519 | ** |
| 520 | +** Query parameters: | |
| 530 | 521 | ** byage=1 Order the initial display be decreasing age |
| 531 | 522 | ** showdel=0 Show deleted files |
| 532 | 523 | */ |
| 533 | 524 | void uvlist_page(void){ |
| 534 | 525 | Stmt q; |
| 535 | 526 |
| --- 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 @@ | ||
| 317 | 317 | ** |
| 318 | 318 | ** Usage: %fossil user SUBCOMMAND ... ?-R|--repository REPO? |
| 319 | 319 | ** |
| 320 | 320 | ** Run various subcommands on users of the open repository or of |
| 321 | 321 | ** the repository identified by the -R or --repository option. |
| 322 | -** | |
| 323 | 322 | ** > fossil user capabilities USERNAME ?STRING? |
| 324 | -** | |
| 325 | 323 | ** Query or set the capabilities for user USERNAME |
| 326 | -** | |
| 327 | 324 | ** > fossil user contact USERNAME ?CONTACT-INFO? |
| 328 | -** | |
| 329 | 325 | ** Query or set contact information for user USERNAME |
| 330 | -** | |
| 331 | 326 | ** > fossil user default ?USERNAME? |
| 332 | -** | |
| 333 | 327 | ** Query or set the default user. The default user is the |
| 334 | 328 | ** user for command-line interaction. |
| 335 | -** | |
| 336 | 329 | ** > fossil user list |
| 337 | 330 | ** > fossil user ls |
| 338 | -** | |
| 339 | 331 | ** List all users known to the repository |
| 340 | -** | |
| 341 | 332 | ** > fossil user new ?USERNAME? ?CONTACT-INFO? ?PASSWORD? |
| 342 | -** | |
| 343 | 333 | ** Create a new user in the repository. Users can never be |
| 344 | 334 | ** deleted. They can be denied all access but they must continue |
| 345 | 335 | ** to exist in the database. |
| 346 | -** | |
| 347 | 336 | ** > fossil user password USERNAME ?PASSWORD? |
| 348 | -** | |
| 349 | 337 | ** Change the web access password for a user. |
| 350 | 338 | */ |
| 351 | 339 | void user_cmd(void){ |
| 352 | 340 | int n; |
| 353 | 341 | db_find_and_open_repository(0, 0); |
| @@ -618,18 +606,14 @@ | ||
| 618 | 606 | ** Usage: %fossil test-prompt-password PROMPT VERIFY |
| 619 | 607 | ** |
| 620 | 608 | ** Prompts the user for a password and then prints it verbatim. |
| 621 | 609 | ** |
| 622 | 610 | ** Behavior is controlled by the VERIFY parameter: |
| 623 | -** | |
| 624 | 611 | ** 0 Just ask once. |
| 625 | -** | |
| 626 | 612 | ** 1 If the first answer is a non-empty string, ask for |
| 627 | 613 | ** verification. Repeat if the two strings do not match. |
| 628 | -** | |
| 629 | 614 | ** 2 Ask twice, repeat if the strings do not match. |
| 630 | - | |
| 631 | 615 | */ |
| 632 | 616 | void test_prompt_password_cmd(void){ |
| 633 | 617 | Blob answer; |
| 634 | 618 | int iVerify = 0; |
| 635 | 619 | if( g.argc!=4 ) usage("PROMPT VERIFY"); |
| @@ -643,11 +627,10 @@ | ||
| 643 | 627 | ** |
| 644 | 628 | ** Show login attempts, including timestamp and IP address. |
| 645 | 629 | ** Requires Admin privileges. |
| 646 | 630 | ** |
| 647 | 631 | ** Query parameters: |
| 648 | -** | |
| 649 | 632 | ** y=N 1: success only. 2: failure only. 3: both (default: 3) |
| 650 | 633 | ** n=N Number of entries to show (default: 200) |
| 651 | 634 | ** o=N Skip this many entries (default: 0) |
| 652 | 635 | */ |
| 653 | 636 | void access_log_page(void){ |
| 654 | 637 |
| --- 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 @@ | ||
| 523 | 523 | ** WEBPAGE: wiki |
| 524 | 524 | ** |
| 525 | 525 | ** Display a wiki page. Example: /wiki?name=PAGENAME |
| 526 | 526 | ** |
| 527 | 527 | ** Query parameters: |
| 528 | -** | |
| 529 | 528 | ** name=NAME Name of the wiki page to display. Required. |
| 530 | 529 | ** nsm Omit the submenu if present. (Mnemonic: No SubMenu) |
| 531 | 530 | ** p Always show just the wiki page. For special |
| 532 | 531 | ** pages for check-ins, branches, or tags, there will |
| 533 | 532 | ** be a redirect to the associated /info page unless |
| @@ -650,11 +649,11 @@ | ||
| 650 | 649 | ** Output a selection box from which the user can select the |
| 651 | 650 | ** wiki mimetype. |
| 652 | 651 | */ |
| 653 | 652 | void mimetype_option_menu(const char *zMimetype){ |
| 654 | 653 | unsigned i; |
| 655 | - @ <select name="mimetype" size="1"> | |
| 654 | + @ <select id="mimetype" name="mimetype" size="1"> | |
| 656 | 655 | for(i=0; i<count(azStyles); i+=3){ |
| 657 | 656 | if( fossil_strcmp(zMimetype,azStyles[i])==0 ){ |
| 658 | 657 | @ <option value="%s(azStyles[i])" selected>%s(azStyles[i+1])</option> |
| 659 | 658 | }else{ |
| 660 | 659 | @ <option value="%s(azStyles[i])">%s(azStyles[i+1])</option> |
| @@ -1333,13 +1332,13 @@ | ||
| 1333 | 1332 | "class='hidden'" |
| 1334 | 1333 | ">"); |
| 1335 | 1334 | CX("<div class='" |
| 1336 | 1335 | "wikiedit-options flex-container flex-row child-gap-small'>"); |
| 1337 | 1336 | CX("<div class='input-with-label'>" |
| 1338 | - "<label>Mime type</label>"); | |
| 1337 | + "<label>Mime type "); | |
| 1339 | 1338 | mimetype_option_menu("text/x-markdown"); |
| 1340 | - CX("</div>"); | |
| 1339 | + CX("</label></div>"); | |
| 1341 | 1340 | style_select_list_int("select-font-size", |
| 1342 | 1341 | "editor_font_size", "Editor font size", |
| 1343 | 1342 | NULL/*tooltip*/, |
| 1344 | 1343 | 100, |
| 1345 | 1344 | "100%", 100, "125%", 125, |
| @@ -1370,11 +1369,11 @@ | ||
| 1370 | 1369 | "</div>"); |
| 1371 | 1370 | |
| 1372 | 1371 | CX("</div>"); |
| 1373 | 1372 | CX("<div class='flex-container flex-column stretch'>"); |
| 1374 | 1373 | CX("<textarea name='content' id='wikiedit-content-editor' " |
| 1375 | - "class='wikiedit' rows='25'>"); | |
| 1374 | + "class='wikiedit' rows='25' aria-label='Content' title='Content'>"); | |
| 1376 | 1375 | CX("</textarea>"); |
| 1377 | 1376 | CX("</div>"/*textarea wrapper*/); |
| 1378 | 1377 | CX("</div>"/*#tab-file-content*/); |
| 1379 | 1378 | } |
| 1380 | 1379 | /****** Preview tab ******/ |
| @@ -1532,15 +1531,17 @@ | ||
| 1532 | 1531 | style_header("Create A New Wiki Page"); |
| 1533 | 1532 | wiki_standard_submenu(W_ALL_BUT(W_NEW)); |
| 1534 | 1533 | @ <p>Rules for wiki page names:</p> |
| 1535 | 1534 | well_formed_wiki_name_rules(); |
| 1536 | 1535 | 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>: | |
| 1540 | 1541 | mimetype_option_menu("text/x-markdown"); |
| 1541 | - @ <br /><input type="submit" value="Create" /> | |
| 1542 | + @ </label><br /><input type="submit" value="Create" /> | |
| 1542 | 1543 | @ </p></form> |
| 1543 | 1544 | if( zName[0] ){ |
| 1544 | 1545 | @ <p><span class="wikiError"> |
| 1545 | 1546 | @ "%h(zName)" is not a valid wiki page name!</span></p> |
| 1546 | 1547 | } |
| @@ -1693,16 +1694,16 @@ | ||
| 1693 | 1694 | zUser = PD("u", g.zLogin); |
| 1694 | 1695 | form_begin(0, "%R/wikiappend"); |
| 1695 | 1696 | login_insert_csrf_secret(); |
| 1696 | 1697 | @ <input type="hidden" name="name" value="%h(zPageName)" /> |
| 1697 | 1698 | @ <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 /> | |
| 1700 | 1701 | zFormat = mimetype_common_name(zMimetype); |
| 1701 | - @ Comment to append (formatted as %s(zFormat)):<br /> | |
| 1702 | + @ <label>Comment to append (formatted as %s(zFormat)):<br /> | |
| 1702 | 1703 | @ <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> | |
| 1704 | 1705 | @ <br /> |
| 1705 | 1706 | @ <input type="submit" name="preview" value="Preview Your Comment" /> |
| 1706 | 1707 | @ <input type="submit" name="submit" value="Append Your Changes" /> |
| 1707 | 1708 | @ <input type="submit" name="cancel" value="Cancel" /> |
| 1708 | 1709 | captcha_generate(0); |
| @@ -1714,11 +1715,10 @@ | ||
| 1714 | 1715 | /* |
| 1715 | 1716 | ** WEBPAGE: whistory |
| 1716 | 1717 | ** URL: /whistory?name=PAGENAME |
| 1717 | 1718 | ** |
| 1718 | 1719 | ** Additional parameters: |
| 1719 | -** | |
| 1720 | 1720 | ** showid Show RID values |
| 1721 | 1721 | ** |
| 1722 | 1722 | ** Show the complete change history for a single wiki page. |
| 1723 | 1723 | */ |
| 1724 | 1724 | void whistory_page(void){ |
| @@ -1807,11 +1807,10 @@ | ||
| 1807 | 1807 | ** WEBPAGE: wdiff |
| 1808 | 1808 | ** |
| 1809 | 1809 | ** Show the changes to a wiki page. |
| 1810 | 1810 | ** |
| 1811 | 1811 | ** Query parameters: |
| 1812 | -** | |
| 1813 | 1812 | ** id=HASH Hash prefix for the child version to be diffed. |
| 1814 | 1813 | ** rid=INTEGER RecordID for the child version |
| 1815 | 1814 | ** pid=HASH Hash prefix for the parent. |
| 1816 | 1815 | ** |
| 1817 | 1816 | ** The "id" query parameter is required. "pid" is optional. If "pid" |
| @@ -2126,14 +2125,12 @@ | ||
| 2126 | 2125 | ** COMMAND: wiki* |
| 2127 | 2126 | ** |
| 2128 | 2127 | ** Usage: %fossil wiki (export|create|commit|list) WikiName |
| 2129 | 2128 | ** |
| 2130 | 2129 | ** Run various subcommands to work with wiki entries or tech notes. |
| 2131 | -** | |
| 2132 | 2130 | ** > fossil wiki export ?OPTIONS? PAGENAME ?FILE? |
| 2133 | 2131 | ** > fossil wiki export ?OPTIONS? -t|--technote DATETIME|TECHNOTE-ID|TAG ?FILE? |
| 2134 | -** | |
| 2135 | 2132 | ** Sends the latest version of either a wiki page or of a tech |
| 2136 | 2133 | ** note to the given file or standard output. A filename of "-" |
| 2137 | 2134 | ** writes the output to standard output. The directory parts of |
| 2138 | 2135 | ** the output filename are created if needed. |
| 2139 | 2136 | ** If PAGENAME is provided, the named wiki page will be output. |
| @@ -2150,13 +2147,11 @@ | ||
| 2150 | 2147 | ** -H|--HTML Works like -h|-html but wraps the output in |
| 2151 | 2148 | ** <html><body>...</body></html>. |
| 2152 | 2149 | ** -p|--pre If -h|-H is used and the page or technote has |
| 2153 | 2150 | ** the text/plain mimetype, its HTML-escaped output |
| 2154 | 2151 | ** will be wrapped in <pre>...</pre>. |
| 2155 | -** | |
| 2156 | 2152 | ** > fossil wiki (create|commit) (PAGENAME | TECHNOTE-COMMENT) ?FILE? ?OPTIONS? |
| 2157 | -** | |
| 2158 | 2153 | ** Create a new or commit changes to an existing wiki page or |
| 2159 | 2154 | ** technote from FILE or from standard input. PAGENAME is the |
| 2160 | 2155 | ** name of the wiki entry. TECHNOTE-COMMENT is the timeline comment of |
| 2161 | 2156 | ** the technote. |
| 2162 | 2157 | ** |
| @@ -2182,14 +2177,12 @@ | ||
| 2182 | 2177 | ** updated by its technote id, which is |
| 2183 | 2178 | ** its UUID. |
| 2184 | 2179 | ** --technote-tags TAGS The set of tags for a technote. |
| 2185 | 2180 | ** --technote-bgcolor COLOR The color used for the technote |
| 2186 | 2181 | ** on the timeline. |
| 2187 | -** | |
| 2188 | 2182 | ** > fossil wiki list ?OPTIONS? |
| 2189 | 2183 | ** > fossil wiki ls ?OPTIONS? |
| 2190 | -** | |
| 2191 | 2184 | ** Lists all wiki entries, one per line, ordered |
| 2192 | 2185 | ** case-insensitively by name. Wiki pages associated with |
| 2193 | 2186 | ** check-ins and branches are NOT shown, unless -a is given. |
| 2194 | 2187 | ** |
| 2195 | 2188 | ** Options: |
| @@ -2204,11 +2197,10 @@ | ||
| 2204 | 2197 | ** -s|--show-technote-ids The id of the tech note will be listed |
| 2205 | 2198 | ** along side the timestamp. The tech note |
| 2206 | 2199 | ** id will be the first word on each line. |
| 2207 | 2200 | ** This option only applies if the |
| 2208 | 2201 | ** --technote option is also specified. |
| 2209 | -** | |
| 2210 | 2202 | ** DATETIME may be "now" or "YYYY-MM-DDTHH:MM:SS.SSS". If in |
| 2211 | 2203 | ** year-month-day form, it may be truncated, the "T" may be replaced by |
| 2212 | 2204 | ** a space, and it may also name a timezone offset from UTC as "-HH:MM" |
| 2213 | 2205 | ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z" |
| 2214 | 2206 | ** means UTC. |
| 2215 | 2207 |
| --- 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 "); |
| 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 |
+1
-2
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1896,12 +1896,12 @@ | ||
| 1896 | 1896 | ** COMMAND: test-markdown-render |
| 1897 | 1897 | ** |
| 1898 | 1898 | ** Usage: %fossil test-markdown-render FILE ... |
| 1899 | 1899 | ** |
| 1900 | 1900 | ** Render markdown in FILE as HTML on stdout. |
| 1901 | -** Options: | |
| 1902 | 1901 | ** |
| 1902 | +** Options: | |
| 1903 | 1903 | ** --safe Restrict the output to use only "safe" HTML |
| 1904 | 1904 | ** --lint-footnotes Print stats for footnotes-related issues |
| 1905 | 1905 | */ |
| 1906 | 1906 | void test_markdown_render(void){ |
| 1907 | 1907 | Blob in, out; |
| @@ -2769,11 +2769,10 @@ | ||
| 2769 | 2769 | ** This setting controls whether or not unsafe HTML elements |
| 2770 | 2770 | ** (such as SCRIPT or STYLE tags) are allowed in Markdown-formatted |
| 2771 | 2771 | ** documents. Unsafe HTML is disabled by default. If this setting |
| 2772 | 2772 | ** exists and is a string, then letters in that string can enable |
| 2773 | 2773 | ** unsafe HTML in various contexts: |
| 2774 | -** | |
| 2775 | 2774 | ** - b Unsafe HTML allowed in embedded documentation |
| 2776 | 2775 | ** - f Unsafe HTML allowed in forum posts |
| 2777 | 2776 | ** - t Unsafe HTML allowed in tickets |
| 2778 | 2777 | ** - w Unsafe HTML allowed on wiki pages |
| 2779 | 2778 | */ |
| 2780 | 2779 |
| --- 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 @@ | ||
| 1872 | 1872 | ** as necessary to generate an appropriate XFERFILE test case. Then run: |
| 1873 | 1873 | ** |
| 1874 | 1874 | ** fossil test-xfer xferfile.txt |
| 1875 | 1875 | ** |
| 1876 | 1876 | ** Options: |
| 1877 | -** | |
| 1878 | 1877 | ** --host HOSTNAME Supply a server hostname used to populate |
| 1879 | 1878 | ** g.zBaseURL and similar. |
| 1880 | 1879 | */ |
| 1881 | 1880 | void cmd_test_xfer(void){ |
| 1882 | 1881 | const char *zHost; |
| 1883 | 1882 |
| --- 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 @@ | ||
| 136 | 136 | cgi_redirect("xfersetup"); |
| 137 | 137 | } |
| 138 | 138 | } |
| 139 | 139 | @ <form action="%R/%s(g.zPath)" method="post"><div> |
| 140 | 140 | 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> | |
| 143 | 143 | @ <p> |
| 144 | 144 | @ <input type="submit" name="submit" value="Apply Changes" /> |
| 145 | 145 | @ <input type="submit" name="clear" value="Revert To Default" /> |
| 146 | 146 | @ <input type="submit" name="setup" value="Cancel" /> |
| 147 | 147 | @ </p> |
| 148 | 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>%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 @@ | ||
| 870 | 870 | ** query parameter. Return the archive as the HTTP reply content. |
| 871 | 871 | ** |
| 872 | 872 | ** If the NAME contains one "/" then the part before the "/" is taken |
| 873 | 873 | ** as the TAG and the part after the "/" becomes the true name. Hence, |
| 874 | 874 | ** the following URLs are all equivalent: |
| 875 | -** | |
| 876 | 875 | ** /sqlar/508c42a6398f8/download.sqlar |
| 877 | 876 | ** /sqlar?r=508c42a6398f8&name=download.sqlar |
| 878 | 877 | ** /sqlar/download.sqlar?r=508c42a6398f8 |
| 879 | 878 | ** /sqlar?name=508c42a6398f8/download.sqlar |
| 880 | 879 | ** |
| 881 | 880 | ** Query parameters: |
| 882 | -** | |
| 883 | 881 | ** name=NAME The base name of the output file. The default |
| 884 | 882 | ** value is a configuration parameter in the project |
| 885 | 883 | ** settings. A prefix of the name, omitting the |
| 886 | 884 | ** extension, is used as the top-most directory name. |
| 887 | -** | |
| 888 | 885 | ** r=TAG The check-in that is turned into a ZIP archive. |
| 889 | 886 | ** Defaults to "trunk". This query parameter used to |
| 890 | 887 | ** be called "uuid" and the older "uuid" name is still |
| 891 | 888 | ** accepted for backwards compatibility. If this |
| 892 | 889 | ** query parameter is omitted, the latest "trunk" |
| 893 | 890 | ** check-in is used. |
| 894 | -** | |
| 895 | 891 | ** in=PATTERN Only include files that match the comma-separate |
| 896 | 892 | ** list of GLOB patterns in PATTERN, as with ex= |
| 897 | -** | |
| 898 | 893 | ** ex=PATTERN Omit any file that match PATTERN. PATTERN is a |
| 899 | 894 | ** comma-separated list of GLOB patterns, where each |
| 900 | 895 | ** pattern can optionally be quoted using ".." or '..'. |
| 901 | 896 | ** Any file matching both ex= and in= is excluded. |
| 902 | 897 | */ |
| 903 | 898 |
| --- 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 @@ | ||
| 103 | 103 | In most cases, it is best to leave the Fossil-generated HTML Header |
| 104 | 104 | alone. (One exception is when the administrator needs to include links |
| 105 | 105 | to additional CSS files.) The configurable part of the skin begins |
| 106 | 106 | with the Content Header section which should follow this template: |
| 107 | 107 | |
| 108 | - <div class="header"> | |
| 108 | + <header class="header"> | |
| 109 | 109 | ... top banner and menu bar ... |
| 110 | 110 | </div> |
| 111 | 111 | |
| 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 | |
| 113 | 113 | the Content Header text of the skin. In other words, you, the |
| 114 | 114 | administrator, need to supply that text as part of your skin |
| 115 | 115 | customization. |
| 116 | 116 | |
| 117 | 117 | The Fossil-generated Content section immediately follows the Content Header. |
| @@ -122,11 +122,11 @@ | ||
| 122 | 122 | </div> |
| 123 | 123 | |
| 124 | 124 | After the Content is the custom Content Footer section which should |
| 125 | 125 | follow this template: |
| 126 | 126 | |
| 127 | - <div class="footer"> | |
| 127 | + <footer class="footer"> | |
| 128 | 128 | ... skin-specific stuff here ... |
| 129 | 129 | </div> |
| 130 | 130 | |
| 131 | 131 | As with the Content Header, the template elements of the Content Footer |
| 132 | 132 | should appear exactly as they are shown. |
| @@ -140,11 +140,11 @@ | ||
| 140 | 140 | ## <a id="mainmenu"></a>Changing the Main Menu Contents |
| 141 | 141 | |
| 142 | 142 | As of Fossil 2.15, the actual text content of the skin’s main menu is no |
| 143 | 143 | longer part of the skin proper if you’re using one of the stock skins. |
| 144 | 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 | |
| 145 | +`<nav class="mainmenu">` element whose contents are set by a short | |
| 146 | 146 | [TH1](./th1.md) script from the contents of the **Main Menu** section of |
| 147 | 147 | the Setup → Configuration screen. |
| 148 | 148 | |
| 149 | 149 | This feature allows the main menu contents to stay the same across |
| 150 | 150 | different skins, so you no longer have to reapply menu customizations |
| @@ -334,16 +334,16 @@ | ||
| 334 | 334 | the value of the TH1 variable NAME. |
| 335 | 335 | |
| 336 | 336 | For example, first few lines of a typical Content Header will look |
| 337 | 337 | like this: |
| 338 | 338 | |
| 339 | - <div class="header"> | |
| 339 | + <header class="header"> | |
| 340 | 340 | <div class="title"><h1>$<project_name></h1>$<title>/div> |
| 341 | 341 | |
| 342 | 342 | After variables are substituted by TH1, that will look more like this: |
| 343 | 343 | |
| 344 | - <div class="header"> | |
| 344 | + <header class="header"> | |
| 345 | 345 | <div class="title"><h1>Project Name</h1>Page Title</div> |
| 346 | 346 | |
| 347 | 347 | As you can see, two TH1 variable substitutions were done. |
| 348 | 348 | |
| 349 | 349 | The same TH1 interpreter is used for both the header and the footer |
| @@ -375,20 +375,20 @@ | ||
| 375 | 375 | |
| 376 | 376 | The hbmenu.js script requires |
| 377 | 377 | the following `<div>` element somewhere in your header, in which to build |
| 378 | 378 | the hamburger menu. |
| 379 | 379 | |
| 380 | - <div id='hbdrop'></div> | |
| 380 | + <nav id='hbdrop'></nav> | |
| 381 | 381 | |
| 382 | 382 | Out of the box, the contents of the panel is populated with the [Site |
| 383 | 383 | Map](/sitemap), but only if the panel does not already contain any HTML |
| 384 | 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 | |
| 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 | 387 | following template: |
| 388 | 388 | |
| 389 | - <div id="hbdrop" data-anim-ms="400"> | |
| 389 | + <nav id="hbdrop" data-anim-ms="400"> | |
| 390 | 390 | <ul class="columns" style="column-width: 20em; column-count: auto"> |
| 391 | 391 | <!-- NEW GROUP WITH HEADING LINK --> |
| 392 | 392 | <li> |
| 393 | 393 | <a href="$home$index_page">Link: Home</a> |
| 394 | 394 | <ul> |
| @@ -404,11 +404,11 @@ | ||
| 404 | 404 | <li><a href="$home/doc/trunk/www/th1.md">Link: TH1 Scripts</a></li> |
| 405 | 405 | </ul> |
| 406 | 406 | </li> |
| 407 | 407 | <!-- NEXT GROUP GOES HERE --> |
| 408 | 408 | </ul> |
| 409 | - </div> | |
| 409 | + </nav> | |
| 410 | 410 | |
| 411 | 411 | The custom `data-anim-ms` attribute can be added to the panel element to direct |
| 412 | 412 | the Javascript logic to override the default menu animation duration of 400 ms. |
| 413 | 413 | A faster animation duration of 80-200 ms may be preferred for smaller menus. The |
| 414 | 414 | animation is disabled by setting the attribute to `"0"`. |
| 415 | 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 | <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 |