Przeglądaj źródła

Show partial folder selection state

James Allen 12 lat temu
rodzic
commit
802aae6148

+ 16 - 11
services/web/app/views/project/list.jade

@@ -51,12 +51,12 @@ block content
 								a.menu-indent(href="/templates") View All »
 					.row-spaced
 						ul.list-unstyled.folders-menu.js-folders-menu(ng-controller="TagListController")
-							li(ng-class="{active: (view == 'all')}")
-								a.menu-indent(href="#", ng-click="selectAllProjects()") All projects
-							//- li
-							//- 	a.menu-indent(href="#") Your projects
-							//- li
-							//- 	a.menu-indent(href="#") Shared with you
+							li(ng-class="{active: (filter == 'all')}")
+								a.menu-indent(href, ng-click="selectAllProjects()") All projects
+							li(ng-class="{active: (filter == 'owned')}")
+								a.menu-indent(href, ng-click="selectOwnedProjects()") Your projects
+							li(ng-class="{active: (filter == 'shared')}")
+								a.menu-indent(href, ng-click="selectSharedProjects()") Shared projects
 							li 
 								h2 Folders
 							li(
@@ -119,7 +119,7 @@ block content
 											)
 												i.fa.fa-trash-o
 
-										.btn-group(ng-hide="selectedProjects.length < 1")
+										.btn-group.dropdown(ng-hide="selectedProjects.length < 1")
 											a.btn.btn-default.dropdown-toggle(
 												href="#",
 												data-toggle="dropdown"
@@ -138,8 +138,9 @@ block content
 													a(href="#", ng-click="addOrRemoveProjectsFromTag()")
 														i.fa(
 															ng-class="{\
-																'fa-check-square-o': areSelectedProjectsInTag,\
-																'fa-square-o': !areSelectedProjectsInTag\
+																'fa-check-square-o': areSelectedProjectsInTag == true,\
+																'fa-square-o': areSelectedProjectsInTag == false,\
+																'fa-minus-square-o': areSelectedProjectsInTag == 'partial'\
 															}"
 														)
 														|  {{tag.name}}
@@ -167,7 +168,11 @@ block content
 											li.container-fluid
 												.row
 													.col-md-6
-														input.select-all(type="checkbox", ng-model="allSelected", ng-change="onSelectAllChange()")
+														input.select-all(
+															type="checkbox",
+															ng-model="allSelected",
+															ng-change="onSelectAllChange()"
+														)
 														span.title TITLE
 													.col-md-2
 														span.owner OWNER
@@ -186,7 +191,7 @@ block content
 															span.label.label-default(ng-repeat='tag in project.tags')
 																| {{tag.name}}
 													.col-md-2
-														span.owner {{project.publicAccesLevel}}
+														span.owner {{ownerName()}}
 													.col-md-4
 														span.last-modified.isoDate {{project.lastUpdated | formatDate}}
 									- else

+ 46 - 17
services/web/public/coffee/project-list.coffee

@@ -30,11 +30,12 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 	$scope.tags = window.data.tags
 	$scope.allSelected = false
 	$scope.selectedProjects = []
+	$scope.filter = "all"
 
 	# Allow tags to be accessed on projects as well
 	projectsById = {}
 	for project in $scope.projects
-		projectsById[project._id] = project
+		projectsById[project.id] = project
 
 	for tag in $scope.tags
 		for project_id in tag.project_ids or []
@@ -58,6 +59,10 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 	$scope.$watch "searchText", (value) ->
 		$scope.updateVisibleProjects()
 
+	$scope.setFilter = (filter) ->
+		$scope.filter = filter
+		$scope.updateVisibleProjects()
+
 	$scope.clearProjectSelections = () ->
 		for project in $scope.projects
 			project.selected = false
@@ -71,7 +76,7 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 		$scope.selectedProjects
 
 	$scope.getSelectedProjectIds = () ->
-		$scope.selectedProjects.map (project) -> project._id
+		$scope.selectedProjects.map (project) -> project.id
 
 	$scope.getFirstSelectedProject = () ->
 		$scope.selectedProjects[0]
@@ -89,7 +94,15 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 				if !project.name.toLowerCase().match($scope.searchText.toLowerCase())
 					visible = false
 			# Only show if it matches the selected tag
-			if selectedTag? and project._id not in selectedTag.project_ids
+			if $scope.filter == "tag" and selectedTag? and project.id not in selectedTag.project_ids
+				visible = false
+
+			# Hide projects we own if we only want to see shared projects
+			if $scope.filter == "shared" and project.accessLevel == "owner"
+				visible = false
+
+			# Hide projects we don't own if we only want to see owned projects
+			if $scope.filter == "owned" and project.accessLevel != "owner"
 				visible = false
 
 			if visible
@@ -113,12 +126,13 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 			else
 				removed_project_ids.push project_id
 		tag.project_ids = remaining_project_ids
+		return removed_project_ids
 
 	$scope.removeSelectedProjectsFromTag = (tag) ->
 		selected_project_ids = $scope.getSelectedProjectIds()
 		selected_projects = $scope.getSelectedProjects()
 
-		$scope._removeProjectIdsFromTagArray(tag, selected_project_ids)
+		removed_project_ids = $scope._removeProjectIdsFromTagArray(tag, selected_project_ids)
 
 		# Remove tag from project.tags
 		remaining_tags = []
@@ -151,7 +165,8 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 		# Add tag into each project.tags
 		for project in selected_projects
 			project.tags ||= []
-			project.tags.push tag
+			unless tag in project.tags
+				project.tags.push tag
 
 		for project_id in added_project_ids
 			# TODO Factor this out into another provider?
@@ -217,7 +232,7 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
 
 	$scope.renameProject = (project, newName) ->
 		project.name = newName
-		$http.post "/project/#{project._id}/rename", {
+		$http.post "/project/#{project.id}/rename", {
 			newProjectName: newName
 			_csrf: window.csrfToken
 		}
@@ -272,27 +287,36 @@ ProjectPageApp.controller "ProjectListItemController", ($scope) ->
 	$scope.onSelectedChange = () ->
 		$scope.$emit "selected:on-change"
 
-ProjectPageApp.controller "TagListController", ($scope) ->
-	$scope.view = "all"
+	$scope.ownerName = () ->
+		if $scope.project.accessLevel == "owner"
+			return "You"
+		else if $scope.project.owner?
+			return "#{$scope.project.owner.first_name} #{$scope.project.owner.last_name}"
+		else
+			return "?"
 
+ProjectPageApp.controller "TagListController", ($scope) ->
 	$scope.selectAllProjects = () ->
 		$scope._clearTags()
-		$scope.setActiveItem("all")
-		$scope.updateVisibleProjects()
+		$scope.setFilter("all")
+
+	$scope.selectOwnedProjects = () ->
+		$scope._clearTags()
+		$scope.setFilter("owned")
+
+	$scope.selectSharedProjects = () ->
+		$scope._clearTags()
+		$scope.setFilter("shared")
 
 	$scope._clearTags = () ->
 		for tag in $scope.tags
 			tag.selected = false
 
-	$scope.setActiveItem = (view) ->
-		$scope.view = view
-
 ProjectPageApp.controller "TagListItemController", ($scope) ->
 	$scope.selectTag = () ->
 		$scope._clearTags()
 		$scope.tag.selected = true
-		$scope.setActiveItem("tag")
-		$scope.updateVisibleProjects()
+		$scope.setFilter("tag")
 
 ProjectPageApp.controller "TagDropdownItemController", ($scope) ->
 	$scope.$on "selection:change", (e, newValue, oldValue) ->
@@ -303,12 +327,17 @@ ProjectPageApp.controller "TagDropdownItemController", ($scope) ->
 		for project_id in $scope.getSelectedProjectIds()
 			if project_id in $scope.tag.project_ids
 				$scope.areSelectedProjectsInTag = true
+			else
+				partialSelection = true
+
+		if $scope.areSelectedProjectsInTag and partialSelection
+			$scope.areSelectedProjectsInTag = "partial"
 
 	$scope.addOrRemoveProjectsFromTag = () ->
-		if $scope.areSelectedProjectsInTag
+		if $scope.areSelectedProjectsInTag == true
 			$scope.removeSelectedProjectsFromTag($scope.tag)
 			$scope.areSelectedProjectsInTag = false
-		else
+		else if $scope.areSelectedProjectsInTag == false or $scope.areSelectedProjectsInTag == "partial"
 			$scope.addSelectedProjectsToTag($scope.tag)
 			$scope.areSelectedProjectsInTag = true