diff options
| author | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-09-04 09:05:24 +0200 |
| commit | 4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch) | |
| tree | c296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /skins | |
| download | relic-master.tar.gz | |
Diffstat (limited to 'skins')
98 files changed, 8637 insertions, 0 deletions
diff --git a/skins/README.md b/skins/README.md new file mode 100644 index 0000000..45c063e --- /dev/null +++ b/skins/README.md @@ -0,0 +1,53 @@ +Built-in Skins +============== + +Each subdirectory under this folder describes a built-in "skin". +There are five key files in each subdirectory: + + * `css.txt` → The CSS for the skin + * `details.txt` → Skin-specific settings + * `footer.txt` → Text of the Content Footer for each page + * `header.txt` → Text of the Content Header for each page + * `js.txt` → Javascript included in the Content Footer + +To improve an existing built-in skin, simply edit the appropriate +files and recompile. + +To add a new skin: + + 1. Create a new subdirectory under skins/. (The new directory is + called "skins/newskin" below but you should use a new original + name, of course.) + + 2. Add files skins/newskin/css.txt, skins/newskin/details.txt, + skins/newskin/footer.txt, skins/newskin/header.txt, and + skins/newskin/js.txt. Be sure to "fossil add" these files. + + 3. Go to the tools/ directory and rerun "tclsh makemake.tcl". This + step rebuilds the various makefiles so that they have dependencies + on the skin files you just installed. + + 4. Edit the BuiltinSkin[] array near the top of the src/skins.c source + file so that it describes and references the "newskin" skin. + + 5. Type "make" to rebuild. + +See the [custom skin documentation](/doc/$CURRENT/www/customskin.md) for +more information. + +Development Hints +----------------- + +One way to develop a new skin is to copy the baseline files (css.txt, +details.txt, footer.txt, header.txt, and js.txt) into a working +directory $WORKDIR then launch Fossil with a command-line option +"--skin $WORKDIR". Example: + + cp -r skins/default newskin + fossil ui --skin ./newskin + +When the argument to --skin contains one or more '/' characters, the +appropriate skin files are read from disk from the directory specified. +So after launching fossil as shown above, you can edit the newskin/*.txt +files using your favorite text editor, then press Reload on your browser +to see immediate results. diff --git a/skins/ardoise/README.md b/skins/ardoise/README.md new file mode 100644 index 0000000..be111d4 --- /dev/null +++ b/skins/ardoise/README.md @@ -0,0 +1,15 @@ +## Ardoise theme + +A black and grey skin ("Ardoise" is the french word for slate). + +The skin includes custom icons for the file browser and the WYSIWYG editor, which are embedded directly in the css as base64 blobs. For convenience, they are also provided as standalone files in the images subdirectory. + +This skin was contributed by Antoine Chavasse. + +This theme is loosely based upon, and still contains some elements from the Blitz theme by James Moger. + +This theme embeds & uses a modified copy of [Normalize 3.0.2](https://necolas.github.io/normalize.css/) which is distributed under an [MIT license](https://github.com/necolas/normalize.css/blob/master/LICENSE.md). + +This theme embeds & uses a modified copy of [Skeleton](http://getskeleton.com) which is distributed under an [MIT license](https://github.com/dhg/Skeleton/blob/master/LICENSE.md). + +The sass version of Skeleton used in this project was made by [Seth Coelen](https://github.com/whatsnewsaes). diff --git a/skins/ardoise/css.txt b/skins/ardoise/css.txt new file mode 100644 index 0000000..1299dad --- /dev/null +++ b/skins/ardoise/css.txt @@ -0,0 +1,1426 @@ +@charset "UTF-8"; +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +hr, +input[type=search] { + box-sizing: content-box +} +img, +legend, +table.login_out, +table.login_out td, +tr.timelineCurrent, +tr.timelineCurrent td.timelineTableCell, +tr.timelineSelected { + background-color: initial; + border: 0 +} +ol, +p, +ul { + margin-top: 0 +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +pre > code, +section, +summary { + display: block +} +ul.browser li.dir, +ul.browser li.file { + background-position: 0 center; + padding-left: 22px; + padding-top: 2px +} +.container, +.filetree a, +.filetree li, +.filetree ul ul, +.mainmenu ul, +sub, +sup { + position: relative +} +.filetree .dir > div.filetreeline > a, +ul.browser li.dir > a { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDUuMjkyIDQuMjMzIj48cGF0aCBkPSJNLjc5NC41M3YzLjE3NGgzLjcwNFYxLjMyM0gyLjkxVi41Mjl6IiBmaWxsPSIjMWQyMDIxIiBzdHJva2U9IiNmZjgwMDAiIHN0cm9rZS13aWR0aD0iLjUyOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+) +} +dfn, +span.modpending { + font-style: italic +} +html { + font-family: sans-serif; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline +} +audio:not([controls]) { + display: none; + height: 0 +} +.filetree li.last>ul:before, +.filetree ul.collapsed, +[hidden], +template { + display: none +} +a { + background-color: transparent; + color: #ff8000; + text-decoration: unset +} +a:active, +a:hover, +abbr[title] { + border-bottom: 1px dotted +} +b, +optgroup, +strong, +td.usetupEditLabel { + font-weight: 700 +} +mark { + background: #ff0 +} +small { + font-size: 80% +} +sub, +sup { + font-size: 75%; + line-height: 0; + vertical-align: baseline +} +sup { + top: -.5em +} +sub { + bottom: -.25em +} +svg:not(:root) { + overflow: hidden +} +figure { + margin: 1em 40px +} +hr { + height: 0; + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #626262 +} +pre { + overflow: auto +} +code, +kbd, +pre, +samp { + font-family: monospace,monospace; + font-size: 1em +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0 +} +body, +h5 { + line-height: 1.5 +} +button { + overflow: visible +} +button, +select { + text-transform: none +} +button, +input[type=button], +input[type=reset], +input[type=submit]{ + cursor: pointer +} +button:disabled, +input:disabled { + cursor: default +} +input { + line-height: normal +} +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0; + display: inline +} +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + height: auto +} +input[type=search]::-webkit-search-cancel-button, +fieldset { + border: 1px solid silver; + margin: 0 2px +} +legend { + padding: 0 +} +table { + border-spacing: 0; + width: 100% +} +html { + font-size: 62.5% +} +body { + margin: 0; + font-size: 1.4em; + font-weight: 400; + font-family: HelveticaNeue,"Helvetica Neue",Helvetica,Arial,sans-serif; + color: #ddd; + background-color: #303536 +} +a:hover { + color: #e67300 +} +.full-width, +.u-full-width { + width: 100%; + box-sizing: border-box +} +.max-full-width, +.u-max-full-width { + max-width: 100%; + box-sizing: border-box +} +.pull-right, +.u-pull-right { + float: right +} +.pull-left, +.u-pull-left { + float: left +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1rem 0; + font-weight: 700 +} +h1 { + font-size: 3rem; + line-height: 1.2 +} +h2 { + font-size: 2.6rem; + line-height: 1.25 +} +h3 { + font-size: 2.4rem; + line-height: 1.3 +} +h4 { + font-size: 2rem; + line-height: 1.35 +} +h5 { + font-size: 1.6rem +} +h6 { + font-size: 1.4rem; + line-height: 1.6 +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-size: .75em; + font-weight: 400; + color: #ccc +} +p { + display: flow-root +} +.container { + width: 100%; + max-width: 1200px; + margin: 0 auto; + box-sizing: border-box +} +.column, +.columns { + width: 100%; + /*float: left; can break README.md in /dir view*/ + box-sizing: border-box +} +@media (min-width:400px) { + .container { + width: 95%; + padding: 0 + } +} +.button, +button, +input[type=button], +input[type=reset], +input[type=submit] { + padding: 0 30px; + font-size: 11px; + line-height: 32px; + letter-spacing: .1rem; + text-transform: uppercase; + height: 32px; + font-weight: 600; + display: inline-block; + box-sizing: border-box; + text-decoration: none; + text-align: center; + white-space: nowrap; + cursor: pointer +} +input:disabled { + color: rgb(70,70,70); + background-color: rgb(153,153,153); +} + +@media (min-width:550px) { + .container { + width: 95% + } + .column, + .columns { + margin-left: 4% + } + .column:first-child, + .columns:first-child { + margin-left: 0 + } + .one.column, + .one.columns { + width: 4.66667% + } + .two.columns { + width: 13.33333% + } + .three.columns { + width: 22% + } + .four.columns, + .one-third.column { + width: 30.66667% + } + .five.columns { + width: 39.33333% + } + .one-half.column, + .six.columns { + width: 48% + } + .seven.columns { + width: 56.66667% + } + .eight.columns, + .two-thirds.column { + width: 65.33333% + } + .nine.columns { + width: 74% + } + .ten.columns { + width: 82.66667% + } + .eleven.columns { + width: 91.33333% + } + .twelve.columns { + width: 100%; + margin-left: 0 + } + .offset-by-one.column, + .offset-by-one.columns { + margin-left: 8.66667% + } + .offset-by-two.column, + .offset-by-two.columns { + margin-left: 17.33333% + } + .offset-by-three.column, + .offset-by-three.columns { + margin-left: 26% + } + .offset-by-four.column, + .offset-by-four.columns, + .offset-by-one-third.column, + .offset-by-one-third.columns { + margin-left: 34.66667% + } + .offset-by-five.column, + .offset-by-five.columns { + margin-left: 43.33333% + } + .offset-by-one-half.column, + .offset-by-six.column, + .offset-by-six.columns { + margin-left: 52% + } + .offset-by-seven.column, + .offset-by-seven.columns { + margin-left: 60.66667% + } + .offset-by-eight.column, + .offset-by-eight.columns, + .offset-by-two-thirds.column, + .offset-by-two-thirds.columns { + margin-left: 69.33333% + } + .offset-by-nine.column, + .offset-by-nine.columns { + margin-left: 78% + } + .offset-by-ten.column, + .offset-by-ten.columns { + margin-left: 86.66667% + } + .offset-by-eleven.column, + .offset-by-eleven.columns { + margin-left: 95.33333% + } +} +.button, +button, +input[type=button], +input[type=reset], +input[type=submit] { + color: #ddd; + background-color: #446979; + border: 0; + border-radius: 5px +} +button:hover, +input[type=button]:hover, +input[type=reset]:hover, +input[type=submit]:hover { + color: #446979; + background-color: #ddd; + outline: 0 +} +.button:focus, +button:focus, +input[type=button]:focus, +input[type=reset]:focus, +input[type=submit]:focus { + color: #333; + border-color: #888; + outline: 0 +} + +button:disabled, +input[type=button]:disabled, +input[type=reset]:disabled, +input[type=submit]:disabled{ + color: #ddd; + background-color: #7f7f7f; + opacity: 0.8; +} + +input[type=email], +input[type=number], +input[type=password], +input[type=search], +input[type=tel], +input[type=text], +input[type=url] { + box-shadow: none; + box-sizing: border-box; +} +input[type=email], +input[type=number], +input[type=password], +input[type=search], +input[type=tel], +input[type=text], +input[type=url], +select, +textarea { + height: 32px; + padding: 6px 10px; + color: #bbb; + background-color: #303536; + border: 0; + border-radius: 5px; + box-shadow: none; + box-sizing: border-box +} +textarea, select { + height: initial; +} +input[type=email]:hover, +input[type=number]:hover, +input[type=password]:hover, +input[type=search]:hover, +input[type=tel]:hover, +input[type=text]:hover, +input[type=url]:hover, +select:hover, +textarea:hover { + color: #eef8ff; + background-color: #555 +} +textarea { + overflow: auto; + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px +} +input[type=email]:focus, +input[type=number]:focus, +input[type=password]:focus, +input[type=search]:focus, +input[type=tel]:focus, +input[type=text]:focus, +input[type=url]:focus, +select:focus, +textarea:focus { + border: 1px solid #ff8000; + outline: 0 +} +label, +legend { + margin-bottom: .5rem; + font-weight: 600 +} +fieldset { + padding: 0; + border-width: 0 +} +label > .label-body { + display: inline-block; + margin-left: .5rem; + font-weight: 400 +} +ul { + list-style: square +} +ol { + list-style: decimal +} +ol, +ul { + padding-left: 3rem +} +li { + margin-bottom: 0 +} +ol ol, +ol ul, +ul ol, +ul ul { + margin: 1rem 0 1rem 2rem +} +code { + padding: .2rem .5rem; + margin: 0 .2rem; + font-size: 90%; + white-space: nowrap; + background: #000; + border: 2px solid #bbb; + border-radius: 5px +} +table.numbered-lines td.file-content > pre { + margin-top: -2px/*offset CODE tag border*/; +} +table.numbered-lines { + font-family: monospace; +} +table.numbered-lines pre { + font-family: inherit; +} +pre > code { + padding: 1rem 1.5rem; + white-space: pre +} +td, +th { + padding: 1px 5px; + text-align: left +} +td:first-child, +th:first-child { + padding-left: 0 +} +.button, +button { + margin-bottom: 1rem +} +fieldset, +input, +select, +textarea { + margin-bottom: .5rem +} +blockquote, +dl, +figure, +ol, +p, +pre, +table, +ul { + margin-bottom: 1.5rem +} +header { + color: #888; + font-weight: 400; + padding-top: 10px; + border-width: 0 +} +.filetree li > ul:before, +.filetree li li:before { + border-left: 2px solid #888; + content: ''; + position: absolute +} +.filetree>ul, +header .logo, +header .logo h1 { + display: inline-block +} +header .login { + padding-top: 2px; + text-align: right +} +header .login .button { + margin: 0 +} +header h1 { + margin: 0; + color: #888; + display: inline-block +} +header .title h1 { + padding-bottom: 10px +} +header .login, +header h1 small, +header h2 small { + color: #777 +} +.middle { + background-color: #1d2021; + padding-bottom: 20px; + max-width: 100%; + box-sizing: border-box +} +.content { + padding-top: 8px; + padding-left: 8px; + padding-right: 8px +} +#hbdrop a, +.content a { + color: #8cf +} +#hbdrop a:hover, +.content a:hover, +.submenu a:hover, +.submenu label:hover { + color: #fff +} +.artifact_content hr:first-of-type { + margin: 0; + border: 0 +} +.artifact_content blockquote:first-of-type { + padding: 1px 20px; + margin: 0 0 20px; + background: #000; + border-radius: 5px +} +footer { + padding: 10px 0 60px; + border-top: 0; + color: #888 +} +footer a { + color: #527b8f; + background-repeat: no-repeat; + background-position: center top 10px +} +footer a:hover { + color: #eef8ff +} +.mainmenu { + background-color: #161819; + border-top-right-radius: 15px; + border-top-left-radius: 15px; + clear: both + z-index: 21; +} +.mainmenu ul { + list-style: none; + border-top: 1px solid transparent; + padding: 0 +} +.mainmenu li { + outline: 0; + float: left; + margin: 0 +} +.mainmenu li.active { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNyIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgNC40OTggMi4zODEiPjxwYXRoIGQ9Ik00LjIzMyAyLjM4MUguMjY1bC45OTgtMS4wNTguOTg2LTEuMDU4Ljk5OCAxLjA2MnoiIGZpbGw9IiNmZjgwMDAiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-position: center bottom +} +.mainmenu li a { + color: #66a8c7; + padding: 10px 15px +} +.mainmenu li.active a { + text-shadow: 0 0 1px #b1d2e2 +} +.mainmenu li:hover { + background-color: #ff8000; + border-radius: 5px +} +.mainmenu li:hover a { + color: #000 +} +nav#hbdrop { + background-color: #161819; + border-radius: 15px; + display: none; + width: 100%; + position: absolute; + z-index: 20; +} +.submenu { + padding: 4px 0; + background-color: #000; + border-bottom-right-radius: 15px; + border-bottom-left-radius: 15px; + line-height: 2.5 +} +.section, +.sortable thead, +.userTable thead { + background-color: #404040 +} +.submenu input, +.submenu select { + margin: 0 0 0 5px +} +.submenu a, +.submenu label { + display: inline; + font-weight: 400; + color: #5e9ab6; + padding: 25px 15px; + text-decoration: none; + border-radius: 5px +} +.section { + font-weight: 700; + padding: 9px 10px 10px; + margin: 10px 0; + border-radius: 5px +} +.sectionmenu { + border-top: 0; + margin-top: -10px; + margin-bottom: 10px; + padding: 5px; + text-align: center; + background: #000; + border-bottom-right-radius: 15px; + border-bottom-left-radius: 15px +} +.sectionmenu a { + display: inline-block; + margin-top: 5px; + margin-right: 1em +} +ul.browser { + list-style: none; + line-height: 1.6 +} +ul.browser li.dir { + background-repeat: no-repeat +} +.filetree a, +ul.browser li.file > a{ + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDUuMjkyIDQuMjMzIj48cGF0aCBkPSJNMS4zMjMuMjY1djMuNzA0aDIuNjQ2VjEuMzIzTDIuOTEuMjY1eiIgZmlsbD0iIzFkMjAyMSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48cGF0aCBkPSJNMi42NDYuMjY1aC4yNjR2MS4zMjNoMS4wNiIgZmlsbD0iIzFkMjAyMSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=); + background-repeat: no-repeat +} +div.filetreeline:hover *, +ul.browser li.dir:hover, +ul.browser li.dir:hover *, +ul.browser li.file:hover, +ul.browser li.file:hover * { + background-color: #333 +} +td.browser, +td.tktDescLabel { + vertical-align: top +} +td.tktTlOpen { + color: #ffa0a0; +} +td.tktTlClosed { + color: #555; +} +div.filetreeline { + display: table; + width: 100%; + white-space: nowrap +} +.filetree { + margin: 1em 0; + line-height: 1.6 +} +.filetree ul { + margin: 0; + padding: 0; + list-style: none +} +.filetree ul ul { + margin: 0 0 0 21px +} +.filetree li { + margin: 0; + padding: 0 +} +.filetree li li:before { + top: -.8em; + left: -14px; + width: 16px; + height: 1.5em; + border-bottom: 2px solid #888 +} +.filetree li > ul:before { + top: -1.5em; + bottom: 0; + left: -35px +} +.filetree a { + z-index: 1; + display: table-cell; + min-height: 16px; + padding-left: 22px; + background-position: center left +} +div.filetreeage { + display: table-cell; + padding-left: 10em; + text-align: right +} +.fileage tr:first-child { + background-color: #404040!important +} +.fileage tr:nth-child(odd), +.sortable tbody tr:nth-child(even), +.userTable tbody tr:nth-child(even) { + background-color: #2c2c2c +} +.fileage tr:nth-child(even):hover, +.fileage tr:nth-child(odd):hover, +.sortable thead:hover { + background-color: #555 +} +.fileage tr:nth-child(even), +.sortable tbody tr:nth-child(odd), +.userTable tbody tr:nth-child(odd) { + background-color: #181818 +} +.fileage td, +.sortable td, +.userTable td { + vertical-align: top; + text-align: left; + padding-top: 3px; + border-left: 1px solid #333 +} +.fileage td:first-child, +.sortable td:first-child, +.userTable td:first-child { + border-left: transparent +} +table.label-value th { + vertical-align: middle +} +.brlist table td { + padding: 5px +} +.sortable, +.userTable { + border-color: transparent; + width: 75% +} +td.timelineTime, +tr.timelineBottom td { + border-bottom: 0 +} +.sortable tbody tr:nth-child(even):hover, +.sortable tbody tr:nth-child(odd):hover, +.userTable tbody tr:nth-child(even):hover, +.userTable tbody tr:nth-child(odd):hover { + background-color: #444 +} +div.timelineDate { + font-weight: 700; + white-space: nowrap +} +td.timelineTime { + vertical-align: top; + text-align: right; + white-space: nowrap; + padding-top: .75em +} +td.timelineGraph { + width: 20px; + text-align: left; + vertical-align: top; + border-bottom: 0 +} +a.timelineHistLink { + text-transform: lowercase +} +span.timelineComment { + padding: 0 5px +} +.report th, +span.timelineEllipsis { + cursor: pointer +} +table.timelineTable { + border-spacing: 2px 3px +} +.timelineModernCell, .timelineColumnarCell, .timelineDetailCell, .timelineCompactCell, .timelineVerboseCell { + vertical-align: top; + text-align: left; + padding: .75em; + border-radius: 5px; + background: #000 +} +.timelineSelected > .timelineColumnarCell, +.timelineSelected > .timelineCompactCell, +.timelineSelected > .timelineDetailCell, +.timelineSelected > .timelineModernCell, +.timelineSelected > .timelineVerboseCell { + padding: .75em; + border-radius: 5px; + border: solid #ff8000; + vertical-align: top; + text-align: left; + background: #442800 +} +span.timelineSelected { + border-radius: 5px; + border: solid #ff8000; + vertical-align: top; + text-align: left; + background-color: #442800; +} +.timelineSelected { + box-shadow: none; +} +.timelineSecondary {} +.timelineSecondary > .timelineColumnarCell, +.timelineSecondary > .timelineCompactCell, +.timelineSecondary > .timelineDetailCell, +.timelineSecondary > .timelineModernCell, +.timelineSecondary > .timelineVerboseCell { + padding: .75em; + border-radius: 5px; + border: solid #0080ff; + vertical-align: top; + text-align: left; + background: #002844 +} +span.timelineSecondary { + border-radius: 5px; + border: solid #0080ff; + vertical-align: top; + text-align: left; + background: #002844 +} +.timelineCurrent > .timelineColumnarCell, +.timelineCurrent > .timelineCompactCell, +.timelineCurrent > .timelineDetailCell, +.timelineCurrent > .timelineModernCell, +.timelineCurrent > .timelineVerboseCell { + vertical-align: top; + text-align: left; + padding: .75em; + border-radius: 5px; + border: dashed #ff8000 +} +.timelineModernCell[id], .timelineColumnarCell[id], .timelineDetailCell[id] { + background-color: #000 +} +.tl-canvas { + margin: 0 6px 0 10px +} +.tl-rail { + width: 18px +} +.tl-mergeoffset { + width: 2px +} +.tl-nodemark { + margin-top: .8em +} +.tl-node { + width: 10px; + height: 10px; + border: 2px solid #bbb; + background: #111; + cursor: pointer +} +.tl-node.leaf:after { + content: ''; + position: absolute; + top: 3px; + left: 3px; + width: 4px; + height: 4px; + background: #bbb +} +.tl-node.closed-leaf svg { + position: absolute; + top: 0px; + left: 0px; + width: 10px; + height: 10px; + color: #bbb; +} +.tl-node.sel:after { + content: ''; + position: absolute; + top: 1px; + left: 1px; + width: 8px; + height: 8px; + background: #ff8000 +} +.tl-arrow { + width: 0; + height: 0; + transform: scale(.999); + border: 0 solid transparent +} +.tl-arrow.u { + margin-top: -1px; + border-width: 0 3px; + border-bottom: 7px solid +} +.tl-arrow.u.sm { + border-bottom: 5px solid #bbb +} +.tl-line { + background: #bbb; + width: 2px +} +.tl-arrow.merge { + height: 1px; + border-width: 2px 0 +} +.tl-arrow.merge.l { + border-right: 3px solid #bbb +} +.tl-arrow.merge.r { + border-left: 3px solid #bbb +} +.tl-line.merge { + width: 1px +} +.tl-arrow.cherrypick { + height: 1px; + border-width: 2px 0; +} +.tl-arrow.cherrypick.l { + border-right: 3px solid #bbb; +} +.tl-arrow.cherrypick.r { + border-left: 3px solid #bbb; +} +.tl-line.cherrypick.h { + width: 0px; + border-top: 1px dashed #bbb; + border-left: 0px dashed #bbb; + background: rgba(255,255,255,0); +} +.tl-line.cherrypick.v { + width: 0px; + border-top: 0px dashed #bbb; + border-left: 1px dashed #bbb; + background: rgba(255,255,255,0); +} + +.intLink[title="Add indentation"], +.intLink[title="Center align"], +.intLink[title="Dotted list"], +.intLink[title="Left align"], +.intLink[title="Numbered list"], +.intLink[title="Remove formatting"], +.intLink[title="Right align"], +.intLink[title=Bold], +.intLink[title=Hyperlink], +.intLink[title=Italic], +.intLink[title=Quote], +.intLink[title=Redo], +.intLink[title=Underline], +.intLink[title=Undo] { + width: 0; + height: 0; + padding: 11px +} +.tl-arrow.warp { + margin-left: 1px; + border-width: 3px 0; + border-left: 7px solid #600000 +} +.tl-line.warp { + background: #600000 +} +table.login_out .login_out_label { + font-weight: 700; + text-align: right +} +table.diff { + width: 100%; + overflow: auto; + font-size: 1rem; + background: #000; + border-radius: 5px; +} +table.diff pre { + font-size: 1.15rem; + scrollbar-color: black #999; +} +table.udiff pre { + padding: 0 0 +} +td.difftxt { + width: 52rem; +} +td.diffln ins { + background-color: #559855; + color: #000; + text-decoration: none; +} +td.diffln del { + background-color: #c55; + color: #000; + text-decoration: none; +} +td.difftxt del { + background-color: inherit; + text-decoration: none; +} +td.difftxt del > del { + background-color: #c55; + color: #000; + text-decoration: none; +} +td.difftxt ins { + background-color: inherit; + text-decoration: none; +} +td.difftxt ins > ins { + background-color: #559855; + color: #000; + text-decoration: none; +} + +tr.diffskip.jchunk { + background-color: #404040; +} +tr.diffskip > td.chunkctrl .jcbutton { + background-color: black; +} + +table.report { + width: 100%; + cursor: auto; + margin: 0 0 1em; + color: #000 +} +table.report thead { + color: #ddd +} +table.report a { + color: #0374ca +} +.report td, +.report th { + border: 0; + font-size: .9em; + padding: 5px +} +.report thead + tbody tr:hover { + background-color: #ff8000!important +} +tbody tr:nth-child(odd) td.tktDescValue, +tbody tr:nth-child(odd) td.tktDspValue { + text-align: left; + vertical-align: top; + background: #181818; + padding: 10px +} +tbody tr:nth-child(odd) td.tktDescLabel, +tbody tr:nth-child(odd) td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; + font-weight: 700; + padding: 10px; + background: #484848 +} +tbody tr:nth-child(even) td.tktDescValue, +tbody tr:nth-child(even) td.tktDspValue { + text-align: left; + vertical-align: top; + background: #2c2c2c; + padding: 10px +} +tbody tr:nth-child(even) td.tktDescLabel, +tbody tr:nth-child(even) td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; + font-weight: 700; + padding: 10px; + margin: 2px; + background: #555 +} +td.tktDescLabel, +td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; + font-weight: 700; + padding: 10px; + background-color: #404040 +} +td.tktDescValue code, +td.tktDescValue pre, +td.tktDspValue code, +td.tktDspValue pre { + white-space: pre-wrap +} +div.tktComments { + width: 100%; + margin: 30px 0 10px +} +div.tktCommentHeader { + border: 1px solid #ccc; + background-color: #f8f8f8; + padding: 10px; + margin-bottom: 10px +} +span.tktCommentLogin { + display: inline-block; + font-weight: 700; + color: #002060 +} +div.tktCommentBody { + margin: 10px 40px 30px +} +span.ueditInheritNobody { + color: #72d472; + padding: .2em +} +span.ueditInheritDeveloper { + color: #ff5d5d; + padding: .2em +} +span.ueditInheritReader { + color: #f0b850; + padding: .2em +} +span.ueditInheritAnonymous { + color: #7d7dff; + padding: .2em +} +#wysiwygBox { + padding: 12px; + color: #bbb; + background-color: #000; + border: transparent!important; + border-radius: 5px +} +[id=toolBar2] { + cursor: pointer; + display: inline-block +} +.intLink[title=Undo] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS44NTIgMi4wMDdjLjMxNC0uNDE4Ljg0Ny0uNjU1IDEuMzIzLS41MjlzLjk0Ni41MjggMS4wNTggMS4wNThjLjExMy41MzEtLjE1NCAxLjIzNy0uNTI5IDEuNTg4IiBmaWxsPSJub25lIiBzdHJva2U9IiM2NmE4YzciIHN0cm9rZS13aWR0aD0iLjUyOSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCIvPjxwYXRoIGQ9Ik0xLjA1OCAxLjE5bDEuNTg4IDEuNzJIMS4wNTh6IiBmaWxsPSIjNjZhOGM3Ii8+PC9zdmc+) +} +.intLink[title=Undo]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS44NTIgMi4wMDZjLjMxNC0uNDE3Ljg0Ny0uNjU1IDEuMzIzLS41MjlzLjk0Ni41MjggMS4wNTggMS4wNTljLjExMy41My0uMTU0IDEuMjM2LS41MjkgMS41ODciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmODAwMCIgc3Ryb2tlLXdpZHRoPSIuNTI5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49ImJldmVsIi8+PHBhdGggZD0iTTEuMDU4IDEuMTlsMS41ODggMS43MkgxLjA1OHoiIGZpbGw9IiNmZjgwMDAiLz48L3N2Zz4=) +} +.intLink[title=Redo] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMy43MzQgMi4wMDdjLS4zMTQtLjQxOC0uODQ3LS42NTUtMS4zMjMtLjUyOXMtLjk0Ni41MjgtMS4wNTggMS4wNThjLS4xMTMuNTMxLjE1NCAxLjIzNy41MjkgMS41ODgiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzY2YThjNyIgc3Ryb2tlLXdpZHRoPSIuNTI5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49ImJldmVsIi8+PHBhdGggZD0iTTQuNTI4IDEuMTlMMi45NCAyLjkxaDEuNTg4eiIgZmlsbD0iIzY2YThjNyIvPjwvc3ZnPg==) +} +.intLink[title=Redo]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMy43MzQgMi4wMDZjLS4zMTQtLjQxNy0uODQ3LS42NTUtMS4zMjMtLjUyOXMtLjk0Ni41MjgtMS4wNTggMS4wNTljLS4xMTMuNTMuMTU0IDEuMjM2LjUyOSAxLjU4NyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmY4MDAwIiBzdHJva2Utd2lkdGg9Ii41MjkiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiLz48cGF0aCBkPSJNNC41MjggMS4xOUwyLjk0IDIuOTFoMS41ODh6IiBmaWxsPSIjZmY4MDAwIi8+PC9zdmc+) +} +.intLink[title="Remove formatting"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS43MiAyLjM0NmwtLjE3Mi4zMTdxLS4wMzQuMDY0LS4wNTEuMTEyLS4wMTYuMDQ5LS4wMTYuMDg2IDAgLjA2Ni4wNDguMDk3LjA0OS4wMy4xNS4wM2guMDdsLS4wMzkuMTg3SC43OTRsLjAzOC0uMTg4aC4wNzRxLjA0OCAwIC4wODQtLjAxLjAzOC0uMDEyLjA3Mi0uMDQzLjAzNS0uMDMxLjA3MS0uMDg1LjAzOC0uMDUzLjA4Ni0uMTM2TDIuNDE2LjY1N0gyLjlsLjI5NiAyLjA3N3EuMDA5LjA1NS4wMjIuMTAyLjAxNi4wNDYuMDQuMDguMDI0LjAzMy4wNi4wNTIuMDM4LjAyLjA5My4wMmguMDY0bC0uMDM4LjE4N0gyLjI3MmwuMDM4LS4xODhoLjA4cS4xMTQgMCAuMTgxLS4wMzQuMDY4LS4wMzYuMDY4LS4xMTQgMC0uMDI5LS4wMDItLjA1N2wtLjAwNS0uMDU1LS4wNTQtLjM4em0uNzctLjgwN3EtLjAwOC0uMDc4LS4wMTctLjE0NUwyLjQ2IDEuMjZsLS4wMS0uMTI0LS4wMDUtLjEyNHEtLjAyNi4wNjQtLjA1Mi4xMmwtLjA1NS4xMS0uMDY1LjExOC0uMDgxLjE0NS0uMzUuNjI1aC43MTN6bTIuMjM4IDMuNzUzbC0uMTI4LS40MmgtLjY0MmwtLjEyOC40MmgtLjQwM2wuNjIyLTEuNzdoLjQ1N2wuNjI1IDEuNzd6bS0uMjE3LS43MzNsLS4yLS42NDZxLS4wMjItLjA3NC0uMDMxLS4xMTgtLjA0LjE1NS0uMjI4Ljc2NHoiIGZpbGw9IiM2NmE4YzciLz48cGF0aCBkPSJNMS4zMjMgMy43MDRjMCAxLjA1OSAxLjMyMy43NjQgMS4zMjMuNzY0IiBmaWxsPSJub25lIiBzdHJva2U9IiNhYWEiIHN0cm9rZS13aWR0aD0iLjUyOSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjxwYXRoIGQ9Ik0yLjM4MSAzLjcwNHYxLjU4OGwxLjA1OS0uNzk0eiIgZmlsbD0iI2FhYSIvPjwvc3ZnPg==) +} +.intLink[title="Remove formatting"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1LjgyMSA1LjgyMSIgaGVpZ2h0PSIyMiIgd2lkdGg9IjIyIj48cmVjdCBmaWxsPSIjNTU1IiB3aWR0aD0iNS44MjEiIGhlaWdodD0iNS44MjEiIHk9Ii0uMDAxIiByeD0iLjI2NSIgcnk9Ii4yNjUiLz48cGF0aCBmaWxsPSIjZmY4MDAwIiBkPSJNMS43MiAyLjM0NmwtLjE3Mi4zMTdxLS4wMzQuMDYzLS4wNTEuMTEyLS4wMTYuMDQ4LS4wMTYuMDg2IDAgLjA2NS4wNDguMDk2LjA0OS4wMy4xNS4wM2guMDdsLS4wMzkuMTg3SC43OTRsLjAzOC0uMTg4aC4wNzRxLjA0OCAwIC4wODQtLjAxLjAzOC0uMDEyLjA3Mi0uMDQzLjAzNS0uMDMxLjA3MS0uMDg0LjAzOC0uMDU0LjA4Ni0uMTM2TDIuNDE2LjY1NkgyLjlsLjI5NiAyLjA3N3EuMDA5LjA1NS4wMjIuMTAyLjAxNi4wNDYuMDQuMDh0LjA2LjA1M3EuMDM4LjAxOS4wOTMuMDE5aC4wNjRsLS4wMzguMTg3SDIuMjcybC4wMzgtLjE4N2guMDhxLjExNCAwIC4xODEtLjAzNS4wNjgtLjAzNi4wNjgtLjExNCAwLS4wMjktLjAwMi0uMDU2bC0uMDA1LS4wNTUtLjA1NC0uMzgxem0uNzctLjgwOHEtLjAwOC0uMDc4LS4wMTctLjE0NWwtLjAxNC0uMTMzLS4wMS0uMTI0LS4wMDUtLjEyNHEtLjAyNi4wNjQtLjA1Mi4xMmwtLjA1NS4xMS0uMDY1LjExOC0uMDgxLjE0NS0uMzUuNjI1aC43MTN6TTQuNzI4IDUuMjlMNC42IDQuODcxaC0uNjQybC0uMTI4LjQyaC0uNDAzbC42MjItMS43N2guNDU3bC42MjUgMS43N3ptLS4yMTctLjczMmwtLjItLjY0NXEtLjAyMi0uMDc1LS4wMzEtLjExOS0uMDQuMTU1LS4yMjguNzY0eiIvPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS13aWR0aD0iLjUyOSIgc3Ryb2tlPSIjZGRkIiBmaWxsPSJub25lIiBkPSJNMS4zMjMgMy43MDNjMCAxLjA1OSAxLjMyMy43NjQgMS4zMjMuNzY0Ii8+PHBhdGggZmlsbD0iI2RkZCIgZD0iTTIuMzgxIDMuNzAzdjEuNTg4bDEuMDU5LS43OTR6Ii8+PC9zdmc+) +} +.intLink[title=Bold] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS44NjYgMS4zNDloLjk4cS42NyAwIC45NzEuMTkxLjMwNC4xOS4zMDQuNjA2IDAgLjI4Mi0uMTM0LjQ2My0uMTMxLjE4LS4zNS4yMTd2LjAyMnEuMjk5LjA2Ni40My4yNS4xMzMuMTgyLjEzMy40ODYgMCAuNDMtLjMxMi42NzItLjMxLjI0MS0uODQ0LjI0MUgxLjg2NnptLjY2OCAxLjI0N2guMzg3cS4yNzIgMCAuMzkyLS4wODQuMTIzLS4wODQuMTIzLS4yNzggMC0uMTgxLS4xMzQtLjI1OS0uMTMtLjA4LS40MTctLjA4aC0uMzUxem0wIC41M3YuODJoLjQzNXEuMjc1IDAgLjQwNy0uMTA2LjEzMS0uMTA1LjEzMS0uMzIzIDAtLjM5Mi0uNTYtLjM5MnoiIGZpbGw9IiNhYWEiLz48L3N2Zz4=) +} +.intLink[title=Bold]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS44NjYgMS4zNDloLjk4cS42NyAwIC45NzEuMTkxLjMwNC4xOS4zMDQuNjA2IDAgLjI4Mi0uMTM0LjQ2My0uMTMxLjE4LS4zNS4yMTd2LjAyMnEuMjk5LjA2Ni40My4yNS4xMzMuMTgyLjEzMy40ODYgMCAuNDMtLjMxMi42NzItLjMxLjI0MS0uODQ0LjI0MUgxLjg2NnptLjY2OCAxLjI0N2guMzg3cS4yNzIgMCAuMzkyLS4wODQuMTIzLS4wODQuMTIzLS4yNzggMC0uMTgxLS4xMzQtLjI1OS0uMTMtLjA4LS40MTctLjA4aC0uMzUxem0wIC41M3YuODJoLjQzNXEuMjc1IDAgLjQwNy0uMTA2LjEzMS0uMTA1LjEzMS0uMzIzIDAtLjM5Mi0uNTYtLjM5MnoiIGZpbGw9IiNkZGQiLz48L3N2Zz4=) +} +.intLink[title=Italic] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMy4yNDUgNC40OTdIMS44NTJsLjA3Ny0uMzc5LjQwMy0uMTc3LjQzMy0yLjAzNy0uMzI3LS4xNzYuMDgtLjM4SDMuOTFsLS4wOC4zOC0uNDEuMTc2LS40MzIgMi4wMzcuMzM2LjE3N3oiIGZpbGw9IiNhYWEiLz48L3N2Zz4=) +} +.intLink[title=Italic]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMy4yNDUgNC40OTdIMS44NTJsLjA3Ny0uMzc5LjQwMy0uMTc3LjQzMy0yLjAzNy0uMzI3LS4xNzYuMDgtLjM4SDMuOTFsLS4wOC4zOC0uNDEuMTc2LS40MzIgMi4wMzcuMzM2LjE3N3oiIGZpbGw9IiNkZGQiLz48L3N2Zz4=) +} +.intLink[title=Underline] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNNC4xNzIgMS4wNHYyLjAzOHEwIC4zNDktLjE1OC42MTEtLjE1NS4yNjMtLjQ1LjQwMy0uMjk1LjE0LS42OTcuMTQtLjYwNyAwLS45NDMtLjMxLS4zMzYtLjMxMi0uMzM2LS44NTNWMS4wNDFoLjY2NXYxLjkyN3EwIC4zNjQuMTQ2LjUzNC4xNDcuMTcuNDg1LjE3LjMyNyAwIC40NzQtLjE3LjE0OC0uMTcyLjE0OC0uNTM4VjEuMDR6IiBmaWxsPSIjYWFhIi8+PHBhdGggZD0iTTEuMzIzIDQuNzYyaDMuMTc1IiBmaWxsPSJub25lIiBzdHJva2U9IiNhYWEiIHN0cm9rZS13aWR0aD0iLjUyOSIvPjwvc3ZnPg==) +} +.intLink[title=Underline]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNNC4xNzIgMS4wNHYyLjAzOHEwIC4zNDktLjE1OC42MTEtLjE1NS4yNjMtLjQ1LjQwMy0uMjk1LjE0LS42OTcuMTQtLjYwNyAwLS45NDMtLjMxLS4zMzYtLjMxMi0uMzM2LS44NTNWMS4wNDFoLjY2NXYxLjkyN3EwIC4zNjQuMTQ2LjUzNC4xNDcuMTcuNDg1LjE3LjMyNyAwIC40NzQtLjE3LjE0OC0uMTcyLjE0OC0uNTM4VjEuMDR6IiBmaWxsPSIjZGRkIi8+PHBhdGggZD0iTTEuMzIzIDQuNzYyaDMuMTc1IiBmaWxsPSJub25lIiBzdHJva2U9IiNkZGQiIHN0cm9rZS13aWR0aD0iLjUyOSIvPjwvc3ZnPg==) +} +.intLink[title="Left align"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS4wNTggMS4zMjNoMy43MDRNMS4wNTggMi4zODFoMi45MU0xLjA1OCAzLjQ0aDMuNzA0TTEuMDU4IDQuNDk4aDIuOTEiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FhYSIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Left align"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS4wNTggMS4zMjJoMy43MDRNMS4wNTggMi4zOGgyLjkxbS0yLjkxIDEuMDU5aDMuNzA0TTEuMDU4IDQuNDk3aDIuOTEiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2RkZCIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Center align"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS4wNTggMS4zMjNoMy43MDRtLTIuOTEgMS4wNThIMy45N00xLjA1OCAzLjQ0aDMuNzA0bS0yLjkxIDEuMDU4SDMuOTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FhYSIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Center align"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS4wNTggMS4zMjJoMy43MDRNMS44NTIgMi4zOEgzLjk3TTEuMDU4IDMuNDM5aDMuNzA0bS0yLjkxIDEuMDU4SDMuOTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2RkZCIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Right align"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS4wNTggMS4zMjNoMy43MDRtLTIuOTEgMS4wNThoMi45MU0xLjA1OCAzLjQ0aDMuNzA0bS0yLjkxIDEuMDU4aDIuOTEiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FhYSIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Right align"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS4wNTggMS4zMjJoMy43MDRNMS44NTIgMi4zOGgyLjkxTTEuMDU4IDMuNDM5aDMuNzA0bS0yLjkxIDEuMDU4aDIuOTEiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2RkZCIgc3Ryb2tlLXdpZHRoPSIuNTI5Ii8+PC9zdmc+) +} +.intLink[title="Numbered list"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMi4xMTcgMS4zMjNoMi45MU0yLjExNyAyLjkxaDIuOTFtLTIuOTEgMS41ODhoMi45MSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNMS41MjMgMS44NTFoLS4yNjZ2LS43MjlsLjAwMi0uMTIuMDA0LS4xM3EtLjA2Ni4wNjYtLjA5Mi4wODdsLS4xNDQuMTE2LS4xMjktLjE2LjQwNi0uMzIzaC4yMTl6bS4yMjIgMS41ODhoLS44OHYtLjE4NWwuMzE2LS4zMnEuMTQtLjE0NC4xODMtLjE5OS4wNDMtLjA1Ni4wNjItLjEwMy4wMi0uMDQ3LjAyLS4wOTggMC0uMDc2LS4wNDMtLjExMy0uMDQxLS4wMzctLjExMS0uMDM3LS4wNzMgMC0uMTQyLjAzMy0uMDcuMDM0LS4xNDQuMDk2TC44NiAyLjM0MnEuMDkzLS4wOC4xNTQtLjExMi4wNjItLjAzMy4xMzQtLjA1LjA3Mi0uMDE4LjE2Mi0uMDE4LjExOCAwIC4yMDguMDQzdC4xNC4xMnEuMDUuMDc4LjA1LjE3OCAwIC4wODctLjAzLjE2My0uMDMuMDc2LS4wOTUuMTU2LS4wNjQuMDgtLjIyNi4yMjlsLS4xNjIuMTUydi4wMTJoLjU0OXptLS4wNDkuNjA5cTAgLjExOC0uMDcyLjIwMS0uMDcxLjA4My0uMi4xMTR2LjAwNXEuMTUyLjAxOS4yMy4wOTMuMDc5LjA3My4wNzkuMTk4IDAgLjE4Mi0uMTMyLjI4My0uMTMyLjEwMS0uMzc2LjEwMS0uMjA1IDAtLjM2NC0uMDY4di0uMjI2cS4wNzMuMDM3LjE2MS4wNi4wODguMDIzLjE3NC4wMjMuMTMyIDAgLjE5NS0uMDQ1dC4wNjMtLjE0NHEwLS4wODgtLjA3My0uMTI1LS4wNzItLjAzNy0uMjMtLjAzN2gtLjA5NnYtLjIwNWguMDk3cS4xNDcgMCAuMjE0LS4wMzcuMDY4LS4wNC4wNjgtLjEzMiAwLS4xNDMtLjE4LS4xNDMtLjA2MSAwLS4xMjYuMDItLjA2NC4wMjEtLjE0Mi4wNzJsLS4xMjMtLjE4M3EuMTcyLS4xMjQuNDEtLjEyNC4xOTYgMCAuMzEuMDc5LjExMy4wNzkuMTEzLjIyeiIgZmlsbD0iIzY2YThjNyIvPjwvc3ZnPg==) +} +.intLink[title="Numbered list"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMi4xMTcgMS4zMjJoMi45MU0yLjExNyAyLjkxaDIuOTFtLTIuOTEgMS41ODdoMi45MSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNMS41MjMgMS44NTFoLS4yNjZ2LS43MjlsLjAwMi0uMTIuMDA0LS4xM3EtLjA2Ni4wNjYtLjA5Mi4wODdsLS4xNDQuMTE2LS4xMjktLjE2LjQwNi0uMzIzaC4yMTl6bS4yMjIgMS41ODhoLS44OHYtLjE4NWwuMzE2LS4zMnEuMTQtLjE0NC4xODMtLjE5OS4wNDMtLjA1Ni4wNjItLjEwMy4wMi0uMDQ3LjAyLS4wOTggMC0uMDc2LS4wNDMtLjExMy0uMDQxLS4wMzctLjExMS0uMDM3LS4wNzMgMC0uMTQyLjAzMy0uMDcuMDM0LS4xNDQuMDk2TC44NiAyLjM0MnEuMDkzLS4wOC4xNTQtLjExMi4wNjItLjAzMy4xMzQtLjA1LjA3Mi0uMDE4LjE2Mi0uMDE4LjExOCAwIC4yMDguMDQzdC4xNC4xMnEuMDUuMDc4LjA1LjE3OCAwIC4wODctLjAzLjE2My0uMDMuMDc2LS4wOTUuMTU2LS4wNjQuMDgtLjIyNi4yMjlsLS4xNjIuMTUydi4wMTJoLjU0OXptLS4wNDkuNjA5cTAgLjExOC0uMDcyLjIwMS0uMDcxLjA4My0uMi4xMTR2LjAwNXEuMTUyLjAxOS4yMy4wOTMuMDc5LjA3My4wNzkuMTk4IDAgLjE4Mi0uMTMyLjI4My0uMTMyLjEwMS0uMzc2LjEwMS0uMjA1IDAtLjM2NC0uMDY4di0uMjI2cS4wNzMuMDM3LjE2MS4wNi4wODguMDIzLjE3NC4wMjMuMTMyIDAgLjE5NS0uMDQ1dC4wNjMtLjE0NHEwLS4wODgtLjA3My0uMTI1LS4wNzItLjAzNy0uMjMtLjAzN2gtLjA5NnYtLjIwNWguMDk3cS4xNDcgMCAuMjE0LS4wMzcuMDY4LS4wNC4wNjgtLjEzMiAwLS4xNDMtLjE4LS4xNDMtLjA2MSAwLS4xMjYuMDItLjA2NC4wMjEtLjE0Mi4wNzJsLS4xMjMtLjE4M3EuMTcyLS4xMjQuNDEtLjEyNC4xOTYgMCAuMzEuMDc5LjExMy4wNzkuMTEzLjIyeiIgZmlsbD0iI2ZmODAwMCIvPjwvc3ZnPg==) +} +.intLink[title="Dotted list"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMi4xMTcgMS4zMjJoMi45MU0yLjExNyAyLjkxaDIuOTFtLTIuOTEgMS41ODdoMi45MSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48Y2lyY2xlIHI9Ii4yNjUiIGN5PSIxLjMyMiIgY3g9IjEuMzIzIiBmaWxsPSIjNjZhOGM3Ii8+PGNpcmNsZSByPSIuMjY1IiBjeT0iMi45MSIgY3g9IjEuMzIzIiBmaWxsPSIjNjZhOGM3Ii8+PGNpcmNsZSByPSIuMjY1IiBjeT0iNC40OTciIGN4PSIxLjMyMyIgZmlsbD0iIzY2YThjNyIvPjwvc3ZnPg==) +} +.intLink[title="Dotted list"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMi4xMTcgMS4zMjJoMi45MU0yLjExNyAyLjkxaDIuOTFtLTIuOTEgMS41ODdoMi45MSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48Y2lyY2xlIHI9Ii4yNjUiIGN5PSIxLjMyMiIgY3g9IjEuMzIzIiBmaWxsPSIjZmY4MDAwIi8+PGNpcmNsZSByPSIuMjY1IiBjeT0iMi45MSIgY3g9IjEuMzIzIiBmaWxsPSIjZmY4MDAwIi8+PGNpcmNsZSByPSIuMjY1IiBjeT0iNC40OTciIGN4PSIxLjMyMyIgZmlsbD0iI2ZmODAwMCIvPjwvc3ZnPg==) +} +.intLink[title=Quote] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMy4wOTIgMi41MDlxMC0uMjcuMDgzLS41MjEuMDgyLS4yNTMuMjYtLjQ2OC4xODItLjIxNS40NjctLjM4NC4yOS0uMTc0LjcwMy0uMjg1di40MzhxLS4xODIuMDY2LS4zMjIuMTMyLS4xNDEuMDY2LS4yMzYuMTQ1LS4wOTEuMDc0LS4xNC4xNy0uMDQ2LjA5LS4wNDYuMjE0IDAgLjA4My4wNDUuMTMzLjA0Ni4wNS4xMTYuMDk1bC4xNDkuMDk1cS4wNzkuMDQ1LjE0OS4xMi4wNy4wNy4xMTYuMTgyLjA0NS4xMTEuMDQ1LjI4IDAgLjI4Ni0uMTc4LjQzNS0uMTczLjE0OS0uNDM0LjE0OS0uMzYgMC0uNTctLjI0OC0uMjA3LS4yNDgtLjIwNy0uNjgyem0tMS43NyAwcTAtLjI3LjA4My0uNTIxLjA4My0uMjUzLjI2LS40NjguMTgyLS4yMTUuNDY4LS4zODQuMjktLjE3NC43MDMtLjI4NXYuNDM4cS0uMTg2LjA2Ni0uMzI3LjEzMi0uMTM2LjA2Ni0uMjMyLjE0NS0uMDkuMDc0LS4xNC4xNy0uMDQ2LjA5LS4wNDYuMjE0IDAgLjA4My4wNDYuMTMzLjA0NS4wNS4xMTYuMDk1bC4xNDguMDk1cS4wNzkuMDQ1LjE1LjEyLjA3LjA3LjExNS4xODIuMDQ2LjExMS4wNDYuMjggMCAuMjg2LS4xNzguNDM1LS4xNzQuMTQ5LS40MzQuMTQ5LS4zNiAwLS41Ny0uMjQ4LS4yMDgtLjI0OC0uMjA4LS42ODJ6IiBmaWxsPSIjNjZhOGM3Ii8+PC9zdmc+) +} +.intLink[title=Quote]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMy4wOTIgMi41MDlxMC0uMjcuMDgzLS41MjEuMDgyLS4yNTMuMjYtLjQ2OC4xODItLjIxNS40NjctLjM4NC4yOS0uMTc0LjcwMy0uMjg1di40MzhxLS4xODIuMDY2LS4zMjIuMTMyLS4xNDEuMDY2LS4yMzYuMTQ1LS4wOTEuMDc0LS4xNC4xNy0uMDQ2LjA5LS4wNDYuMjE0IDAgLjA4My4wNDUuMTMzLjA0Ni4wNS4xMTYuMDk1bC4xNDkuMDk1cS4wNzkuMDQ1LjE0OS4xMi4wNy4wNy4xMTYuMTgyLjA0NS4xMTEuMDQ1LjI4IDAgLjI4Ni0uMTc4LjQzNS0uMTczLjE0OS0uNDM0LjE0OS0uMzYgMC0uNTctLjI0OC0uMjA3LS4yNDgtLjIwNy0uNjgyem0tMS43NyAwcTAtLjI3LjA4My0uNTIxLjA4My0uMjUzLjI2LS40NjguMTgyLS4yMTUuNDY4LS4zODQuMjktLjE3NC43MDMtLjI4NXYuNDM4cS0uMTg2LjA2Ni0uMzI3LjEzMi0uMTM2LjA2Ni0uMjMyLjE0NS0uMDkuMDc0LS4xNC4xNy0uMDQ2LjA5LS4wNDYuMjE0IDAgLjA4My4wNDYuMTMzLjA0NS4wNS4xMTYuMDk1bC4xNDguMDk1cS4wNzkuMDQ1LjE1LjEyLjA3LjA3LjExNS4xODIuMDQ2LjExMS4wNDYuMjggMCAuMjg2LS4xNzguNDM1LS4xNzQuMTQ5LS40MzQuMTQ5LS4zNiAwLS41Ny0uMjQ4LS4yMDgtLjI0OC0uMjA4LS42ODJ6IiBmaWxsPSIjZmY4MDAwIi8+PC9zdmc+) +} +.intLink[title="Delete indentation"] { + width: 0; + height: 0; + padding: 11px; + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS4wNTggMS4zMjNoMy43MDRNMi4zODEgMi4zODFoMi4zODJNMi4zODEgMy40NGgyLjM4Mk0xLjA1OCA0LjQ5OGgzLjcwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNLjUzIDIuOTFsMS4zMjItLjc5M3YxLjU4N3oiIGZpbGw9IiM2NmE4YzciLz48L3N2Zz4=) +} +.intLink[title="Delete indentation"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS4wNTggMS4zMjJoMy43MDRNMi4zODEgMi4zOGgyLjM4Mk0yLjM4MSAzLjQzOWgyLjM4Mk0xLjA1OCA0LjQ5N2gzLjcwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNLjUzIDIuOTFsMS4zMjItLjc5NHYxLjU4N3oiIGZpbGw9IiNmZjgwMDAiLz48L3N2Zz4=) +} +.intLink[title="Add indentation"] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS4wNTggMS4zMjNoMy43MDRNMi4zODEgMi4zODFoMi4zODJNMi4zODEgMy40NGgyLjM4Mk0xLjA1OCA0LjQ5OGgzLjcwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNMi4xMTcgMi45MUwuNzk0IDIuMTE3djEuNTg3eiIgZmlsbD0iIzY2YThjNyIvPjwvc3ZnPg==) +} +.intLink[title="Add indentation"]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1LjgyMSA1LjgyMSIgaGVpZ2h0PSIyMiIgd2lkdGg9IjIyIj48cmVjdCB3aWR0aD0iNS44MjEiIGhlaWdodD0iNS44MjEiIHk9Ii0uMDAxIiByeD0iLjI2NSIgcnk9Ii4yNjUiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS4wNTggMS4zMjJoMy43MDRNMi4zODEgMi4zOGgyLjM4Mk0yLjM4MSAzLjQzOWgyLjM4Mk0xLjA1OCA0LjQ5N2gzLjcwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48cGF0aCBkPSJNMi4xMTcgMi45MUwuNzk0IDIuMTE2djEuNTg3eiIgZmlsbD0iI2ZmODAwMCIvPjwvc3ZnPg==) +} +.intLink[title=Hyperlink] { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cGF0aCBkPSJNMS43NTIgMy45NjloLjc5M20tLjc5My0yLjExN2guNzkzTTEuNzUyIDMuOTdjLS4zNDMgMC0uNjU5LS4xMTktLjgzLS40MTUtLjE3MS0uMjk3LS4xNzEtLjk5IDAtMS4yODcuMTcxLS4yOTYuNDg3LS40MTUuODMtLjQxNW0yLjIxNyAyLjExNmgtLjc5NG0uNzk0LTIuMTE3aC0uNzk0bS43OTQgMi4xMTdjLjM0MiAwIC42NTgtLjExOS44My0uNDE1LjE3LS4yOTcuMTctLjk5IDAtMS4yODctLjE3Mi0uMjk2LS40ODgtLjQxNS0uODMtLjQxNU0yLjExNyAyLjkxaDEuNTg3IiBmaWxsPSJub25lIiBzdHJva2U9IiNhYWEiIHN0cm9rZS13aWR0aD0iLjUyOSIvPjwvc3ZnPg==) +} +.intLink[title=Hyperlink]:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDUuODIxIDUuODIxIj48cmVjdCByeT0iLjI2NSIgcng9Ii4yNjUiIHk9Ii0uMDAxIiBoZWlnaHQ9IjUuODIxIiB3aWR0aD0iNS44MjEiIGZpbGw9IiM1NTUiLz48cGF0aCBkPSJNMS43NTIgMy45NjhoLjc5M20tLjc5My0yLjExN2guNzkzbS0uNzkzIDIuMTE3Yy0uMzQzIDAtLjY1OS0uMTE5LS44My0uNDE1LS4xNzEtLjI5Ny0uMTcxLS45OSAwLTEuMjg3LjE3MS0uMjk2LjQ4Ny0uNDE1LjgzLS40MTVtMi4yMTcgMi4xMTdoLS43OTRtLjc5NC0yLjExN2gtLjc5NG0uNzk0IDIuMTE3Yy4zNDIgMCAuNjU4LS4xMTkuODMtLjQxNS4xNy0uMjk3LjE3LS45OSAwLTEuMjg3LS4xNzItLjI5Ni0uNDg4LS40MTUtLjgzLS40MTVNMi4xMTcgMi45MWgxLjU4NyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGRkIiBzdHJva2Utd2lkdGg9Ii41MjkiLz48L3N2Zz4=) +} +.statistics-report-graph-line { + border: 2px solid #ff8000; + background-color: #ff8000; +} +.statistics-report-graph-extra { + border: 2px dashed #446979; + border-left-style: none; +} +mark, +p.noMoreShun, +p.shunned, +span.modpending { + color: #ff8000 +} +table.captcha { + margin: auto; + padding: 10px; + background-color: #000; + border-radius: 5px +} +.container:after, +.mainmenu:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both +} +div.forumSel { + background-color: #3a3a3a; +} +body.forum .forumPosts.fileage a:visited { + color: rgb(72, 144, 224); +} +.debug { + background-color: #330; + border: 2px solid #aa0; +} + +.capsumOff { + background-color: #222; +} +.capsumRead { + background-color: #262; +} +.capsumWrite { + background-color: #662; +} +body.branch .brlist > table > tbody > tr:hover:not(.selected), +body.branch .brlist > table > tbody > tr.selected { + background-color: #442800; +} diff --git a/skins/ardoise/details.txt b/skins/ardoise/details.txt new file mode 100644 index 0000000..099dfb8 --- /dev/null +++ b/skins/ardoise/details.txt @@ -0,0 +1,5 @@ +timeline-arrowheads: 0 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 1 +pikchr-background: 0x1d2021 diff --git a/skins/ardoise/footer.txt b/skins/ardoise/footer.txt new file mode 100644 index 0000000..cd0dc7e --- /dev/null +++ b/skins/ardoise/footer.txt @@ -0,0 +1,15 @@ + <th1> + if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} { + html "</div>" + } + </th1> + </div> <!-- end div container --> +</div> <!-- end div middle max-full-width --> +<footer> + <div class="container"> + <div class="pull-right"> + <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> + </div> + This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s + </div> +</footer> diff --git a/skins/ardoise/header.txt b/skins/ardoise/header.txt new file mode 100644 index 0000000..1c9257d --- /dev/null +++ b/skins/ardoise/header.txt @@ -0,0 +1,51 @@ +<header> + <div class="container"> + <div class="login pull-right"> + <th1> + if {[info exists login]} { + html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n" + } else { + html "<a class='button' href='$home/login'>Login</a>\n" + } + </th1> + </div> + <div class='title'> + <h1>$<project_name> + <th1> + if {[anycap jor]} { + html "<a class='rss' href='$home/timeline.rss'></a>" + } + </th1> + <small> $<title></small></h1> + </div> + + <!-- Main Menu --> + <nav class="mainmenu" title="Main Menu"> + <ul> + <th1> + html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a></li>\n" + builtin_request_js hbmenu.js + set once 1 + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {$once && [string match $url\[/?#\]* /$current_page/]} { + set class "$class active" + set once 0 + } + html "<li class='$class'>" + if {[string match /* $url]} {set url $home$url} + html "<a href='$url'>$name</a></li>\n" + } + </th1> + </ul> + </nav> + <nav id="hbdrop" class='hbdrop' title="sitemap"></nav> + </div> <!-- end div container --> +</header> +<div class="middle max-full-width"> + <div class="container"> + <th1> + if {[string first artifact $current_page] == 0 || [string first hexdump $current_page] == 0} { + html "<div class=\"artifact_content\">" + } + </th1> diff --git a/skins/ardoise/images/active.svg b/skins/ardoise/images/active.svg new file mode 100644 index 0000000..b73e511 --- /dev/null +++ b/skins/ardoise/images/active.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="17" height="9" viewBox="0 0 4.498 2.381"><path d="M4.233 2.381H.265l.998-1.058.986-1.058.998 1.062z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/addindent.svg b/skins/ardoise/images/addindent.svg new file mode 100644 index 0000000..33b4bba --- /dev/null +++ b/skins/ardoise/images/addindent.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.058 1.323h3.704M2.381 2.381h2.382M2.381 3.44h2.382M1.058 4.498h3.704" fill="none" stroke="#aaa" stroke-width=".529"/><path d="M2.117 2.91L.794 2.117v1.587z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/addindent_h.svg b/skins/ardoise/images/addindent_h.svg new file mode 100644 index 0000000..5cb78a5 --- /dev/null +++ b/skins/ardoise/images/addindent_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5.821 5.821" height="22" width="22"><rect width="5.821" height="5.821" y="-.001" rx=".265" ry=".265" fill="#555"/><path d="M1.058 1.322h3.704M2.381 2.38h2.382M2.381 3.439h2.382M1.058 4.497h3.704" fill="none" stroke="#ddd" stroke-width=".529"/><path d="M2.117 2.91L.794 2.116v1.587z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/blist.svg b/skins/ardoise/images/blist.svg new file mode 100644 index 0000000..e7e0255 --- /dev/null +++ b/skins/ardoise/images/blist.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M2.117 1.322h2.91M2.117 2.91h2.91m-2.91 1.587h2.91" fill="none" stroke="#aaa" stroke-width=".529"/><circle r=".265" cy="1.322" cx="1.323" fill="#66a8c7"/><circle r=".265" cy="2.91" cx="1.323" fill="#66a8c7"/><circle r=".265" cy="4.497" cx="1.323" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/blist_h.svg b/skins/ardoise/images/blist_h.svg new file mode 100644 index 0000000..1de95b7 --- /dev/null +++ b/skins/ardoise/images/blist_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M2.117 1.322h2.91M2.117 2.91h2.91m-2.91 1.587h2.91" fill="none" stroke="#ddd" stroke-width=".529"/><circle r=".265" cy="1.322" cx="1.323" fill="#ff8000"/><circle r=".265" cy="2.91" cx="1.323" fill="#ff8000"/><circle r=".265" cy="4.497" cx="1.323" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/bold.svg b/skins/ardoise/images/bold.svg new file mode 100644 index 0000000..b9ef542 --- /dev/null +++ b/skins/ardoise/images/bold.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.866 1.349h.98q.67 0 .971.191.304.19.304.606 0 .282-.134.463-.131.18-.35.217v.022q.299.066.43.25.133.182.133.486 0 .43-.312.672-.31.241-.844.241H1.866zm.668 1.247h.387q.272 0 .392-.084.123-.084.123-.278 0-.181-.134-.259-.13-.08-.417-.08h-.351zm0 .53v.82h.435q.275 0 .407-.106.131-.105.131-.323 0-.392-.56-.392z" fill="#aaa"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/bold_h.svg b/skins/ardoise/images/bold_h.svg new file mode 100644 index 0000000..64511ba --- /dev/null +++ b/skins/ardoise/images/bold_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.866 1.349h.98q.67 0 .971.191.304.19.304.606 0 .282-.134.463-.131.18-.35.217v.022q.299.066.43.25.133.182.133.486 0 .43-.312.672-.31.241-.844.241H1.866zm.668 1.247h.387q.272 0 .392-.084.123-.084.123-.278 0-.181-.134-.259-.13-.08-.417-.08h-.351zm0 .53v.82h.435q.275 0 .407-.106.131-.105.131-.323 0-.392-.56-.392z" fill="#ddd"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/calign.svg b/skins/ardoise/images/calign.svg new file mode 100644 index 0000000..e6ff3f5 --- /dev/null +++ b/skins/ardoise/images/calign.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.058 1.323h3.704m-2.91 1.058H3.97M1.058 3.44h3.704m-2.91 1.058H3.97" fill="none" stroke="#aaa" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/calign_h.svg b/skins/ardoise/images/calign_h.svg new file mode 100644 index 0000000..5f21505 --- /dev/null +++ b/skins/ardoise/images/calign_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.058 1.322h3.704M1.852 2.38H3.97M1.058 3.439h3.704m-2.91 1.058H3.97" fill="none" stroke="#ddd" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/clrfmt.svg b/skins/ardoise/images/clrfmt.svg new file mode 100644 index 0000000..a340221 --- /dev/null +++ b/skins/ardoise/images/clrfmt.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.72 2.346l-.172.317q-.034.064-.051.112-.016.049-.016.086 0 .066.048.097.049.03.15.03h.07l-.039.187H.794l.038-.188h.074q.048 0 .084-.01.038-.012.072-.043.035-.031.071-.085.038-.053.086-.136L2.416.657H2.9l.296 2.077q.009.055.022.102.016.046.04.08.024.033.06.052.038.02.093.02h.064l-.038.187H2.272l.038-.188h.08q.114 0 .181-.034.068-.036.068-.114 0-.029-.002-.057l-.005-.055-.054-.38zm.77-.807q-.008-.078-.017-.145L2.46 1.26l-.01-.124-.005-.124q-.026.064-.052.12l-.055.11-.065.118-.081.145-.35.625h.713zm2.238 3.753l-.128-.42h-.642l-.128.42h-.403l.622-1.77h.457l.625 1.77zm-.217-.733l-.2-.646q-.022-.074-.031-.118-.04.155-.228.764z" fill="#66a8c7"/><path d="M1.323 3.704c0 1.059 1.323.764 1.323.764" fill="none" stroke="#aaa" stroke-width=".529" stroke-linecap="square"/><path d="M2.381 3.704v1.588l1.059-.794z" fill="#aaa"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/clrfmt_h.svg b/skins/ardoise/images/clrfmt_h.svg new file mode 100644 index 0000000..a9aafdd --- /dev/null +++ b/skins/ardoise/images/clrfmt_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5.821 5.821" height="22" width="22"><rect fill="#555" width="5.821" height="5.821" y="-.001" rx=".265" ry=".265"/><path fill="#ff8000" d="M1.72 2.346l-.172.317q-.034.063-.051.112-.016.048-.016.086 0 .065.048.096.049.03.15.03h.07l-.039.187H.794l.038-.188h.074q.048 0 .084-.01.038-.012.072-.043.035-.031.071-.084.038-.054.086-.136L2.416.656H2.9l.296 2.077q.009.055.022.102.016.046.04.08t.06.053q.038.019.093.019h.064l-.038.187H2.272l.038-.187h.08q.114 0 .181-.035.068-.036.068-.114 0-.029-.002-.056l-.005-.055-.054-.381zm.77-.808q-.008-.078-.017-.145l-.014-.133-.01-.124-.005-.124q-.026.064-.052.12l-.055.11-.065.118-.081.145-.35.625h.713zM4.728 5.29L4.6 4.871h-.642l-.128.42h-.403l.622-1.77h.457l.625 1.77zm-.217-.732l-.2-.645q-.022-.075-.031-.119-.04.155-.228.764z"/><path stroke-linecap="square" stroke-width=".529" stroke="#ddd" fill="none" d="M1.323 3.703c0 1.059 1.323.764 1.323.764"/><path fill="#ddd" d="M2.381 3.703v1.588l1.059-.794z"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/delindent.svg b/skins/ardoise/images/delindent.svg new file mode 100644 index 0000000..3c21b81 --- /dev/null +++ b/skins/ardoise/images/delindent.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.058 1.323h3.704M2.381 2.381h2.382M2.381 3.44h2.382M1.058 4.498h3.704" fill="none" stroke="#aaa" stroke-width=".529"/><path d="M.53 2.91l1.322-.793v1.587z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/delindent_h.svg b/skins/ardoise/images/delindent_h.svg new file mode 100644 index 0000000..bee9f4f --- /dev/null +++ b/skins/ardoise/images/delindent_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.058 1.322h3.704M2.381 2.38h2.382M2.381 3.439h2.382M1.058 4.497h3.704" fill="none" stroke="#ddd" stroke-width=".529"/><path d="M.53 2.91l1.322-.794v1.587z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/dir.svg b/skins/ardoise/images/dir.svg new file mode 100644 index 0000000..05a2b7b --- /dev/null +++ b/skins/ardoise/images/dir.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="16" viewBox="0 0 5.292 4.233"><path d="M.794.53v3.174h3.704V1.323H2.91V.529z" fill="#1d2021" stroke="#ff8000" stroke-width=".529" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/file.svg b/skins/ardoise/images/file.svg new file mode 100644 index 0000000..4b1166b --- /dev/null +++ b/skins/ardoise/images/file.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="16" viewBox="0 0 5.292 4.233"><path d="M1.323.265v3.704h2.646V1.323L2.91.265z" fill="#1d2021" stroke="#ddd" stroke-width=".529" stroke-linejoin="round"/><path d="M2.646.265h.264v1.323h1.06" fill="#1d2021" stroke="#ddd" stroke-width=".529" stroke-linejoin="round"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/italic.svg b/skins/ardoise/images/italic.svg new file mode 100644 index 0000000..e4854a4 --- /dev/null +++ b/skins/ardoise/images/italic.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M3.245 4.497H1.852l.077-.379.403-.177.433-2.037-.327-.176.08-.38H3.91l-.08.38-.41.176-.432 2.037.336.177z" fill="#aaa"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/italic_h.svg b/skins/ardoise/images/italic_h.svg new file mode 100644 index 0000000..8c0d8f1 --- /dev/null +++ b/skins/ardoise/images/italic_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M3.245 4.497H1.852l.077-.379.403-.177.433-2.037-.327-.176.08-.38H3.91l-.08.38-.41.176-.432 2.037.336.177z" fill="#ddd"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/lalign.svg b/skins/ardoise/images/lalign.svg new file mode 100644 index 0000000..9577466 --- /dev/null +++ b/skins/ardoise/images/lalign.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.058 1.323h3.704M1.058 2.381h2.91M1.058 3.44h3.704M1.058 4.498h2.91" fill="none" stroke="#aaa" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/lalign_h.svg b/skins/ardoise/images/lalign_h.svg new file mode 100644 index 0000000..c97f8a7 --- /dev/null +++ b/skins/ardoise/images/lalign_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.058 1.322h3.704M1.058 2.38h2.91m-2.91 1.059h3.704M1.058 4.497h2.91" fill="none" stroke="#ddd" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/link.svg b/skins/ardoise/images/link.svg new file mode 100644 index 0000000..69f5659 --- /dev/null +++ b/skins/ardoise/images/link.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.752 3.969h.793m-.793-2.117h.793M1.752 3.97c-.343 0-.659-.119-.83-.415-.171-.297-.171-.99 0-1.287.171-.296.487-.415.83-.415m2.217 2.116h-.794m.794-2.117h-.794m.794 2.117c.342 0 .658-.119.83-.415.17-.297.17-.99 0-1.287-.172-.296-.488-.415-.83-.415M2.117 2.91h1.587" fill="none" stroke="#aaa" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/link_h.svg b/skins/ardoise/images/link_h.svg new file mode 100644 index 0000000..1b3797d --- /dev/null +++ b/skins/ardoise/images/link_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.752 3.968h.793m-.793-2.117h.793m-.793 2.117c-.343 0-.659-.119-.83-.415-.171-.297-.171-.99 0-1.287.171-.296.487-.415.83-.415m2.217 2.117h-.794m.794-2.117h-.794m.794 2.117c.342 0 .658-.119.83-.415.17-.297.17-.99 0-1.287-.172-.296-.488-.415-.83-.415M2.117 2.91h1.587" fill="none" stroke="#ddd" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/nlist.svg b/skins/ardoise/images/nlist.svg new file mode 100644 index 0000000..78df7a6 --- /dev/null +++ b/skins/ardoise/images/nlist.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M2.117 1.323h2.91M2.117 2.91h2.91m-2.91 1.588h2.91" fill="none" stroke="#aaa" stroke-width=".529"/><path d="M1.523 1.851h-.266v-.729l.002-.12.004-.13q-.066.066-.092.087l-.144.116-.129-.16.406-.323h.219zm.222 1.588h-.88v-.185l.316-.32q.14-.144.183-.199.043-.056.062-.103.02-.047.02-.098 0-.076-.043-.113-.041-.037-.111-.037-.073 0-.142.033-.07.034-.144.096L.86 2.342q.093-.08.154-.112.062-.033.134-.05.072-.018.162-.018.118 0 .208.043t.14.12q.05.078.05.178 0 .087-.03.163-.03.076-.095.156-.064.08-.226.229l-.162.152v.012h.549zm-.049.609q0 .118-.072.201-.071.083-.2.114v.005q.152.019.23.093.079.073.079.198 0 .182-.132.283-.132.101-.376.101-.205 0-.364-.068v-.226q.073.037.161.06.088.023.174.023.132 0 .195-.045t.063-.144q0-.088-.073-.125-.072-.037-.23-.037h-.096v-.205h.097q.147 0 .214-.037.068-.04.068-.132 0-.143-.18-.143-.061 0-.126.02-.064.021-.142.072l-.123-.183q.172-.124.41-.124.196 0 .31.079.113.079.113.22z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/nlist_h.svg b/skins/ardoise/images/nlist_h.svg new file mode 100644 index 0000000..fbb21d1 --- /dev/null +++ b/skins/ardoise/images/nlist_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M2.117 1.322h2.91M2.117 2.91h2.91m-2.91 1.587h2.91" fill="none" stroke="#ddd" stroke-width=".529"/><path d="M1.523 1.851h-.266v-.729l.002-.12.004-.13q-.066.066-.092.087l-.144.116-.129-.16.406-.323h.219zm.222 1.588h-.88v-.185l.316-.32q.14-.144.183-.199.043-.056.062-.103.02-.047.02-.098 0-.076-.043-.113-.041-.037-.111-.037-.073 0-.142.033-.07.034-.144.096L.86 2.342q.093-.08.154-.112.062-.033.134-.05.072-.018.162-.018.118 0 .208.043t.14.12q.05.078.05.178 0 .087-.03.163-.03.076-.095.156-.064.08-.226.229l-.162.152v.012h.549zm-.049.609q0 .118-.072.201-.071.083-.2.114v.005q.152.019.23.093.079.073.079.198 0 .182-.132.283-.132.101-.376.101-.205 0-.364-.068v-.226q.073.037.161.06.088.023.174.023.132 0 .195-.045t.063-.144q0-.088-.073-.125-.072-.037-.23-.037h-.096v-.205h.097q.147 0 .214-.037.068-.04.068-.132 0-.143-.18-.143-.061 0-.126.02-.064.021-.142.072l-.123-.183q.172-.124.41-.124.196 0 .31.079.113.079.113.22z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/quote.svg b/skins/ardoise/images/quote.svg new file mode 100644 index 0000000..31e586d --- /dev/null +++ b/skins/ardoise/images/quote.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M3.092 2.509q0-.27.083-.521.082-.253.26-.468.182-.215.467-.384.29-.174.703-.285v.438q-.182.066-.322.132-.141.066-.236.145-.091.074-.14.17-.046.09-.046.214 0 .083.045.133.046.05.116.095l.149.095q.079.045.149.12.07.07.116.182.045.111.045.28 0 .286-.178.435-.173.149-.434.149-.36 0-.57-.248-.207-.248-.207-.682zm-1.77 0q0-.27.083-.521.083-.253.26-.468.182-.215.468-.384.29-.174.703-.285v.438q-.186.066-.327.132-.136.066-.232.145-.09.074-.14.17-.046.09-.046.214 0 .083.046.133.045.05.116.095l.148.095q.079.045.15.12.07.07.115.182.046.111.046.28 0 .286-.178.435-.174.149-.434.149-.36 0-.57-.248-.208-.248-.208-.682z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/quote_h.svg b/skins/ardoise/images/quote_h.svg new file mode 100644 index 0000000..64771a0 --- /dev/null +++ b/skins/ardoise/images/quote_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M3.092 2.509q0-.27.083-.521.082-.253.26-.468.182-.215.467-.384.29-.174.703-.285v.438q-.182.066-.322.132-.141.066-.236.145-.091.074-.14.17-.046.09-.046.214 0 .083.045.133.046.05.116.095l.149.095q.079.045.149.12.07.07.116.182.045.111.045.28 0 .286-.178.435-.173.149-.434.149-.36 0-.57-.248-.207-.248-.207-.682zm-1.77 0q0-.27.083-.521.083-.253.26-.468.182-.215.468-.384.29-.174.703-.285v.438q-.186.066-.327.132-.136.066-.232.145-.09.074-.14.17-.046.09-.046.214 0 .083.046.133.045.05.116.095l.148.095q.079.045.15.12.07.07.115.182.046.111.046.28 0 .286-.178.435-.174.149-.434.149-.36 0-.57-.248-.208-.248-.208-.682z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/ralign.svg b/skins/ardoise/images/ralign.svg new file mode 100644 index 0000000..fd84447 --- /dev/null +++ b/skins/ardoise/images/ralign.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.058 1.323h3.704m-2.91 1.058h2.91M1.058 3.44h3.704m-2.91 1.058h2.91" fill="none" stroke="#aaa" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/ralign_h.svg b/skins/ardoise/images/ralign_h.svg new file mode 100644 index 0000000..12a37bd --- /dev/null +++ b/skins/ardoise/images/ralign_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.058 1.322h3.704M1.852 2.38h2.91M1.058 3.439h3.704m-2.91 1.058h2.91" fill="none" stroke="#ddd" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/redo.svg b/skins/ardoise/images/redo.svg new file mode 100644 index 0000000..2becb49 --- /dev/null +++ b/skins/ardoise/images/redo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M3.734 2.007c-.314-.418-.847-.655-1.323-.529s-.946.528-1.058 1.058c-.113.531.154 1.237.529 1.588" fill="none" stroke="#66a8c7" stroke-width=".529" stroke-linecap="square" stroke-linejoin="bevel"/><path d="M4.528 1.19L2.94 2.91h1.588z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/redo_h.svg b/skins/ardoise/images/redo_h.svg new file mode 100644 index 0000000..1e08c3b --- /dev/null +++ b/skins/ardoise/images/redo_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M3.734 2.006c-.314-.417-.847-.655-1.323-.529s-.946.528-1.058 1.059c-.113.53.154 1.236.529 1.587" fill="none" stroke="#ff8000" stroke-width=".529" stroke-linecap="square" stroke-linejoin="bevel"/><path d="M4.528 1.19L2.94 2.91h1.588z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/underline.svg b/skins/ardoise/images/underline.svg new file mode 100644 index 0000000..4895fe3 --- /dev/null +++ b/skins/ardoise/images/underline.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M4.172 1.04v2.038q0 .349-.158.611-.155.263-.45.403-.295.14-.697.14-.607 0-.943-.31-.336-.312-.336-.853V1.041h.665v1.927q0 .364.146.534.147.17.485.17.327 0 .474-.17.148-.172.148-.538V1.04z" fill="#aaa"/><path d="M1.323 4.762h3.175" fill="none" stroke="#aaa" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/underline_h.svg b/skins/ardoise/images/underline_h.svg new file mode 100644 index 0000000..906eed9 --- /dev/null +++ b/skins/ardoise/images/underline_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M4.172 1.04v2.038q0 .349-.158.611-.155.263-.45.403-.295.14-.697.14-.607 0-.943-.31-.336-.312-.336-.853V1.041h.665v1.927q0 .364.146.534.147.17.485.17.327 0 .474-.17.148-.172.148-.538V1.04z" fill="#ddd"/><path d="M1.323 4.762h3.175" fill="none" stroke="#ddd" stroke-width=".529"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/undo.svg b/skins/ardoise/images/undo.svg new file mode 100644 index 0000000..0755538 --- /dev/null +++ b/skins/ardoise/images/undo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><path d="M1.852 2.007c.314-.418.847-.655 1.323-.529s.946.528 1.058 1.058c.113.531-.154 1.237-.529 1.588" fill="none" stroke="#66a8c7" stroke-width=".529" stroke-linecap="square" stroke-linejoin="bevel"/><path d="M1.058 1.19l1.588 1.72H1.058z" fill="#66a8c7"/></svg>
\ No newline at end of file diff --git a/skins/ardoise/images/undo_h.svg b/skins/ardoise/images/undo_h.svg new file mode 100644 index 0000000..f7a007c --- /dev/null +++ b/skins/ardoise/images/undo_h.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 5.821 5.821"><rect ry=".265" rx=".265" y="-.001" height="5.821" width="5.821" fill="#555"/><path d="M1.852 2.006c.314-.417.847-.655 1.323-.529s.946.528 1.058 1.059c.113.53-.154 1.236-.529 1.587" fill="none" stroke="#ff8000" stroke-width=".529" stroke-linecap="square" stroke-linejoin="bevel"/><path d="M1.058 1.19l1.588 1.72H1.058z" fill="#ff8000"/></svg>
\ No newline at end of file diff --git a/skins/black_and_white/css.txt b/skins/black_and_white/css.txt new file mode 100644 index 0000000..5b96548 --- /dev/null +++ b/skins/black_and_white/css.txt @@ -0,0 +1,175 @@ +/* General settings for the entire page */ +body { + margin:0px 0px 0px 0px; + padding:0px; + font-family:verdana, arial, helvetica, "sans serif"; + color:#333; + background-color:white; + text-size-adjust: none; +} + +/* consistent colours */ +h2 { + color: #333; +} +h3 { + color: #333; +} + +/* The project logo in the upper left-hand corner of each page */ +div.logo { + display: table-cell; + text-align: left; + vertical-align: bottom; + font-weight: bold; + color: #333; + white-space: nowrap; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 2em; + font-weight: bold; + text-align: center; + color: #333; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + padding-right: 10px; + text-align: right; + vertical-align: bottom; + padding-bottom: 5px; + color: #333; + font-size: 0.8em; + font-weight: bold; + white-space: nowrap; +} + +/* The header across the top of the page */ +header { + margin:10px 0px 10px 0px; + padding:1px 0px 0px 20px; + border-style:solid; + border-color:black; + border-width:1px 0px; + background-color:#eee; +} + +/* The main menu bar that appears at the top left of the page beneath +** the header. Width must be co-ordinated with the container below */ +nav.mainmenu { + float: left; + margin-left: 10px; + margin-right: 20px; + font-size: 0.9em; + font-weight: bold; + padding:5px; + background-color:#eee; + border:1px solid #999; + width:6em; +} + +/* Main menu is now a list */ +nav.mainmenu ul { + padding: 0; + list-style:none; +} +nav.mainmenu a, nav.mainmenu a:visited{ + padding: 1px 10px 1px 10px; + color: #333; + text-decoration: none; +} +nav.mainmenu a:hover { + color: #eee; + background-color: #333; +} + +/* Container for the sub-menu and content so they don't spread +** out underneath the main menu */ +#container { + padding-left: 9em; +} + +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 3px 10px 3px 10px; + font-size: 0.9em; + text-align: center; + border:1px solid #999; + border-width:1px 0px; + background-color: #eee; + color: #333; +} +div.submenu a, div.submenu a:visited, div.sectionmenu>a.button:link, +div.sectionmenu>a.button:visited, div.submenu label { + padding: 3px 10px 3px 10px; + color: #333; + text-decoration: none; +} +div.submenu a:hover, div.sectionmenu>a.button:hover, div.submenu label:hover { + color: #eee; + background-color: #333; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 2ex 1ex 0ex 2ex; +} + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0px; + margin-top: 1em; + padding: 1px 1px 1px 1px; + font-size: 1.2em; + font-weight: bold; + border-style:solid; + border-color:#999; + border-width:1px 0px; + background-color: #eee; + color: #333; + white-space: nowrap; +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #eee; + border: 2px #999 solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + color: #333; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + font-size: 0.8em; + margin-top: 12px; + padding: 5px 10px 5px 10px; + text-align: right; + background-color: #eee; + color: #555; +} + +/* <verbatim> blocks */ +pre.verbatim { + background-color: #f5f5f5; + padding: 0.5em; + white-space: pre-wrap; +} + +/* The label/value pairs on (for example) the ci page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} diff --git a/skins/black_and_white/details.txt b/skins/black_and_white/details.txt new file mode 100644 index 0000000..3e05845 --- /dev/null +++ b/skins/black_and_white/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 0 +timeline-color-graph-lines: 0 +white-foreground: 0 diff --git a/skins/black_and_white/footer.txt b/skins/black_and_white/footer.txt new file mode 100644 index 0000000..a897ecf --- /dev/null +++ b/skins/black_and_white/footer.txt @@ -0,0 +1,3 @@ +<footer> +Fossil $release_version $manifest_version $manifest_date +</footer> diff --git a/skins/black_and_white/header.txt b/skins/black_and_white/header.txt new file mode 100644 index 0000000..5d8048b --- /dev/null +++ b/skins/black_and_white/header.txt @@ -0,0 +1,28 @@ +<header> + <div class="logo"> + <img src="$logo_image_url" alt="logo"> + <br />$<project_name> + </div> + <div class="title">$<title></div> + <div class="status"><th1> + if {[info exists login]} { + puts "Logged in as $login" + } else { + puts "Not logged in" + } + </th1></div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + set sitemap 0 + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} {set url $home$url} + html "<a href='$url'>$name</a><br/>\n" + if {[string match /sitemap $url]} {set sitemap 1} + } + if {!$sitemap} { + html "<a href='$home/sitemap'>Sitemap</a>\n" + } + </th1> +</nav> diff --git a/skins/blitz/README.md b/skins/blitz/README.md new file mode 100644 index 0000000..896d3f9 --- /dev/null +++ b/skins/blitz/README.md @@ -0,0 +1,13 @@ +## Blitz Theme + +Contributed by James Moger (james.moger@gitblit.com) + +This theme is inspired by my own project, [Gitblit](http://gitblit.com), and offered to the Fossil project. + +This theme embeds & uses an unmodified copy of [Normalize 3.0.2](https://necolas.github.io/normalize.css/) which is distributed under an [MIT license](https://github.com/necolas/normalize.css/blob/master/LICENSE.md). + +This theme uses half of a heavily-modified version of [Skeleton](http://getskeleton.com) which is distributed under an [MIT license](https://github.com/dhg/Skeleton/blob/master/LICENSE.md). None of the responsive elements (media queries) are included at this time. + +The font used in the included Fossil logo image is [Trillium Web Light](http://www.google.com/fonts/specimen/Titillium+Web) @ 48px HTML color code #456a7a. + +The RSS feed icon is sourced from [Font-Awesome](https://fortawesome.github.io/Font-Awesome/icons) by Dave Gandy and is distributed under the [SIL OFL 1.1 ](http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL) license.
\ No newline at end of file diff --git a/skins/blitz/arrow_project.png b/skins/blitz/arrow_project.png Binary files differnew file mode 100644 index 0000000..608c060 --- /dev/null +++ b/skins/blitz/arrow_project.png diff --git a/skins/blitz/css.txt b/skins/blitz/css.txt new file mode 100644 index 0000000..ca5f672 --- /dev/null +++ b/skins/blitz/css.txt @@ -0,0 +1,1255 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +html { + font-family: sans-serif; /* 1 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +button, +input[type=button], +input[type=reset], +input[type=submit]{ + cursor: pointer; +} + +/** + * Re-set default cursor for disabled elements. + */ +button:disabled, +input[type=button]:disabled, +input[type=reset]:disabled, +input[type=submit]:disabled{ + cursor: default; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ + display: block; +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} + + +/* + * Blitz + * + * Skin inspired by Gitblit with heavily-modified excerpts from Skeleton 2.0.4. + * Blitz is authored by james.moger@gitblit.com. + * + * Skeleton is authored by Dave Gamache and is distributed under the MIT license. + * http://getskeleton.com + * +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ + +html { + /* 62.5% so that the REM values are base 10px. */ + /* 1.5rem = 15px */ + font-size: 62.5%; +} + +/* Typography +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +h1, h2, h3, h4, h5, h6 { + margin: 0; + margin-bottom: 1rem; + font-weight: 700; +} + +h1 { font-size: 3.0rem; line-height: 1.2; } +h2 { font-size: 2.6rem; line-height: 1.25; } +h3 { font-size: 2.4rem; line-height: 1.3; } +h4 { font-size: 2.0rem; line-height: 1.35; } +h5 { font-size: 1.6rem; line-height: 1.5; } +h6 { font-size: 1.4rem; line-height: 1.6; } + +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-size: 0.75em; + font-weight: 400; + color: #ccc; +} + +pre, code { + font-size: 1.2rem; +} + +body { + font-size: 1.4em; /* currently ems cause chrome bug misinterpreting rems on body element */ + line-height: 1.5; + font-weight: 400; + font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #333; + background-color: #f8f8f8; +} + +/* Spacing +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +button, +.button { + margin-bottom: 1rem; +} + +input, +textarea, +select, +fieldset, +pre, +blockquote, +dl, +figure, +table, +p, +ul, +ol { + margin-bottom: 1rem; +} + +p { + margin-top: 0; +} + +hr { + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #ccc; +} + + +/* Buttons +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.button, +button, +input[type=button], +input[type=reset], +input[type=submit]{ + display: inline-block; + height: 3.3rem; + padding: 0 2.2rem; + color: #444; + background-color: #f8f8f8;; + border-color: #446979; + text-align: center; + font-size: 1.1rem; + font-weight: 700; + line-height: 3.3rem; + letter-spacing: .08rem; + text-transform: uppercase; + text-decoration: none; + white-space: nowrap; + border-radius: 4px; + /*border: 1px solid #ccc;*/ + border: 1px solid #446979; + cursor: pointer; + box-sizing: border-box; +} + +.button:hover, +button:hover, +input[type=button]:hover, +input[type=reset]:hover, +input[type=submit]:hover, +.button:hover, +button:focus, +input[type=button]:focus, +input[type=reset]:focus, +input[type=submit]:focus{ + outline: 0; + color: white; + background-color: #648898; + border-color: #648898; +} + +.button:disabled, +button:disabled, +input[type=button]:disabled, +input[type=reset]:disabled, +input[type=submit]:disabled{ + color: #444; + background-color: rgb(153,153,153); +} + +.content a.button, +.submenu a.button, +.submenu a.button:visited { + color: #444; + background: #f8f8f8; +} + + +/* Forms +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea, +select { + height: 3.3rem; + padding: 6px 10px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; +} + +/* Removes awkward default styles on some inputs for iOS */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea { + appearance: none; +} + +textarea { + height: inherit; + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px; +} + +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="text"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + border: 1px solid #aaa; + outline: 0; +} + +label, +legend { + margin-bottom: .5rem; + font-weight: 700; +} + +fieldset { + padding: 0; + border-width: 0; +} + +input[type="checkbox"], +input[type="radio"] { + display: inline; +} + + +/* Links +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +a { + color: #446979; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + + +/* Lists +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul { + list-style: square; +} + +ol { + list-style: decimal; +} + +ol, ul { + padding-left: 3rem; + margin-top: 0; +} + +li { + margin-bottom: 0.5rem; +} + + +/* Nested Lists +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul ul, +ul ol, +ol ol, +ol ul { + margin: 1rem 0 1rem 2rem; +} + + +/* Code +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +code, kbd { + padding: .2rem .5rem; + margin: 0 .2rem; + white-space: nowrap; + background: #f8f8f8; + border: 1px solid #ccc; + border-radius: 4px; +} + +pre > code { + display: block; + padding: 1rem 1.5rem; + white-space: pre; +} + +pre.verbatim { + background-color: inherit; + white-space: pre-wrap; +} + + +/* Blockquote +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +blockquote { + padding: 0px 20px; + margin: 0 0 20px; + border-left: 4px solid #ccc; +} + + +/* Tables +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +th, +td { + padding: 6px 5px; + text-align: left; + border-bottom: 1px solid #ddd; } +th:first-child, +td:first-child { + padding-left: 0; } +th:last-child, +td:last-child { + padding-right: 0; } + + +/* + * Blitz Page Layout Design + * + * html > body > header > container > mainmenu + * middle > container > submenu & content + * footer > container > generation stats, fossil logo, version + * + ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ + + +/* Container + * Represents the usable layout space for header, middle, and footer. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container { + position: relative; + width: 100%; + max-width: 900px; + margin: 0 auto; + box-sizing: border-box; +} + + +/* Header + * Div displayed at the top of every page. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +header { + color: #666; + font-weight: 400; + padding-top: 10px; + border-width: 0px; + border-top: 4px solid #446979; + border-bottom: 1px solid #ccc; +} + +header .logo { + display: inline-block; +} + +header .login { + padding-top: 2px; + text-align: right; +} + +header .login .button { + margin: 0; +} + +header h1 { + margin: 0px; + color: #666; + display: inline-block; +} + +header .logo h1 { + display: inline-block; +} + +header .title h1 { + padding-bottom: 10px; +} + +header h1 small, header h2 small { + color: #888; +} + +header a.rss { + display: inline-block; + padding: 10px 15px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMNDhwn05VjawAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAGlSURBVDjLrdPfb8xREAXwT7tIl+paVNaPJghCKC8kXv0XXvyNXsRfwYPQJqVKiqykWFVZXd12vcxNJtduUtJJvrm7984998ycMxxwNGI9jPs4j7nY+/U/gIdiPYO71dk21rCE7r8ybOHGmMfmcRNnsbEf1gXwNzqYSXs5WljEMXzAaBLg1Ji9Js7hOi6OeeAznqC/X8AcMyHWYpX7E4/Rm1QyHMdefCWGeI/VcMDR2D8S7Fci5y/AeTzCPVyLi1sYJAut4BTaiX0n9kc14MmkcjPY3I5LXezGtxqKtyJ3Lir6VAM2AmCq6m8Hl6PsQTB5hyvxmMhZxk4G3MZLfAwLtdNZM9rwOs528TVVNB3ga7UoQ2wGmyWciFaU0VwIJiP8iL6Xfp7GK+w0JthliDep8UKonTSGvbBTaU8f3QzYxgPcCsBvWK9E6OBFCNGPVjTTqC430p+H6fLVGLGtmIw7SbwevqT+XkgVPJ9Otpmtyl6I9XswLXEp/d6oPN0ugJu14xMLob4kgPRYjtkCOMDTUG+AZ3ibEtfDLorfEmAB3UuTdXDxBzUUZV+B82aLAAAAAElFTkSuQmCC); + background-position: center center; + background-repeat: no-repeat; +} + + +/* Middle + * Center div displayed between header and footer. Contains per-page content. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.middle { + background-color: white; + padding-bottom: 20px; + max-width: 100%; + box-sizing: border-box; +} + + +/* Content + * Displayed below submenu within the middle div. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.content { + padding-top: 15px; +} + +.content a { + color: #002060; +} + + +/* Footer + * Displayed after the middle div and forms the page bottom. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +footer { + padding: 10px 0 60px; + border-top: 1px solid #ccc; + background-color: #f8f8f8; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABGCAQAAADxl9ugAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQffAwkQBRPw+yfrAAAAPHRFWHRDb21tZW50ACBJbWFnZSBnZW5lcmF0ZWQgYnkgRVNQIEdob3N0c2NyaXB0IChkZXZpY2U9cG5tcmF3KQqV01S1AAANg0lEQVRo3s2aa3RVRZbH/3tXnftIbhJCeJMXyEsNCsgrSBzAYXyt0YVj2zSOonbLqNNO+25FB2kdoBVdrp6l09P2NNpOL/ExSrtUdGRU5JEQgggCggIhQIBAIIGQ5N57TlXt+ZAICY+AGCT76zlV91dVe+/a+38uDQ7dYmrxw41QocJuni28vWTedEa7Gd9iatplos7Y2mfDRED6A2G0I2At6AdPIiA84HgbLhx1o9QX9Zoh7QjYHpOkYJYrfNyOKH0O/f2FJpfkSRmMCNqDk9rDXwTAuxK7h3uFf7vXxC6QVO8w19taNOT4Y0wu1sCdW0AA6IZ73bCUaI/GHuqnsJqcEqVrzSo+wNtLdgAPsz6jeVURtQ9gA8bQT8xztW7X2u3I4G6UdA0cohxcSAN7nt939/zDQzl0LnfwaLpxqFT/i7w7XLYXhoUQ+YFW3pJlC0/nt6jZZb4zjXY2AaGXvQOz/gMY09NM4C6ixRL7OU3PTm4ORdiIjyLsJvq1Z28Hj5rBM82xMTqPuhHznmU72vq12W5M3+LykQWUW9pirzXOmmk8wjE87kb8HPmSKlY+wY62R9jhI69xf/AmYiEfiXs+e4CCAZiDUc9wP6cRIJn8tq23PQClbwap9Ivk7usiGj/CDs5xl3Qe/EiQCEWsgXLlq8sfamM73osMna43ef/pfm731Hsxv+Z00ozFzaJpF+gMrsNB2BwL3cGpSsNRWHbmvTQNiTbev9q4xXszMLzqpdgDNjxv/YjmvHlSQIc5brl8nrqT5pllMpHM9wRc4gU3oC8JyDLt8P78ZLyM2lrmAeTg5YrKdf1S1N9QTs6At1YM49DJo1gwWy7uE5kKBQHbler9K8R+L8API2qmFoDY7ejxpxGJxtMctyZcfYvJDYX4i5LXp/MJAS2edkM6edNUDuLNOdMDmz913bIw8RidKO/1w+3NQfePbHQjdbd/NKOjbq7UqQOmYtXb/+BdbGc4AJjPX53CXe6UGweYWxUR8N8rNkzn4wAFc9yYPvGbI+mttoycpo14fWbD0hZv+njOAcBl6Yl8jiEMbSKhqGPypZ5N0B2kDxrjOjF0QuI2oRqj2z6rAebx5pNiRrEo0jhV9wFkP//xpkPHAU6UGdnBLyR8jMOQs6xwcMAznVys+Uqa5YCCnilFkuVSkeKlGKfDED8JaI+VifMWR9LPC/u+UkoZA6edOezVu83pny4yD6qQnCxhDzk/MhUED+8PWHJMkAgWROvvQoxOcEdayynVY9/5tIgAwsfIvaD3XaFx6M6ddMx3WlurCGICiAIhMLxB1VM+wQRMDOeYjHCUMum85OW909/acOlJgqaI3qrulU9dYGlgzVI1tsVrETzlOt3MeUGCudVoCgJmAhFU78F+6Usu0V39iylSHCRZMROM0do5pUDWQamEPZTy5oqyXVt77bG94HGEyTkCE8BsjLOcl11Uvf7V+qvIP86jgWH8zhc9LpKYU7qRhH5NTRknwFw3+jpMQCIItG69PCLfZ1YKAMlS/7PQDCc2qbRzSjET4slINBAvhsPxjarKKy/9FhjZG8Ol4tINi/uFzkcfl8sEnwExATGRY73Ze2VpAHxHoPFki7r2iljN3a6LqqOxnZ+vXUBNwTF6uL0e0Nr3tSYWpqNhQtaIaA0A1oZftuf5Y1xmCMRO2IM1VXqf3aYr5IDXODTx7+43PAjPFcit1MANeHfFxuFpSFW9TbbORpaNEqt6/5tIoxuBOO049NHXNTN5lFwlE3o09JUMlWKdSmJ/UC8TvRwqjNzoVwNIw3upcluyq4hSAq3Idyt5HOyRIDGuGdA42un+6wv/Cq7sFA1F/B4N/5MEgL/yOsSPlFSMOzD5JhkMEQ8l8u41Job7hVoExsiRNMU1Biac4oqD92Np8Xt0BgUiEOeIHLyobbQb9U/8fSAItsFdJv1wECASB5L92xb2yefcE3Q+jgsof//m3+PO2i7YhgV0HisAK48UnE03EaT67axMyjMNXpFkf/za8r3VPP2I46Ri+aYDW0z3SMT6NJb62wPiJEFhEoFCYIhNoyS4VF1CBKArPu6MKWysBZhFVFrD7yri2VkuR4QZAIkTMAOAiDIY9KvFQ3gVPqXVFD9JSbSS3vP7b/QzKY8SlO6G5e2fv/dozvDxciKvCqOYrIURT/XU2+0SKrdVqtpVojz4Sq1Vi1duV0UE+PSEy33AhRRZAzDDc4vXrB1xKU0gRUR0LCCRi/be8XZ12/0M41Ka5K/5JjA80PlQKMjfeVVN9ZG0NZbmH8xf5Y8nJxIKmYC7SmLlexeVp2wKb+y++f6KZ3c/03g+qSISPONGDqHRZOk7QGde6XsrjTP+kXTTCpCVGErZteZUDRdhD3Ls65tz64J85ZGyQ0tXDAzckadFlOtv+ZQLoYMgHHaGcrJ7fb56inR3WVJJRVTdVM3kQSh5r1hjlbIGIKVX6ammE1vnmImh4Y4BZHGcvmvx5XQ6BcRIfnPHxV82ZnFUYsh+bWXLzMuwquGwCnvdBUTkqHcPmb+l5cJZcKervlwc8N04sbYwSJC1tsnneemJqh32LksZflr1SUh+pT6q+/ov/krztitDq1s4hP1p7mbfuFfkEKJgSejLh/Wa7Y5GJsdQmEYDoVocDCvnLCvnwPDMzOK/uiVoPS8IxoQi409D2xAU4Hd2xE2DZ3gjvcpVZY+0iqgAbFh7F9grp84xf5D6QFOE/rYo1vto4z6ZVg/COHKAiGJrACaljNHaiaqTp0NeXlr37Ydz/ahSLY9YzLIPMzlxSrxMzM/ochfnO8UHvJJpgTnm+UE5GKMeOu3LrLJPd32+Z1FamfczKli36jzTtHplvPg46o2WgNwEaOqoTk8Jxsu4+vGUruDkCCCJkg171g2ntqMkjrmuYUBwG7LglIq/U7Zr1HEjJrtiay9imIzsqt37gb4/RSZlSsP88iZf5T3kX2xOuBEck2yp13F32NbDuZbHqSjwFrzJbeP5eN6NHOJuoQyXRIZ7Y+3Gh08wohjpW/VOkFMyqagHILnOSAOuflh1bqKggew524Zs1ex+R6cmz1W7Z6clvzzF8T7rLsvnSfBgJVO9cN+ax4/IRwazZLZrqmOSWJjAR0hCdFc/F2AtToTos34POQHAkVw2Sp2m7EKwOEyLVj59w6EtpyjdFYSCCYhaC0n9fcmmr5pb8QBrQl0wqn/hNc82J8Rfc8lWVwVGwLeNDVPTdW30+KZN0Sab5JTBqOBBowIHzeZVJcBjXHdKXfQp93+DgwuIgy9QtqJ8evPhOtRRzZi30iKfBZPxQVNhofDP6sUXh05zA5MH+WKdpAgAJ/lAChqhyQmd5HgFChFoMvar0AaKq8qSGmA6o03lVFCEqx1Q0Ce0075hkgvW93EPNeMZ3Cl93eRl5Q8GVjoBs1tUN1l/rvkn1VOuNXUIAyATv6zz3bXPEo3t7N/L6bBirfV0MimktOclgnDUJHiTWxo9oJOZQT/TDUk0nIYfFODFaMMN4WFqbnEl8BzXtlBX++ATr2KW3eC9kbg/9d2l6/qmdxrq9bdRkBwMtrgd+lpkpxwyWSwAkvRKSfl0phf4l+6acGVeak6QQbCJYH/Gwci+zPi/+oMFEJpLdTDfQ8IpTTl8r/lkQuniX3oR98mjX65sJQZ0wYNu1NU0wZ8RjSUf0Qo22aCU1oAoCazTFe5bdZ1pVIqcv2B12XSm6awxCFNaichCr1I1auDOQFvKxzQHFD4mexGXNfds/PoYB+iMhxzwIC8vcJe7HKVIrBEoLRQkuVL+Ii70lDlMUOR/uHrJdNaAwXo82orksR8gfVUAGFkgy5JfhKdEKncelwhq8SinwMeidX+303VHuvOgCGSRRF2o6vb6FyKmQTGRNTraQt1qJ6EaAPA4V22MYH20wXx+aCyfKFvFAcymiYfCh/YhSQZACFHpBB/l6On2l0s/AgTBWdIHHbpIulzfWDbvAW4r3gPUIwWZ0lW6SoaE0AgDYG6Six0R4OjgWRMwGUAVHuUz+SS2iNQ+XSMAvKqzrLCemdtUo3ifWhpoTi7b/RSfVRH9zBc2y43umXVgtImf3R08c7zCIeYpVoPOtoh+ZjYEhd3kWtV4IHSldEjAV7U/ATHxig89Tx0QUFCtvUJisxnNknuHArSY4+xtNuk4ZQWai4wOBThJRqZJvhYXtptnNTVAHQnQYbT4k7QI6/Vd6w6f/U9h39cUgEg+BCG3rk/AHQ9wlhsz1IUCI3tRPrDVtdlhzO9rxPNke+nuXR0TUIdAMOrDlkJshwEM4QId98C8vKTmUUJHAwww03VNT8ny9hd/cJ9qCaU7QnrpjXvcsKuT6W7VdcvHc+sq95wDCuZILxp9t+TZJWVL/56PPdJzDhjDhG75UyUrsXXtBw9z/PjAObd3729leA++mTOldO07dyl9ghbmnALmYpjybndhO3/VV/dx9IQdlj53YQEAo2din3p1cv1VfDIF8EfvSdJQSZvU3ljGJJOvNuH94kOPs22jwWq3P5edTryG8G/OdtsxOPiZd6O1ppTeK0n43Hb/9yPuYBhPuFFXumEq3231S+ibL/e+yhtP2Zz+iD74hCu83vblr+W1yJ5LgguxmzedRu/8//AUSaqMTR1xAAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: center top 10px; +} + +footer a { + color: #3b5c6b; +} + + +/* Main Menu + * Displayed in header, contains repository links. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.mainmenu { + clear:both; +} + +.mainmenu ul { + list-style: none outside; + position: relative; + border-top: 1px solid #ccc; + padding: 0; +} + +.mainmenu li { + outline: 0; + float: left; + margin: 0; +} + +.mainmenu li.active { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEQAACxEBf2RfkQAAAAd0SU1FB90FDxEXAZ2XRzAAAABJSURBVCjPY2CgBzhz5sx/QmoYiTXAxMSEkWRDsLkAl0GMpHoBm0EoAlu3bmUQFxcnGAboBjEhc4gxAJtLGUmJBVwuYiTXAGSDAIx5IBObnuVxAAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: center bottom; +} + +.mainmenu li a, +nav#hbdrop a { + color: #3b5c6b; + padding: 10px 15px; +} + +.mainmenu li.active a { + font-weight: bold; +} + +.mainmenu li:hover +nav#hbdrop a:hover { + background-color: #eee; +} + +nav#hbdrop { + background-color: white; + border: 2px solid #ccc; + display: none; + width: 100%; + position: absolute; + z-index: 20; +} + + + +/* Submenu + * Displayed in the middle div. Contains page-specific form controls. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.submenu { + padding: 10px 0px; + border-bottom: 1px solid #ddd; +} + +.submenu input, .submenu select { + margin: 0 0 0 5px; +} + +.submenu a, .submenu label { + display: inline; + font-weight: normal; + color: #3b5c6b; + padding: 5px 15px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 5px; +} + +.submenu a:hover, .submenu label:hover { + border: 1px solid #ccc; +} + + +/* Section + * Cap/header to distinguish a section. Displayed within a content div. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.section { + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #ccc; + padding: 9px 10px 10px; + margin: 10px 0; +} + + +/* Section Menu + * Div of buttons/links, displayed with a section div within a content div. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.sectionmenu { + border: 1px solid #ccc; + border-top: 0; + margin-top: -10px; + margin-bottom: 10px; + padding: 5px; + text-align: center; +} +.sectionmenu a { + display: inline-block; + margin-top: 5px; + margin-right: 1em; +} + + +/* File browser + * Repository tree navigation. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul.browser { + list-style: none; +} + +ul.browser li.dir { + padding-top: 2px; +} + +ul.browser li.dir > a { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAVQBVAFV4xrLkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMLExABnLjGZQAAAEFJREFUOMtjYKAQMIaGhv4npGj16tWMuORYGBgYGOZW+eDUnNy2Ba/hLMQ4E58rCRpAyHVMlAbiqAGjBhCdmWgKAHp4Dh0ZusP3AAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: 0px center; + padding-left: 22px; +} + +ul.browser li.file { + padding-top: 2px; +} + +ul.browser li.file > a { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAVQBVAFV4xrLkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMLExMaPfBcSgAAAFNJREFUOMvtkzEOwDAIA02VL5pHwiOTJZFQmkqFOTex+CwPCCYkAaDjB+4u65ZdYGafQVV9SR4kWQUke0mwS1o2HGcAQKs0R1lpQuQKruD4jVnBAG/cGRqf0U66AAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-position: 0px center; + padding-left: 22px; +} + +div.filetreeline { + display: table; + width: 100%; + white-space: nowrap; +} + +/* tree-view top-level list */ +.filetree > ul { + display: inline-block; +} + +/* tree-view lists */ +.filetree ul { + margin: 0; + padding: 0; + list-style: none; +} +/* tree-view collapsed list */ +.filetree ul.collapsed { + display: none; +} +/* tree-view lists below the root */ +.filetree ul ul { + position: relative; + margin: 0 0 0 21px; +} +/* tree-view lists items */ +.filetree li { + position: relative; + margin: 0; + padding: 0; +} +/* tree-view node lines */ +.filetree li li:before { + content: ''; + position: absolute; + top: -.8em; + left: -14px; + width: 16px; + height: 1.5em; + border-left: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} +/* tree-view directory lines */ +.filetree li > ul:before { + content: ''; + position: absolute; + top: -1.5em; + bottom: 0; + left: -35px; + border-left: 1px solid #ccc; +} +/* hide lines for last-child directories */ +.filetree li.last > ul:before { + display: none; +} + +.filetree a { + position: relative; + z-index: 1; + display: table-cell; + min-height: 16px; + padding-left: 22px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAVQBVAFV4xrLkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMLExMaPfBcSgAAAFNJREFUOMvtkzEOwDAIA02VL5pHwiOTJZFQmkqFOTex+CwPCCYkAaDjB+4u65ZdYGafQVV9SR4kWQUke0mwS1o2HGcAQKs0R1lpQuQKruD4jVnBAG/cGRqf0U66AAAAAElFTkSuQmCC); + background-position: center left; + background-repeat: no-repeat; +} + +.filetree .dir > div.filetreeline > a { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAVQBVAFV4xrLkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMLExABnLjGZQAAAEFJREFUOMtjYKAQMIaGhv4npGj16tWMuORYGBgYGOZW+eDUnNy2Ba/hLMQ4E58rCRpAyHVMlAbiqAGjBhCdmWgKAHp4Dh0ZusP3AAAAAElFTkSuQmCC); +} + + +/* Label-Value table + * Displayed on the Check-in & Admin pages. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +table.label-value th { + vertical-align: middle; +} + + +/* Branches table +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.brlist table td { + padding: 5px; +} + + +/* Timeline + * Displays chronologically-ordered check-ins with a branch graph. +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +tr.timelineCurrent { + border-left: 2px solid orange; + background-color: #ffc; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; +} + +.timelineSelected { + border-left: 2px solid orange; + background-color: #ffffe8; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; +} +.timelineSecondary { + background-color: #e8ffff; +} + +tr.timelineCurrent td.timelineTableCell { +} + +tr.timelineBottom td { + border-bottom: 0; +} + +div.timelineDate { + font-weight: bold; + white-space: nowrap; +} + +td.timelineTime { + vertical-align: top; + text-align: right; + white-space: nowrap; + border-bottom: 0; +} + +td.timelineGraph { + width: 20px; + text-align: left; + vertical-align: top; + border-bottom: 0; +} + +a.timelineHistLink { + text-transform: lowercase; +} + +span.timelineComment { + padding: 0px 5px; +} + + +/* Login/Logout +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +table.login_out { +} + +table.login_out .login_out_label { + font-weight: 700; + text-align: right; +} + +table.login_out td { + border: 0; +} + + +/* Diff displays +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +table.diff { + width: 100%; + overflow: auto; + border: 1px solid #ccc; + padding: 5px; + font-size: 1rem; +} + +table.diff:focus { + outline: none; +} + + +/* Ticket Reports +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +table.report { + width: 100%; + cursor: auto; + border-radius: 4px; + border: 1px solid #ccc; + margin: 0 0 1em 0; +} + +.report td, .report th { + border: 0; + font-size: .9em; + padding: 5px; +} + +.report th { + cursor: pointer; +} + +.report thead+tbody tr:hover { + background-color: #f5f9fc !important; +} + + +/* Ticket page +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +table.tktDsp { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; + width: 100%; + margin: 15px 0px 10px 0px; +} + +td.tktDspLabel, td.tktDescLabel { + width: 70px; + text-align: right; + overflow: hidden; + font-weight: 700; + padding: 10px; + background-color: #f8f8f8; +} + +td.tktDescLabel { + vertical-align: top; +} + +td.tktDspValue, td.tktDescValue { + text-align: left; + vertical-align: top; + border: 1px solid #ccc; + padding: 10px; +} + +td.tktDspValue pre, td.tktDescValue pre, +td.tktDspValue code, td.tktDescValue code { + white-space: pre-wrap; +} + +div.tktComments { + width: 100%; + margin: 30px 0px 10px 0px; +} + +div.tktComment { +} + +div.tktCommentHeader { + border: 1px solid #ccc; + background-color: #f8f8f8; + padding: 10px 10px; + margin-bottom: 10px; +} + +span.tktCommentLogin { + display: inline-block; + font-weight: 700; + color: #002060; +} + +div.tktCommentBody { + margin: 10px 40px 30px; +} + + +/* User setup table +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +td.usetupEditLabel { + font-weight: 700; +} + + +/* Utilities +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.full-width { + width: 100%; + box-sizing: border-box; +} + +.max-full-width { + max-width: 100%; + box-sizing: border-box; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +/* Clearing +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container:after, +.mainmenu:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both; +} + +body.forum .forumPosts.fileage a:visited { + color: #648999; +} + +/* Chat +––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– */ +body.chat .chat-input-field:focus { + border-color: #446979; +} diff --git a/skins/blitz/details.txt b/skins/blitz/details.txt new file mode 100644 index 0000000..2c37fca --- /dev/null +++ b/skins/blitz/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 0 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 0 diff --git a/skins/blitz/dir.png b/skins/blitz/dir.png Binary files differnew file mode 100644 index 0000000..f25f5c5 --- /dev/null +++ b/skins/blitz/dir.png diff --git a/skins/blitz/file.png b/skins/blitz/file.png Binary files differnew file mode 100644 index 0000000..175b91f --- /dev/null +++ b/skins/blitz/file.png diff --git a/skins/blitz/footer.txt b/skins/blitz/footer.txt new file mode 100644 index 0000000..2d9fe80 --- /dev/null +++ b/skins/blitz/footer.txt @@ -0,0 +1,10 @@ + </div> <!-- end div container --> +</div> <!-- end div middle max-full-width --> +<footer> + <div class="container"> + <div class="pull-right"> + <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> + </div> + This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s + </div> +</footer> diff --git a/skins/blitz/fossil_100.png b/skins/blitz/fossil_100.png Binary files differnew file mode 100644 index 0000000..23f79ee --- /dev/null +++ b/skins/blitz/fossil_100.png diff --git a/skins/blitz/fossil_80_reversed_darkcyan.png b/skins/blitz/fossil_80_reversed_darkcyan.png Binary files differnew file mode 100644 index 0000000..3bcb393 --- /dev/null +++ b/skins/blitz/fossil_80_reversed_darkcyan.png diff --git a/skins/blitz/fossil_80_reversed_darkcyan_text.png b/skins/blitz/fossil_80_reversed_darkcyan_text.png Binary files differnew file mode 100644 index 0000000..551b377 --- /dev/null +++ b/skins/blitz/fossil_80_reversed_darkcyan_text.png diff --git a/skins/blitz/header.txt b/skins/blitz/header.txt new file mode 100644 index 0000000..73ea072 --- /dev/null +++ b/skins/blitz/header.txt @@ -0,0 +1,48 @@ +<header> + <div class="container"> + + <!-- Header --> + <div class="login pull-right"> + <th1> + if {[info exists login]} { + html "<b>$login</b> — <a class='button' href='$home/login'>Logout</a>\n" + } else { + html "<a class='button' href='$home/login'>Login</a>\n" + } + </th1> + </div> + <div class='logo'> + <h1>$<project_name> + <th1> + if {[anycap jor]} { + html "<a class='rss' href='$home/timeline.rss'></a>" + } + </th1> + <small> $<title></small></h1> + </div> + + <!-- Main Menu --> + <nav class="mainmenu" title="Main Menu"> + <ul> + <th1> + html "<li><a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a></li>\n" + builtin_request_js hbmenu.js + set once 1 + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {$once && [string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + set once 0 + } + html "<li class='$class'>" + if {[string match /* $url]} {set url $home$url} + html "<a href='$url'>$name</a></li>\n" + } + </th1> + </ul> + </nav> + <nav id="hbdrop" class='hbdrop' title="sitemap"></nav> + </div> <!-- end div container --> +</header> +<div class="middle max-full-width"> + <div class="container"> diff --git a/skins/blitz/rss_20.png b/skins/blitz/rss_20.png Binary files differnew file mode 100644 index 0000000..a8fb936 --- /dev/null +++ b/skins/blitz/rss_20.png diff --git a/skins/blitz/ticket.txt b/skins/blitz/ticket.txt new file mode 100644 index 0000000..cc6bd58 --- /dev/null +++ b/skins/blitz/ticket.txt @@ -0,0 +1,115 @@ +<h4>$<title></h4> +<table class="tktDsp"> +<tr><td class="tktDspLabel">Ticket Hash</td> +<th1> +if {[info exists tkt_uuid]} { + if {[hascap s]} { + html "<td class='tktDspValue' colspan='3'>$tkt_uuid " + html "($tkt_id)</td></tr>\n" + } else { + html "<td class='tktDspValue' colspan='3'>$tkt_uuid</td></tr>\n" + } +} else { + if {[hascap s]} { + html "<td class='tktDspValue' colspan='3'>Deleted " + html "(0)</td></tr>\n" + } else { + html "<td class='tktDspValue' colspan='3'>Deleted</td></tr>\n" + } +} +</th1> +<tr><td class="tktDspLabel">Status</td><td class="tktDspValue"> +$<status> +</td> +<td class="tktDspLabel">Type</td><td class="tktDspValue"> +$<type> +</td></tr> +<tr><td class="tktDspLabel">Severity</td><td class="tktDspValue"> +$<severity> +</td> +<td class="tktDspLabel">Priority</td><td class="tktDspValue"> +$<priority> +</td></tr> +<tr><td class="tktDspLabel">Subsystem</td><td class="tktDspValue"> +$<subsystem> +</td> +<td class="tktDspLabel">Resolution</td><td class="tktDspValue"> +$<resolution> +</td></tr> +<tr><td class="tktDspLabel">Last Modified</td><td class="tktDspValue"> +<th1> +if {[info exists tkt_datetime]} { + html $tkt_datetime +} +</th1> +</td> +<th1>enable_output [hascap e]</th1> + <td class="tktDspLabel">Contact</td><td class="tktDspValue"> + $<private_contact> + </td> +<th1>enable_output 1</th1> +</tr> +<tr><td class="tktDspLabel">Version Found In</td> +<td colspan="3" valign="top" class="tktDspValue"> +$<foundin> +</td></tr> + +<th1> +if {[info exists comment]} { + if {[string length $comment]>10} { + html { + <tr> + <td class="tktDescLabel">Description</td> + <td class="tktDescValue" colspan="3"> + } + if {[info exists plaintext]} { + set r [randhex] + wiki "<verbatim-$r links>\n$comment\n</verbatim-$r>" + } else { + wiki $comment + } + html "</td></tr>\n" + } +} +</th1> +</table> + +<div class="tktComments"> +<th1> +set seenRow 0 +set alwaysPlaintext [info exists plaintext] +query {SELECT datetime(tkt_mtime) AS xdate, login AS xlogin, + mimetype as xmimetype, icomment AS xcomment, + username AS xusername + FROM ticketchng + WHERE tkt_id=$tkt_id AND length(icomment)>0} { + if {$seenRow eq "0"} { + html "<h5>User Comments</h5>\n" + set seenRow 1 + } + html "<div class='tktComment'>\n" + html "<div class='tktCommentHeader'>\n" + html "<div class='pull-right'>$xdate</div>\n" + html "<span class='tktCommentLogin'>[htmlize $xlogin]</span>" + if {$xlogin ne $xusername && [string length $xusername]>0} { + html " (claiming to be <span class='tktCommentLogin'>[htmlize $xusername]</span>)" + } + html " commented</div>\n" + html "<div class='tktCommentBody'>\n" + if {$alwaysPlaintext || $xmimetype eq "text/plain"} { + set r [randhex] + if {$xmimetype ne "text/plain"} {html "([htmlize $xmimetype])\n"} + wiki "<verbatim-$r>[string trimright $xcomment]</verbatim-$r>\n" + } elseif {$xmimetype eq "text/x-fossil-wiki"} { + wiki "<p>\n[string trimright $xcomment]\n</p>\n" + } elseif {$xmimetype eq "text/html"} { + wiki "<p><nowiki>\n[string trimright $xcomment]\n</nowiki></p>\n" + } else { + set r [randhex] + wiki "<verbatim-$r links>[string trimright $xcomment]</verbatim-$r>\n" + } + html "</div><!-- end comment body -->\n" + html "</div><!-- end comment -->\n" +} +</th1> +</div> diff --git a/skins/copland/README.md b/skins/copland/README.md new file mode 100644 index 0000000..e76c52e --- /dev/null +++ b/skins/copland/README.md @@ -0,0 +1,4 @@ +# Copland + +Copland is the default skin of this Fossil fork. Its editable SCSS source, +browser tests, and standalone skin export live under `tools/copland/`. diff --git a/skins/copland/css.txt b/skins/copland/css.txt new file mode 100644 index 0000000..67091a9 --- /dev/null +++ b/skins/copland/css.txt @@ -0,0 +1,752 @@ +:root { + color-scheme: light dark; + --page-bg: #fff; + --surface: #fff; + --surface-subtle: #f5f5f5; + --surface-muted: #e9ecef; + --surface-active: #ddd; + --text: #212529; + --text-muted: #6c757d; + --text-faint: #767676; + --border: #ced4da; + --border-strong: #888; + --link: #0645d9; + --link-hover: #002f9f; + --primary: #0056d6; + --primary-hover: #0044aa; + --primary-text: #fff; + --danger: #b00020; + --danger-bg: #f8d7da; + --success: #146c2e; + --success-bg: #d4edda; + --warning-bg: #fff3cd; + --info-bg: #d1ecf1; + --code-bg: #f1f3f5; + --selection: #b9d6ff; + --focus: #ffbf47; + --shadow: rgba(0, 0, 0, 0.12); + --container: 71.25rem; + --gutter: 1rem; + --radius: 0; + --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; +} + +@media (prefers-color-scheme: dark) { + :root { + --page-bg: #212529; + --surface: #212529; + --surface-subtle: #191c1f; + --surface-muted: #2d3237; + --surface-active: #3b4147; + --text: #f1f3f5; + --text-muted: #c2c7cc; + --text-faint: #adb5bd; + --border: #565e65; + --border-strong: #8b949c; + --link: #5c9cff; + --link-hover: #91bcff; + --primary: #4d8ee8; + --primary-hover: #70a7f2; + --primary-text: #101214; + --danger: #ff6b78; + --danger-bg: #57242a; + --success: #65d47d; + --success-bg: #183d24; + --warning-bg: #514318; + --info-bg: #193e47; + --code-bg: #17191b; + --selection: #173f70; + --focus: #ffd166; + --shadow: rgba(0, 0, 0, 0.4); + } +} +* { + box-sizing: border-box; +} + +html { + min-height: 100%; + scrollbar-gutter: stable; + font-size: 16px; +} + +body { + min-height: 100vh; + margin: 0; + padding: 0 0 1rem; + background: var(--page-bg); + color: var(--text); + font-family: var(--font-sans); + font-size: 1rem; + line-height: 1.5; + text-align: initial; +} + +::selection { + background: var(--selection); +} + +.container, +div.content { + width: 100%; + max-width: var(--container); + margin-inline: auto; + padding-inline: var(--gutter); +} + +div.content { + min-height: 45vh; +} + +body a { + color: var(--link); + text-decoration: underline; + text-underline-offset: 0.12em; +} + +body a:hover { + color: var(--link-hover); + text-decoration: none; +} + +a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, +textarea:focus-visible, [tabindex]:focus-visible { + outline: 3px solid var(--focus); + outline-offset: 2px; +} + +h1, h2, h3, h4, h5, h6 { + margin: 1rem 0 0.5rem; + color: var(--text); + font-weight: 500; + line-height: 1.2; +} + +h1 { + font-size: 1.75rem; +} + +h2 { + font-size: 1.45rem; +} + +h3 { + font-size: 1.15rem; + border-bottom: 1px solid var(--border); +} + +h4 { + font-size: 1rem; + border-bottom: 1px solid var(--border); +} + +p { + margin: 0 0 1rem; +} + +hr { + border: 0; + border-top: 1px solid var(--border); +} + +.site-header { + margin-bottom: 0; +} + +.site-header-row { + min-height: 3.25rem; + display: flex; + align-items: center; + gap: 1rem; +} + +.site-brand, +.resource-title a, +.account-nav a, +.mainmenu a { + text-decoration: none; +} + +.site-brand { + flex: 0 0 auto; + color: var(--text); + font-size: 1.25rem; + font-weight: 600; + letter-spacing: -0.025em; +} + +.site-brand::before { + content: ""; + display: inline-block; + width: 0.78rem; + height: 0.78rem; + margin-right: 0.42rem; + border: 2px solid currentColor; + border-radius: 50%; + vertical-align: 0.02rem; +} + +.site-brand:hover, +.resource-title a:hover, +.account-nav a:hover, +.mainmenu a:hover { + color: var(--text); + text-decoration: underline; +} + +.resource-title { + min-width: 0; + display: flex; + align-items: baseline; + gap: 0.4rem; + overflow: hidden; + white-space: nowrap; +} + +.resource-title a, +.resource-page { + overflow: hidden; + text-overflow: ellipsis; +} + +.resource-title a { + color: var(--text); + font-weight: 600; +} + +.resource-separator, .resource-page { + color: var(--text-muted); +} + +.account-nav { + margin-left: auto; + white-space: nowrap; + font-size: 0.9rem; +} + +.resource-nav { + border-bottom: 3px solid var(--surface-active); +} + +.mainmenu { + min-height: 2rem; + display: flex; + align-items: end; + gap: 0; + overflow-x: auto; + scrollbar-width: thin; +} + +.mainmenu a { + flex: 0 0 auto; + padding: 0.25rem 0.85rem 0.18rem; + color: var(--text-muted); + white-space: nowrap; +} + +.mainmenu a.active, +.mainmenu a.selected, +.mainmenu a:hover { + color: var(--text); +} + +.mainmenu a.active, +.mainmenu a.selected { + background: var(--surface-active); +} + +.page-title { + margin-top: 0.9rem; + margin-bottom: 0.75rem; + font-size: 1.35rem; + font-weight: 500; +} + +.site-footer { + margin-top: 2rem; + color: var(--text-muted); + font-size: 0.8rem; +} + +.site-footer .container { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 0.4rem; +} + +pre, code, kbd, samp, tt { + font-family: var(--font-mono); +} + +code, tt { + overflow-wrap: anywhere; +} + +pre { + max-width: 100%; + overflow: auto; + margin: 0 0 1rem; + padding: 0.75rem 1rem; + background: var(--code-bg); + color: var(--text); + font-size: 0.875rem; + line-height: 1.35; + tab-size: 4; +} + +pre a { + color: inherit; +} + +blockquote { + margin: 0 0 1rem; + padding-left: 1rem; + border-left: 4px solid var(--border); +} + +.org-document { + max-width: 100%; +} + +.org-document .org-title { + margin-top: 0; +} + +.org-metadata { + display: grid; + grid-template-columns: max-content minmax(0, 1fr); + gap: 0.15rem 0.75rem; + margin: 0 0 1rem; + color: var(--text-muted); + font-size: 0.92rem; +} + +.org-metadata dt { + font-weight: 600; +} + +.org-metadata dd { + margin: 0; +} + +.org-toc { + margin: 0 0 1.25rem; + padding: 0.75rem 1rem; + border: 1px solid var(--border); + background: var(--surface-subtle); +} + +.org-toc h2 { + margin-top: 0; + font-size: 1.05rem; +} + +.org-toc ol { + margin: 0; + padding-left: 1.5rem; +} + +.org-toc-level-2 { + margin-left: 1rem; +} + +.org-toc-level-3 { + margin-left: 2rem; +} + +.org-toc-level-4, .org-toc-level-5, .org-toc-level-6 { + margin-left: 3rem; +} + +.org-table { + display: block; + overflow-x: auto; +} + +.org-block { + border-left: 3px solid var(--border-strong); +} + +.org-example { + color: var(--text); +} + +.org-unknown-block { + border-left-color: var(--danger); +} + +table { + width: 100%; + margin-bottom: 1rem; + border-collapse: collapse; + color: var(--text); +} + +th { + text-align: left; + font-weight: 600; +} + +th, td { + padding: 0.28rem 0.5rem; + vertical-align: top; + border-top: 1px solid var(--border); +} + +thead th { + border-bottom: 2px solid var(--border-strong); +} + +tbody tr:nth-child(odd) { + background: color-mix(in srgb, var(--surface-subtle) 70%, transparent); +} + +table.browser, table.report, table.timelineTable { + font-size: 0.92rem; +} + +table.browser td:first-child, table.browser td:nth-child(2) { + font-family: var(--font-mono); +} + +input, button, select, textarea { + font: inherit; +} + +input[type=text], input[type=search], input[type=email], input[type=password], +input[type=url], input[type=number], textarea, select { + max-width: 100%; + padding: 0.35rem 0.5rem; + border: 1px solid var(--border-strong); + border-radius: var(--radius); + background: var(--surface); + color: var(--text); +} + +textarea { + width: 100%; +} + +label { + display: inline-block; + margin-bottom: 0.25rem; +} + +button, input[type=submit], input[type=button], .button, a.button { + display: inline-block; + padding: 0.35rem 0.7rem; + border: 1px solid var(--primary); + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-text); + cursor: pointer; + line-height: 1.25; + text-decoration: none; +} + +button:hover, input[type=submit]:hover, input[type=button]:hover, .button:hover { + border-color: var(--primary-hover); + background: var(--primary-hover); +} + +button:disabled, input:disabled { + cursor: not-allowed; + opacity: 0.65; +} + +fieldset { + margin: 0 0 1rem; + border: 1px solid var(--border); +} + +legend { + padding-inline: 0.35rem; +} + +.submenu, .sectionmenu { + margin: 0 0 1rem; + padding: 0.4rem 0.6rem; + background: var(--surface-subtle); + border: 1px solid var(--border); +} + +.submenu a, .sectionmenu a { + margin-right: 0.75rem; +} + +.generalError, .error, .fatalError, .loginError, +.warning, .notice, .success { + margin: 0.75rem 0; + padding: 0.65rem 0.8rem; + border: 1px solid var(--border); +} + +.generalError, .error, .fatalError, .loginError { + background: var(--danger-bg); + color: var(--text); +} + +.warning { + background: var(--warning-bg); +} + +.notice { + background: var(--info-bg); +} + +.success { + background: var(--success-bg); +} + +.timelineDate { + margin-top: 1rem; + color: var(--text); + font-weight: 600; +} + +.timelineHistDsp { + color: var(--text-muted); +} + +.timelineModernCell, .timelineColumnarCell, .timelineDetailCell { + padding-block: 0.35rem; +} + +.timelineModernDetail { + opacity: 1; +} + +.timelineCompactComment, .timelineComment { + line-height: 1.35; +} + +.timelineTime { + color: var(--text-muted); + white-space: nowrap; +} + +.timelineGraph { + min-width: 2rem; +} + +.tl-node { + border-radius: 50%; +} + +.timelineModernCell a, +.timelineColumnarCell a, +.timelineDetailCell a { + color: var(--link) !important; +} + +.timelineModernCell a:hover, +.timelineColumnarCell a:hover, +.timelineDetailCell a:hover { + color: var(--link-hover) !important; +} + +.filetree { + font-family: var(--font-mono); + font-size: 0.9rem; +} + +.filetree ul { + padding-left: 1.25rem; +} + +.filetree a { + color: var(--text); +} + +.filetree a:hover { + color: var(--link); +} + +.fileage tr:hover, table.browser tr:hover { + background: var(--surface-active); +} + +.diff, .udiff, .sbsdiff { + font-family: var(--font-mono); + font-size: 0.82rem; +} + +.diff pre, .udiff pre, .sbsdiff pre { + background: transparent; +} + +.diffln, .diffhr { + color: var(--text-muted); + background: var(--surface-muted); +} + +.diffadd, .diffins { + background: var(--success-bg); +} + +.diffrm, .diffdel { + background: var(--danger-bg); +} + +.diffchng { + background: var(--warning-bg); +} + +.selectedText { + background: var(--selection); +} + +.forumPost, .forumTime, .forumSel, .forumHierRoot, .forumHier { + border-color: var(--border); +} + +.forumPost, .forumTime { + background: var(--surface-subtle); + color: var(--text); +} + +.forumPostBody { + overflow-wrap: anywhere; +} + +.forumPostBody img, .wiki-content img, .markdown img { + max-width: 100%; + height: auto; +} + +.ticketDspLabel, .ticketDspValue { + padding: 0.35rem 0.5rem; +} + +.ticketDspLabel { + color: var(--text-muted); + font-weight: 600; +} + +.ticketDspValue { + border-bottom: 1px solid var(--border); +} + +.branchname, .tagname, .wikiTagCancelled, .infoTagCancelled { + display: inline-block; + padding: 0.05rem 0.3rem; + background: var(--surface-muted); + color: var(--text); + font-size: 0.82rem; +} + +.statistics-report-table-events th, .statistics-report-table-events td { + text-align: right; +} + +.statistics-report-table-events th:first-child, .statistics-report-table-events td:first-child { + text-align: left; +} + +.accordion_panel { + border-color: var(--border); + background: var(--surface); +} + +.accordion_marker { + color: var(--text-muted); +} + +body.repolist .resource-title, +body.repolist .resource-nav, +body.repolist > .page-title { + display: none; +} + +body.repolist div.content { + padding-top: 1rem; +} + +body.repolist table td:first-child { + font-family: var(--font-mono); + font-weight: 600; +} + +@media (prefers-color-scheme: dark) { + img { + opacity: 0.92; + } + body .timelineModernCell, + body .timelineColumnarCell, + body .timelineDetailCell, + .timelineModernCell[style*=background-color], + .timelineColumnarCell[style*=background-color], + .timelineDetailCell[style*=background-color], + td[style*=background-color] { + background-color: var(--surface-subtle) !important; + color: var(--text) !important; + } + .diffadd, .diffins { + color: var(--text); + } + .diffrm, .diffdel { + color: var(--text); + } +} +@media (max-width: 48rem) { + :root { + --gutter: 0.75rem; + } + .site-header-row { + min-height: 2.8rem; + gap: 0.65rem; + } + .resource-page, .resource-separator { + display: none; + } + .mainmenu a { + padding-inline: 0.65rem; + } + .page-title { + font-size: 1.2rem; + } + table:not(.sbsdiffcols) { + display: block; + max-width: 100%; + overflow-x: auto; + } + .desktoponly { + display: none !important; + } +} +@media (max-width: 36rem) { + .site-brand { + font-size: 1.1rem; + } + .resource-title { + font-size: 0.9rem; + } + .account-nav { + font-size: 0.82rem; + } + .page-title { + margin-top: 0.7rem; + } + pre { + padding: 0.6rem 0.7rem; + } +} +@media print { + .resource-nav, .account-nav, .submenu, .sectionmenu, .site-footer { + display: none !important; + } + body, pre, code { + background: #fff !important; + color: #000 !important; + } + a { + color: #000; + text-decoration: underline; + } + div.content, .container { + max-width: none; + padding: 0; + } +} diff --git a/skins/copland/details.txt b/skins/copland/details.txt new file mode 100644 index 0000000..17758f6 --- /dev/null +++ b/skins/copland/details.txt @@ -0,0 +1,9 @@ +pikchr-background: "" +pikchr-fontscale: "0.9" +pikchr-foreground: "" +pikchr-scale: "1.1" +timeline-arrowheads: 1 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 0 + diff --git a/skins/copland/footer.txt b/skins/copland/footer.txt new file mode 100644 index 0000000..ff58146 --- /dev/null +++ b/skins/copland/footer.txt @@ -0,0 +1,10 @@ +<footer class="site-footer"> + <div class="container"> + <span>Copland</span> + <span aria-hidden="true">·</span> + <span>Powered by Fossil $release_version</span> + <span aria-hidden="true">·</span> + <span>Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s</span> + </div> +</footer> + diff --git a/skins/copland/header.txt b/skins/copland/header.txt new file mode 100644 index 0000000..2aeef09 --- /dev/null +++ b/skins/copland/header.txt @@ -0,0 +1,42 @@ +<header class="site-header"> + <div class="container site-header-row"> + <a class="site-brand" href="$home$index_page">Copland</a> + <div class="resource-title"> + <a href="$home$index_page">$<project_name></a> + <span class="resource-separator" aria-hidden="true">/</span> + <span class="resource-page">$<title></span> + </div> + <div class="account-nav"> + <th1> + if {[info exists login]} { + html "<a href='$home/login'>$login</a>" + } else { + html "<a href='$home/login'>Log in</a>" + } + </th1> + </div> + </div> + <div class="resource-nav"> + <nav class="container mainmenu" aria-label="Repository"> + <th1> + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /chat* $url] || [string match chat* $url] + || [string match /taglist* $url] || [string match taglist* $url] + || [string match /forum* $url] || [string match forum* $url] + || [string match /reportlist* $url] || [string match reportlist* $url] + || [string match /ticket* $url] || [string match ticket* $url] + || [string match /tkt* $url] || [string match tkt* $url]} continue + if {[string match /* $url]} { + if {[string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + } + set url $home$url + } + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> + </nav> + </div> +</header> +<h1 class="container page-title">$<title></h1> diff --git a/skins/copland/js.txt b/skins/copland/js.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/skins/copland/js.txt @@ -0,0 +1 @@ + diff --git a/skins/darkmode/css.txt b/skins/darkmode/css.txt new file mode 100644 index 0000000..8a9d234 --- /dev/null +++ b/skins/darkmode/css.txt @@ -0,0 +1,603 @@ +/* General settings for the entire page */ +body { + margin: 0ex 1ex; + padding: 0; + background-color: #1f1f1f; + color: #ffffffe0; + font-family: sans-serif; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 2em; + font-weight: bold; + text-align: center; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + text-align: right; + vertical-align: bottom; + color: #ddddddc9; + font-size: 0.8em; + font-weight: bold; + white-space: nowrap; +} +/* The leftoftitle is a <div> to the left of the title <div> +** that contains the same text as the status div. But we want +** the area to show as blank. The purpose is to cause the +** title to be exactly centered. */ +div.leftoftitle { + visibility: hidden; +} + +/* The header across the top of the page */ +header { + display: table; + width: 100%; +} + +/* The main menu bar that appears at the top of the page beneath +** the header */ +nav.mainmenu { + padding: 0.25em 0.5em; + font-size: 0.9em; + font-weight: bold; + text-align: center; + border-top-left-radius: 0.5em; + border-top-right-radius: 0.5em; + border-bottom: 1px dotted rgba(200,200,200,0.3); + z-index: 21; /* just above hbdrop */ +} +nav#hbdrop { + background-color: #1f1f1f; + border: 2px solid #303536; + border-radius: 0 0 0.5em 0.5em; + display: none; + left: 2em; + width: calc(100% - 4em); + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ +} + +nav.mainmenu, div.submenu, div.sectionmenu { + color: #ffffffcc; + background-color: #303536/*#0000ff60*/; +} +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 0.15em 0.5em 0.15em 0; + font-size: 0.9em; + text-align: center; + border-bottom-left-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} +a, a:visited { + color: rgba(127, 201, 255, 0.9); + display: inline; + text-decoration: none; +} +a:visited {opacity: 0.8} +nav.mainmenu a, div.submenu a, +div.sectionmenu>a.button, div.submenu label, +footer a { + padding: 0.15em 0.5em; +} +nav.mainmenu a.active { + border-bottom: 1px solid #FF4500f0; +} +a:hover, +a:visited:hover { + background-color: #FF4500f0; + color: rgba(24,24,24,0.8); + border-radius: 0.1em; +} +.fileage tr:hover, +div.filetreeline:hover { + background-color: #333; +} +div.file-change-line button{ + background-color: #484848 +} +button, +input, +optgroup, +select, +textarea { + background: inherit; + color: inherit; + font: inherit; + margin: 0 +} +.button, +button, +input[type=button], +input[type=submit], +input[type=reset]{ + color: #ddd; + background-color: #446979; + border-radius: 5px; + border: 0; +} +.button:hover, +button:hover, +input[type=button]:hover, +input[type=submit]:hover, +input[type=reset]:hover { + background-color: #FF4500f0; + color: rgba(24,24,24,0.8); + outline: 0; +} +.button:disabled, +button:disabled, +input[type=button]:disabled, +input[type=submit]:disabled, +input[type=reset]:disabled{ + color: #222; + background-color: #b0b0b0; + opacity: 0.8; +} +.button:focus, +button:focus, +input[type=button]:focus, +input[type=submit]:focus, +input[type=reset]:focus { + outline: 2px outset #333; + border-color: #888; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 0ex 1ex 1ex 1ex; +} + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0; + margin-top: 1em; + padding: 0.1em; + font-size: 1.2em; + font-weight: bold; + background-color: #303536/*#0000ff60*/; + white-space: nowrap; + border-top-left-radius: 0.5em; + border-top-right-radius: 0.5em; + border-bottom: 1px dotted rgba(200,200,200,0.3); +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #303536; + border: 1px #558195 solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + clear: both; + font-size: 0.8em; + padding: 0.15em 0.5em; + text-align: right; + background-color: #303536/*#0000ff60*/; + border-top: 1px dotted rgba(200,200,200,0.3); + border-bottom-left-radius: 0.5em; + border-bottom-right-radius: 0.5em; +} + +/* Hyperlink colors in the footer */ + +pre { + border-radius: 0.25em; +} +pre > code { + display: block; +} +/* verbatim blocks */ +pre.verbatim { + padding: 0.12em; + white-space: pre-wrap; +} +pre:not(.verbatim) { + margin-left: 1rem; + margin-right: 1rem; + background-color: rgba(200,200,200, 0.1); + padding: 0.5em 1em; +} + +/* The label/value pairs on (for example) the ci page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} + +h1 {margin: 0.6em 0} +h2 {margin: 0.5em 0} +h3 {margin: 0.5em 0} +h4 {margin: 0.5em 0} +h5 {margin: 0.5em 0} + + +/********** +td.timelineTime, +tr.timelineBottom td { + border-bottom: 0 +} +table.timelineTable { + border-spacing: 0.3em 0.3em; +} +table.timelineTable tr td { + padding: 0.5em 1em; +} +.timelineModernCell[id], +.timelineColumnarCell[id], +.timelineDetailCell[id] { + background-color: #ffffff40; +} +table.timelineTable tr td:nth-of-type(2) { + background-color: #ffffffc0; +} +div.tl-canvas { +} +*/ + +.fossil-tooltip, +.fossil-toast-message { + background-color: rgba(251, 106, 0, 1); + border-color: rgba(127, 201, 255, 0.9); + color: black; +} + +/************************************************************************ +timeline... +************************************************************************/ +table.timelineTable tr:not(.timelineDateRow){ + background-color: #ffffff17; +} +table.timelineTable tr:not(.timelineDateRow):hover{ + background-color: #FF450080; +} +table.timelineTable tr td:first-of-type { + vertical-align: middle; + padding: 0.2em 0.5em; +} +div.timelineDate { + font-weight: 700; + white-space: nowrap; + border-radius: 0.2em; +} +td.timelineTime { + text-align: right; + white-space: nowrap; +} +td.timelineGraph { + width: 20px; + text-align: left; + border-bottom: 0 +} +a.timelineHistLink { + /*text-transform: lowercase*/ +} +span.timelineComment { + padding: 0 5px +} +.report th, +span.timelineEllipsis { + cursor: pointer +} +table.timelineTable { + border-spacing: 0 0.2em; +} +.timelineModernCell, .timelineColumnarCell, +.timelineDetailCell, .timelineCompactCell, +.timelineVerboseCell { + vertical-align: top; + text-align: left; + padding: .75em; + border-radius: 0.25em; + background: inherit /*#000*/; +} +.timelineSelected > .timelineColumnarCell, +.timelineSelected > .timelineCompactCell, +.timelineSelected > .timelineDetailCell, +.timelineSelected > .timelineModernCell, +.timelineSelected > .timelineVerboseCell { + padding: .75em; + border-radius: 0.2em; + border: 1px solid #ff8000; + vertical-align: top; + text-align: left; + background: #442800 +} + +/* Timeline has a blank line at the bottom. Apparently it's to provide the + graph with a good starting place. Hiding it causes a slight graph + unsightliness, but we can change its bg color. */ +table.timelineTable tr.timelineBottom, +table.timelineTable tr.timelineBottom:hover { + background: inherit; +} +span.timelineSelected { + border-radius: 0.2em; + border: 1px solid #ff8000; + /*vertical-align: top; + text-align: left;*/ + background: #442800 +} +.timelineSelected { + background-color: #ffffff40; +} +.timelineSecondary {} +.timelineSecondary > .timelineColumnarCell, +.timelineSecondary > .timelineCompactCell, +.timelineSecondary > .timelineDetailCell, +.timelineSecondary > .timelineModernCell, +.timelineSecondary > .timelineVerboseCell { + padding: .75em; + border-radius: 5px; + border: solid #0080ff; + /*vertical-align: top; + text-align: left;*/ + background: #002844 +} +span.timelineSecondary { + border-radius: 5px; + border: solid #0080ff; + /*vertical-align: top; + text-align: left;*/ + background: #002844 +} +.timelineCurrent > .timelineColumnarCell, +.timelineCurrent > .timelineCompactCell, +.timelineCurrent > .timelineDetailCell, +.timelineCurrent > .timelineModernCell, +.timelineCurrent > .timelineVerboseCell { + /*vertical-align: top; + text-align: left;*/ + padding: .75em; + border-radius: 5px; + border: dashed #ff8000 +} +.timelineModernCell[id], .timelineColumnarCell[id], .timelineDetailCell[id] { + background-color: inherit;/*#000*/ +} +.tl-canvas { + margin: 0 6px 0 10px +} +.tl-rail { + width: 18px +} +.tl-mergeoffset { + width: 2px +} +.tl-nodemark { + margin-top: .8em +} +.tl-node { + width: 10px; + height: 10px; + border: 2px solid #bbb; + background: #111; + cursor: pointer +} +.tl-node.leaf:after { + content: ''; + position: absolute; + top: 3px; + left: 3px; + width: 4px; + height: 4px; + background: #bbb +} +.tl-node.closed-leaf svg { + position: absolute; + top: 0px; + left: 0px; + width: 10px; + height: 10px; + color: #bbb; +} +.tl-node.sel:after { + content: ''; + position: absolute; + top: 1px; + left: 1px; + width: 8px; + height: 8px; + background: #ff8000 +} +.tl-arrow { + width: 0; + height: 0; + transform: scale(.999); + border: 0 solid transparent +} +.tl-arrow.u { + margin-top: -1px; + border-width: 0 3px; + border-bottom: 7px solid +} +.tl-arrow.u.sm { + border-bottom: 5px solid #bbb +} +.tl-line { + background: #bbb; + width: 2px +} +.tl-arrow.merge { + height: 1px; + border-width: 2px 0 +} +.tl-arrow.merge.l { + border-right: 3px solid #bbb +} +.tl-arrow.merge.r { + border-left: 3px solid #bbb +} +.tl-line.merge { + width: 1px +} +.tl-arrow.cherrypick { + height: 1px; + border-width: 2px 0; +} +.tl-arrow.cherrypick.l { + border-right: 3px solid #bbb; +} +.tl-arrow.cherrypick.r { + border-left: 3px solid #bbb; +} +.tl-line.cherrypick.h { + width: 0px; + border-top: 1px dashed #bbb; + border-left: 0px dashed #bbb; + background: rgba(255,255,255,0); +} +.tl-line.cherrypick.v { + width: 0px; + border-top: 0px dashed #bbb; + border-left: 1px dashed #bbb; + background: rgba(255,255,255,0); +} + +/************************************************************************ +diffs... +************************************************************************/ +td.diffln ins { + background-color: #559855; + color: #000; + text-decoration: none; +} +td.diffln del { + background-color: #c55; + color: #000; + text-decoration: none; +} +td.difftxt del { + background-color: inherit; + text-decoration: none; +} +td.difftxt del > del { + background-color: #c55; + color: #000; + text-decoration: none; +} +td.difftxt ins { + background-color: inherit; + text-decoration: none; +} +td.difftxt ins > ins { + background-color: #559855; + color: #000; + text-decoration: none; +} +tr.diffskip.jchunk { + background-color: black; +} +tr.diffskip > td.chunkctrl .jcbutton { + background-color: #303536; +} + +/************************************************************************ +************************************************************************/ +body.wikiedit #fossil-status-bar, +body.fileedit #fossil-status-bar{ + border-radius: 0.25em 0.25em 0 0; +} +.tab-container > .tabs { + border-radius: 0.25em; +} + +blockquote.file-content { + margin: 0; +} +blockquote.file-content > pre { + padding: 0; +} +blockquote.file-content > pre > code { + padding: 0 0.5em; +} +svg.pikchr { + /* swap the pikchr svg colors around so they're readable in + this dark theme. 2020-02: changes in fossil have made this + obsolete. */ + /*filter: invert(1) hue-rotate(180deg);*/ +} +span.snippet>mark { + color: white; + font-weight: bold; +} +input, textarea, select { + border: 1px solid rgba(127, 201, 255, 0.9); + padding: 1px; +} +select { + color: #1f1f1f; + background: #ffffffe0; +} +.capsumOff { + background-color: #222; +} +.capsumRead { + background-color: #262; +} +.capsumWrite { + background-color: #662; +} + +body.forum div.forumSel { + background: inherit; + border-left-width: 0.5em; + border-left-style: double; +} + +body.forum .debug { + background-color: #FF4500f0; + color: rgba(24,24,24,0.8); +} + +body.forum .forumPosts.fileage tr:hover { + background-color: #333; + color: rgba(24,24,24,0.8); +} +body.forum .forumPosts.fileage tr:hover { + background-color: #333; + color: rgba(24,24,24,0.8); +} +body.forum .forumPosts.fileage tr:hover > td:nth-child(1), +body.forum .forumPosts.fileage tr:hover > td:nth-child(3) { + color: #ffffffe0; +} + +body.forum .forumPostBody > div blockquote { + border: 1px inset; + padding: 0 0.5em; +} + +body.forum .forumPosts.fileage a:visited { + color: rgba(98, 150, 205, 0.9); +} + +body.report table.report tr td { color: black } +body.report table.report a { color: blue } +body.tkt td.tktDspValue { color: black } +body.tkt td.tktDspValue a { color: blue } + +body.branch .brlist > table > tbody > tr:hover:not(.selected), +body.branch .brlist > table > tbody > tr.selected { + background-color: #442800; +} + +p.noMoreShun { + color: #e5e500; +} diff --git a/skins/darkmode/details.txt b/skins/darkmode/details.txt new file mode 100644 index 0000000..03a63de --- /dev/null +++ b/skins/darkmode/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 0 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 1 diff --git a/skins/darkmode/footer.txt b/skins/darkmode/footer.txt new file mode 100644 index 0000000..1714242 --- /dev/null +++ b/skins/darkmode/footer.txt @@ -0,0 +1,8 @@ +<footer> + <div class="container"> + <div class="pull-right"> + <a href="https://fossil-scm.org/">Fossil $release_version $manifest_version $manifest_date</a> + </div> + This page was generated in about <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s + </div> +</footer> diff --git a/skins/darkmode/header.txt b/skins/darkmode/header.txt new file mode 100644 index 0000000..e95c4f9 --- /dev/null +++ b/skins/darkmode/header.txt @@ -0,0 +1,31 @@ +<header> + <div class="status leftoftitle"><th1> + if {[info exists login]} { + set logintext "<a href='$home/login'>$login</a>\n" + } else { + set logintext "<a href='$home/login'>Login</a>\n" + } + html $logintext + </th1></div> + <div class="title">$<title></div> + <div class="status"><nobr><th1> + html $logintext + </th1></nobr></div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} { + if {[string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + } + set url $home$url + } + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> diff --git a/skins/default/README.md b/skins/default/README.md new file mode 100644 index 0000000..57e0fea --- /dev/null +++ b/skins/default/README.md @@ -0,0 +1,10 @@ +This skin was originally contributed by Étienne Deparis on 2015-02-22, +promoted to the default on 2015-03-14, and subsequently changed by many: + + https://fossil-scm.org/home/finfo/skins/default/css.txt + https://fossil-scm.org/home/blame?filename=skins/default/css.txt&checkin=trunk + +In February 2024, a sufficiently large set of changes were made to the +skin that we forked the old version for the benefit of those who needed +to reference the old one — as when migrating custom skin changes to work +atop the new default — or who simply preferred it. See ../etienne. diff --git a/skins/default/css.txt b/skins/default/css.txt new file mode 100644 index 0000000..0269740 --- /dev/null +++ b/skins/default/css.txt @@ -0,0 +1,789 @@ +/* Overall page style; vi: filetype=css + */ + +body { + margin: 0 auto; + background-color: white; + font-family: sans-serif; +} + +a { + /* Unvisited links are a lightness-adjusted version of this skin's + * header blue, balancing contrast between the body text and the + * background in order to meet the goals specified by the WCAG 2 + * accessbility standard, earning us an "AA" grade according to + * the calculator result here: + * + * https://webaim.org/resources/linkcontrastchecker/?fcolor=2E2E2E&bcolor=FFFFFF&lcolor=3779BF + * + * It is for this same reason that our not-quite-black body text + * color is the shade of dark gray that it is. It can't be any + * lighter and still allow us to meet both targets. */ + color: #3779BF; + text-decoration: none; +} +a:hover { + color: #4183C4; + text-decoration: underline; +} + + +/* Page title, above menu bars */ + +.title { + color: #4183C4; + float: left; +} +h1.page-title { + font-size: 1.60em; /* match content > h1 */ + margin-bottom: 0; /* div.content top margin suffices */ + display: none; /* don't use body-area h1 except… */ +} +.artifact h1.page-title, +.dir h1.page-title, +.doc h1.page-title, +.wiki h1.page-title { + display: block; /* …for potentially long doc titles… */ + color: #444; +} +.artifact .title > .page-title, +.dir .title > .page-title, +.doc .title > .page-title, +.wiki .title > .page-title { + display: none; /* …where we suppress the title area h1 instead */ +} +.title h1 { + display: inline; + font-size: 2.20em; +} +.title h1:after { + content: " / "; + color: #777; + font-weight: normal; +} +.artifact .title h1:after, +.dir .title h1:after, +.doc .title h1:after, +.wiki .title h1:after { + content: ""; /* hide solidus for docs along with title h1 */ +} +.status { + float: right; + font-size: 0.8em; +} +div.logo { + float: left; + padding-right: 10px; +} +div.logo img { + max-height: 2em; /* smaller than title to keep it above the baseline */ +} + + +/* Main menu and optional sub-menu */ + +.mainmenu { + clear: both; + background: #eaeaea linear-gradient(#fafafa, #eaeaea) repeat-x; + border: 1px solid #eaeaea; + border-radius: 5px; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + z-index: 21; /* just above hbdrop */ +} +.mainmenu a { + text-decoration: none; + color: #777; + border-right: 1px solid #eaeaea; +} +.mainmenu a.active, +.mainmenu a:hover { + color: #000; + border-bottom: 2px solid #D26911; +} +nav#hbdrop { + background-color: white; + border: 1px solid black; + border-top: white; + border-radius: 0 0 0.5em 0.5em; + display: none; + font-size: 80%; + left: 2em; + width: 90%; + padding-right: 1em; + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ +} + +.submenu { + font-size: 0.8em; + padding: 10px; + border-bottom: 1px solid #ccc; +} +.submenu a, .submenu label { + padding: 10px 11px; + text-decoration: none; + color: #777; +} +.submenu label { + white-space: nowrap; +} +.submenu a:hover, .submenu label:hover { + padding: 6px 10px; + border: 1px solid #ccc; + border-radius: 5px; + color: #000; +} +span.submenuctrl, span.submenuctrl input, select.submenuctrl { + color: #777; +} +span.submenuctrl { + white-space: nowrap; +} + + +/* Main document area; elements common to most pages. */ + +.content { + padding: 1ex; + color: #2e2e2e; /* justified above in "WCAG 2" comment */ +} +.content h1 { font-size: 1.60em; color: #444; } +.content h2 { font-size: 1.45em; color: #444; } +.content h3 { font-size: 1.15em; color: #444; } +.content h4 { font-size: 1.05em; color: #444; } +.content h5 { font-size: 1.00em; color: #444; } + +.section { + font-size: 1em; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #d8d8d8; + border-radius: 3px 3px 0 0; + padding: 9px 10px 10px; + margin: 10px 0; +} +.sectionmenu { + border: 1px solid #d8d8d8; + border-radius: 0 0 3px 3px; + border-top: 0; + margin-top: -10px; + margin-bottom: 10px; + padding: 10px; +} +.sectionmenu a { + display: inline-block; + margin-right: 1em; +} + +hr { + color: #eee; +} + + +/* Page footer */ + +footer { + border-top: 1px solid #ccc; + padding: 10px; + font-size: 0.8em; + margin-top: 10px; + color: #ccc; +} + +/* Forum */ + +.forum a:visited { + color: #6A7F94; +} + +div.forumSel { + animation: 1s linear 0s sel-fade; + background-color: white; /* animation end state */ + border-left: 4px solid black; /* after-animation selection indicator */ +} +@keyframes sel-fade { + from { background-color: #cef; } + to { background-color: white; } +} + +.forum form input { + margin: 0.5em 0; +} + + +/* Markdown and Wiki-formatted pages: /wiki, /doc, /file... */ + +.markdown blockquote, p.blockquote, .sidebar { + /* Override default.css version with our accent colors. Background is + * the solid version of rgba(65, 131, 196, 0.1) on white, needed to + * avoid tinting pre block backgrounds going "under" them. */ + background-color: #ebf2f9; + border-left-color: #4183c4; +} +div.sidebar { + /* Add extra whitespace between sidebar and content, both for spacing + * and to put a gap between it and any <pre> blocks that happen to run + * up against it. */ + outline: 1em solid white; +} + +/* Mark inline code fragments in the near-universal manner pioneered by + * Stack Overflow, then picked up by approximately everyone, including + * us, now. + * + * This combinatorial selector explosion results from a need to apply + * these stylings inside multiple page container types, multiplied by + * the surprisingly large number of tags HTML defines for semantically + * differentiated monospaced inline markup. If we do not target the + * elements we want to affect carefully, we'll end up overreaching, + * styling Fossil UI elements that use these tags for local purposes. + * + * HTML generated and emitted by Fossil UI does not always fall under + * the skin's generic rules; we must avoid intruding on its domain. + * Our limited intent here is to style user content only, where it is + * unreasonable to expect its author to take the time to hand-craft + * per-document styling. Contrast Fossil UI, which often does exactly + * that in order to get particular results. + * + * Its rough equivalent in Sass syntax is far more compact, thus clearer: + * + * .artifact, .dir, .doc, .forum, .wiki // the page types we target + * > .content // hands off header & footer + * &, > .fossil-doc, > .markdown // wiki, HTML & MD emb docs + * > p // in top-level paras only + * > code, > kbd, > samp, > tt, > var // monospaced tag types + * background-color: #f4f4f4 // pale gray box which… + * padding: 0 4px // …extends around the sides + * + * We then need something similar for the block-level pre elements. + * + * The CSS below is based on feeding that Sass code through this: + * + * $ sassc code.sass | sed -e 's/, /,\n/g' + * + * …then hand-cleansing it to make it _somewhat_ more understandable. + * That largely amounts to whitespace tweaks, but we've also done things + * like trim back the forum-specific styling to apply to the default MD + * markup only; direct HTML formatting isn't even an option there, and + * while wiki markup _is_ supported, MD was the default from day 1. + * Another quirk of the forum post handling is that the .markdown class + * gets applied per-post, not up at the top level as with the wiki, + * embedded docs, etc. + */ +.artifact > .content > p > code, +.artifact > .content > p > kbd, +.artifact > .content > p > samp, +.artifact > .content > p > tt, +.artifact > .content > p > var, +.artifact > .content > .fossil-doc > p > code, +.artifact > .content > .fossil-doc > p > kbd, +.artifact > .content > .fossil-doc > p > samp, +.artifact > .content > .fossil-doc > p > tt, +.artifact > .content > .fossil-doc > p > var, +.artifact > .content > .markdown > p > code, +.artifact > .content > .markdown > p > kbd, +.artifact > .content > .markdown > p > samp, +.artifact > .content > .markdown > p > tt, +.artifact > .content > .markdown > p > var, +.dir > .content > p > code, +.dir > .content > p > kbd, +.dir > .content > p > samp, +.dir > .content > p > tt, +.dir > .content > p > var, +.dir > .content > .fossil-doc > p > code, +.dir > .content > .fossil-doc > p > kbd, +.dir > .content > .fossil-doc > p > samp, +.dir > .content > .fossil-doc > p > tt, +.dir > .content > .fossil-doc > p > var, +.dir > .content > .markdown > p > code, +.dir > .content > .markdown > p > kbd, +.dir > .content > .markdown > p > samp, +.dir > .content > .markdown > p > tt, +.dir > .content > .markdown > p > var, +.doc > .content > p > code, +.doc > .content > p > kbd, +.doc > .content > p > samp, +.doc > .content > p > tt, +.doc > .content > p > var, +.doc > .content > .fossil-doc > p > code, +.doc > .content > .fossil-doc > p > kbd, +.doc > .content > .fossil-doc > p > samp, +.doc > .content > .fossil-doc > p > tt, +.doc > .content > .fossil-doc > p > var, +.doc > .content > .markdown > p > code, +.doc > .content > .markdown > p > kbd, +.doc > .content > .markdown > p > samp, +.doc > .content > .markdown > p > tt, +.doc > .content > .markdown > p > var, +.forum > .content .markdown > p > code, +.forum > .content .markdown > p > kbd, +.forum > .content .markdown > p > samp, +.forum > .content .markdown > p > tt, +.forum > .content .markdown > p > var, +.wiki > .content > p > code, +.wiki > .content > p > kbd, +.wiki > .content > p > samp, +.wiki > .content > p > tt, +.wiki > .content > p > var, +.wiki > .content > .fossil-doc > p > code, +.wiki > .content > .fossil-doc > p > kbd, +.wiki > .content > .fossil-doc > p > samp, +.wiki > .content > .fossil-doc > p > tt, +.wiki > .content > .fossil-doc > p > var, +.wiki > .content > .markdown > p > code, +.wiki > .content > .markdown > p > kbd, +.wiki > .content > .markdown > p > samp, +.wiki > .content > .markdown > p > tt, +.wiki > .content > .markdown > p > var, +.artifact > .content > pre, +.artifact > .content > .fossil-doc > pre, +.artifact > .content > .markdown > pre, +.dir > .content > pre, +.dir > .content > .fossil-doc > pre, +.dir > .content > .markdown > pre, +.doc > .content > pre, +.doc > .content > .fossil-doc > pre, +.doc > .content > .markdown > pre, +.forum > .content .markdown > pre, +.wiki > .content > pre, +.wiki > .content > .fossil-doc > pre, +.wiki > .content > .markdown > pre { + background-color: #f4f4f4; + padding: 0 4px; +} +.content pre, table.numbered-lines > tbody > tr { + hyphens: none; + line-height: 1.25; +} + +.content ul:not(.browser) > li { + list-style-type: disc; +} + +div.filetree ul li.dir, +div.filetree ul li.subdir, +div.filetree ul li.file{ + list-style-type: none; +} + +.artifact > .content table, +.dir > .content table, +.doc > .content table, +.wiki > .content table { + background-color: #f0f5f9; + border: 1px solid #a7c2dc; + border-radius: 0.5em; + border-spacing: 0; + padding: 6px; +} +.artifact > .content th, +.dir > .content th, +.doc > .content th, +.wiki > .content th { + border-bottom: 1px solid #dee8f2; + padding-bottom: 4px; + padding-right: 6px; +} +.artifact > .content tr > th, +.dir > .content tr > th, +.doc > .content tr > th, +.wiki > .content tr > th { + background-color: #dee8f0; +} +.artifact > .content tr:nth-child(odd), +.dir > .content tr:nth-child(odd), +.doc > .content tr:nth-child(odd), +.wiki > .content tr:nth-child(odd) { + background-color: #e0e8ee; +} +.artifact > .content td, +.dir > .content td, +.doc > .content td, +.wiki > .content td { + padding-bottom: 4px; + padding-right: 6px; +} +th { + /* Special rule at high level to override default centering of table + header cell text. If it isn't at this level, it can't be + overridden in the HTML, as by the MD table generator's handling + of `:` alignment markers. */ + text-align: left; +} + +/* Wiki adjustments */ +pre.verbatim { + /* keep code examples from crashing into sidebars, etc. */ + white-space: pre-wrap; +} +textarea.wikiedit { + /* Monospace fonts tend to have smaller x-heights; compensate. + * Can't do this generally because not all fonts have this problem. + * A textarea stands alone, whereas inline <code> has to work with + * the browser's choice of sans-serif proportional font. */ + font-size: 1.1em; +} + + +/* Tickets */ + +table.report { + cursor: auto; + border: 1px solid #ccc; + border-radius: 0.5em; + margin: 1em 0; +} +.report td, .report th { + border: 0; + font-size: .8em; + padding: 10px; +} +.report td:first-child { + border-top-left-radius: 5px; +} +.report tbody tr:last-child td:first-child { + border-bottom-left-radius: 5px; +} +.report td:last-child { + border-top-right-radius: 5px; +} +.report tbody tr:last-child { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +.report tbody tr:last-child td:last-child { + border-bottom-right-radius: 5px; +} +.report th { + cursor: pointer; +} +.report thead+tbody tr:hover { + background-color: #f5f9fc !important; +} + +td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; +} +td.tktDspValue { + text-align: left; + vertical-align: top; + background-color: #f8f8f8; + border: 1px solid #ccc; +} +td.tktDspValue pre { + white-space: pre-wrap; +} + + +/* Timeline */ + +span.timelineDetail { + font-size: 90%; +} +div.timelineDate { + font-weight: bold; + white-space: nowrap; +} + +/* Extend default.css comment cell rounding to the whole row for the + * various types of "selected" rows, making them "hang" into the left + * margin, distinguishing them from the coloring used for branch cells. + * Care must be taken to avoid having the box-shadow rounded but the + * background squared-off. */ +table.timelineTable { + padding: 0 3px; /* leave space to sides for box shadow; can clip otherwise */ +} +table.timelineTable tr { + border-radius: 1em; +} +tr.timelineSelected, tr.timelineSecondary { background-color: unset; } +tr.timelineSelected td, span.timelineSelected { + background-color: #fbe8d5; +} +tr.timelineSecondary td, span.timelineSecondary { + background-color: #d5e8fb; +} +tr.timelineCurrent td:first-child, +tr.timelineSecondary td:first-child, +tr.timelineSelected td:first-child { + border-top-left-radius: 1em; + border-bottom-left-radius: 1em; +} +tr.timelineCurrent td:last-child, +tr.timelineSecondary td:last-child, +tr.timelineSelected td:last-child { + border-top-right-radius: 1em; + border-bottom-right-radius: 1em; +} +tr.timelineCurrent td { + border-top: 1px dashed #446979; + border-bottom: 1px dashed #446979; +} +tr.timelineCurrent td:first-child { + border-left: 1px dashed #446979; +} +tr.timelineCurrent td:last-child { + border-right: 1px dashed #446979; +} + + +/* Miscellaneous UI elements */ + +.fossil-tooltip.help-buttonlet-content { + background-color: lightyellow; +} + + +/* Exceptions for specific screen sizes */ + +@media screen and (max-width: 600px) { + /* Spacing for mobile */ + body { + padding-left: 4px; + padding-right: 4px; + } + .content { + font-size: 0.9em; + } + .title { + padding-top: 0px; + padding-bottom: 0px; + } + .title > .page-title { + display: inline; /* show page titles above menu bar… */ + } + .artifact .title > .page-title, + .dir .title > .page-title, + .doc .title > .page-title, + .wiki .title > .page-title { + display: none; /* …except for docs, where it may force wrapping */ + } + .status {padding-top: 0px;} + .mainmenu a { + padding: 8px 10px; + } + .mainmenu { + padding: 10px; + } +} +@media screen and (min-width: 600px) { + /* Spacing for desktop */ + body { + padding-left: 20px; + padding-right: 20px; + } + .title { + padding-top: 10px; + padding-bottom: 10px; + } + span.page-title { + font-size: 18px; + } + div.logo { + padding-top: 10px; + } + .status {padding-top: 30px;} + .mainmenu a { + padding: 8px 20px; + } + .mainmenu { + padding: 10px; + } + + /* Wide screens mean long lines. Add extra leading to give the eye a + * "gutter" to follow from the end of one to the start of the next. */ + .content dd, + .content dt, + .content div, + .content li, + .content p, + .content table { + line-height: 1.4em; + } + + /* This horror show has the same cause that informed our handling of + * <code> and friends above; see "combinatorial selector explosion." + * Without this careful targeting, we'd not only overreach into areas + * of Fossil UI where our meddling is not wanted, we would mistakenly + * apply double indents to nested formatting in MD forum posts, p + * within td tags, and more. + * + * Rather than give the equivalent Sass code here, see the SCSS file + * that the [Inskinerator](https://tangentsoft.com/inskinerator/) + * project ships as override/modern/media.scss. Rendering that + * through sassc gives substantially identical output, modulo the + * hand-polishing we've done here. */ + .artifact > .content > p, + .artifact > .content > .markdown > p, + .artifact > .content > .fossil-doc > p, + .artifact > .content > ol, .artifact > .content > ul, + .artifact > .content > .markdown > ol, .artifact > .content > .markdown > ul, + .artifact > .content > .fossil-doc > ol, .artifact > .content > .fossil-doc > ul, + .artifact > .content > table, + .artifact > .content > .markdown > table, + .artifact > .content > .fossil-doc > table, + .dir > .content > p, + .dir > .content > .markdown > p, + .dir > .content > .fossil-doc > p, + .dir > .content > ol, .dir > .content > ul, + .dir > .content > .markdown > ol, .dir > .content > .markdown > ul, + .dir > .content > .fossil-doc > ol, .dir > .content > .fossil-doc > ul, + .dir > .content > table, + .dir > .content > .markdown > table, + .dir > .content > .fossil-doc > table, + .doc > .content > p, + .doc > .content > .markdown > p, + .doc > .content > .fossil-doc > p, + .doc > .content > ol, .doc > .content > ul, + .doc > .content > .markdown > ol, .doc > .content > .markdown > ul, + .doc > .content > .fossil-doc > ol, .doc > .content > .fossil-doc > ul, + .doc > .content > table, + .doc > .content > .markdown > table, + .doc > .content > .fossil-doc > table, + .wiki > .content > p, + .wiki > .content > .markdown > p, + .wiki > .content > .fossil-doc > p, + .wiki > .content > ol, .wiki > .content > ul, + .wiki > .content > .markdown > ol, .wiki > .content > .markdown > ul, + .wiki > .content > .fossil-doc > ol, .wiki > .content > .fossil-doc > ul, + .wiki > .content > table, + .wiki > .content > .markdown > table, + .wiki > .content > .fossil-doc > table, + #fileedit-tab-preview-wrapper > p, + #fileedit-tab-preview-wrapper > ol, + #fileedit-tab-preview-wrapper > ul, + #fileedit-tab-preview-wrapper > table, + #fileedit-tab-preview-wrapper > .markdown > p, + #fileedit-tab-preview-wrapper > .markdown > ol, + #fileedit-tab-preview-wrapper > .markdown > ul, + #fileedit-tab-preview-wrapper > .markdown > table, + #wikiedit-tab-preview-wrapper > p, + #wikiedit-tab-preview-wrapper > ol, + #wikiedit-tab-preview-wrapper > ul, + #wikiedit-tab-preview-wrapper > table, + #wikiedit-tab-preview-wrapper > .markdown > p, + #wikiedit-tab-preview-wrapper > .markdown > ol, + #wikiedit-tab-preview-wrapper > .markdown > ul, + #wikiedit-tab-preview-wrapper > .markdown > table { + margin-left: 50pt; + margin-right: 50pt; + } + + /* Code blocks get extra indenting. We need a selector explosion + * equally powerful to the one above for inline <code> fragments and + * similar elements, for essentially the same reason: Fossil UI also + * uses <pre>, and we want to affect user content only. + * + * The equivalent Sass code is: + * + * .artifact, .dir, .doc, .wiki // doc types we target + * > .content // hands off header & footer + * @import 'pre-doc-margins.sass' + * + * #fileedit-tab-preview-wrapper, // include /fileedit previews + * #wikiedit-tab-preview-wrapper // ditto /wikiedit + * @import 'pre-doc-margins.sass' + * + * …where pre-doc-margins.sass contains the elements common to both: + * + * &, > .fossil-doc, > .markdown // wiki, HTML & MD doc types + * > pre // direct pre descendants only + * margin-left: 70pt; + * margin-right: 50pt; + * + * This is a technical overreach since /wiki & /wikiedit lack support + * for Fossil's HTML embedded doc markup capability, but we prefer to + * draw the /fileedit parallel in our Sass example over the dubious + * pleasure of being nit-picky on this point. Instead, we've chosen + * to back that overreach out by hand below. + */ + .artifact > .content > pre, + .artifact > .content > .fossil-doc > pre, + .artifact > .content > .markdown > pre, + .dir > .content > pre, + .dir > .content > .fossil-doc > pre, + .dir > .content > .markdown > pre, + .doc > .content > pre, + .doc > .content > .fossil-doc > pre, + .doc > .content > .markdown > pre, + .wiki > .content > pre, + .wiki > .content > .markdown > pre { + margin-left: 70pt; + margin-right: 50pt; + } + #fileedit-tab-preview-wrapper > pre, + #wikiedit-tab-preview-wrapper > pre, + #fileedit-tab-preview-wrapper > .fossil-doc > pre, + #fileedit-tab-preview-wrapper > .markdown > pre, + #wikiedit-tab-preview-wrapper > .markdown > pre { + margin-left: 70pt; + margin-right: 50pt; + } + .forum > .content .markdown > pre { + margin-left: 20pt; /* special case for MD in forum; need less indent */ + } + + /* Fossil UI uses these, but in sufficiently constrained ways that we + * don't have to be nearly as careful to avoid an overreach. */ + .doc > .content h1, .artifact .content h1, .dir .content h1, .fileedit .content h1, .wiki .content h1 { margin-left: 10pt; } + .doc > .content h2, .artifact .content h2, .dir .content h2, .fileedit .content h2, .wiki .content h2 { margin-left: 20pt; } + .doc > .content h3, .artifact .content h3, .dir .content h3, .fileedit .content h3, .wiki .content h3 { margin-left: 30pt; } + .doc > .content h4, .artifact .content h4, .dir .content h4, .fileedit .content h4, .wiki .content h4 { margin-left: 40pt; } + .doc > .content h5, .artifact .content h5, .dir .content h5, .fileedit .content h5, .wiki .content h5 { margin-left: 50pt; } + .doc > .content hr, .artifact .content hr, .dir .content hr, .fileedit .content hr, .wiki .content hr { margin-left: 10pt; } + + /* Don't need to be nearly as careful with tags Fossil UI doesn't use. */ + .doc dd, .artifact dd, .dir dd, .fileedit dd, .wikiedit dd { margin-left: 30pt; margin-bottom: 1em; } + .doc dl, .artifact dl, .dir dl, .fileedit dl, .wikiedit dl { margin-left: 60pt; } + .doc dt, .artifact dt, .dir dt, .fileedit dt, .wikiedit dt { margin-left: 10pt; } + + /* Fossil UI doesn't use Pikchr at all (yet?) so we can be quite loose + * with these selectors. */ + .content .pikchr-wrapper { margin-left: 70pt; } + div.pikchr-wrapper.indent:not(.source) { + /* Selector naming scheme mismatch is intentional: it must match the + * way it's given in default.css exactly if it is to override it. */ + margin-left: 70pt; + margin-right: 50pt; + } + div.pikchr-wrapper.center:not(.source), + div.pikchr-wrapper.float-right:not(.source) { + margin-left: 0; + } + + /* Special treatment for backward compatibility. */ + .indent, /* clean alternative to misusing <blockquote> */ + .artifact > .content > blockquote:not(.file-content), + .dir > .content > blockquote, + .doc > .content > blockquote, + .fileedit > .content > blockquote, + .wiki > .content > blockquote { + /* We must apply extra indent relative to "p" since Fossil's wiki + * generator misuses the blockquote tag against HTML and MD norms + * to mean "indented paragraph." Skip it for file content retrieved + * by /dir URLs. */ + margin-left: 80pt; + } + .artifact > .content > .markdown > blockquote, + .dir > .content > .markdown > blockquote, + .doc > .content > .markdown > blockquote, + .fileedit > .content > .markdown > blockquote, + .wiki > .content > .markdown > blockquote { + /* Fossil MD didn't inherit that bug; its HTML generator emits + * blockquote tags only for _block quotes_! A moderate indent + * suffices due to the visual styling applied above. */ + margin-left: 60pt; + } + + /* Alternative to BLOCK.indent when wrapped in something that is + * itself indented. The value is the delta between p and blockquote + * above, expressed as padding instead of margin so it adds to the + * outer margin instead of forcing the browser into picking one. */ + .local-indent { + padding-left: 30pt; + } +} diff --git a/skins/default/details.txt b/skins/default/details.txt new file mode 100644 index 0000000..581045d --- /dev/null +++ b/skins/default/details.txt @@ -0,0 +1,6 @@ +pikchr-fontscale: "0.9" +pikchr-scale: "1.1" +timeline-arrowheads: 1 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 0 diff --git a/skins/default/footer.txt b/skins/default/footer.txt new file mode 100644 index 0000000..7d201d6 --- /dev/null +++ b/skins/default/footer.txt @@ -0,0 +1,5 @@ +<footer> +This page was generated in about +<th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by +Fossil $release_version $manifest_version $manifest_date +</footer> diff --git a/skins/default/header.txt b/skins/default/header.txt new file mode 100644 index 0000000..583e7bb --- /dev/null +++ b/skins/default/header.txt @@ -0,0 +1,67 @@ +<header> + <div class="logo"> + <th1> + ## See skins/original/header.txt for commentary; not repeated here. + proc getLogoUrl { baseurl } { + set idx(first) [string first // $baseurl] + if {$idx(first) != -1} { + set idx(first+1) [expr {$idx(first) + 2}] + set idx(nextRange) [string range $baseurl $idx(first+1) end] + set idx(next) [string first / $idx(nextRange)] + if {$idx(next) != -1} { + set idx(next) [expr {$idx(next) + $idx(first+1)}] + set idx(next-1) [expr {$idx(next) - 1}] + set scheme [string range $baseurl 0 $idx(first)] + set host [string range $baseurl $idx(first+1) $idx(next-1)] + if {[string compare $scheme http:/] == 0} { + set scheme http:// + } else { + set scheme https:// + } + set logourl $scheme$host/ + } else { + set logourl $baseurl + } + } else { + set logourl $baseurl + } + return $logourl + } + set logourl [getLogoUrl $baseurl] + </th1> + <a href="$logourl"> + <img src="$logo_image_url" border="0" alt="$<project_name>"> + </a> + </div> + <div class="title"> + <h1>$<project_name></h1> + <span class="page-title">$<title></span> + </div> + <div class="status"> + <th1> + if {[info exists login]} { + html "<a href='$home/login'>$login</a>\n" + } else { + html "<a href='$home/login'>Login</a>\n" + } + </th1> + </div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} { + if {[string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + } + set url $home$url + } + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> +<h1 class="page-title">$<title></h1> diff --git a/skins/eagle/README.md b/skins/eagle/README.md new file mode 100644 index 0000000..ca4b86c --- /dev/null +++ b/skins/eagle/README.md @@ -0,0 +1,4 @@ +For this skin to look exactly as it was intended to, the **white-foreground** +setting should be enabled. + +This skin was contributed by Joe Mistachkin. diff --git a/skins/eagle/css.txt b/skins/eagle/css.txt new file mode 100644 index 0000000..6ccdd3e --- /dev/null +++ b/skins/eagle/css.txt @@ -0,0 +1,460 @@ +/* General settings for the entire page */ +body { + margin: 0ex 1ex; + padding: 0px; + background-color: #485D7B; + font-family: sans-serif; + color: white; +} + +/* The project logo in the upper left-hand corner of each page */ +div.logo { + display: table-cell; + text-align: center; + vertical-align: bottom; + font-weight: bold; + color: white; + min-width: 50px; + white-space: nowrap; + position: relative; + filter: drop-shadow(2px 4px 6px rgba(0,0,0,0.75)); + top: 0.5em; + right: -0.5em; +} +div.logo img{ + border-radius: 2mm; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 2em; + font-weight: bold; + text-align: left; + padding: 0 0 0 1em; + color: white; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + text-align: right; + vertical-align: bottom; + color: white; + font-size: 0.8em; + font-weight: bold; + white-space: nowrap; +} + +/* The header across the top of the page */ +header { + display: table; + width: 100%; +} + +/* The main menu bar that appears at the top of the page beneath +** the header */ +nav.mainmenu { + padding: 5px 10px 5px 10px; + font-size: 0.9em; + font-weight: bold; + text-align: center; + letter-spacing: 1px; + background-color: #76869D; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + color: white; +} + +nav#hbdrop { + background-color: #485D7B; + border-radius: 0 0 15px 15px; + border-left: 0.5em solid #76869d; + border-bottom: 1.2em solid #76869d; + display: none; + width: 98%; + position: absolute; + z-index: 20; +} + + +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 3px 10px 3px 0px; + font-size: 0.9em; + font-weight: bold; + text-align: center; + background-color: #485D7B; + color: white; +} +nav.mainmenu a, nav.mainmenu a:visited, div.submenu a, div.submenu a:visited, +div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, +div.submenu label { + padding: 3px 10px 3px 10px; + color: white; + text-decoration: none; +} +nav.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover, +div.submenu label:hover { + text-decoration: underline; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 0ex 1ex 0ex 2ex; +} + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0px; + margin-top: 1em; + padding: 1px 1px 1px 1px; + font-size: 1.2em; + font-weight: bold; + background-color: #485D7B; + color: white; + white-space: nowrap; +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #9DB0CC; + color: white; + border: 2px white solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + clear: both; + font-size: 0.8em; + margin-top: 12px; + padding: 5px 10px 5px 10px; + text-align: right; + background-color: #485D7B; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + color: white; +} + +/* Hyperlink colors in the footer */ +a { color: white; } +a:link { color: white; } +a:visited { color: white; } +a:hover { color: #9DB0CC; } + +/* verbatim blocks */ +pre.verbatim { + background-color: #485D7B; + color: white; + padding: 0.5em; + white-space: pre-wrap; +} + +/* The label/value pairs on (for example) the ci page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} + +/* The nomenclature sidebox for branches,.. */ +div.sidebox { + float: right; + background-color: #485D7B; + border-width: medium; + border-style: double; + margin: 10px; +} + +/* the format for the timeline data table */ +table.timelineTable { + cellspacing: 0; + border: 0; + cellpadding: 0; + font-family: "courier new"; + border-spacing: 0px 2px; + /* border-collapse: collapse; */ +} + +.timelineSelected { + background-color: #7EA2D9; +} +.timelineSecondary { + background-color: #7EA27E; +} + +/* commit node */ +.tl-node { + width: 10px; + height: 10px; + border: 1px solid #fff; + background: #485D7B; + cursor: pointer; +} + +/* leaf commit marker */ +.tl-node.leaf:after { + content: ''; + position: absolute; + top: 3px; + left: 3px; + width: 4px; + height: 4px; + background: #fff; +} + +/* closed leaf commit marker */ +.tl-node.closed-leaf svg { + position: absolute; + top: 0px; + left: 0px; + width: 10px; + height: 10px; + color: #fff; +} + +/* up arrow */ +.tl-arrow.u { + margin-top: -1px; + border-width: 0 3px; + border-bottom: 7px solid #fff; +} + +/* small up arrow */ +.tl-arrow.u.sm { + border-bottom: 5px solid #fff; +} + +/* line */ +.tl-line { + background: #fff; + width: 2px; +} + +/* left merge arrow */ +.tl-arrow.merge.l { + border-right: 3px solid #fff; +} + +/* right merge arrow */ +.tl-arrow.merge.r { + border-left: 3px solid #fff; +} + +.tl-arrow.cherrypick { + height: 1px; + border-width: 2px 0; +} +.tl-arrow.cherrypick.l { + border-right: 3px solid #fff; +} +.tl-arrow.cherrypick.r { + border-left: 3px solid #fff; +} +.tl-line.cherrypick.h { + width: 0px; + border-top: 1px dashed #fff; + border-left: 0px dashed #fff; + background: rgba(255,255,255,0); +} +.tl-line.cherrypick.v { + width: 0px; + border-top: 0px dashed #fff; + border-left: 1px dashed #fff; + background: rgba(255,255,255,0); +} + + +/* Side-by-side diff */ +table.splitdiff { + background-color: #485D7B; + font-family: fixed, Dejavu Sans Mono, Monaco, Lucida Console, monospace; + font-size: 8pt; + border-collapse:collapse; + white-space: pre; + border: 1px #000 dashed; + margin-left: auto; + margin-right: auto; +} + +/* format for the layout table, used for the captcha display */ +table.captcha { + margin: auto; + padding: 10px; + border-width: 4px; + border-style: double; + border-color: white; +} + +/* format for the user list table on the user setup page */ +table.usetupUserList { + outline-style: double; + outline-width: 1px; + outline-color: white; + padding: 10px; +} + +/* color for capabilities, inherited by reader */ +span.ueditInheritReader { + color: white; +} + +/* format for values on ticket display page */ +td.tktDspValue { + text-align: left; + vertical-align: top; + background-color: #485D7B; +} + +/* Ticket display on timelines */ +td.tktTlOpen { + color: #ffc0c0; +} +td.tktTlClose { + color: #c0c0c0; +} + +/* format for example table cells on the report edit page */ +td.rpteditex { + border-width: thin; + border-color: white; + border-style: solid; +} + +/* List of files in a timeline */ +ul.filelist { + margin-top: 3px; + line-height: 100%; +} + +/* side-by-side diff display */ +div.splitdiff { + font-family: monospace; + font-size: smaller; + white-space: pre; +} + +/* context diff display */ +table.udiff { + font-family: monospace; + white-space: pre; +} + +/* added code in a diff */ +td.difftxt ins > ins, td.diffln ins { + background-color: rgb(100, 200, 100); +} +td.difftxt ins { + background-color: inherit; +} + +/* deleted in a diff */ +td.difftxt del > del, td.diffln del { + background-color: rgb(230, 110, 110); +} +td.difftxt del { + background-color: inherit; +} +tr.diffskip.jchunk { + background-color: #7EA2D9; +} +tr.diffskip > td.chunkctrl .jcbutton{ + color: white; + background-color: #485D7B; +} + +.fileage tr:hover { + background-color: #7EA2D9; +} + +span.modpending { + color: #c0c0c0; + font-style: italic; +} +span.forum_author { + color: white; + font-size: 75%; +} +span.forum_age { + color: white; + font-size: 85%; +} +span.forum_npost { + color: white; + font-size: 75%; +} +.debug { + background-color: #808080; + border: 2px solid white; +} +div.forumEdit { + border: 1px solid white; +} +div.forumTimeline { + border: 1px solid white; +} +div.forumTime { + border: 1px solid white; +} +div.forumSel { + background-color: #808080; +} +div.forumObs { + color: white; +} +body.forum .forumPosts.fileage a:visited { + color: rgba(176,176,176,1.0); +} + +.fileage td { + font-family: "courier new"; +} + +div.filetreeline:hover { + background-color: #7EA2D9; +} + +table.numbered-lines td.line-numbers span.selected-line { + background-color: #7EA2D9; +} + +.statistics-report-graph-line { + border: 2px solid #7EA2D9; + background-color: #7EA2D9; +} +.statistics-report-graph-extra { + border: 2px solid #7EA2D9; + border-left-style: none; +} + +.timelineModernCell[id], .timelineColumnarCell[id], .timelineDetailCell[id] { + background-color: #455978; +} + +.capsumOff { + background-color: #bbbbbb; +} +.capsumRead { + background-color: #006d00; +} +.capsumWrite { + background-color: #e5e500; +} + +body.branch .brlist > table > tbody > tr:hover:not(.selected), +body.branch .brlist > table > tbody > tr.selected { + background-color: #7EA2D9; +} + +p.noMoreShun { + color: #e5e500; +} diff --git a/skins/eagle/details.txt b/skins/eagle/details.txt new file mode 100644 index 0000000..14eac9c --- /dev/null +++ b/skins/eagle/details.txt @@ -0,0 +1,5 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 0 +timeline-color-graph-lines: 0 +white-foreground: 1 +pikchr-background: 0x485d7b diff --git a/skins/eagle/footer.txt b/skins/eagle/footer.txt new file mode 100644 index 0000000..1db1895 --- /dev/null +++ b/skins/eagle/footer.txt @@ -0,0 +1,24 @@ +<footer> + <th1> + proc getTclVersion {} { + if {[catch {tclEval info patchlevel} tclVersion] == 0} { + return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion" + } + return "" + } + proc getVersion { version } { + set length [string length $version] + return [string range $version 1 [expr {$length - 2}]] + } + set version [getVersion $manifest_version] + set tclVersion [getTclVersion] + set fossilUrl https://fossil-scm.org + set fossilDate [string range $manifest_date 0 9]T[string range $manifest_date 11 end] + </th1> + This page was generated in about + <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by + <a href="$fossilUrl/">Fossil</a> + version $release_version $tclVersion + <a href="$fossilUrl/index.html/info/$version">$manifest_version</a> + <a href="$fossilUrl/index.html/timeline?c=$fossilDate&y=ci">$manifest_date</a> +</footer> diff --git a/skins/eagle/header.txt b/skins/eagle/header.txt new file mode 100644 index 0000000..fc04695 --- /dev/null +++ b/skins/eagle/header.txt @@ -0,0 +1,111 @@ +<header> + <div class="logo"> + <th1> + ## + ## NOTE: The purpose of this procedure is to take the base URL of the + ## Fossil project and return the root of the entire web site using + ## the same URI scheme as the base URL (e.g. http or https). + ## + proc getLogoUrl { baseurl } { + set idx(first) [string first // $baseurl] + if {$idx(first) != -1} { + ## + ## NOTE: Skip second slash. + ## + set idx(first+1) [expr {$idx(first) + 2}] + ## + ## NOTE: (part 1) The [string first] command does NOT actually + ## support the optional startIndex argument as specified + ## in the TH1 support manual; therefore, we fake it by + ## using the [string range] command and then adding the + ## necessary offset to the resulting index manually + ## (below). In Tcl, we could use the following instead: + ## + ## set idx(next) [string first / $baseurl $idx(first+1)] + ## + set idx(nextRange) [string range $baseurl $idx(first+1) end] + set idx(next) [string first / $idx(nextRange)] + if {$idx(next) != -1} { + ## + ## NOTE: (part 2) Add the necessary offset to the result of + ## the search for the next slash (i.e. the one after + ## the initial search for the two slashes). + ## + set idx(next) [expr {$idx(next) + $idx(first+1)}] + ## + ## NOTE: Back up one character from the next slash. + ## + set idx(next-1) [expr {$idx(next) - 1}] + ## + ## NOTE: Extract the URI scheme and host from the base URL. + ## + set scheme [string range $baseurl 0 $idx(first)] + set host [string range $baseurl $idx(first+1) $idx(next-1)] + ## + ## NOTE: Try to stay in SSL mode if we are there now. + ## + if {[string compare $scheme http:/] == 0} { + set scheme http:// + } else { + set scheme https:// + } + set logourl $scheme$host/ + } else { + set logourl $baseurl + } + } else { + set logourl $baseurl + } + return $logourl + } + if {1} { + # Link logo to the top of the current domain + set logourl [getLogoUrl $baseurl] + } else { + # Link logo to the top of the current repo + set logourl $baseurl + } + </th1> + <a href="$logourl"> + <img src="$logo_image_url" border="0" alt="$<project_name>"> + </a> + </div> + <div class="title">$<title></div> + <div class="status"><nobr><th1> + if {[info exists login]} { + puts "Logged in as $login" + } else { + puts "Not logged in" + } + </th1></nobr><small><div id="clock"></div></small></div> +</header> +<th1>html "<script nonce='$nonce'>"</th1> + (function updateClock(){ + var e = document.getElementById("clock"); + if(!e) return; + if(!updateClock.fmt){ + updateClock.fmt = function(n){ + return n < 10 ? '0' + n : n; + }; + } + var d = new Date(); + e.innerHTML = d.getUTCFullYear()+ '-' + + updateClock.fmt(d.getUTCMonth() + 1) + '-' + + updateClock.fmt(d.getUTCDate()) + ' ' + + updateClock.fmt(d.getUTCHours()) + ':' + + updateClock.fmt(d.getUTCMinutes()); + setTimeout(updateClock,(60-d.getUTCSeconds())*1000); + })(); +</script> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>\n" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} {set url $home$url} + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> diff --git a/skins/etienne/README.md b/skins/etienne/README.md new file mode 100644 index 0000000..47201e6 --- /dev/null +++ b/skins/etienne/README.md @@ -0,0 +1,14 @@ +This skin was contributed by Étienne Deparis. + +It was promoted to the default from 2015-03-14 until February 2024, when +it was forked into this location for use by those who do not want the +large number of changes merged into trunk at that time. Even if you +agree with us that the changes improve readability, you may prefer to +pack more information onto the screen at the expense of readability. +Other reasons to choose this fork are to migrate custom skin changes to +work atop the new base, or to make a comparative design evaluation. + +A bare minimum of changes have been made to this fork, primarily to +allow this skin to render the Fossil documentation in a readable +fashion. The intent is that you be able to toggle between these two +skins at will. diff --git a/skins/etienne/css.txt b/skins/etienne/css.txt new file mode 100644 index 0000000..7b8165a --- /dev/null +++ b/skins/etienne/css.txt @@ -0,0 +1,310 @@ +/* Overall page style; vi: filetype=css + */ + +body { + margin: 0 auto; + background-color: white; + font-family: sans-serif; + font-size: 14pt; +} + +a { + color: #4183C4; + text-decoration: none; +} +a:hover { + color: #4183C4; + text-decoration: underline; +} + + +/* Page title, above menu bars */ + +.title { + color: #4183C4; + float: left; +} +.title h1 { + display: inline; +} +.title h1:after { + content: " / "; + color: #777; + font-weight: normal; +} +.status { + float: right; + font-size: 0.7em; +} + + +/* Main menu and optional sub-menu */ + +.mainmenu { + font-size: 0.8em; + clear: both; + background: #eaeaea linear-gradient(#fafafa, #eaeaea) repeat-x; + border: 1px solid #eaeaea; + border-radius: 5px; + overflow-x: auto; + overflow-y: hidden; + white-space: nowrap; + z-index: 21; /* just above hbdrop */ +} +.mainmenu a { + text-decoration: none; + color: #777; + border-right: 1px solid #eaeaea; +} +.mainmenu a.active, +.mainmenu a:hover { + color: #000; + border-bottom: 2px solid #D26911; +} +nav#hbdrop { + background-color: white; + border: 1px solid black; + border-top: white; + border-radius: 0 0 0.5em 0.5em; + display: none; + font-size: 80%; + left: 2em; + width: 90%; + padding-right: 1em; + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ +} + +.submenu { + font-size: .7em; + padding: 10px; + border-bottom: 1px solid #ccc; +} +.submenu a, .submenu label { + padding: 10px 11px; + text-decoration: none; + color: #777; +} +.submenu label { + white-space: nowrap; +} +.submenu a:hover, .submenu label:hover { + padding: 6px 10px; + border: 1px solid #ccc; + border-radius: 5px; + color: #000; +} +span.submenuctrl, span.submenuctrl input, select.submenuctrl { + color: #777; +} +span.submenuctrl { + white-space: nowrap; +} + + +/* Main document area; elements common to most pages. */ + +.content { + padding-top: 10px; + font-size: 0.8em; + color: #444; +} +.content blockquote { + padding: 0 15px; +} +.content h1 { + font-size: 1.25em; +} +.content h2 { + font-size: 1.15em; +} +.content h3 { + font-size: 1.05em; +} + +.section { + font-size: 1em; + font-weight: bold; + background-color: #f5f5f5; + border: 1px solid #d8d8d8; + border-radius: 3px 3px 0 0; + padding: 9px 10px 10px; + margin: 10px 0; +} +.sectionmenu { + border: 1px solid #d8d8d8; + border-radius: 0 0 3px 3px; + border-top: 0; + margin-top: -10px; + margin-bottom: 10px; + padding: 10px; +} +.sectionmenu a { + display: inline-block; + margin-right: 1em; +} + +hr { + color: #eee; +} + + +/* Page footer */ + +footer { + border-top: 1px solid #ccc; + padding: 10px; + font-size: 0.7em; + margin-top: 10px; + color: #ccc; +} + +/* Forum */ + +.forum a:visited { + color: #6A7F94; +} + +.forum blockquote { + background-color: rgba(65, 131, 196, 0.1); + border-left: 3px solid #254769; + padding: .1em 1em; +} + + +/* Markdown and Wiki-formatted pages: /wiki, /doc, /file... */ + +.doc > .content table { + background-color: rgba(0, 0, 0, 0.05); + border: 1px solid #aaa; + border-radius: 0.5em; + border-spacing: 0; + padding: 6px; +} +.doc > .content th { + border-bottom: 1px solid #ddd; + padding-bottom: 4px; + padding-right: 6px; + text-align: left; +} +.doc > .content tr > th { + background-color: #eee; +} +.doc > .content tr:nth-child(odd) { + background-color: #e8e8e8; +} +.doc > .content td { + padding-bottom: 4px; + padding-right: 6px; + text-align: left; +} + + +/* Tickets */ + +table.report { + cursor: auto; + border-radius: 5px; + border: 1px solid #ccc; + margin: 1em 0; +} +.report td, .report th { + border: 0; + font-size: .8em; + padding: 10px; +} +.report td:first-child { + border-top-left-radius: 5px; +} +.report tbody tr:last-child td:first-child { + border-bottom-left-radius: 5px; +} +.report td:last-child { + border-top-right-radius: 5px; +} +.report tbody tr:last-child { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} +.report tbody tr:last-child td:last-child { + border-bottom-right-radius: 5px; +} +.report th { + cursor: pointer; +} +.report thead+tbody tr:hover { + background-color: #f5f9fc !important; +} + +td.tktDspLabel { + width: 70px; + text-align: right; + overflow: hidden; +} +td.tktDspValue { + text-align: left; + vertical-align: top; + background-color: #f8f8f8; + border: 1px solid #ccc; +} +td.tktDspValue pre { + white-space: pre-wrap; +} + + +/* Timeline */ + +span.timelineDetail { + font-size: 90%; +} +div.timelineDate { + font-weight: bold; + white-space: nowrap; +} + + +/* Miscellaneous UI elements */ + +.fossil-tooltip.help-buttonlet-content { + background-color: lightyellow; +} + + +/* Exceptions for specific screen sizes */ + +@media screen and (max-width: 600px) { + /* Spacing for mobile */ + body { + padding-left: 4px; + padding-right: 4px; + } + .title { + padding-top: 0px; + padding-bottom: 0px; + } + .status {padding-top: 0px;} + .mainmenu a { + padding: 8px 10px; + } + .mainmenu { + padding: 10px; + } +} +@media screen and (min-width: 600px) { + /* Spacing for desktop */ + body { + padding-left: 20px; + padding-right: 20px; + } + .title { + padding-top: 10px; + padding-bottom: 10px; + } + .status {padding-top: 30px;} + .mainmenu a { + padding: 8px 20px; + } + .mainmenu { + padding: 10px; + } +} diff --git a/skins/etienne/details.txt b/skins/etienne/details.txt new file mode 100644 index 0000000..a7f228d --- /dev/null +++ b/skins/etienne/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 0 diff --git a/skins/etienne/footer.txt b/skins/etienne/footer.txt new file mode 100644 index 0000000..7d201d6 --- /dev/null +++ b/skins/etienne/footer.txt @@ -0,0 +1,5 @@ +<footer> +This page was generated in about +<th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by +Fossil $release_version $manifest_version $manifest_date +</footer> diff --git a/skins/etienne/header.txt b/skins/etienne/header.txt new file mode 100644 index 0000000..d4f75e4 --- /dev/null +++ b/skins/etienne/header.txt @@ -0,0 +1,29 @@ +<header> + <div class="title"><h1>$<project_name></h1>$<title></div> + <div class="status"> + <th1> + if {[info exists login]} { + html "<a href='$home/login'>$login</a>\n" + } else { + html "<a href='$home/login'>Login</a>\n" + } + </th1> + </div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} { + if {[string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + } + set url $home$url + } + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> diff --git a/skins/khaki/css.txt b/skins/khaki/css.txt new file mode 100644 index 0000000..d0a9150 --- /dev/null +++ b/skins/khaki/css.txt @@ -0,0 +1,181 @@ +/* General settings for the entire page */ +body { + margin: 0ex 0ex; + padding: 0px; + background-color: #fef3bc; + font-family: sans-serif; + text-size-adjust: none; +} + +/* The project logo in the upper left-hand corner of each page */ +div.logo { + display: inline; + text-align: center; + vertical-align: bottom; + font-weight: bold; + font-size: 2.5em; + color: #a09048; + white-space: nowrap; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 2em; + font-weight: bold; + text-align: left; + padding: 0 0 0 5px; + color: #a09048; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + text-align: right; + vertical-align: bottom; + color: #a09048; + padding: 5px 5px 0 0; + font-size: 0.8em; + font-weight: bold; + white-space: nowrap; +} + +/* The header across the top of the page */ +header { + display: table; + width: 100%; +} + +/* The main menu bar that appears at the top of the page beneath +** the header */ +nav.mainmenu { + padding: 5px 10px 5px 10px; + font-size: 0.9em; + font-weight: bold; + text-align: center; + letter-spacing: 1px; + background-color: #a09048; + color: black; + z-index: 21; /* just above hbdrop */ +} +nav#hbdrop { + background-color: #fef3bc; + border: 2px solid #a09048; + border-radius: 0 0 0.5em 0.5em; + display: none; + left: 2em; + width: 90%; + padding-right: 1em; + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ +} + + +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 3px 10px 3px 0px; + font-size: 0.9em; + text-align: center; + background-color: #c0af58; + color: white; +} +nav.mainmenu a, nav.mainmenu a:visited, div.submenu a, div.submenu a:visited, +div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, +div.submenu label { + padding: 3px 10px 3px 10px; + color: white; + text-decoration: none; +} +nav.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover, +div.submenu label:hover, nav#hbdrop a:hover { + color: #a09048; + background-color: white; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 1ex 5px; +} +div.content a, nav#hbdrop a { color: #706532; } +div.content a:link, nav#hbdrop a:link { color: #706532; } +div.content a:visited, nav#hbdrop a:visited { color: #704032; } +div.content a:hover, nav#hbdrop a:hover { + background-color: white; color: #706532; +} +a, a:visited { + text-decoration: none; +} + + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0px; + margin-top: 1em; + padding: 3px 3px 0 3px; + font-size: 1.2em; + font-weight: bold; + background-color: #a09048; + color: white; + white-space: nowrap; +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #e1d498; + border: 2px #a09048 solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + font-size: 0.8em; + margin-top: 12px; + padding: 5px 10px 5px 10px; + text-align: right; + background-color: #a09048; + color: white; +} + +/* Hyperlink colors */ +footer a { color: white; } +footer a:link { color: white; } +footer a:visited { color: white; } +footer a:hover { background-color: white; color: #558195; } + +/* <verbatim> blocks */ +pre.verbatim { + background-color: #f5f5f5; + padding: 0.5em; + white-space: pre-wrap; +} + +/* The label/value pairs on (for example) the ci page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} + +div.forumPostBody blockquote { + border-width: 1pt; + border-radius: 0.25em; + border-style: solid; + padding: 0 0.5em; +} + +tr.diffskip > td.chunkctrl .jcbutton { + color: white; + background-color: #a09048; +} + +tr.diffskip.jchunk { + background-color: #c0af58; +} diff --git a/skins/khaki/details.txt b/skins/khaki/details.txt new file mode 100644 index 0000000..a7f228d --- /dev/null +++ b/skins/khaki/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 1 +white-foreground: 0 diff --git a/skins/khaki/footer.txt b/skins/khaki/footer.txt new file mode 100644 index 0000000..a897ecf --- /dev/null +++ b/skins/khaki/footer.txt @@ -0,0 +1,3 @@ +<footer> +Fossil $release_version $manifest_version $manifest_date +</footer> diff --git a/skins/khaki/header.txt b/skins/khaki/header.txt new file mode 100644 index 0000000..1a63398 --- /dev/null +++ b/skins/khaki/header.txt @@ -0,0 +1,25 @@ +<header> + <div class="title">$<title></div> + <div class="status"> + <div class="logo">$<project_name></div><br/> + <th1> + if {[info exists login]} { + puts "Logged in as $login" + } else { + puts "Not logged in" + } + </th1> + </div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} {set url $home$url} + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> diff --git a/skins/original/css.txt b/skins/original/css.txt new file mode 100644 index 0000000..31d0b29 --- /dev/null +++ b/skins/original/css.txt @@ -0,0 +1,149 @@ +/* General settings for the entire page */ +body { + margin: 0ex 1ex; + padding: 0px; + background-color: white; + font-family: sans-serif; + -moz-text-size-adjust: none; + -webkit-text-size-adjust: none; + -mx-text-size-adjust: none; +} + +/* The project logo in the upper left-hand corner of each page */ +div.logo { + display: table-cell; + text-align: center; + vertical-align: bottom; + font-weight: bold; + color: #558195; + min-width: 50px; + white-space: nowrap; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 2em; + font-weight: bold; + text-align: center; + padding: 0 0 0 1em; + color: #558195; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + text-align: right; + vertical-align: bottom; + color: #558195; + font-size: 0.8em; + font-weight: bold; + white-space: nowrap; +} + +/* The header across the top of the page */ +header { + display: table; + width: 100%; +} + +/* The main menu bar that appears at the top of the page beneath +** the header */ +nav.mainmenu { + padding: 5px; + font-size: 0.9em; + font-weight: bold; + text-align: center; + letter-spacing: 1px; + background-color: #558195; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + color: white; +} + +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 3px 10px 3px 0px; + font-size: 0.9em; + text-align: center; + background-color: #456878; + color: white; +} +nav.mainmenu a, nav.mainmenu a:visited, div.submenu a, div.submenu a:visited, +div.sectionmenu>a.button:link, div.sectionmenu>a.button:visited, +div.submenu label { + padding: 3px 10px 3px 10px; + color: white; + text-decoration: none; +} +nav.mainmenu a:hover, div.submenu a:hover, div.sectionmenu>a.button:hover, +div.submenu label:hover { + color: #558195; + background-color: white; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 0ex 1ex 1ex 1ex; + border: solid #aaa; + border-width: 1px; +} + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0px; + margin-top: 1em; + padding: 1px 1px 1px 1px; + font-size: 1.2em; + font-weight: bold; + background-color: #558195; + color: white; + white-space: nowrap; +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #a1c4d4; + border: 2px #558195 solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + clear: both; + font-size: 0.8em; + padding: 5px 10px 5px 10px; + text-align: right; + background-color: #558195; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + color: white; +} + +/* Hyperlink colors in the footer */ +footer a { color: white; } +footer a:link { color: white; } +footer a:visited { color: white; } +footer a:hover { background-color: white; color: #558195; } + +/* verbatim blocks */ +pre.verbatim { + background-color: #f5f5f5; + padding: 0.5em; + white-space: pre-wrap; +} + +/* The label/value pairs on (for example) the ci page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} diff --git a/skins/original/details.txt b/skins/original/details.txt new file mode 100644 index 0000000..3e05845 --- /dev/null +++ b/skins/original/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 0 +timeline-color-graph-lines: 0 +white-foreground: 0 diff --git a/skins/original/footer.txt b/skins/original/footer.txt new file mode 100644 index 0000000..1db1895 --- /dev/null +++ b/skins/original/footer.txt @@ -0,0 +1,24 @@ +<footer> + <th1> + proc getTclVersion {} { + if {[catch {tclEval info patchlevel} tclVersion] == 0} { + return "<a href=\"https://www.tcl.tk/\">Tcl</a> version $tclVersion" + } + return "" + } + proc getVersion { version } { + set length [string length $version] + return [string range $version 1 [expr {$length - 2}]] + } + set version [getVersion $manifest_version] + set tclVersion [getTclVersion] + set fossilUrl https://fossil-scm.org + set fossilDate [string range $manifest_date 0 9]T[string range $manifest_date 11 end] + </th1> + This page was generated in about + <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s by + <a href="$fossilUrl/">Fossil</a> + version $release_version $tclVersion + <a href="$fossilUrl/index.html/info/$version">$manifest_version</a> + <a href="$fossilUrl/index.html/timeline?c=$fossilDate&y=ci">$manifest_date</a> +</footer> diff --git a/skins/original/header.txt b/skins/original/header.txt new file mode 100644 index 0000000..a309241 --- /dev/null +++ b/skins/original/header.txt @@ -0,0 +1,107 @@ +<header> + <div class="logo"> + <th1> + ## + ## NOTE: The purpose of this procedure is to take the base URL of the + ## Fossil project and return the root of the entire web site using + ## the same URI scheme as the base URL (e.g. http or https). + ## + proc getLogoUrl { baseurl } { + set idx(first) [string first // $baseurl] + if {$idx(first) != -1} { + ## + ## NOTE: Skip second slash. + ## + set idx(first+1) [expr {$idx(first) + 2}] + ## + ## NOTE: (part 1) The [string first] command does NOT actually + ## support the optional startIndex argument as specified + ## in the TH1 support manual; therefore, we fake it by + ## using the [string range] command and then adding the + ## necessary offset to the resulting index manually + ## (below). In Tcl, we could use the following instead: + ## + ## set idx(next) [string first / $baseurl $idx(first+1)] + ## + set idx(nextRange) [string range $baseurl $idx(first+1) end] + set idx(next) [string first / $idx(nextRange)] + if {$idx(next) != -1} { + ## + ## NOTE: (part 2) Add the necessary offset to the result of + ## the search for the next slash (i.e. the one after + ## the initial search for the two slashes). + ## + set idx(next) [expr {$idx(next) + $idx(first+1)}] + ## + ## NOTE: Back up one character from the next slash. + ## + set idx(next-1) [expr {$idx(next) - 1}] + ## + ## NOTE: Extract the URI scheme and host from the base URL. + ## + set scheme [string range $baseurl 0 $idx(first)] + set host [string range $baseurl $idx(first+1) $idx(next-1)] + ## + ## NOTE: Try to stay in SSL mode if we are there now. + ## + if {[string compare $scheme http:/] == 0} { + set scheme http:// + } else { + set scheme https:// + } + set logourl $scheme$host/ + } else { + set logourl $baseurl + } + } else { + set logourl $baseurl + } + return $logourl + } + set logourl [getLogoUrl $baseurl] + </th1> + <a href="$logourl"> + <img src="$logo_image_url" border="0" alt="$<project_name>"> + </a> + </div> + <div class="title">$<title></div> + <div class="status"><nobr><th1> + if {[info exists login]} { + puts "Logged in as $login" + } else { + puts "Not logged in" + } + </th1></nobr><small><div id="clock"></div></small></div> +</header> +<th1>html "<script nonce='$nonce'>"</th1> + function updateClock(){ + var e = document.getElementById("clock"); + if(e){ + var d = new Date(); + function f(n) { + return n < 10 ? '0' + n : n; + } + e.innerHTML = d.getUTCFullYear()+ '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + ' ' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()); + setTimeout(updateClock,(60-d.getUTCSeconds())*1000); + } + } + updateClock(); +</script> +<nav class="mainmenu" title="Main Menu"> + <th1> + set sitemap 0 + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} {set url $home$url} + html "<a href='$url' class='$class'>$name</a>\n" + if {[string match */sitemap $url]} {set sitemap 1} + } + if {!$sitemap} { + html "<a href='$home/sitemap'>...</a>" + } + </th1> +</nav> diff --git a/skins/plain_gray/css.txt b/skins/plain_gray/css.txt new file mode 100644 index 0000000..b8e7fcd --- /dev/null +++ b/skins/plain_gray/css.txt @@ -0,0 +1,150 @@ +/* General settings for the entire page */ +body { + margin: 0ex 1ex; + padding: 0px; + background-color: white; + font-family: sans-serif; + text-size-adjust: none; +} + +/* The page title centered at the top of each page */ +div.title { + display: table-cell; + font-size: 1.5em; + font-weight: bold; + text-align: center; + padding: 0 0 0 10px; + color: #404040; + vertical-align: bottom; + width: 100%; +} + +/* The login status message in the top right-hand corner */ +div.status { + display: table-cell; + text-align: right; + vertical-align: bottom; + color: #404040; + font-weight: bold; + white-space: nowrap; +} + +/* The header across the top of the page */ +header { + display: table; + width: 100%; +} + +/* The main menu bar that appears at the top of the page beneath +** the header */ +nav.mainmenu { + padding: 5px 10px 5px 10px; + font-size: 0.9em; + font-weight: bold; + text-align: center; + letter-spacing: 1px; + background-color: #404040; + color: white; + z-index: 21; /* just above hbdrop */ +} +.hbdrop { + background-color: white; + border: 1px solid black; + border-radius: 0.5em; + display: none; + width: 95%; + position: absolute; + z-index: 20; /* just below mainmenu, but above timeline bubbles */ +} +div.hbdrop a { color: #604000; } +div.hbdrop a:link { color: #604000;} +div.hbdrop a:visited { color: #600000; } + + +/* The submenu bar that *sometimes* appears below the main menu */ +div.submenu, div.sectionmenu { + padding: 3px 10px 3px 0px; + font-size: 0.9em; + text-align: center; + background-color: #606060; + color: white; +} +nav.mainmenu a, +nav.mainmenu a:visited, +div.submenu a, +div.submenu a:visited, +div.sectionmenu>a.button:link, +div.sectionmenu>a.button:visited, +div.submenu label { + padding: 3px 10px 3px 10px; + color: white; + text-decoration: none; +} +nav.mainmenu a:hover, +div.submenu a:hover, +div.sectionmenu>a.button:hover, +div.submenu label:hover { + color: #404040; + background-color: white; +} +a, a:visited { + text-decoration: none; +} + +/* All page content from the bottom of the menu or submenu down to +** the footer */ +div.content { + padding: 0ex 0ex 0ex 0ex; +} +/* Hyperlink colors */ +div.content a { color: #604000; } +div.content a:link { color: #604000;} +div.content a:visited { color: #600000; } + +/* <verbatim> blocks */ +pre.verbatim { + background-color: #ffffff; + padding: 0.5em; + white-space: pre-wrap; +} + +/* Some pages have section dividers */ +div.section { + margin-bottom: 0px; + margin-top: 1em; + padding: 1px 1px 1px 1px; + font-size: 1.2em; + font-weight: bold; + background-color: #404040; + color: white; + white-space: nowrap; +} + +/* The "Date" that occurs on the left hand side of timelines */ +div.divider { + background: #a0a0a0; + border: 2px #505050 solid; + font-size: 1em; font-weight: normal; + padding: .25em; + margin: .2em 0 .2em 0; + float: left; + clear: left; + white-space: nowrap; +} + +/* The footer at the very bottom of the page */ +footer { + font-size: 0.8em; + margin-top: 12px; + padding: 5px 10px 5px 10px; + text-align: right; + background-color: #404040; + color: white; +} + +/* The label/value pairs on (for example) the vinfo page */ +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.2ex 2ex; +} diff --git a/skins/plain_gray/details.txt b/skins/plain_gray/details.txt new file mode 100644 index 0000000..07f1951 --- /dev/null +++ b/skins/plain_gray/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 1 +timeline-color-graph-lines: 0 +white-foreground: 0 diff --git a/skins/plain_gray/footer.txt b/skins/plain_gray/footer.txt new file mode 100644 index 0000000..a897ecf --- /dev/null +++ b/skins/plain_gray/footer.txt @@ -0,0 +1,3 @@ +<footer> +Fossil $release_version $manifest_version $manifest_date +</footer> diff --git a/skins/plain_gray/header.txt b/skins/plain_gray/header.txt new file mode 100644 index 0000000..488b5cb --- /dev/null +++ b/skins/plain_gray/header.txt @@ -0,0 +1,15 @@ +<header> + <div class="title">$<project_name>: $<title></div> +</header> +<nav class="mainmenu" title="Main Menu"> + <th1> + html "<a id='hbbtn' href='$home/sitemap' aria-label='Site Map'>☰</a>" + builtin_request_js hbmenu.js + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} {set url $home$url} + html "<a href='$url' class='$class'>$name</a>\n" + } + </th1> +</nav> +<nav id="hbdrop" class='hbdrop' title="sitemap"></nav> diff --git a/skins/xekri/README.md b/skins/xekri/README.md new file mode 100644 index 0000000..7fcceef --- /dev/null +++ b/skins/xekri/README.md @@ -0,0 +1,2 @@ +"xekri" is a Lojban word that means "extermely dark-colored". +This skin was contributed by Andrew Moore. diff --git a/skins/xekri/css.txt b/skins/xekri/css.txt new file mode 100644 index 0000000..442fb18 --- /dev/null +++ b/skins/xekri/css.txt @@ -0,0 +1,1273 @@ +/****************************************************************************** + * Xekri + * + * To adjust the width of the contents for this skin, look for the "max-width" + * property and change its value. (It's in the "Main Area" section) The value + * determines how much of the browser window to use. Some like 100%, so that + * the entire window is used. Others prefer 80%, which makes the contents + * easier to read for them. + */ + + +/************************************** + * General HTML + */ + +html { + background-color: #333; + color: #eee; + font-family: Monospace; + font-size: 1em; + min-height: 100%; +} + +body { + background-color: #333; + margin: 0; + padding: 0; + text-size-adjust: none; +} + +a { + color: #40a0ff; +} + +a:hover { + font-weight: bold; +} + +blockquote pre { + border: 1px dashed #ee0; +} + +blockquote pre, pre.verbatim { + background-color: #000; + border-radius: 0.75rem; + padding: 0.5rem; + white-space: pre-wrap; +} + +input[type="password"], input[type="text"], textarea { + background-color: #111; + color: #fff; + font-size: 1rem; +} + +h1 { + font-size: 2rem; +} + +h2 { + font-size: 1.5rem; +} + +h3 { + font-size: 1.25rem; +} + +/************************************** + * Main Area + */ + +header, nav.mainmenu, div.submenu, div.content, footer { + clear: both; + margin: 0 auto; + max-width: 90%; + padding: 0.25rem 1rem; +} + + +/************************************** + * Main Area: Header + */ + +header { + margin: 0.5rem auto 0 auto; + display: flex; + flex-direction: row; + align-items: center; + flex-wrap: wrap; +} +div.logo { + display: inline; + max-height: 4em; + max-width: 4em; + flex: 0 1 auto; +} + +div.logo img { + padding: 0; + box-shadow: 2px 4px 6px rgba(180,180,180,0.70); + border-radius: 2mm; +} + +div.logo br { + display: none; +} + +div.logo nobr { + color: #eee; + font-size: 1.2rem; + font-weight: bold; + padding: 0; + text-shadow: 3px 3px 1px #000; + vertical-align: top; + white-space: nowrap; +} + +div.title { + color: #3297f9; + font-family: Verdana, sans-serif; + font-weight: bold; + font-size: 2.5rem; + padding: 0.5rem; + text-align: center; + text-shadow: 3px 3px 1px #000; + flex: 10 0 auto; +} + +div.status { + color: #ee0; + font-size: 1rem; + padding: 0.25rem; + text-align: right; + text-shadow: 2px 2px 1px #000; + flex: 0 1 auto; +} + + +/************************************** + * Main Area: Global Menu + */ + +nav.mainmenu, div.submenu { + background-color: #080; + border-radius: 1rem 1rem 0 0; + box-shadow: 3px 4px 1px #000; + color: #000; + font-weight: bold; + font-size: 1.1rem; + text-align: center; +} + +nav.mainmenu { + padding-top: 0.33rem; + padding-bottom: 0.25rem; +} + +div.submenu { + border-top: 1px solid #0a0; + border-radius: 0; + display: block; +} + +nav.mainmenu a, div.submenu a, div.submenu label { + color: #000; + padding: 0 0.75rem; + text-decoration: none; +} + +nav.mainmenu a:hover, div.submenu a:hover, div.submenu label:hover { + color: #fff; + text-shadow: 0px 0px 6px #0f0; +} + +div.submenu * { + margin: 0 0.5rem; + vertical-align: middle; +} + +div.submenu select, div.submenu input { + background-color: #222; + border: 1px inset #080; + color: #eee; + cursor: pointer; + font-size: 0.9rem; +} + +div.submenu select { + height: 1.75rem; +} + +/************************************** + * Main Area: Content + */ + +div.content { + background-color: #222; + border-radius: 0 0 1rem 1rem; + box-shadow: 3px 3px 1px #000; + min-height:40%; + padding-bottom: 1rem; + padding-top: 0.5rem; +} + +div.content table[bgcolor="white"] { + color: #000; +} + +.piechartLabel { + fill: white; +} +.piechartLine { + stroke: white; +} + +/************************************** + * Main Area: Footer + */ + +footer { + color: #ee0; + font-size: 0.75rem; + padding: 0; + text-align: right; + width: 75%; +} + + +footer div { + background-color: #222; + box-shadow: 3px 3px 1px #000; + border-radius: 0 0 1rem 1rem; + margin: 0 0 10px 0; + padding: 0.25rem 0.75rem; +} + +footer div.page-time { + float: left; +} + +footer div.fossil-info { + float: right; +} + +footer a, footer a:link, footer a:visited { + color: #ee0; +} + +footer a:hover { + color: #fff; + text-shadow: 0px 0px 6px #ee0; +} + + +/************************************** + * Check-in + */ + +table.label-value th { + vertical-align: top; + text-align: right; + padding: 0.1rem 1rem; +} + + +/************************************** + * Diffs + */ + +tr.diffskip.jchunk { + background-color: black; +} +tr.diffskip > td.chunkctrl .jcbutton { + background-color: #303536; +} + +/* Code Added */ +td.diffln ins, +td.difftxt ins > ins { + background-color: #7f7; + color: #000; +} +td.difftxt ins { + background-color: inherit; +} + +/* Code Deleted */ +td.diffln del, +td.difftxt del > del { + background-color: #f77; + color: #000; +} +td.difftxt del { + background-color: inherit; +} + + +/************************************** + * Diffs : Side-By-Side + */ + +/* display (column-based) */ +table.splitdiff { + border-spacing: 0; + font-size: 0.85rem; +} + +table.splitdiff pre { + border: 0; + margin: 0 0.5em; + padding: 0; +} + +table.splitdiff td { + padding: 0; + vertical-align: top; +} + +/* line number column */ +td.diffln { + color: #ee0; + padding-right: 0.75em; + text-align: right; +} + +/* diff text column */ +td.difftxt { + background-color: #111; + overflow-x: auto; + width: 45em; +} + + +/* diff marker column */ +td.diffsep { + padding: 0 0.5em; +} + + +/************************************** + * Diffs : Unified + */ + +table.udiff pre { + background-color: #111; +} + + +/************************************** + * File List : Flat + */ + +table.browser { + width: 100%; + border: 0; +} + +td.browser { + width: 24%; + vertical-align: top; +} + +ul.browser { + margin: 0.5rem; + padding: 0.5rem; + white-space: nowrap; +} + +ul.browser li.dir { + font-style: italic +} + + +/************************************** + * File List : Age + */ + +.fileage tr:hover { + background-color: #225; +} + + +/************************************** + * File List : Tree + */ + +.filetree { + line-height: 1.5; + margin: 1rem 0; +} + +/* list */ +.filetree ul { + list-style: none; + margin: 0; + padding: 0; +} + +/* collapsed list */ +.filetree ul.collapsed { + display: none; +} + +/* lists below the root */ +.filetree ul ul { + margin: 0 0 0 21px; + position: relative; +} + +/* lists items */ +.filetree li { + margin: 0; + padding: 0; + position: relative; +} + +/* node lines */ +.filetree li li:before { + border-bottom: 2px solid #000; + border-left: 2px solid #000; + content: ''; + height: 1.5rem; + left: -14px; + position: absolute; + top: -0.8rem; + width: 14px; +} + +/* directory lines */ +.filetree li > ul:before { + border-left: 2px solid #000; + bottom: 0; + content: ''; + left: -35px; + position: absolute; + top: -1.5rem; +} + +/* hide lines for last-child directories */ +.filetree li.last > ul:before { + display: none; +} + +.filetree a { + background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEAAP\/\/\/yEhIf\/\/\/wAAACH5BAEHAAIALAAAAAAQABAAAAIvlIKpxqcfmgOUvoaqDSCxrEEfF14GqFXImJZsu73wepJzVMNxrtNTj3NATMKhpwAAOw==); + background-position: center left; + background-repeat: no-repeat; + display: inline-block; + min-height: 16px; + padding-left: 21px; + position: relative; + z-index: 1; +} + +.filetree .dir > a { + background-image: url(data:image/gif;base64,R0lGODlhEAAQAJEAAP/WVCIiIv\/\/\/wAAACH5BAEHAAIALAAAAAAQABAAAAInlI9pwa3XYniCgQtkrAFfLXkiFo1jaXpo+jUs6b5Z/K4siDu5RPUFADs=); + font-style: italic +} + +.filetreeline:hover { + color: #000; + font-weight: bold; +} + +.filetreeline .filetreeage { + padding-right: 0.5rem; +} + +/************************************** + * Logout + */ + +span.loginError { + color: #f00; +} + +table.login_out { + margin: 10px; + text-align: left; +} + +td.login_out_label { + text-align: center; +} + +div.captcha { + padding: 1rem; + text-align: center; +} + +table.captcha { + background-color: #111; + border-color: #111; + border-style: inset; + border-width: 2px; + margin: auto; + padding: 0.5rem; +} + +table.captcha pre { + color: #ee0; +} + + +/************************************** + * Statistics Reports + */ + +.statistics-report-graph-line { + border: 2px solid #22e; + background-color: #22e; +} +.statistics-report-graph-extra { + border: 2px dashed #22e; + border-left-style: none; +} + +.statistics-report-table-events th { + padding: 0 1rem; +} + +.statistics-report-table-events td { + padding: 0.1rem 1rem; +} + +.statistics-report-row-year { + color: #ee0; + text-align: left; +} + +.statistics-report-week-number-label { + font-size: 0.8rem; + text-align: right; +} + +.statistics-report-week-of-year-list { + font-size: 0.8rem; +} + + +/************************************** + * Search + */ + +.searchResult .snippet mark { + color: #ee0; +} + + +/************************************** + * Sections + */ + +div.section, div.sectionmenu { + color: #2ee; + background-color: #22c; + border-radius: 0 3rem; + box-shadow: 2px 2px #000; + display: flex; + font-size: 1.1rem; + font-weight: bold; + justify-content: space-around; + margin: 1.2rem auto 0.75rem auto; + padding: 0.2rem; + text-align: center; +} + +div.sectionmenu { + border-radius: 0 0 3rem 3rem; + margin-top: auto; + width: 75%; +} + +div.sectionmenu > a:link, div.sectionmenu > a:visited { + color: #000; + text-decoration: none; +} + +div.sectionmenu > a:hover { + color: #eee; + text-shadow: 0px 0px 6px #eee; +} + + +/************************************** + * Sidebox + */ + +div.sidebox { + background-color: #333; + border-radius: 0.5rem; + box-shadow: 3px 3px 1px #000; + float: right; + margin: 1rem 0.5rem; + padding: 0.5rem; +} + +div.sidebox ol { + margin: 0 0 0.5rem 2.5rem; + padding: 0 0; +} + +div.sidebox ol li { + margin-top: 0.75rem; +} + +div.sideboxTitle { + background-color: #ee0; + border-radius: 0.5rem 0.5rem 0 0; + color: #000; + font-weight: bold; + margin: -0.5rem -0.5rem 0 -0.5rem; + padding: 0.25rem; + text-align: center; +} + +div.sideboxDescribed { + display: inline; +} + +/* --- Untested : Begin --- */ +/* The defined element in sideboxes for branches,.. */ +span.disabled { + color: #f00; +} +/* --- Untested : End --- */ + + +/************************************** + * Tag + */ + +/* --- Untested : Begin --- */ +/* the format for the tag links */ +a.tagLink { +} +/* the format for the tag display(no history permission!) */ +span.tagDsp { + font-weight: bold; +} +/* the format for fixed/canceled tags,.. */ +span.infoTagCancelled { + font-weight: bold; + text-decoration: line-through; +} +/* --- Untested : End --- */ + + +/************************************** + * Ticket + */ + +table.report { + color: #000; + border: 1px solid #999; + border-collapse: collapse; + margin: 1rem 0; +} + +table.report tr th { + color: #eee; + padding: 3px 5px; + text-transform : capitalize; +} + +table.report tr td { + padding: 3px 5px; +} + +/* example ticket colors */ +table.rpteditex { + border-collapse: collapse; + border-spacing: 0; + color: #000; + float: right; + margin: 0; + padding: 0; + text-align: center; + width: 125px; +} + +td.rpteditex { + border-color: #000; + border-style: solid; + border-width: thin; +} + +#reportTable { +} + +/* format for labels on ticket display page */ +td.tktDspLabel { + text-align: right; +} + +/* format for values on ticket display page */ +td.tktDspValue { + background-color: #111; + text-align: left; + vertical-align: top; +} + +/* Tickets on timelines */ +td.tktTlOpen { + color: #ffa0a0; +} + +/* format for ticket error messages */ +span.tktError { + color: #f00; + font-weight: bold; +} + + +/************************************** + * Timeline + */ + +/* The suppressed duplicates lines in timeline, .. */ +.timelineDisabled { + font-size: 0.5rem; + font-style: italic; +} + +/* the format for the timeline version display(no history permission!) */ +.timelineHistDsp { + font-weight: bold; +} + +.content .timelineTable { + border: 0; + border-spacing: 0 0.5rem; +} + +.content .timelineTable tr { + background: #222; + border: 0; + padding: 0; + box-shadow: none; +} + +.timelineTable .timelineDate { + color: #ee0; + font-size: 1.2rem; + font-weight: bold; + margin-top: 1rem; + white-space: nowrap; +} + +.timelineTable .timelineTime { + border-radius: 0; + border-width: 0; + padding: 0.25rem 0.5rem 0.5rem 0.5rem; + white-space: nowrap; +} + +.timelineGraph { + text-align: left; + vertical-align: top; + width: 20px; +} + +.timelineTable .timelineModernCell , +.timelineTable .timelineCompactCell , +.timelineTable .timelineVerboseCell , +.timelineTable .timelineDetailCell { +/* + background: linear-gradient(to bottom, #222 0%, #333 16%, #222 100%); +*/ + border-radius: 0; + border-width: 0; + padding: 0.25rem 0.5rem 0.5rem 0.5rem; +} + +.timelineTable .timelineColumnarCell { +/* + background: linear-gradient(to bottom, #222 0%, #333 16%, #222 100%); +*/ + border-radius: 0; + border-width: 0; + padding: 0.25rem 0.5rem 0.5rem 0.5rem; +} + +.timelineTable .timelineModernCell[id] , +.timelineTable .timelineCompactCell[id] , +.timelineTable .timelineVerboseCell[id] , +.timelineTable .timelineColumnarCell[id] , +.timelineTable .timelineDetailCell[id] { + background: #272727; +} + +.timelineTable .timelineCurrent .timelineTime { + background: #333; + border-radius: 1rem 0 0 1rem; + border-width: 0; +} + +.timelineTable .timelineCurrent .timelineColumnarCell { + background: #333; +} + +.timelineTable .timelineCurrent .timelineModernCell , +.timelineTable .timelineCurrent .timelineCompactCell , +.timelineTable .timelineCurrent .timelineVerboseCell , +.timelineTable .timelineCurrent .timelineDetailCell { + background: #333; + border-radius: 0 1rem 1rem 0; +} + +.timelineTable .timelineSelected { + background: #222; + border: 0; + box-shadow: none; +} +.timelineSelected {} +.timelineSecondary {} + +.timelineTable .timelineSelected .timelineTime { + background: #333; + border-radius: 1rem 0 0 1rem; + box-shadow: 2px 2px 1px #000; +} + +.timelineTable .timelineSelected .timelineColumnarCell { + background: #333; + box-shadow: 2px 2px 1px #000; +} + +.timelineTable .timelineSelected .timelineModernCell , +.timelineTable .timelineSelected .timelineCompactCell , +.timelineTable .timelineSelected .timelineVerboseCell , +.timelineTable .timelineSelected .timelineDetailCell { + background: #333; + border-radius: 0 1rem 1rem 0; + box-shadow: 2px 2px 1px #000; +} + +span.timelineSelected { + padding: 0 1em 0 1em; + border-radius: 1rem; + background: #333; + box-shadow: 2px 2px 1px #000; +} + +.timelineTable .timelineModernCell .timelineModernComment , +.timelineTable .timelineModernCell .timelineModernDetail , +.timelineTable .timelineCompactCell .timelineCompactComment , +.timelineTable .timelineCompactCell .timelineCompactDetail , +.timelineTable .timelineVerboseCell .timelineVerboseComment , +.timelineTable .timelineVerboseCell .timelineVerboseDetail { +} + +.timelineTable .timelineModernCell .timelineLeaf , +.timelineTable .timelineCompactCell .timelineLeaf , +.timelineTable .timelineVerboseCell .timelineLeaf , +.timelineTable .timelineVerboseComment .timelineLeaf { + font-weight: bold; +} + +.timelineTable .timelineModernCell .timelineModernDetail , +.timelineTable .timelineDetailCell { + font-size: 85%; +} + +.timelineTable .timelineDetailCell .timelineColumnarDetail { + white-space: pre-line; +} + +.timelineTable .timelineDetailCell ul.filelist::before { + content: "files:"; +} + +.timelineTable .timelineDetailCell ul.filelist { + margin-left: 0; + padding-left: 0; +} + +.timelineTable .timelineDetailCell ul.filelist li { + margin-left: 1.5rem; + padding-left: 0; + white-space: nowrap; +} + +/* the format for the timeline version links */ +a.timelineHistLink { +} + +/* Timeline graph style taken from Ardoise, with +** minor adjustments (2025-03-28) */ +.tl-canvas { + margin: 0 6px 0 10px +} +.tl-rail { + width: 18px +} +.tl-mergeoffset { + width: 2px +} +.tl-nodemark { + margin-top: .8em +} +.tl-node { + width: 10px; + height: 10px; + border: 1px solid #bbb; + background: #111; + cursor: pointer +} +.tl-node.leaf:after { + content: ''; + position: absolute; + top: 3px; + left: 3px; + width: 4px; + height: 4px; + background: #bbb +} +.tl-node.closed-leaf svg { + position: absolute; + top: 0px; + left: 0px; + width: 10px; + height: 10px; + color: #bbb; +} +.tl-node.sel:after { + content: ''; + position: absolute; + top: 1px; + left: 1px; + width: 8px; + height: 8px; + background: #ff8000 +} +.tl-arrow { + width: 0; + height: 0; + transform: scale(.999); + border: 0 solid transparent +} +.tl-arrow.u { + margin-top: -1px; + border-width: 0 3px; + border-bottom: 7px solid +} +.tl-arrow.u.sm { + border-bottom: 5px solid #bbb +} +.tl-line { + background: #bbb; + width: 2px +} +.tl-arrow.merge { + height: 1px; + border-width: 2px 0 +} +.tl-arrow.merge.l { + border-right: 3px solid #bbb +} +.tl-arrow.merge.r { + border-left: 3px solid #bbb +} +.tl-line.merge { + width: 1px +} +.tl-arrow.cherrypick { + height: 1px; + border-width: 2px 0; +} +.tl-arrow.cherrypick.l { + border-right: 3px solid #bbb; +} +.tl-arrow.cherrypick.r { + border-left: 3px solid #bbb; +} +.tl-line.cherrypick.h { + width: 0px; + border-top: 1px dashed #bbb; + border-left: 0px dashed #bbb; + background: rgba(255,255,255,0); +} +.tl-line.cherrypick.v { + width: 0px; + border-top: 0px dashed #bbb; + border-left: 1px dashed #bbb; + background: rgba(255,255,255,0); +} + +/************************************** + * User Edit + */ + +/* layout definition for the capabilities box on the user edit detail page */ +div.ueditCapBox { + float: left; + margin: 0 20px 20px 0; +} + +/* format of the label cells in the detailed user edit page */ +td.usetupEditLabel { + text-align: right; + vertical-align: top; + white-space: nowrap; +} + +/* color for capabilities, inherited by nobody */ +span.ueditInheritNobody { + color: #0f0; +} + +/* color for capabilities, inherited by developer */ +span.ueditInheritDeveloper { + color: #f00; +} + +/* color for capabilities, inherited by reader */ +span.ueditInheritReader { + color: #ee0; +} + +/* color for capabilities, inherited by anonymous */ +span.ueditInheritAnonymous { + color: #00f; +} + +/* format for capabilities */ +span.capability { + font-weight: bold; +} + +/* format for different user types */ +span.usertype { + font-weight: bold; +} + +span.usertype:before { + content:"'"; +} + +span.usertype:after { + content:"'"; +} + + +/************************************** + * User List + */ + +table.usetupLayoutTable { + margin: 0.5rem; + outline-style: none; + padding: 0; +} + +td.usetupColumnLayout { + vertical-align: top +} + +td.usetupColumnLayout ol th { + padding: 0 0.75rem 0.5rem 0; +} + +span.note { + color: #ee0; + font-weight: bold; +} + +table.usetupUserList { + margin: 0.5rem; +} + +.usetupListUser { + padding-right: 20px; + text-align: right; +} + +.usetupListCap { + padding-right: 15px; + text-align: center; +} + +.usetupListCon { + text-align: left; +} + + +/************************************** + * Wiki + */ + +span.wikiError { + font-weight: bold; + color: #f00; +} + +/* the format for fixed/cancelled tags */ +span.wikiTagCancelled { + text-decoration: line-through; +} + + +/************************************** + * Did not encounter these + */ + +/* selected lines of text within a linenumbered artifact display */ +table.numbered-lines td.line-numbers span.selected-line { + font-weight: bold; + color: #00f; + background-color: #d5d5ff; + border-color: #00f; +} + +/* format for missing privileges note on user setup page */ +p.missingPriv { + color: #00f; +} + +/* format for leading text in wikirules definitions */ +span.wikiruleHead { + font-weight: bold; +} + + +/* format for user color input on checkin edit page */ +input.checkinUserColor { + /* no special definitions, class defined, to enable color pickers, + * f.e.: + * ** add the color picker found at http:jscolor.com as java script + * include + * ** to the header and configure the java script file with + * ** 1. use as bindClass :checkinUserColor + * ** 2. change the default hash adding behaviour to ON + * ** or change the class definition of element identified by + * id="clrcust" + * ** to a standard jscolor definition with java script in the footer. + * */ +} + +/* format for end of content area, to be used to clear page flow. */ +div.endContent { + clear: both; +} + +/* format for general errors */ +p.generalError { + color: #f00; +} + +/* format for tktsetup errors */ +p.tktsetupError { + color: #f00; + font-weight: bold; +} +/* format for xfersetup errors */ +p.xfersetupError { + color: #f00; + font-weight: bold; +} +/* format for th script errors */ +p.thmainError { + color: #f00; + font-weight: bold; +} +/* format for th script trace messages */ +span.thTrace { + color: #f00; +} +/* format for report configuration errors */ +p.reportError { + color: #f00; + font-weight: bold; +} +/* format for report configuration errors */ +blockquote.reportError { + color: #f00; + font-weight: bold; +} +/* format for artifact lines, no longer shunned */ +p.noMoreShun { + color: yellow; +} +/* format for artifact lines being shunned */ +p.shunned { + color: yellow; +} +/* a broken hyperlink */ +span.brokenlink { + color: #f00; +} +/* List of files in a timeline */ +ul.filelist { + margin-top: 3px; + line-height: 100%; +} +/* Moderation Pending message on timeline */ +span.modpending { + color: #b30; + font-style: italic; +} +/* format for textarea labels */ +span.textareaLabel { + font-weight: bold; +} +/* format for th1 script results */ +pre.th1result { + white-space: pre-wrap; + word-wrap: break-word; +} +/* format for th1 script errors */ +pre.th1error { + white-space: pre-wrap; + word-wrap: break-word; + color: #f00; +} + +/* even table row color */ +tr.row0 { + /* use default */ +} +/* odd table row color */ +tr.row1 { + /* Use default */ +} + +.fossil-PopupWidget, +.fossil-tooltip.help-buttonlet-content { + background-color: #111; + border: 1px solid rgba(255,255,255,0.5); +} +.fossil-PopupWidget a, +.fossil-PopupWidget a:visited { + color: white; +} +div.forumSel { + background-color: #663399; +} +div.forumPostBody blockquote { + border-width: 1pt; + border-style: solid; + padding: 0 0.5em; + border-radius: 0.25em; +} + +body.forum .forumPosts.fileage a { + color: #60c0ff; +} +body.forum .forumPosts.fileage a:visited { + color: #40a0ff; +} + +.debug { + color: black; +} + +body.branch .brlist > table > tbody > tr:hover:not(.selected), +body.branch .brlist > table > tbody > tr.selected { + background-color: #444; +} + +body.chat header, body.chat footer, +body.chat nav.mainmenu, body.chat div.submenu, +body.chat div.content { + margin-left: 0.5em; + margin-right: 0.5em; + margin-top: auto/*eliminates unnecessary scrollbars*/; +} +body.chat.chat-only-mode div.content { + max-width: revert; +} +body.chat #chat-user-list .chat-user{ + color: white; +} diff --git a/skins/xekri/details.txt b/skins/xekri/details.txt new file mode 100644 index 0000000..d77ed8e --- /dev/null +++ b/skins/xekri/details.txt @@ -0,0 +1,4 @@ +timeline-arrowheads: 1 +timeline-circle-nodes: 0 +timeline-color-graph-lines: 1 +white-foreground: 1 diff --git a/skins/xekri/footer.txt b/skins/xekri/footer.txt new file mode 100644 index 0000000..09793b5 --- /dev/null +++ b/skins/xekri/footer.txt @@ -0,0 +1,9 @@ +</div> +<footer> + <div class="page-time"> + Generated in <th1>puts [expr {([utime]+[stime]+1000)/1000*0.001}]</th1>s + </div> + <div class="fossil-info"> + Fossil v$release_version $manifest_version + </div> +</footer> diff --git a/skins/xekri/header.txt b/skins/xekri/header.txt new file mode 100644 index 0000000..806ad22 --- /dev/null +++ b/skins/xekri/header.txt @@ -0,0 +1,120 @@ +<header> + <div class="logo"> + <th1> + ## + ## NOTE: The purpose of this procedure is to take the base URL of the + ## Fossil project and return the root of the entire web site using + ## the same URI scheme as the base URL (e.g. http or https). + ## + proc getLogoUrl { baseurl } { + set idx(first) [string first // $baseurl] + if {$idx(first) != -1} { + ## + ## NOTE: Skip second slash. + ## + set idx(first+1) [expr {$idx(first) + 2}] + ## + ## NOTE: (part 1) The [string first] command does NOT actually + ## support the optional startIndex argument as specified + ## in the TH1 support manual; therefore, we fake it by + ## using the [string range] command and then adding the + ## necessary offset to the resulting index manually + ## (below). In Tcl, we could use the following instead: + ## + ## set idx(next) [string first / $baseurl $idx(first+1)] + ## + set idx(nextRange) [string range $baseurl $idx(first+1) end] + set idx(next) [string first / $idx(nextRange)] + if {$idx(next) != -1} { + ## + ## NOTE: (part 2) Add the necessary offset to the result of + ## the search for the next slash (i.e. the one after + ## the initial search for the two slashes). + ## + set idx(next) [expr {$idx(next) + $idx(first+1)}] + ## + ## NOTE: Back up one character from the next slash. + ## + set idx(next-1) [expr {$idx(next) - 1}] + ## + ## NOTE: Extract the URI scheme and host from the base URL. + ## + set scheme [string range $baseurl 0 $idx(first)] + set host [string range $baseurl $idx(first+1) $idx(next-1)] + ## + ## NOTE: Try to stay in SSL mode if we are there now. + ## + if {[string compare $scheme http:/] == 0} { + set scheme http:// + } else { + set scheme https:// + } + set logourl $scheme$host/ + } else { + set logourl $baseurl + } + } else { + set logourl $baseurl + } + return $logourl + } + if {1} { + # Link logo to the top of the current domain + set logourl [getLogoUrl $baseurl] + } else { + # Link logo to the top of the current repo + set logourl $baseurl + } + </th1> + <a href="$logourl"> + <img src="$logo_image_url" border="0" alt="$<project_name>"> + </a> + </div> + <div class="title">$<title></div> + <div class="status"><nobr> + <th1> + if {[info exists login]} { + puts "Logged in as $login" + } else { + puts "Not logged in" + } + </th1> + </nobr><small><div id="clock"></div></small></div> +</header> +<th1>html "<script nonce='$nonce'>"</th1> + function updateClock(){ + var e = document.getElementById("clock"); + if(e){ + var d = new Date(); + function f(n) { + return n < 10 ? '0' + n : n; + } + e.innerHTML = d.getUTCFullYear()+ '-' + + f(d.getUTCMonth() + 1) + '-' + + f(d.getUTCDate()) + ' ' + + f(d.getUTCHours()) + ':' + + f(d.getUTCMinutes()); + setTimeout(updateClock,(60-d.getUTCSeconds())*1000); + } + } + updateClock(); +</script> +<nav class="mainmenu" title="Main Menu"> + <th1> + set sitemap 0 + foreach {name url expr class} $mainmenu { + if {![capexpr $expr]} continue + if {[string match /* $url]} { + if {[string match $url\[/?#\]* /$current_page/]} { + set class "active $class" + } + set url $home$url + } + html "<a href='$url' class='$class'>$name</a>\n" + if {[string match */sitemap $url]} {set sitemap 1} + } + if {!$sitemap} { + html "<a href='$home/sitemap'>...</a>\n" + } + </th1> +</nav> |
