diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -22,6 +22,7 @@ syntax: regexp ^\.project$ ^\.pydevproject$ ^\.coverage$ +^kallithea/public/css/style\.css$ ^kallithea\.db$ ^test\.db$ ^Kallithea\.egg-info$ diff --git a/docs/contributing.rst b/docs/contributing.rst --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -37,6 +37,8 @@ To get started with Kallithea developmen pip install --upgrade pip setuptools pip install --upgrade -e . pip install --upgrade -r dev_requirements.txt + npm --prefix kallithea/public/less install # install dependencies - both tools and data + npm --prefix kallithea/public/less run less # for generating css from less gearbox make-config my.ini gearbox setup-db -c my.ini --user=user --email=user@example.com --password=password --repos=/tmp gearbox serve -c my.ini --reload & diff --git a/docs/overview.rst b/docs/overview.rst --- a/docs/overview.rst +++ b/docs/overview.rst @@ -69,6 +69,12 @@ installed. (``pip install kallithea`` from a source tree will do pretty much the same but build the Kallithea package itself locally instead of downloading it.) +.. note:: The front-end code is built with Node. Currently, it must be built + locally after installing Kallithea. Assuming Node and the Node + Package Manager is available, other tools and source code will be + downloaded and installed. The front-end code can then be built from + source locally. + Web server ---------- diff --git a/docs/setup.rst b/docs/setup.rst --- a/docs/setup.rst +++ b/docs/setup.rst @@ -5,6 +5,22 @@ Setup ===== +Preparing front-end +------------------- + +Temporarily, in the current Kallithea version, some extra steps are required to +build front-end files: + +Find the right ``kallithea/public/less`` path with:: + + python -c "import os, kallithea; print os.path.join(os.path.dirname(os.path.abspath(kallithea.__file__)), 'public', 'less')" + +Then run:: + + npm --prefix kallithea/public/less install + npm --prefix kallithea/public/less run less + + Setting up Kallithea -------------------- diff --git a/docs/upgrade.rst b/docs/upgrade.rst --- a/docs/upgrade.rst +++ b/docs/upgrade.rst @@ -87,6 +87,18 @@ If you originally installed from version hg pull -u pip install --upgrade -e . +Temporarily, in the current version, an extra step is required to build +front-end files: + +Find the right ``kallithea/public/less`` path with:: + + python -c "import os, kallithea; print os.path.join(os.path.dirname(os.path.abspath(kallithea.__file__)), 'public', 'less')" + +Then run:: + + npm --prefix kallithea/public/less install + npm --prefix kallithea/public/less run less + 5. Upgrade your configuration ----------------------------- diff --git a/kallithea/public/css/style.css b/kallithea/public/css/style.css deleted file mode 100644 --- a/kallithea/public/css/style.css +++ /dev/null @@ -1,1830 +0,0 @@ -/*! - * Don't edit the css file directly. - * - * Instead, edit the less file(s) and regenerate the css: - * - * npm --prefix kallithea/public/less install - * npm --prefix kallithea/public/less run less - * - */ -body { - background: url("../images/background.png") repeat scroll 0 0 #B0B0B0; -} -a { - color: #577632; - text-decoration: none; -} -a:hover { - color: #576622; - text-decoration: underline; -} -code, -.code pre, -.linenos pre, -div.readme pre, -div.formatted-fixed, -.CodeMirror .CodeMirror-code pre { - font-size: 12px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} -/* class for texts where newlines should be preserved, for very light-weight ascii art markup (like pull request descriptions) */ -.formatted-fixed { - white-space: pre-wrap; -} -.changeset_hash { - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} -/* Note: class 'icon-empty' or 'icon-gravatar' can be used to get icon-ish styling without an actual glyph */ -i[class^='icon-empty'], -i[class^='icon-gravatar'] { - background-repeat: no-repeat; - background-position: center; - display: inline-block; - min-width: 16px; - min-height: 16px; - margin: -2px 0 -4px 0; -} -.inline-comments-general.show-general-status .hidden.general-only { - display: block !important; -} -.truncate { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - -o-text-overflow: ellipsis; - -ms-text-overflow: ellipsis; -} -.truncate.autoexpand:hover { - overflow: visible; -} -/* show comment anchors when hovering over panel-heading */ -a.permalink { - visibility: hidden; -} -.panel-heading:hover .permalink { - visibility: visible; -} -.navbar-inverse { - border: none; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - background-color: inherit; -} -nav.navbar .navbar-brand:hover, -nav.navbar .navbar-brand { - font-size: 20px; - padding-top: 12px; - color: white !important; - height: 44px; -} -nav.navbar { - min-height: 44px; - background-color: #577632; -} -/* logo */ -.navbar-brand .branding:before { - content: ""; - display: inline-block; - margin-right: .2em; - background-image: url("../images/kallithea-logo.svg"); - width: 140px; - height: 30px; - margin-bottom: -4px; - margin-top: -12px; -} -/* code highlighting */ -/* don't use bootstrap style for code blocks */ -.code-highlighttable pre { - background: inherit; - border: 0; -} -/* every direct child of a panel, that is not .panel-heading, should auto - * overflow to prevent overflowing of elements like text boxes and tables */ -.panel > :not(.panel-heading) { - overflow-x: auto; - min-height: 0.01%; -} -/* language bars (summary page) */ -#lang_stats .progress-bar { - min-width: 15px; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -#lang_stats td { - padding: 1px 0 !important; -} -/* every direct child of a main panel, that is not .panel-heading, should auto - * overflow to prevent overflowing of elements like text boxes and tables */ -#main > .panel > :not(.panel-heading) { - overflow-x: auto; - min-height: 0.01%; -} -/* use pointer cursor for expand_commit */ -.expand_commit .icon-align-left { - cursor: pointer; - color: #999; -} -/* don't break author, date and comment cells into multiple lines in changeset table */ -table.changesets .author, -table.changesets .date, -table.changesets .comments { - white-space: nowrap; -} -/* textareas should be at least 100px high and 400px wide */ -textarea.form-control { - min-height: 100px; - min-width: 400px; -} -/* add some space between the code-browser icons and the file names */ -.browser-dir > i[class^='icon-'], -.submodule-dir > i[class^='icon-'], -.browser-file > i[class^='icon-'] { - padding-right: 0.3em; -} -.form-group > label { - float: left; -} -.dt_repo_pending { - opacity: 0.5; -} -div.panel-primary { - border: none; -} -div.panel div.panel-heading { - background-color: #577632; - font-size: 14px; - font-weight: 700; -} -div.panel.panel-default:last-child { - margin-bottom: 0; -} -div.panel.panel-default > div.panel-heading { - background: #eee; -} -#content div.panel ul.pagination { - margin: 10px 0 0 0; -} -#content div.panel ul.pagination > li > a, -#content div.panel ul.pagination > li > span { - background: #ebebeb url("../images/pager.png") repeat-x; - color: #4A4A4A; - font-weight: 700; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-bottom: 1px solid #c4c4c4; - border-right: 1px solid #cfcfcf; -} -#content div.panel ul.pagination > li.active > span, -#content div.panel ul.pagination > li:hover > a, -#content div.panel ul.pagination > li:active > a { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-bottom: 1px solid #afafaf; - border-right: 1px solid #bebebe; - color: #515151; -} -.metatag { - display: inline-block; - margin-right: 1px; - border-radius: 4px 4px 4px 4px; - border: solid 1px #9CF; - padding: 2px 3px 2px 3px !important; - background-color: #DEF; -} -.metatag[data-tag="dead"] { - background-color: #E44; -} -.metatag[data-tag="stale"] { - background-color: #EA4; -} -.metatag[data-tag="featured"] { - background-color: #AEA; -} -.metatag[data-tag="requires"] { - background-color: #9CF; -} -.metatag[data-tag="recommends"] { - background-color: #BDF; -} -.metatag[data-tag="lang"] { - background-color: #FAF474; -} -.metatag[data-tag="license"] { - border: solid 1px #9CF; - background-color: #DEF; -} -.metatag[data-tag="see"] { - border: solid 1px #CBD; - background-color: #EDF; -} -a.metatag[data-tag="license"]:hover { - background-color: #577632; - color: #FFF; - text-decoration: none; -} -#perms .perm_tag { - position: relative; - top: -2px; - margin-left: 3px; - padding: 3px 3px 1px 3px; - font-size: 10px; - font-weight: bold; - text-transform: uppercase; - white-space: nowrap; - border-radius: 3px; -} -#perms .perm_tag.admin { - background-color: #B94A48; - color: #ffffff; -} -#perms .perm_tag.write { - background-color: #DB7525; - color: #ffffff; -} -#perms .perm_tag.read { - background-color: #468847; - color: #ffffff; -} -#perms .perm_tag.none { - background-color: #bfbfbf; - color: #ffffff; -} -.mergetag { - padding: 1px 3px 1px 3px; - background-color: #fca062; - font-size: 10px; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - border-radius: 3px; - margin-right: 2px; -} -.parent { - color: #666666; - clear: both; -} -.logtags { - line-height: 2.2em; -} -.phasetag, -.bumpedtag, -.divergenttag, -.extincttag, -.unstabletag, -.repotag, -.branchtag, -.logtags .tagtag, -.logtags .booktag { - margin: 0px 2px; -} -.phasetag, -.bumpedtag, -.divergenttag, -.extincttag, -.unstabletag, -.repotag, -.branchtag, -.tagtag, -.booktag, -.spantag { - padding: 1px 3px 1px 3px; - font-size: 10px; - color: #577632; - white-space: nowrap; - border-radius: 4px; - border: 1px solid #d9e8f8; - line-height: 1.5em; -} -table#changesets .phasetag, -table#changesets .bumpedtag, -table#changesets .divergenttag, -table#changesets .extincttag, -table#changesets .unstabletag, -table#changesets .branchtag, -table#changesets .tagtag, -table#changesets .booktag { - margin: 1.1em 0; - margin-right: 0.5em; -} -.phasetag, -.bumpedtag, -.divergenttag, -.extincttag, -.unstabletag, -.repotag, -.branchtag, -.tagtag, -.booktag { - float: left; - display: inline-block; -} -.logtags .phasetag, -.logtags .bumpedtag, -.logtags .divergenttag, -.logtags .extincttag, -.logtags .unstabletag, -.logtags .branchtag, -.logtags .tagtag, -.logtags .booktag, -.mergetag, -.merge { - float: right; - line-height: 1em; - margin: 1px 1px !important; - display: block; -} -.repotag { - border-color: #56A546; - color: #46A546; - font-size: 8px; - text-transform: uppercase; -} -#context-bar .repotag, -.repo-icons .repotag { - border-color: white; - color: white; - margin-top: 3px; -} -.repo-icons .repotag { - margin-top: 0px; - padding-top: 0px; - padding-bottom: 0px; -} -.booktag { - border-color: #46A546; - color: #46A546; -} -.tagtag { - border-color: #62cffc; - color: #62cffc; -} -.bumpedtag, -.divergenttag, -.extincttag, -.unstabletag { - background-color: #f00; - border-color: #600; - color: #fff; -} -.phasetag { - border-color: #1F14CE; - color: #1F14CE; -} -.logtags .branchtag a:hover, -.logtags .branchtag a, -.branchtag a, -.branchtag a:hover { - text-decoration: none; - color: inherit; -} -.logtags .tagtag { - padding: 1px 3px 1px 3px; - background-color: #62cffc; - font-size: 10px; - color: #ffffff; - white-space: nowrap; - border-radius: 3px; -} -.tagtag a, -.tagtag a:hover, -.logtags .tagtag a, -.logtags .tagtag a:hover { - text-decoration: none; - color: inherit; -} -.logbooks .booktag, -.logbooks .booktag, -.logtags .booktag, -.logtags .booktag { - padding: 1px 3px 1px 3px; - background-color: #46A546; - font-size: 10px; - color: #ffffff; - white-space: nowrap; - border-radius: 3px; -} -.logbooks .booktag, -.logbooks .booktag a, -.right .logtags .booktag, -.logtags .booktag a { - color: #ffffff; -} -.logbooks .booktag, -.logbooks .booktag a:hover, -.logtags .booktag, -.logtags .booktag a:hover, -.booktag a, -.booktag a:hover { - text-decoration: none; - color: inherit; -} -#footer { - background-color: #577632; - margin-bottom: 0; -} -#footer > span { - color: #FFF; - font-weight: 700; -} -#footer .navbar-link { - color: #FFF; -} -#login .panel-body .icon-lock { - font-size: 100px; - color: #DDD; - margin-left: -15px; - z-index: 1; -} -.user-menu { - padding: 0 !important; -} -#quick_login { - width: 330px; - min-height: 110px; - padding: 0; - position: absolute; - right: 0; - color: #fff; - background-color: #577632; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #577632, #577632); - z-index: 999; - border-radius: 0px 0px 4px 4px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - overflow: hidden; -} -#quick_login .form { - margin: 15px; -} -#quick_login h4 { - color: #fff; - margin-bottom: 10px; -} -#quick_login input#username, -#quick_login input#password { - display: block; - margin: 5px 0 10px; -} -#quick_login .password_forgotten a, -#quick_login .register a { - padding: 0 !important; - line-height: 25px !important; - float: left; - clear: both; -} -#quick_login .submit { - float: right; -} -#quick_login .submit input#sign_in { - margin-top: 5px; -} -#quick_login > .pull-left { - width: 170px; -} -#quick_login > .pull-right { - width: 140px; -} -#quick_login .full_name { - color: #FFFFFF; - font-weight: bold; - padding: 3px 3px 3px 15px; -} -#quick_login .big_gravatar { - padding: 15px 0px 0px 15px; -} -#quick_login .notifications { - padding: 2px 0px 0px 15px; - color: #FFFFFF; - font-weight: bold; - line-height: 10px !important; -} -#quick_login .notifications a, -#quick_login .unread a { - color: #FFFFFF; - display: block; - padding: 0px !important; -} -#quick_login .notifications a:hover, -#quick_login .unread a:hover { - background-color: inherit !important; -} -#quick_login .email, -#quick_login .unread { - color: #FFFFFF; - padding: 3px 3px 3px 15px; -} -#quick_login div.form div.form-group { - padding: 5px; -} -#quick_login div.form div.form-group > label { - color: #fff; - padding-bottom: 3px; -} -#quick_login div.form div.form-group > div input { - width: 236px; - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 5px 7px 4px; -} -#quick_login div.form div.buttons { - clear: both; - overflow: hidden; - text-align: right; - margin: 0; - padding: 5px 14px 0px 5px; -} -#quick_login div.form div.links { - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0 0 2px; -} -#quick_login ol.links { - display: block; - font-weight: bold; - list-style: none outside none; - text-align: right; -} -#quick_login ol.links li { - line-height: 27px; - margin: 0; - padding: 0; - color: #fff; - display: block; - float: none !important; -} -#quick_login ol.links li a { - color: #fff; - display: block; - padding: 2px; -} -#quick_login ol.links li a:HOVER { - background-color: inherit !important; -} -#register div.form div.form-group > label { - width: 135px; - float: left; - text-align: right; - margin: 2px 10px 0 0; - padding: 5px 0 0 5px; -} -#register div.form div.form-group > div input { - width: 300px; -} -#register div.form div.buttons { - border-top: 1px solid #DDD; - margin: 0; - padding: 10px 0 0 145px; -} -#journal .journal_user { - color: #747474; - font-size: 14px; - font-weight: bold; - height: 30px; -} -#journal .journal_user.deleted { - color: #747474; - font-size: 14px; - font-weight: normal; - height: 30px; - font-style: italic; -} -#journal .journal_icon { - clear: both; - float: left; - padding-right: 4px; - padding-top: 3px; -} -#journal .journal_action { - padding-top: 4px; - min-height: 2px; - float: left; -} -#journal .journal_action_params { - clear: left; - padding-left: 22px; -} -#journal .date { - clear: both; - color: #777777; - font-size: 11px; - padding-left: 22px; -} -#journal .journal_repo_name { - font-weight: bold; - font-size: 1.1em; -} -#journal .compare_view { - padding: 5px 0px 5px 0px; - width: 95px; -} -.trending_language_tbl, -.trending_language_tbl td { - border: 0 !important; - margin: 0 !important; - padding: 0 !important; -} -.trending_language_tbl, -.trending_language_tbl tr { - border-spacing: 1px; -} -h3.files_location { - font-size: 1.8em; - font-weight: 700; - border-bottom: none !important; - margin: 10px 0 !important; -} -.file_history { - padding-top: 10px; - font-size: 16px; -} -.file_author { - float: left; -} -.file_author .item { - float: left; - padding: 5px; - color: #888; -} -.changeset_id { - color: #666666; - margin-right: -3px; -} -.changeset-logical-index { - color: #666666; - font-style: italic; - font-size: 85%; - padding-right: 0.5em; - text-align: right; -} -#changeset_compare_view_content .compare_view_commits { - width: auto !important; -} -#changeset_compare_view_content .compare_view_commits td { - padding: 0px 0px 0px 12px !important; -} -td.author { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 210px; -} -#graph_nodes { - position: absolute; - width: 100px; -} -#graph_content, -#graph_content_pr, -#graph .container_header { - margin-left: 100px; -} -#graph_content { - position: relative; -} -table#updaterevs-table tr.mergerow, -table#updaterevs-table tr.out-of-range, -table#changesets tr.mergerow, -table#changesets tr.out-of-range { - opacity: 0.6; -} -table#changesets tr > td { - height: 31px; - border-color: #cdcdcd; - text-align: left; -} -table#changesets tr > td.checkbox-column { - width: 14px; - font-size: 0.85em; -} -table#changesets tr > td.status { - width: 14px; - font-size: 0.85em; -} -table#changesets tr > td.hash { - width: 100px; - font-size: 0.85em; -} -table#changesets tr > td.date { - width: auto !important; - color: #666; - font-size: 10px; - white-space: nowrap; -} -table#changesets tr > td.mid { - width: 100%; - padding: 0; -} -table#changesets .log-container { - position: relative; - margin-top: 8px; -} -table#changesets tr #singlerange, -table#changesets tr .changeset_range { - float: left; - margin: 2px 0; -} -table#changesets tr > td.author img { - vertical-align: middle; -} -table#changesets tr > td.author .user { - color: #444444; -} -table#changesets tr > td.mid .message, -#graph_content_pr .compare_view_commits .message { - white-space: nowrap; - padding: 0; - overflow: hidden; -} -#graph_content_pr .compare_view_commits .message { - padding: 0 !important; -} -table#changesets tr > td.mid .message.expanded, -#graph_content_pr .compare_view_commits .message.expanded { - height: auto; - overflow: initial; -} -table#changesets tr .extra-container { - display: block; - position: absolute; - top: -15px; - right: 0; - padding-left: 5px; - background: #FFFFFF; - height: 41px; -} -#pull_request_overview .comments-container, -#changeset_compare_view_content .comments-container, -table#changesets .comments-container, -#shortlog_data .comments-container, -table#changesets .logtags { - display: block; - float: left; - overflow: hidden; - padding: 0; - margin: 0; - white-space: nowrap; -} -table#changesets .comments-container { - margin: 0.8em 0; - margin-right: 0.5em; -} -table#changesets .tagcontainer { - width: 80px; - position: relative; - float: right; - height: 100%; - top: 7px; - margin-left: 0.5em; -} -table#changesets .logtags { - min-width: 80px; - height: 1.1em; - position: absolute; - left: 0px; - width: auto; - top: 0px; -} -table#changesets .logtags.tags { - top: 14px; -} -table#changesets .logtags:hover { - overflow: visible; - position: absolute; - width: auto; - right: 0; - left: initial; -} -table#changesets .logtags .booktag, -table#changesets .logtags .tagtag { - float: left; - line-height: 1em; - margin-bottom: 1px; - margin-right: 1px; - padding: 1px 3px; - font-size: 10px; -} -table#changesets tr > td.mid .message a:hover { - text-decoration: none; -} -#updaterevs-graph { - position: relative; - width: 40px; - height: 0; -} -#updaterevs-table { - margin-left: 40px !important; -} -.issue-tracker-link { - color: #3F6F9F; - font-weight: bold !important; -} -/* changeset statuses (must be the same name as the status) */ -.changeset-status-not_reviewed { - color: #bababa; -} -.changeset-status-approved { - color: #81ba51; -} -.changeset-status-rejected { - color: #d06060; -} -.changeset-status-under_review { - color: #ffc71e; -} -.pull-right .changes { - clear: both; -} -.pull-right .changes .changed_total { - display: block; - float: right; - text-align: center; - min-width: 45px; - cursor: pointer; - color: #444444; - background: #FEA; - border-radius: 0px 0px 0px 6px; - padding: 1px; -} -.pull-right .changes .added, -.pull-right .changes .changed, -.pull-right .changes .deleted { - color: #444444; -} -.pull-right .changes .added { - background: #CFC; -} -.pull-right .changes .changed { - background: #FEA; -} -.pull-right .changes .deleted { - background: #FAA; -} -.panel .search div.search_path { - background: none repeat scroll 0 0 #EEE; - border: 1px solid #CCC; - color: blue; - margin-bottom: 10px; - padding: 10px 0; -} -.panel .search div.search_path div.link { - font-weight: 700; - margin-left: 25px; -} -.panel .search div.search_path div.link a { - color: #577632; - cursor: pointer; - text-decoration: none; -} -.yui-overlay, -.yui-panel-container { - visibility: hidden; - position: absolute; - z-index: 2; -} -.ac { - vertical-align: top; -} -.ac .yui-ac { - position: inherit; - font-size: 100%; -} -.ac .perm_ac { - width: 20em; -} -.ac .yui-ac-input { - width: 100%; -} -.ac .yui-ac-container { - position: absolute; - top: 1.6em; - width: auto; -} -.ac .yui-ac-content { - position: absolute; - border: 1px solid gray; - background: #fff; - z-index: 9050; -} -.ac .yui-ac-shadow { - position: absolute; - width: 100%; - background: #000; - opacity: .10; - z-index: 9049; - margin: .3em; -} -.ac .yui-ac-content ul { - width: 100%; - margin: 0; - padding: 0; - z-index: 9050; -} -.ac .yui-ac-content li { - cursor: default; - white-space: nowrap; - margin: 0; - padding: 2px 5px; - height: 18px; - z-index: 9050; - display: block; - width: auto !important; -} -.ac .yui-ac-content li .ac-container-wrap { - width: auto; -} -.ac .yui-ac-content li.yui-ac-prehighlight { - background: #B3D4FF; - z-index: 9050; -} -.ac .yui-ac-content li.yui-ac-highlight { - background: #556CB5; - color: #FFF; - z-index: 9050; -} -.ac .yui-ac-bd { - z-index: 9050; -} -#repo_size { - display: block; - margin-top: 4px; - color: #666; - float: right; -} -.currently_following { - padding-left: 10px; - padding-bottom: 5px; -} -#switch_repos { - position: absolute; - height: 25px; - z-index: 1; -} -#switch_repos select { - min-width: 150px; - max-height: 250px; - z-index: 1; -} -.breadcrumbs { - border: medium none; - color: #FFF; - font-weight: 700; - font-size: 14px; -} -table#permissions_manage span.private_repo_msg { - font-size: 0.8em; - opacity: 0.6; -} -table#permissions_manage td.private_repo_msg { - font-size: 0.8em; -} -table#permissions_manage tr#add_perm_input td { - vertical-align: middle; -} -div.gravatar { - float: left; - background-color: #FFF; - margin-right: 0.7em; - padding: 1px 1px 1px 1px; - line-height: 0; - border-radius: 3px; -} -div.gravatar img { - border-radius: 2px; -} -#content div.panel div.panel-heading div.search { - border-left: 1px solid #576622; -} -#content div.panel div.panel-heading div.search > div input { - border: 1px solid #576622; -} -.panel-body.settings > ul.nav-stacked { - float: left; - width: 150px; - padding-right: 35px; - color: #393939; - font-weight: 700; -} -.panel-body.settings .nav-pills > li { - padding: 0 !important; -} -.panel-body.settings .nav-pills > li > a { - border-radius: 4px; - padding: 10px; - display: block; - position: relative; - color: inherit; -} -.panel-body.settings > ul.nav-stacked li.active > a, -.panel-body.settings > ul.nav-stacked li.active:hover > a { - color: #fff; - background-color: #577632; -} -.panel-body.settings > ul.nav-stacked li:hover > a { - text-decoration: none; - background-color: #eee; -} -.panel-body.settings > div, -.panel-body.settings > form { - float: left; - width: 750px; - margin: 0; -} -.panel-body.no-padding { - padding: 0; -} -.panel-body ~ .panel-body { - padding-top: 0; -} -.panel-body.no-padding ~ .panel-body { - padding-top: 15px; -} -.panel-body > :last-child { - margin-bottom: 0; -} -.panel-body.settings .text-muted { - margin: 5px 0; -} -/* No white Bootstrap buttons */ -body .btn.btn-default { - background-color: #DADADA; - background-repeat: repeat-x; - background-image: linear-gradient(to bottom, #F4F4F4, #DADADA); - border-top: 1px solid #DDD; - border-left: 1px solid #c6c6c6; - border-right: 1px solid #DDD; - border-bottom: 1px solid #c6c6c6; -} -body .btn.btn-default:hover { - background-image: none; -} -/* use our link color for btn-link */ -.btn-link { - color: #577632; -} -ins, -div.options a:hover { - text-decoration: none; -} -img, -nav.navbar #quick li a:hover span.normal, -#clone_url, -#clone_url_id { - border: none; -} -img.icon, -.right .merge img { - vertical-align: bottom; -} -#content div.panel div.panel-heading ul.links, -#content div.panel div.message div.dismiss { - float: right; - margin: 0; - padding: 0; -} -nav.navbar #home, -#content div.panel ul.left, -#content div.panel ol.left, -div#commit_history, -div#legend_data, -div#legend_container, -div#legend_choices { - float: left; -} -/* set size for statistics charts */ -#commit_history { - width: 450px; - height: 300px; -} -#overview { - clear: both; - width: 450px; - height: 100px; -} -#content #left #menu ul.closed, -#content #left #menu li ul.collapsed, -.yui-tt-shadow { - display: none; -} -#content #left #menu ul.opened, -#content #left #menu li ul.expanded { - display: block !important; -} -#context-bar .select2-container .select2-choice .select2-chosen, -nav.navbar #quick .select2-container .select2-choice .select2-chosen { - margin-right: 0; -} -.branch-switcher .select2-choice, -.repo-switcher .select2-choice { - height: 100%; - padding: 0; -} -.branch-switcher .select2-container, -.repo-switcher .select2-container, -.branch-switcher .select2-choice, -.repo-switcher .select2-choice, -.branch-switcher .select2-choice > span, -.repo-switcher .select2-choice > span { - background: transparent !important; - border: 0 !important; - box-shadow: none !important; - color: #FFFFFF !important; -} -.branch-switcher .select2-arrow, -.repo-switcher .select2-arrow { - display: none !important; -} -.select2-container.form-control { - padding: 0; - border: none; -} -.branch-switcher-dropdown.select2-drop.select2-drop-active, -.repo-switcher-dropdown.select2-drop.select2-drop-active { - box-shadow: none; - background-color: #577632; - border: 1px solid rgba(0, 0, 0, 0.15); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); -} -.repo-switcher-dropdown.select2-drop.select2-drop-active { - color: black; -} -.repo-switcher-dropdown.select2-drop.select2-drop-active .select2-result-label { - color: white; -} -#content div.panel ol.lower-roman, -#content div.panel ol.upper-roman, -#content div.panel ol.lower-alpha, -#content div.panel ol.upper-alpha, -#content div.panel ol.decimal { - margin: 10px 24px 10px 44px; -} -/* formencode htmlfill adds 'error' to failing input fields */ -#content div.panel div.form div.form-group > div input.error, -#login div.form div.form-group > div input.error, -#register div.form div.form-group > div input.error { - background: #FBE3E4; - border-top: 1px solid #e1b2b3; - border-left: 1px solid #e1b2b3; - border-right: 1px solid #FBC2C4; - border-bottom: 1px solid #FBC2C4; -} -/* formencode htmlfill injects 'error-message' */ -#content div.panel div.form div.form-group span.error-message, -#login div.form div.form-group span.error-message, -#register div.form div.form-group span.error-message { - display: inline-block; - color: red; - margin: 4px 0 0; -} -#content div.panel div.form div.form-group > div { - margin: 0 0 10px 200px; -} -div.form div.form-group div.button input, -#content div.panel div.form div.buttons input, -div.form div.buttons input, -#content div.panel div.action div.button input { - font-size: 11px; - font-weight: 700; - margin: 0; -} -div.form div.form-group div.highlight, -#content div.panel div.form div.buttons div.highlight { - display: inline; -} -#content div.panel div.form div.buttons, -div.form div.buttons { - margin: 10px 10px 0 200px; - padding: 0; -} -#content div.panel table td.user, -#content div.panel table td.address { - width: 10%; - text-align: center; -} -#content div.panel div.action div.button { - text-align: right; - margin: 6px 0 0; - padding: 0; -} -#login, -#register { - width: 520px; - margin: 10% auto 0; - padding: 0; -} -#register div.form div.form-group span.error-message { - height: 1%; - display: block; - color: red; - margin: 8px 0 0; - padding: 0; - max-width: 320px; -} -.ac .match { - font-weight: 700; - padding-top: 5px; - padding-bottom: 5px; -} -.q_filter_box { - border-radius: 4px; - border: 0 none; - margin-bottom: -4px; - margin-top: -4px; - padding-left: 3px; -} -#node_filter { - border: 0px solid #545454; - color: #AAAAAA; - padding-left: 3px; -} -/** comment main **/ -.comment .panel { - max-width: 978px; -} -.comment .panel-body { - background-color: #FAFAFA; -} -.comments-number { - padding: 10px 0; - color: #666; -} -.automatic-comment { - font-style: italic; -} -/** comment form **/ -.status-block { - margin: 5px; - clear: both; -} -.comment-form textarea { - width: 100%; - height: 100px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} -form.comment-form { - margin-top: 10px; - margin-left: 10px; -} -.comment-inline-form .comment-block-ta, -.comment-form .comment-block-ta { - border: 1px solid #ccc; - border-radius: 3px; - box-sizing: border-box; -} -.comment-form-submit { - margin-top: 5px; - margin-left: 525px; -} -.file-comments { - display: none; -} -.comment-form .comment { - margin-left: 10px; -} -.comment-form .comment-help { - padding: 5px 5px 5px 5px; - color: #666; -} -.comment-form .comment-button { - padding-top: 5px; -} -.add-another-button { - margin-left: 10px; - margin-top: 10px; - margin-bottom: 10px; -} -.panel-heading .pull-left input[type=checkbox], -.panel-heading .pull-right input[type=checkbox] { - position: relative; - top: 4px; - margin: -10px 2px 0; -} -/** comment inline form **/ -.comment-inline-form { - margin: 4px; - max-width: 978px; -} -#comments-general-comments .comment-inline-form { - margin: 0; -} -.comment-inline-form .submitting-overlay { - height: 0; - text-align: center; - font-size: 16px; - opacity: 0.5; -} -.comment-inline-form .clearfix, -.comment-form .clearfix { - background: #EEE; - border-radius: 4px; - padding: 5px; - margin: 0px; -} -div.comment-inline-form { - padding: 4px 0px 6px 0px; -} -.comment-inline-form textarea { - width: 100%; - height: 100px; - font-family: Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace; -} -form.comment-inline-form { - margin-top: 10px; - margin-left: 10px; -} -.comment-inline-form-submit { - margin-top: 5px; - margin-left: 525px; -} -.file-comments { - display: none; -} -.comment-inline-form .comment { - margin-left: 10px; -} -.comment-inline-form .comment-help { - padding: 5px 5px 5px 5px; - color: #666; -} -.comment-inline-form .comment-button { - padding-top: 5px; -} -/** comment inline **/ -.inline-comments .comment { - margin: 3px 3px 5px 5px; -} -.inline-comments #comments-general-comments .comment { - margin-left: 0; -} -.inline-comments .add-button-row { - padding: 2px 4px 8px 5px; -} -.inline-comments .comments-number { - padding: 0px 0px 10px 0px; - color: #666; -} -input.status_change_checkbox, -input.status_change_radio { - margin: 0 0 5px 15px; -} -.badge { - padding: 4px 4px !important; - text-align: center; - color: #888 !important; - background-color: #DEDEDE !important; - border-radius: 4px !important; -} -@keyframes animated-comment-background { - 0% { - background-position: 0 0; - } - 100% { - background-position: 20px 0; - } -} -.comment-preview.failed .user, -.comment-preview.failed .panel-body { - color: #666; -} -.comment-preview .comment-submission-status { - float: right; -} -.comment-preview .comment-submission-status .btn-group { - margin-left: 10px; -} -.comment-preview.submitting .panel-body { - background-image: linear-gradient(-45deg, #FAFAFA, #FAFAFA 25%, #FFF 25%, #FFF 50%, #FAFAFA 50%, #FAFAFA 75%, #FFF 75%, #FFF 100%); - background-size: 20px 20px; - animation: animated-comment-background 0.4s linear infinite; -} -/**** -PULL REQUESTS -*****/ -div.pr-details-title.closed { - color: #555; - background: #eee; -} -div.pr { - margin: 0px 15px; - padding: 4px 4px; -} -tr.pr-closed td { - background-color: #eee !important; - color: #555 !important; -} -span.pr-closed-tag { - margin-bottom: 1px; - margin-right: 1px; - padding: 1px 3px; - font-size: 10px; - color: #577632; - white-space: nowrap; - border-radius: 4px; - border: 1px solid #d9e8f8; - line-height: 1.5em; -} -.panel-body .pr-box { - max-width: 978px; - margin-right: 15px; -} -#s2id_org_ref, -#s2id_other_ref, -#s2id_org_repo, -#s2id_other_repo { - min-width: 150px; - margin: 5px; -} -#pr-summary > .pr-not-edit { - min-height: 50px !important; -} -#pr-edit-btn { - margin: 20px 0 0 !important; - position: absolute; -} -/* make 'next iteration' changeset table smaller and scrollable */ -#pr-summary #updaterevs { - max-height: 200px; - overflow-y: auto; - overflow-x: hidden; -} -/**** - PERMS -*****/ -.perm-gravatar-ac { - vertical-align: middle; - padding: 2px; - width: 14px; - height: 14px; -} -/* avoid gaps between the navbar and browser */ -.navbar.mainmenu { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar.footer { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -/* bootstrap progress bar has margin-bottom we don't want that in files list */ -.cs_files .progress { - margin-bottom: 0; -} -/* progress bars should be aligned right */ -.cs_files .changes { - float: right; - color: #577632; -} -/* colors for changes */ -.cs_files .changes .added { - color: inherit; - background-color: #BBFFBB; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} -.cs_files .changes .deleted { - background-color: #FF8888; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} -/* binary -NEW_FILENODE = 1 -DEL_FILENODE = 2 -MOD_FILENODE = 3 -RENAMED_FILENODE = 4 -CHMOD_FILENODE = 5 -BIN_FILENODE = 6 -*/ -.changes .bin { - background-color: #BBFFBB; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} -/* added binary */ -.changes .bin.bin1 { - background-color: #BBFFBB; -} -/* deleted binary*/ -.changes .bin.bin2 { - background-color: #FF8888; -} -/* mod binary*/ -.changes .bin.bin3 { - background-color: #DDDDDD; -} -/* rename file*/ -.changes .bin.bin4 { - background-color: #6D99FF; -} -/* chmod file*/ -.changes .bin.bin5 { - background-color: #6D99FF; -} -/* center collapse button */ -.diff-collapse { - text-align: center; - margin-bottom: 15px; -} -.code-difftable { - /* the whole line should be colored */ - border-collapse: collapse; - border-radius: 0px !important; - width: 100%; - /* line coloring */ - /* tabs */ - /* CR */ - /* whitespace characters */ - /* trailing spaces */ - /** LINE NUMBERS **/ - /** CODE **/ - /* leading +/- on changed lines */ -} -.code-difftable .context { - background: none repeat scroll 0 0 #DDE7EF; - color: #999; -} -.code-difftable .add { - background: none repeat scroll 0 0 #DDFFDD; -} -.code-difftable .add ins { - background: none repeat scroll 0 0 #AAFFAA; - text-decoration: none; -} -.code-difftable .del { - background: none repeat scroll 0 0 #FFDDDD; -} -.code-difftable .del del { - background: none repeat scroll 0 0 #FFAAAA; - text-decoration: none; -} -.code-difftable td.code pre u:before { - content: "\21a6"; - display: inline-block; - width: 0; -} -.code-difftable td.code pre u.cr:before { - content: "\21a4"; - display: inline-block; -} -.code-difftable td.code pre u { - color: rgba(0, 0, 0, 0.3); -} -.code-difftable td.code pre i { - border-style: solid; - border-width: 0 0 0 1px; - border-color: rgba(0, 0, 0, 0.3); -} -.code-difftable .lineno { - padding-left: 2px; - padding-right: 2px !important; - width: 30px; - -moz-user-select: none; - -webkit-user-select: none; - border-right: 1px solid #CCC !important; - border-left: 0px solid #CCC !important; - border-top: 0px solid #CCC !important; - border-bottom: none !important; - vertical-align: middle !important; - text-align: center; -} -.code-difftable .lineno.new { - text-align: right; -} -.code-difftable .lineno.old { - text-align: right; -} -.code-difftable .lineno a { - color: #aaa !important; - font: 11px Lucida Console, Consolas, Monaco, Inconsolata, Liberation Mono, monospace !important; - padding-left: 6px; - padding-right: 6px; - display: block; -} -.code-difftable .line:hover .lineno a { - color: #333 !important; -} -.code-difftable .lineno-inline { - background: none repeat scroll 0 0 #FFF !important; - padding-left: 2px; - padding-right: 2px; - text-align: right; - width: 30px; - -moz-user-select: none; - -webkit-user-select: none; -} -.code-difftable .code { - display: block; -} -.code-difftable .code pre { - border: 0; - padding: 0; - margin: 0; - background: none; - min-height: 17px; - line-height: 17px; - white-space: pre-wrap; - word-break: break-all; -} -.code-difftable .del .code pre:before { - content: "-"; - color: #800; -} -.code-difftable .add .code pre:before { - content: "+"; - color: #080; -} -.code-difftable .code pre:before { - content: " "; - margin: 0 2px; -} -/* comment bubble */ -.add-bubble { - position: relative; - display: none; - float: left; - width: 0px; - height: 0px; - left: -8px; - box-sizing: border-box; -} -/* comment bubble, only visible when in a commentable diff */ -.commentable-diff tr.line.add:hover td .add-bubble, -.commentable-diff tr.line.del:hover td .add-bubble, -.commentable-diff tr.line.unmod:hover td .add-bubble { - display: block; - z-index: 1; -} -.add-bubble div { - background: #577632; - width: 16px; - height: 16px; - cursor: pointer; - padding: 0 2px 2px 0.5px; - border: 1px solid #577632; - border-radius: 3px; - box-sizing: border-box; -} -.add-bubble div:before { - font-size: 14px; - color: #ffffff; - font-family: "kallithea"; - content: '\1f5ea'; -} -.add-bubble div:hover { - transform: scale(1.2, 1.2); -} -/* file diff icons */ -.icon-diff-modified:before { - color: #d0b44c; -} -.icon-diff-removed:before { - color: #bd2c00; -} -.icon-diff-added:before { - color: #6cc644; -} -.icon-diff-renamed:before { - color: #677a85; -} -/* show some context of link targets - but only works when the link target - can be extended with any visual difference */ -div.comment:target:before { - display: block; - height: 100px; - margin: -100px 0 0; - content: ""; -} -div.comment:target > .panel { - border: solid 2px #ee0 !important; -} -.lineno:target a { - border: solid 2px #ee0 !important; - margin: -2px; -} -.btn-image-diff-show, -.btn-image-diff-swap { - margin: 5px; -} -.img-diff { - max-width: 45%; - height: auto; - margin: 5px; - /* http://lea.verou.me/demos/css3-patterns.html */ - background-image: linear-gradient(45deg, #888 25%, transparent 25%, transparent), linear-gradient(-45deg, #888 25%, transparent 25%, transparent), linear-gradient(45deg, transparent 75%, #888 75%), linear-gradient(-45deg, transparent 75%, #888 75%); - background-size: 10px 10px; - background-color: #999; -} -.img-preview { - max-width: 100%; - height: auto; - margin: 5px; -} -div.comment-prev-next-links div.prev-comment, -div.comment-prev-next-links div.next-comment { - display: inline-block; - min-width: 150px; - margin: 3px 6px; -} -#comments-general-comments div.comment-prev-next-links div.prev-comment, -#comments-general-comments div.comment-prev-next-links div.next-comment { - margin-left: 0; -} -body table.dataTable thead .sorting { - background-image: none; -} -body table.dataTable thead .sorting_asc { - background-image: none; -} -body table.dataTable thead .sorting_desc { - background-image: none; -} -body table.dataTable thead .sorting_asc_disabled { - background-image: none; -} -body table.dataTable thead .sorting_desc_disabled { - background-image: none; -} -body table.dataTable thead .sorting_asc::after { - font-family: "kallithea"; - content: "\23f6"; -} -body table.dataTable thead .sorting_desc::after { - font-family: "kallithea"; - content: "\23f7"; -} -.dataTables_wrapper .dataTables_left { - float: left !important; -} -.dataTables_wrapper .dataTables_right { - float: right; -} -.dataTables_wrapper .dataTables_right > div { - padding-left: 30px; -} -.dataTables_wrapper .dataTables_info { - clear: none; - padding-top: 3px; -} -.dataTables_wrapper .dataTables_paginate { - padding-top: 0; -} -.dataTables_wrapper .dataTables_paginate .paginate_button { - padding: 3px 10px; -} -.dataTables_wrapper .dataTables_paginate > a.paginate_button { - padding-top: 1px; - border: 0 !important; -} -.dataTables_wrapper label { - margin-bottom: 0; - font-weight: inherit; -} -#content div.panel .changelog-panel > .changelog-heading, -#content div.panel .changelog-panel > ul.pagination { - margin-left: 100px; -} -/* undo Bootstrap chrome/webkit blue outline on focus in navbar */ -.navbar-inverse .navbar-nav > li > a:focus { - outline: 0; -} -/* pygments style */ -div.search-code-body pre .match { - background-color: #FAFFA6; -} -div.search-code-body pre .break { - background-color: #DDE7EF; - width: 100%; - color: #747474; - display: block; -} -div.annotatediv { - margin-left: 2px; - margin-right: 4px; -} -.code-highlight { - border-left: 1px solid #ccc; -} -.code-highlight pre, -.linenodiv pre { - padding: 5px 2px 0px 5px; - margin: 0; -} -.code-highlight pre div:target { - background-color: #FFFFBE !important; -} -.linenos a { - text-decoration: none; -}