diff --git a/README.md b/README.md index c0764a85..f03b3420 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,12 @@ Setup initial environment Install requirements: -.. code-block:: console - - sudo npm install -g gulp - npm install - sudo npm install -g bower - bower install - gulp +```bash +sudo npm install -g gulp +npm install +sudo npm install -g bower +bower install +gulp +``` And go in your browser to: http://localhost:8080/ diff --git a/app/fonts/taiga.eot b/app/fonts/taiga.eot index 7c1775dd..74a60d0f 100644 Binary files a/app/fonts/taiga.eot and b/app/fonts/taiga.eot differ diff --git a/app/fonts/taiga.svg b/app/fonts/taiga.svg index 07f72bc7..ee2f5202 100644 --- a/app/fonts/taiga.svg +++ b/app/fonts/taiga.svg @@ -25,4 +25,6 @@ + + diff --git a/app/fonts/taiga.ttf b/app/fonts/taiga.ttf index b6400351..0dfcb41e 100644 Binary files a/app/fonts/taiga.ttf and b/app/fonts/taiga.ttf differ diff --git a/app/fonts/taiga.woff b/app/fonts/taiga.woff index 9203115f..9b870813 100644 Binary files a/app/fonts/taiga.woff and b/app/fonts/taiga.woff differ diff --git a/app/search.jade b/app/search.jade new file mode 100644 index 00000000..43de05f0 --- /dev/null +++ b/app/search.jade @@ -0,0 +1,13 @@ +extends layout + +block head + title Taiga Project management web application with scrum in mind! + +block content + sidebar.menu-secondary.sidebar + include views/modules/search-in + + section.main.search-result + include views/components/mainTitle + include views/modules/search-filter + include views/modules/search-result-table \ No newline at end of file diff --git a/app/styles/components/taskboard-task.scss b/app/styles/components/taskboard-task.scss new file mode 100644 index 00000000..c5369db4 --- /dev/null +++ b/app/styles/components/taskboard-task.scss @@ -0,0 +1,72 @@ +.taskboard-task { + background: $postit; + margin-bottom: 1rem; + position: relative; + .taskboard-tagline { + @include table-flex(); + } + .taskboard-tag { + @include table-flex-child(1, 0, 0, 0); + background: $postit-hover; //Fallback + height: .3rem; + } + .taskboard-task-inner { + @include table-flex(); + padding: 1rem .5rem; + } + .avatar { + @include table-flex-child($flex-basis: 50px); + a { + @extend %small; + text-align: center; + } + img { + margin: 0 auto; + } + figcaption { + display: block; + overflow: hidden; + position: relative; + text-overflow: ellipsis; + top: 4px; + white-space: nowrap; + width: 50px; + } + } + .task-num { + color: $postit-hover; + margin-right: .5em; + } + .taskboard-text { + @include table-flex-child($flex-grow: 10, $flex-basis: 50px, $width: 100px); + } + .icon-edit, + .icon-drag-h { + @extend %large; + bottom: .2rem; + color: $postit-hover; + display: none; + position: absolute; + &:hover { + @include transition(color, .3s, linear); + color: darken($postit-hover, 15%); + } + } + .icon-edit { + right: .5rem; + } + .icon-drag-h { + @extend %xlarge; + right: 45%; + } + &:hover { + .icon-edit, + .icon-drag-h { + display: block; + } + } +} + +.task-drag { + @include box-shadow(); +} diff --git a/app/styles/dependencies/colors.scss b/app/styles/dependencies/colors.scss index 1a039f3f..952649ad 100755 --- a/app/styles/dependencies/colors.scss +++ b/app/styles/dependencies/colors.scss @@ -21,3 +21,6 @@ $button-green: #699b05; $button-green-hover: #9dce0a; $button-gray: #585858; $button-gray-hover: #879b89; + +$postit: #fff0c5; +$postit-hover: #e3d6b0; diff --git a/app/styles/dependencies/helpers.scss b/app/styles/dependencies/helpers.scss index 1561a7bb..667f4ab3 100644 --- a/app/styles/dependencies/helpers.scss +++ b/app/styles/dependencies/helpers.scss @@ -3,6 +3,23 @@ box-sizing: border-box; } +//Flexbox FTW +%table-flex { + align-content: stretch; + align-items: stretch; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; +} + +%table-flex-child { + flex-basis: 300px; + flex-grow: 1; + flex-shrink: 0; + width: 300px; +} + // #Reset & Basics (Inspired by E. Meyers) //================================================== a, diff --git a/app/styles/dependencies/mixins.scss b/app/styles/dependencies/mixins.scss index ff163963..be90c214 100644 --- a/app/styles/dependencies/mixins.scss +++ b/app/styles/dependencies/mixins.scss @@ -8,3 +8,27 @@ @mixin background-opacity($color: $white, $opacity: .3) { background: rgba($color, $opacity); } + +// Table Flex - http://devbryce.com/site/flexbox/ +@mixin table-flex() { + align-content: stretch; + align-items: stretch; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; +} + +@mixin table-flex-child($flex-grow: 1, $flex-basis: 300px, $flex-shrink: 0, $width:'') { + flex-basis: $flex-basis; + flex-grow: $flex-grow; + flex-shrink: $flex-shrink; + width: $flex-basis; + @if #{$width} != null { + width: #{$width}; + } +} + +@mixin box-shadow($h-shadow: 1px, $v-shadow: 1px, $blur: 15px, $spread: 6px, $color: rgba(0, 0, 0, .1)) { + box-shadow: $h-shadow $v-shadow $blur $spread $color; +} diff --git a/app/styles/dependencies/typography.scss b/app/styles/dependencies/typography.scss index 37a91b5d..a3cfa641 100755 --- a/app/styles/dependencies/typography.scss +++ b/app/styles/dependencies/typography.scss @@ -168,3 +168,9 @@ a:visited { .icon-iocaine:before { content: 'r'; } +.icon-drag-h:before { + content: 's'; +} +.icon-drag-v:before { + content: 't'; +} diff --git a/app/styles/main.scss b/app/styles/main.scss index ee2b8b27..a4d2d3bf 100755 --- a/app/styles/main.scss +++ b/app/styles/main.scss @@ -23,6 +23,7 @@ $prefix-for-spec: true; @import 'components/popover'; @import 'components/tag'; @import 'components/filter'; +@import 'components/taskboard-task'; //Layout @import 'layout/base'; @@ -38,6 +39,8 @@ $prefix-for-spec: true; @import 'modules/filters'; @import 'modules/lightbox'; @import 'modules/taskboard-table'; +@import 'modules/search-filter'; +@import 'modules/search-result-table'; // Responsive @import 'responsive/mobile'; diff --git a/app/styles/modules/backlog-table.scss b/app/styles/modules/backlog-table.scss index 6a5d0096..ac605440 100644 --- a/app/styles/modules/backlog-table.scss +++ b/app/styles/modules/backlog-table.scss @@ -13,7 +13,7 @@ flex-direction: row; flex-wrap: nowrap; justify-content: flex-start; - padding: .5em 0; + padding: 1rem 0 1rem 1rem; text-align: left; width: 100%; @for $i from 1 through 8 { diff --git a/app/styles/modules/search-filter.scss b/app/styles/modules/search-filter.scss new file mode 100644 index 00000000..f7c4db00 --- /dev/null +++ b/app/styles/modules/search-filter.scss @@ -0,0 +1,24 @@ +.search-filter { + ul { + border-bottom: 3px solid $gray-light; + display: flex; + padding-bottom: .5rem; + } + li { + margin-right: 1rem; + } + a { + @extend %large; + font-family: 'ostrichSans'; + opacity: .2; + &.active, + &:hover { + @include transition (opacity .3s linear); + color: $blackish; + opacity: 1; + } + } + .icon { + margin-right: .4rem; + } +} diff --git a/app/styles/modules/search-result-table.scss b/app/styles/modules/search-result-table.scss new file mode 100644 index 00000000..a0140714 --- /dev/null +++ b/app/styles/modules/search-result-table.scss @@ -0,0 +1,72 @@ +.search-result-table { + align-content: stretch; + align-items: center; + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + width: 100%; + .row { + align-content: stretch; + align-items: stretch; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + padding: 1rem 0 1rem 1rem; + text-align: left; + width: 100%; + @for $i from 1 through 8 { + .width-#{$i} { + flex-basis: 50px; + flex-grow: $i; + flex-shrink: 0; + } + } + &:hover { + background: lighten($green-taiga, 60%); + @include transition (background .2s ease-in); + } + } + .row-selected { + background: lighten($green-taiga, 60%); + @include transition (background .2s ease-in); + } + .user-story-name { + flex-basis: 500px; + input { + vertical-align: top; + } + span { + display: inline-block; + max-width: 70%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .icon { + @extend %medium; + color: $gray-light; + &:hover { + color: $grayer; + @include transition (color .3s linear); + } + } + } + .title { + @extend %medium; + border-bottom: 1px solid $gray-light; + font-family: 'DroidSans-Bold'; + &:hover { + background: transparent; + } + } + .table-main { + @extend %small; + border-bottom: 1px solid $gray-light; + } + .status, + .points { + position: relative; + } +} diff --git a/app/styles/modules/taskboard-table.scss b/app/styles/modules/taskboard-table.scss index 4c5c85b6..e75994bf 100644 --- a/app/styles/modules/taskboard-table.scss +++ b/app/styles/modules/taskboard-table.scss @@ -1,19 +1,3 @@ -%table-flex { - align-content: stretch; - align-items: stretch; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; -} - -%table-flex-child { - flex-basis: 300px; - flex-grow: 1; - flex-shrink: 0; - width: 300px; -} - .taskboard-table { overflow: hidden; width: 100%; diff --git a/app/views/components/taskboard-task.jade b/app/views/components/taskboard-task.jade new file mode 100644 index 00000000..0451cd19 --- /dev/null +++ b/app/views/components/taskboard-task.jade @@ -0,0 +1,14 @@ +div.taskboard-task + div.taskboard-tagline + - for(var y = 0; y < 3; y++) + a.taskboard-tag(href="", title="tasboard-tag") + div.taskboard-task-inner + figure.avatar + a(href="", title="UserName") + img.avatar(src="http://thecodeplayer.com/u/uifaces/12.jpg", alt="username") + figcaption Username + p.taskboard-text + span.task-num 125 + span.task-name Crear usuarios que no sepan que tienen que darse de alta para darse de baja y crear contenido bloqueado o no en la plataforma + a.icon.icon-edit(href="", title="Edit") + a.icon.icon-drag-h(href="", title="Drag&Drop") diff --git a/app/views/modules/search-filter.jade b/app/views/modules/search-filter.jade new file mode 100644 index 00000000..a1e9dd57 --- /dev/null +++ b/app/views/modules/search-filter.jade @@ -0,0 +1,31 @@ +section.search-filter + ul + li + a.active(href="#") + span.icon.icon-bulk + | 20 User Stories + + li + a(href="#") + span.icon.icon-issues + | 3 Issues + + li + a(href="#") + span.icon.icon-bulk + | 23 Task + + li + a(href="#") + span.icon.icon-wiki + | 2 Wiki pages + + li + a(href="#") + span.icon.icon-edit + | 12 Documents + + li + a(href="#") + span.icon.icon-edit + | 3 Users \ No newline at end of file diff --git a/app/views/modules/search-in.jade b/app/views/modules/search-in.jade new file mode 100644 index 00000000..5caa8f5f --- /dev/null +++ b/app/views/modules/search-in.jade @@ -0,0 +1,6 @@ +section.search + header + form + fieldset + input(type="text", placeholder="Search in...") + a.icon.icon-search(href="", title="search") diff --git a/app/views/modules/search-result-table.jade b/app/views/modules/search-result-table.jade new file mode 100644 index 00000000..5ab6d748 --- /dev/null +++ b/app/views/modules/search-result-table.jade @@ -0,0 +1,14 @@ +section.search-result-table + div.row.title + div.user-stories.width-4 User Stories + div.status.width-2 Status + div.points.width-1 Points + div.points.width-1 Sprints + - for (var x = 0; x < 50; x++) + div.row.table-main + div.user-stories.width-4 + div.user-story-name + a(href="") Crear el perfil de usuario Senior en el admin + div.status.width-2 Status + div.points.width-1 12 + div.points.width-1 54 \ No newline at end of file diff --git a/app/views/modules/taskboard-table.jade b/app/views/modules/taskboard-table.jade index c0063d98..efcabd6f 100644 --- a/app/views/modules/taskboard-table.jade +++ b/app/views/modules/taskboard-table.jade @@ -29,4 +29,4 @@ div.taskboard-table div.taskboard_task-playground.task-column - for(var x = 0; x < 3; x++) div.task-row - //- Include tasks + include ../components/taskboard-task diff --git a/csslintrc.json b/csslintrc.json index 39936c38..0616cb74 100644 --- a/csslintrc.json +++ b/csslintrc.json @@ -18,5 +18,6 @@ "unqualified-attributes": false, "regex-selectors": false, "floats": false, - "fallback-colors": false + "fallback-colors": false, + "adjoining-classes": false } diff --git a/gulpfile.js b/gulpfile.js index 67155945..4bb24597 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,7 +11,8 @@ var gulp = require('gulp'), notify = require("gulp-notify"), connect = require('gulp-connect'), scsslint = require('gulp-scss-lint'), - newer = require('gulp-newer') + newer = require('gulp-newer'), + plumber = require('gulp-plumber'), cache = require('gulp-cached'); var paths = { @@ -28,9 +29,7 @@ var paths = { gulp.task('jade', function() { return gulp.src(paths.jade) - .on('error', function(err) { - console.log(err); - }) + .pipe(plumber()) .pipe(jade({ pretty: true })) diff --git a/package.json b/package.json index 8545bf31..57bac52d 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "gulp-minify-html": "^0.1.3", "gulp-newer": "^0.3.0", "gulp-notify": "^1.2.5", + "gulp-plumber": "^0.6.2", "gulp-ruby-sass": "^0.4.3", "gulp-scss-lint": "0.0.6", "gulp-styledocco": "0.0.1",