kidobreva

appController

Apr 7th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var AppController = (function() {
  2.     // Get Templates
  3.     var tmpls = {},
  4.         controllers = {};
  5.  
  6.     function getController(name) {
  7.         return controllers[name];
  8.     }
  9.  
  10.     function getTemplate(tmplName) {
  11.         if (!tmpls[tmplName]) {
  12.             var tmpl = document.getElementById(tmplName + '_tmpl');
  13.             if (tmpl) {
  14.                 tmpls[tmplName] = tmpl.innerHTML;
  15.             }
  16.         }
  17.         return tmpls[tmplName];
  18.     }
  19.  
  20.     function getUrlPage(address) {
  21.         return address
  22.             .split('/')
  23.             .pop()
  24.             .split('.')[0];
  25.     }
  26.  
  27.     function gotoPage(address) {
  28.         var page = getUrlPage(address);
  29.         if (page !== currentPage) {
  30.             showPage(page);
  31.             history.pushState(
  32.                 { page: page },
  33.                 page.slice(0, 1).toUpperCase() + page.slice(1),
  34.                 address
  35.             );
  36.         }
  37.     }
  38.  
  39.     function showPage(page) {
  40.         var templateSrc = getTemplate(page),
  41.             template = Handlebars.compile(templateSrc);
  42.         mainElement.innerHTML = template({});
  43.         //update the title
  44.         document.head.getElementsByTagName('title')[0].textContent =
  45.             page.slice(0, 1).toUpperCase() + page.slice(1);
  46.         initPage(page);
  47.     }
  48.  
  49.     function initPage(page) {
  50.         switch (page.toLowerCase()) {
  51.             case 'register':
  52.                 getController('register').initRegister();
  53.                 break;
  54.             case 'login':
  55.                 getController('login').initLogin();
  56.                 break;
  57.         }
  58.     }
  59.  
  60.     var currentPage = getUrlPage(location.href),
  61.         mainElement = document.querySelector('main'),
  62.         navigations = document.querySelectorAll('nav ul a:not([href="#top"])');
  63.  
  64.     Array.from(navigations).forEach(function(link) {
  65.         link.addEventListener('click', function(event) {
  66.             event.preventDefault();
  67.             gotoPage(this.href);
  68.         });
  69.     });
  70.  
  71.     window.addEventListener('popstate', function() {
  72.         showPage(getUrlPage(location.href));
  73.     });
  74.  
  75.     return {
  76.         addController: function (name, controller) {
  77.             controllers[name] = controller;
  78.         },
  79.         getController: getController
  80.     };
  81. })();
Add Comment
Please, Sign In to add comment