From 032aeb22807a857a987efd3d31360091e840b1e2 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 17 Apr 2015 09:53:31 +0200 Subject: [PATCH] Refactoring navbar --- app/coffee/app.coffee | 7 +++- app/coffee/modules/base.coffee | 1 + app/coffee/modules/feedback.coffee | 4 +- app/coffee/modules/projects/lightboxes.coffee | 10 ++++- app/coffee/modules/projects/main.coffee | 9 ++++- app/coffee/modules/resources.coffee | 1 + app/coffee/modules/resources/projects.coffee | 6 ++- app/index.jade | 5 +-- .../dropdown-organization-list.jade | 3 ++ .../dropdown-project-list.directive.coffee | 14 +++++++ .../dropdown-project-list.jade | 12 ++++++ .../dropdown-user.directive.coffee | 13 ++++++ .../dropdown-user/dropdown-user.jade | 24 +++++++++++ .../navigation-bar.directive.coffee | 10 +++++ .../navigation-bar/navigation-bar.jade | 17 ++++++++ .../navigation-bar.module.coffee | 1 + .../navigation-bar/navigation-bar.scss} | 0 .../projects/listing/listing.directive.coffee | 40 +++++++++++++++++++ app/modules/projects/listing/listing.jade | 11 +++++ app/modules/projects/projects.jade | 1 + app/modules/projects/projects.module.coffee | 1 + .../{project/projects.jade => home/home.jade} | 0 .../navigation-bar/dropdown-project-list.jade | 7 ---- .../modules/navigation-bar/dropdown-user.jade | 18 --------- .../modules/navigation-bar/navbar.jade | 24 ----------- .../includes/modules/projects-nav.jade | 8 ---- .../wizard-create-project.jade | 0 27 files changed, 179 insertions(+), 68 deletions(-) rename app/{partials/includes/modules/navigation-bar => modules/navigation-bar/dropdown-organization-list}/dropdown-organization-list.jade (78%) create mode 100644 app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee create mode 100644 app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade create mode 100644 app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee create mode 100644 app/modules/navigation-bar/dropdown-user/dropdown-user.jade create mode 100644 app/modules/navigation-bar/navigation-bar.directive.coffee create mode 100644 app/modules/navigation-bar/navigation-bar.jade create mode 100644 app/modules/navigation-bar/navigation-bar.module.coffee rename app/{styles/modules/common/navbar.scss => modules/navigation-bar/navigation-bar.scss} (100%) create mode 100644 app/modules/projects/listing/listing.directive.coffee create mode 100644 app/modules/projects/listing/listing.jade create mode 100644 app/modules/projects/projects.jade create mode 100644 app/modules/projects/projects.module.coffee rename app/partials/{project/projects.jade => home/home.jade} (100%) delete mode 100644 app/partials/includes/modules/navigation-bar/dropdown-project-list.jade delete mode 100644 app/partials/includes/modules/navigation-bar/dropdown-user.jade delete mode 100644 app/partials/includes/modules/navigation-bar/navbar.jade delete mode 100644 app/partials/includes/modules/projects-nav.jade rename app/partials/{includes/modules => project}/wizard-create-project.jade (100%) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 66ecd527..373010d9 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -39,7 +39,10 @@ taiga.sessionId = taiga.generateUniqueSessionIdentifier() configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, tgLoaderProvider, $compileProvider, $translateProvider) -> $routeProvider.when("/", - {templateUrl: "project/projects.html", resolve: {loader: tgLoaderProvider.add()}}) + {templateUrl: "home/home.html", resolve: {loader: tgLoaderProvider.add()}}) + + $routeProvider.when("/projects/", + {templateUrl: "projects/projects.html", resolve: {loader: tgLoaderProvider.add()}}) $routeProvider.when("/project/:pslug/", {templateUrl: "project/project.html"}) @@ -317,6 +320,8 @@ modules = [ "taigaEvents", # Specific Modules + "taigaNavigationBar", + "taigaProjects", "taigaRelatedTasks", "taigaBacklog", "taigaTaskboard", diff --git a/app/coffee/modules/base.coffee b/app/coffee/modules/base.coffee index eb4cb998..5aef4043 100644 --- a/app/coffee/modules/base.coffee +++ b/app/coffee/modules/base.coffee @@ -44,6 +44,7 @@ module.directive("tgMain", ["$rootScope", "$window", TaigaMainDirective]) urls = { "home": "/" + "projects": "/projects" "error": "/error" "not-found": "/not-found" "permission-denied": "/permission-denied" diff --git a/app/coffee/modules/feedback.coffee b/app/coffee/modules/feedback.coffee index 403b46da..79ba422f 100644 --- a/app/coffee/modules/feedback.coffee +++ b/app/coffee/modules/feedback.coffee @@ -57,9 +57,7 @@ FeedbackDirective = ($lightboxService, $repo, $confirm, $loading)-> $el.on "submit", "form", submit $scope.$on "feedback:show", -> - $scope.$apply -> - $scope.feedback = {} - + $scope.feedback = {} $lightboxService.open($el) $el.find("textarea").focus() diff --git a/app/coffee/modules/projects/lightboxes.coffee b/app/coffee/modules/projects/lightboxes.coffee index e83d328b..bb595d72 100644 --- a/app/coffee/modules/projects/lightboxes.coffee +++ b/app/coffee/modules/projects/lightboxes.coffee @@ -125,7 +125,15 @@ CreateProject = ($rootscope, $repo, $confirm, $location, $navurls, $rs, $project event.preventDefault() lightboxService.close($el) - return {link:link} + + directive = { + link: link, + templateUrl: "project/wizard-create-project.html" + scope: {} + } + + return directive + module.directive("tgLbCreateProject", ["$rootScope", "$tgRepo", "$tgConfirm", "$location", "$tgNavUrls", "$tgResources", "$projectUrl", "$tgLoading", "lightboxService", "$cacheFactory", "$translate", CreateProject]) diff --git a/app/coffee/modules/projects/main.coffee b/app/coffee/modules/projects/main.coffee index 3dc3b6ca..006c4ca2 100644 --- a/app/coffee/modules/projects/main.coffee +++ b/app/coffee/modules/projects/main.coffee @@ -34,10 +34,11 @@ class ProjectsController extends taiga.Controller "$tgLocation", "$appTitle", "$projectUrl", + "$tgConfig", "tgLoader" ] - constructor: (@scope, @q, @rs, @rootscope, @navUrls, @auth, @location, @appTitle, @projectUrl, + constructor: (@scope, @q, @rs, @rootscope, @navUrls, @auth, @location, @appTitle, @projectUrl, @config tgLoader) -> @appTitle.set("Projects") @@ -72,6 +73,12 @@ class ProjectsController extends taiga.Controller @auth.logout() @location.path(@navUrls.resolve("login")) + isFeedbackEnabled: -> + return @config.get("feedbackEnabled") + + sendFeedback: -> + @rootscope.$broadcast("feedback:show") + module.controller("ProjectsController", ProjectsController) diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index a3f05dbb..820d90a7 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -40,6 +40,7 @@ urls = { "stats": "/users/%s/stats" # User - Notification + "permissions": "/permissions" "notify-policies": "/notify-policies" # User - Storage diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index ad712d42..4381f10f 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -37,7 +37,7 @@ resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) -> return $repo.queryMany("projects") service.listByMember = (memberId) -> - params = {"member": memberId} + params = {"member": memberId, "user_order": 1} return $repo.queryMany("projects", params) service.templates = -> @@ -54,6 +54,10 @@ resourceProvider = ($config, $repo, $http, $urls, $auth, $q, $translate) -> service.stats = (projectId) -> return $repo.queryOneRaw("projects", "#{projectId}/stats") + service.bulkUpdateOrder = (bulkData) -> + url = $urls.resolve("bulk-update-projects-order") + return $http.post(url, bulkData) + service.regenerate_userstories_csv_uuid = (projectId) -> url = "#{$urls.resolve("projects")}/#{projectId}/regenerate_userstories_csv_uuid" return $http.post(url) diff --git a/app/index.jade b/app/index.jade index f994ae36..eae8020d 100644 --- a/app/index.jade +++ b/app/index.jade @@ -15,10 +15,7 @@ html(lang="en") //include partials/includes/modules/projects-nav include partials/includes/components/notification-message - include partials/includes/modules/navigation-bar/navbar - - //- the content of nav.menu is in coffe.modules.base TaigaMain directive - //nav.menu.hidden(tg-project-menu) + div(tg-navigation-bar) div.master(ng-view) diff --git a/app/partials/includes/modules/navigation-bar/dropdown-organization-list.jade b/app/modules/navigation-bar/dropdown-organization-list/dropdown-organization-list.jade similarity index 78% rename from app/partials/includes/modules/navigation-bar/dropdown-organization-list.jade rename to app/modules/navigation-bar/dropdown-organization-list/dropdown-organization-list.jade index 49b37952..91c5e2c2 100644 --- a/app/partials/includes/modules/navigation-bar/dropdown-organization-list.jade +++ b/app/modules/navigation-bar/dropdown-organization-list/dropdown-organization-list.jade @@ -1,3 +1,6 @@ +a(href="#", title="Organizations") + include ../../../svg/organizations.svg + div.navbar-dropdown.dropdown-organization-list ul - for (var x = 0; x < 4; x++) diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee new file mode 100644 index 00000000..cba847d0 --- /dev/null +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee @@ -0,0 +1,14 @@ +DropdownProjectListDirective = () -> + directive = { + templateUrl: "navigation-bar/dropdown-project-list/dropdown-project-list.html" + controller: "ProjectsController" + scope: {} + bindToController: true + controllerAs: "vm" + } + + return directive + + +angular.module("taigaNavigationBar").directive("tgDropdownProjectList", + DropdownProjectListDirective) diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade new file mode 100644 index 00000000..44e81163 --- /dev/null +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade @@ -0,0 +1,12 @@ +a(href="", title="Projects") + include ../../../svg/projects.svg + +div.navbar-dropdown.dropdown-project-list + ul + a(href="#", + ng-repeat="project in vm.projects.recents", + ng-bind="::project.name" + tg-nav="project:project=project.slug") + + a.see-more-projects-btn.button-gray(tg-nav="projects", href="#", title="See more projects") See more + a.create-project-btn.button-green(href="#", ng-click="vm.newProject()", title="Create project") Create project diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee new file mode 100644 index 00000000..7a3d0793 --- /dev/null +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee @@ -0,0 +1,13 @@ +DropdownUserDirective = () -> + directive = { + templateUrl: "navigation-bar/dropdown-user/dropdown-user.html" + controller: "ProjectsController" + scope: {} + bindToController: true + controllerAs: "vm" + } + + return directive + +angular.module("taigaNavigationBar").directive("tgDropdownUser", + DropdownUserDirective) diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.jade b/app/modules/navigation-bar/dropdown-user/dropdown-user.jade new file mode 100644 index 00000000..e3d086fd --- /dev/null +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.jade @@ -0,0 +1,24 @@ +a.user-avatar(href="#", title="{{ vm.user.full_name_display }}") + {{ vm.user.full_name_display }} + img(tg-bo-src="vm.user.photo", alt="{{ vm.user.full_name_display }}") + +div.navbar-dropdown.dropdown-user + ul + li + a(href="#", title="{{ user.fullname }} profile") View Profile + li + a(href="#", tg-nav="user-settings-user-profile", title="Edit your profile") Edit Profile + li + a(href="#", tg-nav="user-settings-user-change-password", title="Change password") Change password + //li + // a(href="#", title="Edit your organizations") Edit Organizations + //li + // a(href="#", title="Edit your settings") Settings + li + a(href="#", tg-nav="user-settings-mail-notifications", title="Edit your notifications") Notifications + li(ng-show="vm.isFeedbackEnabled()") + a(ng-click="vm.sendFeedback()", href="#", title="Send feedback") Feedback + li + a(href="https://taiga.io/support/", target="_blank", title="Go to support") Help + li + a(href="#", ng-click="vm.logout()", title="Logout") Logout diff --git a/app/modules/navigation-bar/navigation-bar.directive.coffee b/app/modules/navigation-bar/navigation-bar.directive.coffee new file mode 100644 index 00000000..1be03abf --- /dev/null +++ b/app/modules/navigation-bar/navigation-bar.directive.coffee @@ -0,0 +1,10 @@ +NavigationBarDirective = () -> + directive = { + templateUrl: "navigation-bar/navigation-bar.html" + } + + return directive + + +angular.module("taigaNavigationBar").directive("tgNavigationBar", + NavigationBarDirective) diff --git a/app/modules/navigation-bar/navigation-bar.jade b/app/modules/navigation-bar/navigation-bar.jade new file mode 100644 index 00000000..32614dc8 --- /dev/null +++ b/app/modules/navigation-bar/navigation-bar.jade @@ -0,0 +1,17 @@ +nav.navbar + div.nav-left + a.logo(href="#", tg-nav="home", title="Dashboard") + include ../../svg/logo.svg + + //a(href="#", title="Discover trending projects") Discover + a(href="https://taiga.io/support/", target="_blank", title="Taiga Support Page") Help + + div.nav-right + a(href="", tg-nav="home", title="Dashboard") + include ../../svg/dashboard.svg + + div.topnav-dropdown-wrapper(tg-dropdown-project-list) + //div.topnav-dropdown-wrapper(tg-dropdown-organization-list) + div.topnav-dropdown-wrapper(tg-dropdown-user) + +div.wizard-create-project(tg-lb-create-project) diff --git a/app/modules/navigation-bar/navigation-bar.module.coffee b/app/modules/navigation-bar/navigation-bar.module.coffee new file mode 100644 index 00000000..a6270366 --- /dev/null +++ b/app/modules/navigation-bar/navigation-bar.module.coffee @@ -0,0 +1 @@ +angular.module("taigaNavigationBar", []) diff --git a/app/styles/modules/common/navbar.scss b/app/modules/navigation-bar/navigation-bar.scss similarity index 100% rename from app/styles/modules/common/navbar.scss rename to app/modules/navigation-bar/navigation-bar.scss diff --git a/app/modules/projects/listing/listing.directive.coffee b/app/modules/projects/listing/listing.directive.coffee new file mode 100644 index 00000000..f05fded6 --- /dev/null +++ b/app/modules/projects/listing/listing.directive.coffee @@ -0,0 +1,40 @@ +ProjectsListingDirective = ($rs) -> + link = (scope, el, attrs, ctrl) -> + itemEl = null + tdom = el.find(".js-sortable") + + tdom.sortable({ + dropOnEmpty: true + revert: 200 + axis: "y" + }) + + tdom.on "sortstop", (event, ui) -> + itemEl = ui.item + project = itemEl.scope().project + index = itemEl.index() + scope.sorted_project_ids = _.without(scope.sorted_project_ids, project.id) + scope.sorted_project_ids.splice(index, 0, project.id) + sortData = [] + for value, index in scope.sorted_project_ids + sortData.push({"project_id": value, "order":index}) + + $rs.projects.bulkUpdateOrder(sortData) + + scope.$watch "vm.projects", (projects) => + if projects? + scope.sorted_project_ids = _.map(projects.all, (p) -> p.id) + + directive = { + templateUrl: "projects/listing/listing.html" + controller: "ProjectsController" + scope: {} + bindToController: true + controllerAs: "vm" + link: link + } + + return directive + +angular.module("taigaProjects").directive("tgProjectsListing", + ["$tgResources", ProjectsListingDirective]) diff --git a/app/modules/projects/listing/listing.jade b/app/modules/projects/listing/listing.jade new file mode 100644 index 00000000..0d59a79b --- /dev/null +++ b/app/modules/projects/listing/listing.jade @@ -0,0 +1,11 @@ +a.create-project-btn.button-green(href="#", ng-click="vm.newProject()", title="Create project") Create project + +h2 Esto es sortable y persiste en el servidor! ;) + +ul.js-sortable + li(tg-bind-scope, ng-repeat="project in vm.projects.all") + span Private: {{project.is_private}}, tags: {{project.tags}}, link: + + a(href="#", + ng-bind="::project.name" + tg-nav="project:project=project.slug") diff --git a/app/modules/projects/projects.jade b/app/modules/projects/projects.jade new file mode 100644 index 00000000..21f045f0 --- /dev/null +++ b/app/modules/projects/projects.jade @@ -0,0 +1 @@ +div(tg-projects-listing) diff --git a/app/modules/projects/projects.module.coffee b/app/modules/projects/projects.module.coffee new file mode 100644 index 00000000..4597eb7d --- /dev/null +++ b/app/modules/projects/projects.module.coffee @@ -0,0 +1 @@ +angular.module("taigaProjects", []) diff --git a/app/partials/project/projects.jade b/app/partials/home/home.jade similarity index 100% rename from app/partials/project/projects.jade rename to app/partials/home/home.jade diff --git a/app/partials/includes/modules/navigation-bar/dropdown-project-list.jade b/app/partials/includes/modules/navigation-bar/dropdown-project-list.jade deleted file mode 100644 index e805759a..00000000 --- a/app/partials/includes/modules/navigation-bar/dropdown-project-list.jade +++ /dev/null @@ -1,7 +0,0 @@ -div.navbar-dropdown.dropdown-project-list - ul - - for (var x = 0; x < 9; x++) - li - a(href="#", title="{{ project.title }}") Project 1 - a.see-more-projects-btn.button-gray(href="#", title="See more projects") See more - a.create-project-btn.button-green(href="#", title="Create project") Create project diff --git a/app/partials/includes/modules/navigation-bar/dropdown-user.jade b/app/partials/includes/modules/navigation-bar/dropdown-user.jade deleted file mode 100644 index 49d132f6..00000000 --- a/app/partials/includes/modules/navigation-bar/dropdown-user.jade +++ /dev/null @@ -1,18 +0,0 @@ -div.navbar-dropdown.dropdown-user - ul - li - a(href="#", title="{{ user.fullname }} profile") View Profile - li - a(href="#", tg-nav="user-settings-user-profile", title="Edit your profile") Edit Profile - li - a(href="#", title="Edit your organizations") Edit Organizations - li - a(href="#", title="Edit your settings") Settings - li - a(href="#", tg-nav="user-settings-mail-notifications", title="Edit your notifications") Notifications - li - a(href="#", title="Send feedback") Feedback - li - a(href="#", title="Go to support") Help - li - a(href="#", title="Logout") Logout diff --git a/app/partials/includes/modules/navigation-bar/navbar.jade b/app/partials/includes/modules/navigation-bar/navbar.jade deleted file mode 100644 index d89699d2..00000000 --- a/app/partials/includes/modules/navigation-bar/navbar.jade +++ /dev/null @@ -1,24 +0,0 @@ -nav.navbar - div.nav-left - a.logo(href="#", title="Dashboard") - include ../../../../svg/logo.svg - a(href="#", title="Discover trending projects") Discover - a(href="#", title="Taiga Support Page") Help - div.nav-right - a(href="", title="Dashboard") - include ../../../../svg/dashboard.svg - div.topnav-dropdown-wrapper - a(href="", title="Projects") - include ../../../../svg/projects.svg - include dropdown-project-list - - div.topnav-dropdown-wrapper - a(href="#", title="Organizations") - include ../../../../svg/organizations.svg - include dropdown-organization-list - - div.topnav-dropdown-wrapper - a.user-avatar(href="#", title="{{ user.fullname }} profile") - span Sebastián Sanchís - img(src="https://s3.amazonaws.com/uifaces/faces/twitter/brad_frost/128.jpg", alt="{{ user.fullname }} picture") - include dropdown-user diff --git a/app/partials/includes/modules/projects-nav.jade b/app/partials/includes/modules/projects-nav.jade deleted file mode 100644 index 2a26f099..00000000 --- a/app/partials/includes/modules/projects-nav.jade +++ /dev/null @@ -1,8 +0,0 @@ -.projects-nav-overlay - div.container - p(translate="COMMON.LOADING_PROJECT") - -div.wizard-create-project(tg-lb-create-project) - include wizard-create-project - -nav.projects-nav(tg-projects-nav) diff --git a/app/partials/includes/modules/wizard-create-project.jade b/app/partials/project/wizard-create-project.jade similarity index 100% rename from app/partials/includes/modules/wizard-create-project.jade rename to app/partials/project/wizard-create-project.jade