initial commit

This commit is contained in:
mrliptontea
2015-01-08 09:44:36 +01:00
commit dc545cb724
66 changed files with 75902 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/.sass-cache
/node_modules
/sass/_custom-variables.scss

43
Gruntfile.js Normal file
View File

@@ -0,0 +1,43 @@
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
banner: "/*! <%= pkg.title || pkg.name %> - " +
"<%= grunt.template.today('yyyy-mm-dd') %>\n" +
" * Copyright (c) <%= grunt.template.today('yyyy') %> <%= pkg.author %>\n */\n\n",
sass: {
dist: {
options: {
style: 'compressed'
},
files: {
'stylesheets/application.css': 'sass/application.scss'
}
},
redmine_backlogs: {
options: {
style: 'compressed'
},
files: {
'plugins/redmine_backlogs/global.css': 'sass/plugins/redmine_backlogs/global.scss',
'plugins/redmine_backlogs/master_backlog.css': 'sass/plugins/redmine_backlogs/master_backlog.scss',
'plugins/redmine_backlogs/statistics.css': 'sass/plugins/redmine_backlogs/statistics.scss',
'plugins/redmine_backlogs/taskboard.css': 'sass/plugins/redmine_backlogs/taskboard.scss'
}
}
},
watch: {
css: {
files: ['sass/**/*.scss'],
tasks: ['sass'],
},
}
});
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ['sass']);
};

31
README.md Normal file
View File

@@ -0,0 +1,31 @@
# PurpleMine 2
A free Redmine theme for modern browsers.
![Screenshot](https://github.com/HolonGlobe/PurpleMine2/raw/master/screenshots/issues-list.png)
Compatible with Redmine 2.5+ and browsers: IE8+, latest Firefox and Google Chrome (others where not tested).
It's written in [SASS] (SCSS to be precise). It uses [normalize.css] and benefits from some parts of [Bootstrap][bootstrap-sass] like mixins, structure and stuff.
## Main features
* Bigger, easier to read fonts
* Wiki content with Github-ish style
* Sidebar moved to the left for better ergonomy (it's customizable via `_variables.scss`)
* Coloring trackers links (on lists, issue pages and even in the wiki content)
* Highlighting issues priority on the list and on the issue page
## How install it
To install PurpleMine, just download [.zip](https://github.com/HolonGlobe/PurpleMine2/archive/master.zip) and unpack it to your Redmine's `/public/themes` folder.
Then go to Redmine > Administration > Settings > Display and select PurpleMine2 from the list and save the changes.
## License
[WTFPL](http://www.wtfpl.net/)
[SASS]: http://sass-lang.com/
[normalize.css]: https://github.com/necolas/normalize.css
[bootstrap-sass]: https://github.com/twbs/bootstrap-sass

BIN
images/aci.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

BIN
images/preloader.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

16
package.json Normal file
View File

@@ -0,0 +1,16 @@
{
"name": "PurpleMine2",
"version": "2.0.0",
"description": "A free Redmine 2.5+ theme written in SASS",
"keywords": [
"redmine",
"theme"
],
"author": "HolonGlobe",
"license": "WTFPL",
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-sass": "^0.8.1",
"grunt-contrib-watch": "^0.6.1"
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"mappings": "AAEA,IAAK,CACD,UAAU,CAAE,MAAM,CAClB,MAAM,CAAE,IAAI,CAGhB,IAAK,CACD,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACV,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,WAAW,CCsDiB,oDAAuB,CDrDnD,SAAS,CCuDmB,IAAI,CDtDhC,WAAW,CCmEiB,OAAW,CDlEvC,KAAK,CCkWuB,IAAW,CDjWvC,gBAAgB,CAAE,OAAmC,CAGzD,CAAE,CACE,KAAK,CC+P8B,OAAW,CD9P9C,eAAe,CAAE,IAAI,CAErB,eACQ,CACJ,KAAK,CC8P0B,OAAiB,CD7PhD,eAAe,CC2BS,SAAS,CDxBrC,cAAe,CACX,KAAK,CC2BmB,IAAK,CD1B7B,eAAe,CCuBS,YAAY,CDpBxC,gBAAiB,CACb,KAAK,CCsBmB,IAAK,CDnBjC,aAAc,CACV,KAAK,CCkBmB,IAAK,CDTrC,4BAGS,CACL,WAAW,CAAE,OAAO,CACpB,SAAS,CCemB,IAAI,CDdhC,WAAW,CC2BiB,OAAW,CCjBvC,kBAAkB,CFTE,UAAU,CEU3B,eAAe,CFVE,UAAU,CEWtB,UAAU,CFXE,UAAU,CAGlC,gGAMiB,CACb,MAAM,CC2KuB,IAAyD,CD1KtF,OAAO,CAAE,OAAiD,CAC1D,KAAK,CC8SuB,IAAW,CD7SvC,gBAAgB,CC0JY,IAAI,CDzJhC,MAAM,CAAE,cAAuB,CAC/B,aAAa,CC8Je,GAAoB,CD7JhD,UAAU,CAAE,iCAAmC,CEwG/C,kBAAkB,CAAE,yDAAW,CAC1B,aAAa,CAAE,yDAAW,CACvB,UAAU,CAAE,yDAAW,CC9K/B,0IAAQ,CACJ,YAAY,CFkOY,OAAO,CEjO/B,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,8DAAmC,CDsFnD,8NAAoB,CAChB,KAAK,CD0ImB,IAAI,CCzI5B,OAAO,CAAE,CAAC,CAEd,0PAAwB,CAAE,KAAK,CDuIH,IAAI,CCtIhC,6RAA8B,CAAE,KAAK,CDsIT,IAAI,CD1JpC,QAAS,CACL,MAAM,CAAE,QAAQ,CAChB,MAAM,CAAE,IAAI,CAGhB,qBAAsB,CAClB,MAAM,CCyJuB,IAAyD,CDxJtF,OAAO,CAAE,OAAiD,CAC1D,KAAK,CC4RuB,IAAW,CD3RvC,UAAU,CCwIkB,IAAI,CDvIhC,MAAM,CAAE,cAAuB,CAC/B,MAAM,CAAE,OAAO,CACf,WAAW,CAAE,MAAM,CACnB,QAAQ,CAAE,MAAM,CAChB,UAAU,CAAE,iCAAmC,CEoF/C,kBAAkB,CAAE,yDAAW,CAC1B,aAAa,CAAE,yDAAW,CACvB,UAAU,CAAE,yDAAW,CAjH/B,kBAAkB,CF6BE,UAAU,CE5B3B,eAAe,CF4BE,UAAU,CE3BtB,UAAU,CF2BE,UAAU,CAE9B,uDACQ,CACJ,KAAK,CCgRmB,IAAW,CD7QvC,4BAAS,CE2BT,iBAAiB,CAAE,eAAiB,CAChC,aAAa,CAAE,eAAiB,CAC/B,YAAY,CAAE,eAAiB,CAC5B,SAAS,CAAE,eAAiB,CF1BpC,qCAAkB,CACd,YAAY,CC6HY,OAAO,CD5H/B,UAAU,CAAE,8DAAmC,CAGnD,8BAAS,CACL,UAAU,CAAE,GAAG,CASvB,QAAS,CACL,OAAO,CAAE,KAAK,CACd,OAAO,CAAE,SAAkB,CAC3B,QAAQ,CAAE,MAAM,CAChB,QAAQ,CAAE,QAAQ,CAClB,gBAAgB,CCuLY,OAAc,CDtL1C,UAAU,CCkOkB,oDAAwB,CDjOpD,OAAO,CAAE,IAAI,CIjHb,8BACQ,CACJ,OAAO,CAAE,GAAG,CACZ,OAAO,CAAE,KAAK,CAElB,cAAQ,CACJ,KAAK,CAAE,IAAI,CJ8Gf,qBAAa,CACT,KAAK,CAAE,IAAI,CACX,YAAY,CAAE,IAAI,CAElB,4BAAO,CACH,cAAc,CAAE,MAAM,CACtB,YAAY,CAAE,GAAG,CAGrB,2BAAM,CACF,WAAW,CAAE,IAAI,CAGrB,gCAAW,CACP,QAAQ,CAAE,QAAQ,CAClB,GAAG,CAAE,IAAI,CACT,OAAO,CAAE,MAAM,CACf,WAAW,CAAE,IAAI,CAIzB,oBAAY,CACR,KAAK,CAAE,IAAI,CACX,QAAQ,CAAE,QAAQ,CAElB,uBAAG,CACC,YAAY,CAAE,CAAC,CAGnB,uBAAG,CACC,OAAO,CAAE,IAAI,CAIrB,eAAO,CACH,KAAK,CAAE,KAAK,CAEZ,iBAAE,CACE,YAAY,CAAE,GAAG,CACjB,MAAM,CAAE,OAAO,CEuCvB,mBAAmB,CFtCU,IAAI,CEuC9B,gBAAgB,CFvCU,IAAI,CEwC7B,eAAe,CFxCU,IAAI,CEyCzB,WAAW,CFzCU,IAAI,CAIjC,6FAGW,CACP,SAAS,CAAE,OAAO,CAClB,WAAW,CAAE,OAAO,CAGxB,qCAA8C,CA9DlD,QAAS,CA+DD,SAAS,CC/Ge,MAAK,CDiH7B,6FAGW,CAIP,MAAM,CAAE,IAAiE,CACzE,OAAO,CAAE,OAA6D,CAG1E,gCAAwB,CACpB,KAAK,CAAE,KAAK,EAMpB,iBAAW,CACP,gBAAgB,CAAE,yBAAyB,CAC3C,iBAAiB,CAAE,SAAS,CAC5B,mBAAmB,CAAE,QAAQ,CIhMjC,gCACQ,CACJ,OAAO,CAAE,GAAG,CACZ,OAAO,CAAE,KAAK,CAElB,eAAQ,CACJ,KAAK,CAAE,IAAI,CJuMnB,QAAS,CACL,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACV,QAAQ,CAAE,OAAO,CAGrB,uBAES,CACL,OAAO,CAAE,IAAI,CASjB,kBAAmB,CACf,OAAO,CAAE,KAAK,CAGlB,cAAe,CACX,UAAU,CAAE,IAAI,CAOhB,2DACoB,CAChB,gBAAgB,CC4GQ,OAAO,CD3G/B,YAAY,CC4GY,OAAO,CDzGnC,+BAAoB,CAChB,OAAO,CC5JiB,GAAG,CD6J3B,KAAK,CCwGmB,OAAO,CDvG/B,SAAS,CC1Le,MAAK,CD2L7B,UAAU,CAAE,yBAA2B,CAEvC,mCAAM,CACF,UAAU,CAAE,KAAK,CACjB,QAAQ,CAAE,MAAM,CAChB,aAAa,CAAE,QAAQ,CAG3B,kCAAG,CACC,UAAU,CAAK,IAAyB,CACxC,aAAa,CAAE,IAAyB,CACxC,MAAM,CAAE,CAAC,CACT,UAAU,CAAE,iBAAoB,CAGpC,4CAAa,CACT,OAAO,CAAE,IAAI,CAKzB,aAAc,CACV,OAAO,CAAE,IAAI,CAOjB,2CACsB,CAClB,OAAO,CAAE,GAAG,CACZ,gBAAgB,CCmBY,OAAa,CDhB7C,sBAAuB,CACnB,MAAM,CAAE,IAAI,CACZ,QAAQ,CAAE,MAAM,CAShB,6EACoB,CAChB,GAAG,CAAE,GAAG,CAGZ,yFAC0B,CACtB,GAAG,CAAE,GAAG",
"sources": ["../../sass/plugins/redmine_backlogs/global.scss","../../sass/_variables.scss","../../sass/mixins/_vendor-prefixes.scss","../../sass/mixins/_forms.scss","../../sass/mixins/_clearfix.scss"],
"names": [],
"file": "global.css"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
table th,table td{padding:5px 8px}.ui-widget{margin-bottom:20px}.score{text-align:center;width:1.5em;font-size:large;display:inline-block}.score_0{background-color:#FF0000}.score_1{background-color:#FF5300}.score_2{background-color:#FF8100}.score_3{background-color:#FFA100}.score_4{background-color:#FFBB00}.score_5{background-color:#FFD300}.score_6{background-color:#FFEC00}.score_7{background-color:#E9FB00}.score_8{background-color:#B1F100}.score_9{background-color:#74E600}.score_10{background-color:#00CC00}
/*# sourceMappingURL=statistics.css.map */

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"mappings": "AAGI,iBACG,CACC,OAAO,CAAE,OAAiD,CAIlE,UAAW,CACP,aAAa,CCwEe,IAA4C,CDrE5E,MAAO,CACH,UAAU,CAAE,MAAM,CAClB,KAAK,CAAE,KAAK,CACZ,SAAS,CAAE,KAAK,CAChB,OAAO,CAAE,YAAY,CAGzB,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,QAAS,CACL,gBAAgB,CAAE,OAAO,CAG7B,SAAU,CACN,gBAAgB,CAAE,OAAO",
"sources": ["../../sass/plugins/redmine_backlogs/statistics.scss","../../sass/_variables.scss"],
"names": [],
"file": "statistics.css"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

19
sass/_mixins.scss Normal file
View File

@@ -0,0 +1,19 @@
// Mixins
// --------------------------------------------------
@import "mixins/buttons";
@import "mixins/center-block";
@import "mixins/clearfix";
@import "mixins/forms";
@import "mixins/gradients";
@import "mixins/opacity";
@import "mixins/reset-filter";
@import "mixins/tab-focus";
@import "mixins/text-overflow";
@import "mixins/vendor-prefixes";
@import "mixins/issues";
@mixin findme() {
outline: 2px solid #f38;
}

401
sass/_variables.scss Normal file
View File

@@ -0,0 +1,401 @@
//
// Variables
// --------------------------------------------------
//== Some key attributes
//
$fixed-layout: false !default;
$sidebar-position: left !default;
$color-priorities: true !default;
$color-trackers: true !default;
$colored-issue: true !default;
$use-gravatars: true !default;
//== Colors
//
$holonglobe-body: #584492 !default;
$holonglobe-text: #fff !default;
$holonglobe-dot: #deddef !default;
$gray-base: #808080 !default;
$gray-darkest: darken($gray-base, 40%) !default;
$gray-darker: darken($gray-base, 33%) !default;
$gray-dark: darken($gray-base, 17%) !default;
$gray: $gray-base !default;
$gray-light: lighten($gray-base, 17%) !default;
$gray-lighter: lighten($gray-base, 35%) !default;
$gray-lightest: lighten($gray-base, 46%) !default;
$brand-primary: $holonglobe-body !default;
$brand-text: $holonglobe-text !default;
$brand-success: #019851 !default;
$brand-info: #409ae3 !default;
$brand-warning: #e67e22 !default;
$brand-danger: #e74c3c !default;
$state-success: #b5fbb7 !default;
$state-info: #97cefb !default;
$state-warning: #ffd699 !default;
$state-danger: #f7a6a4 !default;
//== Scaffolding
//
$body-bg: #fff !default;
$text-color: $gray-dark !default;
$link-color: #4183C4 !default;
$link-hover-color: darken($link-color, 10%) !default;
$link-hover-decoration: underline !default;
$link-closed-decoration: line-through !default;
$link-color-issue-closed: $gray !default;
$link-color-project-closed: $gray !default;
$link-color-user-locked: $gray !default;
//== Typography
//
$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, freesans, sans-serif !default;
$font-family-monospace: Consolas, "Liberation Mono", Menlo, "Courier New", Courier, monospace !default;
$font-family-base: $font-family-sans-serif !default;
$font-size-base: 14px !default;
$font-size-large: 1.285em !default;
$font-size-large-px: 18px !default;
$font-size-small: .86em !default;
$font-size-small-px: 12px !default;
$font-size-h1: 2.285em !default;
$font-size-h2: 1.857em !default;
$font-size-h3: 1.5em !default;
$font-size-h4: 1.286em !default;
$font-size-h5: 1em !default;
$font-size-h6: 1em !default;
$line-height-base: 1.428571429 !default; // 20/14
$line-height-computed: floor(($font-size-base * $line-height-base)) !default; // ~20px
$headings-font-weight: 700 !default;
$headings-line-height: 1.2 !default;
//== Wiki
//
$wiki-text: #333 !default;
$wiki-font-size: 16px !default;
$wiki-line-height: 1.6 !default;
//== Components
//
$padding-base-vertical: 6px !default;
$padding-base-horizontal: 12px !default;
$padding-large-vertical: 10px !default;
$padding-large-horizontal: 16px !default;
$padding-small-vertical: 5px !default;
$padding-small-horizontal: 10px !default;
$padding-side: 20px !default;
$padding-wiki: 20px !default;
$border-radius-base: 3px !default;
$border-radius-large: 4px !default;
$border-radius-small: 2px !default;
$hr-border: $gray-light !default;
$abbr-border-color: $gray-light !default;
$blockquote-border-color: $gray-lighter !default;
$component-active-color: $brand-text !default;
$component-active-bg: $brand-primary !default;
$component-active-border: $brand-primary !default;
$font-size-list: .92em !default;
//== Tables
//
$table-cell-padding: 8px !default;
$table-condensed-cell-padding: 5px !default;
$table-bg: transparent !default;
$table-bg-accent: darken($body-bg, 3%) !default;
$table-bg-hover: #f1f1f1 !default;
$table-bg-active: $table-bg-hover !default;
$table-border-color: darken($body-bg, 13.5%) !default;
//== Trackers priorities
//
$priority-lowest-bg: #defacb !default;
$priority-lowest-text: #565 !default;
$priority-lowest-link: #265 !default;
$priority-default-bg: #fff !default;
$priority-default-text: $text-color !default;
$priority-default-link: $link-color !default;
$priority-high3-bg: #d5eaff !default;
$priority-high3-text: #556 !default;
$priority-high3-link: #336 !default;
$priority-high2-bg: #ffe1d7 !default;
$priority-high2-text: #930 !default;
$priority-high2-link: #624 !default;
$priority-highest-bg: #ffa5a5 !default;
$priority-highest-text: #900 !default;
$priority-highest-link: #403 !default;
//== Trackers links
//
$tracker-inline-padding: 2px 5px !default;
$tracker-list-padding: 0 6px !default;
$tracker-1-bg: $brand-danger !default;
$tracker-1-text: $brand-text !default;
$tracker-2-bg: $brand-primary !default;
$tracker-2-text: $brand-text !default;
$tracker-3-bg: $brand-warning !default;
$tracker-3-text: $brand-text !default;
$tracker-4-bg: $brand-info !default;
$tracker-4-text: $brand-text !default;
$tracker-5-bg: $brand-success !default;
$tracker-5-text: $brand-text !default;
$tracker-6-bg: mix($brand-success, $brand-info, 50%) !default;
$tracker-6-text: $brand-text !default;
$tracker-7-bg: mix($brand-primary, $brand-warning, 50%) !default;
$tracker-7-text: $brand-text !default;
//== Diffs
//
$diff-out-color: #522;
$diff-out-bg: #fac0d8;
$diff-out-bg-light: #fcdcf1;
$diff-in-color: #350;
$diff-in-bg: #c8fbbf;
$diff-in-bg-light: #e1fcd8;
//== Buttons
//
$btn-font-weight: normal !default;
$btn-default-color: $gray-darkest !default;
$btn-default-bg: $gray-lightest !default;
$btn-default-border: $gray-lighter !default;
$btn-primary-color: #fff !default;
$btn-primary-bg: $brand-info !default;
$btn-primary-border: darken($btn-primary-bg, 5%) !default;
$btn-success-color: #fff !default;
$btn-success-bg: $brand-success !default;
$btn-success-border: darken($btn-success-bg, 5%) !default;
//== Forms
//
$input-bg: #fff !default;
$input-bg-disabled: $gray-lighter !default;
$input-color: $gray-dark !default;
$input-border: #ccc !default;
$input-border-radius: $border-radius-small !default;
$input-border-focus: #51a7e8 !default;
$input-color-placeholder: #999 !default;
$input-padding-vertical: 3px;
$input-padding-horizontal: 8px;
$input-height-base: ($line-height-computed + ($input-padding-vertical * 2) + 2) !default;
$label-width: 160px;
$label-wide-width: 280px;
$label-space: 10px;
$legend-color: $gray-dark !default;
$legend-border-color: #e5e5e5 !default;
//== Top
//
$top-menu-bg: darken($holonglobe-body, 15%) !default;
$top-menu-text: $holonglobe-dot !default;
$top-menu-link: $holonglobe-dot !default;
$top-menu-link-hover: $holonglobe-text !default;
$header-bg: $holonglobe-body !default;
$header-text: $holonglobe-text !default;
$header-link: $holonglobe-text !default;
$header-root: $holonglobe-dot !default;
$header-title-size: $font-size-h3 !default;
$header-title-line-height: $line-height-computed * 1.5 !default;
$main-menu-bg: $gray-lightest !default;
$main-menu-link: $gray-darker !default;
$main-menu-link-active: #000 !default;
$main-menu-border: $gray-lighter !default;
$main-menu-shadow-hover: $gray-light !default;
$main-menu-shadow-width: 3px !default;
$main-menu-shadow-active: $brand-primary !default;
$main-menu-padding-vertical: $padding-large-vertical !default;
$main-menu-padding-horizontal: 5px !default;
//== Pagination
//
$pagination-color: $link-color !default;
$pagination-bg: #fff !default;
$pagination-border: #ddd !default;
$pagination-hover-color: $link-hover-color !default;
$pagination-hover-bg: $gray-lightest !default;
$pagination-hover-border: #ddd !default;
$pagination-active-color: #fff !default;
$pagination-active-bg: $brand-primary !default;
$pagination-active-border: $brand-primary !default;
//== Tabs
//
$tab-padding-vertical: 5px !default;
$tab-padding-horizontal: 8px !default;
$tab-border: $gray-lighter !default;
$tab-hover-bg: $gray-lightest !default;
$tab-hover-border: $tab-hover-bg !default;
$tab-active-bg: $body-bg !default;
$tab-active-text: $text-color !default;
$tab-active-border: $tab-border !default;
//== Content and sidebar
//
$sidebar-width: 270px !default;
$sidebar-padding-vertical: $padding-base-vertical !default;
$sidebar-padding-horizontal: $padding-side !default;
$sidebar-link-hover-bg: $gray-lightest !default;
$sidebar-link-active-bg: $body-bg !default;
$sidebar-link-active-border: $gray-lighter !default;
$sidebar-link-active-side: $brand-danger !default;
$sidebar-link-active-text: $gray-darkest !default;
//== Flash messages (alerts)
//
$flash-success-bg: #5cb85c !default;
$flash-success-border: darken($flash-success-bg, 5%) !default;
$flash-success-text: #fff !default;
$flash-success-link: #fff !default;
$flash-warning-bg: #fde3a7 !default;
$flash-warning-border: darken($flash-warning-bg, 15%) !default;
$flash-warning-text: #b45e10 !default;
$flash-warning-link: #a0540e !default;
$flash-error-bg: #d9534f !default;
$flash-error-border: darken($flash-error-bg, 5%) !default;
$flash-error-text: #fff !default;
$flash-error-link: #fff !default;
//== Progress bars
//
$progress-bg: #fff !default;
$progress-bar-bg: $brand-primary !default;
$progress-bar-success-bg: lighten($brand-success, 10%) !default;
$progress-bar-danger-bg: lighten($brand-danger, 10%) !default;
$progress-bar-info-bg: lighten($brand-info, 20%) !default;
//== Panels
//
$panel-body-padding: 15px !default;
$panel-color: #555 !default;
$panel-bg: #f5f5f5 !default;
$panel-border: #ccc !default;
$panel-border-radius: $border-radius-base !default;
$panel-shadow: 0 1px 2px rgba(#000, .1),
0 3px 8px rgba(#000, .07) !default;
//== Tooltips
//
$tooltip-bg: #fff9c8 !default;
$tooltip-border: #ccb37b !default;
$tooltip-text: #755e40 !default;
$tooltip-link: #005f97 !default;
//== Issue
//
$issue-bg: #f9f9f9 !default;
$issue-border: #ccc !default;
$issue-text: $text-color !default;
$issue-padding: 15px !default;
$issue-gravatar-size: 50px !default;
$issue-heading-size: 1.5 !default;
//== Media queries breakpoints
//
$screen-xs: 480px !default;
$screen-sm: 768px !default;
$screen-sm-min: $screen-sm !default;
$screen-md: 992px !default;
$screen-md-min: $screen-md !default;
$screen-lg: 1200px !default;
$screen-lg-min: $screen-lg !default;
$screen-xs-max: ($screen-sm-min - 1) !default;
$screen-sm-max: ($screen-md-min - 1) !default;
$screen-md-max: ($screen-lg-min - 1) !default;
//== Content widths
//
$width-sm: $screen-sm - ($padding-side * 2);
$width-md: $screen-md - ($padding-side * 2);
$width-lg: $screen-lg - ($padding-side * 2);

31
sass/application.scss Normal file
View File

@@ -0,0 +1,31 @@
@import "variables";
@import "mixins";
//== Redmine's core elements
//
@import "components/normalize";
@import "components/base";
@import "components/buttons";
@import "components/forms";
@import "components/tabs";
@import "components/pagination";
@import "components/top";
@import "components/content";
@import "components/gravatar";
@import "components/list";
@import "components/simple-list";
@import "components/issue";
@import "components/login";
@import "components/admin";
@import "components/flash";
@import "components/icons";
@import "components/coderay";
@import "components/gantt";
@import "components/calendar";
@import "components/progress";
@import "components/wiki";
@import "components/elements";
@import "components/jquery-ui";
@import "components/print";

155
sass/components/_admin.scss Normal file
View File

@@ -0,0 +1,155 @@
//
// Admin
// --------------------------------------------------
#admin-menu {
#admin-index > & {
ul {
margin: 0;
padding: 0;
}
li {
padding: $sidebar-padding-vertical 0;
}
a {
display: inline-block;
background-position: 0 center;
padding-left: 8 + 16px;
}
}
li {
list-style-type: none;
> a {
background-repeat: no-repeat;
background-position: $sidebar-padding-horizontal center;
padding-left: $sidebar-padding-horizontal + 8 + 16px;
}
}
.projects { background-image: url(../../../images/projects.png); }
.users { background-image: url(../../../images/user.png); }
.groups { background-image: url(../../../images/group.png); }
.roles { background-image: url(../../../images/database_key.png); }
.trackers { background-image: url(../../../images/ticket.png); }
.issue_statuses { background-image: url(../../../images/ticket_edit.png); }
.workflows { background-image: url(../../../images/ticket_go.png); }
.custom_fields { background-image: url(../../../images/textfield.png); }
.enumerations { background-image: url(../../../images/text_list_bullets.png); }
.settings { background-image: url(../../../images/changeset.png); }
.plugins { background-image: url(../../../images/plugin.png); }
.info { background-image: url(../../../images/help.png); }
.server_authentication { background-image: url(../../../images/server_key.png); }
}
/**
* Groups
*/
table.members,
table.memberships {
td.roles {
width: 45%;
}
}
/**
* Permissions
*/
table.permissions {
td.role {
color: $gray;
font-weight: normal;
text-align: center;
vertical-align: bottom;
}
}
/**
* Workflows
*/
table.transitions {
td.enabled {
background: $state-success;
}
}
#workflow_copy_form select {
width: 200px;
}
#workflow_form table select {
min-width: 60px;
width: 90%;
}
table.fields_permissions {
td.readonly {
background: $gray-light;
}
td.required {
background: $state-danger;
}
}
/**
* Enumerations
*/
.controller-enumerations.action-index {
#content {
> h3,
> .list {
margin-bottom: $line-height-computed / 2;
}
> p {
margin-bottom: $line-height-computed * 2;
}
}
}
/**
* Settings labels
*/
fieldset.settings label {
display: block;
}
/**
* Settings -> Notifications
*/
fieldset#notified_events {
.parent {
padding-left: 20px;
}
}
/**
* Settings -> Repositories
*/
.settings.enabled_scm {
table {
width: 100%;
}
td.scm_name {
font-weight: bold;
}
}

140
sass/components/_base.scss Normal file
View File

@@ -0,0 +1,140 @@
//
// Base styles
// --------------------------------------------------
html {
overflow-y: scroll;
}
body {
margin: 0;
padding: 0;
background-color: $body-bg;
color: $text-color;
font-family: $font-family-base;
font-size: $font-size-base;
line-height: $line-height-base;
}
a {
color: $link-color;
text-decoration: none;
&:hover,
&:focus {
color: $link-hover-color;
text-decoration: $link-hover-decoration;
}
&.issue.closed {
color: $link-color-issue-closed;
text-decoration: $link-closed-decoration;
}
&.project.closed {
color: $link-color-project-closed;
}
&.user.locked {
color: $link-color-user-locked;
}
}
h1 {
margin: 0;
line-height: 30px;
font-size: 2em; // ~28px
}
h2 {
margin-top: 0;
margin-bottom: $line-height-computed;
line-height: $line-height-computed;
font-size: 1.43em; // ~20px
font-weight: 500;
img {
vertical-align: middle;
}
}
h3 {
margin-top: 0;
margin-bottom: $line-height-computed;
line-height: $line-height-computed;
font-size: 1.14em; // ~16px
font-weight: 500;
}
h4 {
margin-top: 0;
font-size: 1em;
font-weight: 500;
}
p {
margin: 0 0 ($line-height-computed / 2);
}
small {
font-size: $font-size-small;
}
ul,
ol {
margin-top: 0;
margin-bottom: ($line-height-computed / 2);
ul,
ol {
margin-bottom: 0;
}
}
dl {
margin-top: 0;
margin-bottom: $line-height-computed;
}
dt {
font-weight: bold;
}
dd {
margin-left: 0;
}
code, kbd, pre, samp {
font-family: $font-family-monospace;
font-size: 1em;
}
hr {
margin-top: $line-height-computed;
margin-bottom: $line-height-computed;
border: 0;
border-top: 1px solid $hr-border;
}
abbr[title] {
cursor: help;
border-bottom: 1px dotted $abbr-border-color;
}
blockquote {
padding: floor($line-height-computed / 4) $padding-large-horizontal;
margin: 0 0 $line-height-computed;
border-left: 4px solid $blockquote-border-color;
p,
ul,
ol {
&:last-child {
margin-bottom: 0;
}
}
}
.clear {
@extend %clearfix;
}

View File

@@ -0,0 +1,192 @@
//
// Buttons
// --------------------------------------------------
input[type="button"],
input[type="submit"],
button {
display: inline-block;
margin-bottom: 0;
text-align: center;
cursor: pointer;
font-weight: $btn-font-weight;
white-space: nowrap;
border: 1px solid;
@include button-size($input-padding-vertical, $input-padding-horizontal, $font-size-base, $line-height-base, $border-radius-base);
@include user-select(none);
@include transition(background-color ease-in-out .07s, border-color ease-in-out .07s, box-shadow ease-in-out .07s);
@include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
&:hover,
&:focus {
text-decoration: none;
}
&:active {
outline: 0;
}
&.disabled,
&[disabled],
fieldset[disabled] & {
pointer-events: none; // Future-proof disabling of clicks
box-shadow: none;
@include opacity(.65);
}
}
/**
* Issue form buttons layout
*/
#issue-form,
#history .journal form {
input[type="submit"] {
margin-right: 5px;
& + input {
@include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
}
& + a {
margin-right: 5px;
}
& + a + a {
margin-left: 5px;
}
}
}
/**
* Project's repository form buttons layout
*/
#repository-form {
input[type="submit"] {
margin-right: 5px;
}
}
/**
* New _somethind_ form buttons layout
*/
#add_attachment_form,
#new_time_entry,
#new_project,
#new_document,
#new_group,
#new_user {
input[type="submit"] {
margin-right: 5px;
& + input {
@include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
}
}
}
/**
* Wiki form buttons layout
*/
#wiki_form {
input[type="submit"] {
margin-right: 5px;
}
}
/**
* Forum and news message form buttons layout
*/
#message-form,
#news-form {
input[type="submit"] {
margin-right: 5px;
& + a {
margin-right: 5px;
}
& + a + a {
margin-left: 5px;
}
}
#message_sticky,
#message_locked {
position: relative;
top: 1px;
margin-left: 5px;
}
}
/**
* Query builder buttons
*/
.query-columns {
.buttons {
vertical-align: middle;
input[type="button"] {
width: 32px;
margin-bottom: 4px;
@include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
}
}
}
/**
* JS Toolbar buttons
*/
.jstElements {
.box & {
padding: 0 0 5px;
}
button {
box-shadow: none;
}
}
/**
* Button for toggling multiselect (in filters)
*/
a[data-expands],
.toggle-multiselect {
cursor: pointer;
position: relative;
top: 3px;
padding: 1px 8px 2px 7px;
vertical-align: top;
border: 1px solid;
background-image: url(../../../images/bullet_toggle_plus.png);
background-position: 2px 2px;
background-repeat: no-repeat;
border-radius: $border-radius-base;
@include user-select(none);
@include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
}
a[data-expands] {
display: inline-block;
padding: 10px 10px 9px 9px;
margin-right: 10px;
img {
display: none;
}
}

View File

@@ -0,0 +1,84 @@
//
// Calendar
// --------------------------------------------------
table.cal {
width: 100%;
margin-bottom: $line-height-computed;
border: 1px solid $table-border-color;
thead th {
width: 14%;
background-color: $table-bg-hover;
padding: $table-condensed-cell-padding;
&.week-number {
width: auto;
}
}
tbody tr {
height: 100px;
}
td {
border: 1px solid $table-border-color;
vertical-align: top;
font-size: $font-size-small;
padding: $table-condensed-cell-padding;
&.week-number {
background-color: $table-bg-hover;
border: 0 none;
text-align: right;
font-size: 1em;
}
p.day-num {
float: right;
text-align: right;
font-size: $font-size-large;
}
&.odd p.day-num {
color: $gray-light;
}
&.today {
background: $tooltip-bg;
p.day-num {
font-weight: bold;
}
}
}
}
table.cal .starting a,
p.cal.legend .starting,
table.cal .ending a,
p.cal.legend .ending {
background-position: 0 center;
background-repeat: no-repeat;
background-image: url(../../../images/bullet_go.png);
padding-left: 20px;
}
table.cal .ending a,
p.cal.legend .ending {
background-image: url(../../../images/bullet_end.png);
padding-left: 20px;
}
table.cal .starting.ending a,
p.cal.legend .starting.ending {
background-image: url(../../../images/bullet_diamond.png);
padding-left: 20px;
}
p.cal.legend {
span {
display: block;
}
}

View File

@@ -0,0 +1,365 @@
//
// Syntax highlight - CodeRay
// --------------------------------------------------
.syntaxhl {
div {
display: inline;
}
.line-numbers {
padding: 2px 4px 2px 4px;
background-color: #eee;
margin: 0px 5px 0px 0px;
}
.code pre {
overflow: auto;
}
.debug {
color: white !important;
background: blue !important;
}
.annotation {
color: #007;
}
.attribute-name {
color: #b48;
}
.attribute-value {
color: #700;
}
.binary {
color: #509;
}
.char {
color: #D20;
.content {
color: #D20;
}
.delimiter {
color: #710;
}
}
.class {
color: #795DA3;
font-weight: bold;
}
.class-variable {
color: #369;
}
.color {
color: #0A0;
}
.comment {
color: #969896;
.char,
.delimiter {
color: #969896;
}
}
.complex {
color: #A08;
}
.constant {
color: #795DA3;
}
.decorator {
color: #B0B;
}
.definition {
color: #099;
font-weight: bold;
}
.delimiter {
color: black;
}
.directive {
color: #088;
font-weight: bold;
}
.doc {
color: #970;
}
.doc-string {
color: #D42;
font-weight: bold;
}
.doctype {
color: #34b;
}
.entity {
color: #800;
font-weight: bold;
}
.error {
color: #F00;
background-color: #FAA;
}
.escape {
color: #666;
}
.exception {
color: #C00;
font-weight: bold;
}
.float {
color: #06D;
}
.function {
color: #06B;
font-weight: bold;
}
.global-variable {
color: #d70;
}
.hex {
color: #02b;
}
.imaginary {
color: #f00;
}
.include {
color: #B44;
font-weight: bold;
}
.inline {
background-color: rgba(#000, .05);
color: black;
}
.inline-delimiter {
font-weight: bold;
color: #666;
}
.instance-variable {
color: #33B;
}
.integer {
color: #0086B3;
}
.key {
color: #606;
.char {
color: #60f;
}
.delimiter {
color: #404;
}
}
.keyword {
color: #B3113E;
font-weight: bold;
}
.label {
color: #970;
font-weight: bold;
}
.local-variable {
color: #369;
}
.namespace {
color: #707;
font-weight: bold;
}
.octal {
color: #40E;
}
.operator {}
.predefined {
color: #b21;
}
.predefined-constant {
color: #009595;
}
.predefined-type {
color: #0a5;
font-weight: bold;
}
.preprocessor {
color: #579;
}
.pseudo-class {
color: #00C;
font-weight: bold;
}
.regexp {
background-color: hsla(300, 100%, 50%, 0.06);
.content {
color: #808;
}
.delimiter {
color: #404;
}
.modifier {
color: #C2C;
}
}
.reserved {
color: #080;
font-weight: bold;
}
.shell {
background-color: hsla(120, 100%, 50%, 0.06);
.content {
color: #2B2;
}
.delimiter {
color: #161;
}
}
.string {
.char,
.content,
.delimiter,
.modifier {
color: #DF5000;
}
}
.symbol {
color: #d33;
.content,
.delimiter {
color: #d33;
}
}
.tag {
color: #070;
}
.type {
color: #339;
font-weight: bold;
}
.value {
color: #088;
}
.variable {
color: #037;
}
.insert {
background: hsla(120, 100%, 50%, 0.12);
}
.delete {
background: hsla(0, 100%, 50%, 0.12);
}
.change {
color: #bbf;
background: #007;
}
.head {
color: #f8f;
background: #505;
.filename {
color: white;
}
}
.delete .eyecatcher {
background-color: hsla(0, 100%, 50%, 0.2);
border: 1px solid hsla(0, 100%, 45%, 0.5);
margin: -1px;
border-bottom: none;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.insert {
.eyecatcher {
background-color: hsla(120, 100%, 50%, 0.2);
border: 1px solid hsla(120, 100%, 25%, 0.5);
margin: -1px;
border-top: none;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
.insert {
color: #0c0;
background: transparent;
font-weight: bold;
}
}
.delete .delete {
color: #c00;
background: transparent;
font-weight: bold;
}
.change .change {
color: #88f;
}
.head .head {
color: #f4f;
}
}

View File

@@ -0,0 +1,152 @@
#main {
@extend %clearfix;
}
//
// Main container
// --------------------------------------------------
#content {
overflow: hidden;
padding: $padding-side;
}
//
// Sidebar
// --------------------------------------------------
#sidebar {
float: $sidebar-position;
width: $sidebar-width - ($sidebar-padding-horizontal * 2) - 1px;
padding: $padding-side $sidebar-padding-horizontal;
@media screen and (min-width: 1px) {
$border: $sidebar-link-active-border;
$body: $body-bg;
background-image: -webkit-linear-gradient($body 1%, $border 10%, $border 85%, $body);
background-image: -o-linear-gradient($body 1%, $border 10%, $border 85%, $body);
background-image: linear-gradient($body 1%, $border 10%, $border 85%, $body);
background-repeat: no-repeat;
background-size: 1px 100%;
padding-bottom: $padding-side * 3;
@if $sidebar-position == 'left' {
padding-right: $sidebar-padding-horizontal + 1px;
background-position: right 0;
box-shadow: inset -9px 0 6px -6px rgba(0, 0, 0, .05);
} @else {
padding-left: $sidebar-padding-horizontal + 1px;
background-position: left 0;
box-shadow: inset 9px 0 6px -6px rgba(0, 0, 0, .05);
}
}
.nosidebar & {
float: none;
width: 0;
margin: 0;
padding: 0;
}
h3 {
margin-top: $line-height-computed * 1.5;
}
> h3:first-child,
> form:first-child > h3 {
margin-top: 0;
}
ul {
margin: 0 0 ($line-height-computed / 2);
padding: 0;
@if $sidebar-position == 'left' {
margin-right: -($sidebar-padding-horizontal);
} @else {
margin-left: -($sidebar-padding-horizontal);
}
}
li {
margin: 0;
padding: 0;
list-style-type: none;
> a {
display: block;
border: 1px solid transparent;
padding: $sidebar-padding-vertical $sidebar-padding-horizontal;
@if $sidebar-position == 'left' {
border-left-width: 3px;
border-radius: $border-radius-large 0 0 $border-radius-large;
} @else {
border-right-width: 3px;
border-radius: 0 $border-radius-large $border-radius-large 0;
}
&:hover {
background-color: $sidebar-link-hover-bg;
text-decoration: none;
}
&.selected {
background-color: $sidebar-link-active-bg;
color: $sidebar-link-active-text;
border-color: $sidebar-link-active-border;
@if $sidebar-position == 'left' {
margin-right: -1px;
border-left-color: $sidebar-link-active-side;
border-right-color: $body-bg;
box-shadow: -3px 1px 2px rgba(0, 0, 0, .1);
} @else {
margin-left: -1px;
border-left-color: $body-bg;
border-right-color: $sidebar-link-active-side;
box-shadow: 3px 1px 2px rgba(0, 0, 0, .1);
}
}
}
}
}
#footer {
font-size: $font-size-small;
margin: $line-height-computed $padding-side;
padding-top: $line-height-computed;
color: $gray-light;
border-top: 1px solid $gray-lighter;
}
@if $fixed-layout {
@media screen and (min-width: $screen-sm) {
#main-menu ul,
#main {
width: $width-sm;
margin-left: auto;
margin-right: auto;
}
}
@media screen and (min-width: $screen-md) {
#main-menu ul,
#main {
width: $width-md;
}
}
@media screen and (min-width: $screen-lg) {
#main-menu ul,
#main {
width: $width-lg;
}
}
#main-menu ul > li > a {
padding: $main-menu-padding-vertical 1px;
}
}

View File

@@ -0,0 +1,849 @@
//
// Various layout elements
// --------------------------------------------------
/**
* Action buttons group
*/
.buttons {
margin-top: $line-height-computed;
margin-bottom: $line-height-computed;
}
/**
* Export actions
*/
.other-formats {
text-align: right;
margin: ($line-height-computed / 2) 0 0;
span + span:before {
content: "/ ";
}
}
/**
* Atom feed icon
*/
.atom {
background: url(../../../images/feed.png) no-repeat 1px 50%;
padding: 2px 0px 3px 16px;
}
/**
* Collapsible
*/
a.collapsible,
.collapsible > legend {
color: $link-color;
cursor: pointer;
@include user-select(none);
&:hover {
color: $link-hover-color;
}
&:before {
content: '';
display: inline-block;
width: 0;
height: 0;
margin-right: 3px;
vertical-align: middle;
border-top: 5px solid;
border-right: 5px solid transparent;
border-left: 5px solid transparent;
position: relative;
top: -1px;
@include rotate(0);
@include transition-transform(.1s);
}
}
a.collapsible.collapsed,
.collapsible.collapsed > legend {
&:before {
@include rotate(-90deg);
}
}
/**
* Elements with context menus (doesn't really work on Windows)
*/
.hascontextmenu {
cursor: context-menu;
}
/**
* Actions for block
*/
.contextual {
float: right;
white-space: nowrap;
padding-left: $padding-base-vertical;
input, select {
font-size: .9em;
}
}
/**
* Accessibility specific styles
*/
.hidden-for-sighted {
position: absolute;
left: -10000px;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
}
/**
* Responsive autoscroll
*/
.autoscroll {
overflow-x: auto;
margin-bottom: $line-height-computed;
}
/**
* Container
*/
.box {
padding: $panel-body-padding;
margin-bottom: $line-height-computed;
color: $panel-color;
background-color: $panel-bg;
border: 1px solid $panel-border;
border-radius: $border-radius-base;
word-wrap: break-word;
box-shadow: $panel-shadow;
.ui-dialog-content & {
padding: 0;
border: 0 none;
background: transparent;
box-shadow: none;
}
}
/**
* Column form layout
*/
.splitcontent {
@extend %clearfix;
}
.splitcontentleft,
.splitcontentright {
width: 50%;
@include box-sizing(border-box);
}
.splitcontentleft {
float: left;
padding-right: ($padding-side / 2);
}
.splitcontentright {
float: right;
padding-left: ($padding-side / 2);
}
/**
* Watchers selection list
*/
#users_for_watcher {
height: 200px;
overflow: auto;
label {
display: block;
@include checkbox;
}
}
/**
* Watchers list
*/
#watchers {
select {
width: 100%;
display: block;
}
> .watchers {
> li {
display: block;
margin-bottom: $sidebar-padding-vertical;
@extend %clearfix;
@if $sidebar-position == 'left' {
padding-right: $sidebar-padding-horizontal;
} @else {
padding-left: $sidebar-padding-horizontal;
}
> a {
display: inline;
padding: 0;
background: transparent;
}
> .delete {
float: right;
opacity: 0.4;
vertical-align: middle;
&:hover {
opacity: 1;
}
}
img.gravatar {
vertical-align: top;
position: relative;
top: 1px;
margin-right: .5em;
}
}
}
}
/**
* Subtitle paragraph (can be seen on activity list)
*/
p.subtitle {
margin-top: ($line-height-computed / -2);
margin-bottom: $line-height-computed;
font-style: italic;
}
/**
* Breadcrumbs (can be seen in time entries report)
* No need to style them, but let this selector be here.
*/
// p.breadcrumb {
// }
/**
* Headers with icons
*/
h3.version {
background: url(../../../images/package.png) no-repeat 0 center;
padding-left: 20px;
}
div.issues h3 {
background: url(../../../images/ticket.png) no-repeat 0 center;
padding-left: 20px;
}
div.members h3 {
background: url(../../../images/group.png) no-repeat 0 center;
padding-left: 20px;
}
div.news h3 {
background: url(../../../images/news.png) no-repeat 0 center;
padding-left: 20px;
}
div.projects h3 {
background: url(../../../images/projects.png) no-repeat 0 center;
padding-left: 20px;
}
/**
* My page layout
*/
#block-form {
display: inline;
}
.block-receiver {
outline: 1px dashed $gray-light;
margin: $padding-side / -2;
margin-bottom: $line-height-computed;
padding: $padding-side / 2;
min-height: 20px;
}
.mypage-box {
margin-bottom: $line-height-computed;
&:last-child {
margin-bottom: 0;
}
&.ui-sortable-handle {
outline: 1px solid $gray-lighter;
&:hover {
outline: 1px solid $gray-light;
}
}
&.ui-sortable-placeholder {
visibility: visible !important;
background: $tooltip-bg;
outline: 1px dashed $tooltip-border;
}
&.ui-sortable-helper {
background: $body-bg;
box-shadow: $panel-shadow;
}
}
.handle {
cursor: move;
}
a.close-icon {
display: block;
margin-top: 5px;
overflow: hidden;
width: 12px;
height: 12px;
background-repeat: no-repeat;
cursor: pointer;
background-image: url(../../../images/close.png);
&:hover {
background-image: url(../../../images/close_hl.png);
}
}
/**
* Resetting font for SCM (repository files)
*/
table.filecontent tbody,
table.filecontent td.line-code pre {
font-family: $font-family-monospace !important;
}
/**
* Projects list
*/
ul.projects {
padding-left: $padding-side;
&.root {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
}
#projects-index ul.projects {
ul.projects {
border-left: 2px solid $gray-lighter;
}
li.root {
margin-bottom: $line-height-computed;
}
li.child {
margin-top: $line-height-computed / 2;
}
a.project {
font-size: $font-size-h3;
font-weight: bold;
}
}
.my-project {
padding-right: 18px;
background: url(../../../images/fav.png) no-repeat right center;
}
#custom_field_tracker_ids {
label {
margin-right: 10px;
}
}
#notified-projects,
#tracker_project_ids,
#custom_field_project_ids {
> ul {
max-height: $line-height-computed * 12;
overflow-y: auto;
}
}
/**
* Time report
*/
table#time-report {
td.hours {
text-align: right;
}
th {
&.period,
&.total {
text-align: right;
}
}
tbody tr {
&.subtotal {
font-style: italic;
color: $gray;
td.hours {
color: $gray-light;
}
}
&.total {
font-weight: bold;
background-color: $table-bg-active;
border-top: 2px solid darken($table-border-color, 5%);
}
}
.hours-dec {
font-size: 0.9em;
}
}
.total-hours {
font-weight: bold;
.hours-int {
font-size: $font-size-large * 1.1;
}
.hours-dec {
font-size: $font-size-large;
}
}
/**
* Version issue list and page layout
*/
div#roadmap {
.related-issues {
margin-bottom: $line-height-computed;
td.checkbox {
display: none;
}
}
table.progress {
td {
height: 16px;
}
& + .percent {
position: relative;
top: 2px;
}
}
.wiki {
h1 {
&:first-child {
display: none;
}
}
}
}
body.controller-versions.action-show div#roadmap .related-issues {
width: 70%;
}
div#version-summary {
float: right;
width: 28%;
fieldset {
margin-bottom: $line-height-computed;
&.time-tracking table {
width: 100%;
}
}
th,
td.total-hours {
text-align: right;
}
}
/**
* Add form bottom space
*/
#new_document,
#add-message,
#add-news {
margin-bottom: $line-height-computed;
}
/**
* Attachments form
*/
a.remove-upload {
background: url(../../../images/delete.png) no-repeat 1px 50%;
display: inline-block;
padding-left: 16px;
&:hover {
text-decoration: none !important;
}
}
/**
* Ajax indicator
*/
#ajax-indicator {
position: fixed;
margin: (($line-height-computed + $padding-large-vertical * 2 + 1px * 2) / -2) ((200px + $padding-large-horizontal * 2 + 1px * 2) / -2);
padding: $padding-large-vertical $padding-large-horizontal;
top: 50%;
left: 50%;
width: 200px;
z-index: 100;
opacity: .9;
text-align: center;
color: $tooltip-text;
background-color: $tooltip-bg;
border: 1px solid $tooltip-border;
font-weight: bold;
box-shadow: $panel-shadow;
span {
background-position: 0% 40%;
background-repeat: no-repeat;
background-image: url(../../../images/loading.gif);
padding-left: 26px;
vertical-align: bottom;
}
}
/**
* Boards (forum)
*/
tr.message {
td {
&.subject {
padding-left: 20px + $table-cell-padding;
background-repeat: no-repeat;
background-position: $table-cell-padding ($table-cell-padding - 1px);
}
&.created_on {
white-space: nowrap;
}
&.last_message {
width: 30%;
white-space: nowrap;
text-align: left;
a:last-child {
font-weight: bold;
}
}
}
&.locked {
color: $gray;
td.subject {
background-image: url(../../../images/locked.png);
}
}
&.sticky td.subject {
background-image: url(../../../images/bullet_go.png);
font-weight: bold;
}
}
table.boards {
td {
&.last-message {
width: 30%;
white-space: nowrap;
text-align: left;
a:last-child {
font-weight: bold;
}
}
}
a.board {
background: url(../../../images/comment.png) no-repeat 0% 50%;
padding-left: 20px;
}
}
/**
* Topic page
*/
.controller-messages.action-show {
h2 {
margin-bottom: $line-height-computed / 2;
}
.message {
background: $gray-lightest;
border: 1px solid $gray-lighter;
border-radius: $panel-border-radius;
> h4,
> p {
color: $gray;
margin-bottom: 0;
padding: $padding-base-vertical $padding-base-horizontal;
border-bottom: 1px solid mix($gray-lighter, $gray-lightest, 50%);
font-size: $font-size-small;
a {
color: $gray-darker;
&.user {
font-weight: bold;
}
}
}
.wiki {
padding: $padding-base-horizontal;
background: $body-bg;
border-radius: 0 0 $panel-border-radius $panel-border-radius;
}
.contextual {
position: relative;
z-index: 1;
margin-top: $padding-base-vertical;
margin-right: $padding-base-vertical;
a {
margin-left: ceil($padding-base-vertical / 2);
}
}
}
.reply {
margin-bottom: $line-height-computed;
}
@if $use-gravatars {
.reply {
margin-left: 24px + $padding-base-horizontal;
> h4 {
position: relative;
&:before,
&:after {
position: absolute;
top: 6px;
left: -14px;
right: 100%;
width: 0px;
height: 0px;
display: block;
content: " ";
border-color: transparent;
border-style: solid solid outset;
pointer-events: none;
}
&:after {
border-width: 6px;
border-right-color: $panel-bg;
margin-top: 1px;
margin-left: 2px;
}
&:before {
border-right-color: $panel-border;
border-width: 7px;
}
}
img.gravatar {
float: left;
margin-top: $line-height-computed - 24px;
margin-left: -(24px + $padding-base-horizontal * 2 + 1px);
}
}
}
}
h3.comments {
background: url(../../../images/comment.png) no-repeat 0% 50%;
padding-left: 20px;
}
#message_content {
height: $line-height-computed * 6;
}
/**
* News comments
*/
#comments {
> h4 {
margin-top: $line-height-computed;
margin-bottom: $line-height-computed / 2;
}
}
#comment_comments {
height: $line-height-computed * 6;
}
.summary {
font-style: italic;
}
/**
* Diff
*/
.text-diff {
margin-bottom: $line-height-computed;
padding: $panel-body-padding;
color: $panel-color;
background: $body-bg;
border: 1px solid $panel-border;
border-radius: $panel-border-radius;
}
.diff_out {
background: $diff-out-bg-light;
span {
background: $diff-out-bg;
}
}
.diff_in {
background: $diff-in-bg-light;
span {
background: $diff-in-bg;
}
}
/**
* Repository view
*/
#revision_selector {
display: inline;
}
#related-issues {
li img {
vertical-align: middle;
}
}
ul.properties {
padding: 0;
font-size: $font-size-small;
color: $gray;
li {
list-style-type: none;
span {
font-style: italic;
}
}
}
tr.changeset {
td.revision_graph {
width: 15%;
background-color: #fffffb;
}
td.author,
td.committed_on {
text-align: center;
width: 15%;
white-space: nowrap;
}
td.comments {
p {
margin-bottom: 0;
}
}
ul {
margin-top: 0;
margin-bottom: 0;
}
}

View File

@@ -0,0 +1,62 @@
//
// Flash & error messages
// --------------------------------------------------
#errorExplanation,
.flash,
.nodata,
.warning,
.conflict {
padding: $padding-large-vertical $padding-large-horizontal;
padding-left: $padding-large-horizontal + 8px + 16px; // TODO ikony
margin-bottom: $line-height-computed;
background-position: $padding-large-horizontal 50%;
background-repeat: no-repeat;
border: 1px solid;
border-radius: $border-radius-large;
p:last-child,
ol:last-child,
ul:last-child {
margin-bottom: 0;
}
}
@mixin flash($color, $background, $border, $link, $icon) {
color: $color;
background-image: url(../../../images/#{$icon}.png); // TODO ikony
background-color: $background;
border-color: $border;
a {
color: $link;
font-weight: bold;
}
}
.flash.notice {
@include flash($flash-success-text, $flash-success-bg, $flash-success-border, $flash-success-link, true);
}
.flash.warning,
.conflict,
.nodata {
@include flash($flash-warning-text, $flash-warning-bg, $flash-warning-border, $flash-warning-link, warning);
}
.nodata {
text-align: center;
padding-left: $padding-large-horizontal;
}
#errorExplanation,
.flash.error {
@include flash($flash-error-text, $flash-error-bg, $flash-error-border, $flash-error-link, exclamation);
}
#errorExplanation {
h2, p {
display: none;
}
}

585
sass/components/_forms.scss Normal file
View File

@@ -0,0 +1,585 @@
//
// Forms
// --------------------------------------------------
form {
// display: inline;
td {
padding: $table-condensed-cell-padding;
}
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: $font-size-base;
line-height: $line-height-base;
@include box-sizing(border-box);
}
select,
textarea,
/*
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="url"],
input[type="tel"],
input[type="color"]
*/
input[type="search"],
input[type="email"],
input[type="text"],
input[type="password"] {
height: $input-height-base;
padding: $input-padding-vertical $input-padding-horizontal;
color: $input-color;
background-color: $input-bg;
border: 1px solid $input-border;
border-radius: $input-border-radius;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075);
@include transition(border-color ease-in-out .1s, box-shadow ease-in-out .1s);
@include form-control-focus();
@include placeholder();
&[disabled],
&[readonly],
fieldset[disabled] & {
background-color: $input-bg-disabled;
opacity: 1;
}
}
textarea {
resize: vertical;
height: auto;
}
input[type="search"] {
-webkit-appearance: none;
}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 5px 0 0;
margin-top: 1px \9; // IE8-9
line-height: normal;
}
input[type="file"] {
display: block;
}
input[type="range"] {
display: block;
width: 100%;
}
input.autocomplete {
background-image: url(../images/aci.png); /* autocomplete indicator */
background-repeat: no-repeat;
background-position: right center;
padding-right: 30px;
&.ajax-loading {
background-image: url(../images/preloader.gif);
}
}
select {
&[multiple],
&[size] {
height: auto;
}
option[disabled] {
color: $gray-lighter;
}
}
select:-moz-focusring {
color: transparent;
text-shadow: 0 0 0 #000;
}
select.expandable {
vertical-align: top;
}
fieldset {
padding: ($line-height-computed / 2) 0;
margin: 0;
border: 0 none;
border-top: 1px solid $legend-border-color;
min-width: 0;
}
legend {
color: $legend-color;
padding-right: 5px;
}
/**
* Required fields' asterisk
*/
span.required {
position: relative;
top: 3px;
margin-left: -.2em;
color: #d00;
font-weight: normal;
font-size: 1.5em;
line-height: 0;
}
/**
* Field's hint
*/
em.info {
display: block;
padding: 2px 0;
color: $gray;
font-style: normal;
font-size: $font-size-small;
&.error {
padding-left: 20px;
background: url(../../../images/exclamation.png) no-repeat 0 50%;
}
}
/**
* Wiki editor
*/
.wiki-edit {
color: $wiki-text;
line-height: $wiki-line-height;
font-family: $font-family-monospace;
}
/**
* Tabular forms
*/
.tabular {
&.settings {
p {
padding-left: $label-wide-width + $label-space;
}
label {
width: $label-wide-width;
margin-left: -($label-wide-width + $label-space);
}
}
p {
margin: 0 0 ($line-height-computed / 2);
padding-left: $label-width + $label-space;
clear: left;
@extend %clearfix;
.jstEditor {
margin-bottom: 0;
}
}
input,
select {
max-width: 100%;
}
textarea {
display: block;
width: 100%;
resize: vertical;
}
input[type="radio"],
input[type="checkbox"] {
position: relative;
vertical-align: baseline;
top: 3px;
}
span[title] {
border-bottom: 1px dotted #aaa;
}
label {
float: left;
width: $label-width;
margin-top: $input-padding-vertical + 1px;
margin-bottom: $input-padding-vertical + 1px;
margin-left: -($label-width + $label-space);
text-align: right;
@include user-select(none);
&.floating {
margin-left: 0px;
text-align: left;
width: 270px;
}
&.block,
&.inline {
display: block;
float: none;
width: auto;
margin-left: 0;
padding-left: 16px;
text-align: left;
cursor: pointer;
> input {
float: left;
margin-top: 0;
margin-left: -16px;
}
}
&.inline {
display: inline-block;
margin-right: 10px;
}
&.role-visibility {
padding-left: 34px;
}
> input[type="radio"],
> input[type="checkbox"] {
top: 1px;
}
}
}
/**
* Hack: first <p> in issue form ("private" option) is moved to the right with
* inline styles. Don't allow it break the layout
*/
#all_attributes > p[style] {
margin-right: 0 !important;
margin-bottom: 0;
padding-left: 0;
input {
top: 2px;
}
label {
margin-right: 0;
padding-left: 0;
}
}
/**
* Hack: align description edit icon with label
*/
label[for=issue_description] + a {
display: inline-block;
margin-top: $input-padding-vertical;
img {
vertical-align: middle;
}
}
/**
* Hack: better looking filter checkbox in sidebar in projects list
*/
label[for=closed] {
display: block;
margin-bottom: $line-height-computed / 2;
@include checkbox;
}
/**
* Input sizes
*/
.wiki-edit,
#principal_search,
#issue_subject,
#time_entry_comments,
#content_comments,
#user_search,
#user_login,
#user_firstname,
#user_lastname,
#user_mail,
#my_account_form select,
#user_form select,
#user_identity_url,
#custom_field_possible_values,
#custom_field_default_value {
width: 100%;
}
textarea.text_cf {
width: 100%;
resize: vertical;
}
input {
&.string_cf,
&.link_cf {
width: 100%;
}
}
select.bool_cf {
width: auto !important;
}
/**
* Add space below WYSIWYG
*/
.jstEditor {
margin-bottom: $line-height-computed / 2;
}
/**
* Attachments
*/
#attachments_fields {
input.description {
margin-left: 5px;
margin-right: 5px;
width: 340px;
}
> span {
display: block;
white-space: nowrap;
margin-bottom: $line-height-computed / 2;
}
input.filename {
width: 250px;
background-position: 4px center;
background-repeat: no-repeat;
background-image: url(../../../images/attachment.png);
padding-left: $input-padding-horizontal + 16px;
}
.ajax-waiting input.filename {
background-image: url(../../../images/hourglass.png);
}
.ajax-loading input.filename {
background-image: url(../../../images/loading.gif);
}
div.ui-progressbar {
width: 100px;
height: 14px;
margin: 2px 0 -5px 8px;
display: inline-block;
}
}
#add_attachment_form {
p {
margin-bottom: 0;
}
}
/**
* Issue form elements
*/
#issue-form {
fieldset {
&:last-child {
padding-bottom: 0;
p {
margin-bottom: 0;
}
}
}
}
#attributes {
.splitcontentleft,
.splitcontentright {
width: 100%;
float: left;
padding-right: 0;
padding-left: 0;
@media screen and (min-width: $screen-sm) {
width: auto;
}
}
.splitcontentleft {
@media screen and (min-width: $screen-sm) {
padding-right: $padding-side;
}
}
select {
width: 90%;
@media screen and (min-width: $screen-sm) {
width: 20em;
}
}
#issue_estimated_hours,
#issue_done_ratio {
min-width: 1em;
width: 75px;
text-align: right;
padding-left: 5px;
}
}
#watchers_form {
overflow: hidden;
.search_for_watchers {
display: block;
> a {
padding-left: 20px;
background: url(../../../images/add.png) no-repeat 0 50%;
}
}
#watchers_inputs {
margin-top: $input-padding-vertical + 1px;
margin-bottom: $line-height-computed / 2;
overflow: auto;
display: block;
-webkit-columns: 18em 4;
-moz-columns: 18em 4;
columns: 18em 4;
max-width: 80em;
}
label.floating {
display: block;
width: auto;
float: none;
margin: 0;
@include checkbox;
input[type="checkbox"] {
top: -1px;
}
}
}
/**
* Custom logic (boolean) field displayed as radio buttons
*/
.check_box_group {
display: block;
overflow-y: auto;
label {
float: none;
display: block;
width: auto;
margin-left: 0;
margin-bottom: 0;
font-weight: normal;
text-align: left;
}
&.bool_cf {
label {
display: inline-block;
margin-right: 10px;
padding-left: 20px;
@include user-select(none);
@extend %clearfix;
input[type="checkbox"],
input[type="radio"] {
top: 0;
float: left;
margin-left: -20px;
}
}
}
}
/**
* Filters
*/
fieldset#filters {
table {
td {
vertical-align: top;
}
}
td {
&.field {
min-width: 180px;
padding-right: $table-cell-padding * 2;
}
&.operator {
min-width: 180px;
padding-right: $table-cell-padding * 2;
select {
width: 100%;
}
}
&.values {
white-space: nowrap;
select {
min-width: 130px;
}
}
&.add-filter {
text-align: right;
vertical-align: top;
}
}
}
/**
* Reset label style for trackers selector in custom field editor
*/
label.no-css {
float: none;
width: auto;
margin-left: 0px;
text-align: left;
font-weight: inherit;
}

188
sass/components/_gantt.scss Normal file
View File

@@ -0,0 +1,188 @@
//
// Gantt chart
// --------------------------------------------------
.gantt_hdr {
position: absolute;
top: 0;
height: 16px;
border: 1px solid $gray-lighter;
border-left-width: 0;
text-align: center;
overflow: hidden;
&.nwday {
background-color: $gray-lightest;
}
}
.gantt_subjects {
font-size: $font-size-small;
div {
line-height: 16px;
height: 16px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.task {
position: absolute;
height: 8px;
font-size: 11px;
padding: 0;
margin: 2px 0 0;
line-height: 16px;
white-space: nowrap;
&.label {
width: 100%;
margin-top: 0;
&.project,
&.version {
font-weight: bold;
}
}
}
.task_late {
background-color: $progress-bar-danger-bg;
border: 1px solid darken($progress-bar-danger-bg, 10%);
}
.task_done {
background-color: $progress-bar-success-bg;
border: 1px solid darken($progress-bar-success-bg, 10%);
}
.task_todo {
background-color: $progress-bg;
border: 1px solid darken($progress-bg, 20%);
&.parent {
background-color: darken($progress-bg, 10%);
border: 1px solid darken($progress-bg, 30%);
}
}
.task.parent {
height: 3px;
}
.task.parent.marker {
&.starting {
position: absolute;
background: url(../../../images/task_parent_end.png) no-repeat 0 0;
width: 8px;
height: 16px;
margin-left: -4px;
left: 0px;
top: -1px;
}
&.ending {
position: absolute;
background: url(../../../images/task_parent_end.png) no-repeat 0 0;
width: 8px;
height: 16px;
margin-left: -4px;
right: 0px;
top: -1px;
}
}
.project,
.version {
&.task_late,
&.task_done,
&.task_todo {
height: 2px;
margin-top: 3px;
}
&.task_todo {
background-color: $progress-bar-info-bg;
border: 1px solid darken($progress-bar-info-bg, 10%);
}
&.marker {
background-image: url(../../../images/version_marker.png);
background-repeat: no-repeat;
border: 0;
margin-left: -4px;
margin-top: 1px;
}
}
.version-behind-schedule a,
.issue-behind-schedule a {
color: $brand-warning;
@if $color-trackers {
&.issue {
font-weight: 700;
background-color: $brand-warning;
color: $brand-text;
}
}
}
.version-overdue a,
.issue-overdue a,
.project-overdue a {
color: $brand-danger;
@if $color-trackers {
&.issue {
font-weight: 700;
background-color: $brand-danger;
color: $brand-text;
}
}
}
/**
* Tooltips
*/
.tooltip {
position: relative;
z-index: 24;
&:hover {
z-index: 25;
}
.tip {
display: none;
position: absolute;
text-align: left;
padding: $padding-base-vertical;
top: 9px;
left: 24px;
width: 270px;
background-color: $tooltip-bg;
border: 1px solid $tooltip-border;
color: $tooltip-text;
font-size: $font-size-small;
box-shadow: 0 2px 2px rgba(0, 0, 0, .2);
}
@if $sidebar-position == 'left' {
tr > td:last-child & {
.tip {
left: auto;
right: 2px;
}
}
}
&:hover {
.tip {
display: block;
}
}
}

View File

@@ -0,0 +1,34 @@
//
// Gravatars
// --------------------------------------------------
img.gravatar {
vertical-align: middle;
line-height: 1;
border-radius: $border-radius-large;
overflow: hidden;
h2 &,
h3 &,
h4 & {
position: relative;
top: -1px;
margin-right: 5px;
}
}
// For Administration -> /users
.username img.gravatar {
vertical-align: top;
position: relative;
top: 1px;
margin-right: .5em;
}
/* Used on 12px Gravatar img tags without the icon background */
.icon-gravatar {
float: left;
margin-right: 5px;
}

202
sass/components/_icons.scss Normal file
View File

@@ -0,0 +1,202 @@
//
// Buttons
// --------------------------------------------------
.icon {
background-position: 0% 50%;
background-repeat: no-repeat;
padding-left: 20px;
padding-top: 2px;
padding-bottom: 3px;
}
.icon-add {
background-image: url(../../../images/add.png);
}
.icon-edit {
background-image: url(../../../images/edit.png);
}
.icon-copy {
background-image: url(../../../images/copy.png);
}
.icon-duplicate {
background-image: url(../../../images/duplicate.png);
}
.icon-del {
background-image: url(../../../images/delete.png);
}
.icon-move {
background-image: url(../../../images/move.png);
}
.icon-save {
background-image: url(../../../images/save.png);
}
.icon-cancel {
background-image: url(../../../images/cancel.png);
}
.icon-multiple {
background-image: url(../../../images/table_multiple.png);
}
.icon-folder {
background-image: url(../../../images/folder.png);
}
.open .icon-folder {
background-image: url(../../../images/folder_open.png);
}
.icon-package {
background-image: url(../../../images/package.png);
}
.icon-user {
background-image: url(../../../images/user.png);
}
.icon-projects {
background-image: url(../../../images/projects.png);
}
.icon-help {
background-image: url(../../../images/help.png);
}
.icon-attachment {
background-image: url(../../../images/attachment.png);
}
.icon-history {
background-image: url(../../../images/history.png);
}
.icon-time {
background-image: url(../../../images/time.png);
}
.icon-time-add {
background-image: url(../../../images/time_add.png);
}
.icon-stats {
background-image: url(../../../images/stats.png);
}
.icon-warning {
background-image: url(../../../images/warning.png);
}
.icon-fav {
background-image: url(../../../images/fav.png);
}
.icon-fav-off {
background-image: url(../../../images/fav_off.png);
}
.icon-reload {
background-image: url(../../../images/reload.png);
}
.icon-lock {
background-image: url(../../../images/locked.png);
}
.icon-unlock {
background-image: url(../../../images/unlock.png);
}
.icon-checked {
background-image: url(../../../images/true.png);
}
.icon-details {
background-image: url(../../../images/zoom_in.png);
}
.icon-report {
background-image: url(../../../images/report.png);
}
.icon-comment {
background-image: url(../../../images/comment.png);
}
.icon-summary {
background-image: url(../../../images/lightning.png);
}
.icon-server-authentication {
background-image: url(../../../images/server_key.png);
}
.icon-issue {
background-image: url(../../../images/ticket.png);
}
.icon-zoom-in {
background-image: url(../../../images/zoom_in.png);
}
.icon-zoom-out {
background-image: url(../../../images/zoom_out.png);
}
.icon-passwd {
background-image: url(../../../images/textfield_key.png);
}
.icon-test {
background-image: url(../../../images/bullet_go.png);
}
.icon-file {
background-image: url(../../../images/files/default.png);
&.text-plain {
background-image: url(../../../images/files/text.png);
}
&.text-x-c {
background-image: url(../../../images/files/c.png);
}
&.text-x-csharp {
background-image: url(../../../images/files/csharp.png);
}
&.text-x-java {
background-image: url(../../../images/files/java.png);
}
&.text-x-javascript {
background-image: url(../../../images/files/js.png);
}
&.text-x-php {
background-image: url(../../../images/files/php.png);
}
&.text-x-ruby {
background-image: url(../../../images/files/ruby.png);
}
&.text-xml {
background-image: url(../../../images/files/xml.png);
}
&.text-css {
background-image: url(../../../images/files/css.png);
}
&.text-html {
background-image: url(../../../images/files/html.png);
}
&.image-gif, &.image-jpeg, &.image-png, &.image-tiff {
background-image: url(../../../images/files/image.png);
}
&.application-pdf {
background-image: url(../../../images/files/pdf.png);
}
&.application-zip, &.application-x-gzip {
background-image: url(../../../images/files/zip.png);
}
}

298
sass/components/_issue.scss Normal file
View File

@@ -0,0 +1,298 @@
//
// Issue page
// --------------------------------------------------
.issue.details {
padding: $issue-padding;
margin-bottom: $line-height-computed;
background-color: $issue-bg;
border: 1px solid $issue-border;
color: $issue-text;
word-wrap: break-word;
border-radius: $border-radius-base;
box-shadow: $panel-shadow;
@if $use-gravatars
{
> img.gravatar {
float: left;
width: $issue-gravatar-size;
height: $issue-gravatar-size;
margin-right: 10px;
margin-bottom: $line-height-computed / 2;
}
table img.gravatar {
margin-right: 5px;
position: relative;
top: -1px;
}
> .subject,
> .author {
padding-left: $issue-gravatar-size + 10px;
}
}
> .subject {
h3 {
margin-bottom: 5px;
line-height: $headings-line-height;
color: $gray-darkest;
font-weight: bold;
font-size: $issue-heading-size * 1em;
}
p {
font-size: $font-size-small;
margin-bottom: 5px;
}
}
> .author {
margin-bottom: $line-height-computed;
}
> hr {
margin: $issue-padding (-$issue-padding);
border-top-color: $issue-border;
}
> .description {
> p {
margin-bottom: $issue-padding;
}
> .wiki {
margin: 0 (-$issue-padding) (-$issue-padding);
padding: $padding-wiki;
border-top: 1px solid $issue-border;
background: $body-bg;
}
}
.next-prev-links {
color: $gray-light;
}
}
div.fileover {
background-color: $tooltip-bg;
}
div.attachments {
margin: $issue-padding (-$issue-padding) (-$issue-padding);
padding: $issue-padding;
border-top: 1px solid $issue-border;
p {
margin: 10px 0 0;
&:first-child {
margin-top: 0;
}
}
img {
vertical-align: middle;
position: relative;
top: -1px;
}
span.author {
color: $gray;
font-size: $font-size-small;
}
}
div.thumbnails {
margin-top: $issue-padding;
div {
display: inline;
}
a {
display: inline-block;
margin-right: 2px;
background-color: $body-bg;
border: 1px solid $gray-lighter;
border-radius: $border-radius-base;
&:hover {
border-color: $gray-light;
}
}
img {
margin: 3px;
top: 0;
border-radius: $border-radius-base - 1;
}
}
#issue_tree,
#relations {
> p {
margin-bottom: 0;
}
.issues {
margin: ($line-height-computed / 2) 0 0;
tr:last-child > td {
border-bottom: 0 none;
}
td.checkbox {
display: none;
}
td.subject {
padding-left: 0;
}
td.buttons {
vertical-align: middle;
}
}
}
#relations {
td.checkbox {
display: none;
}
td.buttons {
padding: 0;
}
}
table.attributes {
width: 100%;
th,
td {
vertical-align: top;
text-align: left;
padding: $table-condensed-cell-padding $table-condensed-cell-padding $table-condensed-cell-padding 0;
}
> tbody > tr {
> th {
width: 15%;
}
> td {
width: 35%;
}
}
}
#new-relation-form {
text-align: right;
> p {
margin-bottom: 0;
> input {
margin-right: 5px;
}
}
}
#history {
$journal-gravatar: 24px;
$journal-indent: 0;
@if $use-gravatars {
$journal-indent: $journal-gravatar + 5px;
}
.journal {
margin-bottom: $line-height-computed / 2;
overflow: auto;
h4 {
margin-bottom: 5px;
border-bottom: 1px solid $gray-lighter;
> .gravatar {
float: left;
margin-right: 5px;
}
}
.details {
padding-left: $journal-indent + 15px;
img {
margin: 0 0 -3px 4px;
}
}
.wiki {
margin-left: $journal-indent;
margin-bottom: $line-height-computed / 2;
}
i {
&:first-of-type,
&:last-of-type {
padding: $tracker-inline-padding;
border-radius: $border-radius-small;
font-size: .9285em;
font-style: normal;
}
&:first-of-type {
background-color: mix($body-bg, $diff-out-bg, 64%);
color: $diff-out-color;
}
&:last-of-type {
background-color: mix($body-bg, $diff-in-bg, 64%);
color: $diff-in-color;
}
}
}
.private-notes {
border-left: 3px solid $brand-warning;
padding-left: 3px;
margin-left: -(3px + 3px);
border-radius: $border-radius-base 0 0 $border-radius-base;
}
}
#activity dt,
.journal {
clear: left;
}
.journal-link {
float: right;
}
span.private {
position: relative;
top: -1px;
text-transform: uppercase;
background: $brand-warning;
color: $brand-text;
font-weight: bold;
padding: $tracker-inline-padding;
font-size: .714em;
border-radius: $border-radius-small;
}
div#issue-changesets {
float: right;
width: 33%;
margin-left: $padding-side;
margin-bottom: $line-height-computed;
div.changeset {
padding: $table-cell-padding;
border-bottom: 1px solid $gray-lighter;
}
}

View File

@@ -0,0 +1,92 @@
//
// Tweaks for jQuery UI
// --------------------------------------------------
.ui-widget {
&,
input,
select,
textarea,
button
{
font-size: inherit;
font-family: inherit;
}
}
/**
* Widgets
*/
.ui-widget-content {
background: $panel-bg;
border-color: $panel-border;
border-radius: $panel-border-radius;
box-shadow: $panel-shadow;
}
.ui-state-hover,
.ui-state-focus {
&,
.ui-widget-content &,
.ui-widget-header & {
color: $component-active-color;
background: $component-active-bg;
border-color: $component-active-border;
font-weight: inherit;
}
}
/**
* Menu (e.g. autocomplete)
*/
.ui-menu-item {
border-radius: $panel-border-radius;
}
/**
* Dialogs
*/
.modal {
background: $body-bg;
z-index: 50;
h3.title {
display: none;
}
p.buttons {
text-align: right;
margin-bottom: 0;
}
}
.ui-dialog .ui-dialog-content {
padding: $padding-base-horizontal;
}
.ui-widget-overlay {
background: #000;
}
/**
* Datepicker
*/
img.ui-datepicker-trigger {
cursor: pointer;
vertical-align: middle;
margin-left: 4px;
}
.ui-datepicker-title select {
width: 70px !important;
margin-top: -2px !important;
margin-right: 4px !important;
}

500
sass/components/_list.scss Normal file
View File

@@ -0,0 +1,500 @@
//
// Lists
// --------------------------------------------------
table.list {
width: 100%;
font-size: $font-size-list;
margin-bottom: $line-height-computed;
.autoscroll & {
margin-bottom: 0;
}
th {
padding: $table-cell-padding;
vertical-align: bottom;
color: $gray;
border-bottom: 2px solid $table-border-color;
a {
color: $gray-darker;
}
}
td {
padding: $table-cell-padding;
text-align: center;
vertical-align: top;
border-bottom: 1px solid $table-border-color;
&.checkbox {
width: 15px;
padding: $table-cell-padding 0 0;
input {
margin: 2px 0 0;
}
}
&.id,
&.tracker,
&.parent,
&.relations {
width: 2%;
text-align: center;
}
&.id {
font-weight: bold;
text-align: right;
}
&.name,
&.description,
&.subject,
&.comments,
&.roles {
text-align: left;
}
&.tick {
width: 15%;
}
&.buttons {
width: 15%;
white-space: nowrap;
text-align: right;
a {
padding-right: 5px;
}
}
&.reorder {
width: 15%;
white-space: nowrap;
text-align: center;
}
}
caption {
text-align: left;
padding: 0.5em 0.5em 0.5em 0;
}
}
tr.project {
.name a {
white-space: nowrap;
}
&.closed,
&.archived,
&.closed a,
&.archived a {
color: #aaa;
}
&.idnt .name span {
background: url(../../../images/bullet_arrow_right.png) no-repeat -5px 50%;
padding-left: 16px;
}
@for $i from 1 through 9 {
&.idnt-#{$i} .name {
padding-left: $table-cell-padding + 16px * ($i - 1);
}
}
}
tr.issue {
text-align: center;
white-space: nowrap;
&.string,
&.text,
.subject,
.category {
white-space: normal;
}
.autoscroll & {
.subject > a {
display: block;
}
}
&.relations {
white-space: normal;
text-align: left;
span {
white-space: nowrap;
}
}
&.done_ratio table.progress {
margin-left: auto;
margin-right: auto;
}
&.idnt .subject a {
background-image: url(../../../images/bullet_arrow_right.png);
background-repeat: no-repeat;
@if $color-trackers {
background-position: 0 0;
} @else {
background-position: -5px 0;
}
padding-left: 16px;
}
.controller-issues.action-index & {
&.assigned-to-me {
.assigned_to,
.subject {
a {
font-weight: bold;
}
}
}
}
@for $i from 1 through 9 {
&.idnt-#{$i} .subject {
padding-left: $table-cell-padding + 16px * ($i - 1);
}
}
}
.issues {
.description {
padding: 0;
text-align: left;
@media screen and (min-width: $screen-sm-min) {
> .wiki {
padding: $padding-wiki;
max-height: 20em;
overflow: auto;
}
}
pre {
white-space: normal;
}
}
}
tr {
span.expander {
margin-left: 0;
padding-left: 8px;
cursor: pointer;
background: url(../../../images/bullet_toggle_plus.png) no-repeat center center;
@include user-select(none);
}
&.open span.expander {
background-image: url(../../../images/bullet_toggle_minus.png);
}
}
// /* do you */ .even {
// }
td.center {
text-align: center;
}
.issue-report {
table-layout: fixed;
}
.sort {
padding-right: 16px;
background-position: right center;
background-repeat: no-repeat;
&.asc {
background-image: url(../../../images/sort_asc.png);
}
&.desc {
background-image: url(../../../images/sort_desc.png);
}
}
tr.builtin td.name {
font-style: italic;
}
tr.entry {
border: 1px solid $gray-lighter;
td {
white-space: nowrap;
&.filename {
width: 30%;
text-align: left;
}
&.filename_no_report {
width: 70%;
text-align: left;
}
&.size {
text-align: right;
}
&.revision,
&.author {
text-align: center;
}
&.age {
text-align: right;
}
}
&.file td {
&.filename a,
&.filename_no_report a {
margin-left: 16px;
}
}
}
/**
* Priorities
*/
@if $color-priorities {
@include priority('.priority-lowest', $priority-lowest-bg, $priority-lowest-text, $priority-lowest-link);
@include priority('.priority-default', $priority-default-bg, $priority-default-text, $priority-default-link);
@include priority('.priority-high3', $priority-high3-bg, $priority-high3-text, $priority-high3-link);
@include priority('.priority-high2', $priority-high2-bg, $priority-high2-text, $priority-high2-link);
@include priority('.priority-highest', $priority-highest-bg, $priority-highest-text, $priority-highest-link);
}
@if $color-trackers {
@include tracker('.tracker-1', $tracker-1-bg, $tracker-1-text);
@include tracker('.tracker-2', $tracker-2-bg, $tracker-2-text);
@include tracker('.tracker-3', $tracker-3-bg, $tracker-3-text);
@include tracker('.tracker-4', $tracker-4-bg, $tracker-4-text);
@include tracker('.tracker-5', $tracker-5-bg, $tracker-5-text);
@include tracker('.tracker-6', $tracker-6-bg, $tracker-6-text);
@include tracker('.tracker-7', $tracker-7-bg, $tracker-7-text);
}
.odd {
background-color: $table-bg-accent;
}
/**
* List groups
*/
tr.group {
> td {
font-weight: bold;
text-align: left;
border-bottom: 1px solid $table-border-color;
a {
color: $brand-primary;
}
}
.toggle-all {
color: $gray-light;
font-weight: normal;
display: none;
}
&:hover .toggle-all {
display: inline;
}
.count {
display: inline-block;
padding: 1px 4px;
margin: 0 5px;
color: $brand-text;
background-color: $brand-primary;
border-radius: $border-radius-small;
font-size: $font-size-small;
}
}
.toggle-all:hover {
text-decoration: none;
}
/**
* Time entry in report
*/
tr.time-entry {
text-align: center;
white-space: nowrap;
td.issue,
td.comments {
text-align: left;
white-space: normal;
}
td.hours {
padding-right: 0.5em;
text-align: right;
font-weight: bold;
.hours-dec {
font-size: 0.9em;
}
}
}
/**
* Wiki page history entry
*/
tr.wiki-page-version {
td.updated_on,
td.author {
text-align: center;
}
}
/**
* Project versions list
*/
tr.version {
&.closed {
color: $gray;
a {
color: $gray;
}
}
td.name {
padding-left: 20px;
}
&.shared td.name {
background: url(../../../images/link.png) no-repeat 0 center;
}
td {
&.date,
&.status,
&.sharing {
text-align: center;
white-space: nowrap;
}
}
}
/**
* Users list
*/
tr.user {
td {
width: 13%;
white-space: nowrap;
&.username,
&.firstname,
&.lastname {
text-align: left;
}
&.email {
text-align: left;
width: 18%;
}
}
&.locked,
&.registered,
&.locked a,
&.registered a {
color: $gray-light;
}
}
/**
* Project members list
*/
table.members {
td.name {
padding-left: 20px;
}
td.group,
td.groupnonmember,
td.groupanonymous {
background: url(../../../images/group.png) no-repeat 0% 1px;
}
}
/**
* Plugins list
*/
table.plugins {
.configure {
text-align: right;
}
span.name {
font-size: $font-size-large;
font-weight: bold;
margin-bottom: .5em;
}
.description,
.url {
display: block;
}
}
/**
* Files list
*/
table.files {
tbody th {
text-align: left;
}
tr.file td {
&.filename {
text-align: left;
padding-left: 20px + $table-cell-padding;
}
&.digest {
font-family: $font-family-monospace;
}
}
}

View File

@@ -0,0 +1,27 @@
//
// Login form
// --------------------------------------------------
$login-input-width: 200px;
#login-form {
table {
margin: $line-height-computed * 2 auto;
}
td {
padding: $table-cell-padding;
}
}
#username,
#password,
#openid_url {
width: $login-input-width;
}
#openid_url {
background: url(../../../images/openid-bg.gif) no-repeat;
background-position: ($login-input-width - 24px) center;
padding-right: 8px + 24px;
}

View File

@@ -0,0 +1,427 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
//
// 1. Set default font family to sans-serif.
// 2. Prevent iOS text size adjust after orientation change, without disabling
// user zoom.
//
html {
font-family: sans-serif; // 1
-ms-text-size-adjust: 100%; // 2
-webkit-text-size-adjust: 100%; // 2
}
//
// 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 {
-moz-box-sizing: content-box;
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;
}
//
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
// and `video` controls.
// 2. Correct inability to style clickable `input` types in iOS.
// 3. Improve usability and consistency of cursor style between image-type
// `input` and others.
//
button,
html input[type="button"], // 1
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; // 2
cursor: pointer; // 3
}
//
// Re-set default cursor for disabled elements.
//
button[disabled],
html input[disabled] {
cursor: default;
}
//
// Remove inner padding and border in Firefox 4+.
//
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
//
// 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;
}
//
// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
// 2. Address `box-sizing` set to `border-box` in Safari and Chrome
// (include `-moz` to future-proof).
//
input[type="search"] {
-webkit-appearance: textfield; // 1
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; // 2
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
}
//
// 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;
}

View File

@@ -0,0 +1,36 @@
//
// Pagination (multiple pages)
// --------------------------------------------------
.pagination {
.previous,
.next,
.page {
display: inline-block;
padding: $padding-small-vertical $padding-small-horizontal;
text-decoration: none;
color: $pagination-color;
background-color: $pagination-bg;
border: 1px solid $pagination-border;
border-radius: $border-radius-base;
&:hover,
&:focus {
color: $pagination-hover-color;
background-color: $pagination-hover-bg;
border-color: $pagination-hover-border;
}
}
.page.current {
z-index: 2;
color: $pagination-active-color;
background-color: $pagination-active-bg;
border-color: $pagination-active-border;
cursor: default;
}
.items,
.per-page {
margin-left: $padding-small-vertical;
}
}

View File

@@ -0,0 +1,41 @@
//
// Media print specific styles
// --------------------------------------------------
@media print {
#top-menu,
#header,
#main-menu,
#sidebar,
#footer,
#wiki_add_attachment,
.hide-when-print,
.contextual,
.other-formats {
display: none;
}
#main {
background: #fff;
}
#content {
width: 100%;
margin: 0;
padding: 0;
border: 0;
background: #fff;
overflow: visible !important;
}
.autoscroll {
overflow-x: visible;
}
table.list {
th,
td {
border: 1px solid #aaa;
}
}
}

View File

@@ -0,0 +1,43 @@
//
// Progress bar
// --------------------------------------------------
table.progress {
empty-cells: show;
float: left;
margin-top: 1px;
margin-right: 5px;
border: 1px solid rgba(#000, .1);
td {
padding: 0;
border: 0 none;
height: 12px;
&.closed {
background-color: $progress-bar-success-bg;
}
&.done {
background-color: mix($progress-bar-success-bg, $progress-bg, 50%);
}
&.todo {
background-color: $progress-bg;
}
}
}
p {
&.percent {
margin-bottom: 0;
font-size: $font-size-small;
}
&.progress-info {
margin-bottom: 0;
clear: left;
font-size: 80%;
margin-top: -4px;
color: #777;
}
}

View File

@@ -0,0 +1,117 @@
//
// Activity and search results list
// --------------------------------------------------
#search-results,
div#activity dl {
margin-left: $padding-side;
}
div#activity,
#search-results {
dd {
margin-bottom: $line-height-computed;
padding-left: $padding-side;
}
dt {
margin-bottom: 2px;
padding-left: $padding-side;
background-position: 0 center;
background-repeat: no-repeat;
}
span.project:after {
content: " -";
}
span.description {
display: block;
color: $gray;
font-style: italic;
}
}
div#activity {
dt {
&.me .time {
border-bottom: 1px solid $gray-lighter;
}
.time {
color: $gray;
}
}
dd {
font-size: $font-size-small;
}
dt.grouped,
dd.grouped {
margin-left: $padding-side;
}
}
div#search-results-counts {
float: right;
ul {
@extend %clearfix;
}
li {
list-style-type: none;
float: left;
margin-left: 1em;
}
}
dt {
&.issue { background-image: url(../../../images/ticket.png); }
&.issue-edit { background-image: url(../../../images/ticket_edit.png); }
&.issue.closed { background-image: url(../../../images/ticket_checked.png); }
&.issue-closed { background-image: url(../../../images/ticket_checked.png); }
&.issue-note { background-image: url(../../../images/ticket_note.png); }
&.changeset { background-image: url(../../../images/changeset.png); }
&.news { background-image: url(../../../images/news.png); }
&.message { background-image: url(../../../images/message.png); }
&.reply { background-image: url(../../../images/comments.png); }
&.wiki-page { background-image: url(../../../images/wiki_edit.png); }
&.attachment { background-image: url(../../../images/attachment.png); }
&.document { background-image: url(../../../images/document.png); }
&.project { background-image: url(../../../images/projects.png); }
&.time-entry { background-image: url(../../../images/time.png); }
}
// Search form
#search-form {
input,
select {
margin-right: 5px;
}
label {
display: inline-block;
margin-right: 5px;
@include checkbox;
}
p:last-child {
margin-bottom: 0;
}
}
// Search results highlight
.highlight {
background-color: #fe8;
&.token-1 { background-color: #fba; }
&.token-2 { background-color: #afb; }
&.token-3 { background-color: #aef; }
}

146
sass/components/_tabs.scss Normal file
View File

@@ -0,0 +1,146 @@
//
// Tabs
// --------------------------------------------------
.tabs {
$tabs-buttons-width: 40px;
margin-bottom: $line-height-computed;
padding-right: $tabs-buttons-width;
overflow: hidden;
position: relative;
> ul {
width: 2000px; // stop it from breaking
margin: 0;
padding-left: 0;
list-style: none;
border-bottom: 1px solid $tab-border;
@extend %clearfix;
> li {
float: left;
margin-bottom: -1px;
> a {
display: block;
margin-right: 2px;
padding: $tab-padding-vertical $tab-padding-horizontal;
border: 1px solid transparent;
border-radius: $border-radius-base $border-radius-base 0 0;
&:hover,
&:focus {
text-decoration: none;
background-color: $tab-hover-bg;
border-color: $tab-hover-border $tab-hover-border $tab-border;
}
&.selected {
color: $tab-active-text;
background: $tab-active-bg;
border-color: $tab-active-border $tab-active-border $tab-active-bg;
}
}
}
}
.tabs-buttons {
position: absolute;
top: 0;
right: 0;
width: $tabs-buttons-width;
padding-left: 5px;
background-color: $body-bg;
> button {
float: left;
margin: 0;
padding: 0;
width: 50%;
border: 0 none;
opacity: .8;
height: $tab-padding-vertical * 2 + $line-height-computed;
background-color: $body-bg;
background-position: center center;
background-repeat: no-repeat;
box-shadow: none;
@include transition(opacity .1s);
&:hover,
&:active {
opacity: 1;
}
&:active {
background-color: $tab-hover-bg;
}
}
/**
* TODO: ikony
*/
.tab-left {
background-image: url(../../../images/bullet_arrow_left.png);
}
.tab-right {
background-image: url(../../../images/bullet_arrow_right.png);
}
}
}
/**
* Specific tabs content layout
*/
#tab-content-modules fieldset p {
margin: 3px 0 4px 0;
}
#tab-content-members,
#tab-content-memberships,
#tab-content-users {
.splitcontentleft {
width: 65%;
}
.splitcontentright {
width: 35%;
}
fieldset {
margin-bottom: $line-height-computed;
legend {
font-weight: bold;
}
label {
display: block;
margin-bottom: 3px;
@include checkbox;
}
label[for=principal_search] {
padding-left: 0;
}
}
.pagination .items {
margin-left: 0;
}
}
#tab-content-members,
#tab-content-users {
#principals {
max-height: 400px;
overflow: auto;
}
}
#tab-content-memberships .splitcontentright select {
width: 100%;
}

163
sass/components/_top.scss Normal file
View File

@@ -0,0 +1,163 @@
//
// Top menu
// --------------------------------------------------
#top-menu {
padding: $padding-small-vertical $padding-side;
background: $top-menu-bg;
color: $top-menu-text;
font-size: $font-size-small;
@extend %clearfix;
ul {
margin: 0;
padding: 0;
}
li {
display: inline;
margin: 0 .5em 0 0;
padding: 0;
list-style-type: none;
}
a {
color: $top-menu-link;
font-weight: bold;
&:hover {
color: $top-menu-link-hover;
text-decoration: none;
}
}
#loggedas {
float: right;
}
}
#account {
float: right;
> ul > li {
margin-left: .5em;
margin-right: 0;
}
}
//
// Header
// --------------------------------------------------
#header {
background-color: $header-bg;
color: $header-text;
position: relative;
> h1 {
padding: 10px $padding-side;
> .root {
color: $header-root;
font-weight: 500;
}
> .ancestor {
font-size: 80%;
}
}
a {
color: $header-link;
}
}
#quick-search {
margin-top: ($header-title-line-height + $padding-large-vertical * 2 - $input-height-base - 1px) / 2;
margin-right: $padding-side;
float: right;
color: $header-text;
label {
font-weight: 500;
}
form {
display: inline;
}
input,
select {
margin-left: 5px;
color: $header-root;
background: darken($header-bg, 10%);
border-color: darken($header-bg, 15%);
@include transition(color ease-in-out .1s, background-color ease-in-out .1s, border-color ease-in-out .1s);
&:focus {
color: $input-color;
background-color: $input-bg;
border-color: darken($header-bg, 35%);
box-shadow: inset 0 1px 3px rgba(0,0,0,.3);
}
}
input {
width: 200px;
}
}
#main-menu {
background-color: $main-menu-bg;
border-bottom: 1px solid $main-menu-border;
ul {
margin: 0;
padding: 0 ($padding-side - $main-menu-padding-horizontal);
list-style: none;
color: $main-menu-link;
@extend %clearfix;
> li {
float: left;
margin-right: .5em;
margin-bottom: -1px;
> a {
display: block;
padding: $main-menu-padding-vertical 0;
@include transition(box-shadow .2s);
@media screen and (min-width: $screen-md-min) {
padding-left: $main-menu-padding-horizontal;
padding-right: $main-menu-padding-horizontal;
}
@media screen and (min-width: $screen-lg-min) {
padding-left: $main-menu-padding-horizontal * 2;
padding-right: $main-menu-padding-horizontal * 2;
}
&:hover,
&:focus {
outline: 0 none;
text-decoration: none;
box-shadow: inset 0 (-$main-menu-shadow-width) 0 $main-menu-shadow-hover;
}
&.selected {
padding-bottom: $main-menu-padding-vertical - $main-menu-shadow-width;
color: $main-menu-link-active;
border-bottom: 3px solid $main-menu-shadow-active;
font-weight: bold;
box-shadow: none;
}
}
}
}
a {
color: $main-menu-link;
}
}

233
sass/components/_wiki.scss Normal file
View File

@@ -0,0 +1,233 @@
div.wiki {
line-height: $wiki-line-height;
color: $wiki-text;
&.wiki-page {
font-size: $wiki-font-size;
margin-bottom: $line-height-computed;
}
h1, h2, h3, h4, h5, h6 {
font-weight: $headings-font-weight;
line-height: $headings-line-height;
margin-top: 1em;
margin-bottom: .5em;
}
h1 { font-size: $font-size-h1; }
h2 { font-size: $font-size-h2; }
h3 { font-size: $font-size-h3; }
h4 { font-size: $font-size-h4; }
h5 { font-size: $font-size-h5; }
h6 { font-size: $font-size-h6; }
h1,
h2 {
padding-bottom: 0.3em;
border-bottom: 1px solid $gray-lighter;
}
h6 {
color: $gray;
}
> a:first-child {
& + h1,
& + h2,
& + h3,
& + h4,
& + h5,
& + h6 {
margin-top: 0;
}
}
> *:last-child {
margin-bottom: 0;
}
.contextual {
a {
opacity: 0.4;
&:hover {
opacity: 1;
}
}
}
table {
margin-bottom: $line-height-computed;
border: 1px solid $table-border-color;
}
td, th {
border: 1px solid $table-border-color;
padding: $table-cell-padding;
}
.noborder {
border: 0 none;
td, th {
border: 0 none;
}
}
.external {
padding-left: 12px;
background-position: 0% 60%;
background-repeat: no-repeat;
background-image: url(../../../images/external.png);
}
a.new {
color: $brand-danger;
}
code {
padding: .2em .33em;
background-color: #f7f7f7;
border-radius: $border-radius-base;
font-size: $font-size-small;
}
pre {
padding: 4px 8px;
background-color: #f7f7f7;
border: 1px solid #e9e9e9;
width: auto;
overflow-x: auto;
overflow-y: hidden;
border-radius: $border-radius-base;
font-size: $font-size-small;
code {
padding: 0;
background-color: transparent;
border-radius: 0;
font-size: 1em;
}
}
.toc {
padding: 0;
margin-bottom: $line-height-computed;
margin-left: 0;
&.right,
&.left {
padding: 8px;
background-color: $tooltip-bg;
border: 1px solid $tooltip-border;
border-radius: $border-radius-base;
box-shadow: $panel-shadow;
a {
font-weight: normal;
text-decoration: none;
color: $tooltip-text;
&:hover {
color: darken($tooltip-text, 10%);
text-decoration: underline;
}
}
}
&.right {
float: right;
margin-left: $line-height-computed;
margin-right: 0;
}
&.left {
float: left;
margin-right: $line-height-computed;
margin-left: 0;
}
ul {
margin: 0;
padding: 0;
font-size: $font-size-small;
ul ul {
font-size: 1em;
}
}
li {
list-style-type: none;
margin: 0;
li {
margin-left: 1.5em;
}
}
img {
vertical-align: middle;
max-width: 100%;
}
}
}
h1, h2, h3, h4, h5, h6 {
.wiki-anchor {
display: none;
margin-left: 5px;
text-decoration: none !important;
color: $gray-lighter !important;
}
&:hover {
.wiki-anchor {
display: inline;
}
}
}
p.footnote {
font-size: $font-size-small;
margin-bottom: 5px;
&:before {
content: "";
display: block;
width: 300px;
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid $gray-lighter;
}
& + p.footnote:before {
display: none;
}
}
#preview fieldset {
margin-top: $line-height-computed;
padding: $padding-wiki;
background-image: url(../../../images/draft.png);
}
#wiki_add_attachment {
padding-top: $line-height-computed;
border-top: 1px solid $gray-lighter;
> p {
float: left;
}
#add_attachment_form {
clear: left;
}
}
.controller-wiki.action-show {
.other-formats {
float: right;
margin-top: 0;
}
}

39
sass/mixins/_buttons.scss Normal file
View File

@@ -0,0 +1,39 @@
// Button sizes
@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
padding: $padding-vertical $padding-horizontal;
font-size: $font-size;
line-height: $line-height;
border-radius: $border-radius;
}
@mixin button-variant($color, $bg, $border) {
$focus-bg: darken($bg, 8%);
$focus-border: darken($border, 8%);
$active-shadow: inset 0 1px 3px rgba(#000, .3);
color: $color;
border-color: $border;
background-color: $bg;
box-shadow: 0 1px 0 $border;
@if lightness($bg) > 90 {
$focus-bg: darken($bg, 5%);
$focus-border: darken($border, 5%);
$active-shadow: inset 0 1px 2px rgba(#000, .1);
}
&:hover,
&:focus {
color: $color;
background-color: $focus-bg;
border-color: $focus-border;
box-shadow: 0 1px 0 $focus-border;
}
&:active {
border-color: $border;
background-color: $bg;
@include translate(0, 1px);
box-shadow: $active-shadow;
}
}

View File

@@ -0,0 +1,7 @@
// Center-align a block level element
@mixin center-block() {
display: block;
margin-left: auto;
margin-right: auto;
}

View File

@@ -0,0 +1,33 @@
// Clearfix
//
// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
// contenteditable attribute is included anywhere else in the document.
// Otherwise it causes space to appear at the top and bottom of elements
// that are clearfixed.
// 2. The use of `table` rather than `block` is only necessary if using
// `:before` to contain the top-margins of child elements.
//
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
@mixin clearfix() {
&:before,
&:after {
content: " "; // 1
display: table; // 2
}
&:after {
clear: both;
}
}
// Lighter (for output CSS) cleafix with placeholder
%clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}

42
sass/mixins/_forms.scss Normal file
View File

@@ -0,0 +1,42 @@
// Form control focus state
//
@mixin form-control-focus($color: $input-border-focus) {
&:focus {
border-color: $color;
outline: 0;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba($color, .5);
}
}
// Form control sizing
//
@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
#{$parent} {
height: $input-height;
padding: $padding-vertical $padding-horizontal;
font-size: $font-size;
line-height: $line-height;
border-radius: $border-radius;
}
select#{$parent} {
height: $input-height;
line-height: $input-height;
}
textarea#{$parent},
select[multiple]#{$parent} {
height: auto;
}
}
@mixin checkbox() {
padding-left: 20px;
@include user-select(none);
@extend %clearfix;
input[type="checkbox"] {
float: left;
margin-left: -20px;
}
}

View File

@@ -0,0 +1,57 @@
// Gradients
// Horizontal gradient, from left to right
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12
background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down
}
// Vertical gradient, from top to bottom
//
// Creates two color stops, start and end, by specifying a color and position for each color stop.
// Color stops are not available in IE9 and below.
@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12
background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
}
@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
background-repeat: repeat-x;
background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12
background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
}
@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
}
@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
}
@mixin gradient-radial($inner-color: #555, $outer-color: #333) {
background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
background-image: radial-gradient(circle, $inner-color, $outer-color);
background-repeat: no-repeat;
}
@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) {
background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
}

130
sass/mixins/_issues.scss Normal file
View File

@@ -0,0 +1,130 @@
// Priority highlight
@mixin priority($parent, $background, $color, $link) {
$border-color: darken(desaturate($background, 30%), 13.5%);
tr#{$parent} {
background: $background;
color: $color;
&.odd {
background: darken($background, 3%);
}
td {
border-color: $border-color;
}
a {
color: $link;
&:hover {
color: darken($link, 10%);
}
}
}
@if $colored-issue {
.issue.details#{$parent} {
color: $color;
@if '.priority-default' == $parent {
$border-color: $issue-border;
background: $issue-bg;
} @else {
background: $background;
}
&,
hr {
border-color: $border-color;
}
a {
color: $link;
&:hover {
color: darken($link, 10%);
}
}
.next-prev-links {
color: mix($color, $gray-light, 25%);
}
> .description > .wiki {
border-top-color: $border-color;
a {
color: $link-color;
text-decoration: none;
&:hover,
&:focus {
color: $link-hover-color;
text-decoration: $link-hover-decoration;
}
&.new {
color: $brand-danger;
}
}
}
> .attachments {
background-color: lighten($background, 5%);
border-top-color: lighten($border-color, 5%);
span.author {
color: mix($color, $gray, 25%);
}
}
}
}
}
// Tracker highlight
@mixin tracker($parent, $background, $color) {
tr#{$parent} .id > a,
a#{$parent} {
color: $color;
background-color: $background;
border-radius: $border-radius-small ($border-radius-small * 3) ($border-radius-small * 3) $border-radius-small;
&:hover {
text-decoration: none;
background-color: darken($background, 10%);
}
}
a#{$parent} {
padding: $tracker-inline-padding;
margin-right: 1px;
&.closed {
color: mix($color, $background, 50%);
text-decoration: $link-closed-decoration;
}
}
tr#{$parent} .id > a {
display: block;
padding: $tracker-list-padding;
&:before {
content: '#';
color: mix($color, $background, 50%);
}
}
@if $colored-issue {
.issue.details a#{$parent} {
&,
&:hover {
color: $color;
}
}
}
}

View File

@@ -0,0 +1,8 @@
// Opacity
@mixin opacity($opacity) {
opacity: $opacity;
// IE8 filter
$opacity-ie: ($opacity * 100);
filter: #{alpha(opacity=$opacity-ie)};
}

View File

@@ -0,0 +1,8 @@
// Reset filters for IE
//
// When you need to remove a gradient background, do not forget to use this to reset
// the IE filter for IE9 and below.
@mixin reset-filter() {
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}

View File

@@ -0,0 +1,9 @@
// WebKit-style focus
@mixin tab-focus() {
// Default
outline: thin dotted;
// WebKit
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}

View File

@@ -0,0 +1,8 @@
// Text overflow
// Requires inline-block or block for proper styling
@mixin text-overflow() {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

View File

@@ -0,0 +1,212 @@
// Vendor Prefixes
//
// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
// Autoprefixer in our Gruntfile. They will be removed in v4.
// - Animations
// - Backface visibility
// - Box shadow
// - Box sizing
// - Content columns
// - Hyphens
// - Placeholder text
// - Transformations
// - Transitions
// - User Select
// Animations
@mixin animation($animation) {
-webkit-animation: $animation;
-o-animation: $animation;
animation: $animation;
}
@mixin animation-name($name) {
-webkit-animation-name: $name;
animation-name: $name;
}
@mixin animation-duration($duration) {
-webkit-animation-duration: $duration;
animation-duration: $duration;
}
@mixin animation-timing-function($timing-function) {
-webkit-animation-timing-function: $timing-function;
animation-timing-function: $timing-function;
}
@mixin animation-delay($delay) {
-webkit-animation-delay: $delay;
animation-delay: $delay;
}
@mixin animation-iteration-count($iteration-count) {
-webkit-animation-iteration-count: $iteration-count;
animation-iteration-count: $iteration-count;
}
@mixin animation-direction($direction) {
-webkit-animation-direction: $direction;
animation-direction: $direction;
}
@mixin animation-fill-mode($fill-mode) {
-webkit-animation-fill-mode: $fill-mode;
animation-fill-mode: $fill-mode;
}
// Backface visibility
// Prevent browsers from flickering when using CSS 3D transforms.
// Default value is `visible`, but can be changed to `hidden`
@mixin backface-visibility($visibility){
-webkit-backface-visibility: $visibility;
-moz-backface-visibility: $visibility;
backface-visibility: $visibility;
}
// Box sizing
@mixin box-sizing($boxmodel) {
-webkit-box-sizing: $boxmodel;
-moz-box-sizing: $boxmodel;
box-sizing: $boxmodel;
}
// CSS3 Content Columns
@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
-webkit-column-count: $column-count;
-moz-column-count: $column-count;
column-count: $column-count;
-webkit-column-gap: $column-gap;
-moz-column-gap: $column-gap;
column-gap: $column-gap;
}
// Optional hyphenation
@mixin hyphens($mode: auto) {
word-wrap: break-word;
-webkit-hyphens: $mode;
-moz-hyphens: $mode;
-ms-hyphens: $mode; // IE10+
-o-hyphens: $mode;
hyphens: $mode;
}
// Placeholder text
@mixin placeholder($color: $input-color-placeholder) {
// Firefox
&::-moz-placeholder {
color: $color;
opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526
}
&:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
&::-webkit-input-placeholder { color: $color; } // Safari and Chrome
}
// Transformations
@mixin scale($ratio...) {
-webkit-transform: scale($ratio);
-ms-transform: scale($ratio); // IE9 only
-o-transform: scale($ratio);
transform: scale($ratio);
}
@mixin scaleX($ratio) {
-webkit-transform: scaleX($ratio);
-ms-transform: scaleX($ratio); // IE9 only
-o-transform: scaleX($ratio);
transform: scaleX($ratio);
}
@mixin scaleY($ratio) {
-webkit-transform: scaleY($ratio);
-ms-transform: scaleY($ratio); // IE9 only
-o-transform: scaleY($ratio);
transform: scaleY($ratio);
}
@mixin skew($x, $y) {
-webkit-transform: skewX($x) skewY($y);
-ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
-o-transform: skewX($x) skewY($y);
transform: skewX($x) skewY($y);
}
@mixin translate($x, $y) {
-webkit-transform: translate($x, $y);
-ms-transform: translate($x, $y); // IE9 only
-o-transform: translate($x, $y);
transform: translate($x, $y);
}
@mixin translate3d($x, $y, $z) {
-webkit-transform: translate3d($x, $y, $z);
transform: translate3d($x, $y, $z);
}
@mixin rotate($degrees) {
-webkit-transform: rotate($degrees);
-ms-transform: rotate($degrees); // IE9 only
-o-transform: rotate($degrees);
transform: rotate($degrees);
}
@mixin rotateX($degrees) {
-webkit-transform: rotateX($degrees);
-ms-transform: rotateX($degrees); // IE9 only
-o-transform: rotateX($degrees);
transform: rotateX($degrees);
}
@mixin rotateY($degrees) {
-webkit-transform: rotateY($degrees);
-ms-transform: rotateY($degrees); // IE9 only
-o-transform: rotateY($degrees);
transform: rotateY($degrees);
}
@mixin perspective($perspective) {
-webkit-perspective: $perspective;
-moz-perspective: $perspective;
perspective: $perspective;
}
@mixin perspective-origin($perspective) {
-webkit-perspective-origin: $perspective;
-moz-perspective-origin: $perspective;
perspective-origin: $perspective;
}
@mixin transform-origin($origin) {
-webkit-transform-origin: $origin;
-moz-transform-origin: $origin;
-ms-transform-origin: $origin; // IE9 only
transform-origin: $origin;
}
// Transitions
@mixin transition($transition...) {
-webkit-transition: $transition;
-o-transition: $transition;
transition: $transition;
}
@mixin transition-property($transition-property...) {
-webkit-transition-property: $transition-property;
transition-property: $transition-property;
}
@mixin transition-delay($transition-delay) {
-webkit-transition-delay: $transition-delay;
transition-delay: $transition-delay;
}
@mixin transition-duration($transition-duration...) {
-webkit-transition-duration: $transition-duration;
transition-duration: $transition-duration;
}
@mixin transition-timing-function($timing-function) {
-webkit-transition-timing-function: $timing-function;
transition-timing-function: $timing-function;
}
@mixin transition-transform($transition...) {
-webkit-transition: -webkit-transform $transition;
-moz-transition: -moz-transform $transition;
-o-transition: -o-transform $transition;
transition: transform $transition;
}
// User select
// For selecting text on the page
@mixin user-select($select) {
-webkit-user-select: $select;
-moz-user-select: $select;
-ms-user-select: $select; // IE10+
user-select: $select;
}

View File

@@ -0,0 +1,2 @@
@import "../../variables";
@import "../../mixins";

View File

@@ -0,0 +1,314 @@
@import "common";
html {
overflow-y: scroll;
height: 100%;
}
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
font-family: $font-family-base;
font-size: $font-size-base;
line-height: $line-height-base;
color: $text-color;
background-color: mix($gray-lighter, $header-bg, 70%);
}
a {
color: $link-color;
text-decoration: none;
&:hover,
&:focus {
color: $link-hover-color;
text-decoration: $link-hover-decoration;
}
&.issue.closed {
color: $link-color-issue-closed;
text-decoration: $link-closed-decoration;
}
&.project.closed {
color: $link-color-project-closed;
}
&.user.locked {
color: $link-color-user-locked;
}
}
/**
* Form elements
*/
button,
input,
select,
textarea {
font-family: inherit;
font-size: $font-size-base;
line-height: $line-height-base;
@include box-sizing(border-box);
}
select,
textarea,
input[type="search"],
input[type="text"],
input.name,
input.editor,
#col_width input {
height: $input-height-base;
padding: $input-padding-vertical $input-padding-horizontal;
color: $input-color;
background-color: $input-bg;
border: 1px solid $input-border;
border-radius: $input-border-radius;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075);
@include transition(border-color ease-in-out .1s, box-shadow ease-in-out .1s);
@include form-control-focus();
@include placeholder();
}
textarea {
resize: vertical;
height: auto;
}
button.ui-multiselect {
height: $input-height-base;
padding: $input-padding-vertical $input-padding-horizontal;
color: $input-color;
background: $input-bg;
border: 1px solid $input-border;
cursor: default;
white-space: nowrap;
overflow: hidden;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075);
@include transition(border-color ease-in-out .1s, box-shadow ease-in-out .1s);
@include box-sizing(border-box);
&:hover,
&:focus {
color: $input-color;
}
&:active {
@include translate(0, 0);
}
&.ui-state-active {
border-color: $input-border-focus;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba($input-border-focus, .5);
}
.ui-icon {
margin-top: 1px;
}
}
/**
* Top toolbar
*/
#toolbar {
display: block;
padding: 10px $padding-side;
overflow: hidden;
position: relative;
background-color: $main-menu-bg;
box-shadow: $panel-shadow;
z-index: 1000;
@include clearfix;
.breadcrumbs {
float: left;
margin-right: 10px;
select {
vertical-align: middle;
margin-right: 5px;
}
.home {
font-weight: bold;
}
.separator {
position: relative;
top: -1px;
padding: 0 .2em;
font-weight: bold;
}
}
.userselect {
float: left;
position: relative;
ul {
padding-left: 0;
}
br {
display: none;
}
}
.links {
float: right;
a {
padding-left: 5px;
cursor: pointer;
@include user-select(none);
}
}
input[type="search"],
input[type="text"],
select,
.ui-widget {
font-size: inherit;
font-family: inherit;
}
@media screen and (max-width: $screen-md-max) {
font-size: $font-size-small;
input[type="search"],
input[type="text"],
select,
.ui-widget {
$input-padding-vertical-small: 2px;
$input-padding-horizontal-small: 5px;
height: ($line-height-computed + ($input-padding-vertical-small * 2) + 2);
padding: $input-padding-vertical-small $input-padding-horizontal-small;
}
#project_quick_jump_box {
width: 128px;
}
}
}
#refresh {
.loading & {
background-image: url('images/bouncer.gif');
background-repeat: no-repeat;
background-position: -6px 1px;
}
}
/**
* Other elements
*/
.clearfix {
@include clearfix;
}
#content {
margin: 0;
padding: 0;
overflow: visible;
}
#helpers,
.meta,
.editors {
display: none;
}
/**
* .editor is the classname for field editors of sprint,
* story, task, impediment. These field editors get created
* at runtime whenever any of the above models are edited.
*/
.ui-dialog .editor {
display: block;
}
ul.ui-sortable {
min-height: 20px;
}
/**
* Story tooltip
*/
.ui-tooltip {
.ui-tooltip-tip,
.ui-tooltip-content {
background-color: $tooltip-bg;
border-color: $tooltip-border;
}
.ui-tooltip-content {
padding: $padding-base-vertical;
color: $tooltip-text;
font-size: $font-size-small;
box-shadow: 0 2px 2px rgba(0, 0, 0, .2);
> div {
max-height: 200px;
overflow: hidden;
text-overflow: ellipsis;
}
hr {
margin-top: $line-height-computed / 2;
margin-bottom: $line-height-computed / 2;
border: 0;
border-top: 1px solid $hr-border;
}
.wiki-anchor {
display: none;
}
}
}
.tooltip_text {
display: none;
}
/**
* drag-drop effect: disabled dropzones are greyed out
*/
.rb-sortable-disabled,
.ui-sortable-disabled {
opacity: 0.5;
background-color: $gray-lighter;
}
.w-rb-header-collapsed {
height: 18px;
overflow: hidden;
}
/**
* Fix datepicker buttons position
*/
#ui-datepicker-div {
.ui-datepicker-prev,
.ui-datepicker-next {
top: 7px;
}
.ui-datepicker-prev-hover,
.ui-datepicker-next-hover {
top: 6px;
}
}

View File

@@ -0,0 +1,753 @@
@import "common";
$header-line-height: floor($line-height-computed * 1.5);
$header-left-width: 30px;
$header-right-width: 230px;
$header-right-width-wider: 300px;
$story-left-width: 110px;
$story-right-width: 130px;
$story-id-width: 51px;
$story-project-width: 50px;
$story-status-width: 90px;
@mixin rb-tracker($parent, $background, $color) {
#{$parent} .id .t a {
color: $color;
background-color: $background;
&:before {
color: mix($color, $background, 50%);
}
&:hover {
text-decoration: none;
background-color: darken($background, 10%);
}
/*
&.closed {
color: mix($color, $background, 50%);
text-decoration: $link-closed-decoration;
}
*/
}
}
/**
* reserved classes are
* .backlog (used in master_backlog.js to initialize all backlogs)
* .model (used in backlog.js editable_inplace.js model.js)
* .sprint (used in backlog.js
* .stories (used in backlog.js for sortable)
* .editor
* .editable (bind click on)
* .close_sprint (bind click on)
*/
/**
* fluid, 2-colum layout
*/
#backlogs_container {
padding: $padding-side ($padding-side / 2);
.wrapper {
position: relative;
float: left;
left: 0;
width: 100%;
}
.left-col {
position: relative;
float: left;
left: 0;
width: 50%;
}
.right-col {
position: relative;
float: right;
right: 0;
width: 50%;
}
.backlogs-panel-inner {
padding: 0 ($padding-side / 2);
}
}
/**
* Fixed-Fluid-Fixed layout
*/
.fff-wrapper {
}
.fff-wrapmiddle {
float: left;
width: 100%;
}
.fff-middle {
margin-right: $story-right-width;
margin-left: $story-left-width;
}
.fff-left {
float: left;
width: $story-left-width;
margin-left: -100%;
}
.fff-right {
float: left;
width: $story-right-width;
margin-left: -$story-right-width;
}
.header {
.fff-middle {
margin-right: $header-right-width;
margin-left: $header-left-width;
}
.fff-left {
width: $header-left-width;
}
.fff-right {
width: $header-right-width;
margin-left: -$header-right-width;
}
@media screen and (min-width: $screen-md) {
.fff-middle {
margin-right: $header-right-width-wider;
}
.fff-right {
width: $header-right-width-wider;
margin-left: -$header-right-width-wider;
}
}
}
/**
* Just some space at the bottom of the page
*/
#dummy_backlog_container {
height: 150px;
}
/**
* Base backlog container
*/
#backlogs_container {
.closedbacklog,
.backlog {
display: block;
position: relative;
margin: 0 0 $padding-side;
background-color: $gray-lightest;
box-shadow: $panel-shadow;
border-radius: $border-radius-large $border-radius-large 0 0;
}
}
/**
* Backlog header
*/
#backlogs_container {
.header {
position: relative;
height: $header-line-height;
line-height: $header-line-height;
background-color: $header-bg;
border: 1px solid darken($header-bg, 5%);
color: $header-text;
border-radius: $border-radius-large $border-radius-large 0 0;
.name,
.velocity,
.date {
white-space: nowrap;
}
.name {
padding-left: $padding-base-horizontal;
font-weight: bold;
overflow: hidden;
}
.date {
float: left;
width: 80px;
text-align: center;
& + .date {
margin-left: $padding-base-horizontal;
}
}
.velocity {
text-align: right;
padding-right: $padding-base-horizontal;
}
.id,
.description,
.status {
display: none;
}
.saving {
background-image: url('images/ajax.gif');
background-repeat: no-repeat;
background-position: center;
}
.error {
background-image: url('images/error.png');
background-repeat: no-repeat;
background-position: center;
}
.editing {
$editor-padding: (($header-line-height - $input-height-base) / 2);
.editors {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
padding-top: $editor-padding;
background-color: $header-bg;
border-radius: $border-radius-large $border-radius-large 0 0;
z-index: 1;
}
label, .id.editor {
display: none;
}
.release_end_date.editor,
.release_start_date.editor,
.effective_date.editor,
.sprint_start_date.editor {
float: left;
position: relative;
width: 90px;
margin-left: $editor-padding * 2;
margin-bottom: $editor-padding;
padding: 0;
text-align: center;
}
.name.editor {
$name-width-minus: $header-right-width-wider + 35px;
float: left;
margin-left: $header-line-height - 2px;
min-width: 100px;
width: calc(100% - #{$name-width-minus}) !important;
position: relative;
}
.description.editor {
display: none;
}
.edit-actions {
float: right;
margin-right: $editor-padding * 2;
margin-bottom: $editor-padding;
}
}
.menu {
position: relative;
height: $header-line-height;
line-height: $line-height-base;
font-size: $font-size-small;
overflow: visible;
cursor: pointer;
border-right: 1px solid #888;
border-bottom: 0 none;
border-radius: ($border-radius-large - 1px) 0 0 0;
@include transition(background-color .07s);
&:hover {
z-index: 1000;
border-bottom: 1px solid $body-bg;
background-color: $body-bg;
}
.icon {
position: relative;
left: 6px;
top: 7px;
padding: 0;
background-image: url("images/ui-icons_888888_256x240.png");
background-position: -64px -16px;
}
.items {
display: none;
z-index: 999;
position: absolute;
left: -1px;
top: $header-line-height + 1px;
margin: 0;
padding: $padding-small-vertical 0;
list-style: none;
background-color: $body-bg;
border: 1px solid $gray-light;
border-top: 0 none;
border-radius: 0 0 $border-radius-base $border-radius-base;
box-shadow: 0 2px 1px rgba(#000, .1);
a {
color: $gray-darker;
}
}
&:hover .items {
display: block;
}
.item {
white-space: nowrap;
min-width: 150px;
> a {
display: block;
padding: 4px 8px;
&:hover {
text-decoration: none;
color: $component-active-color;
background-color: $component-active-bg;
}
}
ul {
display: none;
position: absolute;
top: 0;
left: 160px;
margin: 0;
padding: 0;
list-style: none;
background-color: $gray-lightest;
}
&:hover ul {
display: block;
}
}
}
.model.headertext {
cursor: pointer;
}
}
.close_sprint {
float: left;
overflow: hidden;
white-space: nowrap;
color: $header-link;
}
.closedbacklog {
.menu {
display: none;
}
.headertext {
cursor: default;
/*we have model class here, but are not editable*/
}
}
}
/**
* Backlog items
*/
#backlogs_container {
.stories {
list-style: none;
margin: 0;
padding: 0;
position: relative;
min-height: ($line-height-computed + $table-condensed-cell-padding * 2);
font-size: $font-size-list;
.v {
display: none;
}
.placeholder {
min-height: ($line-height-computed + $table-condensed-cell-padding * 2);
background-color: $gray;
}
}
.story {
display: block;
margin: 0;
padding: $table-condensed-cell-padding;
cursor: move;
background-color: $body-bg;
background-repeat: no-repeat;
background-position: center;
border-top: 1px solid $gray-lighter;
&:nth-child(2n) {
background-color: $table-bg-accent;
}
&:hover {
background-color: $tooltip-bg;
}
&.saving {
background-image: url('images/ajax.gif');
color: $gray-light;
}
&.error {
background-image: url('images/error.png');
color: $brand-warning;
}
.tracker_id {
display: none;
}
.id {
position: relative;
width: $story-id-width;
float: left;
.t {
a {
display: block;
padding: $tracker-list-padding;
font-weight: bold;
text-align: right;
color: $gray-dark;
background-color: darken($gray-lightest, 3%);
border-radius: $border-radius-small ($border-radius-small * 3) ($border-radius-small * 3) $border-radius-small;
&:before {
content: '#';
margin-left: -1em;
font-weight: normal;
color: $gray-light;
}
&:hover {
background-color: $gray-lighter;
text-decoration: none;
}
}
}
}
.project {
display: block;
position: relative;
float: left;
width: $story-project-width;
padding-left: 5px;
text-align: center;
white-space: nowrap;
overflow: hidden;
.t {
overflow: hidden;
}
}
.subject {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
&.closed .subject {
text-decoration: line-through;
}
.status_id {
float: left;
width: $story-status-width;
padding-left: 5px;
white-space: nowrap;
}
.story_points {
float: left;
width: $story-right-width - ($story-status-width + $padding-base-horizontal);
text-align: right;
}
.story_field {
overflow: hidden;
}
.fixed_version_id,
.higher_item_id,
.story_project,
.user_status {
display: none;
}
&.editing {
$input-padding-vertical-small: 2px;
$input-padding-horizontal-small: 5px;
background-color: $table-bg-hover;
.editors {
display: block;
text-align: right;
label {
display: none;
}
}
.editor {
margin: 0;
padding: $input-padding-vertical-small $input-padding-horizontal-small;
height: ($line-height-computed + ($input-padding-vertical-small * 2) + 2);
font-size: inherit;
font-family: inherit;
vertical-align: top;
margin-right: 5px;
&.tracker_id {
display: block;
width: 100px;
float: left;
}
&.status_id {
float: left;
width: 120px;
}
&.story_points {
float: left;
width: 60px;
margin-right: 0;
}
&.subject {
float: left;
$subject-width-minus: 100px + 120px + 60px + 5px * 3;
width: calc(100% - #{$subject-width-minus}) !important;
height: 60px;
overflow: auto;
}
&.category_id {
display: block;
left: 456px;
margin: 0;
top: 4px;
width: 60px;
}
}
.story_field {
display: none;
}
.project,
select.project_id.editor {
display: none;
}
.edit-actions {
float: right;
margin-top: 5px;
}
}
}
.closedbacklog .story {
cursor: default;
}
/**
* override: display story subject in multiple lines
*/
.rb-multilinesubject & .subject {
white-space: normal;
height: auto;
overflow: show;
}
@if $color-trackers {
@include rb-tracker('.tracker1', $tracker-1-bg, $tracker-1-text);
@include rb-tracker('.tracker2', $tracker-2-bg, $tracker-2-text);
@include rb-tracker('.tracker3', $tracker-3-bg, $tracker-3-text);
@include rb-tracker('.tracker4', $tracker-4-bg, $tracker-4-text);
@include rb-tracker('.tracker5', $tracker-5-bg, $tracker-5-text);
@include rb-tracker('.tracker6', $tracker-6-bg, $tracker-6-text);
@include rb-tracker('.tracker7', $tracker-7-bg, $tracker-7-text);
}
}
/**
* dialog
*/
.ui-dialog {
.ui-dialog-titlebar-close {
display: none;
}
.ui-dialog-title {
float: left;
margin-right: 0;
}
&.ui-widget-content {
box-shadow: 2px 2px 5px #777777;
border: none;
}
.ui-dialog-buttonpane.ui-widget-content {
border: none;
}
label {
display: block;
font-size: 11px;
text-transform: capitalize;
width: 100%;
}
.editor {
font-size: 12px;
margin-bottom: 10px;
width: 100%;
}
}
#sprint_editor .description {
height: 65px;
}
/**
* In-place Sprint Editor
*/
#backlogs_container {
#backlogs_container .editing .editable {
display: none;
}
.editing .edit-actions {
white-space: nowrap;
margin-left: 5px;
a {
display: inline-block;
margin-bottom: 0;
text-align: center;
cursor: pointer;
font-weight: $btn-font-weight;
white-space: nowrap;
border: 1px solid;
@include button-size($input-padding-vertical, $input-padding-horizontal, $font-size-base, $line-height-base, $border-radius-base);
@include user-select(none);
@include transition(background-color ease-in-out .07s, border-color ease-in-out .07s, box-shadow ease-in-out .07s);
&.save {
@include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
}
&.cancel {
@include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
}
& + a {
margin-left: 3px;
}
&:hover,
&:active {
text-decoration: none;
}
}
}
}
/* In-place Story Editor */
.debug {
.story {
.id,
.subject,
.status_id,
.story_points {
background-color: red;
}
}
.header {
.name,
.sprint_start_date,
.effective_date,
.actions {
background-color: red;
}
}
.menu,
.velocity,
#new_story {
background-color: red;
}
}
/* Naive but light handling of colors by user stories tracker */
/* datepicker bugfix: hide until it opens itself */
.ui-datepicker {
display: none;
}
/* show completed sprints */
#show_completed_sprints {
margin-left: $padding-side / 2;
color: $gray-darkest;
cursor: pointer;
}

View File

@@ -0,0 +1,63 @@
@import "common";
table {
th,
td {
padding: $table-condensed-cell-padding $table-cell-padding;
}
}
.ui-widget {
margin-bottom: $line-height-computed;
}
.score {
text-align: center;
width: 1.5em;
font-size: large;
display: inline-block;
}
.score_0 {
background-color: #FF0000;
}
.score_1 {
background-color: #FF5300;
}
.score_2 {
background-color: #FF8100;
}
.score_3 {
background-color: #FFA100;
}
.score_4 {
background-color: #FFBB00;
}
.score_5 {
background-color: #FFD300;
}
.score_6 {
background-color: #FFEC00;
}
.score_7 {
background-color: #E9FB00;
}
.score_8 {
background-color: #B1F100;
}
.score_9 {
background-color: #74E600;
}
.score_10 {
background-color: #00CC00;
}

View File

@@ -0,0 +1,455 @@
@import "common";
$issue-width: 85px;
$issue-height: 80px;
$issue-margin: 5px;
$issue-padding: 5px;
$swimlane-width: $issue-width + 2 * ($issue-margin + $issue-padding + 1px);
#content {
overflow: visible;
}
#taskboard {
position: relative;
margin-bottom: $padding-side;
table {
border-collapse: separate;
margin-left: $padding-side;
margin-right: $padding-side;
}
.issue .subject {
white-space: normal;
}
}
#impediments {
padding-top: 30px;
}
#assigned_to_id_options {
display: none;
}
#col_width {
margin-left: 5px;
input {
text-align: right;
width: 40px;
}
}
/**
* swimlane class is used by:
* - #board_header
* - .board
*
* Also use by the Column Width preference to determine the unit width of the
* swimlanes. See RB.Taskboard.initialize()
*/
.swimlane {
padding: 5px;
width: $swimlane-width;
min-width: $swimlane-width;
}
/* status labels */
#board_header {
position: absolute;
margin-bottom: 0;
margin-right: 10px;
z-index: 200;
background-color: $header-bg;
border: 1px solid darken($header-bg, 5%);
td {
height: 20px;
vertical-align: middle;
color: $header-text;
background-color: $header-bg;
border-right: 1px dotted mix($header-bg, $header-text, 70%);
text-align: center;
font-weight: bold;
&:last-child {
border-right: none;
}
}
}
.board {
color: $text-color;
background-color: $body-bg;
border: 1px solid $gray;
border-top: 0 none;
td {
border-right: 1px dotted $table-border-color;
border-bottom: 1px dotted $table-border-color;
vertical-align: top;
&:last-child {
border-right: none;
}
}
tr:last-child td {
border-bottom: none;
}
.add_new {
display: inline-block;
vertical-align: middle;
&:hover {
cursor: pointer;
background-color: #ffffcc;
}
}
}
#board_header,
.board {
td:first-child {
padding: $issue-padding;
width: (($issue-width + $issue-margin + $issue-padding) * 2);
min-width: (($issue-width + $issue-margin + $issue-padding) * 2);
}
}
.story,
.label_sprint_impediments {
display: block;
float: left;
width: $issue-width * 2;
min-height: $issue-height;
margin: $issue-margin;
padding: $issue-padding;
background-color: $tooltip-bg;
border: 0 none;
border-radius: $border-radius-large;
font-size: $font-size-small-px;
position: relative;
}
.story {
color: $gray-darker;
.id {
margin-bottom: 5px;
padding: 0 3px;
overflow: hidden;
line-height: 16px;
background-color: $body-bg;
border-radius: $border-radius-base;
font-size: .9em;
opacity: .8;
a,
.remaininghours {
float: right;
margin-left: 4px;
font-weight: normal;
}
a {
font-size: $font-size-small-px;
color: $gray-darkest;
font-weight: bold;
}
.assignee {
font-size: 9px;
}
}
.subject {
height: $issue-height * .6;
overflow: hidden;
line-height: 1.3;
padding: 2px;
}
&.closed .subject {
text-decoration: line-through;
}
.project {
text-align: left;
}
.id .v {
display: none;
}
.story_points.editable {
position: absolute;
bottom: -$issue-padding;
right: -$issue-padding;
width: 36px;
height: 36px;
line-height: 36px;
text-align: center;
font-weight: bold;
color: $brand-text;
background-color: $brand-warning;
border: 2px solid $body-bg;
border-radius: 50%;
&:empty {
display: none;
}
}
}
/* item styles used by .task and .impediment */
#taskboard {
.issue,
.placeholder {
display: block;
float: left;
position: relative;
width: $issue-width;
height: $issue-height;
margin: $issue-margin;
padding: $issue-padding;
border: 0 none;
cursor: move;
color: $gray-darker;
background-color: $gray-lighter;
border-radius: $border-radius-large;
font-size: 10px;
line-height: 1.3;
}
.placeholder {
background-color: $tooltip-bg;
border: 1px dashed $tooltip-border;
height: 78px;
width: 83px;
}
}
.issue {
.id {
margin-bottom: 5px;
padding: 0 3px;
overflow: hidden;
line-height: 16px;
background-color: $body-bg;
border-radius: $border-radius-base;
text-align: right;
font-size: $font-size-small-px;
font-weight: bold;
opacity: .8;
.v {
display: none;
}
a {
color: $gray-darkest;
}
}
.editable:hover {
background-color: transparent;
}
.subject.editable {
height: $issue-height * .5;
overflow: hidden;
padding: 2px;
}
&.closed .subject.editable {
text-decoration: line-through;
}
.assigned_to_id {
&.editable {
font-size: 9px;
height: 10px;
margin-top: 2px;
overflow: hidden;
padding: 2px;
padding-top: 0;
width: 81px;
white-space: nowrap;
}
.v {
display: none;
}
}
.priority_id {
&.editable {
border-radius: 15px;
border: 2px solid #FFFFFF;
background-color: #0000ee;
bottom: 10px;
color: #FFFFFF;
font-size: 9px;
height: 13px;
padding-left: 5px;
padding-right: 5px;
position: absolute;
right: -5px;
}
.v {
display: none;
}
}
.remaining_hours.editable {
border-radius: 15px;
border: 2px solid #FFFFFF;
background-color: #EE0000;
bottom: -5px;
color: #FFFFFF;
font-size: 9px;
height: 13px;
padding-left: 5px;
padding-right: 5px;
position: absolute;
right: -5px;
}
.blocks,
.remaining_hours.editable:empty {
display: none;
}
.indicator {
border-radius: 12px;
background-color: #FFFFFF;
background-position: center;
background-repeat: no-repeat;
border: 2px solid #000000;
display: none;
height: 16px;
left: 36px;
padding: 2px;
position: absolute;
top: 38px;
width: 16px;
}
&.saving .indicator {
background-image: url('images/indicator.gif');
display: block;
}
&.error .indicator {
background-image: url('images/warning.png');
background-position: 2px 0;
border-color: #CC0000;
display: block;
}
.editors {
display: none;
}
}
/* dialog */
.rb_editor_dialog.ui-dialog {
.ui-dialog-titlebar-close {
display: none;
}
.ui-widget-header {
background: none;
background-color: #FFFFFF;
opacity: 0.5;
}
.ui-dialog-title {
float: right;
margin-right: 0;
}
&.ui-widget-content {
box-shadow: 2px 2px 5px #777777;
background: none;
border: none;
}
.ui-dialog-buttonpane.ui-widget-content {
background: none;
background-color: none;
border: none;
}
}
/* item editor */
.rb_editor {
label {
display: block;
font-size: 11px;
text-transform: capitalize;
width: 100%;
}
.editor {
font-size: 11px;
margin-bottom: 10px;
width: 100%;
}
.subject {
height: 65px;
width: 272px;
}
.description {
height: 80px;
width: 272px;
}
.remaining_hours,
.time_entry_hours,
.time_entry_user_id,
.time_entry_spent_on,
.blocks {
width: 268px;
}
.time_entry_comments {
height: 30px;
width: 268px;
}
}
/* others */
#impediment_template, #task_template {
display: none;
}
#preloader {
left: -500px;
position: absolute;
}
#spinner {
background-image: url('images/indicator.gif');
}
#warning {
background-image: url('images/warning.png');
}
#ui-datepicker-div {
display: none;
}

BIN
screenshots/calendar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

68042
screenshots/hg_redmine.sql Normal file

File diff suppressed because one or more lines are too long

BIN
screenshots/issue-page.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
screenshots/issues-list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
screenshots/new-issue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
screenshots/thumbnail.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long