diff --git a/CHANGELOG.md b/CHANGELOG.md index 3264fc46..34c371b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Show the reference of entities in search results (thanks to [@artlepool](https://github.com/artlepool)) ### Misc +- Improve performance: remove some unnecessary calls to the api. - Lots of small and not so small bugfixes. diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index d5b6deec..1d5953d4 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -65,10 +65,11 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai @analytics.trackEvent("membership", "create", "create memberships on admin", 1) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => if not project.i_am_owner @location.path(@navUrls.resolve("permission-denied")) + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project @@ -76,20 +77,20 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai loadMembers: -> httpFilters = @.getUrlFilters() return @rs.memberships.list(@scope.projectId, httpFilters).then (data) => - @scope.memberships = _.filter(data.models, (membership) -> membership.user == null or membership.is_user_active) + @scope.memberships = _.filter(data.models, (membership) -> + membership.user == null or membership.is_user_active) @scope.page = data.current @scope.count = data.count @scope.paginatedBy = data.paginatedBy return data loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data + promise = @.loadProject() + promise.then => + @.loadUsersAndRoles() + @.loadMembers() - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadMembers()) + return promise getUrlFilters: -> filters = _.pick(@location.search(), "page") diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 207734b4..8d2bd6dd 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -71,10 +71,11 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) @appTitle.set(appTitle) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => if not project.i_am_owner @location.path(@navUrls.resolve("permission-denied")) + @scope.projectId = project.id @scope.project = project @scope.pointsList = _.sortBy(project.points, "order") @scope.usStatusList = _.sortBy(project.us_statuses, "order") @@ -90,18 +91,10 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) => @scope.project.tags_colors = tags_colors - loadProjectProfile: -> - return @q.all([ - @.loadProject(), - @.loadTagsColors() - ]) - loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProjectProfile()) + promise = @.loadProject() + promise.then => @.loadTagsColors() + return promise openDeleteLightbox: -> @rootscope.$broadcast("deletelightbox:new", @scope.project) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index c86c762d..22f7b7ce 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -68,20 +68,18 @@ class ProjectValuesSectionController extends mixOf(taiga.Controller, taiga.PageM promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => if not project.i_am_owner @location.path(@navUrls.resolve("permission-denied")) + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then => @.loadProject() + promise = @.loadProject() + return promise module.controller("ProjectValuesSectionController", ProjectValuesSectionController) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 9e3b1669..f466c90d 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -65,10 +65,11 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => if not project.i_am_owner @location.path(@navUrls.resolve("permission-denied")) + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) @@ -76,39 +77,29 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil return project - loadExternalUserRole: (roles) -> - roles = roles.map (role) -> - role.external_user = false - - return role - - public_permission = { - "name": @translate.instant("ADMIN.ROLES.EXTERNAL_USER"), - "permissions": @scope.project.public_permissions, - "external_user": true - } - - roles.push(public_permission) - - return roles - loadRoles: -> - return @rs.roles.list(@scope.projectId) - .then @loadExternalUserRole - .then (roles) => - @scope.roles = roles - @scope.role = @scope.roles[0] + return @rs.roles.list(@scope.projectId).then (roles) => + roles = roles.map (role) -> + role.external_user = false - return roles + return role + + public_permission = { + "name": @translate.instant("ADMIN.ROLES.EXTERNAL_USER"), + "permissions": @scope.project.public_permissions, + "external_user": true + } + + roles.push(public_permission) + + @scope.roles = roles + @scope.role = @scope.roles[0] + return roles loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadUsersAndRoles()) - .then(=> @.loadRoles()) + promise = @.loadProject() + promise.then(=> @.loadRoles()) + return promise setRole: (role) -> @scope.role = role diff --git a/app/coffee/modules/admin/third-parties.coffee b/app/coffee/modules/admin/third-parties.coffee index 06bb946e..b05318c3 100644 --- a/app/coffee/modules/admin/third-parties.coffee +++ b/app/coffee/modules/admin/third-parties.coffee @@ -28,6 +28,7 @@ timeout = @.taiga.timeout module = angular.module("taigaAdmin") + ############################################################################# ## Webhooks ############################################################################# @@ -65,24 +66,25 @@ class WebhooksController extends mixOf(taiga.Controller, taiga.PageMixin, taiga. @scope.webhooks = webhooks loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => if not project.i_am_owner @location.path(@navUrls.resolve("permission-denied")) + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data + promise = @.loadProject() + promise.then => + @.loadWebhooks() - return promise.then(=> @.loadProject()) - .then(=> @.loadWebhooks()) + return promise module.controller("WebhooksController", WebhooksController) + ############################################################################# ## Webhook Directive ############################################################################# @@ -213,7 +215,8 @@ WebhookDirective = ($rs, $repo, $confirm, $loading, $translate) -> return {link:link} -module.directive("tgWebhook", ["$tgResources", "$tgRepo", "$tgConfirm", "$tgLoading", "$translate", WebhookDirective]) +module.directive("tgWebhook", ["$tgResources", "$tgRepo", "$tgConfirm", "$tgLoading", "$translate", + WebhookDirective]) ############################################################################# @@ -312,19 +315,16 @@ class GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.github = github loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadModules()) - + promise = @.loadProject() + promise.then(=> @.loadModules()) + return promise module.controller("GithubController", GithubController) @@ -364,19 +364,16 @@ class GitlabController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.gitlab = gitlab loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadModules()) - + promise = @.loadProject() + promise.then(=> @.loadModules()) + return promise module.controller("GitlabController", GitlabController) @@ -416,18 +413,16 @@ class BitbucketController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @scope.bitbucket = bitbucket loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadModules()) + promise = @.loadProject() + promise.then(=> @.loadModules()) + return promise module.controller("BitbucketController", BitbucketController) @@ -552,12 +547,12 @@ module.directive("tgBitbucketWebhooks", ["$tgRepo", "$tgConfirm", "$tgLoading", ############################################################################# ValidOriginIpsDirective = -> link = ($scope, $el, $attrs, $ngModel) -> - $ngModel.$parsers.push (value) -> - value = $.trim(value) - if value == "" - return [] + $ngModel.$parsers.push (value) -> + value = $.trim(value) + if value == "" + return [] - return value.split(",") + return value.split(",") return { link: link diff --git a/app/coffee/modules/base/contrib.coffee b/app/coffee/modules/base/contrib.coffee index 1c148bb9..a5e3d695 100644 --- a/app/coffee/modules/base/contrib.coffee +++ b/app/coffee/modules/base/contrib.coffee @@ -39,18 +39,15 @@ class ContribController extends taiga.Controller @confirm.notify("error") loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) @scope.$broadcast('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) + return @.loadProject() module = angular.module("taigaBase") module.controller("ContribController", ContribController) diff --git a/app/coffee/modules/projects/main.coffee b/app/coffee/modules/projects/main.coffee index 8fda3a20..c041d588 100644 --- a/app/coffee/modules/projects/main.coffee +++ b/app/coffee/modules/projects/main.coffee @@ -98,22 +98,15 @@ class ProjectController extends taiga.Controller promise.then null, @.onInitialDataError.bind(@) loadInitialData: -> - # Resolve project slug - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadPageData()) - .then(=> @scope.$emit("project:loaded", @scope.project)) - - loadPageData: -> - return @q.all([ - @.loadProjectStats(), - @.loadProject()]) + promise = @.loadProject() + promise.then(=> @.loadProjectStats()) + return promise loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project + @scope.$emit("project:loaded", @scope.project) return project loadProjectStats: -> diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 75018b97..f2bd605f 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -136,7 +136,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.stats.remainingPointsSum = remainingPointsSum @scope.stats.remainingTasks = remainingTasks if stats.totalPointsSum - @scope.stats.completedPercentage = Math.round(100 * stats.completedPointsSum / stats.totalPointsSum) + @scope.stats.completedPercentage = Math.round(100*stats.completedPointsSum/stats.totalPointsSum) else @scope.stats.completedPercentage = 0 diff --git a/app/coffee/modules/user-settings/change-password.coffee b/app/coffee/modules/user-settings/change-password.coffee index 387b92d6..9957000d 100644 --- a/app/coffee/modules/user-settings/change-password.coffee +++ b/app/coffee/modules/user-settings/change-password.coffee @@ -46,7 +46,8 @@ class UserChangePasswordController extends mixOf(taiga.Controller, taiga.PageMix "$translate" ] - constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @auth, @translate) -> + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, + @auth, @translate) -> @scope.sectionName = @translate.instant("CHANGE_PASSWORD.SECTION_NAME") @scope.project = {} @scope.user = @auth.getUser() @@ -56,17 +57,14 @@ class UserChangePasswordController extends mixOf(taiga.Controller, taiga.PageMix promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) + return @.loadProject() module.controller("UserChangePasswordController", UserChangePasswordController) diff --git a/app/coffee/modules/user-settings/main.coffee b/app/coffee/modules/user-settings/main.coffee index 620236b3..39257d78 100644 --- a/app/coffee/modules/user-settings/main.coffee +++ b/app/coffee/modules/user-settings/main.coffee @@ -45,7 +45,8 @@ class UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin) "$translate" ] - constructor: (@scope, @rootscope, @config, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @auth, @translate) -> + constructor: (@scope, @rootscope, @config, @repo, @confirm, @rs, @params, @q, @location, @navUrls, + @auth, @translate) -> @scope.sectionName = "USER_SETTINGS.MENU.SECTION_TITLE" @scope.project = {} @@ -62,7 +63,8 @@ class UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project @@ -73,12 +75,9 @@ class UserSettingsController extends mixOf(taiga.Controller, taiga.PageMixin) return locales loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return @q.all([promise.then(=> @.loadProject()), - @.loadLocales()]) + promise = @.loadProject() + promise.then => @.loadLocales() + return promise openDeleteLightbox: -> @rootscope.$broadcast("deletelightbox:new", @scope.user) diff --git a/app/coffee/modules/user-settings/notifications.coffee b/app/coffee/modules/user-settings/notifications.coffee index ca299c71..5f77599f 100644 --- a/app/coffee/modules/user-settings/notifications.coffee +++ b/app/coffee/modules/user-settings/notifications.coffee @@ -54,7 +54,8 @@ class UserNotificationsController extends mixOf(taiga.Controller, taiga.PageMixi promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.get(@scope.projectId).then (project) => + return @rs.projects.getBySlug(@params.pslug).then (project) => + @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) return project @@ -65,13 +66,9 @@ class UserNotificationsController extends mixOf(taiga.Controller, taiga.PageMixi return notifyPolicies loadInitialData: -> - promise = @repo.resolve({pslug: @params.pslug}).then (data) => - @scope.projectId = data.project - return data - - return promise.then(=> @.loadProject()) - .then(=> @.loadNotifyPolicies()) - + promise = @.loadProject() + promise.then(=> @.loadNotifyPolicies()) + return promise module.controller("UserNotificationsController", UserNotificationsController)