UNPKG

wise-web-client

Version:

Based on Spine MVC framework

132 lines (117 loc) 5.25 kB
// DesktopRouter.js // ---------------- define(['jquery', 'backbone', './BaseRouter', '../models/SessionModel', 'views/UserStatusView' ], function($, Backbone, BaseRouter, Session, UserStatusView) { var DesktopRouter = BaseRouter.extend({ requresAuth: ['verify-email'], preventAccessWhenAuth: ['login', 'register', 'reset-password'], initialize: function() { // Tells Backbone to start watching for hashchange events this.session = new Session(); // Singleton Views this.userStatusView = new UserStatusView({ session: this.session }); this.userStatusView.render(); Backbone.history.start({ pushState: true // if upper level rewrite, add hashChange: false }); //all internal urls use html5 push status $(document).on('click', 'a[href]:not([data-bypass])', function(e) { e.preventDefault(); if (this.host === location.host && !this.getAttribute('href').match(new RegExp('^\/(font|css|img|js|api)'))) { Backbone.history.navigate(this.getAttribute('href'), true); } else { window.open(this.getAttribute('href'), '_blank'); } }); //TODO demo only remove $(function() { $('button.canvas-toggle').click(function() { // Calling a function in case you want to expand upon this. $('#page-wrapper').toggleClass('show'); }); $('#second-panel').on('click', 'button.close', function() { // Calling a function in case you want to expand upon this. $('#second-panel').addClass('sr-only'); }); }); }, // All of your Backbone Routes (add more) routes: { // When there is no hash on the url, the home method is called '': 'home', 'login': 'login', 'register': 'register', 'verify-email/:token': 'verifyEmail', 'reset-password': 'resetPassword', 'reset-password/:token': 'resetPassword', '*anything': 'notFound' }, //Route handlers home: function() { require(['views/HomePageView'], function(HomePageView) { this.loadView(new HomePageView({ session: this.session })); }.bind(this)); }, login: function() { // if already login, redirect to home page if (this.session.isLogin()) { Backbone.history.navigate('/', true); } else { require(['views/LoginPageView'], function(LoginPageView) { this.loadView(new LoginPageView({ session: this.session })); }.bind(this)); } }, register: function() { require(['views/RegisterPageView'], function(RegisterPageView) { this.loadView(new RegisterPageView({ session: this.session })); }.bind(this)); }, verifyEmail: function(token) { require(['views/EmailVerifyPageView'], function(EmailVerifyPageView) { this.loadView(new EmailVerifyPageView({ session: this.session, token: token })); }.bind(this)); }, resetPassword: function(token) { if (!token) { require(['views/ResetPasswordPageView'], function(ResetPasswordPageView) { this.loadView(new ResetPasswordPageView({ session: this.session })); }.bind(this)); } else { require(['views/UpdatePasswordPageView'], function(UpdatePasswordPageView) { this.loadView(new UpdatePasswordPageView({ session: this.session, token: token })); }.bind(this)); } }, notFound: function() { require(['views/StaticPageView'], function(StaticPageView) { this.loadView(new StaticPageView({ session: this.session, content: 'not_found' })); }.bind(this)); } }); // Returns the DesktopRouter class return DesktopRouter; } );