szurubooru/public_html/js/Router.js
Marcin Kurczewski 12b43b1bb8 Added endless scroll (closed #5)
The code for paged collections now feels like playing ping-pong with
callbacks, and like I have no idea on who should render who.

It works, though.
2014-10-18 18:48:21 +02:00

72 lines
1.8 KiB
JavaScript

var App = App || {};
App.Router = function(pathJs, _, jQuery, util, appState, presenterManager) {
var root = '#/';
injectRoutes();
function navigateToMainPage() {
window.location.href = root;
}
function navigate(url) {
window.location.href = url;
}
function navigateInplace(url) {
if ('replaceState' in history) {
history.replaceState('', '', url);
pathJs.dispatch(document.location.hash);
} else {
navigate(url);
}
}
function start() {
pathJs.listen();
}
function injectRoutes() {
inject('#/home', 'homePresenter');
inject('#/login', 'loginPresenter');
inject('#/logout', 'logoutPresenter');
inject('#/register', 'registrationPresenter');
inject('#/upload', 'postUploadPresenter');
inject('#/password-reset(/:token)', 'userActivationPresenter', {operation: 'passwordReset'});
inject('#/activate(/:token)', 'userActivationPresenter', {operation: 'activation'});
inject('#/users(/:searchArgs)', 'userListPresenter');
inject('#/user/:userName(/:tab)', 'userPresenter');
inject('#/posts(/:searchArgs)', 'postListPresenter');
inject('#/comments(/:searchArgs)', 'commentListPresenter');
inject('#/tags(/:searchArgs)', 'tagListPresenter');
inject('#/help', 'helpPresenter');
setRoot('#/home');
}
function setRoot(newRoot) {
root = newRoot;
pathJs.root(newRoot);
}
function inject(path, presenterName, additionalParams) {
pathJs.map(path).to(function() {
var finalParams = _.extend(
this.params,
additionalParams,
{previousRoute: pathJs.routes.previous});
presenterManager.switchContentPresenter( presenterName, finalParams);
});
}
return {
start: start,
navigate: navigate,
navigateInplace: navigateInplace,
navigateToMainPage: navigateToMainPage,
};
};
App.DI.registerSingleton('router', ['pathJs', '_', 'jQuery', 'util', 'appState', 'presenterManager'], App.Router);