Added support for parameters in presenters
This commit is contained in:
parent
7c8e473e1b
commit
731b98219d
12 changed files with 83 additions and 48 deletions
|
@ -36,6 +36,7 @@
|
||||||
<script type="text/javascript" src="/js/Presenters/MessagePresenter.js"></script>
|
<script type="text/javascript" src="/js/Presenters/MessagePresenter.js"></script>
|
||||||
<script type="text/javascript" src="/js/Presenters/RegistrationPresenter.js"></script>
|
<script type="text/javascript" src="/js/Presenters/RegistrationPresenter.js"></script>
|
||||||
<script type="text/javascript" src="/js/Presenters/UserListPresenter.js"></script>
|
<script type="text/javascript" src="/js/Presenters/UserListPresenter.js"></script>
|
||||||
|
<script type="text/javascript" src="/js/Presenters/UserPresenter.js"></script>
|
||||||
<script type="text/javascript" src="/js/Router.js"></script>
|
<script type="text/javascript" src="/js/Router.js"></script>
|
||||||
<script type="text/javascript" src="/js/Bootstrap.js"></script>
|
<script type="text/javascript" src="/js/Bootstrap.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -74,9 +74,9 @@ App.Auth = function(jQuery, api, appState) {
|
||||||
};
|
};
|
||||||
|
|
||||||
function updateAppState(response) {
|
function updateAppState(response) {
|
||||||
appState.set('loggedIn', response.json.user && !!response.json.user.id);
|
|
||||||
appState.set('loginToken', response.json.token && response.json.token.name);
|
appState.set('loginToken', response.json.token && response.json.token.name);
|
||||||
appState.set('loggedInUser', response.json.user);
|
appState.set('loggedInUser', response.json.user);
|
||||||
|
appState.set('loggedIn', response.json.user && !!response.json.user.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
var App = App || {};
|
var App = App || {};
|
||||||
|
|
||||||
App.Bootstrap = function(auth, router) {
|
App.Bootstrap = function(auth, router, util) {
|
||||||
|
|
||||||
|
util.initPresenter(function() { return App.DI.get('topNavigationPresenter'); });
|
||||||
|
|
||||||
auth.tryLoginFromCookie()
|
auth.tryLoginFromCookie()
|
||||||
.then(startRouting)
|
.then(startRouting)
|
||||||
|
|
|
@ -10,22 +10,19 @@ App.Presenters.LoginPresenter = function(
|
||||||
router,
|
router,
|
||||||
appState) {
|
appState) {
|
||||||
|
|
||||||
topNavigationPresenter.select('login');
|
|
||||||
|
|
||||||
var $el = jQuery('#content');
|
var $el = jQuery('#content');
|
||||||
var $messages;
|
var $messages;
|
||||||
var template;
|
var template;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
topNavigationPresenter.select('login');
|
||||||
util.loadTemplate('login-form').then(function(html) {
|
util.loadTemplate('login-form').then(function(html) {
|
||||||
template = _.template(html);
|
template = _.template(html);
|
||||||
init();
|
|
||||||
});
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
if (appState.get('loggedIn'))
|
if (appState.get('loggedIn'))
|
||||||
router.navigateToMainPage();
|
router.navigateToMainPage();
|
||||||
else
|
else
|
||||||
render();
|
render();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function render() {
|
function render() {
|
||||||
|
@ -55,6 +52,7 @@ App.Presenters.LoginPresenter = function(
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
init: init,
|
||||||
render: render,
|
render: render,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,10 @@ App.Presenters.LogoutPresenter = function(
|
||||||
auth,
|
auth,
|
||||||
router) {
|
router) {
|
||||||
|
|
||||||
topNavigationPresenter.select('logout');
|
|
||||||
|
|
||||||
var $messages = jQuery('#content');
|
var $messages = jQuery('#content');
|
||||||
|
|
||||||
init();
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
topNavigationPresenter.select('logout');
|
||||||
auth.logout().then(function() {
|
auth.logout().then(function() {
|
||||||
var $messageDiv = messagePresenter.showInfo($messages, 'Logged out. <a href="">Back to main page</a>');
|
var $messageDiv = messagePresenter.showInfo($messages, 'Logged out. <a href="">Back to main page</a>');
|
||||||
$messageDiv.find('a').click(mainPageLinkClicked);
|
$messageDiv.find('a').click(mainPageLinkClicked);
|
||||||
|
@ -28,7 +25,9 @@ App.Presenters.LogoutPresenter = function(
|
||||||
router.navigateToMainPage();
|
router.navigateToMainPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {
|
||||||
|
init: init
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,18 +8,15 @@ App.Presenters.RegistrationPresenter = function(
|
||||||
messagePresenter,
|
messagePresenter,
|
||||||
api) {
|
api) {
|
||||||
|
|
||||||
topNavigationPresenter.select('register');
|
|
||||||
|
|
||||||
var $el = jQuery('#content');
|
var $el = jQuery('#content');
|
||||||
var template;
|
var template;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
topNavigationPresenter.select('register');
|
||||||
util.loadTemplate('registration-form').then(function(html) {
|
util.loadTemplate('registration-form').then(function(html) {
|
||||||
template = _.template(html);
|
template = _.template(html);
|
||||||
init();
|
|
||||||
});
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
render();
|
render();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function render() {
|
function render() {
|
||||||
|
@ -84,6 +81,7 @@ App.Presenters.RegistrationPresenter = function(
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
init: init,
|
||||||
render: render,
|
render: render,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,12 @@ App.Presenters.TopNavigationPresenter = function(util, jQuery, appState) {
|
||||||
var $el = jQuery('#top-navigation');
|
var $el = jQuery('#top-navigation');
|
||||||
var template;
|
var template;
|
||||||
|
|
||||||
|
function init() {
|
||||||
util.loadTemplate('top-navigation').then(function(html) {
|
util.loadTemplate('top-navigation').then(function(html) {
|
||||||
template = _.template(html);
|
template = _.template(html);
|
||||||
init();
|
|
||||||
});
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
render();
|
render();
|
||||||
appState.startObserving('loggedIn', 'top-navigation', loginStateChanged);
|
appState.startObserving('loggedIn', 'top-navigation', loginStateChanged);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function select(newSelectedElement) {
|
function select(newSelectedElement) {
|
||||||
|
@ -28,11 +26,15 @@ App.Presenters.TopNavigationPresenter = function(util, jQuery, appState) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function render() {
|
function render() {
|
||||||
$el.html(template({loggedIn: appState.get('loggedIn')}));
|
$el.html(template({
|
||||||
|
loggedIn: appState.get('loggedIn'),
|
||||||
|
user: appState.get('loggedInUser'),
|
||||||
|
}));
|
||||||
$el.find('li.' + selectedElement).addClass('active');
|
$el.find('li.' + selectedElement).addClass('active');
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
init: init,
|
||||||
render: render,
|
render: render,
|
||||||
select: select,
|
select: select,
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,13 +3,10 @@ App.Presenters = App.Presenters || {};
|
||||||
|
|
||||||
App.Presenters.UserListPresenter = function(jQuery, topNavigationPresenter, appState) {
|
App.Presenters.UserListPresenter = function(jQuery, topNavigationPresenter, appState) {
|
||||||
|
|
||||||
topNavigationPresenter.select('users');
|
|
||||||
|
|
||||||
var $el = jQuery('#content');
|
var $el = jQuery('#content');
|
||||||
|
|
||||||
init();
|
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
topNavigationPresenter.select('users');
|
||||||
render();
|
render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +15,7 @@ App.Presenters.UserListPresenter = function(jQuery, topNavigationPresenter, appS
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
init: init,
|
||||||
render: render
|
render: render
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
26
public_html/js/Presenters/UserPresenter.js
Normal file
26
public_html/js/Presenters/UserPresenter.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
var App = App || {};
|
||||||
|
App.Presenters = App.Presenters || {};
|
||||||
|
|
||||||
|
App.Presenters.UserPresenter = function(jQuery, topNavigationPresenter, appState) {
|
||||||
|
|
||||||
|
var $el = jQuery('#content');
|
||||||
|
var userName;
|
||||||
|
|
||||||
|
function init(args) {
|
||||||
|
userName = args.userName;
|
||||||
|
topNavigationPresenter.select(appState.get('loggedIn') && appState.get('loggedInUser').name == userName ? 'my-account' : 'users');
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
function render() {
|
||||||
|
$el.html('Viewing user: ' + userName);
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
init: init,
|
||||||
|
render: render
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
App.DI.register('userPresenter', App.Presenters.UserPresenter);
|
|
@ -1,6 +1,6 @@
|
||||||
var App = App || {};
|
var App = App || {};
|
||||||
|
|
||||||
App.Router = function(jQuery) {
|
App.Router = function(jQuery, util) {
|
||||||
|
|
||||||
var root = '#/';
|
var root = '#/';
|
||||||
|
|
||||||
|
@ -18,16 +18,12 @@ App.Router = function(jQuery) {
|
||||||
Path.listen();
|
Path.listen();
|
||||||
};
|
};
|
||||||
|
|
||||||
function changePresenter(presenterGetter) {
|
|
||||||
jQuery('#content').empty();
|
|
||||||
var presenter = presenterGetter();
|
|
||||||
};
|
|
||||||
|
|
||||||
function injectRoutes() {
|
function injectRoutes() {
|
||||||
inject('#/login', function() { return new App.DI.get('loginPresenter'); });
|
inject('#/login', function() { return App.DI.get('loginPresenter'); });
|
||||||
inject('#/logout', function() { return new App.DI.get('logoutPresenter'); });
|
inject('#/logout', function() { return App.DI.get('logoutPresenter'); });
|
||||||
inject('#/register', function() { return new App.DI.get('registrationPresenter'); });
|
inject('#/register', function() { return App.DI.get('registrationPresenter'); });
|
||||||
inject('#/users', function() { return App.DI.get('userListPresenter'); });
|
inject('#/users', function() { return App.DI.get('userListPresenter'); });
|
||||||
|
inject('#/users/:userName', function() { return App.DI.get('userPresenter'); });
|
||||||
setRoot('#/users');
|
setRoot('#/users');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,7 +34,7 @@ App.Router = function(jQuery) {
|
||||||
|
|
||||||
function inject(path, presenterGetter) {
|
function inject(path, presenterGetter) {
|
||||||
Path.map(path).to(function() {
|
Path.map(path).to(function() {
|
||||||
changePresenter(presenterGetter);
|
util.initContentPresenter(presenterGetter, this.params);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,16 @@ App.Util = (function(jQuery) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initPresenter(presenterGetter, args) {
|
||||||
|
var presenter = presenterGetter();
|
||||||
|
presenter.init.call(presenter, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initContentPresenter(presenterGetter, args) {
|
||||||
|
jQuery('#content').empty();
|
||||||
|
initPresenter(presenterGetter, args);
|
||||||
|
};
|
||||||
|
|
||||||
function loadTemplateWithAJAX(templateName) {
|
function loadTemplateWithAJAX(templateName) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
var templatesDir = '/templates';
|
var templatesDir = '/templates';
|
||||||
|
@ -50,6 +60,8 @@ App.Util = (function(jQuery) {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
loadTemplate: loadTemplate,
|
loadTemplate: loadTemplate,
|
||||||
|
initPresenter : initPresenter,
|
||||||
|
initContentPresenter: initContentPresenter,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
<a href="#/register">Register</a>
|
<a href="#/register">Register</a>
|
||||||
</li>
|
</li>
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
|
<li class="my-account">
|
||||||
|
<a href="#/users/<%= user.name %>"><%= user.name %></a>
|
||||||
|
</li>
|
||||||
<li class="logout">
|
<li class="logout">
|
||||||
<a href="#/logout">Logout</a>
|
<a href="#/logout">Logout</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in a new issue