From 35c5d619bdb7cd07489f9712d64de25ee40a2423 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Tue, 1 Dec 2015 14:33:53 +0100 Subject: [PATCH] Convert repos controller to javascript --- app/controllers/repos.coffee | 141 ----------------------------- app/controllers/repos.js | 170 +++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+), 141 deletions(-) delete mode 100644 app/controllers/repos.coffee create mode 100644 app/controllers/repos.js diff --git a/app/controllers/repos.coffee b/app/controllers/repos.coffee deleted file mode 100644 index cf0d8c84..00000000 --- a/app/controllers/repos.coffee +++ /dev/null @@ -1,141 +0,0 @@ -`import Ember from 'ember'` -`import limit from 'travis/utils/computed-limit'` -`import Repo from 'travis/models/repo'` - -Controller = Ember.Controller.extend - actions: - activate: (name) -> - @activate(name) - - showRunningJobs: -> - @activate('running') - - showMyRepositories: -> - # this is a bit of a hack. I don't want to switch URL for 'running' - # so depending on current state I'm either just switching back or - # redirecting - if @get('tab') == 'running' - @activate('owned') - else - @transitionToRoute('main.repositories') - - - tabOrIsLoadedDidChange: (-> - @possiblyRedirectToGettingStartedPage() - ).observes('isLoaded', 'tab', 'repos.length') - - possiblyRedirectToGettingStartedPage: -> - Ember.run.scheduleOnce 'routerTransitions', this, -> - if @get('tab') == 'owned' && @get('isLoaded') && @get('repos.length') == 0 - @container.lookup('router:main').send('redirectToGettingStarted') - - isLoaded: false - repoController: Ember.inject.controller('repo') - currentUserBinding: 'auth.currentUser' - selectedRepo: (-> - # we need to observe also repo.content here, because we use - # ObjectProxy in repo controller - # TODO: get rid of ObjectProxy there - @get('repoController.repo.content') || @get('repoController.repo') - ).property('repoController.repo', 'repoController.repo.content') - - startedJobsCount: Ember.computed.alias('runningJobs.length') - allJobsCount: (-> - @get('startedJobsCount') + @get('queuedJobs.length') - ).property('startedJobsCount', 'queuedJobs.length') - - init: -> - @_super.apply this, arguments - if !Ember.testing - Visibility.every @config.intervals.updateTimes, @updateTimes.bind(this) - - runningJobs: (-> - result = @store.filter('job', {}, (job) -> - ['queued', 'started', 'received'].indexOf(job.get('state')) != -1 - ) - result.set('isLoaded', false) - result.then => - result.set('isLoaded', true) - result - ).property() - - queuedJobs: (-> - result = @get('store').filter('job', {}, (job) -> - ['created'].indexOf(job.get('state')) != -1 - ) - result.set('isLoaded', false) - result.then => - result.set('isLoaded', true) - result - ).property() - - recentRepos: (-> - # I return an empty array here, because we're removing left sidebar, but - # I don't want to refactor too much code (it will be all changed anyway - # when we switch to new dashboard) - [] - ).property() - - updateTimes: -> - if repos = @get('repos') - repos.forEach (r) -> r.updateTimes() - - activate: (tab, params) -> - @set('sortProperties', ['sortOrder']) - @set('tab', tab) - this["view_#{tab}".camelize()](params) - - viewOwned: -> - if repos = @get('ownedRepos') - @set('repos', repos) - else if !@get('fetchingOwnedRepos') - @set('fetchingOwnedRepos', true) - @set('isLoaded', false) - if user = @get('currentUser') - user.get('_rawPermissions').then (data) => - repos = Repo.accessibleBy(@store, data.pull).then( (reposRecordArray) => - @set('isLoaded', true) - @set('repos', reposRecordArray) - @set('ownedRepos', reposRecordArray) - @set('fetchingOwnedRepos', false) - ) - # TODO: handle error - - viewRunning: -> - - viewSearch: (phrase) -> - @set('search', phrase) - @set('isLoaded', false) - Repo.search(@store, phrase).then( (reposRecordArray) => - @set('isLoaded', true) - @set('repos', reposRecordArray) - ) - - searchObserver: (-> - search = @get('search') - if search - @searchFor search - ).observes('search') - - searchFor: (phrase) -> - Ember.run.cancel(@searchLater) if @searchLater - @searchLater = Ember.run.later(this, (-> - @transitionTo('main.search', phrase.replace(/\//g, '%2F')) - ), 500) - - noReposMessage: (-> - tab = @get('tab') - - if tab == 'owned' - 'You don\'t have any repos set up on Travis CI' - else if tab == 'recent' - 'Repositories could not be loaded' - else - 'Could not find any repos' - ).property('tab') - - showRunningJobs: (-> - @get('tab') == 'running' - ).property('tab') - -`export default Controller` diff --git a/app/controllers/repos.js b/app/controllers/repos.js new file mode 100644 index 00000000..d4d8d45f --- /dev/null +++ b/app/controllers/repos.js @@ -0,0 +1,170 @@ +import Ember from 'ember'; +import limit from 'travis/utils/computed-limit'; +import Repo from 'travis/models/repo'; + +var Controller = Ember.Controller.extend({ + actions: { + activate: function(name) { + return this.activate(name); + }, + showRunningJobs: function() { + return this.activate('running'); + }, + showMyRepositories: function() { + if (this.get('tab') === 'running') { + return this.activate('owned'); + } else { + return this.transitionToRoute('main.repositories'); + } + } + }, + + tabOrIsLoadedDidChange: function() { + return this.possiblyRedirectToGettingStartedPage(); + }.observes('isLoaded', 'tab', 'repos.length'), + + possiblyRedirectToGettingStartedPage() { + return Ember.run.scheduleOnce('routerTransitions', this, function() { + if (this.get('tab') === 'owned' && this.get('isLoaded') && this.get('repos.length') === 0) { + return this.container.lookup('router:main').send('redirectToGettingStarted'); + } + }); + }, + + isLoaded: false, + repoController: Ember.inject.controller('repo'), + currentUserBinding: 'auth.currentUser', + + selectedRepo: function() { + return this.get('repoController.repo.content') || this.get('repoController.repo'); + }.property('repoController.repo', 'repoController.repo.content'), + + startedJobsCount: Ember.computed.alias('runningJobs.length'), + + allJobsCount: function() { + return this.get('startedJobsCount') + this.get('queuedJobs.length'); + }.property('startedJobsCount', 'queuedJobs.length'), + + init() { + this._super.apply(this, arguments); + if (!Ember.testing) { + return Visibility.every(this.config.intervals.updateTimes, this.updateTimes.bind(this)); + } + }, + + runningJobs: function() { + var result; + + result = this.store.filter('job', {}, function(job) { + return ['queued', 'started', 'received'].indexOf(job.get('state')) !== -1; + }); + result.set('isLoaded', false); + result.then(function() { + return result.set('isLoaded', true); + }); + + return result; + }.property(), + + queuedJobs: function() { + var result; + result = this.get('store').filter('job', {}, function(job) { + return ['created'].indexOf(job.get('state')) !== -1; + }); + result.set('isLoaded', false); + result.then(function() { + result.set('isLoaded', true); + }); + + return result; + }.property(), + + recentRepos: function() { + return []; + }.property(), + + updateTimes() { + var repos; + if (repos = this.get('repos')) { + return repos.forEach(function(r) { + return r.updateTimes(); + }); + } + }, + + activate(tab, params) { + this.set('sortProperties', ['sortOrder']); + this.set('tab', tab); + return this[("view_" + tab).camelize()](params); + }, + + viewOwned() { + var repos, user; + + if (repos = this.get('ownedRepos')) { + return this.set('repos', repos); + } else if (!this.get('fetchingOwnedRepos')) { + this.set('fetchingOwnedRepos', true); + this.set('isLoaded', false); + + if (user = this.get('currentUser')) { + user.get('_rawPermissions').then( (data) => { + repos = Repo.accessibleBy(this.store, data.pull).then( + (reposRecordArray) => { + this.set('isLoaded', true); + this.set('repos', reposRecordArray); + this.set('ownedRepos', reposRecordArray); + this.set('fetchingOwnedRepos', false); + return reposRecordArray; + }); + }); + } + } + }, + + viewRunning() {}, + + viewSearch(phrase) { + this.set('search', phrase); + this.set('isLoaded', false); + Repo.search(this.store, phrase).then( () => { + this.set('isLoaded', true); + this.set('repos', reposRecordArray); + }); + }, + + searchObserver: function() { + var search; + search = this.get('search'); + if (search) { + return this.searchFor(search); + } + }.observes('search'), + + searchFor(phrase) { + if (this.searchLater) { + Ember.run.cancel(this.searchLater); + } + this.searchLater = Ember.run.later(this, (function() { + this.transitionTo('main.search', phrase.replace(/\//g, '%2F')); + }), 500); + }, + + noReposMessage: function() { + var tab; + tab = this.get('tab'); + if (tab === 'owned') { + return 'You don\'t have any repos set up on Travis CI'; + } else if (tab === 'recent') { + return 'Repositories could not be loaded'; + } else { + return 'Could not find any repos'; + } + }.property('tab'), + + showRunningJobs: function() { + return this.get('tab') === 'running'; + }.property('tab') +}); + +export default Controller;