From 1ab14e9188b1428b65c1397277d9c74668e62842 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 14 Jan 2015 15:59:33 +0100 Subject: [PATCH] Extract routes to individual files --- assets/scripts/app/controllers.coffee | 2 +- assets/scripts/app/routes.coffee | 441 ++---------------- .../scripts/app/routes/abstract_builds.coffee | 26 ++ assets/scripts/app/routes/account.coffee | 20 + assets/scripts/app/routes/accounts.coffee | 15 + .../scripts/app/routes/accounts/index.coffee | 15 + .../scripts/app/routes/accounts/info.coffee | 14 + assets/scripts/app/routes/application.coffee | 2 +- assets/scripts/app/routes/auth.coffee | 25 + assets/scripts/app/routes/branches.coffee | 7 + assets/scripts/app/routes/build.coffee | 28 ++ assets/scripts/app/routes/builds.coffee | 7 + assets/scripts/app/routes/caches.coffee | 33 ++ assets/scripts/app/routes/env_vars.coffee | 10 + assets/scripts/app/routes/first_sync.coffee | 12 + .../scripts/app/routes/getting_started.coffee | 9 + .../insufficient_oauth_permissions.coffee | 12 + assets/scripts/app/routes/job.coffee | 29 ++ assets/scripts/app/routes/main.coffee | 19 + assets/scripts/app/routes/main/index.coffee | 10 + .../app/routes/main/my_repositories.coffee | 9 + assets/scripts/app/routes/main/recent.coffee | 9 + .../app/routes/main/repositories.coffee | 12 + assets/scripts/app/routes/main/search.coffee | 27 ++ assets/scripts/app/routes/main_tab.coffee | 30 ++ assets/scripts/app/routes/not_found.coffee | 11 + assets/scripts/app/routes/profile.coffee | 16 + .../scripts/app/routes/pull_requests.coffee | 18 + assets/scripts/app/routes/repo.coffee | 40 ++ assets/scripts/app/routes/repo/index.coffee | 21 + assets/scripts/app/routes/request.coffee | 14 + assets/scripts/app/routes/requests.coffee | 15 + assets/scripts/app/routes/settings.coffee | 10 + .../scripts/app/routes/settings/index.coffee | 11 + .../scripts/app/routes/simple_layout.coffee | 15 + assets/scripts/app/routes/ssh_key.coffee | 36 ++ assets/scripts/app/routes/stats.coffee | 12 + 37 files changed, 635 insertions(+), 407 deletions(-) create mode 100644 assets/scripts/app/routes/abstract_builds.coffee create mode 100644 assets/scripts/app/routes/account.coffee create mode 100644 assets/scripts/app/routes/accounts.coffee create mode 100644 assets/scripts/app/routes/accounts/index.coffee create mode 100644 assets/scripts/app/routes/accounts/info.coffee create mode 100644 assets/scripts/app/routes/auth.coffee create mode 100644 assets/scripts/app/routes/branches.coffee create mode 100644 assets/scripts/app/routes/build.coffee create mode 100644 assets/scripts/app/routes/builds.coffee create mode 100644 assets/scripts/app/routes/caches.coffee create mode 100644 assets/scripts/app/routes/env_vars.coffee create mode 100644 assets/scripts/app/routes/first_sync.coffee create mode 100644 assets/scripts/app/routes/getting_started.coffee create mode 100644 assets/scripts/app/routes/insufficient_oauth_permissions.coffee create mode 100644 assets/scripts/app/routes/job.coffee create mode 100644 assets/scripts/app/routes/main.coffee create mode 100644 assets/scripts/app/routes/main/index.coffee create mode 100644 assets/scripts/app/routes/main/my_repositories.coffee create mode 100644 assets/scripts/app/routes/main/recent.coffee create mode 100644 assets/scripts/app/routes/main/repositories.coffee create mode 100644 assets/scripts/app/routes/main/search.coffee create mode 100644 assets/scripts/app/routes/main_tab.coffee create mode 100644 assets/scripts/app/routes/not_found.coffee create mode 100644 assets/scripts/app/routes/profile.coffee create mode 100644 assets/scripts/app/routes/pull_requests.coffee create mode 100644 assets/scripts/app/routes/repo.coffee create mode 100644 assets/scripts/app/routes/repo/index.coffee create mode 100644 assets/scripts/app/routes/request.coffee create mode 100644 assets/scripts/app/routes/requests.coffee create mode 100644 assets/scripts/app/routes/settings.coffee create mode 100644 assets/scripts/app/routes/settings/index.coffee create mode 100644 assets/scripts/app/routes/simple_layout.coffee create mode 100644 assets/scripts/app/routes/ssh_key.coffee create mode 100644 assets/scripts/app/routes/stats.coffee diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index 4b62306d..22f829e4 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -40,7 +40,7 @@ Travis.FirstSyncController = Em.Controller.extend isSyncing: Ember.computed.alias('user.isSyncing') -Travis.IndexErrorController = Em.Controller.extend() +Travis.MainErrorController = Em.Controller.extend() Travis.BuildsItemController = Em.ObjectController.extend(Travis.GithubUrlProperties, needs: ['builds'] isPullRequestsListBinding: 'controllers.builds.isPullRequestsList' diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 031689aa..96233579 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -44,408 +44,39 @@ Travis.Router.map -> @route 'notFound', path: "/*path" -Travis.RequestsRoute = Travis.Route.extend - needsAuth: true - setupController: -> - @_super.apply this, arguments - @controllerFor('repo').activate('requests') - - model: -> - Travis.Request.fetch repository_id: @modelFor('repo').get('id') - -Travis.CachesRoute = Travis.Route.extend - needsAuth: true - setupController: -> - @_super.apply this, arguments - @controllerFor('repo').activate('caches') - - model: -> - repo = @modelFor('repo') - Travis.ajax.get("/repos/#{repo.get('id')}/caches").then( (data) -> - groups = {} - data["caches"].forEach (cacheData) -> - branch = cacheData["branch"] - group = groups[branch] - unless group - group = groups[branch] = Ember.Object.create(branch: branch, caches: []) - cache = Ember.Object.create(cacheData) - cache.set('parent', group) - group.get('caches').pushObject(cache) - - result = [] - for branch, caches of groups - result.push caches - - result - ) - -Travis.RequestRoute = Travis.Route.extend - setupController: -> - @_super.apply this, arguments - @controllerFor('repo').activate('request') - - model: (params) -> - Travis.Request.fetch params.request_id - -Travis.GettingStartedRoute = Travis.Route.extend - renderTemplate: -> - @render('no_owned_repos') - -Travis.SimpleLayoutRoute = Travis.Route.extend - setupController: -> - $('body').attr('id', 'home') - toActivate = if @signedIn() then 'owned' else 'recent' - @container.lookup('controller:repos').activate(toActivate) - @_super.apply(this, arguments) - - renderTemplate: -> - @_super.apply(this, arguments) - -Travis.FirstSyncRoute = Travis.SimpleLayoutRoute.extend - actions: - redirectToGettingStarted: -> - # do nothing, we are showing first sync, so it's normal that there is - # no owned repos - -Travis.InsufficientOauthPermissionsRoute = Travis.SimpleLayoutRoute.extend - setupController: (controller) -> - @_super.apply this, arguments - existingUser = document.location.hash.match(/#existing[_-]user/) - controller.set('existingUser', existingUser) - -Travis.MainTabRoute = Travis.Route.extend - renderTemplate: -> - @render 'repo' - @render 'build', into: 'repo' - - setupController: -> - @_super.apply this, arguments - - @controllerFor('repo').activate('index') - @controllerFor('repos').activate(@get('reposTabName')) - - @currentRepoDidChange() - @controllerFor('repos').addObserver('firstObject', this, 'currentRepoDidChange') - - deactivate: -> - @controllerFor('repos').removeObserver('firstObject', this, 'currentRepoDidChange') - - currentRepoDidChange: -> - if repo = @controllerFor('repos').get('firstObject') - @controllerFor('repo').set('repo', repo) - - actions: - redirectToGettingStarted: -> - @transitionTo('getting_started') - -Travis.MainMyRepositoriesRoute = Travis.Route.extend - redirect: -> - @transitionTo("main.repositories") - -Travis.MainRepositoriesRoute = Travis.MainTabRoute.extend - needsAuth: true - reposTabName: 'owned' - afterModel: -> - @controllerFor('repos').possiblyRedirectToGettingStartedPage() - -Travis.MainRecentRoute = Travis.MainTabRoute.extend - reposTabName: 'recent' - -Travis.MainSearchRoute = Travis.MainTabRoute.extend - renderTemplate: -> - @render 'repo' - @render 'build', into: 'repo' - - setupController: (controller, searchPhrase) -> - # TODO: this method is almost the same as _super, refactor this - @controllerFor('repo').activate('index') - @controllerFor('repos').activate('search', searchPhrase) - - @currentRepoDidChange() - @controllerFor('repos').addObserver('firstObject', this, 'currentRepoDidChange') - - model: (params) -> - params.phrase - - deactivate: -> - @_super.apply(this, arguments) - - @controllerFor('repos').set('search', undefined) - -Travis.AbstractBuildsRoute = Travis.Route.extend - renderTemplate: -> - @render 'builds' - - setupController: -> - @controllerFor('repo').activate(@get('contentType')) - @contentDidChange() - @controllerFor('repo').addObserver(@get('path'), this, 'contentDidChange') - - deactivate: -> - @controllerFor('repo').removeObserver(@get('path'), this, 'contentDidChange') - - contentDidChange: -> - path = @get('path') - @controllerFor('builds').set('model', @controllerFor('repo').get(path)) - - path: (-> - type = @get('contentType') - "repo.#{type.camelize()}" - ).property('contentType') - -Travis.BuildsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'builds') -Travis.BranchesRoute = Travis.AbstractBuildsRoute.extend(contentType: 'branches') -Travis.PullRequestsRoute = Travis.AbstractBuildsRoute.extend( - contentType: 'pull_requests' - - # TODO: it would be better to have separate controller for branches and PRs list - setupController: (controller, model) -> - @_super(controller, model) - - this.controllerFor('builds').set('isPullRequestsList', true) - - deactivate: -> - this.controllerFor('builds').set('isPullRequestsList', false) -) - -Travis.BuildRoute = Travis.Route.extend - serialize: (model, params) -> - id = if model.get then model.get('id') else model - - { build_id: id } - - setupController: (controller, model) -> - model = Travis.Build.find(model) if model && !model.get - - repo = @controllerFor('repo') - #repo.set('build', model) - @controllerFor('build').set('build', model) - repo.activate('build') - #repo.set('build', model) - - model: (params) -> - Travis.Build.fetch(params.build_id) - - deactivate: -> - @controllerFor('job').set('job', null) - @controllerFor('build').set('build', null) - -Travis.JobRoute = Travis.Route.extend - serialize: (model, params) -> - id = if model.get then model.get('id') else model - - { job_id: id } - - setupController: (controller, model) -> - model = Travis.Job.find(model) if model && !model.get - - repo = @controllerFor('repo') - @controllerFor('job').set('job', model) - repo.activate('job') - - if build = model.get('build') - @controllerFor('build').set('build', build) - - model: (params) -> - Travis.Job.fetch(params.job_id) - - deactivate: -> - @controllerFor('build').set('build', null) - @controllerFor('job').set('job', null) - - -Travis.RepoIndexRoute = Travis.Route.extend - setupController: (controller, model) -> - @_super.apply this, arguments - @controllerFor('repo').activate('current') - - renderTemplate: -> - if @modelFor('repo').get('lastBuildId') - @render 'build' - else - @render 'builds/not_found' - - deactivate: -> - repo = @controllerFor('repo') - @controllerFor('build').set('build', null) - @controllerFor('job').set('job', null) - -Travis.RepoRoute = Travis.Route.extend - renderTemplate: -> - @render 'repo', into: 'main' - - setupController: (controller, model) -> - # TODO: if repo is just a data hash with id and slug load it - # as incomplete record - model = Travis.Repo.find(model.id) if model && !model.get - controller.set('repo', model) - - serialize: (repo) -> - slug = if repo.get then repo.get('slug') else repo.slug - [owner, name] = slug.split('/') - { owner: owner, name: name } - - model: (params) -> - slug = "#{params.owner}/#{params.name}" - Travis.Repo.fetchBySlug(slug) - - resetController: -> - @controllerFor('repo').deactivate() - - actions: - error: (error) -> - # if error throwed has a slug (ie. it was probably repo not found) - # set the slug on main.error controller to allow to properly - # display the repo information - if error.slug - this.controllerFor('main.error').set('slug', error.slug) - - # bubble to the top - return true - -Travis.MainIndexRoute = Travis.Route.extend - redirect: -> - target = if @signedIn() then 'repositories' else 'recent' - @transitionTo("main.#{target}") - -Travis.MainRoute = Travis.Route.extend - renderTemplate: -> - $('body').attr('id', 'home') - - @_super.apply this, arguments - - @render 'repos', outlet: 'left', into: 'main' - - setupController: (controller)-> - # TODO: this is redundant with repositories and recent routes - toActivate = if @signedIn() then 'owned' else 'recent' - @container.lookup('controller:repos').activate(toActivate) - -Travis.StatsRoute = Travis.Route.extend - renderTemplate: -> - $('body').attr('id', 'stats') - - @render 'stats' - -Travis.NotFoundRoute = Travis.Route.extend - renderTemplate: -> - $('body').attr('id', 'not-found') - - @render 'not_found' - -Travis.ProfileRoute = Travis.Route.extend - needsAuth: true - - setupController: (controller, model) -> - @controllerFor('accounts').set('model', model) - - renderTemplate: -> - $('body').attr('id', 'profile') - @_super.apply(this, arguments) - @render 'loading', outlet: 'left', into: 'profile' - -Travis.AccountsRoute = Travis.Route.extend - model: -> - Travis.Account.fetch(all: true) - - renderTemplate: -> - @_super.apply(this, arguments) - @render 'profile_accounts', outlet: 'left', into: 'profile' - -Travis.AccountsIndexRoute = Travis.Route.extend - redirect: -> - # TODO: setting accounts model in ProfileRoute is wrong, but - # at this stage it's better than what we had before - accounts = @modelFor('accounts') - login = @controllerFor('currentUser').get('login') - account = accounts.find (account) -> account.get('login') == login - @replaceWith 'account', account - -Travis.AccountRoute = Travis.Route.extend - setupController: (controller, account) -> - @_super.apply this, arguments - - @controllerFor('profile').activate 'hooks' - - model: (params) -> - @modelFor('accounts').find (account) -> account.get('login') == params.login - - serialize: (account) -> - if account && account.get - { login: account.get('login') } - else - {} - -Travis.AccountsInfoRoute = Travis.Route.extend - setupController: -> - user = @controllerFor('currentUser').get('model') - @controllerFor('account').set('model', user) - @controllerFor('profile').activate 'user' - - renderTemplate: -> - @render 'accounts_info' - -Travis.AuthRoute = Travis.Route.extend - needsAuth: false - - renderTemplate: -> - $('body').attr('id', 'auth') - - @render 'auth.signin' - - deactivate: -> - @controllerFor('auth').set('redirected', false) - - actions: - afterSignIn: -> - @transitionTo('index') - return true - - redirect: -> - if @signedIn() - @transitionTo('index') - -Travis.SettingsRoute = Travis.Route.extend - needsAuth: true - setupController: (controller, model) -> - @controllerFor('repo').activate('settings') - -Travis.SettingsIndexRoute = Travis.Route.extend - model: -> - repo = @modelFor('repo') - repo.fetchSettings().then (settings) -> - repo.set('settings', settings) - -Travis.EnvVarsRoute = Travis.Route.extend - model: (params) -> - repo = @modelFor('repo') - repo.get('envVars.promise') - -Travis.SshKeyRoute = Travis.Route.extend - model: (params) -> - repo = @modelFor('repo') - self = this - Travis.SshKey.fetch(repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> - if xhr.status == 404 - # if there is no model, just return null. I'm not sure if this is the - # best answer, maybe we should just redirect to different route, like - # ssh_key.new or ssh_key.no_key - return null - - afterModel: (model, transition) -> - repo = @modelFor('repo') - Travis.ajax.get "/repositories/#{repo.get('id')}/key", (data) => - @defaultKey = Ember.Object.create(fingerprint: data.fingerprint) - - setupController: (controller, model) -> - controller.reset() - @_super.apply this, arguments - - if @defaultKey - controller.set('defaultKey', @defaultKey) - @defaultKey = null - - deactivate: -> - @_super.apply(this, arguments) - - @controllerFor('ssh_key').send('cancel') +require 'routes/abstract_builds' +require 'routes/account' +require 'routes/accounts/index' +require 'routes/accounts/info' +require 'routes/accounts' +require 'routes/application' +require 'routes/auth' +require 'routes/branches' +require 'routes/build' +require 'routes/builds' +require 'routes/caches' +require 'routes/env_vars' +require 'routes/first_sync' +require 'routes/getting_started' +require 'routes/insufficient_oauth_permissions' +require 'routes/job' +require 'routes/main/index' +require 'routes/main/my_repositories' +require 'routes/main/recent' +require 'routes/main/repositories' +require 'routes/main/search' +require 'routes/main' +require 'routes/main_tab' +require 'routes/not_found' +require 'routes/profile' +require 'routes/pull_requests' +require 'routes/repo/index' +require 'routes/repo' +require 'routes/request' +require 'routes/requests' +require 'routes/route' +require 'routes/settings/index' +require 'routes/settings' +require 'routes/simple_layout' +require 'routes/ssh_key' +require 'routes/stats' diff --git a/assets/scripts/app/routes/abstract_builds.coffee b/assets/scripts/app/routes/abstract_builds.coffee new file mode 100644 index 00000000..8be8dcc2 --- /dev/null +++ b/assets/scripts/app/routes/abstract_builds.coffee @@ -0,0 +1,26 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + @render 'builds' + + setupController: -> + @controllerFor('repo').activate(@get('contentType')) + @contentDidChange() + @controllerFor('repo').addObserver(@get('path'), this, 'contentDidChange') + + deactivate: -> + @controllerFor('repo').removeObserver(@get('path'), this, 'contentDidChange') + + contentDidChange: -> + path = @get('path') + @controllerFor('builds').set('model', @controllerFor('repo').get(path)) + + path: (-> + type = @get('contentType') + "repo.#{type.camelize()}" + ).property('contentType') + +Travis.AbstractBuildsRoute = Route diff --git a/assets/scripts/app/routes/account.coffee b/assets/scripts/app/routes/account.coffee new file mode 100644 index 00000000..6d57970a --- /dev/null +++ b/assets/scripts/app/routes/account.coffee @@ -0,0 +1,20 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + setupController: (controller, account) -> + @_super.apply this, arguments + + @controllerFor('profile').activate 'hooks' + + model: (params) -> + @modelFor('accounts').find (account) -> account.get('login') == params.login + + serialize: (account) -> + if account && account.get + { login: account.get('login') } + else + {} + +Travis.AccountRoute = Route diff --git a/assets/scripts/app/routes/accounts.coffee b/assets/scripts/app/routes/accounts.coffee new file mode 100644 index 00000000..5834b65c --- /dev/null +++ b/assets/scripts/app/routes/accounts.coffee @@ -0,0 +1,15 @@ +require 'routes/route' + +Account = Travis.Account +TravisRoute = Travis.Route + +Route = TravisRoute.extend + model: -> + Account.fetch(all: true) + + renderTemplate: -> + @_super.apply(this, arguments) + @render 'profile_accounts', outlet: 'left', into: 'profile' + + +Travis.AccountsRoute = Route diff --git a/assets/scripts/app/routes/accounts/index.coffee b/assets/scripts/app/routes/accounts/index.coffee new file mode 100644 index 00000000..2cff27a1 --- /dev/null +++ b/assets/scripts/app/routes/accounts/index.coffee @@ -0,0 +1,15 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + redirect: -> + # TODO: setting accounts model in ProfileRoute is wrong, but + # at this stage it's better than what we had before + accounts = @modelFor('accounts') + login = @controllerFor('currentUser').get('login') + account = accounts.find (account) -> account.get('login') == login + @replaceWith 'account', account + + +Travis.AccountsIndexRoute = Route diff --git a/assets/scripts/app/routes/accounts/info.coffee b/assets/scripts/app/routes/accounts/info.coffee new file mode 100644 index 00000000..5ae60a67 --- /dev/null +++ b/assets/scripts/app/routes/accounts/info.coffee @@ -0,0 +1,14 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + setupController: -> + user = @controllerFor('currentUser').get('model') + @controllerFor('account').set('model', user) + @controllerFor('profile').activate 'user' + + renderTemplate: -> + @render 'accounts_info' + +Travis.AccountsInfoRoute = Route diff --git a/assets/scripts/app/routes/application.coffee b/assets/scripts/app/routes/application.coffee index 04dc6a7c..35bbe540 100644 --- a/assets/scripts/app/routes/application.coffee +++ b/assets/scripts/app/routes/application.coffee @@ -1,6 +1,6 @@ require 'routes/route' -TravisRoute = Travis.Route +TravisRoute = TravisRoute Route = TravisRoute.extend needsAuth: false diff --git a/assets/scripts/app/routes/auth.coffee b/assets/scripts/app/routes/auth.coffee new file mode 100644 index 00000000..2cbaa689 --- /dev/null +++ b/assets/scripts/app/routes/auth.coffee @@ -0,0 +1,25 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + needsAuth: false + + renderTemplate: -> + $('body').attr('id', 'auth') + + @render 'auth.signin' + + deactivate: -> + @controllerFor('auth').set('redirected', false) + + actions: + afterSignIn: -> + @transitionTo('index') + return true + + redirect: -> + if @signedIn() + @transitionTo('index') + +Travis.AuthRoute = Route diff --git a/assets/scripts/app/routes/branches.coffee b/assets/scripts/app/routes/branches.coffee new file mode 100644 index 00000000..b7059dbb --- /dev/null +++ b/assets/scripts/app/routes/branches.coffee @@ -0,0 +1,7 @@ +require 'routes/route' + +AbstractBuildsRoute = Travis.AbstractBuildsRoute + +Route = AbstractBuildsRoute.extend(contentType: 'branches') + +Travis.BranchesRoute = Route diff --git a/assets/scripts/app/routes/build.coffee b/assets/scripts/app/routes/build.coffee new file mode 100644 index 00000000..c85d9936 --- /dev/null +++ b/assets/scripts/app/routes/build.coffee @@ -0,0 +1,28 @@ +require 'routes/route' + +Build = Travis.Build +TravisRoute = Travis.Route + +Route = TravisRoute.extend + serialize: (model, params) -> + id = if model.get then model.get('id') else model + + { build_id: id } + + setupController: (controller, model) -> + model = Build.find(model) if model && !model.get + + repo = @controllerFor('repo') + #repo.set('build', model) + @controllerFor('build').set('build', model) + repo.activate('build') + #repo.set('build', model) + + model: (params) -> + Build.fetch(params.build_id) + + deactivate: -> + @controllerFor('job').set('job', null) + @controllerFor('build').set('build', null) + +Travis.BuildRoute = Route diff --git a/assets/scripts/app/routes/builds.coffee b/assets/scripts/app/routes/builds.coffee new file mode 100644 index 00000000..140145b6 --- /dev/null +++ b/assets/scripts/app/routes/builds.coffee @@ -0,0 +1,7 @@ +require 'routes/route' + +AbstractBuildsRoute = Travis.AbstractBuildsRoute + +Route = AbstractBuildsRoute.extend(contentType: 'builds') + +Travis.BuildsRoute = Route diff --git a/assets/scripts/app/routes/caches.coffee b/assets/scripts/app/routes/caches.coffee new file mode 100644 index 00000000..a6a1db7d --- /dev/null +++ b/assets/scripts/app/routes/caches.coffee @@ -0,0 +1,33 @@ +require 'routes/route' + +Request = Travis.Request +Ajax = Travis.ajax +TravisRoute = Travis.Route + +Route = TravisRoute.extend + needsAuth: true + setupController: -> + @_super.apply this, arguments + @controllerFor('repo').activate('caches') + + model: -> + repo = @modelFor('repo') + Ajax.get("/repos/#{repo.get('id')}/caches").then( (data) -> + groups = {} + data["caches"].forEach (cacheData) -> + branch = cacheData["branch"] + group = groups[branch] + unless group + group = groups[branch] = Ember.Object.create(branch: branch, caches: []) + cache = Ember.Object.create(cacheData) + cache.set('parent', group) + group.get('caches').pushObject(cache) + + result = [] + for branch, caches of groups + result.push caches + + result + ) + +Travis.CachesRoute = Route diff --git a/assets/scripts/app/routes/env_vars.coffee b/assets/scripts/app/routes/env_vars.coffee new file mode 100644 index 00000000..9f49908b --- /dev/null +++ b/assets/scripts/app/routes/env_vars.coffee @@ -0,0 +1,10 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + model: (params) -> + repo = @modelFor('repo') + repo.get('envVars.promise') + +Travis.EnvVarsRoute = Route diff --git a/assets/scripts/app/routes/first_sync.coffee b/assets/scripts/app/routes/first_sync.coffee new file mode 100644 index 00000000..66d90319 --- /dev/null +++ b/assets/scripts/app/routes/first_sync.coffee @@ -0,0 +1,12 @@ +require 'routes/route' +require 'routes/simple_layout' + +SimpleLayoutRoute = Travis.SimpleLayoutRoute + +Route = SimpleLayoutRoute.extend + actions: + redirectToGettingStarted: -> + # do nothing, we are showing first sync, so it's normal that there is + # no owned repos + +Travis.FirstSyncRoute = Route diff --git a/assets/scripts/app/routes/getting_started.coffee b/assets/scripts/app/routes/getting_started.coffee new file mode 100644 index 00000000..66c9a810 --- /dev/null +++ b/assets/scripts/app/routes/getting_started.coffee @@ -0,0 +1,9 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + @render('no_owned_repos') + +Travis.GettingStartedRoute = Route diff --git a/assets/scripts/app/routes/insufficient_oauth_permissions.coffee b/assets/scripts/app/routes/insufficient_oauth_permissions.coffee new file mode 100644 index 00000000..282174d2 --- /dev/null +++ b/assets/scripts/app/routes/insufficient_oauth_permissions.coffee @@ -0,0 +1,12 @@ +require 'routes/route' +require 'routes/simple_layout' + +SimpleLayoutRoute = Travis.SimpleLayoutRoute + +Route = SimpleLayoutRoute.extend + setupController: (controller) -> + @_super.apply this, arguments + existingUser = document.location.hash.match(/#existing[_-]user/) + controller.set('existingUser', existingUser) + +Travis.InsufficientOauthPermissionsRoute = Route diff --git a/assets/scripts/app/routes/job.coffee b/assets/scripts/app/routes/job.coffee new file mode 100644 index 00000000..60d50fdc --- /dev/null +++ b/assets/scripts/app/routes/job.coffee @@ -0,0 +1,29 @@ +require 'routes/route' + +Job = Travis.Job +TravisRoute = Travis.Route + +Route = TravisRoute.extend + serialize: (model, params) -> + id = if model.get then model.get('id') else model + + { job_id: id } + + setupController: (controller, model) -> + model = Job.find(model) if model && !model.get + + repo = @controllerFor('repo') + @controllerFor('job').set('job', model) + repo.activate('job') + + if build = model.get('build') + @controllerFor('build').set('build', build) + + model: (params) -> + Job.fetch(params.job_id) + + deactivate: -> + @controllerFor('build').set('build', null) + @controllerFor('job').set('job', null) + +Travis.JobRoute = Route diff --git a/assets/scripts/app/routes/main.coffee b/assets/scripts/app/routes/main.coffee new file mode 100644 index 00000000..b5bf6bb5 --- /dev/null +++ b/assets/scripts/app/routes/main.coffee @@ -0,0 +1,19 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + $('body').attr('id', 'home') + + @_super.apply this, arguments + + @render 'repos', outlet: 'left', into: 'main' + + setupController: (controller)-> + # TODO: this is redundant with repositories and recent routes + toActivate = if @signedIn() then 'owned' else 'recent' + @container.lookup('controller:repos').activate(toActivate) + + +Travis.MainRoute = Route diff --git a/assets/scripts/app/routes/main/index.coffee b/assets/scripts/app/routes/main/index.coffee new file mode 100644 index 00000000..d1cc2ced --- /dev/null +++ b/assets/scripts/app/routes/main/index.coffee @@ -0,0 +1,10 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + redirect: -> + target = if @signedIn() then 'repositories' else 'recent' + @transitionTo("main.#{target}") + +Travis.MainIndexRoute = Route diff --git a/assets/scripts/app/routes/main/my_repositories.coffee b/assets/scripts/app/routes/main/my_repositories.coffee new file mode 100644 index 00000000..29250a73 --- /dev/null +++ b/assets/scripts/app/routes/main/my_repositories.coffee @@ -0,0 +1,9 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + redirect: -> + @transitionTo("main.repositories") + +Travis.MainMyRepositoriesRoute = Route diff --git a/assets/scripts/app/routes/main/recent.coffee b/assets/scripts/app/routes/main/recent.coffee new file mode 100644 index 00000000..eb87a416 --- /dev/null +++ b/assets/scripts/app/routes/main/recent.coffee @@ -0,0 +1,9 @@ +require 'routes/route' +require 'routes/main_tab' + +MainTabRoute = Travis.MainTabRoute + +Route = MainTabRoute.extend + reposTabName: 'recent' + +Travis.MainRecentRoute = Route diff --git a/assets/scripts/app/routes/main/repositories.coffee b/assets/scripts/app/routes/main/repositories.coffee new file mode 100644 index 00000000..1f43e052 --- /dev/null +++ b/assets/scripts/app/routes/main/repositories.coffee @@ -0,0 +1,12 @@ +require 'routes/route' +require 'routes/main_tab' + +MainTabRoute = Travis.MainTabRoute + +Route = MainTabRoute.extend + needsAuth: true + reposTabName: 'owned' + afterModel: -> + @controllerFor('repos').possiblyRedirectToGettingStartedPage() + +Travis.MainRepositoriesRoute = Route diff --git a/assets/scripts/app/routes/main/search.coffee b/assets/scripts/app/routes/main/search.coffee new file mode 100644 index 00000000..590e9b93 --- /dev/null +++ b/assets/scripts/app/routes/main/search.coffee @@ -0,0 +1,27 @@ +require 'routes/route' +require 'routes/main_tab' + +MainTabRoute = Travis.MainTabRoute + +Route = MainTabRoute.extend + renderTemplate: -> + @render 'repo' + @render 'build', into: 'repo' + + setupController: (controller, searchPhrase) -> + # TODO: this method is almost the same as _super, refactor this + @controllerFor('repo').activate('index') + @controllerFor('repos').activate('search', searchPhrase) + + @currentRepoDidChange() + @controllerFor('repos').addObserver('firstObject', this, 'currentRepoDidChange') + + model: (params) -> + params.phrase + + deactivate: -> + @_super.apply(this, arguments) + + @controllerFor('repos').set('search', undefined) + +Travis.MainSearchRoute = Route diff --git a/assets/scripts/app/routes/main_tab.coffee b/assets/scripts/app/routes/main_tab.coffee new file mode 100644 index 00000000..28c4872f --- /dev/null +++ b/assets/scripts/app/routes/main_tab.coffee @@ -0,0 +1,30 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + @render 'repo' + @render 'build', into: 'repo' + + setupController: -> + @_super.apply this, arguments + + @controllerFor('repo').activate('index') + @controllerFor('repos').activate(@get('reposTabName')) + + @currentRepoDidChange() + @controllerFor('repos').addObserver('firstObject', this, 'currentRepoDidChange') + + deactivate: -> + @controllerFor('repos').removeObserver('firstObject', this, 'currentRepoDidChange') + + currentRepoDidChange: -> + if repo = @controllerFor('repos').get('firstObject') + @controllerFor('repo').set('repo', repo) + + actions: + redirectToGettingStarted: -> + @transitionTo('getting_started') + +Travis.MainTabRoute = Route diff --git a/assets/scripts/app/routes/not_found.coffee b/assets/scripts/app/routes/not_found.coffee new file mode 100644 index 00000000..49feb919 --- /dev/null +++ b/assets/scripts/app/routes/not_found.coffee @@ -0,0 +1,11 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + $('body').attr('id', 'not-found') + + @render 'not_found' + +Travis.NotFoundRoute = Route diff --git a/assets/scripts/app/routes/profile.coffee b/assets/scripts/app/routes/profile.coffee new file mode 100644 index 00000000..be14a502 --- /dev/null +++ b/assets/scripts/app/routes/profile.coffee @@ -0,0 +1,16 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + needsAuth: true + + setupController: (controller, model) -> + @controllerFor('accounts').set('model', model) + + renderTemplate: -> + $('body').attr('id', 'profile') + @_super.apply(this, arguments) + @render 'loading', outlet: 'left', into: 'profile' + +Travis.ProfileRoute = Route diff --git a/assets/scripts/app/routes/pull_requests.coffee b/assets/scripts/app/routes/pull_requests.coffee new file mode 100644 index 00000000..cf908fbf --- /dev/null +++ b/assets/scripts/app/routes/pull_requests.coffee @@ -0,0 +1,18 @@ +require 'routes/route' + +AbstractBuildsRoute = Travis.AbstractBuildsRoute + +Route = AbstractBuildsRoute.extend( + contentType: 'pull_requests' + + # TODO: it would be better to have separate controller for branches and PRs list + setupController: (controller, model) -> + @_super(controller, model) + + this.controllerFor('builds').set('isPullRequestsList', true) + + deactivate: -> + this.controllerFor('builds').set('isPullRequestsList', false) +) + +Travis.PullRequestsRoute = Route diff --git a/assets/scripts/app/routes/repo.coffee b/assets/scripts/app/routes/repo.coffee new file mode 100644 index 00000000..9fe65b3b --- /dev/null +++ b/assets/scripts/app/routes/repo.coffee @@ -0,0 +1,40 @@ +require 'routes/route' +require 'models/repo' + +Repo = Travis.Repo +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + @render 'repo', into: 'main' + + setupController: (controller, model) -> + # TODO: if repo is just a data hash with id and slug load it + # as incomplete record + model = Repo.find(model.id) if model && !model.get + controller.set('repo', model) + + serialize: (repo) -> + slug = if repo.get then repo.get('slug') else repo.slug + [owner, name] = slug.split('/') + { owner: owner, name: name } + + model: (params) -> + slug = "#{params.owner}/#{params.name}" + Repo.fetchBySlug(slug) + + resetController: -> + @controllerFor('repo').deactivate() + + actions: + error: (error) -> + # if error throwed has a slug (ie. it was probably repo not found) + # set the slug on main.error controller to allow to properly + # display the repo information + if error.slug + this.controllerFor('main.error').set('slug', error.slug) + + # bubble to the top + return true + +Travis.RepoRoute = Route diff --git a/assets/scripts/app/routes/repo/index.coffee b/assets/scripts/app/routes/repo/index.coffee new file mode 100644 index 00000000..3d8257b3 --- /dev/null +++ b/assets/scripts/app/routes/repo/index.coffee @@ -0,0 +1,21 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + setupController: (controller, model) -> + @_super.apply this, arguments + @controllerFor('repo').activate('current') + + renderTemplate: -> + if @modelFor('repo').get('lastBuildId') + @render 'build' + else + @render 'builds/not_found' + + deactivate: -> + repo = @controllerFor('repo') + @controllerFor('build').set('build', null) + @controllerFor('job').set('job', null) + +Travis.RepoIndexRoute = Route diff --git a/assets/scripts/app/routes/request.coffee b/assets/scripts/app/routes/request.coffee new file mode 100644 index 00000000..bca14684 --- /dev/null +++ b/assets/scripts/app/routes/request.coffee @@ -0,0 +1,14 @@ +require 'routes/route' + +Request = Travis.Request +TravisRoute = Travis.Route + +Route = TravisRoute.extend + setupController: -> + @_super.apply this, arguments + @controllerFor('repo').activate('request') + + model: (params) -> + Request.fetch params.request_id + +Travis.RequestRoute = Route diff --git a/assets/scripts/app/routes/requests.coffee b/assets/scripts/app/routes/requests.coffee new file mode 100644 index 00000000..ac60955b --- /dev/null +++ b/assets/scripts/app/routes/requests.coffee @@ -0,0 +1,15 @@ +require 'routes/route' + +TravisRoute = Travis.Route +Request = Travis.Request + +Route = TravisRoute.extend + needsAuth: true + setupController: -> + @_super.apply this, arguments + @controllerFor('repo').activate('requests') + + model: -> + Request.fetch repository_id: @modelFor('repo').get('id') + +Travis.RequestRoute = Route diff --git a/assets/scripts/app/routes/settings.coffee b/assets/scripts/app/routes/settings.coffee new file mode 100644 index 00000000..17513bb5 --- /dev/null +++ b/assets/scripts/app/routes/settings.coffee @@ -0,0 +1,10 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + needsAuth: true + setupController: (controller, model) -> + @controllerFor('repo').activate('settings') + +Travis.SettingsRoute = Route diff --git a/assets/scripts/app/routes/settings/index.coffee b/assets/scripts/app/routes/settings/index.coffee new file mode 100644 index 00000000..bcee0222 --- /dev/null +++ b/assets/scripts/app/routes/settings/index.coffee @@ -0,0 +1,11 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + model: -> + repo = @modelFor('repo') + repo.fetchSettings().then (settings) -> + repo.set('settings', settings) + +Travis.SettingsIndexRoute = Route diff --git a/assets/scripts/app/routes/simple_layout.coffee b/assets/scripts/app/routes/simple_layout.coffee new file mode 100644 index 00000000..39e7cc86 --- /dev/null +++ b/assets/scripts/app/routes/simple_layout.coffee @@ -0,0 +1,15 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + setupController: -> + $('body').attr('id', 'home') + toActivate = if @signedIn() then 'owned' else 'recent' + @container.lookup('controller:repos').activate(toActivate) + @_super.apply(this, arguments) + + renderTemplate: -> + @_super.apply(this, arguments) + +Travis.SimpleLayoutRoute = Route diff --git a/assets/scripts/app/routes/ssh_key.coffee b/assets/scripts/app/routes/ssh_key.coffee new file mode 100644 index 00000000..6aaaa362 --- /dev/null +++ b/assets/scripts/app/routes/ssh_key.coffee @@ -0,0 +1,36 @@ +require 'routes/route' + +SshKey = Travis.SshKey +Ajax = Travis.ajax +TravisRoute = Travis.Route + +Route = TravisRoute.extend + model: (params) -> + repo = @modelFor('repo') + self = this + SshKey.fetch(repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> + if xhr.status == 404 + # if there is no model, just return null. I'm not sure if this is the + # best answer, maybe we should just redirect to different route, like + # ssh_key.new or ssh_key.no_key + return null + + afterModel: (model, transition) -> + repo = @modelFor('repo') + Ajax.get "/repositories/#{repo.get('id')}/key", (data) => + @defaultKey = Ember.Object.create(fingerprint: data.fingerprint) + + setupController: (controller, model) -> + controller.reset() + @_super.apply this, arguments + + if @defaultKey + controller.set('defaultKey', @defaultKey) + @defaultKey = null + + deactivate: -> + @_super.apply(this, arguments) + + @controllerFor('ssh_key').send('cancel') + +Travis.SshKeyRoute = Route diff --git a/assets/scripts/app/routes/stats.coffee b/assets/scripts/app/routes/stats.coffee new file mode 100644 index 00000000..2b39dae0 --- /dev/null +++ b/assets/scripts/app/routes/stats.coffee @@ -0,0 +1,12 @@ +require 'routes/route' + +TravisRoute = Travis.Route + +Route = TravisRoute.extend + renderTemplate: -> + $('body').attr('id', 'stats') + + @render 'stats' + + +Travis.StatsRoute = Route