Advertisement
mikeymop

Untitled

Oct 17th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3.   <head lang="en">
  4.       <meta charset="UTF-8">
  5.       <title>Grader Gater</title>
  6.       <link rel="stylesheet" href="index.css">
  7.       <script>
  8.         let loggedin = false;
  9.         function loadSession() {
  10.           var pager = new Pager([
  11.             new Page('login', 'login.html', true),
  12.             new Page('home' , 'home.html'),            
  13.             new Page('test', 'test.html'),
  14.             new Page('question', 'question.html'),
  15.             new Page('about', 'about.html')
  16.           ], this.loggedin);
  17.           return pager;
  18.         }
  19.       </script>
  20.   </head>
  21.   <body onload="loadSession();">
  22.   <div class="app">
  23.     <header>
  24.       <div class="nav"><p>Grader Gater</div>
  25.       <div class="nav" id="nav-btn"><a href="#home">Home</a></div>
  26.       <div class="nav" id="nav-btn"><a href="#about">About</a></div>
  27.       <div class="nav" id="logout-btn" onclick="logout()" style="visibility: hidden;">Logout</div>
  28.     </header>
  29.     <aside></aside>
  30.  
  31.     <main id="main">
  32.     <!-- UI Elements get appended here -->
  33.     </main>
  34.     <script src="js/page.js"></script>
  35.     <script src="js/pager.js"></script>
  36.     <script src="js/util.js"></script>
  37.   </div>
  38.   </body>
  39. </html>
  40.  
  41.  
  42. ------ pager
  43.  
  44. class Pager {
  45.     constructor(pages) {
  46.         this.pages = pages;
  47.         this.mainEl = document.querySelector('main');
  48.         this.init();
  49.   }
  50.  
  51.   init() {
  52.     var p = this.pages;
  53.     var scope = this;
  54.         (function(scope, r) {
  55.             window.addEventListener('hashchange', function (e) {
  56.                 scope.pageChanged(scope, p);
  57.             // https://developer.mozilla.org/en-US/docs/Web/API/Window/hashchange_event
  58.             });
  59.         })(this, p);
  60.         this.pageChanged(this, p);
  61.   }
  62.  
  63.   changePage(pageName) {
  64.         (function(scope) {
  65.             var url = 'pages/' + pageName,
  66.                 xhttp = new XMLHttpRequest();// get xhttp from a file on the server
  67.             xhttp.onreadystatechange = function () {
  68.                 if (this.readyState === 4 && this.status === 200) {
  69.                     scope.mainEl.innerHTML = this.responseText;//set the html under <main>
  70.                 }
  71.             };
  72.             xhttp.open('GET', url, true);
  73.             xhttp.send();
  74.         })(this);//sends the string literal of the xhtml
  75.     }
  76.  
  77.     pageChanged(scope, p){
  78.         if (window.location.hash.length > 0) {//we're measuring the url
  79.             for (var i = 0, length = p.length; i < length; i++) {
  80.                 var page = p[i];
  81.                 if(page.isActivePage(window.location.hash.substr(1))) {
  82.                     scope.changePage(page.pageName);//url/#page
  83.                 }
  84.             }
  85.         } else {
  86.             for (var i = 0, length = p.length; i < length; i++) {
  87.                 var page = p[i];
  88.                 if(page.default) {
  89.                     scope.changePage(page.pageName);
  90.                 }
  91.             }
  92.         }
  93.     }
  94. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement