start over, trying to use the repo slug as an id

This commit is contained in:
Sven Fuchs 2012-06-18 17:41:49 +02:00
parent 89f624d377
commit e14e063b8c

View File

@ -46,26 +46,6 @@ 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 onRepositoryLoaded = function(object, callback) {
// should observe RecordArray.isLoaded instead, but that doesn't seem to exist?
var path = Ember.isArray(object) ? 'firstObject.isLoaded' : 'isLoaded';
onReady(object, path, function() {
callback(object.get('firstObject') || object)
});
}
App.Router = Em.Router.extend({ App.Router = Em.Router.extend({
enableLogging: true, enableLogging: true,
location: 'hash', location: 'hash',
@ -77,10 +57,15 @@ App.Router = Em.Router.extend({
route: '/', route: '/',
connectOutlets: function(router) { connectOutlets: function(router) {
router.connectLayout(null, null, function(repository) { var repositories = App.Repository.find();
// should use repository.lastBuild()
router.connectCurrent(Build.find(1)) 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'),
@ -88,128 +73,112 @@ 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); // params = router.serializeRepository(repository);
// needs to implement findQuery // // needs to implement findQuery
// var repositories = App.Repository.find(params); // // var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) { // var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name; // return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
}) // })
router.connectLayout(repositories, null, function(repository) { // router.connectLayout(repositories, null, function(repository) {
// should use repository.lastBuild() // // should use repository.lastBuild()
router.connectCurrent(App.Build.find(1)) // router.connectCurrent(App.Build.find(1))
}); // });
} // }
}), // }),
viewCurrent: Ember.Route.transitionTo('current'), // viewCurrent: Ember.Route.transitionTo('current'),
history: Em.Route.extend({ // history: Em.Route.extend({
route: '/:ownerName/:name/builds', // route: '/:ownerName/:name/builds',
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); // params = router.serializeRepository(repository);
// needs to implement findQuery // // needs to implement findQuery
// var repositories = App.Repository.find(params); // // var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) { // var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name; // return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
}) // })
router.connectLayout(repository, null, function(repository) { // router.connectLayout(repository, null, function(repository) {
router.connectHistory(App.Build.find()) // router.connectHistory(App.Build.find())
}); // });
} // }
}), // }),
viewHistory: Ember.Route.transitionTo('history'), // viewHistory: Ember.Route.transitionTo('history'),
build: Em.Route.extend({ // build: Em.Route.extend({
route: '/:ownerName/:name/builds/:id', // route: '/:ownerName/:name/builds/:id',
serialize: function(router, build) { // serialize: function(router, build) {
return router.serializeBuild(build); // return router.serializeBuild(build);
}, // },
connectOutlets: function(router, build) { // connectOutlets: function(router, build) {
params = router.serializeBuild(build); // params = router.serializeBuild(build);
// needs to implement findQuery // // needs to implement findQuery
// var repositories = App.Repository.find(params); // // var repositories = App.Repository.find(params);
var repositories = App.Repository.find().filter(function(data) { // var repositories = App.Repository.find().filter(function(data) {
return data.get('owner_name') == params.owner_name && data.get('name') == params.name; // return data.get('owner_name') == params.owner_name && data.get('name') == params.name;
}) // })
var build = App.Build.find(params.id) // var build = App.Build.find(params.id)
router.connectLayout(repositories, build, function(repository) { // router.connectLayout(repositories, build, function(repository) {
router.connectBuild(build) // router.connectBuild(build)
}); // });
} // }
}), // }),
viewBuild: Ember.Route.transitionTo('build') // viewBuild: Ember.Route.transitionTo('build')
}), }),
serializeRepository: function(repository) { // serializeRepository: function(repository) {
return repository.getProperties ? repository.getProperties('ownerName', 'name') : repository; // return repository.getProperties ? repository.getProperties('ownerName', 'name') : repository;
}, // },
serializeBuild: function(build) { // serializeBuild: function(build) {
if(build && build.get) { // if(build && build.get) {
var repository = build.get('repository') || App.Repository.find(build.get('repository_id')); // wat. // var repository = build.get('repository') || App.Repository.find(build.get('repository_id')); // wat.
var params = this.serializeRepository(repository); // var params = this.serializeRepository(repository);
return $.extend(params, { id: build.get('id') }); // return $.extend(params, { id: build.get('id') });
} else { // } else {
return build; // return build;
} // }
}, // },
connectLayout: function(repository, build, callback) { // connectLeft: function(repositories) {
var repositories = App.Repository.find(); // this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories })
// },
this.connectLeft(repositories); // connectMain: function(repository, build) {
this.connectLoading(); // this.setPath('tabsController.repository', repository);
// this.setPath('tabsController.build', build);
onRepositoryLoaded(repository || repositories, function(repository) { // this.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository });
this.connectMain(repository, build) // this.get('repositoryController').connectOutlet({ outletName: 'tabs', name: 'tabs' });
callback(repository); // },
}.bind(this));
},
connectLeft: function(repositories) { // connectCurrent: function(build) {
this.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories }) // this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'current', context: build});
}, // },
connectLoading: function() { // connectHistory: function(builds) {
this.get('applicationController').connectOutlet({ outletName: 'main', name: 'loading' }); // this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'history', context: builds});
}, // },
connectMain: function(repository, build) { // connectBuild: function(build) {
this.setPath('tabsController.repository', repository); // this.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'build', context: build});
this.setPath('tabsController.build', build); // }
this.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository });
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();