From 57edf811b75841677af5146f9256483b6df45b21 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Thu, 27 Feb 2014 17:03:52 +0100 Subject: [PATCH] Add requests page --- assets/scripts/app/app.coffee | 4 ++- assets/scripts/app/controllers.coffee | 3 +- assets/scripts/app/controllers/repo.coffee | 9 ++++- assets/scripts/app/controllers/request.coffee | 21 ++++++++++++ .../scripts/app/controllers/requests.coffee | 1 + assets/scripts/app/helpers/handlebars.coffee | 2 +- assets/scripts/app/models.coffee | 1 + assets/scripts/app/models/request.coffee | 30 ++++++++++++++++ assets/scripts/app/routes.coffee | 34 +++++++++++++++++++ assets/scripts/app/templates/index/error.hbs | 10 ++++-- assets/scripts/app/templates/repo/loading.hbs | 1 + .../scripts/app/templates/repos/show/tabs.hbs | 20 +++++++++++ .../app/templates/repos/show/tools.hbs | 3 ++ assets/scripts/app/templates/request.hbs | 22 ++++++++++++ assets/scripts/app/templates/requests.hbs | 34 +++++++++++++++++++ assets/scripts/app/views/repo/show.coffee | 18 ++++++++++ assets/styles/requests.sass | 17 ++++++++++ assets/styles/status.sass | 16 +++++---- assets/styles/tabs.sass | 4 ++- 19 files changed, 235 insertions(+), 15 deletions(-) create mode 100644 assets/scripts/app/controllers/request.coffee create mode 100644 assets/scripts/app/controllers/requests.coffee create mode 100644 assets/scripts/app/models/request.coffee create mode 100644 assets/scripts/app/templates/repo/loading.hbs create mode 100644 assets/scripts/app/templates/request.hbs create mode 100644 assets/scripts/app/templates/requests.hbs create mode 100644 assets/styles/requests.sass diff --git a/assets/scripts/app/app.coffee b/assets/scripts/app/app.coffee index ef4b2682..20002ac0 100644 --- a/assets/scripts/app/app.coffee +++ b/assets/scripts/app/app.coffee @@ -22,10 +22,12 @@ unless window.TravisApplication workers: Travis.Worker annotation: Travis.Annotation annotations: Travis.Annotation + request: Travis.Request + requests: Travis.Request ).property() modelClasses: (-> - [Travis.User, Travis.Build, Travis.Job, Travis.Repo, Travis.Commit, Travis.Worker, Travis.Account, Travis.Broadcast, Travis.Hook, Travis.Annotation] + [Travis.User, Travis.Build, Travis.Job, Travis.Repo, Travis.Commit, Travis.Worker, Travis.Account, Travis.Broadcast, Travis.Hook, Travis.Annotation, Travis.Request] ).property() setup: -> diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index 488e3eb7..14b33440 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -72,4 +72,5 @@ require 'controllers/repo' require 'controllers/stats' require 'controllers/current_user' require 'controllers/account_index' - +require 'controllers/request' +require 'controllers/requests' diff --git a/assets/scripts/app/controllers/repo.coffee b/assets/scripts/app/controllers/repo.coffee index 88276d71..5113fa52 100644 --- a/assets/scripts/app/controllers/repo.coffee +++ b/assets/scripts/app/controllers/repo.coffee @@ -1,8 +1,9 @@ Travis.RepoController = Travis.Controller.extend - needs: ['repos', 'currentUser', 'build'] + needs: ['repos', 'currentUser', 'build', 'request'] currentUserBinding: 'controllers.currentUser' build: Ember.computed.alias('controllers.build.build') + request: Ember.computed.alias('controllers.request.model') slug: (-> @get('repo.slug') ).property('repo.slug') isLoading: (-> @get('repo.isLoading') ).property('repo.isLoading') @@ -49,6 +50,12 @@ Travis.RepoController = Travis.Controller.extend viewJob: -> @connectTab('job') + viewRequests: -> + @connectTab('requests') + + viewRequest: -> + @connectTab('request') + lastBuildDidChange: -> Ember.run.scheduleOnce('data', this, @_lastBuildDidChange); diff --git a/assets/scripts/app/controllers/request.coffee b/assets/scripts/app/controllers/request.coffee new file mode 100644 index 00000000..e825c410 --- /dev/null +++ b/assets/scripts/app/controllers/request.coffee @@ -0,0 +1,21 @@ +Travis.RequestController = Ember.ObjectController.extend + requestClass: (-> + if @get('content.isAccepted') + 'accepted' + else + 'rejected' + ).property('content.isAccepted') + + type: (-> + if @get('isPullRequest') + 'Pull request' + else + 'Push' + ).property('isPullRequest') + + status: (-> + if @get('isAccepted') + 'Accepted' + else + 'Rejected' + ).property('isAccepted') diff --git a/assets/scripts/app/controllers/requests.coffee b/assets/scripts/app/controllers/requests.coffee new file mode 100644 index 00000000..3ea2a4a2 --- /dev/null +++ b/assets/scripts/app/controllers/requests.coffee @@ -0,0 +1 @@ +Travis.RequestsController = Ember.ArrayController.extend() diff --git a/assets/scripts/app/helpers/handlebars.coffee b/assets/scripts/app/helpers/handlebars.coffee index 08a59ab5..06944266 100644 --- a/assets/scripts/app/helpers/handlebars.coffee +++ b/assets/scripts/app/helpers/handlebars.coffee @@ -319,7 +319,7 @@ Ember.Handlebars.helper('formatCommit', (commit) -> safe Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')) if commit , 'sha', 'branch') -Ember.registerBoundHelper 'formatSha', (sha, options) -> +Ember.Handlebars.helper 'formatSha', (sha) -> safe Travis.Helpers.formatSha(sha) Ember.registerBoundHelper 'pathFrom', (url, options) -> diff --git a/assets/scripts/app/models.coffee b/assets/scripts/app/models.coffee index 6526b5b1..c2efe38d 100644 --- a/assets/scripts/app/models.coffee +++ b/assets/scripts/app/models.coffee @@ -10,6 +10,7 @@ require 'models/job' require 'models/log' require 'models/annotation' require 'models/repo' +require 'models/request' require 'models/user' require 'models/worker' diff --git a/assets/scripts/app/models/request.coffee b/assets/scripts/app/models/request.coffee new file mode 100644 index 00000000..4b23c1b3 --- /dev/null +++ b/assets/scripts/app/models/request.coffee @@ -0,0 +1,30 @@ +require 'travis/model' + +@Travis.Request = Travis.Model.extend + id: Ember.attr('string') + created_at: Ember.attr('string') + event_type: Ember.attr('string') + result: Ember.attr('string') + message: Ember.attr('string') + headCommit: Ember.attr('string') + baseCommit: Ember.attr('string') + branchName: Ember.attr('string', key: 'branch') + tagName: Ember.attr('string', key: 'tag') + pullRequest: Ember.attr('boolean') + pullRequestTitle: Ember.attr('string') + pullRequestNumber: Ember.attr(Number) + + repo: Ember.belongsTo('Travis.Request', key: 'repository_id') + commit: Ember.belongsTo('Travis.Commit', key: 'commit_id') + build: Ember.belongsTo('Travis.Build', key: 'build_id') + + isAccepted: (-> + # For some reason some of the requests have a null result beside the fact that + # the build was created. We need to look into it, but for now we can just assume + # that if build was created, the request was accepted + @get('result') == 'accepted' || @get('build') + ).property('result') + + isPullRequest: (-> + @get('event_type') == 'pull_request' + ).property('event_type') diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index a9a034b5..0f13a799 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -80,6 +80,8 @@ Travis.Router.map -> @resource 'builds', path: '/builds' @resource 'pullRequests', path: '/pull_requests' @resource 'branches', path: '/branches' + @resource 'requests', path: '/requests' + @resource 'request', path: '/requests/:request_id' # this can't be nested in repo, because we want a set of different # templates rendered for settings (for example no "current", "builds", ... tabs) @@ -111,6 +113,38 @@ Travis.SetupLastBuild = Ember.Mixin.create Ember.run.next => @render('builds/not_found', into: 'repo', outlet: 'pane') +Travis.RepoLoadingRoute = Travis.Route.extend + renderTemplate: -> + # TODO: the main outlet used on repo level is called 'pane' + # which makes a few things quite hard with current Ember.js + # conventions. Here, we need to specify render behaviour + # of a loading route explicitly, because otherwise it will + # render into 'main' outlet. It would be nice to change + # pane outlet into main outlet at some point + @render 'repo/loading', into: 'repo', outlet: 'pane' + +Travis.RequestsRoute = Travis.Route.extend + renderTemplate: -> + @render 'requests', into: 'repo', outlet: 'pane' + + setupController: -> + @_super.apply this, arguments + @controllerFor('repo').activate('requests') + + model: -> + Travis.Request.fetch repository_id: @modelFor('repo').get('id') + +Travis.RequestRoute = Travis.Route.extend + renderTemplate: -> + @render 'request', into: 'repo', outlet: 'pane' + + 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') diff --git a/assets/scripts/app/templates/index/error.hbs b/assets/scripts/app/templates/index/error.hbs index 57d6f053..96bae54e 100644 --- a/assets/scripts/app/templates/index/error.hbs +++ b/assets/scripts/app/templates/index/error.hbs @@ -1,3 +1,7 @@ -
- The repository at {{slug}} was not found. -
+{{#if slug}} +
+ The repository at {{slug}} was not found. +
+{{else}} +

There was an error while loading data, please try again

+{{/if}} diff --git a/assets/scripts/app/templates/repo/loading.hbs b/assets/scripts/app/templates/repo/loading.hbs new file mode 100644 index 00000000..0277cf2e --- /dev/null +++ b/assets/scripts/app/templates/repo/loading.hbs @@ -0,0 +1 @@ +
Loading
diff --git a/assets/scripts/app/templates/repos/show/tabs.hbs b/assets/scripts/app/templates/repos/show/tabs.hbs index 4ff5617f..6951874f 100644 --- a/assets/scripts/app/templates/repos/show/tabs.hbs +++ b/assets/scripts/app/templates/repos/show/tabs.hbs @@ -57,4 +57,24 @@ {{/if}} +
  • +
    + {{#if repo.slug}} + {{#link-to "requests" repo}} + Requests + {{/link-to}} + {{/if}} +
    +
  • +
  • +
    + {{#if request.id}} + {{#if repo.slug}} + {{#link-to "request" repo request}} + Request #{{request.id}} + {{/link-to}} + {{/if}} + {{/if}} +
    +
  • diff --git a/assets/scripts/app/templates/repos/show/tools.hbs b/assets/scripts/app/templates/repos/show/tools.hbs index 34aed4f1..bfc24675 100644 --- a/assets/scripts/app/templates/repos/show/tools.hbs +++ b/assets/scripts/app/templates/repos/show/tools.hbs @@ -16,6 +16,9 @@ {{#link-to "repo.settings" view.repo}}Settings{{/link-to}} {{/if}} +
  • + {{#link-to "requests" view.repo}}Requests{{/link-to}} +
  • diff --git a/assets/scripts/app/templates/request.hbs b/assets/scripts/app/templates/request.hbs new file mode 100644 index 00000000..82264dcc --- /dev/null +++ b/assets/scripts/app/templates/request.hbs @@ -0,0 +1,22 @@ +
    +

    {{status}}{{#unless isAccepted}}: {{message}}{{/unless}}

    + +

    + {{#if isPullRequest}} + This request is based on the + #{{pullRequestNumber}} + pull request. + {{else}} + This request is based on a commit {{formatCommit commit}} by {{commit.authorName}} + pushed to + {{#if branchName}} + to {{branchName}} + {{/if}} + {{/if}} +

    + {{#if build}} +

    + A build created based on this request: {{#link-to "build" build}}#{{build.number}}{{/link-to}} +

    + {{/if}} +
    diff --git a/assets/scripts/app/templates/requests.hbs b/assets/scripts/app/templates/requests.hbs new file mode 100644 index 00000000..0b1c78f1 --- /dev/null +++ b/assets/scripts/app/templates/requests.hbs @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + {{#each request in controller itemController="request"}} + + + + + + + + + {{/each}} + +
    IdCommitBuildCommit messageTypeMessage
    + + {{request.id}} + {{formatSha request.commit.sha}} + {{#if build}} + {{#link-to "build" build}}#{{build.number}}{{/link-to}} + {{else}} + - + {{/if}} + {{{formatMessage request.commit.message short="true" repoBinding=build.repo}}}{{request.type}}{{request.message}}
    diff --git a/assets/scripts/app/views/repo/show.coffee b/assets/scripts/app/views/repo/show.coffee index 40234e73..38618e1c 100644 --- a/assets/scripts/app/views/repo/show.coffee +++ b/assets/scripts/app/views/repo/show.coffee @@ -66,10 +66,19 @@ Travis.reopen classes.join(' ') ).property('tab') + # TODO: refactor tabs, most of the things here are not really DRY classJob: (-> 'active display-inline' if @get('tab') == 'job' ).property('tab') + classRequests: (-> + 'active display-inline' if @get('tab') == 'requests' + ).property('tab') + + classRequest: (-> + 'active display-inline' if @get('tab') == 'request' + ).property('tab') + RepoShowToolsView: Travis.View.extend templateName: 'repos/show/tools' @@ -80,6 +89,15 @@ Travis.reopen currentUserBinding: 'controller.currentUser' slugBinding: 'controller.repo.slug' + + didInsertElement: -> + self = this + $('.menu a').on 'click', -> + self.closeMenu() + + willRemoveElement: -> + $('.menu a').off 'click' + closeMenu: -> $('.menu').removeClass('display') diff --git a/assets/styles/requests.sass b/assets/styles/requests.sass new file mode 100644 index 00000000..bd2eac17 --- /dev/null +++ b/assets/styles/requests.sass @@ -0,0 +1,17 @@ +@import "_mixins/all" + +#request + h3 + font-size: 120% + padding-left: 15px + background-position: 0px 6px + &.accepted + h3 + background-image: inline-image('icons/state-passed.svg') + color: $color-text-status-passed + &.rejected + h3 + background-image: inline-image('icons/state-failed.svg') + color: $color-text-status-failed + .pr-number + border-bottom: dotted black 1px diff --git a/assets/styles/status.sass b/assets/styles/status.sass index 5f27f828..8e701646 100644 --- a/assets/styles/status.sass +++ b/assets/styles/status.sass @@ -13,7 +13,7 @@ #repos .yellow, .yellow #summary .number, -.list .yellow .number, +.list .yellow .number .status background-image: inline-image('icons/state-pending.svg') a @@ -21,7 +21,8 @@ #repos .green, .green #summary .number, -.list .green .number +.list .green .number, +#requests .accepted .request-id .status background-image: inline-image('icons/state-passed.svg') a @@ -29,7 +30,8 @@ #repos .red, .red #summary .number, -.list .red .number +.list .red .number, +#requests .rejected .request-id .status background-image: inline-image('icons/state-failed.svg') a @@ -50,20 +52,20 @@ table.list tr:hover td background-color: $color-bg-job-highlight - .green + .green, .accepted td background-color: $color-bg-job-passed &:hover td background-color: $color-bg-job-passed-highlight - .number a + .number a, .request-id a color: $color-text-status-passed - .red + .red, .rejected td background-color: $color-bg-job-failed &:hover td background-color: $color-bg-job-failed-highlight - .number a + .number a, .request-id a color: $color-text-status-failed .gray diff --git a/assets/styles/tabs.sass b/assets/styles/tabs.sass index 1e48efb5..230bba11 100644 --- a/assets/styles/tabs.sass +++ b/assets/styles/tabs.sass @@ -68,7 +68,9 @@ margin-top: 20px #tab_build, - #tab_job + #tab_job, + #tab_request, + #tab_requests display: none #profile