doesn't seem to make sense to use slugs as ids cuz w're now waiting for the repo to be loaded anyway

This commit is contained in:
Sven Fuchs 2012-06-18 20:23:10 +02:00
parent e14e063b8c
commit 5aa55f2064

View File

@ -5,20 +5,23 @@ App = Em.Application.create();
App.Store = DS.Store.extend({ revision: 4, adapter: DS.fixtureAdapter }); App.Store = DS.Store.extend({ revision: 4, adapter: DS.fixtureAdapter });
App.Repository = DS.Model.extend({ App.Repository = DS.Model.extend({
slug: DS.attr('string'),
ownerName: DS.attr('string'), ownerName: DS.attr('string'),
name: DS.attr('string') name: DS.attr('string'),
}); });
App.Repository.FIXTURES = [
{ id: 1, owner_name: 'travis-ci', name: 'travis-core' },
{ id: 2, owner_name: 'travis-ci', name: 'travis-assets' },
{ id: 3, owner_name: 'travis-ci', name: 'travis-hub' }
];
App.Build = DS.Model.extend({ App.Build = DS.Model.extend({
repository_id: DS.attr('number'), repositoryId: DS.attr('number'),
number: DS.attr('number'), number: DS.attr('number'),
repository: DS.belongsTo('App.Repository') repository: DS.belongsTo('App.Repository')
}); });
App.Repository.FIXTURES = [
{ id: 1, slug: 'travis-ci/travis-core', owner_name: 'travis-ci', name: 'travis-core' },
{ id: 2, slug: 'travis-ci/travis-assets', owner_name: 'travis-ci', name: 'travis-assets' },
{ id: 3, slug: 'travis-ci/travis-hub', owner_name: 'travis-ci', name: 'travis-hub' },
];
App.Build.FIXTURES = [ App.Build.FIXTURES = [
{ id: 1, repository_id: 1, number: 1 }, { id: 1, repository_id: 1, number: 1 },
{ id: 2, repository_id: 1, number: 2 }, { id: 2, repository_id: 1, number: 2 },
@ -46,6 +49,25 @@ App.LoadingView = Em.View.extend({ templateName: 'loading' });
App.store = App.Store.create(); App.store = App.Store.create();
var onReady = function(object, path, callback) {
if(object.getPath(path)) {
callback();
} else {
var observer = function() {
object.removeObserver(path, observer);
callback()
};
object.addObserver(path, observer);
}
};
var onRepositoriesLoaded = function(repositories, callback) {
// should observe RecordArray.isLoaded instead, but that doesn't seem to exist?
onReady(repositories, 'firstObject.isLoaded', function() {
callback(repositories.get('firstObject'))
});
}
App.Router = Em.Router.extend({ App.Router = Em.Router.extend({
enableLogging: true, enableLogging: true,
location: 'hash', location: 'hash',
@ -57,15 +79,9 @@ App.Router = Em.Router.extend({
route: '/', route: '/',
connectOutlets: function(router) { connectOutlets: function(router) {
var repositories = App.Repository.find(); router.connectLayout({}, function(repository) {
router.connectCurrent(App.Build.find(1)) // should use repository.lastBuild()
this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories }) });
this.setPath('tabsController.repository', repository);
this.setPath('tabsController.build', build);
this.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository });
this.get('repositoryController').connectOutlet({ outletName: 'tabs', name: 'tabs' });
}, },
viewCurrent: Ember.Route.transitionTo('current'), viewCurrent: Ember.Route.transitionTo('current'),
@ -73,112 +89,133 @@ App.Router = Em.Router.extend({
viewBuild: Ember.Route.transitionTo('build'), viewBuild: Ember.Route.transitionTo('build'),
}), }),
// current: Em.Route.extend({ current: Em.Route.extend({
// route: '/:ownerName/:name', route: '/:ownerName/:name',
// serialize: function(router, repository) { serialize: function(router, repository) {
// return router.serializeRepository(repository); return router.serializeRepository(repository);
// }, },
// connectOutlets: function(router, repository) { connectOutlets: function(router, repository) {
// params = router.serializeRepository(repository); var params = router.serializeRepository(repository);
// // needs to implement findQuery router.connectLayout(params, function(repository) {
// // var repositories = App.Repository.find(params); router.connectCurrent(App.Build.find(1)) // should use repository.lastBuild()
// var repositories = App.Repository.find().filter(function(data) { });
// return data.get('owner_name') == params.owner_name && data.get('name') == params.name; }
// }) }),
viewCurrent: Ember.Route.transitionTo('current'),
// router.connectLayout(repositories, null, function(repository) { history: Em.Route.extend({
// // should use repository.lastBuild() route: '/:ownerName/:name/builds',
// router.connectCurrent(App.Build.find(1))
// });
// }
// }),
// viewCurrent: Ember.Route.transitionTo('current'),
// history: Em.Route.extend({ serialize: function(router, repository) {
// route: '/:ownerName/:name/builds', return router.serializeRepository(repository);
},
// serialize: function(router, repository) { connectOutlets: function(router, repository) {
// return router.serializeRepository(repository); var params = router.serializeRepository(repository);
// }, router.connectLayout(params, function(repository) {
router.connectHistory(App.Build.find())
});
}
}),
viewHistory: Ember.Route.transitionTo('history'),
// connectOutlets: function(router, repository) { build: Em.Route.extend({
// params = router.serializeRepository(repository); route: '/:ownerName/:name/builds/:id',
// // needs to implement findQuery
// // var repositories = App.Repository.find(params);
// var repositories = App.Repository.find().filter(function(data) {
// return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
// })
// router.connectLayout(repository, null, function(repository) { serialize: function(router, build) {
// router.connectHistory(App.Build.find()) return router.serializeBuild(build);
// }); },
// }
// }),
// viewHistory: Ember.Route.transitionTo('history'),
// build: Em.Route.extend({ connectOutlets: function(router, build) {
// route: '/:ownerName/:name/builds/:id', params = router.serializeBuild(build);
router.connectLayout(params, function(repository, build) {
// serialize: function(router, build) { router.connectBuild(build)
// return router.serializeBuild(build); });
// }, }
}),
// connectOutlets: function(router, build) { viewBuild: Ember.Route.transitionTo('build')
// params = router.serializeBuild(build);
// // needs to implement findQuery
// // var repositories = App.Repository.find(params);
// var repositories = App.Repository.find().filter(function(data) {
// return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
// })
// var build = App.Build.find(params.id)
// router.connectLayout(repositories, build, function(repository) {
// router.connectBuild(build)
// });
// }
// }),
// viewBuild: Ember.Route.transitionTo('build')
}), }),
// serializeRepository: function(repository) { serializeRepository: function(repository) {
// return repository.getProperties ? repository.getProperties('ownerName', 'name') : repository; if(repository instanceof DS.Model) {
// }, return repository.getProperties('ownerName', 'name');
} else {
return repository || {};
}
},
// serializeBuild: function(build) { serializeBuild: function(build) {
// if(build && build.get) { if(build instanceof DS.Model) {
// var repository = build.get('repository') || App.Repository.find(build.get('repository_id')); // wat. // var repository = build.get('repository')
// var params = this.serializeRepository(repository); var repository = App.Repository.find(build.get('repositoryId')); // wat.
// return $.extend(params, { id: build.get('id') }); var params = this.serializeRepository(repository);
// } else { return $.extend(params, { id: build.get('id') });
// return build; } else {
// } return build || {};
// }, }
},
// connectLeft: function(repositories) { connectLayout: function(params, callback) {
// this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories }) var repositories = App.Repository.find();
// }, this.connectLeft(repositories);
this.connectMain(repositories, params, callback);
this.connectRight();
},
// connectMain: function(repository, build) { connectLeft: function(repositories) {
// this.setPath('tabsController.repository', repository); this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories })
// this.setPath('tabsController.build', build); },
// this.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository }); connectRight: function() {
// this.get('repositoryController').connectOutlet({ outletName: 'tabs', name: 'tabs' }); // this.get('applicationController').connectOutlet({ outletName: 'right', name: 'sidebar' })
// }, },
// connectCurrent: function(build) { connectLoading: function() {
// this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'current', context: build}); this.get('applicationController').connectOutlet({ outletName: 'main', name: 'loading' });
// }, },
// connectHistory: function(builds) { connectMain: function(repositories, params, callback) {
// this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'history', context: builds}); this.connectLoading();
// },
// connectBuild: function(build) { if(params.ownerName && params.name) {
// this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'build', context: build}); // needs to implement findQuery
// } // var repositories = App.Repository.find(params);
repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
})
}
var build = params.id ? App.Build.find(params.id) : undefined;
onRepositoriesLoaded(repositories, function(repository) {
this.connectTabs(repository, build);
this.connectRepository(repository);
callback(repository, build);
}.bind(this));
},
connectRepository: function(repository) {
this.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository });
},
connectTabs: function(repository, build) {
this.setPath('tabsController.repository', repository);
this.setPath('tabsController.build', build);
this.get('repositoryController').connectOutlet({ outletName: 'tabs', name: 'tabs' });
},
connectCurrent: function(build) {
this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'current', context: build});
},
connectHistory: function(builds) {
this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'history', context: builds});
},
connectBuild: function(build) {
this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'build', context: build});
}
}); });
App.initialize(); App.initialize();