Show partial folder selection state

This commit is contained in:
James Allen
2014-06-16 14:45:47 +01:00
parent 65a1f03768
commit 802aae6148
2 changed files with 62 additions and 28 deletions
+16 -11
View File
@@ -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
View File
@@ -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