From daeb5fa0561be54d65d9e41d6feacec619023e86 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 5 Aug 2015 14:53:03 +0200 Subject: [PATCH] Refactor repo tools to use components --- app/components/repo-show-tools.coffee | 47 +++++++++++ app/components/repos-list-item.coffee | 4 +- app/services/popup.coffee | 15 ++++ app/templates/components/repo-show-tools.hbs | 18 +++++ app/templates/repo.hbs | 2 +- app/templates/repos/show/tools.hbs | 46 ----------- app/views/application.coffee | 4 +- app/views/basic.coffee | 18 +---- app/views/pre.coffee | 4 +- app/views/repo-show-tools.coffee | 84 -------------------- app/views/repo.coffee | 3 +- 11 files changed, 93 insertions(+), 152 deletions(-) create mode 100644 app/components/repo-show-tools.coffee create mode 100644 app/services/popup.coffee create mode 100644 app/templates/components/repo-show-tools.hbs delete mode 100644 app/views/repo-show-tools.coffee diff --git a/app/components/repo-show-tools.coffee b/app/components/repo-show-tools.coffee new file mode 100644 index 00000000..c5101af8 --- /dev/null +++ b/app/components/repo-show-tools.coffee @@ -0,0 +1,47 @@ +`import Ember from 'ember'` +`import config from 'travis/config/environment'` + +RepoShowToolsComponent = Ember.Component.extend + popup: Ember.inject.service() + + click: (event) -> + if $(event.target).is('a') && $(event.target).parents('.dropdown-menu').length + @closeMenu() + + closeMenu: -> + $('.menu').removeClass('display') + + actions: + menu: -> + @get('popup').close() + $('#tools .menu').toggleClass('display') + return false + + hasPermission: (-> + if permissions = @get('currentUser.permissions') + permissions.contains parseInt(@get('repo.id')) + ).property('currentUser.permissions.length', 'repo.id') + + hasPushPermission: (-> + if permissions = @get('currentUser.pushPermissions') + permissions.contains parseInt(@get('repo.id')) + ).property('currentUser.pushPermissions.length', 'repo.id') + + hasAdminPermission: (-> + if permissions = @get('currentUser.adminPermissions') + permissions.contains parseInt(@get('repo.id')) + ).property('currentUser.adminPermissions.length', 'repo.id') + + displaySettingsLink: (-> + @get('hasPushPermission') + ).property('hasPushPermission') + + displayCachesLink: (-> + @get('hasPushPermission') && config.endpoints.caches + ).property('hasPushPermission') + + displayStatusImages: (-> + @get('hasPermission') + ).property('hasPermission') + +`export default RepoShowToolsComponent` diff --git a/app/components/repos-list-item.coffee b/app/components/repos-list-item.coffee index 1d620188..af4ee542 100644 --- a/app/components/repos-list-item.coffee +++ b/app/components/repos-list-item.coffee @@ -3,6 +3,8 @@ `import { colorForState } from 'travis/utils/helpers'` ReposListItemComponent = Ember.Component.extend Polling, + routing: Ember.inject.service('-routing') + tagName: 'li' pollModels: 'repo' @@ -24,6 +26,6 @@ ReposListItemComponent = Ember.Component.extend Polling, click: -> @scrollTop() - @get('controller').transitionToRoute('/' + @get('repo.slug')) + @get('routing').transitionTo('repo', @get('repo.slug').split('/')) `export default ReposListItemComponent` diff --git a/app/services/popup.coffee b/app/services/popup.coffee new file mode 100644 index 00000000..83c8e37e --- /dev/null +++ b/app/services/popup.coffee @@ -0,0 +1,15 @@ +`import Ember from 'ember'` + +PopupService = Ember.Service.extend + open: (name) -> + @closeAll() + name = event?.target?.name || name + $("##{name}").toggleClass('display') + close: -> + if view = Ember.View.currentPopupView + view.destroy() + Ember.View.currentPopupView = null + + $('.popup').removeClass('display') + +`export default PopupService` diff --git a/app/templates/components/repo-show-tools.hbs b/app/templates/components/repo-show-tools.hbs new file mode 100644 index 00000000..5300edd9 --- /dev/null +++ b/app/templates/components/repo-show-tools.hbs @@ -0,0 +1,18 @@ + diff --git a/app/templates/repo.hbs b/app/templates/repo.hbs index 75e135c8..2f1f4002 100644 --- a/app/templates/repo.hbs +++ b/app/templates/repo.hbs @@ -18,7 +18,7 @@
- {{view 'repo-show-tools'}} + {{repo-show-tools repo=repo build=build job=job tab=tab currentUser=auth.currentUser}} {{repo-show-tabs repo=repo tab=tab}}
diff --git a/app/templates/repos/show/tools.hbs b/app/templates/repos/show/tools.hbs index 2ef2e9e9..8b137891 100644 --- a/app/templates/repos/show/tools.hbs +++ b/app/templates/repos/show/tools.hbs @@ -1,47 +1 @@ - - - - - diff --git a/app/views/application.coffee b/app/views/application.coffee index d14ffb73..7048cd6f 100644 --- a/app/views/application.coffee +++ b/app/views/application.coffee @@ -1,6 +1,8 @@ `import BasicView from 'travis/views/basic'` View = BasicView.extend + popup: Ember.inject.service() + classNames: ['application'] click: (event) -> # TODO: this solves the case of closing menus and popups, @@ -8,7 +10,7 @@ View = BasicView.extend # yet, but this does not seem optimal targetAndParents = $(event.target).parents().andSelf() if ! ( targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup') ) - @popupCloseAll() + @get('popup').close() # TODO: I needed to add second check to this conditional, because for some reason # event.stopPropagation() in menu() function in RepoShowToolsView does diff --git a/app/views/basic.coffee b/app/views/basic.coffee index c302c38b..46fb86a2 100644 --- a/app/views/basic.coffee +++ b/app/views/basic.coffee @@ -1,21 +1,5 @@ `import Ember from 'ember'` -View = Ember.View.extend - actions: - popup: (name) -> @popup(name) - popupClose: -> @popupClose() - - popup: (name) -> - @popupCloseAll() - name = event?.target?.name || name - $("##{name}").toggleClass('display') - popupClose: -> - $('.popup').removeClass('display') - popupCloseAll: -> - if view = Ember.View.currentPopupView - view.destroy() - Ember.View.currentPopupView = null - - $('.popup').removeClass('display') +View = Ember.View.extend() `export default View` diff --git a/app/views/pre.coffee b/app/views/pre.coffee index 708deab4..68c17961 100644 --- a/app/views/pre.coffee +++ b/app/views/pre.coffee @@ -42,6 +42,8 @@ Object.defineProperty Log.Limit.prototype, 'limited', @count >= @max_lines View = BasicView.extend + popup: Ember.inject.service() + templateName: 'jobs/pre' currentUserBinding: 'controller.auth.currentUser' @@ -144,7 +146,7 @@ View = BasicView.extend removeLogPopup: -> if @get('canRemoveLog') - @popup('remove-log-popup') + @get('popup').open('remove-log-popup') return false noop: -> # TODO required? diff --git a/app/views/repo-show-tools.coffee b/app/views/repo-show-tools.coffee deleted file mode 100644 index dc0f991b..00000000 --- a/app/views/repo-show-tools.coffee +++ /dev/null @@ -1,84 +0,0 @@ -`import Ember from 'ember'` -`import BasicView from 'travis/views/basic'` -`import config from 'travis/config/environment'` - -View = BasicView.extend - templateName: 'repos/show/tools' - - repoBinding: 'controller.repo' - buildBinding: 'controller.build' - jobBinding: 'controller.job' - tabBinding: 'controller.tab' - currentUserBinding: 'controller.auth.currentUser' - slugBinding: 'controller.repo.slug' - - - didInsertElement: -> - self = this - $('.menu a').on 'click', -> - self.closeMenu() - - willRemoveElement: -> - $('.menu a').off 'click' - - closeMenu: -> - $('.menu').removeClass('display') - - actions: - menu: -> - @popupCloseAll() - $('#tools .menu').toggleClass('display') - return false - - regenerateKeyPopup: -> - if @get('canRegenerateKey') - @set('active', true) - @closeMenu() - @popup('regenerate-key-popup') - return false - - regenerateKey: -> - @popupCloseAll() - - (@get('repo.content') || @get('repo')).regenerateKey - success: => - @popup('regeneration-success') - error: -> - Travis.lookup('controller:flash').loadFlashes([{ error: 'Travis encountered an error while trying to regenerate the key, please try again.'}]) - - canRegenerateKey: (-> - @get('hasAdminPermission') - ).property('hasAdminPermission') - - hasPermission: (-> - if permissions = @get('currentUser.permissions') - permissions.contains parseInt(@get('repo.id')) - ).property('currentUser.permissions.length', 'repo.id') - - hasPushPermission: (-> - if permissions = @get('currentUser.pushPermissions') - permissions.contains parseInt(@get('repo.id')) - ).property('currentUser.pushPermissions.length', 'repo.id') - - hasAdminPermission: (-> - if permissions = @get('currentUser.adminPermissions') - permissions.contains parseInt(@get('repo.id')) - ).property('currentUser.adminPermissions.length', 'repo.id') - - displayRegenerateKey: (-> - @get('canRegenerateKey') - ).property('canRegenerateKey') - - displaySettingsLink: (-> - @get('hasPushPermission') - ).property('hasPushPermission') - - displayCachesLink: (-> - @get('hasPushPermission') && config.endpoints.caches - ).property('hasPushPermission') - - displayStatusImages: (-> - @get('hasPermission') - ).property('hasPermission') - -`export default View` diff --git a/app/views/repo.coffee b/app/views/repo.coffee index 90a3db2c..d6035868 100644 --- a/app/views/repo.coffee +++ b/app/views/repo.coffee @@ -5,6 +5,7 @@ `import Polling from 'travis/mixins/polling'` View = BasicView.extend Polling, + popup: Ember.inject.service() reposBinding: 'controllers.repos' repoBinding: 'controller.repo' buildBinding: 'controller.build' @@ -25,7 +26,7 @@ View = BasicView.extend Polling, actions: statusImages: () -> - @popupCloseAll() + @get('popup').close() view = StatusImagesView.create(toolsView: this, container: @container) BasicView.currentPopupView = view view.appendTo($('body'))