From 96dda0b7060e9369d7a3812f61bc8b78f4eddef0 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 31 Jul 2014 14:37:59 +0200 Subject: [PATCH] project navigation --- app/coffee/modules/nav.coffee | 41 +++++++++++++++++--- app/coffee/modules/project.coffee | 8 ++-- app/partials/views/modules/projects-nav.jade | 7 +++- app/styles/layout/base.scss | 16 ++++++++ app/styles/modules/common/projects-nav.scss | 25 ++++++++++++ 5 files changed, 87 insertions(+), 10 deletions(-) diff --git a/app/coffee/modules/nav.coffee b/app/coffee/modules/nav.coffee index 322d0cc7..2e1ad658 100644 --- a/app/coffee/modules/nav.coffee +++ b/app/coffee/modules/nav.coffee @@ -28,7 +28,6 @@ module = angular.module("taigaNavMenu", []) ############################################################################# ## Projects Navigation ############################################################################# - class ProjectsNavigationController extends taiga.Controller @.$inject = ["$scope", "$tgResources"] @@ -44,15 +43,45 @@ class ProjectsNavigationController extends taiga.Controller return projects -ProjectsNavigationDirective = -> +ProjectsNavigationDirective = ($rootscope) -> + overlay = $(".projects-nav-overlay") + loadingStart = 0 + hideMenu = () -> + if overlay.is(':visible') + difftime = new Date().getTime() - loadingStart + timeout = 0 + + if (difftime < 500) + timeout = 500 - timeout + + setTimeout ( -> + overlay.one 'webkitTransitionEnd transitionend transitionEnd', () -> + overlay.hide() + + $(document.body) + .removeClass("loading-project open-projects-nav") + ), timeout + link = ($scope, $el, $attrs, $ctrl) -> - body = angular.element("body") + $rootscope.$on("project:loaded", hideMenu) + + overlay.on 'click', () -> + hideMenu() $scope.$on "nav:projects-list:open", -> - body.toggleClass("open-projects-nav") + if !$(document.body).hasClass("open-projects-nav") + overlay.show() + + #animation hack + setTimeout ( -> + $(document.body).toggleClass("open-projects-nav") + ), 0 $el.on "click", ".projects-list > li > a", (event) -> - body.removeClass("open-projects-nav") + $(document.body) + .addClass('loading-project') + + loadingStart = new Date().getTime() return { link: link @@ -60,7 +89,7 @@ ProjectsNavigationDirective = -> } -module.directive("tgProjectsNav", ProjectsNavigationDirective) +module.directive("tgProjectsNav", ["$rootScope", ProjectsNavigationDirective]) ############################################################################# diff --git a/app/coffee/modules/project.coffee b/app/coffee/modules/project.coffee index 08811184..4ef7e1f9 100644 --- a/app/coffee/modules/project.coffee +++ b/app/coffee/modules/project.coffee @@ -18,9 +18,9 @@ module.controller("ProjectsController", ProjectsController) class ProjectController extends taiga.Controller - @.$inject = ["$scope", "$tgResources", "$tgRepo", "$routeParams", "$q"] + @.$inject = ["$scope", "$tgResources", "$tgRepo", "$routeParams", "$q", "$rootScope"] - constructor: (@scope, @rs, @repo, @params, @q) -> + constructor: (@scope, @rs, @repo, @params, @q, @rootscope) -> @scope.hideMenu = false @.loadInitialData() @@ -30,7 +30,9 @@ class ProjectController extends taiga.Controller @scope.projectId = data.project return data - return promise.then(=> @.loadPageData()) + return promise + .then(=> @.loadPageData()) + .then(=> @rootscope.$broadcast("project:loaded")) loadPageData: -> return @q.all([ diff --git a/app/partials/views/modules/projects-nav.jade b/app/partials/views/modules/projects-nav.jade index 890278eb..2e873228 100644 --- a/app/partials/views/modules/projects-nav.jade +++ b/app/partials/views/modules/projects-nav.jade @@ -1,3 +1,8 @@ +.projects-nav-overlay + div + img(src="/images/logo.png", alt="TAIGA") + p Loading project... + nav.projects-nav(tg-projects-nav) h1 Your projects form @@ -8,5 +13,5 @@ nav.projects-nav(tg-projects-nav) div.projects-pagination(tg-projects-pagination, active="projects.length && !projectsSearch.$.length") ul.projects-list li(ng-repeat="project in projects|filter:projectsSearch:strict track by project.id") - a(href="", tg-bo-html="project.name", tg-nav="project-backlog:project=project.slug") + a(href="", tg-bo-html="project.name", tg-nav="project:project=project.slug") span.icon.icon-arrow-right diff --git a/app/styles/layout/base.scss b/app/styles/layout/base.scss index 5abbee8c..f841a135 100644 --- a/app/styles/layout/base.scss +++ b/app/styles/layout/base.scss @@ -45,6 +45,22 @@ body { @include transform(translate3d(300px, 0, 0)); @include transition (transform 1s ease); } + .projects-nav-overlay { + @include transform(translate3d(300px, 0, 0)); + @include transition (all 1s ease); + opacity: .7; + } + } + &.loading-project { + .projects-nav-overlay { + @include transition (opacity 1s ease); + opacity: 1; + overflow: hidden; + div { + @include transition (opacity 1s ease); + opacity: 1; + } + } } } diff --git a/app/styles/modules/common/projects-nav.scss b/app/styles/modules/common/projects-nav.scss index 614d425c..f4d99ce2 100644 --- a/app/styles/modules/common/projects-nav.scss +++ b/app/styles/modules/common/projects-nav.scss @@ -76,3 +76,28 @@ border-bottom: 2px solid $gray; } } + +.projects-nav-overlay { + @include transition (all 1s ease); + background-color: $black; + bottom: 0; + display: none; + left: 0; + opacity: 0; + position: fixed; + right: 0; + top: 0; + width: 100%; + z-index: 99999; + div { + margin: 10% auto; + opacity: 0; + text-align: center; + width: 500px; + } + p { + @extend %large; + color: $whitish; + padding-top: 20px; + } +}