diff --git a/.jshintrc b/.jshintrc index 45569263..d7283329 100644 --- a/.jshintrc +++ b/.jshintrc @@ -28,6 +28,5 @@ "strict": false, "white": false, "eqnull": true, - "esnext": true, - "unused": true + "esnext": true } diff --git a/app/app.coffee b/app/app.coffee index 8aa55baa..3c0e0168 100644 --- a/app/app.coffee +++ b/app/app.coffee @@ -3,19 +3,6 @@ `import loadInitializers from 'ember/load-initializers'` `import config from './config/environment'` -`import mb from 'travis/helpers/mb'` -`import label from 'travis/helpers/label'` -`import travisField from 'travis/helpers/travis-field'` -`import travisErrors from 'travis/helpers/travis-errors'` -#`import input from 'travis/helpers/input'` -`import filterInput from 'travis/helpers/filter-input'` -Ember.HTMLBars._registerHelper('label', label) -Ember.HTMLBars._registerHelper('travis-field', travisField) -Ember.HTMLBars._registerHelper('travis-errors', travisErrors) -#Ember.Handlebars.registerHelper('input', input) -Ember.HTMLBars._registerHelper('filter-input', filterInput) -Ember.Handlebars.registerBoundHelper('mb', mb) - Ember.MODEL_FACTORY_INJECTIONS = true App = Ember.Application.extend(Ember.Evented, diff --git a/app/components/add-ssh-key.coffee b/app/components/add-ssh-key.coffee index 38bada68..0a77c7b7 100644 --- a/app/components/add-ssh-key.coffee +++ b/app/components/add-ssh-key.coffee @@ -10,17 +10,17 @@ AddSshKeyComponent = Ember.Component.extend didInsertElement: () -> id = @get('repo.id') - model = @get('store').recordForId('sshKey', id) + model = @get('store').recordForId('ssh_key', id) # TODO: this can be removed in favor of simply unloading record # once https://github.com/emberjs/data/pull/2867 # and https://github.com/emberjs/data/pull/2870 are merged if model - @get('store').dematerializeRecord(model) - typeMap = @get('store').typeMapFor('sshKey') + @get('store').dematerializeRecord(model._internalModel) + typeMap = @get('store').typeMapFor(model.constructor) idToRecord = typeMap.idToRecord delete idToRecord[id] - model = @get('store').createRecord('sshKey', id: id) + model = @get('store').createRecord('ssh_key', id: id) @set('model', model) isValid: () -> diff --git a/app/controllers/flash.coffee b/app/components/flash-display.coffee similarity index 66% rename from app/controllers/flash.coffee rename to app/components/flash-display.coffee index 650d2081..dcf379a0 100644 --- a/app/controllers/flash.coffee +++ b/app/components/flash-display.coffee @@ -1,34 +1,37 @@ `import Ember from 'ember'` `import LimitedArray from 'travis/utils/limited-array'` -`import Broadcast from 'travis/models/broadcast'` -Controller = Ember.ArrayController.extend - needs: ['currentUser'] - currentUserBinding: 'controllers.currentUser.model' +FlashDisplayComponent = Ember.Component.extend + auth: Ember.inject.service() + store: Ember.inject.service() + currentUserBinding: 'auth.currentUser' + + classNames: ['flash'] + tagName: 'ul' init: -> @_super.apply this, arguments @set('flashes', LimitedArray.create(limit: 1, content: [])) - model: (-> + messages: (-> broadcasts = @get('unseenBroadcasts') flashes = @get('flashes') model = [] model.pushObjects(broadcasts) if broadcasts model.pushObjects(flashes.toArray().reverse()) if flashes model.uniq() - ).property('unseenBroadcasts.[]', 'flashes.[]') + ).property('unseenBroadcasts.[]', 'flashes.[]', 'unseenBroadcasts.length', 'flashes.length') unseenBroadcasts: (-> @get('broadcasts').filter (broadcast) -> !broadcast.get('isSeen') - ).property('broadcasts.[]') + ).property('broadcasts.[]', 'broadcasts.length') broadcasts: (-> broadcasts = Ember.ArrayProxy.create(content: []) if @get('currentUser.id') - @store.find('broadcast').then (result) -> + @get('store').find('broadcast').then (result) -> broadcasts.pushObjects(result.toArray()) broadcasts @@ -36,20 +39,20 @@ Controller = Ember.ArrayController.extend loadFlashes: (msgs) -> for msg in msgs - type = Ember.keys(msg)[0] + type = Object.keys(msg)[0] msg = { type: type, message: msg[type] } @get('flashes').unshiftObject(msg) Ember.run.later(this, (-> @get('flashes.content').removeObject(msg)), 15000) close: (msg) -> - if msg instanceof Broadcast + if msg.constructor.modelName == "broadcast" msg.setSeen() @notifyPropertyChange('unseenBroadcasts') else @get('flashes').removeObject(msg) actions: - close: (msg) -> + closeMessage: (msg) -> @close(msg) -`export default Controller` +`export default FlashDisplayComponent` diff --git a/app/views/flash-item.coffee b/app/components/flash-item.coffee similarity index 51% rename from app/views/flash-item.coffee rename to app/components/flash-item.coffee index 9b8107f4..5f6df701 100644 --- a/app/views/flash-item.coffee +++ b/app/components/flash-item.coffee @@ -1,6 +1,6 @@ -`import BasicView from 'travis/views/basic'` +`import Ember from 'ember'` -View = BasicView.extend +FlashItemComponent = Ember.Component.extend tagName: 'li' classNameBindings: ['type'] @@ -10,6 +10,6 @@ View = BasicView.extend actions: close: -> - @get('controller').close(@get('flash')) + this.attrs.close(@get('flash')) -`export default View` +`export default FlashItemComponent` diff --git a/app/components/ssh-key.coffee b/app/components/ssh-key.coffee index 33475041..d17b3a03 100644 --- a/app/components/ssh-key.coffee +++ b/app/components/ssh-key.coffee @@ -17,5 +17,4 @@ SshKeyComponent = Ember.Component.extend @get('key').save().then(deletingDone, deletingDone).then => @sendAction('sshKeyDeleted') - `export default SshKeyComponent` diff --git a/app/controllers/repos.coffee b/app/controllers/repos.coffee index ccecfba8..41565100 100644 --- a/app/controllers/repos.coffee +++ b/app/controllers/repos.coffee @@ -23,11 +23,11 @@ Controller = Ember.Controller.extend tabOrIsLoadedDidChange: (-> @possiblyRedirectToGettingStartedPage() - ).observes('isLoaded', 'tab', 'length') + ).observes('isLoaded', 'tab', 'repos.length') possiblyRedirectToGettingStartedPage: -> Ember.run.scheduleOnce 'routerTransitions', this, -> - if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0 + if @get('tab') == 'owned' && @get('isLoaded') && @get('repos.length') == 0 @container.lookup('router:main').send('redirectToGettingStarted') isLoadedBinding: 'repos.isLoaded' diff --git a/app/controllers/ssh-key.coffee b/app/controllers/ssh-key.coffee deleted file mode 100644 index bfa2297f..00000000 --- a/app/controllers/ssh-key.coffee +++ /dev/null @@ -1,73 +0,0 @@ -`import Ember from 'ember'` -`import Validations from 'travis/utils/validations'` - -Controller = Ember.ObjectController.extend Validations, - isEditing: false - isSaving: false - isDeleting: false - defaultKey: null - - needs: ['repo'] - repo: Ember.computed.alias('controllers.repo.repo') - - validates: - value: ['presence'] - - reset: -> - @set('isEditing', false) - - actions: - add: -> - id = @get('repo.id') - model = @store.recordForId('sshKey', id) - # TODO: this can be removed in favor of simply unloading record - # once https://github.com/emberjs/data/pull/2867 - # and https://github.com/emberjs/data/pull/2870 are merged - if model - @store.dematerializeRecord(model) - typeMap = @store.typeMapFor('sshKey') - idToRecord = typeMap.idToRecord - delete idToRecord[id] - - model = @store.createRecord('sshKey', id: id) - @set('model', model) - @set('isEditing', true) - - save: -> - return if @get('isSaving') - @set('isSaving', true) - - if @isValid() - @get('model').save().then => - @set('isEditing', false) - @set('isSaving', false) - , (error) => - @set('isSaving', false) - if error.errors - @addErrorsFromResponse(error.errors) - else - @set('isSaving', false) - - delete: -> - return if @get('isDeleting') - @set('isDeleting', true) - - deletingDone = => @set('isDeleting', false) - - @get('model').deleteRecord() - @get('model').save().then(deletingDone, deletingDone).then => - @set('model', null) - - cancel: -> - if model = @get('model') - if model.get('currentState.stateName') == 'root.empty' || - model.get('currentState.stateName').indexOf('root.loaded.created') != -1 - @store.dematerializeRecord(model) - - @set('model', null) - @set('isEditing', false) - - edit: -> - @set('isEditing', true) - -`export default Controller` diff --git a/app/helpers/capitalize.coffee b/app/helpers/capitalize.coffee deleted file mode 100644 index aacda844..00000000 --- a/app/helpers/capitalize.coffee +++ /dev/null @@ -1,10 +0,0 @@ -`import { safe } from 'travis/utils/helpers'` -`import Ember from "ember"` - -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - if value? - safe $.capitalize(value) - else - '' - -`export default helper` diff --git a/app/helpers/format-commit.coffee b/app/helpers/format-commit.coffee index aaf63643..1e488ac0 100644 --- a/app/helpers/format-commit.coffee +++ b/app/helpers/format-commit.coffee @@ -1,6 +1,7 @@ `import { safe, formatCommit as formatCommitHelper } from 'travis/utils/helpers'` -helper = Ember.Handlebars.makeBoundHelper (commit) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + commit = params[0] safe formatCommitHelper(commit.get('sha'), commit.get('branch')) if commit `export default helper` diff --git a/app/helpers/format-duration.coffee b/app/helpers/format-duration.coffee index 2e5b6e12..9e39dc53 100644 --- a/app/helpers/format-duration.coffee +++ b/app/helpers/format-duration.coffee @@ -1,7 +1,7 @@ `import { timeInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (duration, options) -> - safe timeInWords(duration) +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeInWords(params[0]) `export default helper` diff --git a/app/helpers/format-sha.coffee b/app/helpers/format-sha.coffee index 30f6e444..d0c622bd 100644 --- a/app/helpers/format-sha.coffee +++ b/app/helpers/format-sha.coffee @@ -1,7 +1,7 @@ `import { formatSha as _formatSha, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (sha) -> - safe _formatSha(sha) +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe _formatSha(params[0]) `export default helper` diff --git a/app/helpers/format-time.coffee b/app/helpers/format-time.coffee index 19d21b1a..73078609 100644 --- a/app/helpers/format-time.coffee +++ b/app/helpers/format-time.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe timeAgoInWords(value) || '-' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeAgoInWords(params[0]) || '-' `export default helper` diff --git a/app/helpers/github-commit-link.coffee b/app/helpers/github-commit-link.coffee index e274f270..1b50db32 100644 --- a/app/helpers/github-commit-link.coffee +++ b/app/helpers/github-commit-link.coffee @@ -1,7 +1,9 @@ `import { formatCommit, safe } from 'travis/utils/helpers'` `import { githubCommit as githubCommitUrl } from 'travis/utils/urls'` -helper = Ember.Handlebars.makeBoundHelper (slug, commitSha) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + slug = params[0] + commitSha = params[1] return '' unless commitSha sha = Ember.Handlebars.Utils.escapeExpression formatCommit(commitSha) return sha unless slug diff --git a/app/helpers/humanize-state.coffee b/app/helpers/humanize-state.coffee index ad01c870..f7083b15 100644 --- a/app/helpers/humanize-state.coffee +++ b/app/helpers/humanize-state.coffee @@ -1,7 +1,8 @@ `import { safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (state) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + state = params[0] if state == 'received' 'booting' else diff --git a/app/helpers/input.coffee b/app/helpers/input.coffee deleted file mode 100644 index dc817a07..00000000 --- a/app/helpers/input.coffee +++ /dev/null @@ -1,30 +0,0 @@ -`import Ember from 'ember'` - -originalInputHelper = Ember.Handlebars.helpers.input - -input = (options) -> - # for now I can match label only with the property name - # passed here matches the label - name = (options.hash.value || options.hash.checked) - id = options.hash.id - - # generate id only if it's not given - if name && !name.match(/\./) && !id - labels = @get('_labels') - unless labels - labels = Ember.Object.create() - @set('_labels', labels) - - # for now I support only label + input in their own context - id = labels.get(name) - unless id - id = "#{name}-#{Math.round(Math.random() * 1000000)}" - labels.set(name, id) - - options.hash.id = id - options.hashTypes.id = 'STRING' - options.hashContexts.id = this - - originalInputHelper.call(this, options) - -`export default input` diff --git a/app/helpers/landing-page-last-build-time.coffee b/app/helpers/landing-page-last-build-time.coffee index 424bcde3..83b57769 100644 --- a/app/helpers/landing-page-last-build-time.coffee +++ b/app/helpers/landing-page-last-build-time.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe timeAgoInWords(value) || 'currently running' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe timeAgoInWords(params[0]) || 'currently running' `export default helper` diff --git a/app/helpers/pretty-date.coffee b/app/helpers/pretty-date.coffee index b100b1db..455e9a2b 100644 --- a/app/helpers/pretty-date.coffee +++ b/app/helpers/pretty-date.coffee @@ -1,7 +1,7 @@ `import { timeAgoInWords, safe } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (value, options) -> - safe moment(value).format('MMMM D, YYYY H:mm:ss') || '-' +helper = Ember.HTMLBars.makeBoundHelper (params) -> + safe moment(params[0]).format('MMMM D, YYYY H:mm:ss') || '-' `export default helper` diff --git a/app/helpers/short-compare-shas.coffee b/app/helpers/short-compare-shas.coffee index 606dc491..5d462170 100644 --- a/app/helpers/short-compare-shas.coffee +++ b/app/helpers/short-compare-shas.coffee @@ -1,7 +1,8 @@ `import { pathFrom } from 'travis/utils/helpers'` `import Ember from "ember"` -helper = Ember.Handlebars.makeBoundHelper (url, options) -> +helper = Ember.HTMLBars.makeBoundHelper (params) -> + url = params[0] path = pathFrom(url) if path.indexOf('...') >= 0 shas = path.split('...') diff --git a/app/helpers/travis-errors.coffee b/app/helpers/travis-errors.coffee deleted file mode 100644 index 445a6cad..00000000 --- a/app/helpers/travis-errors.coffee +++ /dev/null @@ -1,24 +0,0 @@ -`import Ember from 'ember'` - -ErrorsView = Ember.View.extend - tagName: 'span' - templateName: 'helpers/travis-errors' - classNames: ['error'] - classNameBindings: ['codes', 'show'] - codes: (-> - @get('errors').mapBy('code') - ).property('@errors', 'errors.length') - show: Ember.computed.notEmpty('errors.[]') - -fn = (params, hash, options, env) -> - name = params[0] - controller = env.data.view.get('controller') - errors = controller.get('errors').for(name) - view = ErrorsView.create( - controller: controller - errors: errors - ) - - env.helpers.view.helperFunction.call(this, [view], hash, options, env) - -`export default fn` diff --git a/app/helpers/travis-field.coffee b/app/helpers/travis-field.coffee deleted file mode 100644 index 60a85fa1..00000000 --- a/app/helpers/travis-field.coffee +++ /dev/null @@ -1,25 +0,0 @@ -`import Ember from 'ember'` - -FormFieldRowView = Ember.View.extend - invalid: Ember.computed.notEmpty('errors.[]') - classNameBindings: ['invalid'] - classNames: 'field' - -fn = (params, hash, options, env) -> - name = params[0] - controller = env.data.view.get('controller') - errors = controller.get('errors').for(name) - template = options.template - delete options.template - - view = FormFieldRowView.create( - controller: controller - template: template - errors: errors - name: name - classNameBindings: ['name'] - ) - - env.helpers.view.helperFunction.call(this, [view], hash, options, env) - -`export default fn` diff --git a/app/helpers/mb.coffee b/app/helpers/travis-mb.coffee similarity index 63% rename from app/helpers/mb.coffee rename to app/helpers/travis-mb.coffee index 59fd38d7..069b1ba8 100644 --- a/app/helpers/mb.coffee +++ b/app/helpers/travis-mb.coffee @@ -4,4 +4,4 @@ fn = (size) -> if size (size / 1024 / 1024).toFixed(2) -`export default fn` +`export default Ember.HTMLBars.makeBoundHelper(fn)` diff --git a/app/initializers/auth.coffee b/app/initializers/auth.coffee index fd167d55..d3706644 100644 --- a/app/initializers/auth.coffee +++ b/app/initializers/auth.coffee @@ -9,7 +9,7 @@ initialize = (container, app) -> app.inject('application', 'auth', 'auth:main') app.inject('component', 'auth', 'auth:main') - app.inject('auth', 'store', 'store:main') + app.inject('auth', 'store', 'service:store') AuthInitializer = name: 'auth' diff --git a/app/initializers/pusher.coffee b/app/initializers/pusher.coffee index 3505c271..857d2d41 100644 --- a/app/initializers/pusher.coffee +++ b/app/initializers/pusher.coffee @@ -1,7 +1,7 @@ `import config from 'travis/config/environment'` `import TravisPusher from 'travis/utils/pusher'` -initialize = (container, application) -> +initialize = (registry, application) -> if config.pusher.key application.pusher = new TravisPusher(config.pusher) @@ -9,9 +9,6 @@ initialize = (container, application) -> application.inject('route', 'pusher', 'pusher:main') - application.pusher.store = container.lookup('store:main') - - PusherInitializer = name: 'pusher' after: 'ember-data' diff --git a/app/instance-initializers/pusher.coffee b/app/instance-initializers/pusher.coffee new file mode 100644 index 00000000..b3e5c38e --- /dev/null +++ b/app/instance-initializers/pusher.coffee @@ -0,0 +1,10 @@ +initialize = (data) -> + data.application.pusher.store = data.container.lookup('service:store') + +PusherInitializer = + name: 'pusher' + after: 'ember-data' + initialize: initialize + +`export {initialize}` +`export default PusherInitializer` diff --git a/app/routes/settings.coffee b/app/routes/settings.coffee index 2c94c1da..226f4de8 100644 --- a/app/routes/settings.coffee +++ b/app/routes/settings.coffee @@ -18,7 +18,7 @@ Route = TravisRoute.extend fetchCustomSshKey: () -> repo = @modelFor('repo') self = this - @store.find('sshKey', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> + @store.find('ssh_key', 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 diff --git a/app/routes/ssh-key.coffee b/app/routes/ssh-key.coffee index b86db4d1..f97d323b 100644 --- a/app/routes/ssh-key.coffee +++ b/app/routes/ssh-key.coffee @@ -8,7 +8,7 @@ Route = TravisRoute.extend model: (params) -> repo = @modelFor('repo') self = this - @store.find('sshKey', repo.get('id')).then ( (result) -> result unless result.get('isNew') ), (xhr) -> + @store.find('ssh_key', 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 diff --git a/app/store.coffee b/app/services/store.coffee similarity index 99% rename from app/store.coffee rename to app/services/store.coffee index a76332c7..0fa61b0e 100644 --- a/app/store.coffee +++ b/app/services/store.coffee @@ -87,6 +87,4 @@ Store = DS.Store.extend data = json.repository || json.repo @pushPayload(repos: [data]) - - `export default Store` diff --git a/app/templates/components/caches-item.hbs b/app/templates/components/caches-item.hbs index eb77701f..4221bd21 100644 --- a/app/templates/components/caches-item.hbs +++ b/app/templates/components/caches-item.hbs @@ -5,7 +5,7 @@
{{format-time cache.last_modified}}
-{{mb cache.size}}MB
+{{travis-mb cache.size}}MB
there is no build
diff --git a/app/templates/layouts/flash.hbs b/app/templates/layouts/flash.hbs index 635ad6a1..8b137891 100644 --- a/app/templates/layouts/flash.hbs +++ b/app/templates/layouts/flash.hbs @@ -1,6 +1 @@ -{{#each flash in controller}} - {{#view "flash-item" flashBinding="flash"}} -{{{flash.message}}}
- - {{/view}} -{{/each}} + diff --git a/app/templates/layouts/home.hbs b/app/templates/layouts/home.hbs index 10517cdc..98a3b537 100644 --- a/app/templates/layouts/home.hbs +++ b/app/templates/layouts/home.hbs @@ -4,7 +4,7 @@ {{render "top"}} - {{render "flash"}} + {{flash-display}}