new route controller page system

stable
Juanfran 2015-05-13 10:09:47 +02:00
parent 408fc1b8e3
commit ad6b7fcf1d
12 changed files with 109 additions and 47 deletions

View File

@ -46,23 +46,23 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven
}, },
title: "PROJECT.WELCOME", title: "PROJECT.WELCOME",
resolve: { resolve: {
loader: tgLoaderProvider.add(true), loader: tgLoaderProvider.add(true)
pageParams: -> {
}
} }
} }
) )
$routeProvider.when("/projects/", $routeProvider.when("/projects/",
{ {
templateUrl: "projects/projects-page.html", templateUrl: "projects/listing/projects-listing.html",
access: { access: {
requiresLogin: true requiresLogin: true
}, },
title: "PROJECT.SECTION_PROJECTS", title: "PROJECT.SECTION_PROJECTS",
resolve: { resolve: {
loader: tgLoaderProvider.add(true) loader: tgLoaderProvider.add(true)
} },
controller: "ProjectsListing",
controllerAs: "vm"
} }
) )
@ -175,14 +175,14 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven
# User profile # User profile
$routeProvider.when("/profile", $routeProvider.when("/profile",
{ {
templateUrl: "profile/profile-page.html", templateUrl: "profile/profile.html",
resolve: { resolve: {
loader: tgLoaderProvider.add(true) loader: tgLoaderProvider.add(true)
}, },
access: { access: {
requiresLogin: true requiresLogin: true
} }
controller: "ProfilePage" controller: "Profile"
} }
) )

View File

@ -9,4 +9,4 @@ class ProfilePageController extends taiga.Controller
@appTitle.set(user.username) @appTitle.set(user.username)
angular.module("taigaProfile").controller("ProfilePage", ProfilePageController) angular.module("taigaProfile").controller("Profile", ProfilePageController)

View File

@ -1,23 +1,33 @@
describe "PageController", -> describe "ProfileController", ->
pageCtrl = null pageCtrl = null
provide = null provide = null
controller = null controller = null
mocks = {} mocks = {}
_mockAuth = () -> projects = Immutable.fromJS([
mocks.authService = { {id: 1},
getUser: sinon.stub() {id: 2},
} {id: 3}
])
provide.value "$tgAuth", mocks.authService
_mockAppTitle = () -> _mockAppTitle = () ->
stub = sinon.stub()
mocks.appTitle = { mocks.appTitle = {
set: sinon.spy() set: sinon.stub()
} }
provide.value "$appTitle", mocks.appTitle provide.value "$appTitle", mocks.appTitle
_mockAuth = () ->
stub = sinon.stub()
mocks.auth = {
getUser: sinon.stub()
}
provide.value "$tgAuth", mocks.auth
_mocks = () -> _mocks = () ->
module ($provide) -> module ($provide) ->
provide = $provide provide = $provide
@ -34,14 +44,14 @@ describe "PageController", ->
inject ($controller) -> inject ($controller) ->
controller = $controller controller = $controller
it "set the username as title", () -> it "define projects", () ->
user = { user = {
username: 'UserName' username: "UserName"
} }
mocks.authService.getUser.returns(user) mocks.auth.getUser.returns(user)
pageCtrl = controller "ProfilePage", ctrl = controller "Profile",
$scope: {} $scope: {}
expect(mocks.appTitle.set.withArgs(user.username)).have.been.calledOnce expect(mocks.appTitle.set.withArgs(user.username)).to.be.calledOnce

View File

@ -0,0 +1,12 @@
class ProjectsListingController
@.$inject = [
"tgProjectsService"
]
constructor: (@projectsService) ->
taiga.defineImmutableProperty(@, "projects", () => @projectsService.currentUserProjects.get("all"))
newProject: ->
@projectsService.newProject()
angular.module("taigaProjects").controller("ProjectsListing", ProjectsListingController)

View File

@ -0,0 +1,54 @@
describe "ProjectsListingController", ->
pageCtrl = null
provide = null
controller = null
mocks = {}
projects = Immutable.fromJS([
{id: 1},
{id: 2},
{id: 3}
])
_mockProjectsService = () ->
stub = sinon.stub()
mocks.projectsService = {
currentUserProjects: {
get: stub
},
newProject: sinon.stub()
}
stub.withArgs("all").returns(projects)
provide.value "tgProjectsService", mocks.projectsService
_mocks = () ->
module ($provide) ->
provide = $provide
_mockProjectsService()
return null
beforeEach ->
module "taigaProjects"
_mocks()
inject ($controller) ->
controller = $controller
it "define projects", () ->
pageCtrl = controller "ProjectsListing",
$scope: {}
expect(pageCtrl.projects).to.be.equal(projects)
it "new project", () ->
pageCtrl = controller "ProjectsListing",
$scope: {}
pageCtrl.newProject()
expect(mocks.projectsService.newProject).to.be.calledOnce;

View File

@ -1,10 +1,8 @@
ProjectsListingDirective = (projectsService) -> SortProjectsDirective = (projectsService) ->
link = (scope, el, attrs, ctrl) -> link = (scope, el, attrs, ctrl) ->
scope.vm = {}
itemEl = null itemEl = null
tdom = el.find(".js-sortable")
tdom.sortable({ el.sortable({
dropOnEmpty: true dropOnEmpty: true
revert: 200 revert: 200
axis: "y" axis: "y"
@ -12,31 +10,29 @@ ProjectsListingDirective = (projectsService) ->
placeholder: 'placeholder' placeholder: 'placeholder'
}) })
tdom.on "sortstop", (event, ui) -> el.on "sortstop", (event, ui) ->
itemEl = ui.item itemEl = ui.item
project = itemEl.scope().project project = itemEl.scope().project
index = itemEl.index() index = itemEl.index()
sorted_project_ids = _.map(scope.vm.projects.toArray(), (p) -> p.id) sorted_project_ids = _.map(scope.projects.toJS(), (p) -> p.id)
sorted_project_ids = _.without(sorted_project_ids, project.id) sorted_project_ids = _.without(sorted_project_ids, project.id)
sorted_project_ids.splice(index, 0, project.get('id')) sorted_project_ids.splice(index, 0, project.get('id'))
sortData = [] sortData = []
for value, index in sorted_project_ids for value, index in sorted_project_ids
sortData.push({"project_id": value, "order":index}) sortData.push({"project_id": value, "order":index})
projectsService.bulkUpdateProjectsOrder(sortData) projectsService.bulkUpdateProjectsOrder(sortData)
taiga.defineImmutableProperty(scope.vm, "projects", () -> projectsService.currentUserProjects.get("all"))
scope.vm.newProject = ->
projectsService.newProject()
directive = { directive = {
templateUrl: "projects/listing/projects-listing.html" scope: {
scope: {} projects: "=tgSortProjects"
},
link: link link: link
} }
return directive return directive
angular.module("taigaProjects").directive("tgProjectsListing", ["tgProjectsService", ProjectsListingDirective]) angular.module("taigaProjects").directive("tgSortProjects", ["tgProjectsService", SortProjectsDirective])

View File

@ -10,7 +10,7 @@ div.project-list-wrapper.centered
section.project-list-section section.project-list-section
div.project-list div.project-list
ul.js-sortable ul(tg-sort-projects="vm.projects")
li.project-list-single(tg-bind-scope, tg-repeat="project in vm.projects") li.project-list-single(tg-bind-scope, tg-repeat="project in vm.projects")
div.project-list-single-left div.project-list-single-left
div.project-list-single-title div.project-list-single-title

View File

@ -1 +0,0 @@
div(tg-project)

View File

@ -1,8 +0,0 @@
ProjectDirective = () ->
return {
templateUrl: "projects/project/project.html",
controllerAs: "vm",
controller: "Project"
}
angular.module("taigaProjects").directive("tgProject", ProjectDirective)

View File

@ -13,7 +13,7 @@ div.wrapper
section.timeline section.timeline
div(tg-user-timeline) div(tg-user-timeline)
section.involved-data section.involved-data
h2.title Team h2.title {{"PROJECT.SECTION.TEAM" | translate}}
ul.involved-team ul.involved-team
a(href="", title="{{::member.get('full_name')}}", tg-repeat="member in ::vm.project.get('memberships')") a(href="", title="{{::member.get('full_name')}}", tg-repeat="member in ::vm.project.get('memberships')")
img(ng-src="{{::member.get('photo')}}", alt="{{::member.get('full_name')}}") img(ng-src="{{::member.get('photo')}}", alt="{{::member.get('full_name')}}")

View File

@ -1 +0,0 @@
div(tg-projects-listing)