diff --git a/assets/images/icons/align-justify.png b/assets/images/icons/align-justify.png new file mode 100755 index 00000000..96bfc24b Binary files /dev/null and b/assets/images/icons/align-justify.png differ diff --git a/assets/images/icons/off.png b/assets/images/icons/off.png new file mode 100755 index 00000000..1282e2f3 Binary files /dev/null and b/assets/images/icons/off.png differ diff --git a/assets/images/icons/repeat.png b/assets/images/icons/repeat.png new file mode 100755 index 00000000..f89bf28b Binary files /dev/null and b/assets/images/icons/repeat.png differ diff --git a/assets/scripts/app/controllers/build.coffee b/assets/scripts/app/controllers/build.coffee index 493b710a..2446117b 100644 --- a/assets/scripts/app/controllers/build.coffee +++ b/assets/scripts/app/controllers/build.coffee @@ -3,6 +3,8 @@ Travis.BuildController = Ember.Controller.extend repoBinding: 'controllers.repo.repo' commitBinding: 'build.commit' lineNumberBinding: 'controllers.repo.lineNumber' + currentUserBinding: 'controllers.repo.currentUser' + tabBinding: 'controllers.repo.tab' currentItemBinding: 'build' diff --git a/assets/scripts/app/controllers/job.coffee b/assets/scripts/app/controllers/job.coffee index 3f94343c..417e3eb3 100644 --- a/assets/scripts/app/controllers/job.coffee +++ b/assets/scripts/app/controllers/job.coffee @@ -5,6 +5,8 @@ Travis.JobController = Em.Controller.extend repoBinding: 'controllers.repo.repo' commitBinding: 'job.commit' lineNumberBinding: 'controllers.repo.lineNumber' + currentUserBinding: 'controllers.repo.currentUser' + tabBinding: 'controllers.repo.tab' currentItemBinding: 'job' diff --git a/assets/scripts/app/templates/builds/show.hbs b/assets/scripts/app/templates/builds/show.hbs index 282c44d1..8d549afb 100644 --- a/assets/scripts/app/templates/builds/show.hbs +++ b/assets/scripts/app/templates/builds/show.hbs @@ -44,6 +44,7 @@ {{/with}} +
{{description}}
{{view Travis.RepoShowTabsView}} - {{view Travis.RepoShowToolsView}} + {{view Travis.RepoActionsView}} {{/with}}- Yes! Do it! + Yes, do it! or Cancel
diff --git a/assets/scripts/app/views/repo/show.coffee b/assets/scripts/app/views/repo/show.coffee index f5dd9435..03a6e149 100644 --- a/assets/scripts/app/views/repo/show.coffee +++ b/assets/scripts/app/views/repo/show.coffee @@ -88,13 +88,56 @@ Travis.reopen $('#tools .menu').toggleClass('display') event.stopPropagation() + regenerateKeyPopup: -> + if @get('canRegenerateKey') + @set('active', true) + @closeMenu() + @popup(event) + event.stopPropagation() + + 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.'}]) + + displayRegenerateKey: true + + canRegenerateKey: (-> + @get('displayRegenerateKey') && @get('hasPermission') + ).property('hasPermission') + + hasPermission: (-> + if permissions = @get('currentUser.permissions') + permissions.contains parseInt(@get('repo.id')) + ).property('currentUser.permissions.length', 'repo.id') + + RepoActionsView: Travis.View.extend + templateName: 'repos/show/actions' + + repoBinding: 'controller.repo' + buildBinding: 'controller.build' + jobBinding: 'controller.job' + tabBinding: 'controller.tab' + slugBinding: 'controller.repo.slug' + currentUserBinding: 'controller.currentUser' + + statusImageUrl: (-> + "/#{@get('slug')}.png" + ).property('slug') + + displayStatusImages: (-> + @get('hasPermission') + ).property('hasPermission') + requeue: -> - @closeMenu() @get('build').requeue() cancelBuild: -> if @get('canCancelBuild') - @closeMenu() Travis.flash(notice: 'Build cancelation has been scheduled.') @get('build').cancel().then -> Travis.flash(success: 'Build has been successfuly canceled.') @@ -108,7 +151,6 @@ Travis.reopen cancelJob: -> if @get('canCancelJob') - @closeMenu() Travis.flash(notice: 'Job cancelation has been scheduled.') @get('job').cancel().then -> Travis.flash(success: 'Job has been successfuly canceled.') @@ -120,42 +162,10 @@ Travis.reopen else Travis.flash(error: 'An error occured when canceling the job') - statusImages: -> - @set('active', true) - @closeMenu() - @popupCloseAll() - view = Travis.StatusImagesView.create(toolsView: this) - # TODO: create a general mechanism for managing current popup - # and move all popups to use it - Travis.View.currentPopupView = view - view.appendTo($('body')) - event.stopPropagation() - - regenerateKeyPopup: -> - if @get('canRegenerateKey') - @set('active', true) - @closeMenu() - @popup(event) - event.stopPropagation() - - requeueBuild: -> - if @get('canRequeueBuild') - @closeMenu() - @get('build').requeue() - - requeueJob: -> - if @get('canRequeueJob') - @closeMenu() - @get('job').requeue() - - 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.'}]) + hasPermission: (-> + if permissions = @get('currentUser.permissions') + permissions.contains parseInt(@get('repo.id')) + ).property('currentUser.permissions.length', 'repo.id') displayRequeueBuild: (-> @get('isBuildTab') && @get('build.isFinished') @@ -203,22 +213,27 @@ Travis.reopen @get('isJobTab') && @get('job.canCancel') ).property('isJobTab', 'job.canCancel') - displayRegenerateKey: true - - canRegenerateKey: (-> - @get('displayRegenerateKey') && @get('hasPermission') - ).property('hasPermission') - - isJobTab: (-> @get('tab') == 'job' - ).property('tab') + ).property('tab', 'repo.id') isBuildTab: (-> ['current', 'build'].indexOf(@get('tab')) > -1 ).property('tab') - hasPermission: (-> - if permissions = @get('currentUser.permissions') - permissions.contains parseInt(@get('repo.id')) - ).property('currentUser.permissions.length', 'repo.id') + requeueBuild: -> + if @get('canRequeueBuild') + @get('build').requeue() + + requeueJob: -> + if @get('canRequeueJob') + @get('job').requeue() + + statusImages: -> + @popupCloseAll() + view = Travis.StatusImagesView.create(toolsView: this) + Travis.View.currentPopupView = view + view.appendTo($('body')) + event.stopPropagation() + + diff --git a/assets/styles/layout.sass b/assets/styles/layout.sass index c4cbe3ed..b87026fa 100644 --- a/assets/styles/layout.sass +++ b/assets/styles/layout.sass @@ -55,7 +55,7 @@ html, body -moz-box-flex: 4 -webkit-box-flex: 4 position: relative - min-width: 630px + min-width: 760px padding: 20px 40px 80px 30px #right diff --git a/assets/styles/main/tools.sass b/assets/styles/main/tools.sass index 7f85a225..792c398e 100644 --- a/assets/styles/main/tools.sass +++ b/assets/styles/main/tools.sass @@ -4,13 +4,16 @@ position: relative float: right top: 2px - & > a + width: 200px + + & > a.menu-popup-button display: block width: 39px height: 21px margin-top: -27px background: inline-image('ui/tools-button.png') no-repeat cursor: pointer + float: right .menu display: none @@ -32,3 +35,55 @@ &.disabled cursor: default color: $color-link-disabled + +#actions + float: right + text-align: right + + li#status-image-popup + opacity: 0.5 + &:hover + opacity: 1.0 + + li.icon + a + -webkit-border-radius: .5em + -moz-border-radius: .5em + border-radius: .5em + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2) + -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.2) + box-shadow: 0 1px 2px rgba(0,0,0,0.2) + display: inline-block + width: 22px + height: 20px + position: relative + top: -2px + cursor: pointer + color: #fef4e9 + border: solid 1px #afafaf + background: #eee + background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee)) + background: -moz-linear-gradient(top, #fff, #eee) + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#faa51a', endColorstr='#f47a20') + text-align: center + margin-left: 5px + + img + width: 15px + height: 15px + margin-top: 3px + margin-left: 0px + + &:hover + opacity: 1.0 + + &.disabled + opacity: 0.6 + display: none + visibility: hidden + + ul + margin-top: -27px + + li + display: inline