diff --git a/assets/scripts/app/templates/queues/list.hbs b/assets/scripts/app/templates/queues/list.hbs index 04559c0a..62bcebf8 100644 --- a/assets/scripts/app/templates/queues/list.hbs +++ b/assets/scripts/app/templates/queues/list.hbs @@ -18,6 +18,12 @@ {{t no_job}} {{/each}} + + {{#if queue.isMore}} + + {{queue.leftLength}} more jobs - show more + + {{/if}} {{/each}} diff --git a/assets/scripts/app/views/sidebar.coffee b/assets/scripts/app/views/sidebar.coffee index 66256123..27a0fd6b 100644 --- a/assets/scripts/app/views/sidebar.coffee +++ b/assets/scripts/app/views/sidebar.coffee @@ -38,10 +38,14 @@ templateName: 'queues/list' controller: Em.ArrayController.create() + loadMoreJobs: (event) -> + queue = event.context + queue.incrementProperty('limit', 20) + didInsertElement: -> queues = for queue in Travis.QUEUES - Em.ArrayController.create - content: Travis.Job.queued(queue.name) + Travis.LimitedArray.create + content: Travis.Job.queued(queue.name), limit: 15 id: "queue_#{queue.name}" name: queue.display @set 'controller.content', queues diff --git a/assets/scripts/lib/travis/limited_array.coffee b/assets/scripts/lib/travis/limited_array.coffee index fc6e4d35..1aa11412 100644 --- a/assets/scripts/lib/travis/limited_array.coffee +++ b/assets/scripts/lib/travis/limited_array.coffee @@ -8,17 +8,42 @@ Travis.LimitedArray = Em.ArrayProxy.extend arrangedContent: (-> if content = @get('content') content.slice(0, @get('limit')) - ).property('content') + ).property('content', 'limit') + + totalLength: (-> + @get('content.length') + ).property('content.length') + + leftLength: (-> + totalLength = @get('totalLength') + limit = @get('limit') + if totalLength > limit + totalLength - limit + else + 0 + ).property('totalLength', 'limit') + + isMore: (-> + @get('leftLength') > 0 + ).property('leftLength') contentArrayDidChange: (array, index, removedCount, addedCount) -> @_super.apply this, arguments - if addedCount > 0 + + limit = @get 'limit' + arrangedContent = @get('arrangedContent') + length = arrangedContent.get 'length' + + if addedCount > 0 && length < limit addedObjects = array.slice(index, index + addedCount) - arrangedContent = @get('arrangedContent') for object in addedObjects arrangedContent.unshiftObject(object) - limit = @get 'limit' - length = arrangedContent.get 'length' - if length > limit - arrangedContent.replace(limit, length - limit) + if removedCount + removedObjects = array.slice(index, index + removedCount); + arrangedContent.removeObjects(removedObjects) + + if length > limit + arrangedContent.replace(limit, length - limit) + else if length < limit + @set('arrangedContent', @get('content').slice(0, @get('limit'))) diff --git a/assets/styles/right.sass b/assets/styles/right.sass index af5986f8..dca370dc 100644 --- a/assets/styles/right.sass +++ b/assets/styles/right.sass @@ -37,3 +37,6 @@ &:hover background-color: $color-border-slider-hover +#right .show-more-jobs + text-decoration: underline + cursor: pointer